一、有限状态机设计的一般步骤:

1) 逻辑抽象,得出状态转换图

就是把给出的一个实际逻辑关系表示为时序逻辑函数,可以用状态转换表来描述,也可以用状态转换图来描述。这就需要:
• 分析给定的逻辑问题,确定输入变量、输出变量以及电路的状态数。通常是取原因(或条件)作为输入变量,取结果作为输出变量。
• 定义输入、输出逻辑状态的含意,并将电路状态顺序编号。
• 按照要求列出电路的状态转换表或画出状态转换图。这样,就把给定的逻辑问题抽象到一个时序逻辑函数了。

2) 状态化简

如果在状态转换图中出现这样两个状态,它们在相同的输入下转换到同一状态去,并得到一样的输出,则称它们为等价状态。显然等价状态是重复的,可以合并为一个。电路的状态数越少,存储电路也就越简单。状态化简的目的就在于将等价状态尽可能地合并,以得到最简的状态转换图。

3) 状态分配

状态分配又称状态编码。通常有很多编码方法,编码方案选择得当,设计的电路可以简单,反之,选得不好,则设计的电路就会复杂许多。实际设计时,需综合考虑电路复杂度与电路性能之间的折衷,在触发器资源丰富的FPGA或ASIC设计中采用独热编码(one-hot-coding)既可以使电路性能得到保证又可充分利用其触发器数量多的优势。

4) 选定触发器的类型并求出状态方程、驱动方程和输出方程。
5) 按照方程得出逻辑图

二、可综合状态机知道原则

因为大多数FPGA内部的触发器数目相当多,又加上独热码状态机(one hot state machine)的译码逻辑最为简单, 所以在设计采用FPGA实现的状态机时往往采用独热码状态机(即每个状态只有一个寄存器置位的状态机)。
建议采用case,casex,或casez语句来建立状态机的模型, 因为这些语句表达清晰明了,可以方便地从当前状态分支转向下一个状态并设置输出。

不要忘记写上case语句的最后一个分支default,并将状态变量设为'bx,这就等于告知综合器:case语句已经指定了所有的状态,这样综合器就可以删除不需要的译码电路,使生成的电路简洁,并与设计要求一致。

如果将缺省状态设置为某一确定的状态(例如:设置default:state = state1)行不行呢?

回答是这样做有一个问题需要注意。因为尽管综合器产生的逻辑和设置default:state='bx时相同,但是状态机的Verilog HDL模型综合前和综合后的仿真结果会不一致。为什么会是这样呢?

因为启动仿真器时,状态机所有的输入都不确定,因此立即进入default状态,这样的设置便会将状态变量设为state1,但是实际硬件电路的状态机在通电之后,进入的状态是不确定的,很可能不是state1的状态,因此还是设置default: state='bx与实际情况相一致。

但在有多余状态的情况下还是应将缺省状态设置为某一确定的有效状态,因为这样做能使状态机若偶然进入多余状态后还能在下一时钟跳变沿时返回正常工作状态,否则会引起死锁。

状态机应该有一个异步或同步复位端,以便在通电时将硬件电路复位到有效状态,也可以在操作中将硬件电路复位(大多数FPGA结构都允许使用异步复位端)。

目前大多数综合器往往不支持在一个always块中由多个事件触发的状态机(即隐含状态机,implicit state machines), 为了能综合出有效的电路,用Verilog HDL描述的状态机应明确地由唯一时钟触发。

目前大多数综合器不能综合采用Verilog HDL描述的异步状态机。异步状态机是没有确定时钟的状态机,它的状态转移不是由唯一的时钟跳变沿所触发。

千万不要使用综合工具来设计异步状态机。 因为目前大多数综合工具在对异步状态机进行逻辑优化时会胡乱地简化逻辑,使综合后的异步状态机不能正常工作。 如果一定要设计异步状态机,我们建议采用电路图输入的方法,而不要用Verilog HDL输入的方法。

什么是同步状态机什么是异步状态机?

同步状态机:同步状态机的时钟是由同一时钟产生的,通过特殊设计的全局时钟网络将唯一的时钟连接到每个触发器的时钟端,使得时钟沿到达每个触发器时钟端的时刻几乎完全相同。

异步状态机:异步状态机没有确定的时钟,它的状态转移不是由唯一的时钟跳变沿所触发。

