1、学verilog 一个月了,在开发板上面写了很多代码,但是始终对一些问题理解的不够透彻,这里我们来写几个例子仿真出阻塞和非阻塞的区别,我们先上代码
module LED
(
CLK, RSTn,
scan,
flag ,
c,
,one,two,three,four
);
input CLK;
input RSTn;
input scan;
output flag,c;
output [3:0] one,two,three,four;
/***********************************************************/
reg F1,F2;
reg a,b;
reg [3:0] one,two,three,four;
/********************信号传递之间的非阻塞赋值***************************************/
always @ ( posedge CLK or negedge RSTn ) //
if( !RSTn )
begin
F1 <= 1'b1;
F2 <= 1'b1;
end
else
begin
F1 <= scan;
F2 <= F1;
end
/*******************信号传递之间的阻塞赋值****************************************/
always @ ( posedge CLK or negedge RSTn ) //
if( !RSTn )
begin
a = 1'b1;
b = 1'b1;
end
else
begin
a = scan;
b = a;
end
/******************数据加 非阻塞赋值 先判断后计数*****************************************/
always @ ( posedge CLK or negedge RSTn ) //one <=
if( !RSTn )
begin
one<=0;
end
else
begin
if(one==14)
one<=0;
else
one<=one+1;
end
/***************数据加 非阻塞赋值 先计数后判断********************************************/
always @ ( posedge CLK or negedge RSTn ) // two<=
if( !RSTn )
begin
two<=0;
end
else
begin
two<=two+1;
if(two==14)
two<=0;
end
/**************数据加 阻塞赋值 先判断后计数*********************************************/
always @ ( posedge CLK or negedge RSTn ) //three =
if( !RSTn )
begin
three=0;
end
else
begin
if(three==14)
three=0;
else
three=three+1;
end
/*************数据加 阻塞赋值 先计数后判断**********************************************/
always @ ( posedge CLK or negedge RSTn ) //four =
if( !RSTn )
begin
four=0;
end
else
begin
four=four+1;
if(four==14)
four=0;
end
/****************信号之间传递***********************/
assign flag = F2 & !F1;
assign c = b & !a;
/***************************************/
endmodule |