FPGA实现算法中的逻辑,执行不同状态的切换是关键。现对近期实现的几个功能中用到状态控制的部分进行总结。
1.外部触发信号到来后,执行若干步骤,步骤由计数器控制。(这里的计数器可计数为0-127)。故触发信号高电平使能计数器使能信号(用组合逻辑实现)。仅计数器记到127后,或者复位信号到来,计数器使能归0.使能一旦归零,计数器恢复0.
always @(trg or count or rst)
if(trg)
cn_en = 1'b1;//数据长度为128,可更改
else if((count==127)||(!rst))
cn_en = 1'b0;
else
cn_en = cn_en;
always @(posedge clk or negedge rst)
if((!rst)||(trg))//复位或者有触发信号到来后,计数器置零
begin
count <= 7'b0;
end
else if(cn_en)
count <= count + 1;
else
count <= 7'b0;
2.不同于1,触发信号到来后进行操作,但是会在不定次数后,完成操作而停止。故可在完成操作的模块中加入完成告知信号d_req,这样,完成使能信号,能够使得N_state置0,从而达到目标。
always @(trg or d_req)
if(trg)
N_state = 1'b1;
else
N_state = (~d_req)? N_state:1'b0;
3.而对于可以抽象成多种操作的状态机的,则用状态机来描述,更加简便。