Verilog FSM

来源:互联网 发布:淘宝怎么买高仿鞋 编辑:程序博客网 时间:2024/05/23 22:45

Verilog FSM

写状态机的时候遇到一些问题,在某一个状态(Sn)需要重复执行x次后进入下一个状态,于是用了一个变量cnt(在状态Sn-1初始化为0)记录执行次数,当cnt>=x时进入下一个状态,但是最终状态机崩掉了,用SignalTap测量cnt的数值,发现是乱的,目前还不知道是哪里的问题,先记录下,也可能是状态机写的不够规范??感觉也不是!


在网上看了许多状态机的写法,都差不多,记录一个感觉格式还不错的(三段式):


//第一个进程,同步时序always模块,格式化描述次态寄存器迁移到现态寄存器
always @ (posedge clk or negedge rst_n) //异步复位
if(!rst_n)
current_state <= IDLE;
else
current_state <= next_state;//注意,使用的是非阻塞赋值

//第二个进程,组合逻辑always模块,描述状态转移条件判断
always @ (current_state) //电平触发
begin
next_state = x; //要初始化,使得系统复位后能进入正确的状态
case(current_state)
S1: if(…)
next_state = S2; //阻塞赋值

endcase
end

//第三个进程,同步时序always模块,格式化描述次态寄存器输出
always @ (posedge clk or negedge rst_n)
…//初始化
case(next_state)
S1:
out1 <= 1’b1; //注意是非阻塞逻辑
S2:
out2 <= 1’b1;
default:… //default的作用是免除综合工具综合出锁存器。
endcase
end

0 0
原创粉丝点击