背景

在数字系统中,有两种基本类型的电路。第一类是组合逻辑电路。在组合逻辑电路中,输出仅依赖于输入。组合逻辑电路的例子包括加法器,编码器和多路复用器。例如,在加法器中,输出只是输入的总和; 无论以前的输入或输出是什么都没有关系。第二种类型的数字逻辑电路是时序逻辑电路。在顺序逻辑电路中,输出不仅取决于输入,还取决于系统的当前状态(即输出值和任何内部信号或变量)。顺序逻辑电路的复杂程度不同于简单的计数器,这些计数器以基本序列(例如,0,1,2,3 ... 0,1,2,3 ...)从一种状态移动到另一种状态,到超大规模电路(例如微处理器)本文的重点将放在顺序逻辑电路表示为有限状态机以及如何将这些有限状态机转换为硬件描述语言VHDL。

顺序逻辑系统是有限状态机(FSM)。作为FSM,它们由一组状态,一些输入,一些输出以及一组从状态到状态的规则组成。在进行数字系统设计时,从定义系统如何​​与有限状态机模型一起工作开始非常常见。这一设计步骤允许设计人员从高级角度考虑设计,而不必考虑系统将实施什么样的硬件或实施设计需要哪些设计工具。一旦完全设计FSM,如果设计良好,则很容易用硬件描述语言(例如Verilog或VHDL)写出设计,以便在数字IC(集成电路)上实现。

本文将通过首先定义设计问题来完成创建数字系统的设计过程,其次,将系统的计算模型创建为有限状态机,然后将FSM转换为硬件描述语言VHDL。(VHDL实际上是双重缩写词,VHDL代表VHSIC硬件描述语言,VHSIC代表甚高速集成电路)。

读者应该有一些数字电路和IC的经验。他们还应该对VHDL有基本的了解,或者至少有一些阅读结构化计算机代码的经验。使用计算机代码的经验将帮助你认识到VHDL的一些结构和结构,但应该指出的是,VHDL不是一种编程语言; 它是一种硬件描述语言(HDL)。换句话说,您所编写的语句将在您正在设计的系统中创建硬件(门,触发器等)。

有限状态机

要设计的系统是一个非常简单的系统,其目的是引入将FSM转换为VHDL的想法。此FSM具有四个状态:A,B,C,和d。该系统具有被称为一个输入信号P,和的值P确定什么状态系统移动到下一个。只要输入P为高电平(1),系统就会将状态从A更改为B至C至D. 如果P低,并且系统处于状态A,B或C,则状态不会改变。如果系统处于状态d,则切换到乙如果P高和一,如果P低。系统还有一个称为R的输出,如果处于状态D,则该输出为1 ,否则它是0.图1是FSM的示意图,但首先这里是关于此图的一些注释:

  • 圆圈代表状态
  • 圆圈之间的箭头代表从状态变为状态的规则。例如,在这个系统中,如果输入P等于1(否则它保持在状态A),状态机从状态A移到状态B,
  • 圆圈下方的信息代表每种状态下的输出值。
  • 从“无处”到A的箭头表示A是初始状态。

图1.简单的有限状态机

这个完全定义的状态机可以很容易地转换为VHDL。请记住,在编写VHDL代码时,您正在做的是描述如何实现硬件(即数字门)。因此,例如,当您在此系统中定义一组状态(如A,B,C和D)时,这些状态将由位来表示,更具体地由触发器的输出表示。在一个有四个状态的系统中,就像这个状态一样,可以用2个位来表示这四个状态(2个触发器)。还有其他方式可以代表国家。其中一种方法是使用四位,其中每一位表示一个状态,但一次只能打开一位。所以A将由0001表示,B乘以0010,C乘以0100,D乘以1000.使用高级硬件描述语言的好处之一是,您通常可以忽略这一级别的细节。

图2显示了在将VHDL代码合成为创建硬件时将创建的硬件电路的总体思路。

图2.为状态机创建的逻辑的框图表示

