always @(posedge clock)
case(state)
`STATE0: begin
state <= `STATE1;
// Code here
// Wait 5ms before advancing
end
`STATE1: begin
state <= `STATE2;
// Code here
// Wait 5ns before advancing
end
`STATE2: begin
state <= `STATE0;
// Code here
// Wait 5s before advancing
end
default:begin
state <= `STATE0;
// Code here
end
endcase
end
是否可以将等待语句添加到设计中,它必须等待x个时间单位才能进入下一个状态?
我知道它可以使用#
在我的测试平台中手动完成,但我的设计要求在我继续之前需要一定的等待时间。
答案 0 :(得分:2)
对于短暂的延迟(几个时钟周期),最简单的方法是将几个“虚拟”状态作为预期状态之间的中介来实现。
对于更长的延迟,使用计数器作为启用信号在状态之间传输:
reg [31:0] count;
always@(posedge clock)
if (SOME RESET) count <=0;
else count <= count + 1;
always @(posedge clock)
//...
STATE_N: if (count == SOME_NUMBER_OF_CYCLES) state <= STATE_NPLUSONE;
else state <= STATE_N;