第四章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;
EDA技术-VHDL-4.11 用状态机实现序列检测器的设计

4.11 用状态机实现序列检测器的程序设计与仿真1 实验目的用状态机实现序列检测器的设计,并对其进行仿真和硬什测试。
2 实验原理序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到—组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出“I”,否则输出“0”。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
该实验源程序描述的电路完成对序列数“11l00101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则输出“B”。
3 实验内容(1) 用VHDL语言编写序列检测器的源程序。
(2)将源程序进行综合、优化及功能仿真,并给出仿真波形,了解控制信号的时序,最后进行引脚锁定并完成硬件测试实验。
建议用键7(PIO11)控制复位信号CLR;键6(PI09)控制状态机工作时钟CLK;待检测串行系列数输入DIN接PIO10(左移,最高位在前):指示输出AB接PI039~PI036(显示于数码管6),下载后:①按实验板“系统复位”键:②用键2和键1输入2位十六进制待测序列数“11100101”;③按键7复位(平时数码6指示显“B”):④按键6(CLK)8次,这时若串行输入的8位二进制序列码(显示于数码2/1和发光管D8~D6)与预置码11100101”相同,则数码6应从原来的B变成A,表示序列检测正确,否则仍为B。
4 实验预习思考(1)说明源程序的代码表达的是什么类型的状态机,它的优点是什么?详述其功能和对序列数检测的逻辑过程。
(2) 写出由两个主控进程构成的相同功能的符号化Moore型有限状态机,画出状态图,井给出其仿真测试波形。
5 程序设计与仿真(1)程序设计为此工程新建一个文件夹。
《VHDL应用教程》课后习题参考答案

第1章绪论1.1电子设计自动化1.2EDA技术,是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。
1.31、用软件的方式设计硬件。
2、用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的。
3、设计过程中可用有关软件进行各种仿真。
4、系统可现场编程,在线升级。
5、整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。
因此,EDA技术是现代电子设计的发展趋势。
1.4可编程逻辑器件(Programmable Logic Device,PLD)是一种由用户编程以实现某种逻辑功能的新型逻辑器件。
FPGA和CPLD分别是现场可编程门阵列和复杂可编程逻辑器件的简称。
1.51、自顶向下设计方法是一种模块化设计方法。
它对设计的描述从上到下,逐步由粗略到详细,符合常规的逻辑思维习惯。
由于高层设计与器件无关,设计易于在各种集成电路工艺或可编程器件之间移植。
2、适合多个设计者同时进行设计。
随着技术的不断进步,许多设计由一个设计者已无法完成,而必须经过多个设计者分工协作来完成。
在这种情况下,应用自顶向下的设计方法便于多个设计者同时进行设计,对设计任务进行合理分配,并用系统工程的方法对设计进行管理。
第2章可编程逻辑器件2.1按结构的复杂程度分类、按互连结构分类、按可编程特性分类、按可编程器件的编程元件分类2.2主动串行配置式、主动并行配置模式、外设配置模式、从动串行配置模式、菊花链配置模式2.31、编程单元。
查找表型FPGA的编程单元为SRAM结构,可以无限次编程,但它属于易失性元件,掉电后芯片内的信息会丢失;而CPLD则采用EEPROM编程单元,不仅可无限次编程,且掉电后片内的信息不会丢失。
有限状态机(FSM)的设计

SIGNAL CS,NS: STATE_TYPE; BEGIN REG:PROCESS(CLK,RESET) BEGIN IF RESET=‘0’ THEN CS<=S0; THEN CS<=NS; --寄存器进程 --寄存器进程
ELSIF END
CLK'EVENT AND CLK='1‘
IF;
END PROCESS; FUNC1:PROCESS(INPUT,CS) BEGIN CASE CS IS WHEN S0=>IF INPUT ELSE END IF; WHEN S1=>IF INPUT ELSE END IF; WHEN S2=>IF INPUT ELSE END IF; WHEN S3=>IF INPUT ELSE END IF; --次态组合逻辑译码进程 --次态组合逻辑译码进程
EDA教程之VHDL状态机

