第四章VHDL状态机
4 硬件描述语言VHDL

下表给出VHDL的常用保留字(又称关键字)。
4.3.2 VHDL语言操作符
VHDL为构造计算数值的表达式提供了许多预定义算符。 预定义算符可分为四种类型:算术运算符、关系运算符、 逻辑运算符和连接运算符。分别叙述如下:
4.3.3 数据对象
在逻辑综合中,VHDL语言常用的数 据对象为:
■ 信号 ■ 变量 ■ 常量
4.1.6 本节主要内容
本节仅对用于CPLD/FPGA设计描述的 VHDL语言作一简单说明。
其设计过程一般如下: ——代码编写; ——由综合器综合成门级网表; ——前仿真/功能仿真; ——布局/布线至某一类CPLD/FPGA中; ——后仿真/时序仿真。
4.2 VHDL语言程序 的基本结构
引言 4.2.1 实体(Entity) 4.2.2 构造体( ARCHITECTURE ) 4.2.3 库(LIBRARY) 4.2.4 程序包 4.2.5 配置语句( CONFIGURATION )
——通用性好,支持面广。VHDL语言是工业 标准,凡大型CAD软件都支持VHDL语言的设计 环境,因此用VHDL编程的设计文件可通行于多 种不同的设计工具。
——重复使用性好。VHDL语言的描述与具体 生产工艺无关,变换不同的工作库便可适应不同 的生产工艺。只要设计正确,生产工艺进步了, 采用新的工作库,重新布版布图,便可继续使用。
——可读性好。VHDL语言用一种高级语言描 述电子实体,容易理解。VHDL语言被认为既是 设计实现,又是技术说明,设计与说明集于一体。
4.1.3 Verilog HDL语言
——Verilog HDL是在1983年,由GDA(GateWay Design Automation)公司的Phil Moorby首创的。 ——1986年,他对Verilog HDL的发展又作出了另一个巨大 的贡献:提出了用于快速门级仿真的XL算法。 ——1989年,Cadence公司收购了GDA公司,Verilog HDL 语言成为Cadence公司的私有财产。 ——1990年,Cadence公司决定公开Verilog HDL语言,于 是成立了OVI(Open Verilog International)组织,负责促进 Verilog HDL语言的发展。 ——基于Verilog HDL的优越性,IEEE于1995年制定了 Verilog HDL的IEEE标准,即Verilog HDL 1364-1995; ——2001年发布了Verilog HDL 1364-2001标准。在这个标 准中,加入了Verilog HDL-A标准,使Verilog有了模拟设计描 述的能力。
状态机VHDL讲解

VHDL的结构非常适合编写状态机,而且编写方式不唯一,电路的集成也会随着编写的方式而改变。
状态机的设计主要用到case when 和if else 两种语句。
Case when 用来指定并行的行为,而if then else 用来设计优先度的编码逻辑。
分析状态机有如下特点:1.对于状态的描述一般先声明一个枚举数据类型,语句如下:Type state_type is(idle,tap1,tap2,tap3,tap4);2.对于存储当前状态的对象一般用是一个信号,即:Signal state: state_type;3.对于状态机的下一个状态的判断一般是通过对时钟上升沿判断的if then else 语句内嵌case when 语句4.对于状态机的输出则可以用一个条件或者选择信号声明语句,或者再用一个case语句来实现信号输出。
状态机分为三大类型:1.Moore状态机:次态=f(现状),输出=f(现状),即输出信号是直接由状态寄存器译码得到2.Mealy状态机:次态=f(现状,输入),输出=f(现状,输入),即以现时的输入信号结合即将变成次态的现状编码成信号输出。
3.混合型状态机我们用一个序列信号发生器的实例来做练习。
(状态机将在以后的很多实例中加以运用,请掌握其编写方法)序列信号就是一些串行的周期性信号,这些信号在每个循环周期内1和0数码按一定的规则顺序排列。
下面所讲解的序列发生器能够按规定输出8位’0’,’1’序列。
代码如下:逐行解释:10:清零复位信号,高电平复位清零。
12:序列信号输出。
因为是8位的端口,但序列信号是串行的,所以相当于有8路的序列信号,任取一位端口就是一个序列信号输出。
17:用type声明一种枚举类型。
共8中状态,每个状态都对应唯一的一种输出,至于在什么状态输出什么信号则由程序决定。
18:定义一个state类型信号量,其初始的状态为s0。
19-26:用constant定义一些常量,这些常量将作为在不同状态时的输出信号。
VHDL状态机

