标签:style blog http color sp strong on div 2014
1 module main(); 2 reg [5:0] a=0; 3 reg [5:0] b=0; 4 reg clk=0; 5 6 always@(clk) 7 begin 8 a<=a+3; 9 b<=b+1; 10 end 11 12 always@(b) 13 begin 14 a<=a+2; 15 end 16 17 always #50 clk=~clk; 18 endmodule
看看上面的输出结果是什么?
在看看这段代码:
1 module main(); 2 reg clk=0; 3 reg [5:0] a=0; 4 reg [5:0] b=0; 5 6 always@(clk) 7 begin 8 a<=a+3; 9 b<=b+1; 10 end 11 12 always@(b) 13 begin 14 a<=a+2; 15 end 16 17 always #50 clk=~clk; 18 endmodule
差别只在于2~4行,输出结果:
原因在于:
如果把上面的 <= 都改成 = 那自然每条触发都会执行,这个就好理解了。
但如果触发A改变的是同一个信号(那一定同时),那就看谁在位置上的后面了:
1 `timescale 1ns / 1ps 2 module main(); 3 reg clk=0; 4 reg [5:0] a=0; 5 6 always #50 clk=~clk; 7 8 always@(clk) 9 begin 10 a<=a+3; 11 end 12 13 always@(clk) 14 begin 15 a<=a+2; 16 end 17 18 endmodule 19
1 `timescale 1ns / 1ps 2 module main(); 3 reg clk=0; 4 reg [5:0] a=0; 5 6 always #50 clk=~clk; 7 8 always@(clk) 9 begin 10 a<=a+2; 11 end 12 13 always@(clk) 14 begin 15 a<=a+3; 16 end 17 18 endmodule
但是可以避免的话尽量不要出现同一个变量多处赋值的情况,很容易出错。
verilog同一个reg变量同时发生多个阻塞赋值的情况分析
标签:style blog http color sp strong on div 2014
原文地址:http://www.cnblogs.com/wkl7123/p/4131671.html