首页 > 代码库 > verilog 阻塞赋值和非阻塞赋值
verilog 阻塞赋值和非阻塞赋值
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 end11 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 end11 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 阻塞赋值和非阻塞赋值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。