zoukankan      html  css  js  c++  java
  • Verilog三段式状态机描述

    时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为而必需考虑的所有历史信息。

    状态机采用VerilogHDL语言编码,建议分为三个always段完成。

    三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器, 然后直接在每个次态的case分支中描述该状态的输出即可,不用考虑状态转移条件。

    三段式描述方法虽然代码结构复杂了一些,但是换来的优势是使FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在FPGA/CPLD等可编程逻辑器件上的综合与布局布线效果更佳。

    示列如下:

    //第一个进程,同步时序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

  • 相关阅读:
    子元素过滤器nth-child解释
    jquery属性选择器中|value和^value的区别
    [转]float,double和decimal类型
    postsharp初体验
    [札记]IL经典指令解析之方法调度
    Oracle问题诊断过程常用SQL
    在chrome浏览器中 页面生成二维码
    音视频实例
    html5 新增input类型与属性
    html5 form-Validity验证函数
  • 原文地址:https://www.cnblogs.com/lsjjob/p/6036029.html
Copyright © 2011-2022 走看看