ST0 ST1
ST2
ST3 ST4
42
st0 对0809初始化
LOCK:
0-→1 由LOCK 信号锁 存转换 好的数
据
st4 OE=’1'
st1
数据输出 有效
采样周 期等待
st3
st2
启动AD 转换 EOC=
‘0’正 在转换
EOC=‘1'转换结束
图8-6 控制ADC0809采样状态图
43
PROCESS
30
31
32
33
34
35
36
37
38
以下以ADC0809为例 ,说明状态机的设计 方法。用状态机对 0809进行采样控制首 先必须了解工作时序 ,然后据此作出状态 图,最后写出相应的 VHDL代码。
ADC0809 ALE
sin START OE
clk ADDA EOC D[7..0]
VHDL状态机设计
1
2
3
4
5
6
Moore型有限状态机的结构图
7
Mealy型有限状态机的结构图
8
9
10
11
12
13
14
用户自定义数据类型定义语句
这里介绍与有限状态机设计有重要联 系的其它语法现象,即用户自定义数据类 型定义语句及相关的语法现象。如枚举型 、整数类型、数组类型、记录类型、时间 类型、实数类型等。
39
ADC0809工作时序 地址锁存信号
转换启动控制 进入转换状态 转换状态结束
输出有效控制
输出数据 稳定 40
时序图中,START为转换启动控制 信号,高电平有效;ALE为模拟信号输 入选通端口地址锁存信号,上升沿有效; 一旦START信号有效后,状态信号EOC 即变为低电平,表示进入转换状态。转换 结束后,EOC将变为高电平。此后外部 控制可以使OE由低电平变为高电平(输 出有效),此时,0809的输出数据总线 D[7..0]从原来的高阻态变为输出数据有效 。
VHDL

第四章VHDL简明教程§4.1 VHDL基本结构与语法·VHDL是VHSIC Hardware Description Language的缩写□VHSIC—Very High Speed Integrated Circuit(1982年)·由美国国防部(DOD)制定,以作为各合同商之间提交复杂电路设计文档的一种标准方案·1987年被采纳为IEEE 1076标准·1993年被更新为IEEE 1164标准HDL 的出现是为了适应电子系统设计的日益复杂性。
若以计算机软件的设计与电路设计做个类比,机器码好比晶体管/MOS管;汇编语言好比网表;则HDL语言就如同高级语言,VHDL在语法和风格上类似与现代高级编程语言,如C语言。
但要注意,VHDL 毕竟描述的是硬件,它包含许多硬件特有的结构。
·现在VHDL被广泛用于:电路设计的文档记录设计描述的逻辑综合电路仿真采用VHDL及自顶向下方法在大型数字系统设计中被广泛采用。
在设计中你可采用较抽象的语言(行为/算法)来描述系统结构,然后细化成各模块,最后可借助编译器将VHDL 描述综合为门级。
本教程仅对用于CPLD/FPGA设计描述的VHDL语言作一简单说明。
其设计过程一般如下:1. 代码编写;2. 由综合器(如Synplify,Synopsys等)综合成门级网表;3. 前仿真/功能仿真;4. 布局/布线至某一类CPLD/FPGA中;5. 后仿真/时序仿真。
4.1.1 VHDL的组成一个VHDL设计由若干个VHDL文件构成,每个文件主要包含如下三个部分中的一个或全部:1.程序包(Package);2.实体(Entity);3.结构体(Architecture).——120其各自作用如下图所示:一个完整的VHDL设计必须包含一个实体和一个与之对应的结构体。
一个实体可对应多个结构体,以说明采用不同方法来描述电路。
VHDL状态机的简介

