yuedx的个人空间 https://blog.eetop.cn/317611 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Verilog阻塞式赋值与非阻塞式赋值的分析

已有 2271 次阅读| 2009-3-17 12:31

在Verilog HDL中,有两种过程性赋值方式,即阻塞式(blocking)和非阻塞式(non-blocking)。这两种赋值方式看似差不多,其实在某些情况下却有着根本的区别,如果使用不当,综合出来的结果和你所想得到的结果会相去甚远。

Tip:所谓过程性赋值就是指在initial或always语句内的赋值,它只能对寄存器数 据类型的变量赋值。

阻塞式(blocking)的操作符为 “ = ”
非阻塞式(non-blocking)的操作符为 “ <= ”

首先,我们通过两个例子来看看这两种赋值方式的区别,这里使用的综合工具为DC。

例1:非阻塞式赋值
module nonblock (clock,in1,in2,in3,in4,out);
input clock,in1,in2,in3,in4; 
output out;
reg out;
reg f;

always @ (posedge clock)
begin
  f <= in2 | in3;         //语句1
  if (in1)
     out <= f & in4;    //语句2
  else
     out <= in4;
end
endmodule

例1综合后的结果为(**注**):

module nonblock ( clock, in1, in2, in3, in4, out );
input  clock, in1, in2, in3, in4;
output out;
    wire f, n_6;
    mfntnq out_reg ( .q(out), .da(n_6), .db(in4), .sa(in1), .cp(clock) );
    mfntnq f_reg ( .q(f), .da(1'b1), .db(in2), .sa(in3), .cp(clock) );
    an02d1 U10 ( .z(n_6), .a1(f), .a2(in4) );
endmodule

为了更直观,给出相应的schematic:

 
例2:阻塞式赋值

module block (clock,in1,in2,in3,in4,out);
input clock,in1,in2,in3,in4;
output out;
reg out;
reg f;

always @ (posedge clock)
begin
  f = in2 | in3;    //语句1
  if (in1)
  ut = f & in4;   //语句2
  else
    ut = in4;
end
endmodule

例2综合后的结果为:

module block ( clock, in1, in2, in3, in4, out );
input  clock, in1, in2, in3, in4;
output out;
wire n_6;
    mfntnq out_reg ( .q(out), .da(n_6), .db(in4), .sa(in1), .cp(clock) );
    oa14d0 U10 ( .z(n_6), .a1(in3), .a2(in2), .b(in4) );
endmodule

相应的schematic:

 
分析:
大家可以看到,例1和例2的code写法完全一样,只是在always语句块中使用了不同的赋值方式,就导致综合出来的结果不同。
在例1中,是非阻塞式赋值方式,非阻塞式赋值的赋值对象总是在当前仿真时刻结束时被赋值,所以,当在对语句2中的out赋值这一时刻, f  值还没有得到语句1中的新值,而是原来的值(即上一个时刻的值)。
而在例2中,使用了阻塞式赋值方式,就是在always语句块中是一句一句执行的。在执行语句2之前,语句1就已经执行完成,f被赋好了新值,所以语句2中的f值取的是新值。

建议:
1. 阻塞式赋值用于组合逻辑建模;
2. 非阻塞式赋值用于时序逻辑建模。


点赞

发表评论 评论 (3 个评论)

回复 ydlm42sj 2009-5-9 11:56

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 13

    粉丝
  • 1

    好友
  • 35

    获赞
  • 156

    评论
  • 4698

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-26 12:09 , Processed in 0.015997 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部