在verilog编写组合逻辑电路的时候会遇到敏感列表的信号应该包含哪些的问题,因此做如下仿真来验证信号敏感列表对电路的影响。在两个仿真例中通过设定不同的信号敏感列表来对比综合出来的仿真结果从而验证 信号敏感列表不影响最终的电路
信号敏感列表不完整
module mod_test(
rd,
rst,
outdata
);
input rd;
input rst;
output reg outdata;
always@(rst)
if(!rst)
outdata = 1'b0;
else
outdata = rd;
endmodule
RTL视图
前仿真
后仿真
信号敏感列表完整
module mod_test(
rd,
rst,
outdata
);
input rd;
input rst;
output reg outdata;
always@(rst or rd)
if(!rst)
outdata = 1'b0;
else
outdata = rd;
endmodule
RTL视图
前仿真
后仿真
结论
always信号敏感列表是否完整对综合出来的RTL视图、门级仿真、最终电路没有影响,但是会影响行为级仿真,不在敏感信号列表里面的信号无法触发和该信号相关的仿真进程,也就得不到正确的仿真结果。在verilog_IEEE官方标准手册-2005_IEEE_P1364手册有如下表述。
强调应该将所有的相关输入信号与条件判断信号都包含在敏感列表,否则将影响行为级仿真。因此如果在设计中希望通过修改敏感信号列表来得到不同的逻辑只能影响行为级仿真无法影响最终综合得到的电路。所以个人认为在使用always构建逻辑电路时采用always@(*)更加保险。
来源:https://blog.csdn.net/u014070258/article/details/99672289