三段式状态机

FPGA初学三段式状态机写法

段式状态机在第一个 always 模块采用同步时序逻辑方式描述状态转移,第二个 always 模块采用组合逻辑方式描述状态转移规律,第三个 always 描述电路的输出。通 常让输出信号经过寄存器缓存之后再输出,消除电路毛刺。这种状态机也是比较推崇的, 主要是由于维护方便,组合逻辑与时序逻辑完全独立。
module detect_3( input clk_i, input rst_n_i, output out_o );
reg out_r; //状态声明和状态编码
reg [1:0] Current_state;
reg [1:0] Next_state;
parameter [1:0] S0=2’b00;
parameter [1:0] S1=2’b01;
parameter [1:0] S2=2’b10;
parameter [1:0] S3=2’b11; //时序逻辑:描述状态转换
always@(posedge clk_i)
begin
if(!rst_n_i)
Current_state<=0;
else
Current_state<=Next_state;
end

always@(*)
begin
case(Current_state) //组合逻辑:描述下一状态
S0: Next_state = S1;
S1: Next_state = S2;
S2: Next_state = S3;
S3: begin Next_state = Next_state;
end
default :Next_state = S0;
endcase
end
always@(posedge clk_i) //输出逻辑:让输出 out,经过寄存器 out_r 锁存后输出,消除毛刺
begin
if(!rst_n_i)
out_r<=1’b0;
else
begin
case(Current_state)
S0,S2:out_r<=1’b0;
S1,S3:out_r<=1’b1;
default :out_r<=out_r;
endcase
end
end
assign out_o=out_r;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值