普通摩尔型状态机的VHDL描述:
5.2.1 多进程状态机设计
例 5-2
5.2.2 单进程Moore状态机
由于以上状态机的输出信号是由组合电路发出 的,所以在一些特定情况下难免出现毛刺现象。
如果这些输出信号用作时钟信号,极易产生错误 的操作,需尽力避免。单进程Moore状态机较容 易构成能避免出现毛刺现象的状态机。
if clr='1' then current_state<=s0; elsif clk'event and clk='1' then current_state<=next_state; end if; end process;
com:process(current_state,din) begin
process(clk,clr) begin if clr='1' then reg<="00000000"; elsif clk'event and clk='1' then reg(0)<=din; reg(7 downto 1)<=reg(6 downto 0); end if; if reg=d then AB<="1010"; else AB<="1011"; end if; end process; end behav;
1
0
0
1
0
0
1
普通Mealy型状态机的VHDL描述:
[例5-5]
当前状态
st0 st1 st2 st3 st4
例5-5的仿真波形
下一状态(datain=x)
X=0
第四章 状态机及其VHDL设计

状态机进程 定义时钟信号
次态逻辑,temp_low和 temp_high不可能同时为1
输出逻辑
一个LE 共6个
例4.4.2(exp5):简单的有限状态机的风格C描述(寄存器优化)
2个LE
例4.4.3(exp6):简单的有限状态机的风格B描述(简洁的描述)
状态机进程 定义时钟 次态逻辑 输出逻辑
Tpd:
例4.4.4(exp7):简单的有限状态机的风格C描述(简洁 的描述)带同步复位
状态机进程
复位端低电平使能
例4.4.5(exp8):简单的有限状态机的风格C描述(简洁的描述) 增加了异步复位
进程等效(cool,heat)<=stvar;
例4.4.6(exp9):同例1增加了异步复位和测试扫描线路(复用 的扫描输入、输出端口) 清零信号 工作方式控制: 正常或扫描:0/1 在扫描模式时为 扫描输入 在扫描模式时为 扫描输出
2) 主控时序进程 是指负责状态机运转和在时钟驱动正负现状态机转 换的进程。状态机随外部时钟信号以同步方式工作, 当时钟的有效跳变到来时,时序进程将代表次态的 信 号 next_state 中 的 内 容 送 入 现 态 信 号 current_state中,而next_state中的内容完全由 其他进程根据实际情况而定,此进程中往往也包括 一些清零或置位的控制信号。 3) 主控组合进程 根据外部输入的控制信号(包括来自外部的和状态机 内容的非主控进程的信号)或(和)当前状态值确定 下一状态next_state的取值内容,以及对外或对内部 其他进程输出控制信号的内容。
例4.2(exp2):典型的Moore型状态机 S1 0001 0 S4 1000 1 1 S2 0010 0 S3 0100
《EDA技术与VHDL基础》课后习题答案