厦门理工学院电子系 刘虹
2
VGA行扫描、场扫描时序示意图
厦门理工学院电子系 刘虹
3
VGA工业标准要求的频率: 时钟频率(Clock frequency) : 25.175 MHz (像素输出的频率)
行频(Line frequency): 31469 Hz
场频(Field frequency ): 59.94 Hz(每秒图像刷新频率)
A/D转换仿真波形
厦门理工学院电子系 刘虹 17
8.4
直接数字合成器设计
8.4.1 数字式波形生成的基础知识
厦门理工学院电子系 刘虹
18
8.4.2 波形发生器的系统组成
波形发生器的系统组成
厦门理工学院电子系 刘虹
19
一周期的正弦波形与时钟周期的关系
厦门理工学院电子系 刘虹 20
8.4.3 采用DDS方式的波形发生器
TLC5510引脚图
厦门理工学院电子系 刘虹 11
TLC5510采样时序图
厦门理工学院电子系 刘虹 12
St0
ADck<='1'; lock<='1'; dclk<='0';
St1;0'; dclk<='1';
Adck:提供A/D采样时钟。 Adoe:TLC5510的输出使能,一 直有效。 Data:采样数据输出。 Dclk :用来同步 Data 的输出, 可以作为下一级的 Data 锁存信 号。
采用DDS方式的波形发生器
厦门理工学院电子系 刘虹 21
厦门理工学院电子系 刘虹
22
8.4.4 DDS设计中的参数选择
输出信号的频率为:
《VHDL语言程序设计》课程教学大纲

《VHDL语言程序设计》课程教学大纲课程简介课程简介:本课程为软件工程专业嵌入式专业方向的专业课,是开发基于FPGA/CPLD嵌入式系统的必备基础。
主要内容包括FPGA/CPLD目标器件的结构和工作原理、EDA技术和工作流程、VHDL基础知识、VHDL实用方法和设计深入、原理图输入法、LPM宏功能模块实用方法、状态机设计以及EDA优化设计。
目的是为后续课程的学习和嵌入式系统的设计作必须的基础准备。
课程大纲一、课程的性质与任务:本课程是软件工程专业的专业方向课程。
教学任务主要包括使学生了解EDA技术的工作流程,正确使用开发平台,掌握以VHDL为代表的硬件描述语言的基本知识、编程实用方法和工程设计方法,掌握原理图设计法、状态机设计法,能够正确使用IP Core和LPM等宏功能模块。
本课程是软件工程专业嵌入式专业方向的第一门专业方向课,是后续课程的必备基础,具有较重要的地位。
二、课程的目的与基本要求:本课程涉及到的学科基础知识面广,要求软硬件兼备,需要较好的学科基础。
通过本课程的学习,最终达到能够设计基于FPGA/CPLD的ASIC,并能进行EDA优化的目的。
三、面向专业:软件工程四、先修课程:《计算系统基础》五、本课程与其它课程的联系:本课程的先行课程是计算系统基础。
服务的主要后续课程包括基于FPGA的嵌入式软件开发、基于ARM的嵌入式软件开发等。
六、教学内容安排、要求、学时分配及作业:第一章概述(2学时)1.1 EDA技术及其发展(C)1.2 硬件描述语言硬件描述语言种类、自顶向下设计方法、EDA工程设计流程。
(A)1.3 面向FPGA/CPLD的开发流程设计输入、分析综合、布局布线、仿真、下载和硬件测试。
(A)1.4 IP Core 及EDA技术发展趋势。
(C)第二章 FPGA硬件特性与编程技术(8学时)2.1 PLD发展历程及其分类(c)2.2 低密度PLD工作原理PROM、PLA、PAL、GAL。
VHDL状态机111000

