VERILOG IF BEGIN 语句的执行顺序

2025-03-22 16:39:26
推荐回答(3个)
回答1:

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

这就是个顺序的判断语句。

回答2:

这个跟C语言差不多吧,begin end可以看作C中的{};
功能具体解释:
if(rst_i) 如果复位,等200us计数器置零,
else 如果计数器当前状态为init_idle,200us计数器赋值一个已知值,不然就进行倒计时。实现的功能就是一个定时器的功能。时间个数*clk周期=定时200us

回答3:

虽然看似顺序的但硬件的行为是并行的,满足哪个条件执行你那里的begin end语句!