《EDA技术与VHDL基础》课后习题答案第一章EDA技术概述一、填空题1、电子设计自动化2、非常高速集成芯片硬件描述语言3、CAD、CAE、EDA4、原理图输入、状态图输入、文本输入5、VHDL、Verilog HDL6、硬件特性二、选择题1、A2、C3、A4、D5、C6、D7、A第二章可编程逻辑器件基础一、填空题1、PLD2、Altera公司、Xilinx公司、Lattice公司3、基于反熔丝编程的FPGA4、配置芯片二、选择题1、D2、C3、C4、D第三章VHDL程序初步——程序结构一、填空题1、结构、行为、功能、接口2、库和程序包、实体、结构体、配置3、实体名、类型表、端口表、实体说明部分4、结构体说明语句、功能语句5、端口的大小、实体中子元件的数目、实体的定时特性6、设计库7、元件、函数8、进程PROCESS、过程PROCEDURE9、顺序语句、并行语句二、选择题1、D2、C3、C4、B5、D6、B7、A8、C三、简答题2、LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY nand_3in ISPORT(a,b,c:IN STD_LOGIC;y:OUT STD_LOGIC);END;ARCHITECTURE bhv OF nand_3in ISBEGINy<=NOT(a AND b AND c);END bhv;5、00006、11110111(247)第四章VHDL基础一、填空题1、顺序语句、并行语句2、跳出本次循环3、等待、信号发生变化时4、函数、过程5、值类属性、函数类属性、信号类属性、数据类型类属性、数据范围类属性6、程序调试、时序仿真7、子程序、子程序二、选择题1、B2、A3、A4、C5、B6、C7、D三、判断题1、√2、√3、√4、√5、×6、×四、简答题9、修改正确如下所示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY count ISPORT(clk:IN BIT;q:OUT BIT_VECTOR(7 DOWNTO 0)); END count;ARCHITECTURE a OF count ISBEGINPROCESS(clk)IF clk'EVENT AND clk='1' THENq<=q+1;END PROCESS;END a;10、修改正确如下所示:…SIGNAL invalue:IN INTEGER RANGE 0 TO 15; SIGNAL outvalue:OUT STD_LOGIC;…CASE invalue ISWHEN 0=>outvalue<='1';WHEN 1=>outvalue<='0';WHEN OTHERS=>NULL;END CASE;…11、修改正确如下所示:ARCHITECTURE bhv OF com1 ISBEGINSIGNAL a,b,c:STD_LOGIC;pro1:PROCESS(clk)BEGINIF NOT (clk'EVENT AND clk='1') THENx<=a XOR b OR c;END IF;END PROCESS;END;12、(1) PROCESS(…) --本题中两条IF语句均为信号c进行可能赋值,VHDL语言不允许IF a=b THENc<=d;END IF;IF a=4 THENc<=d+1;END IF;END PROCESS;(2)ARCHITECTURE behave OF mux IS --同时为q进行多次可能赋值,VHDL语言不允许BEGINq<=i0 WHEN a='0' AND b='0' ELSE '0'; --WHEN ELSE语句语法错误q<=i1 WHEN a='0' AND b='1' ELSE '0';q<=i2 WHEN a='1' AND b='0' ELSE '0';q<=i3 WHEN a='1' AND b='1' ELSE '0';END behave;13、next1<=1101 WHEN (a='0' AND b='0') ELSEd WHEN a='0' ELSEc WHEN b='1' ELSE1011;15、(1)、STD_LOGIC_UNSIGNED(2)、GENERIC(3)、IN(4)、width-1(7)(5)、counter_n(6)、“00000000”(7)、clk’EVENT AND clk=’1’(8)、ELSIF(9)、END IF(10)、q<= count16、修改正确如下所示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CNT10 ISPORT ( clk: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END CNT10;ARCHITECTURE bhv OF CNT10 ISSIGNAL q1 : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS (clk)BEGINIF RISING_EDGE(clk) begin –begin修改为THENIF q1 < 9 THEN --q1为STD_LOGIC数据类型,而9为整型不可直接比较q1 <= q1 + 1; -- q1为STD_LOGIC数据类型,而1为整型不可直接相加ELSEq1 <= (OTHERS => '0');END IF;END IF;END PROCESS;q <= q1;END bhv;17、使用IF语句实现LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux21 ISPORT(ain,bin,sel:IN STD_LOGIC_VECTOR(1 DOWNTO 0);cout:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END;ARCHITECTURE bhv OF mux21 ISSIGNAL cout_tmp:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINPROCESS(ain,bin,sel)BEGINIF (sel="00") THEN cout_tmp<=ain OR bin;ELSIF (sel="01") THEN cout_tmp<=ain XOR bin;ELSIF (sel="10") THEN cout_tmp<=ain AND bin;ELSE cout_tmp<=ain NOR bin;END IF;END PROCESS;cout<=cout_tmp;END bhv;第五章QuartusⅡ集成开发软件初步一、填空题1、实体名2、FPGA、CPLD3、.vhd4、输入、综合、适配、仿真、下载5、RTL Viewer、Technology Map Viewer6、功能、参数含义、使用方法、硬件描述语言、模块参数设置7、mif、hex8、根目录二、选择题1、C2、D第七章有限状态机设计一、设计题1、LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ztj ISPORT(clk,reset:IN STD_LOGIC;in_a:IN STD_LOGIC_VECTOR(1 DOWNTO 0);out_a:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END;ARCHITECTURE bhv OF ztj ISTYPE state IS(s0,s1,s2,s3); --用枚举类型定义状态,简单直观SIGNAL current_state,next_state:state; --定义存储现态和次态的信号BEGINp1:PROCESS(clk) --状态更新进程BEGINIF clk'EVENT AND clk='1' THENIF reset='1' THEN current_state<=s0;ELSE current_state<=next_state;END IF;END IF;END PROCESS;p2:PROCESS(current_state,in_a) --次态产生进程BEGINCASE current_state ISWHEN s0=>IF in_a/=”00” THEN next_state<=s1;ELSE next_state<=s0;END IF;WHEN s1=>IF in_a=/'”01” THEN next_state<=s2;ELSE next_state<=s1;END IF;WHEN s2=>IF in_a=”11” THEN next_state<=s0ELSE next_state<=s3;END IF;WHEN s3=>IF in_a/='11' THEN next_state<=s0;ELSE next_state<=s3;END IF;WHEN OTHERS=>NULL;END CASE;END PROCESS;p3:PROCESS(current_state)BEGINCASE current_state ISWHEN s0=>out_a<='”0101”;WHEN s1=>out_a<=”1000”;WHEN s2=>out_a<=”1100”;WHEN s3=>out_a<=”1101”;WHEN OTHERS=>NULL;END CASE;END PROCESS;END;2、LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ztj ISPORT(clk,reset:IN STD_LOGIC;ina:IN STD_LOGIC_VECTOR(2 DOWNTO 0);outa:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END;ARCHITECTURE bhv OF ztj ISTYPE state IS(s0,s1,s2,s3); --用枚举类型定义状态,简单直观SIGNAL current_state,next_state:state;BEGINp1:PROCESS(clk) --状态更新进程BEGINIF clk'EVENT AND clk='1' THENIF reset='1' THEN current_state<=s0;ELSE current_state<=next_state;END IF;END IF;END PROCESS;p2:PROCESS(current_state,ina)BEGINCASE current_state ISWHEN s0=> IF ina =”101” THEN outa<=”0010”;ELSIF ina=”111” THEN outa <=”1100”;END IF;IF ina =”000” THEN next_state<=s1;ELSE next_state<=s0;END IF;WHEN s1=> outa<=”1001”;IF ina =”110” THEN next_state<=s2;ELSE next_state<=s1;END IF;WHEN s2=> outa<=”1111”;IF ina =”011” THEN next_stat e<=s1;ELSIF ina =”100” THEN next_state<=s2;ELSE next_state<=s3;END IF;WHEN s3=> IF ina =”101” THEN outa<=”1101”;ELSIF ina=”011” THEN outa <=”1100”;END IF;IF ina =”010” THEN next_state<=s0;ELSE next_state<=s1;END IF;WHEN OTHERS=>NULL;END CASE;END PROCESS;END;3、LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ztj ISPORT(clk,reset:IN STD_LOGIC;ina:IN STD_LOGIC_VECTOR(1 DOWNTO 0);outa:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END;ARCHITECTURE bhv OF ztj ISTYPE state IS(s0,s1,s2,s3); --用枚举类型定义状态,简单直观SIGNAL state:istate;BEGINp1:PROCESS(clk)BEGINIF clk'EVENT AND clk='1' THENIF reset='1' THEN state<=s0;result<='0';ELSECASE state ISWHEN s0=>outa<=”0000”;IF ina=”00” THEN state<=s1;ELSE state<=s0;END IF;WHEN s1=> outa <=”0001”;IF ina=”01” THEN state<=s2;ELSE state<=s1;END IF;WHEN s2=> outa <=”1100”;IF ina=”11” THEN state<=s3;ELSE state<=s0;END IF;WHEN s3=> outa <=”1111”;IF ina=”00” THEN state<=s0;ELSE state<=s3;END IF;WHEN OTHERS=>NULL;END CASE;END IF;END IF;END PROCESS;END;第九章VHDL基本逻辑电路设计一、填空题1、输入信号、所处状态2、组合逻辑、时序逻辑3、触发器、14、D触发器、RS触发器、JK触发器、T触发器二、选择题1、A2、C。
基于VHDL语言的状态机设计

摘要 :V DL语言 是一 种硬 件描 述 语言 ,用 于描 述硬件 的行 为和 结构 。与软 件 编程语 言被 翻译 成机 器 指令 不 同 ,V DL语 言是被 H H 翻译 成 数 字 电路 结 构 ,最终在 可 编程 器件 或 专用 集成 电路 A I 中 以电路 结构 的形 式 实现程 序所 描 述的功 能 。在设 计 中 ,状 态机是 最 SC
es lek: =k : +1
n e di i f
e ndi: f e r c s ndp o e s;
( ) 型循 环控 制模 块 : 型循 环控 制模 块是 系统 的核心 部 2花 花 分 ,它 主控 着 8 彩灯 的花 型 。循 环彩 灯控 制模块 主 要 由状态 机 路 设 计 ,用状态 机 设计 灵活 性强 。 按 设计 的要 求实现 8种花 型 : 0 0 1 1 1 0 0 0 、 1 0 0 1 00 11 、00 00 0 10 1 、
数 字 电路 分为 组合 逻辑 电路 和 时序 逻辑 电路 。组 合 逻辑 电路 的输 出只与 当前 输 入有 关 ,时序 逻辑 电路 的输 出不仅 与 当前 输入 有关 ,还与 过 去 的输入 有关 。状 态机 是 一种 广义 的时序 电路 ,它 的输 出不仅 与 当前输 入 信号有 关 ,还 与 当前 的状态 有 关 。 状 态机 有 三个 基本 要素 :状 态 、输 入 、输 出 状 态 是状 态机 中最 根本 的要素 。状 态机 的最 基 本特 点就 是 寄 存 器 中存储 的状态 按照 一 定 的条 件 或规 律进 行 转移 , 并输 出特 定 信号。 输 入信 号 作为 状态 机状 态转 移 的条 件 , 即状 态机 根 据输 入信 号和 当前状 态 决定 下一 个转 移 的状态 。 输 出信 号 一般 由当前状 态和 当前输 入信 号 决定 ,也 可只 由当 前状 态 决定 。 二、状 态机 的特点 ( )状态 机 的结 构模 式相 对简 单 ,设计 方 案相对 固定 。 1 ( )状 态机 的 V L设 计层 次分 明,结构 清晰 ,易读 易懂 。 2 HD () 3 就运 行速 度 而言 ,状态 机 的每一 个状 态 中可 以完成 许 多 并 行 的运算 和控 制 操作 。 ( )就可 靠性 而 言 ,状 态 机也 具有 明显 的优 势 。 4 三 、状 态机 的 分类 状 态机 可 分为 有 限状态 机和 无 限状 态机 ,在 这 里只 讨论 有 限 状态 机 。按 照输 出信号 是否 与输 入信 号 有关 ,可将有 限状态 机分 为 Mor 型和 Mel 型 。Mor 型状 态机 的输 出只与 当前 状态 有 oe ay oe 关 ,Mel 型状 态机 的输 出 不仅 与当 前状 态有 关 ,还 与当 前输 入 a y 有 关 。 oe型和 Me l Mo r a y型状 态机 示 意 图分别 如 图一和 图二 所示 。
关于三段式状态机(VHDL)的写法心得和问题

关于三段式状态机(VHDL)的写法⼼得和问题
三段式状态机,看着很繁琐,但是⽤起来条理清晰,⾃⼰总结⼀下
第⼀段:状态改变
这⾥需要特别注意的是,第5⾏,状态变化的时候,必须要使⽤时钟沿,上升或下降,不能在两个沿都变化,虽然这样仿真正确,但是下载到硬件中⽆效,状态不会变化
1:process(clk,rst_n)
2:begin
3:if(rst_n = '0') then
4: current_state <= s_wait;
5: elsif rising_edge(clk) then
6: current_state <= next_state;
7:end if;
8:end process state_change;
第⼆段:状态转化
这⼀段注意:
敏感列表是current_state和process中涉及到变化的所有信号
在case xxx is 前⾯初始化 next_state <= s_wait; 这样就不⽤在下⾯状态中关⼼这个状态了
最后要写 when others => 空,据说是避免综合出锁存器,现在还不理解。
第四章 VHDL语言程序基本结构

1. 对于VHDL的编译器和综合器来说,程序文字的大小 写不加区分。 2. 为了使程序结构清晰,易于阅读和调试,书写和输入 程序时,使用层次缩进格式,同一层次的语句对齐, 底层次的语句较高层次的语句缩进两个字符。 3. 程序中的注释使用双横线“--”。在VHDL程序的任 何一行中,双横线“--”后的文字都不参加编译和综 合。
4.1 设计实体
设计实体总由实体说明和结构体两部分构成
【例4-1】
EDA技术讲义
ENTITY mux21a IS PORT( a, b : IN BIT ; s : IN BIT; y : OUT BIT ) ; END ENTITY mux21a ;
实体说明
ARCHITECTURE one OF mux21a IS BEGIN y <= a WHEN s = '0' ELSE b ; END ARCHITECTURE one ;
复杂组合逻辑电路,如:
• 译码器、编码器、加减法器、多路选择器、地址译码器…...
状态机 等等……..
EDA技术讲义
VHDL的功能和标准
VHDL 描述
输入端口 输出端口 电路的行为和功能
VHDL有过两个标准:
IEEE Std 1076-1987 (called VHDL 1987) IEEE Std 1076-1993 (called VHDL 1993)
2选1多路选择器的VHDL描述
图4-1 mux21a实体
结构体
图4-2 mux21a结构体
4.1 设计实体
4.1.1 实体说明
EDA技术讲义
实体说明主要描述的是一个设计的外貌,即对外 的输入输出接口以及一些用于结构体的参数的定义。
- 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所定义一的原数据类型的一个子
集。满足原数据类型的所有约束条件,只是确定 了数据范围。