图像识别算法与系统设计题目:VHDL第一次作业给定任一二值图像,从中串行检测序列111000姓名:刘振宇学号:1502121227学院:电子通信工程学院一、设计功能与要求给定任一图像(不小于256*256),利用MATLAB将其转化成二值图像,并以.tex格式存储。
利用VHDL将文本读取并自主选择状态机进行序列检测,串行检测要求序列(111000)。
二、设计思路首先选取任一图像并利用MATLAB代码将其转换成.BMP格式,再将其转换成二值图像BW,转换之后用fprintf存储为.txt格式的文本形式。
第二部进行状态机的设计,根据要求设计七个状态来完成六位序列的状态循环,根据状态机原理图我选择上课时所讲的mealy_controller状态机,因为当前状态与前一时刻状态还有输入有关。
完成状态机模块的编写后进行子模块的调用和textio的读取,将子模块进行元件例化后用readline和read语句进行读去文本完成循环,最后进行仿真。
三、原理图说明六位状态机要求序列111000用七个状态st1到st7来表示,状态转换过程如下图3-1:图3-1 状态转移图由于当前状态与前一状态还有输入datain有关,所以选用mealy状态机最优。
一旦输入信号发生变化,输出信号即刻发生变化。
输入对输出的影响在当前时钟周期内体现出来,属于同步输出状态机。
满足串行输入时即刻显示状态的要求,能很好的完成题目要求。
状态从st1到st7进行循环,各个状态之间根据输入的不同也有转换关系,只有从st1依次到st7时才能检查到序列111000,其他情况下会重新检索或者自循环。
四、源代码首先要完成任一图片转换成二值图片的要求,MATLAB代码如下:RGB=imread('air.jpg');imwrite(RGB, 'air.bmp', 'bmp');Bw=im2bw(RGB,0.5);imwrite(Bw, 'air_two.bmp', 'bmp');ID=fopen('my_text.txt','w+');fprintf(ID,'%d',Bw);第二步要完成状态机的构造和各个状态在输入后的输出值变化,具体源代码如下:library IEEE;usestd.textio.all;use IEEE.std_logic_1164.ALL;useIEEE.std_logic_textio.all;entitymealy_controller isport (clk,datain,reset:instd_logic;q:out std_logic_vector(5 downto 0));endmealy_controller;architecturebeh of mealy_controller istype states is (st1,st2,st3,st4,st5,st6,st7);signalstx : states;signal q1:std_logic_vector(5 downto 0);begincomreg:process(clk,reset)beginif reset='1' then stx<=st1;elsifclk'event and clk='1'thencasestx iswhen st1=> if datain='1'then stx<=st2;end if;when st2=> if datain='1'then stx<=st3;else stx<=st1;end if;when st3=> if datain='1'then stx<=st4;else stx<=st1;end if;when st4=> if datain='0'then stx<=st5;else stx<=st4;end if;when st5=> if datain='0'then stx<=st6;else stx<=st2;end if;when st6=> if datain='0'then stx<=st7;else stx<=st2;end if;when st7=> if datain='0'then stx<=st1;else stx<=st2;end if;when others=>stx<=st1;end case;end if;end process comreg;com1:process(stx,datain,clk)variable q2:std_logic_vector(5 downto 0);begincasestx iswhen st1=>if datain='1'then q2:="000001";else q2:="000000";end if;when st2=>if datain='1'then q2:="000011";else q2:="000000";end if;when st3=>if datain='1'then q2:="000111";else q2:="000000";end if;when st4=>if datain='0'then q2:="001110";else q2:="000111";end if;when st5=>if datain='0'then q2:="011100";else q2:="000001";end if;when st6=>if datain='0'then q2:="111000";else q2:="000001";end if;when st7=>if datain='1'then q2:="000001";else q2:="000000";end if;when others=>q2:="000000";end case;ifclk'event and clk='1'then q1<=q2;end if;end process com1;q<=q1;--if q1="111000"then q<=q1;else q<="000000";end if;endbeh;为了随着状态变化完成111000的变化,根据状态机的原理图,新的输入被认为是从右向左输入,并在特定位置(如st4)保持不变。
第4章 VHDL语言基础

