规则 #1: 建立时序逻辑模型时,采用非阻塞赋值语句。
规则 #2: 建立latch模型时,采用非阻塞赋值语句。
规则 #3: 在always块中建立组合逻辑模型时,采用阻塞赋值语句。
规则 #4: 在一个always块中同时有组合和时序逻辑时时,采用非阻塞赋值语句。
规则 #5: 不要在一个always块中同时采用阻塞和非阻塞赋值语句。
规则 #6: 同一个变量不要在多个always块中赋值。
规则 #7: 调用$strobe系统函数显示用非阻塞赋值语句赋的值。
规则 #8: 不要使用#0延时赋值。
组合逻辑
1,敏感变量的描述完备性
Verilog中,用always块设计组合逻辑电路时,
1.1在赋值表达式右端参与赋值的所有信号都必须在always @(敏感电平列表)中列出,
1.2always中if语句的判断表达式必须在敏感电平列表中列出。
1.3**如果在赋值表达式右端引用了敏感电平列表中没有列出的信号,在综合时将会
为没有列出的信号隐含地产生一个透明锁存器。
注:这是因为该信号的变化不会立刻引起所赋值的变化,
而必须等到敏感电平列表中的某一个信号变化时,它的作用才表现出来
即相当于存在一个透明锁存器,把该信号的变化暂存起来,待敏感电平列
表中的某一个信号变化时再起作用,纯组合逻辑电路不可能作到这一点。
综合器会发出警告。
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
|