首页 > 基本电路 >数字电路 > 如何在Verilog中创建有限状态机

如何在Verilog中创建有限状态机

来源:互联网发布者:toothache 关键词: Verilog 状态机 更新时间: 2024/05/27

本文描述了有限状态机的基础知识,并展示了在 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

提问/讨论

这里还没有内容,您有什么问题吗?

我要提问/讨论

推荐帖子 最新更新时间: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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

EEWORLD 电路图 站点相关: 下载中心 Datasheet 参考设计

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved