良好的Verilog FSM代码风格

前言

FSM是电路设计中非常常见的结构,对于这样常见的结构的正确输写非常重要, 良好的代码风格对于阅读理解以及后期维护也非常重要。本文总结了目前常见的两种输写FSM的方法

介绍

FSM目前主要有两种架构

  • Moore FSM
  • Mealy FSM

要让电路顺序地执行计算,最简单的方法就是生成一个counter, 然后根据counter值去执行相应的操作或计算。但这种方法只能用于非常简单的控制,且非常不容易维护以及后期功能修改。所以实际上大家都会用标准的FSM来实现复杂控制。

Moore FSM架构

clipboard.png

Moore FSM是目前的主流写法, 它由三块组成:

  • state register : 由DFF构成,将Next state Logic产生的state存入current register
  • next state logic : 由组合逻辑组成,根据输入及目前state,产生next state
  • output logic : 组合逻辑, 根据目前state产生输出

假设输入为w_i, 输出为z_o, 当输入连续2个cycle为高时,则输出为1个cycle高

clipboard.png

下面是state diagram

clipboard.png

三段式编码

clipboard.png

/**********************************************
Description : 3 always block for moore fsm (BEST)
 **********************************************/

module simple_fsm (
    clk,
    rst_n,
    w_i,
    z_o
    );

input  clk;
input  rst_n;
input  w_i;
output z_o;

parameter IDLE = 2'b00;
parameter S0   = 2'b01;
parameter S1   = 2'b10;

reg [1:0] curr_state;
reg [1:0] next_state;
reg z_o;

// state reg
always@(posedge clk or negedge rst_n)
begin
    if (~rst_n) curr_state <= IDLE;
    else        curr_state <= next_state;
end

// next state logic
always@(*)
begin
    case (curr_state)
        IDLE    : if (w_i) next_state = S0;
                  else next_state = IDLE;
        S0      : if (w_i) next_state = S1;
                  else next_state = IDLE;
        S1      : if 
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值