状态机的组成其实比较简单,要素大致有三个:输入,输出,还有状态

状态机描述时关键是要描述清楚前面提高的几个状态机的要素,即如何进行状态转移;每个状态的输出是什么;状态转移是否和输入条件相关等

有人习惯将整个状态机写到一个always模块里面,在该模块中同时描述了状态转移,又描述状态的输入和输出。这种写法一般被称为一段式FSM描述方法; 还有一种写法是用2个always模块,其中一个always模块采用同步时序描述状态转移;另一个采用组合逻辑判断状态转移描述状态转移规律,这种写法 被称为两段式FSM描述;还有一种是在两段式基础之上发展出来的,这种写法使用3个always模块,一个always模块采用同步时序描述状态转移;第 二个采用组合逻辑判断状态转移条件,描述状态转移规律,第三个always模块使用同步时序电路描述每个状态的输出,这种写法成为三段式。

一般推荐后两种方法,也就是两段式和三段式。其原因为:FSM和其他设计一样,最好使用同步时序,以便提高设计的稳定性,消除毛刺。状态转移部分一般是同 步时序电路而状态的转移条件的判断是组合逻辑,之所以两段式比一段式更为合理,就在于它将时序逻辑和组合逻辑分别放到不同的always程序快中实现,这 样一来便于理解和阅读,二来利于综合器又换代码,更有利于用户添加合适的时序约束条件,利于布局布线器实现设计。

在两段式中,当前状态的输出是用组合逻辑实现的,这样的实现是有产生毛刺的可能性的,而且不利于约束。同样的原因,某些需要引入输出反馈的设计中,两段式会引入组合逻辑的反馈,使综合失败,这是要极力避免的。

三段式与两段式相比,关键在于根据状态转移规律,在上一状态根据输入条件判断当前状态的输出,从而在不出入额外的时钟节拍的前提下,实现了寄存器输出。

一个三段式的状态机大致如下:

module state (nrst,clk,sig1,sig2,out1,out2); input nrst,clk; input sig1,sig2; output out1,out2; reg out1,out2; reg [2:0] NS,CS; parameter [2:0]   IDLE = 3'b000,  S1   = 3'b001,  S2   = 3'b010; //第一段,状态转换always @(posedge clk or negedge nrst)  if(!nrst)    CS<= IDLE;  else    CS<= NS;  //第二段,组合逻辑判断always @(nrst or CS or sig1 or sig2)      begin           NS = 3'bx;//给出默认值          case(CS)               IDLE: begin                          if (sig1......) NS = IDLE;                          else NS = S1;                     end               S1:   begin                          if(.........)   NS = S1;                          else NS = xxxx;
S2: ..... endcase end //第三段,FSM输出always @(posedge clk or negedge nrst) if (!nrst) {out1,out2}<= 2'b00;else begin {out1,out2}<= 2'b00; case (NS) IDLE:......
S1: endcase end endmodule

两段式其实就是将上述的第二段,第三段合一。

三段式写法可概括为如下图:

注意:一三段之中用<=,第二段中用=。