此图表明,有一组Ñ触发器表示的状态。还有一些逻辑使用触发器的输出和系统的输入来确定下一个状态。最后,有一些逻辑解码触发器的输出值来创建m个输出信号。

同样,在使用HDL时,您通常可以忽略设计中的这一级别细节。了解HDL创建什么样的电路仍然很重要,因为可能会有一段时间您必须计算并最小化设计中的逻辑门数。了解您的HDL声明创建的内容后,您可以设计最大限度地减少大门的创建。

VHDL设计实现

编写此FSM的VHDL的第一步是定义VHDL实体。VHDL实体描述了您正在设计的系统的外部接口,其中包括输入,输出和实体名称。实体名称将为SimpleFSM,输入为时钟信号,复位信号和P信号,输出为R信号。应该提到的是,时钟信号是周期性的高低电平信号,它控制着这个同步系统的定时。任何同步系统都有一个控制时钟信号,用于同步系统中的所有模块,使它们同时发生变化。

把所有的信息放在一起给出一个看起来像这样的SimpleFSM实体:

ENTITY SimpleFSM is -- SimpleFSM实体定义
PORT (clock:    IN STD_LOGIC;P:        IN STD_LOGIC;reset:    IN STD_LOGIC;R :       OUT STD_LOGIC);
END SimpleFSM;

关于实体的最后一点是所有的输入和输出都是单个位,所以可以使用数据类型std_logic,它是VHDL中的标准类型,用于单位信号。

下一步是定义实体的功能; 这块VHDL被称为体系结构。我们正在实现的功能是图1中定义的状态机的功能。下面的示例显示了实现SimpleFSM所需的代码。虽然这段代码是特定于SimpleFSM的,但我会描述代码中的每一部分,以便将代码替换为您自己的状态机的代码是一个简单的过程。

Architecture RTL of SimpleFSM is
TYPE State_type IS (A, B, C, D);  -- 定义状态SIGNAL State : State_Type;    -- 创建信号 -- 不同状态
BEGIN PROCESS (clock, reset) BEGIN If (reset = ‘1’) THEN            -- 复位reset,复位状态为AState <= A;ELSIF rising_edge(clock) THEN    -- clock上升沿触发状态转变CASE State IS-- If the current state is A and P is set to 1, then the-- next state is BWHEN A => IF P='1' THEN State <= B; END IF; -- If the current state is B and P is set to 1, then the-- next state is CWHEN B => IF P='1' THEN State <= C; END IF; -- If the current state is C and P is set to 1, then the-- next state is DWHEN C => IF P='1' THEN State <= D; END IF; -- If the current state is D and P is set to 1, then the-- next state is B.-- If the current state is D and P is set to 0, then the-- next state is A.WHEN D=> IF P='1' THEN State <= B; ELSE State <= A; END IF; WHEN others =>State <= A;END CASE; END IF; END PROCESS;R <= ‘1’ WHEN State=D ELSE ‘0’;
END rtl;

这是状态机所需的全部代码。现在我们来看看架构代码的一些细节。

架构定义指出:


Architecture RTL of SimpleFSM is

该语句是VHDL体系结构的标准语句,它基本上说明了体系结构中将要描述的抽象级别。代表寄存器传输级别的RTL是抽象的中间级别。

行为  是最高级别的抽象,在编写行为代码时,您只需要定义输入和输出之间的关系,而不指定如何实现这些关系。有时行为描述太高而不能实际合成硬件。如果你正在做一个模拟,只需要一个块以某种方式行事,那么行为模型就足够了。

结构  代码是最低级别的抽象。在编写结构代码时,您将描述低层结构(如逻辑门)如何连接在一起以提供所需的系统。如果您需要对将要创建的逻辑门进行精确控制,那么您需要一个结构模型。

RTL适合在中间。它具体描述输入和输出之间的关系,描述数据如何在硬件寄存器之间移动。RTL描述可用硬件实现。对于这个特定的例子,了解体系结构类型(行为,RTL或结构)的细微差别并不是很重要,你只需要将它定义为某种东西。

