//1-paragraph method to decribe FSM
//Describe state transition, state output, state input condition in only 1 always block
//Westor Wang, Dec. 2006
//Verilog Training -- How to write FSM better module state1 (
input nrst,
input clk,
input i1,
input i2,
output reg o1,
output reg o2,
output reg err
); reg [:] NS; //NextState parameter [:] //one hot with zero idle
IDLE = 'b000,
S1 = 'b001,
S2 = 'b010,
ERROR = 'b100; //1 always block to describe state transition, state output, state input condition
always @ (posedge clk or negedge nrst)
if (!nrst)
begin
NS <= IDLE;
{o1,o2,err} <= 'b000;
end
else
begin
NS <= 'bx;
{o1,o2,err} <= 'b000;
case (NS)
IDLE: begin
if (~i1) begin{o1,o2,err}<='b000;NS <= IDLE; end
if (i1 && i2) begin{o1,o2,err}<='b100;NS <= S1; end
if (i1 && ~i2) begin{o1,o2,err}<='b111;NS <= ERROR;end
end
S1: begin
if (~i2) begin{o1,o2,err}<='b100;NS <= S1; end
if (i2 && i1) begin{o1,o2,err}<='b010;NS <= S2; end
if (i2 && (~i1)) begin{o1,o2,err}<='b111;NS <= ERROR;end
end
S2: begin
if (i2) begin{o1,o2,err}<='b010;NS <= S2; end
if (~i2 && i1) begin{o1,o2,err}<='b000;NS <= IDLE; end
if (~i2 && (~i1))begin{o1,o2,err}<='b111;NS <= ERROR;end
end
ERROR: begin
if (i1) begin{o1,o2,err}<='b111;NS <= ERROR;end
if (~i1) begin{o1,o2,err}<='b000;NS <= IDLE; end
end
endcase
end endmodule

一段式fsm的更多相关文章

  1. 三段式fsm

    1.状态转移的always中CS,同步ouput的always中NS. 2.3段fsm vs 2段fsm:output逻辑是组合逻辑和同步时序逻辑(消除里不稳的和毛刺). 3.3段fsm vs 1段f ...

  2. 二段式fsm

    1.推荐在敏感表下的默认状态为X,这样描述的好处有2个: 好处1:仿真易观察bug. 好处2:综合对不定态X的处理是"Don't Care",即任何没有定义的状态寄存器向量都会被忽 ...

  3. (转帖) 有限狀態機FSM coding style整理 (SOC) (Verilog)

    来源:http://www.codesoso.net/Record/101092_95120_21.html 来源:http://www.cnblogs.com/oomusou/archive/201 ...

  4. FPGA学习笔记(七)——FSM(Finite State Machine,有限状态机)设计

    FPGA设计中,最重要的设计思想就是状态机的设计思想!状态机的本质就是对具有逻辑顺序和时序规律的事件的一种描述方法,它有三个要素:状态.输入.输出:状态也叫做状态变量(比如可以用电机的不同转速作为状态 ...

  5. 有限狀態機FSM coding style整理 (SOC) (Verilog)

    AbstractFSM在數位電路中非常重要,藉由FSM,可以讓數位電路也能循序地執行起演算法.本文將詳細討論各種FSM coding style的優缺點,並歸納出推薦的coding style. In ...

  6. fsm三种建模思路比较

    ==================================================================================================== ...

  7. 三段式状态机 [CPLD/FPGA]

    状态机的组成其实比较简单,要素大致有三个:输入,输出,还有状态. 状态机描述时关键是要描述清楚前面提高的几个状态机的要素,即如何进行状态转移:每个状态的输出是什么:状态转移是否和输入条件相关等. 有人 ...

  8. i2c状态机方法设计-verilog

    2010-09-05 21:04:00 verilog语言基础学的差不多了.接着就是看看华为的语言编写规范.状态机设计方法是fpga的重要设计方法.所以我要记上一笔. 只要会FSM方法,用fpga编写 ...

  9. paper:synthesizable finite state machine design techniques using the new systemverilog 3.0 enhancements 之 standard verilog FSM conding styles(二段式)

    1.Two always block style with combinational outputs(Good Style) 对应的代码如下: 2段式总结: (1)the combinational ...

随机推荐

  1. cmd 查看端口占用情况

    netstat -nao|findstr 端口号 打开任务管理器查看

  2. [题解](单调队列)luogu_P2216_BZOJ_1047 理想的正方形

    调了半天,发现这个写法确实极易错...... 对于每列都维护一个单调队列记录最大最小值,这样一次操作后就把最大最小值压到了一维, 然后再对这一行维护一个单调队列,每次更新ans值,然而对于数组和队列下 ...

  3. 统一入口&DB代理思想

    参考 https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=2650764278&idx=2&sn=b7801fb0780 ...

  4. GYM 101673J(模拟)

    本来我就模拟和搜索恐惧症,场上乍一看调度来调度去的真的吓得没敢写.然鹅赛后听说别的队写得贼短就写了写,真的不难--嘤嘤嘤 #include <cstdio> #include <cs ...

  5. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) A

    Our beloved detective, Sherlock is currently trying to catch a serial killer who kills a person each ...

  6. 使用nvmw解决windows下多版本node共存的问题

    不支持4.x的nodejs,用nodist吧 不支持4.x的nodejs,用nodist吧 不支持4.x的nodejs,用nodist吧 ===========不要再看的分割线============ ...

  7. [已读]CSS禅意花园

    蛮早的一本书,提到了一些小tip,比如负margin实现居中.FIR图像替换.

  8. Python相对导入导致SystemError的解决方案(译)

    原文出处: http://stackoverflow.com/   译文出处:yibohu1899 这个问题是如何解决在相对导入的时候,如果出现’System Error’的时候的解决方案.顺带一提, ...

  9. Unity Shader入门精要学习笔记 - 第11章 让画面动起来

    转自 冯乐乐的 <Unity Shader入门精要> Unity Shader 中的内置变量 动画效果往往都是把时间添加到一些变量的计算中,以便在时间变化时画面也可以随之变化.Unity ...

  10. python里面的list、tuple和dict的区别

    Dictionary .Dictionary是Python中内置的数据类型之一,他定义了键和值之间一对一的关系. 每一个元素都有一个key-value对,整个元素集合用大括号{}括起来. 你可以通过k ...