本文描述了有限状态机的基础知识,并展示了在 Verilog 硬件描述语言中实现它们的实用方法。
有限状态机,简称 FSM,是硬件和软件系统中最普遍的操作模型之一。几乎每个有用的数字系统都可以定义为有限状态机,因此最好尽可能多地了解这种有用的系统模式。
数字电路中的有限状态机
有限状态机有多种描述方式,但最流行的两种是状态图和状态表。两种表示的示例如图 1 所示。
图 1.显示为状态图和状态表的 FSM。左上角的图例显示了状态变量 A 和 B,以及输入 x 和输出 y。
请注意,这个 FSM 有一个输入信号 x 和一个输出信号 y,这使它成为一个Mealy 状态机。此 FSM 可以通过数字设计课程中教授的传统方法来实现,该方法围绕为实现状态变量的触发器生成激励逻辑。该逻辑是根据所选触发器类型的激励表设计的,即 SR、D、JK 或 T。
当我们将此技术应用于图 1 中的 FSM 时,我们会得到以下实现的某个版本。
图 2.使用 JK 触发器的示例 FSM 的实现。
有关状态机的更多信息,您可能需要阅读 David Williams的文章在 VHDL 中实现有限状态机。
Verilog 如何提供帮助
那么,如果您想在 Verilog 中实现如图 1 所示的状态机,该怎么做呢?Verilog 应该在设计过程的哪个阶段接管?
虽然可以 手动设计整个系统,一直到图 2 中的示意图,然后用 Verilog 编写代码,但这并不是解决问题的最流行的方法。更糟糕的方法是描述原理图中的每个门,包括构成触发器的门!如果您在门级别描述所有内容,您的系统可能会 以某种方式工作,但这没有给编译器留下空间来优化您的设计以满足您的实际 需求,这可能更关注时序和功率,而不仅仅是正确性。
请记住:使用硬件描述语言的原因是为了利用您将使用的综合编译器,并且像任何编译器一样,您给予它的自由度越大,您就越有可能产生最佳实现。
所以一个聪明的起点是状态表。您只需指示 Verilog 机器在每个状态下应该做什么,而不是使用哪个门或触发器。
在 Verilog 中,状态机的一个出色构造是Case 语句。每个案例的主体都应该检查状态变量及其期望的行为。下面的一段代码展示了这个结构。
case (state)
STATE_0: // Code for State 0
STATE_1: // Code for State 1
// ...
STATE_N: // Code for State N
endcase
因此,通过我们的示例,这是图 1 所示状态机的实现。请注意,输出 y 是一个组合函数。
module MyFSM(
input clk,
input x,
output y);
reg [1:0] state;
assign y = state[1] & state[0] & x;
always @ (negedge clk)
case (state)
2’b00: state <= x?2’b01:2’b00;
2’b01: state <= x?2’b10:2’b00;
2’b10: state <= x?2’b11:2’b00;
2’b11: state <= 2’b00;
endcase
endmodule
这里还没有内容,您有什么问题吗?
电子电路资源推荐
- LQFP封装.PcbLib
来源:下载中心
- 汽车以太网
来源:下载中心
- 仪器基础系列教程之信号发生器
来源:大学堂
- 运算放大器噪声计算
来源:大学堂
- 基尔霍夫定律:支路、节点、回路和网孔
来源:电路图
- 基尔霍夫定律:支路、节点、回路和网孔
来源:电路图
推荐帖子 最新更新时间:2024-11-13 08:54
- 【MSP430共享】激光瓦斯监控系统显示终端的研究
- 瓦斯监测对于煤矿安全具有重要作用, 煤矿井下终端和监控分站之间的通信对完成瓦斯监测任务起到重要作用 。本系统采用低功耗单片机 MS P 4 3 0 F 1 4 7和 R S 4 8 5总线完成煤矿井下监控分站与远程终端的通信。传感器检测到的瓦斯浓度通过 RS 4 8 5总线传到
- 鑫海宝贝微控制器 MCU
- TI 电池管理芯片如何完成开发过程并得到量产文件?
- 开发步骤主要包括: 1. 配置参数 2. 校准 3. 电芯曲线 CHEM-ID 选择 4. 循环学习 golden learning 5. 导出量产文件 1. 配置参数,可以通过 bqCONFIG
- qwqwqw2088模拟与混合信号
- 【STM32L476RG】第八节——矩阵键盘+usbhid的配置
- 【STM32L476RG】第八节 矩阵键盘+usbhid的配置 闲聊:虽然申请的内容已经做完了,但是这个开发板还有很多功能没有测试,最近在做键盘,买了一个4*4的先测试代码了,硬件还在调试中,之前也确实没用到矩阵键盘,毕竟很多控制的东西我都是拿串口屏或者蓝牙+UI做
- Zhao_karstm32/stm8
- 测试手机功放相位和幅度时间变化曲线须知
- 某个放大器设计能够适用于多种 手机 应用,只要其非线性度可以测量出来并用适当的校正因子进行校正。 放大器设计的重利用是移动通信设计工程师在开发新网络时用以尽可能地降低制造材料成本的一种常用方法。例如,为 GSM 和GPRS开发的同一功放( PA )也可用于EGPRS应
- JasonYooRF/无线
- ESP32-S3 KORVO-2 2.4'' ARDUINO TFT 开箱报告
- 经过漫长的等待,快递总算到了。现在做一期开箱报告。 首先包装盒子是很大的。 拆开包装后,里头上下两层各有厚厚的气泡防护垫保护。 里头可以看到有国际快递FedEx包装,以及订单信息。然后是乐鑫的单独包装盒和TFT屏幕的小包装。 打开包装盒以后可以看到ES
- plcproDigiKey得捷技术专区
- lm3s811 uart
- 我用板子的虚拟串口测试通讯是正常的,但是自己在UART0,UART1上外接MAX3232和电脑通讯时,串口调试助手接收到的UART0数据全为FF,UART1接收不到数据,到底哪里出问题了? lm3s811 uart 就是说硬件“有病”,用UART1试试吧,反证我试了好用 你用UA
- xupz123微控制器 MCU
- 【求助】软件调试
- 基于DSP的USB接口设计方案
- 基于 L V G L 的 机 械 臂 正逆解仿真演示UI
- 关于新能源汽车的节能减排。。。。。
- 请问哪里有Intel C++ Compiler 2.0 for windows ce professional下?
- 集成运算放大器基础知识资料
- 带FRAM存储器MSP430常见问题及解答
- 吊扇定子线圈的手工绕制法
- 有没有哪位朋友做过关于PT100前端放大的?
- 求一种运放,用单电源供电,替代双电源供电的OP07用
- 【平头哥RVB2601创意应用开发】+webplay Demo试用及源码分析
- 基于瑞萨RL78G14的DDS信号发生器DIY(一)软件调试环境搭建
- windows mobile 6.0上开发一个蓝牙程序
- 【拆解名单公布】EEWorld邀你来拆解(第六期):拆一拆车载无线充
- 新人关于lcd12864的小疑问,望大神帮忙解答
- msp430F149 ADC问题
- 哪里有关于MSP430中断的详细介绍啊
- 驱动气缸内壁激光熔覆修复技术
- 职位招聘
- 【Follow me第二季第1期】+ 任务汇总提交-章鱼哥
- DER-603 - 27 W USB PD 3.0,采用 3 V-11 V PPS 电源,使用 InnoSwitch3-CP 和赛普拉斯 CCG3PA 控制器
- 使用 Microchip Technology 的 LM285EOA-1.2 的参考设计
- 带串联稳压器的可调式精密并联稳压器的典型应用
- STEVAL-ISA110V1,基于 VIPER26LN 的演示板,12 V/12 W 宽范围非隔离反激式
- 使用 Diodes Incorporated 的 AP1506 的参考设计
- LTM4650EY-1B 4 相、1.2V、100A 设计的典型应用电路
- LT3970IMS 12V 降压转换器的典型应用
- AD9245BCP-40EBZ,具有 AD9245 3V、14 位、40 MSPS ADC 的评估板
- 用于研究L6472的全集成的步进电机驱动器演示板
- DER-665 - 使用 InnoSwitch3-CP 的 10/18 W Quick Charge 3.0 充电器