代码中截取的一部分,主要是红色字体部分
reg [1:0] SpiClk_flag;
reg [1:0] Spi_State;
always @ ( posedge SysClk)
begin
if( SysRst )
begin
SpiClk_flag <= 'd0;
Spi_State <= idle;
end
else begin
case( Spi_State )
idle :begin
SpiClk_flag <= 'd0;
Spi_State <= idle;
end
send_cmd :begin //主要是以下的非阻塞赋值,有些晕
SpiClk_flag <=SpiClk_flag+1; //每次进入send_cmd状态下,都先对SpiClk_flag寄存器加1
if(SpiClk_flag == 'd1) //是否执行完上条语句后,就满足SpiClk_flag == 'd1的条件
begin
SpiClk_flag <=0; //能在一个系统时钟下,对SpiClk_flag执行加1,然后又写入0,同一时钟进行两次赋值?
end
else // 下一个系统时钟后,SpiCli_flag=0时才会执行else下面语句,但每次进入send_cmd状态都是SpiClk_flag加1,面
begin
SpiClk <= 1'b1;
。。。。//省略的代码
end
end
//省略以下代码
估计还是非阻塞理解的不好,请各位帮忙指点,多谢! |