二、16【FPGA】时序逻辑电路设计——有限状态机(FS)

这篇博客详细介绍了使用FPGA进行状态机设计的理论与实战应用,包括可乐机模拟设计案例。内容涵盖状态机的类型、编码方式、设计方法以及代码实现,通过两种不同场景的可乐机模拟,阐述了一段式、二段式和三段式状态机的优缺点,并提供了详细的Verilog代码示例和逻辑仿真相册。

前言

学习说明此文档为本人的学习笔记,注重实践,关于理论部分会给出相应的学习链接。

学习视频:是根据野火FPGA视频教程——第十九讲
https://www.bilibili.com/video/BV1nQ4y1Z7zN?p=3

理论学习

关于理论学习请参考《数字电子技术基础》相关笔记:

《数字电子技术基础》6.4 时序逻辑电路——设计方法(FSM)有限状态机_追逐者-桥的博客-优快云博客时序逻辑电路设计——有限状态机(FSM)https://blog.youkuaiyun.com/ARM_qiao/article/details/124461906状态机(FSM),也称为同步有限状态机,Mealy型、Moore型状态机(输出与输入无关)

实战演练一

一、设计规划

1.1 实验目标

可乐机每次只能投入1枚1元硬币,且每瓶可乐卖3元钱,投入3个硬币就可以让可乐机出一瓶可乐,如果投币不够3元放弃投币需要按复位键,否则之前的投币不能退回。

二、程序设计

2.1 波形图绘制 

X表示输入:1投入1元硬币,0不投入硬币

Y表示输出:1出可乐,0不出可乐

S0、S1、S2状态:投入0元(初始状态)、投入1元、投入2元、投入3元。

2.2 代码编写 

状态编码定义方式:

在低速系统中

  • 状态机个数 <4个,二进制码
  • 状态机个数 4—24个,独热码
  • 状态机个数 >4个,格雷码

在高速系统中,无论个数均推荐使用独热码。

状态机代码写法有一段式、二段式、三段式:
一段式指的是在一段状态机中使用时序逻辑既描述状态的转移,也描述数据的输出;
二段式指在第一段状态机中使用时序逻辑描述状态转移,在第二段状态机中使用组合逻辑描述数据的输出;
三段式指在第一段状态机中采用时序逻辑描述状态转移,在第二段在状态机中采用组合逻辑判断状态转移条件描述状态转移规律,在第三段状态机中描述状态输出,可以用组合电路输出,也可以时序电路输出。

老的一段式、二段式、三段式各有优缺点,其中一段式在描述大型状态机时会比较困难,会使整个系统显得十分臃肿,不够清晰;二段式状态机的好处是其结构和理想的理论模型完全吻合,即不会有附加的结构存在,比较精简,但是由于二段状态机的第二段是组合逻辑描述数据的输出,所以有一些情况是无法描述的,比如输出时需要类似计数的累加情况,这种情况在组合逻辑中会产生自迭代,自迭代在组合逻辑电路中是严格禁止的,而且第二段状态机主要是描述数据的输出,输出时使用组合逻辑往往会产生更多的毛刺,所以并不推荐。所以衍生出三段式状态机,三段状态机的输出就可是时序逻辑了,但是其结构并不是最精简的了。三段式状态机的第一段状态机是用时序逻辑描述当前状态,第二段 状态机是用组合逻辑描述下一状态,如果把这两个部分进行合并而第三段状态机保持不变,就是我们现在最新的二段式状态机了。这种新的写法在现在不同综合器中都可以被识别出来,这样既消除了组合逻辑可能产生的毛刺,又减小了代码量,还更加容易上手,不必再去关心理论模型是怎样的,仅仅根据状态转移图就非常容易实现。
所以我们习惯性的使用两个均采用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐者-桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值