首页 > 其他 > 详细

verilog 阻塞赋值和非阻塞赋值

时间:2014-11-30 00:16:39      阅读:293      评论:0      收藏:0      [点我收藏+]
 1 module main();
 2 reg clk=0;
 3 reg [11:0] a=0;
 4 reg [11:0] b=0;
 5 always #50 clk=~clk;
 6 always@(clk)
 7 begin
 8    a=a+4;
 9    b<=a/4;
10 end
11 endmodule

如果把always中的两句顺序倒一下输出结果会改变是为什么?

上面的程序0~50s时,b=1;改成下面情形后b=0;
 1   module main();
 2   reg clk=0;
 3   reg [11:0] a=0;
 4   reg [11:0] b=0;
 5   always #50 clk=~clk;
 6   always@(clk)
 7   begin
 8      b<=a/4;
 9      a=a+4;
10  end
11  endmodule

1) 在赋值时刻开始时,计算非阻塞赋值 RHS 表达式。
2) 在赋值时刻结束时,更新非阻塞赋值 LHS 表达式。

 

在编写时牢记这八个要点可以为绝大多数的Verilog 用户解决在综合后仿真中出现的 90-100% 的冒险竞争问题。

1) 时序电路建模时,用非阻塞赋值。
2) 锁存器电路建模时,用非阻塞赋值。
3) 用 always 块建立组合逻辑模型时,用阻塞赋值。
4) 在同一个 always 块中建立时序和组合逻辑电路时,用非阻塞赋值。
5) 在同一个 always 块中不要既用非阻塞赋值又用阻塞赋值。
6) 不要在一个以上的 always 块中为同一个变量赋值。
7) 用$strobe 系统任务来显示用非阻塞赋值的变量值
8) 在赋值时不要使用 #0 延迟


推荐这篇博客
http://www.cnblogs.com/layup/archive/2013/05/14/3078605.html

 

 

 

verilog 阻塞赋值和非阻塞赋值

原文:http://www.cnblogs.com/wkl7123/p/4132250.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!