在一个模6的计数器中,充分认识到了非阻塞赋值的用法,开始的代码是这样的:
/*+FHDR--------------------------------------------------------
file name: counter6.v
Author: Clarke.Lee
E-mail: clarke.lee@163.com
--------------------------------------
Keywords: Counter
//-FHDR---------------------------------------------------------*/
module counter6(clk,
reset,
cout,
out);
input clk;
input reset;
output cout;
output [2:0] out;
reg cout;
reg [2:0] out;
reg [2:0] counter;
always@(posedge clk)
if(!reset)
begin
out <= 0;
counter <= 0;
end
else if(counter<6)
begin
cout <= 0;
counter <= (counter + 1);
out <= counter;
end
else
begin
out <= 0;
counter <= 0;
cout <= 1;
end
endmodule
仿真图形:
而后改为:
if(!reset)
begin
out <= 0;
counter <= 0;
end
else if(counter<6)
begin
cout <= 0;
counter <= (counter + 1);
out <= counter;
end
else
begin
out <= counter;
counter <= 0;
cout <= 1;
end
仿真波形:
再改:
if(!reset)
begin
out <= 0;
counter <= 0;
end
else if(counter<6)
begin
cout <= 0;
counter <= (counter + 1);
out <= counter;
end
else
begin
out <= 0;
counter <= 1;
cout <= 1;
end
仿真波形:
终于符合了要求,比较一下红色部分,就可以理解非阻塞赋值是在always块结束后对块中所有的赋值语句进行赋值,从电路的角度来考虑就是几个同步的触发器一起触发赋值!