三段式状态机 [CPLD/FPGA]的更多相关文章

  1. FPGA三段式状态机的思维陷阱

    用三段式描述状态机的好处,国内外各位大牛都已经说的很多了,大致可归为以下三点: 1.将组合逻辑和时序逻辑分开,利于综合器分析优化和程序维护; 2.更符合设计的思维习惯; 3.代码少,比一段式状态机更简 ...

  2. 基于FPGA的三段式状态机

    状态机分类: 通常, 状态机的状态数量有限, 称为有限状态机(FSM) .由于状态机所有触发器的时钟由同一脉冲边沿触发, 故也称之为同步状态机. 根据状态机的输出信号是否与电路的输入有关分为 Meal ...

  3. 简单三段式状态机实验2-LCD12864

    此实验是在“基于I2C EPPRPM(AT24C02B) + LCD12864实验”基础上,把LCD模块里的一段式状态机改成三段式,I2C EPPROM模块暂时未改出来,一步一步来吧,改完后代码下载到 ...

  4. 简单三段式状态机实验1-SOS

    一直想从一段式状态机切换到三段式状态机,从书上和网上不断搜寻三段式案例及方法,感觉很简单,就想拿之前做过的实验把一段式改成三段式,可是写起来并非那么简单,很棘手,改完后也没有成功,尤其状态机里面的计数 ...

  5. Verilog笔记.三段式状态机

    之前都是用的一段式状态机,逻辑与输出混在一起,复杂点的就比较吃力了. 所以就开始着手三段式状态机. 组合逻辑与时序逻辑分开,这样就能简单许多了. 但是两者在思考方式上也有着很大的区别. 三段式,分作: ...

  6. 10010序列检测器的三段式状态机实现(verilog)

    序列检测器是时序数字电路设计中经典的教学范例,夏宇闻的<verilog数字系统设计教程>一书中有这个例子,用verilog设计一个“10010”序列的检测器.看完后我觉得F和G两个状态多余 ...

  7. Verilog三段式状态机描述

    时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为而必需考虑的所有历史信息. 状态机采用VerilogHDL语言编码,建议分为三个always段完成. 三段式建模 ...

  8. verilog 三段式状态机的技巧

    三段式代码多,但是有时钟同步,延时少,组合逻辑跟时序逻辑分开并行出错少. (1)同步状态转移 (2)当前状态判断接下来的状态 (3)动作输出 如果程序复杂可以不止三个always   .always ...

  9. (原创)Verilog三段式状态机

    下面以上图一个简单的FSM说明三段式Verilog状态机范式: `timescale 1ns / 1ps module FSM( clk,rst_n, in1,in2, out1,out2, CS,N ...

随机推荐

  1. POJ-1743 Musical Theme 字符串问题 不重叠最长重复子串

    题目链接:https://cn.vjudge.net/problem/POJ-1743 题意 给一串整数,问最长不可重叠最长重复子串有多长 注意这里匹配的意思是匹配串的所有元素可以减去或者加上某个值 ...

  2. 关于Subversion主从备份方式的调整(全量、增量脚本)更新

    本文引用于http://blog.chinaunix.net/uid-25266990-id-3369172.html 之前对Subversion服务器作了迁移,关于SVN的架构也走了调整,有单一的服 ...

  3. 【转】Java集合间的相互转换

    下面代码演示了List<-->数组.List<-->Set.数组<-->Set.Map将键转化为Set.Map将值转化为Set.Map将值转化为List等集合常用转 ...

  4. [MST] Defining Asynchronous Processes Using Flow

    In real life scenarios, many operations on our data are asynchronous. For example, because additiona ...

  5. [MST] Derive Information from Models Using Views

    Redundant data or caching data is a constant source of bugs. MST adheres to the philosophy that no d ...

  6. Android Studio生成apk

    1.菜单Build->Generate Signed APK 2.生成android.keystore,能够依据弹框去Create new一个,也可使用命令来生成android.keystore ...

  7. 转:app store 注册账号生成证书上传app完整的教程

    app store为开发者提供四种类型的申请: 个人ios开发者计划$99/年 公司ios开发者计划$99/年 企业ios开发者计划$299/年 高校ios开发者计划免费 在这里主要介绍一下公司ios ...

  8. MyEclipse常见错误汇总,中英注释版(长期更新)

    No.1 当一条语句漏写分号时错误描述如下 Syntax error, insert ";" to complete Statement(语法错误:插入分号完成语句描述) No.2 ...

  9. 自定义标签 Unable to find setter method for attribute

    变量的首字母不能大写 http://blog.csdn.net/looksun/article/details/7690601

  10. hdoj--5563--Clarke and five-pointed star(简单几何)

    Clarke and five-pointed star Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...