gpt4 book ai didi

verilog - Verilog 始终@* 敏感度列表中包含哪些内容?

转载 作者:行者123 更新时间:2023-12-02 21:25:12 25 4
gpt4 key购买 nike

当您在 always block 敏感度列表中使用通配符 @* 时,我对什么被视为输入有点困惑。例如,在下面的示例中,哪些信号被解释为导致 always block 被重新评估的输入?

据我了解,clkreset不包括在内,因为它们不会出现在always中任何程序语句的右侧 block 。包含 ab 是因为它们都出现在 always block 中过程语句的右侧。

但是,我真正困惑的是enmux。因为它们在 ifcase 语句中用作测试条件,所以它们是否被视为输入?每次 enmux 更改值时,是否会重新评估 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 的结果发生变化,将包含在 @* 中。使用的读取信号的任何更改都必须导致模块重新评估,因为它可能导致模块的输出发生变化。我相信您知道,如果您没有使用 @*,您将手动列出这些信号。

对于您提供的代码,它是任何信号:

  • 在作业的右侧进行评估(ab)
  • 作为条件条件的一部分进行评估(enmux)

...但它是出于任何原因都会被评估的任何信号。 (我现在想不出任何其他原因,但也许其他人可以)

clkreset 不在敏感度列表中,因为它们未被使用。就那么简单。他们没有什么特别之处;它们和其他信号一样。

关于verilog - Verilog 始终@* 敏感度列表中包含哪些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9659038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com