Verilog语法是这样说的,“always”块中的语句称为“顺序语句”,这个程序就是一个“always”块,所以必定是顺序执行的,值得注意的是,但你的程序有多个并行块(包括initial块、always块,连续赋值语句assign,实例引用)时,各个块是同时执行的。
这个程序这样写就看得出层次关系了:
always@ (posedge clk_i)
begin
if (rst_i)
begin
wait_200us_cntr <= 0;
end
else if (current_init_state == INIT_IDLE)
begin
wait_200us_cntr <= WAIT_200us_CNTR_VALUE;
end
else begin
wait_200us_cntr <= wait_200us_cntr - 16'b1;
end
end
这就是个顺序的判断语句。
这个跟C语言差不多吧,begin end可以看作C中的{};
功能具体解释:
if(rst_i) 如果复位,等200us计数器置零,
else 如果计数器当前状态为init_idle,200us计数器赋值一个已知值,不然就进行倒计时。实现的功能就是一个定时器的功能。时间个数*clk周期=定时200us
虽然看似顺序的但硬件的行为是并行的,满足哪个条件执行你那里的begin end语句!