下一个块定义状态并创建一个将定义状态作为其值的信号。在这里列出的状态应该与FSM图中由圆圈表示的状态一一对应。


TYPE State_type IS (A, B, C, D); -- the 4 different statesSIGNAL State : State_Type;   -- Create a signal that uses -- the 4 different states

下一条语句是在其灵敏度列表中使用信号时钟和复位的VHDL过程的开始


PROCESS (clock, reset) BEGIN If (reset = ‘1’) THEN   -- Upon reset, set the state to AState <= A;ELSIF rising_edge(clock) THEN

同样,关于流程声明的许多细节可以在本文中被忽略。所有你需要了解的是,在RTL级设计中,这个过程将创建一个寄存器,用于在过程中为它们分配的所有信号。在这种情况下,只有状态信号具有分配,因此将创建由足够的触发器组成的用于表示状态值的寄存器。该寄存器将被同步到时钟的上升沿,并可通过复位信号进行异步复位。在图2中可以看到由该过程创建的电路的一般视觉表示。

rising_edge(clock)语句后面的代码体是一个VHDL case语句,它将被合成为逻辑,用于控制在时钟的每个上升沿上State变化的值。例如,声明

WHEN A => IF P='1' THEN State <= B; END IF;

意味着如果状态的值为A,则如果信号P为1,则在时钟上升沿将状态更改为B.

案例中的最后一个陈述是

WHEN others =>State <= A;

这个陈述是一个全面的声明,以确保如果状态不知为何具有不等于A,B,C或D的值,那么它将重置为A的值。

代码的最后一部分在流程之外完成并创建一个组合逻辑块。

R <= ‘1’ WHEN State=D ELSE ‘0’;

这个陈述正在做的是确定输出R的值。如果国家是D,R将是1在所有其他州将为0。这里需要注意的一点是,这个状态机的输出仅依赖于状态。目前状态是确定输出的唯一状态的状态机称为Moore状态机。另一大类的状态机是输出不仅取决于当前状态,还取决于输入。这种状态机称为Mealy状态机。在实践中,使用什么样的状态机通常没有关系,如果您知道您使用的是哪种状态机,则无关紧要。所有重要的是你按照你的定义来实现状态机。

设计这个系统的最后几个步骤将包括模拟系统以确保它完成预期的工作,然后在物理系统(CPLD,FPGA,ASIC等)上最终综合硬件实现。

概要

这些图表显示了有限状态机图和实现状态机所需的VHDL代码之间的关系。

图3. FSM图和VHDL中的状态定义

图4. FSM图和VHDL中的状态转换规则

图5. FSM图和VHDL中的输出

总结

本文对硬件描述语言的本质以及HDL语句与所实现硬件之间的关系进行了一些讨论。但是,主要目的是向您展示如何编写VHDL来实现有限状态机。该过程涉及创建一个定义状态机的输入和输出的VHDL实体,然后在VHDL体系结构块中写入状态转换的规则。使用此处提供的模板,您应该拥有实现自己的FSM所需的所有信息。

