Verilog中always电平敏感信号列表的一点问题
下面一段文章的描述谁是正确呢?网上搜索了一下没找到正确答案。下面内容来自某作者博客,他认为错误的这句话在夏宇闻老师教材中也是这样说的。若此人观点是正确的话,是否可以这样认为:
always实现组合逻辑,敏感列表不完整或者多余时只是在仿真时会出现问题,综合布局部线后eda工具会默认将所有always过程中的输入信号和条件判断语句作为触发信号,增减敏感信号列表中的信号不会对最终的执行结果产生影响。
----------------------------------------------------------------------------------
组合逻辑电路的设计,在谈到always电平敏感信号列表时,网上有的说:
“
在赋值表达式右端参与赋值的所有信号都必须在always @(敏感电平列表)中列出,always中if语句的判断表达式必须在敏感电平列表中列出。如果在赋值表达式右端引用了敏感电平列表中没有列出的信号,在综合时将会为没有列出的信号隐含地产生一个透明锁存器。这是因为该信号的变化不会立刻引起所赋值的变化,而必须等到敏感电平列表中的某一个信号变化时,它的作用才表现出来,即相当于存在一个透明锁存器,把该信号的变化暂存起来,待敏感电平列表中的某一个信号变化时再起作用,纯组合逻辑电路不可能作到这一点。综合器会发出警告。
”
这句话是错的!而事实的真相应该是这段话:
“
敏感信号列表出现在always块中,其典型行为级的含义为:只要敏感信号列表内的信号发生电平变化,则always模块中的语句就执行一次,因此设计人员必须将所有的输入信号和条件判断信号都列在信号列表中。有时不完整的信号列表会造成不同的仿真和综合结果,因此需要保证敏感信号的完备性。在实际的PLD 器件开发中,EDA 工具都会默认将所有的输入信号和条件判断语句作为触发信号,增减敏感信号列表中的信号不会对最终的执行结果产生影响,因此如果期望在设计中通过修改敏感信号来得到不同的逻辑,那就大错特错了。当敏感信号不完备时,会使得仿真结果不一样,这是因为仿真器在工作时不会自动补充敏感信号表。如果缺少信号,则无法触发和该信号相关的仿真进程,也就得不到正确的仿真结果。
”
必须将所有的输入信号和条件判断信号都列在信号列表中
有一种输入方式是:
always@(*)
begin
....
end
此时,综合工具和仿真工具会自动将所有的敏感信号自动加入敏感信号列表。 关注 always@(*)
是verilog2001标准里新添加的特性。现在的综合器基本都支持了。因此只要这样写就好了。 理论上是的,对于组合逻辑,敏感信号主要是用于仿真的。
如果想偷懒,就用always @(*)吧。或者干脆用有自动补全敏感信号列表功能的编辑器(比如emacs/Vim)。 了解,谢谢以上各位答复。 always @(*)
always @*
有括号没括号;有空格没空格都行。 回复【5楼】tear086.COM 缺氧
always @(*)
always @*
有括号没括号;有空格没空格都行。
-----------------------------------------------------------------------
其实我不是问的always @(*) 问题,呵呵,不过这个对新手应该听迷惑的,google一下就可以得到答案了。现在正在研究一些always敏感电平,FSM,modelsim仿真的问题,不过都是工作之余在搞,进展稍微缓慢一点,后面会写点简单程序仿一下。 这样的语法也有.................. 不全及其有可能会产生latch的 “敏感列表不完整或者多余时只是在仿真时会出现问题,综合布局部线后eda工具会默认将所有always过程中的输入信号和条件判断语句作为触发信号,增减敏感信号列表中的信号不会对最终的执行结果产生影响。 ”
Example1:
input a,b,c;
reg e,d;
always @(a or b or c)
begin
e=d&a&b; /*d没有在敏感电平列表中,d变化时e不会立刻变化,直到a,b,c中某一个变
化*/
d=e |c;
end
Example2:
input a,b,c;
reg e,d;
always @(a or b or c or d)
begin
e=d&a&b; /*d在敏感电平列表中,d变化时e立刻变化*/
d=e |c;
end 似乎有点懂了! mark 了解了解。 如果是异步信号也要出现在always列表中。
如:
always @(posedge CLK or negedge CLR)
begin
if (~CLR)
Q <=0;
else
Q <=D;
end
上面如果没有negedge CLR,D触发器中就没有异步清零端CLR 下午看书读到了lz帖子中的第一段描述,刚好学习下~谢谢大家了 学习了 感谢 !{:lol:} 看看~~~~~~~~~~~~~~~~~~~~~·· minux 发表于 2010-5-18 17:24
理论上是的,对于组合逻辑,敏感信号主要是用于仿真的。
如果想偷懒,就用always @(*)吧。或者干脆用有自 ...
给赞一个 说得好!好,好,好,好,好!
页:
[1]