设计实体
结构体1
结构体2
结构体3
。 。 。
结构体n
FPGA-CPLD原理及应用
结构体的语法
第4章 VHDL语言基础
architecture 结构体名称 of 实体名称 is [说明语句] ;
begin [(功能描述)语句];
end [architecture] 结构体名称;
注:同一实体的结构体不能同名。定义语句中的常 数、信号不能与实体中的端口同名。
equal: out std_logic ); end eqcomp4;
A[3..0] B[3..0]
equal
FPGA-CPLD原理及应用
端口声明
第4章 VHDL语言基础
确定输入、输出端口的数目和类型。
Port (端口名称{,端口名称}:端口模式
… 端口名称{,端口名称}:端口模式 );
数据类型; 数据类型
FPGA-CPLD原理及应用
VHDL组成
第4章 VHDL语言基础
库 包 实体
结构体
eqcomp4.vhd
--eqcomp4 is a four bit equality comparator
Library IEEE; use IEEE.std_logic_1164.all;
entity eqcomp4 is port(a, b:in std_logic_vector(3 downto 0);
FPGA-CPLD原理及应用
第4章 VHDL语言基础
计数器等效描述(out与buffer的区别)
FPGA-CPLD原理及应用
3、数据类型
第4章 VHDL语言基础
指端口上流动的数据表达格式,为预先定好的数据类型,如: bit、bit_vector、integer、std_logic、std_logic_vector 等。 例: entity m81 is port (a: in std_logic_vector(7 downto 0); sel: in std_logic_vector(2 downto 0); b:out bit ); end entity m81;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
选通道1 Q:0809A/D转换后的数字输出数据,交给控制器锁存并输出
Company Logo
时序电路设计?(思考)
状态机就是在有效状态内,在时钟的驱动下,通过给定初 始状态,能够自动完成状态间的循环和相应状态的输出的 时序逻辑电路。
状态机分为状态译码部分:根据输入以及系统当前的状态, 由状态方程来决定下一状态的状态码。状态输出部分:根 据当前的状态码决定电路的当前输出。状态转换部分:将 下一状态转变为当前状态。
类型;
Company Logo
自定义数据类型
Type week is (sun,mon,tue,wed,thu,fri,sat); Type st1 is array (0 to 15) of std_logic; Std_logic_vector(0 to 15)
Type m_state is (st0,st1,st2,st3,st4,st5); Signal present_state,next_state : m_state;
SUBTYPE 子类型名 IS 基本数据类型 RANGE 约束范围
SUBTYPE digits IS INTEGER RANGE 0 to 9;
NATURAL POSITIVE
Company Logo
状态机有哪几种?
Moore状态机 输出只取决于系统当前的状态,而与系统的输入无关
Company Logo
状态机如何工作
状态输出
根据当前状态确定系 统的输出
有限状态 机
状态译码
根据当前状态和当前 输入,确定状态机的
下一状态码
状态转换
将状态译码的结果, 即下一状态转换为当
前状态
Company Logo
状态机的VHDL结构
状态译码,状态输出,状态转换
双进程结构,时序进程REG完成状态转换,即把下一状态 转换为当前状态,组合进程COM完成当前状态下的状态 译码和状态输出。
用VHDL语言描述状态机的一般模式(结构): 1.说明部分:定义状态机使用的枚举数据类型 2.主控时序进程:在时钟的驱动下进行状态转换。 3.主控组合进程:根据当前状态完成状态译码和
状态输出,并将状态译码反馈给主控时序进程, 将状态输出给系统输出。 4.辅助进程:完成一些辅助算法。 例 5-1
Mealy状态机 输出不仅取决于当前的状态,还取决于系统当前的输入。
Company Logo
状态机的优势
1.控制灵活 2.利于综合器的优化 3.能够良好的避免毛刺 4.程序结构清晰,层析分明 5.在高速运算和控制方面优势明显 6.可靠性高
Company Logo
状态机实例
Company Logo
0809控制器
状态转换图
程序实例: 例5-2
Company Logo
例5-2 程序解析
COM,REG,LATCH1三个进程 COM:状态译码和状态输出 REG:状态转换 LATCH1:转换数据锁存
输入输出信号作用解析: ALE:模拟信号通道地址锁存(为‘1’时读入待转换的模拟信号) START:A/D转换启动信号 LOCK:数据锁存进程锁存数据信号,为‘1’时锁存 OE:数据输出有效信号,为‘1’时输出转换好的数据 EOC:0809转换状态信号,为‘0’时表示正在进行A/D转换,为‘1’
Company Logo
与状态机相关的语法语句
类型定义语句 已定义数据类型:
BIT,STD_LOGIC,BOOLEAN…… 用户自己定义新的数据类型:枚举,数组,记录,
时间,实数等
如何自定义数据类型? TYPE 数据类型名 IS 数据类型定义; TYPE 数据类型名 IS 数据类型定义 OF 基本数据
第四章 VHDL状态机
电子信息工程学院
主要内容
一
状态机概述
二
Moore状态机
三
Mealy状态机
四 状态编码与非法处理
Company Logo
5.1 状态机概述
1
什么是状态机?
2
状态机如何工作?
3
状态机的VHDL结构
Байду номын сангаас
4
与状态机相关的语法语句
5
状态机的种类
Company Logo
什么是状态机?
时序电路分析:驱动方程,状态方程,输出方程,状态转 换表,状态转换图。
Company Logo
5.2 Moore状态机 输出只取决于系统当前的状态,而与系统的输入
无关
Company Logo
Moore状态机
1
多进程Moore状态机
2
单进程Moore状态机
3
两者比较及优缺点
Company Logo
多进程Moore状态机实例 多进程Moore状态机 (以A/D转换控制器为实例) 0809控制器
枚举数据类型是使用文字符号来表示一组实际的二进制数。 枚举类型的文字元素在综合器中使用一组二进制数值来表 示的,具体数值由综合器来完成,用户不需介入。
Company Logo
自定义数据类型
子类型SUBTYPE 子类型是由TYPE所定义一的原数据类型的一个子
集。满足原数据类型的所有约束条件,只是确定 了数据范围。