作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当您在 always
block 敏感度列表中使用通配符 @*
时,我对什么被视为输入有点困惑。例如,在下面的示例中,哪些信号被解释为导致 always
block 被重新评估的输入?
据我了解,clk和reset不包括在内,因为它们不会出现在always中任何程序语句的右侧
block 。包含 a 和 b 是因为它们都出现在 always
block 中过程语句的右侧。
但是,我真正困惑的是en和mux。因为它们在 if 和 case 语句中用作测试条件,所以它们是否被视为输入?每次 en 和 mux 更改值时,是否会重新评估 always
block ?
module example
(
input wire clk, reset, en, a, b,
input wire [1:0] mux,
output reg x,y, z
);
always @*
begin
x = a & b;
if (en)
y= a | b;
case(mux)
2'b00: z = 0;
2'b01: z = 1;
2'b10: z = 1;
2'b11: z = 0;
endcase
end
endmodule
最佳答案
在 block 内读取的任何信号,如果其值发生变化,可能会导致 block 的结果发生变化,将包含在 @*
中。使用的读取信号的任何更改都必须导致模块重新评估,因为它可能导致模块的输出发生变化。我相信您知道,如果您没有使用 @*
,您将手动列出这些信号。
对于您提供的代码,它是任何信号:
a
和 b
)en
和 mux
)...但它是出于任何原因都会被评估的任何信号。 (我现在想不出任何其他原因,但也许其他人可以)
clk
和 reset
不在敏感度列表中,因为它们未被使用。就那么简单。他们没有什么特别之处;它们和其他信号一样。
关于verilog - Verilog 始终@* 敏感度列表中包含哪些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9659038/
我目前有一个流量非常高的服务(大约 1000 个连接/秒,并且这不能再通过优化来减少)。直到 1 周前,我还在 AWS 工作,并调整了我的一些 apache/NGNIX 配置来处理该负载。完全没有问题
我是一名优秀的程序员,十分优秀!