Verilog &引用;如果;在always块的灵敏度列表中的always或condition内?

Verilog &引用;如果;在always块的灵敏度列表中的always或condition内?,verilog,Verilog,这两种代码的行为方式相同吗 always @(a == 1'b1) // I guess for this one, it's like a combinational if (AND gate logic : a AND 1). // code 及 这是真的吗 这是一个基本问题,但我想知道我是否遗漏了什么,谢谢 不,两者不一样。 请注意,灵敏度列表中的变量被视为事件 因此,它们不会被执行,而只是变量的变化 被认为是该事件的触发因素 所以第一个始终是块 always @ (a==1'b

这两种代码的行为方式相同吗

always @(a == 1'b1) // I guess for this one, it's like a combinational if (AND gate logic : a AND 1).
    // code

这是真的吗


这是一个基本问题,但我想知道我是否遗漏了什么,谢谢

不,两者不一样。

请注意,灵敏度列表中的变量被视为事件 因此,它们不会被执行,而只是变量的变化 被认为是该事件的触发因素

所以第一个始终是块

always @ (a==1'b1)
同:

always @ (a)

因此1st always block将使用a=1和0执行,而在第二种情况下,由于“if”条件,它将只使用a=1执行

,我想,这两种情况应该表现相同<代码>始终@(a)。。如果(a=='b1).是
always@(a=='b1)
的简写。但是对于RTL,你不应该使用这两个选项中的任何一个,而应该使用
always@*
我试图理解RTL verilog,但是我们不能在两个不同的always块中分配一个reg。。。在这个条件下,我可以指定一个reg值(例如“case”)。Verilog很难使“启用”和“完成”位变得有点复杂。我们不能在两个不同的always块中分配reg“不,你不能,因为你知道什么硬件可以做到这一点。由两段不同代码驱动的输出。哪一个是主动的?通过两个不同的值并使用mux选择激活的值,很容易解决问题。“Verilog很难用“启用”和“完成”位使事情变得有点复杂。”是和否,你不构建软件,所以你必须弄清楚它是如何在硬件中完成的。它是通过构建一个状态机在硬件中完成的,使输入从空闲状态移动到活动状态。在返回空闲之前,finish标志在最终状态下被提升。很抱歉,但我没有理解“反转”是什么意思?
因此第一个always块将以a=1和0执行,而在第二种情况下,由于“if”条件,它将仅以a=1执行,但第一个always块将仅以a=1执行。第二个always块将同时在两个位置执行,分别为a1或0。不,情况并非如此。因为您在事件中编写了表达式,所以不会对该表达式求值。所以第一个always块与:always@(a)相同
always @ (a)