用VHDL实现有限状态机相关推荐

  1. 有限状态机HDL模板

    逻辑设计, 顾名思义, 只要理清了 逻辑 和 时序, 剩下的设计只是做填空题而已. 下面给出了有限状态机的标准设计,分别为 VHDL 和 Verilog 代码 1  有限状态机 2  VHDL模板一 ...

  2. VHDL交通灯控制器的设计

    主要内容: 设计主干道的交叉路口交通信号灯无人自动管理的控制系统.将路口红绿灯的各种亮灯情况定义不同的状态,路口状况定义为触发条件,组成有限状态机. 1.设计的目的 本次课程设计的目的是通过设计交通灯 ...

  3. FPGA(7)--有限状态机--交通灯

    文章目录 一.实验目的 二.实验内容 三.实验设计与结果 四.实验思考与小结 一.实验目的 掌握有限状态机的编程和使用方法. 二.实验内容 设计一个十字路口交通灯控制器,东西(b).南北(a)方向有红 ...

  4. A/D采样控制电路设计---VHDL

    一.实验目的 (1)了解一般状态机的设计与应用 (2)学习并掌握Quartus II的使用方法 (3)学习简单时序电路的设计和硬件测试. (3)学习使用VHDL 语言方法进行逻辑设计输入 (3)掌握利 ...

  5. verilog复习与vhdl入门

    verilog复习与vhdl入门 1.Verilog回顾 基本结构 verilog以module为单位,module的基本结构: (1)模块声明(内含端口定义),如: ​ module ( ​ inp ...

  6. verilog中一文搞懂有限状态机(FSM)Mealy和Moore状态机(及一段式,二段式,三段式)

    三段式 1.什么是有限状态机 2.Mealy 状态机 2.Moore FSM 3.Mealy 和 Moore的区别 4.Encoding 风格 设计原则 5. 一段式状态机 6. 二段式状态机 控制c ...

  7. VHDL语言的基本结构(结构框架说明)

    VHDL语言的基本结构 一.实体说明 主要描述的是一个设计单元的外部特征,即对外的输入/输出接口及一些用于结构体的参数定义. 规则一:建议将VHDL的标识符或基本语句关键词,以大写方式表示:而又设计者 ...

  8. 综合性实验五、有限状态机的硬件描述语言设计方法

    电子设计自动化实验 实验五 EDA 一.实验名称:综合性实验五.有限状态机的硬件描述语言设计方法 二.实验目的: 1. 熟悉用硬件描述语言(VHDL)设计一般状态机所包含的几个基本部分: 2. 掌握用 ...

  9. 用STATECAD快速设计有限状态机

    数字系统通常划分为信息处理单元和控制单元.信息单元主要进行信息的传输和运算, 而控制单元的主要任务是控制信息处理单元的微操作的顺序.控制单元的实现方式有: 有限状态机.控制寄存器和微代码控制器等.有限 ...

最新文章

  1. Linux 下 zip unzip压缩与解压
  2. P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)
  3. wow修改人物模型_一张照片生成人物动画!三星最新AI研究成果出炉
  4. 线程池框架-Executor
  5. 南阳oj-----懒省事的小明(set)
  6. 《大数据之路》阅读笔记--数据同步
  7. python实现SGD(stochastic gradient descent)算法
  8. 基于生物特征识别认证方式对应2020版《个人信息安全规范》的解读-1
  9. 小白入门大数据行业需要了解什么?
  10. ThreadLocal的使用场景及使用方式
  11. reflections歌词翻译_问:关于玛丽亚凯莉的一首Reflections 的中文翻译(不要翻译机!)...
  12. win7系统如何提升电脑开机速度?
  13. 2021年数维杯数学建模分析和思路——C题
  14. 将海康大华宇视等网络摄像机RTSP流采用websecket和H5进行RTSP网页无插件直播点播的技术方案
  15. 总结篇:消息中间件MQ的学习境界和路线
  16. Cadence Allegro打阵列过孔方法图文教程及视频演示
  17. 20181212股票早盘
  18. LeetCode 07: T48. 旋转图像 (中等); T54. 螺旋矩阵(中等); T240. 搜索二维矩阵 II (中等)
  19. 链接脚本(Linker Scripts)语法和规则解析(翻译自官方手册)
  20. 当今书法行业如何转型线上?

热门文章

  1. java 发邮件授权码_javamail - androidmail 发送邮件 各种邮件授权方式
  2. 计算机图形学一:基础变换矩阵总结(缩放,旋转,位移)
  3. 02信息安全法律法规
  4. 【学习笔记】Property Testing(性质检验)
  5. 笔记本电池9针脚图解_十个苹果笔记本充电及电池保养技巧
  6. 浙大c语言上机答案40061,C语言上机练习汇总及答案解析.doc
  7. 三维荧光平行因子学习记录--(一)DOMfluor工具箱的数据导入
  8. CCNA路由器及通信
  9. 看看行业现状,你愿意去日本做码农吗?
  10. 重装MacBook Pro系统