verilog之状态机详细解释(二)相关推荐

  1. verilog之状态机详细解释(一)

    一.有限状态机定义 有限状态机(Finite-State Machine,FSM),又成为有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型.笔者常在电机控制. ...

  2. python直方图解释,请用Python详细解释二维直方图

    假设你有一个1D数组,你在x轴上绘制它的值的位置,它们是如此的密集以至于你无法分辨空间分布,你用一个1D直方图来显示沿x轴的分布.问题解决了. 然后有两个一维数组,一个(x,y)轴上的二维点列表.你在 ...

  3. openssl之EVP系列之5---EVP_Encrypt系列函数具体解释(二)

    openssl之EVP系列之5---EVP_Encrypt系列函数详细解释(二)     ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay. ...

  4. 杭电2159-FATE (二维背包运用+详细解释)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  5. MongoDB:详细解释mongodb的高级操作,聚合和游标

    前几天总结了mongodb的安装入门.详细解释了增删改查的基本操作,今天再来总结下mongodb更高级的操作,聚合和游标. 一.聚合,mongodb的聚合操作一般分为四种情景,分别是:count.di ...

  6. linux中useradd的文件路径,linux的useradd命令详细解释

    Linux中的useradd命令顾名思义就是添加用户的命令.下面由学习啦小编为大家整理了Linux的useradd命令的详细解释的相关知识,希望对大家有帮助! linux的useradd命令的详细解释 ...

  7. ios学习--TableView详细解释

    2019独角兽企业重金招聘Python工程师标准>>> ios学习--TableView详细解释 分类: ios Object-C 2012-05-17 08:48  1714人阅读 ...

  8. Python __name__ == ‘__main__’详细解释-Python零基础入门教程

    目录 一.简介 1.__name__ 2.'__main__' 3.__name__ == '__main__' 二.作用 三.猜你喜欢 ​ 零基础 Python 学习路线推荐 : Python 学习 ...

  9. Matlab 读取 gprmax 的 out 文件详细解释

    Matlab 读取 gprmax 的 out 文件规律详细解释. out 文件是hdf5格式的文件,普通软件无法读取.out 文件有一定的规律,在matlab平台上简单操作一下,就可以深刻理解 out ...

最新文章

  1. SAP MM初阶之包含有Service item的服务采购订单
  2. 计算机应用基础课程没有期末考试,《计算机应用基础》课程期末考试2009—2010学年第一学期.doc...
  3. 全球及中国碳交易行业十四五发展展望与建设趋势研究报告2022-2027年
  4. Python 计算机视觉(十七)—— 基于KNN的图像分类
  5. Echarts柱状图顶部加数量显示
  6. vue中render: h = h(App)的详细解释
  7. SprinMVC 控制器忽略静态资源
  8. c创建python虚拟机_cpython大致数据结构实现笔记
  9. 双系统中ubuntu的安装方法
  10. ubuntu 18.04 安装teamview(包括正常的安装教程,以及一个纯终端教程)
  11. 计算机学院吴琴,06年浙江大学计算机与软件学院拒绝报道生名单
  12. 组策略 禁止用户策略下发到指定计算机,Win7 64位旗舰版下利用组策略禁止程序运行的设置技巧...
  13. android 测光模式,Android摄像头:设置测光点位置
  14. 求循环群的生成元及子群(不一定对-_-#)
  15. 漂亮特殊字体可复制_特殊字体生成器 漂亮特殊字体可复制
  16. MacBook 强制关机的四种方法
  17. Phonetic symbol 辅音 - 清辅音 -- /k/
  18. python eof是什么_python eoferror是什么异常
  19. Windows 安装 MySQL 8 zip版安装,及Windows MySQL多实例
  20. 物理层的传输介质和设备

热门文章

  1. mysql优化教程_Mysql优化一
  2. android 多线程 js,android中的jstack,见见线程都在干嘛
  3. iview tooltip自动消失_实现自动驾驶,为什么要对汽车、行人的轨迹进行预测?它与物体检测、追踪和路径规划间的关系是什么?...
  4. SQL Server高级查询之子查询(子查询非典型应用)
  5. map--Bit Compression
  6. 量子计算机拓扑超导新状态,陈根:特殊超导体,有助于量子计算机运行
  7. samba服务器_win10 更新导致无法连接samba服务器
  8. eclipse中怎么复制错误提示
  9. 2014蓝桥杯C++B:啤酒和饮料;切面条(思维分析)
  10. C#基础18:内置委托类型Action和Func