文档库 最新最全的文档下载
当前位置:文档库 › 03 第三章 VHDL语言基础 习题答案

03 第三章 VHDL语言基础 习题答案

03 第三章  VHDL语言基础 习题答案
03 第三章  VHDL语言基础 习题答案

填空题

1、一个标准的VHDL语言程序由库、实体和结构体组成。

2、个完整的VHDL语言描述是以对一个功能元件的完整描述为基础的

3、实体相当于电路图中一个器件符号。

4、端口说明(PORT)是对设计实体与外部接口的描述,也可以说是设计实体的外部引脚的名称,它为实体与外部环境的动态通信提供通道

5、缓冲(BUFFER)端口描述模式和INOUT双向模式的区别在于只能接受一个驱动源,不允许多重驱动。

6、VHDL语言的结构体的这些子结构互相之间是并行的。

7、将VHDL语言的行为描述语句转换为门级描述由VHDL开发工具自动完成,是VHDL语言综合器的任务。

8、数据流描述也称为RTL(寄存器传输级)描述方式,它类似于布尔方程,它既表示某种行为,又隐含结构信息,主要指非结构化的并行语句描述。

9、在结构描述中,元件间的连接是通过定义的端口界面来实现的。

10、结构描述的缺点是程序表示的是电路的结构连接关系,不能直观的得到设计电路的逻辑功能。

综述题

1、写出实体的结构。

答案:

ENTITY 实体名IS

[GENERIC(类属表);]

[PORT(端口表);]

END ENTITY 实体名;

2、在IEEE库中定义了哪四种VHDL语言的端口模式?

答案:

●IN:输入。

●OUT:输出。

●INOUT:双向,输入输出。

●BUFFER:缓冲,其实质也是双向的,但是只能接受一个驱动源。

3、写出结构体的结构。

?2 ?

答案:

ARCHITECTURE 结构体名OF 实体名IS

[说明语句]

BEGIN

[功能描述语句]

END ARCHITECTURE 结构体名;

4、写出结构体的功能性描述语句的5种子结构。

答案:

块语句、进程语句、子程序调用语句、信号赋值语句和元件例化语句。

5、VHDL有哪四种描述风格?

答案:

行为描述、数据流描述、结构描述以及由前三种组合的混合描述。

实验题

实验【一】编写一个实体

实验目的:熟悉实体的编写方法。

实验任务:在Quartus II中建立一个VHDL语言文件,编写一个实体,该实体要求如下:

实体名:TEST。

输入端口:INPUTA,INPUTB,数据类型为BIT。

输出端口:OUTPUT,数据类型为BIT。

没有类属说明。

答案:

ENTITY TEST IS --实体

PORT(

INPUTA,INPUTB: in bit; --2个输入引脚,类型BIT

OUTPUT: out bit); --1个输出引脚,类型BIT

END TEST;

实验【二】编写一个结构体

实验目的:熟悉结构体的编写方法。

? 3 ?

实验任务:在Quartus II中建立一个VHDL语言文件,编写一个结构体,该结构体要求如下:

实体名:TEST。

结构体名:RTL。

没有功能描述语句。

答案:

ARCHITECTURE RTL OF TEST IS --结构体,名称为RTL,对应实体为TEST

BEGIN

--无逻辑语句

END RT;

?4 ?

第一章EDA开发技术基础

在EDA开发中,用户以计算机为工具,在对应的集成开发环境中,用硬件描述语言完成设计文件,然后由计算机自动地完成逻辑编译、综合、优化、布局、布线和仿真等工作,并且对于特定目标芯片进行适配编译、逻辑映射和编程下载。本章将介绍EDA 开发技术的基础知识,包括EDA的发展历史、可编程逻辑语言的分类和特点,可编程逻辑器件的种类和开发方法,使用EDA进行设计的流程等。

1.1 EDA技术基础

EDA是电子设计自动化(Electronic Design Automation)的缩写,是在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。

1.1.1 EDA技术简介

EDA技术是现代电子信息工程领域中一门发展迅速的新技术。它是以计算机为工作平台,其以EDA软件工具为开发环境,以硬件描述语言为主要表达方式,以大规模可编程器件为设计载体,以ASIC、SOC、FPGA芯片为目标器件,以电子系统设计为应用方向的电子产品自动化设计过程。

EDA技术有广义和狭义之分。

从广义来说EDA技术包括半导体工艺设计自动化、可编程器件设计自动化、电子系统设计自动化、印制电路板设计自动化、仿真与测试故障诊断自动化等,例如PSPICE、EWB、MATLAB等计算机辅助分析CAA技术和PROTEL、ORCAD等印刷制版计算机辅助设计等。

从狭义来说EDA技术就是电子设计自动化,即通过相关的开发软件,自动完成用软件方式设计的电子系统到硬件系统的逻辑编译、化简、分割、综合、优化、以及布局布线、逻辑仿真等工作,最终完成对于特定目标芯片的适配编译、逻辑映射、编程下载,从而形成集成电子系统,不包含电子生产自动化。

EDA技术在电子系统设计中具有以下特点,所以的到了广泛应用:

●用软件的方式设计硬件。

●用软件方式设计的系统到硬件系统的转换是由相关软件自动完成的。

●在设计过程中可以用软件进行各种仿真进行验证。

●现代EDA工具具有高层综合和优化功能,能够在系统级进行综合、优化和方针,

从而缩短设计周期,提高工作效率。

●系统可以现场编程,在线升级。

? 5 ?第二章Quartus II集成开发环境

Altera公司的QuartusⅡ集成开发环境根据设计者的需求提供了一个完整的多平台开发环境,其包含了整个可编程逻辑器件设计阶段的所有解决方案,提供了完整的图形用户界面可以完成可编程片上系统的整个开发流程的各个阶段,包括输入、综合、仿真等,在其中设计者可以方便的完成数字系统设计的全过程。本章将介绍如何在Quartus II 集成开发环境应用VHDL语言进行数字系统的开发。

2.1 Quartus II应用基础

图1.2 QuartusⅡ设计流程

?6 ?

第三章VHDL语言基础

VHDL语言的应用程序都是由几个固定的部分组成的,通常来说缺一不可,并且其代码会具有一些固定的样式即描述风格。本章以一个使用VHDL语言来实现三态门的简单实例来介绍VHDL语言程序的一些基础知识,包括VHDL语言的组成,VHDL语言的实体,VHDL语言的结构体和VHDL语言的描述风格等。

3.1 VHDL语言程序的结构

和普通的应用语言程序一样,VHDL语言的程序也有自己的结构,或者说组成部分。一个简单的用VHDL语言实现的三态门如例3.1所示,各个语句对应的模块结构如右侧注释所示。

【例3.1】一个简单的VHDL语言程序和其结构

该应用代码对应的RTL文件如图3.1所示。

? 7 ?第四章VHDL语言的基本要素

和其他编程语言一样,硬件描述语言VHDL也有自己的文字规则。作为编程语句的基本单元,VHDL语言的语言要素反映了其重要的语言特点。能够正确理解VHDL语言的文字规则和熟练掌握VHDL语言要素的基本含义及用法,是利用VHDL硬件描述语言进行数字系统设计的基础,本章将就这些方面进行详细的介绍。

4.1 VHDL语言文字的命名规范

使用VHDL语言进行数字系统设计,必须在编程过程中严格遵守VHDL文字规则,如其特有的表达方式等,VHDL语言的文字(Literal)主要包括数值型文字和标识符。

●数值型文字:包括数字型、字符串型和位串型。

●标识符:用于定义常数、变量、信号、子程序或参数的名字。

4.1.1 数值型文字

数值型文字的值主要有以下几种表达方式:

●整数型文字:整数文字都是十进制的数,如:1,123,987,518E2,12_345_678

等。其中,下划线并无特殊含义,其唯一的作用就是增加文字的可读性,且不影

响文字本身的值。

●实数型文字:实数型文字与整数型文字一样都是十进制的数,但是他必须带有小

数点。如:12.3,34.502,0.0,6.5E-2(=0.065),123_456.789_321等。

●以数制基数表示的文字:用这种表示方法的文字由五部分构成。第一部分,用十

进制数来表示的数制基数;第二部分,数制隔离符号“#”;第三部分,要表达

的文字的数值表示;第四部分,指数隔离符号“#”;第五部分,用十进制表示的指数部分,当指数为0时,这部分可以省略不写,如下所示:

SIGNAL A,B,C : INTEGER RANGE 0 TO 255;

A <= 2#1100_1111#; --表示二进制计数,即十进制的207

B <= 10#158#2; --表示十进制计数,且指数为2,即十进制的158*158

C <= 8#375#; --表示八进制计数,即十进制的253

●物理量文字:此类型文字带有单位,如60s,1km,300pf等。这些文字用于行为

描述中,可以进行行为仿真,但是在综合时被忽略,不能被VHDL综合器综合

形成与之对应的硬件结构。

?8 ?

第五章VHDL语言的顺序描述语句

从执行顺序上划分,VHDL语言可以分为顺序描述语句(Sequential Statements)和并行描述语句(Concurrent Statements)两大类,前者在执行过程中是按照书写顺序依次执行的,而后者则是在同一时间同步执行的,在本章将详细地介绍顺序描述语句,包括其特点和分类以及赋值语句、代入语句和流程控制语句等顺序描述语句的使用方法。

5.1 顺序描述语句的特点和分类

顺序描述语句是相对于并行语句而言的,其最大的特点是:每一条语句在行为仿真中的顺序与他们在代码中的书写顺序相同,且只出现在进程或者子程序(包括过程和函数)中。

在数字系统设计中,顺序描述语句通常用来描述逻辑系统的组合逻辑、时序逻辑等。VHDL语言中的顺序描述语句主要包括:赋值语句(变量赋值语句)、代入语句(信号赋值语句)、流程控制语句、等待语句、子程序调用语句、返回语句和空操作语句等。

5.2 赋值语句介绍

赋值语句用于将一个值或者一个表达式的运算结果传递给变量或者变量数组,其标准格式如下:

目的变量<= 表达式;

该语句表示把右边的表达式的值赋给目的变量,但语句两边的数据类型必须相同。目的变量的类型、范围和初始值都应该先给出,右边表达式可以是变量、信号量或字符。变量只能在进程(PROCESS)或子程序(SUBPROGRAM)中使用,而无法传递到进程之外,所以它有点类似于其他高级语言中的局部变量。

例5.1是赋值语句的使用实例。

【例5.1】赋值语句的使用

ARCHITECTURE behavioral OF example_fuzhi IS

CONSTANT cvolt : REAL : = 3.3 ; -- 定义常数

CONSTANT ccurrent : REAL : = 4.0 ;

VARIABLE temp0, temp1 : REAL ; -- 定义变量

VARIABLE temp2, temp3 : INTEGER RANGE 0 TO 255 : = 10 ;

VARIABLE temp4 : STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ;

VARIABLE temp5 : STD_LOGIC ;

SIGNAL a : STD_LOGIC ; -- 定义信号

SIGNAL b : REAL ;

? 9 ?第六章VHDL语言的并行描述语句

在实际的数字系统中,很多操作是互相独立,可以并行(在同一时间执行)的;在VHDL语言中使用并行描述语言来对这些操作进实现,这些并行语句可以是结构性的,也可以是行为性的,其是硬件描述语言特有的,其在系统的某一时刻同时执行,不因编程的语句顺序而影响执行的先后。本章介绍了VHDL语言中的并行描述语句的使用方法,包括并发信号代入语句(Concurrent Signal Assignment)、进程语句(PROCESS)、元件调用语句(COMPONENT)、端口映射语句(PORT MAP)等。

6.1 并发信号代入语句

在5.3小节中介绍了代入语句,而本节讲的并发信号代入语句主要是强调该语句的并发性,其在仿真时刻同时运行,其表示可编程逻辑器件上的各个独立的硬件模块的各自独立操作。

6.1.1 并发信号代入语句基础

当信号代入语句在进程内部使用时,它将作为顺序语句的形式出现,当信号代入语句在结构体的进程之外使用时,它将作为并行语句的形式。实际上一个并发信号代入语句就是一个等效的进程的简略形式。下面就介绍并发信号代入语句的并发性和进程等效性。

例6.1是一个并发信号代入语句的应用实例。

【例6.1】并发信号代入语句的使用

q0 <= data1 + data2 ; -- 描述加法器行为

q1 <= data3 * data4 ; -- 描述乘法器行为

第一个信号代入语句描述了一个硬件加法器的行为,第二个信号代入语句描述了一个硬件乘法器的行为,这两个代入语句是并发执行的,硬件加法器和乘法器独立并行工作。在仿真时刻,两个语句是并发处理的,从而真实地模拟了实际硬件系统中加法器和乘法器的工作情况,这就是信号代入语句的并发性。

另外,一个并发信号代入语句就是一个简化的进程,如例6.2所示。

【例6.2】并发信号代入语句和信号的关系

ARCHITECTURE behav OF concurrent_example IS

BEGIN

q <= d0 NAND ( d1 OR d2 ) AFTER 7 ns ; -- 信号代入语句

END ARCHITECTURE behav ;

该并发信号代入语句可以等效于如下的进程形式。

?10 ?

第七章使用VHDL语言来设计组合逻辑

电路

常见的数字系统可以分组合逻辑电路和时序逻辑电路两大部分,组合逻辑电路是指在任何时刻,输出状态只决定于同一时刻各输入状态的组合,而与电路以前状态无关,而与其他时间的状态无关的电路,本章将详细介绍使用VHDL语言来设计组合逻辑电路的方法。

7.1 组合逻辑电路设计基础

7.1.1 逻辑代数基础

逻辑代数又称布尔代数,是19世纪英国数学家布尔首先提出来的,其是研究数字逻辑电路的基本工具和理论基础。

1. 逻辑变量和逻辑函数

逻辑代数是用来处理逻辑运算的代数。参与逻辑运算的变量称为逻辑变量,它一般只有0、1两种取值,称为“逻辑0”和“逻辑1”。逻辑0和逻辑1不同于普通代数中的0和1,因为在逻辑运算中它不表示具体的数值大小,而只是表示两种相互矛盾、相互对立的状态,如表示事件的真和假;信号的有和无;开关的通和断;电平的高和低等等。

逻辑函数是由若干逻辑变量经过有限次的逻辑运算所决定的输出。若输入逻辑变量确定以后,输出的值也就被唯一确定了,称这个输出为有关逻辑变量的逻辑函数。

2. 基本逻辑运算

所谓逻辑运算,就是按照人们事先设计好的规则,进行逻辑推理和逻辑判断。逻辑代数中,最基本的逻辑运算是“与”、“或”、“非”三种,其他任何复杂的逻辑运算都可以通过这三种基本逻辑运算来实现。

“与”逻辑运算又称为逻辑乘或逻辑与。它的定义是:只有决定某一事件是否发生的所有条件全部具备,这一事件才能发生,这种因果关系称为与逻辑。其中决定事件的条件称为输入逻辑变量,一般用字母A、B、C、D等表示;事件是否发生这一结果称为逻辑函数的输出,一般用字母F表示。若将决定事件发生的条件具备表示为逻辑1,条件不具备表示为逻辑0,事件发生表示为逻辑1,事件不发生表示为逻辑0,并将“条件”和“结果”的各种可能性列成表格,这种反映输入逻辑变量和输出函数值关系的表格称

? 11 ?第八章使用VHDL语言来设计时序电路

时序电路是一种常用的电子电路,其和组合逻辑电路是完全不同的两种类型的电路,组合电路的输出仅仅和电路当时的输入有关,而时序电路的输出不仅仅和电路当前输入相关,还和电路过去输入相关,本章将介绍时序电路的基本原理和如何在VHDL 语言中进行时序电路设计。

8.1 时序电路基础

由于时序电路的输出和其过去的状态也相关,所以时序电路中必然有记忆元件,用于记忆和过去输入信号相关的信息。

时序电路可以分为两大类:

●同步时序电路:其所有电路都是用一个公共的时钟信号,电路中所有的记忆元件

都受到这个时钟信号的同一控制,只有在该信号来到的时候记忆元件的状态才能发生变化,从而使时序电路的输入发生变化;而且每次时钟信号到来的时候,记忆元件的状态和电路的输出状态才会发生改变。

●异步时序电路:其电路中没有一个统一的时钟信号,各个记忆元件也不受到同一

个时钟控制,电路状态的改变是因为输入信号引起的。

时序逻辑电路在电路结构上有两个显著的特点。一是它通常包含组合电路和存储电路两个组成部分,而存储电路是必不可少的;二是存储电路的输出状态必须反馈到电路的输入端,与输入信号一起共同决定电路的输出。

由于任何时序逻辑电路都是以时钟为驱动信号的,时序电路只有在时钟信号的控制下其电路状态才会改变,时钟信号是时序电路的执行条件。另外由于时序逻辑电路有存储功能,因此它就具有初始状态,为了使时序电路正常工作,需要用复位信号使电路状态回归到一个确定的状态。

8.2 时序电路的时钟信号

时钟信号在时序逻辑电路中有着重要的作用,它将驱动时序逻辑电路状态的转移,根据时钟信号可以区分时序电路的原来状态和当前状态。

?12 ?

第九章使用VHDL语言来设计存储器

存储器(Memory)是数字系统的重要的组成部分,因为数字系统的工作一般都会伴随着数据的存储。存储器实际上是一种时序逻辑电路。数字系统中存储器主要包括:只读存储器(ROM)、随机存储器(RAM)和先入先出存储器(FIFO),本章将介绍使用VHDL语言来设计这些存储器的方法。

9.1 只读存储器(ROM)设计

9.1.1 只读存储器(ROM)基础

ROM是只读存储器(Read-Only Memory)的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦写入数据就无法再将之改变或删除。通常用在不需经常变更数据的电子或电脑系统中,并且数据不会因为电源关闭而消失,简而言之ROM 就是只能读不能写。

9.1.2 只读存储器(ROM)的VHDL语言实现

1. 单口只读存储器

单口只读存储器是指ROM只有一套数据总线,其同时只支持一个对ROM中地址单元的读操作。例9.1是一个256字节容量的8位单口ROM的VHDL语言实现实例,需要注意的是在实现中定义了一个文件用于将ROM中所有地址单元的数据内容都进行了初始化操作。

【例9.1】单口ROM的VHDL实现

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all; --库文件

entity single_port_rom is --实体

port

(

addr : in natural range 0 to 255; --地址变量

clk : in std_logic; --时钟变量

q : out std_logic_vector(7 downto 0) --八位输出

? 13 ?第十章使用VHDL语言来设计状态机

状态机就是一组触发器的输出状态随着时钟和输入信号按照一定的规律变化的一种机制或过程,所有的时序电路从理论上都可以表示为有限状态机(Finite State Machine,FSM),有限状态机是实现高可靠逻辑控制的重要途径,是大型数字系统设计中的重要组成部分,尤其是进行复杂时序逻辑电路的实现。本章在基本时序逻辑电路描述的基础上,介绍采用VHDL进行有限状态机设计的方法和有限状态机设计中需要注意的一些问题。

10.1 状态机基础

数字系统一般可分为控制单元和数据通道,数据通道通常由组合逻辑电路构成,而控制单元通常由时序逻辑电路构成。控制单元的每一个控制态可以看作一种状态,而状态之间的转换条件指定了下一个状态和输出信号,因此采用有限状态机可以非常清楚的描述时序电路之间的状态转换模式和状态转换的条件。

10.1.1 状态机的分类

有限状态机根据输出信号与当前状态以及输入信号的关系来分,可以分为Moore型和Mealy型两种:

●输出信号只和当前状态有关的状态机称为Moore型状态机,如图10.1所示。

●输出信号不仅和当前状态有关,而且也和输入信号有关的状态机称为Mealy型状

态机,如图10.2所示。

图10.1 Moore型有限状态机

图10.2 Mealy型有限状态机

?14 ?

第十一章VHDL语言的层次化设计

在使用VHDL语言来进行大型数字系统设计的时候可以采用层次化结构设计的方法将系统拆分为几个层次进行,这样可以使得系统的体系更加清晰,降低设计难度。本章将详细介绍VHDL语言的层次化设计思想以及如何使用层次化设计思想来进行数字系统设计,包括库、程序包以及配置的使用方法。

11.1 层次化结构设计基础

任何复杂的数字系统最终都可以分解基本门电路和寄存器电路单元,根据这个思路,在采用VHDL语言进行数字系统设计过程中,也可以将设计目标进行层层分解,在各个层次上分别设计;或者将目标分解成一些模块,各个模块同时进行设计,最后进行组合联调,这就是层次化、结构化的设计方法。层次化的设计方法能使复杂的电子系统简化,并且在不同的层次上都能够进行仿真验证,及时发现错误并加以纠正。结构化的设计能够将复杂的系统划分成一些模块,各个模块同时进行设计,分别编译、仿真验证,最后组合成一个系统,这样便于一些子模块资源的共享,如可以利用已经完成的工程项目中设计好的模块。

对于一个数字系统来说,设计层次可以从两个不同的角度来划分:按照性能描述划分和按照结构描述划分,对应于第三章中VHDL程序设计的不同描述风格——行为描述和结构描述。

系统的性能描述主要关注系统的行为,即系统完成什么功能,它通常只表示系统的输入输出间的关系,以系统的功能为设计目标,以系统的输入信号、内部状态和输出信号的要求为设计中心,至于具体的逻辑电路实现则并不关注。

系统的结构描述主要关注于实现某一功能的系统的具体结构以及各组成模块之间的连接关系,包括各个功能单元的具体的端口定义。它不能直观的表示系统的逻辑功能,需要根据各组成单元的功能及其相互驱动关系来确定,它是系统功能的具体实现电路。

数字系统一般可以分为以下6个层次:系统级、芯片级、寄存器级、门级、电路级和版图级。与之相对应,系统的性能描述和结构描述也可以分为6个层次,表8.1是对不同设计风格和设计层次的对应关系。

? 15 ?第十二章VHDL语言的仿真、综合和优化

在使用VHDL语言进行项目开发过程中,实现设计目标只是其中一部分的工作,此外还需要对该项目进行仿真、综合和优化工作,这些工作不仅仅可以提高芯片资源的利用效率,甚至可以提高设计正确性和设计效率。本章将介绍如何在VHDL语言开发过程中进行仿真、综合和优化。

12.1 VHDL语言的仿真

第二章介绍了在quartus中使用波形文件进行工程项目的仿真,在采用VHDL进行数字电路和数字系统的设计中,仿真是非常重要的一个步骤,要在设计的多个阶段进行多个层次的仿真如行为仿真、时序仿真和硬件仿真。它是对电路设计的一种检验方法,用VHDL描述的任何数字电路和数字系统是否正确,是否符合设计的目标和要求,都需要通过仿真来进行验证。仿真一般通过VHDL仿真器和具体的CPLD/FPGA芯片来完成。目前,各EDA公司和厂商为设计者提供了众多的仿真工具,如Synopsys公司的VCS,VEDA Desigan Automation公司的VULCAL等。仿真是利用VHDL语言进行数字电路设计的一个必不可少的步骤,它贯穿设计的整个过程。

在数字系统的设计过程中一般要进行三个层次仿真:行为级仿真、RTL级仿真和门级仿真,各级所要达到的目的是不一样的。

●行为仿真是针对设计进行系统级的仿真,主要用于对系统设计可行性进行评估和

验证,可以快速的对多种系统设计方案进行比较和论证,以此获得正确的最佳设计方案。

●RTL级仿真主要针对各个模块进行功能验证。

●而门级仿真则用于保证设计的电路针对具体器件的电气性能如延时等是满足设

计需求的。

可以把用VHDL描述的系统或模块看作能完成某一个功能的整体,给定它一组输入信号(测试向量),它就会根据设计的内容给出对应的一组输出信号(响应),将设计模块或系统的输出信号与按照逻辑功能要求预期得到的输出信号进行比较就能够判断被测部分功能的正确性以及是否满足设计的要求。

无论是功能仿真还是时序仿真,仿真方法一般有两种:一种是在大多数EDA工具中的VHDL仿真器允许进行交互式的操作,允许直接通过设置输入信号波形的方式对输入信号进行赋值,指定仿真时间,并观察输出波形的方式来进行仿真过程,第二章中介绍的即为这种方法。

另一种仿真方法就是利用测试平台的方法,自动的对被测试模块输入信号测试向量,并且通过波形输出和文件记录输出等方式,或者与测试平台中的设定输出向量来进

?16 ?

第十三章VHDL语言的属性描述语句

VHDL语言具有属性预定义和描述的功能,利用这些功能可以写出功能丰富、简明扼要的程序模块,因此熟练掌握VHDL语言的属性描述语句是应用硬件描述语言的关键之一。本章介绍了VHDL语言的属性描述语句使用方法,包括属性预定义、树数值类属性描述语句、函数类属性描述语句等。

13.1 属性预定义

VHDL语言的属性描述语句有许多重要的应用,可以用来获取一般数值的邻值、极限值,可以用来获取数组的长度、数组中的值,可以用来从块、信号或子类型中获取数据,可以用来获取未约束的数据类型的范围,可以用来检出时钟(clock)的边沿,可以用来完成定时检查。

属性描述语句一共包括6类:

●数值类属性描述语句。

●函数类属性描述语句。

●信号类属性描述语句。

●数据类型类属性描述语句。

●数据区间类属性描述语句。

●用户自定义属性语句。

通过VHDL语言的属性描述语句可以获得客体对象的有关值、类型、功能、范围等,用途非常广泛。预定义属性是VHDL语言程序设计的重要步骤、重要方法之一,是信息在变量、信号、文件、块、进程等不同客体之间传递、提取的重要方法,下面将结合各种具体应用实例,详细地向读者介绍各种属性描述语句。

13.2 数值类属性描述语句

数值类属性描述语句通常用来获得一般数据、数组、块的有关值,还可以用于获得数组的长度、数据类型的边界等。数值类属性描述语句还可以进一步细分为3个子类的属性描述语句,包括:

●一般数据的数值属性描述语句。

●数组的数值属性描述语句。

●块的数值属性描述语句。

? 17 ?

第十四章VHDL语言的数字系统设计应

用实例

数字系统设计是VHDL语言诞生的主要目的,其可以快速、方便、高正确率的实现针对具体应用的数字系统;此外利用VHDL语言描述的数字电路还可以与传统的数字系统设计方法相结合,取长补短共同实现能够完成目标任务的数字系统。本章介绍了交通灯控制器、出租车计费器、自动售货机和通用异步发送器这四个基于VHDL语言的数字系统设计应用实例。

14.1 交通灯控制器

随着各种交通工具的发展和交通指挥的需要,交通灯的诞生大大改善了城市交通状况,本应用是一个交通控制器的实例,用于控制十字路口主、支两条道路的红、绿、黄三色灯,指挥车辆和行人安全通信。

14.1.1 交通灯控制器的需求分析

该交通灯控制器要求能显示十字路口东西、南北两个方向的红、黄、绿的指示状态。用两组红、黄、绿三种颜色的灯分别作为东西、南北两个方向的红、黄、绿灯。变化规律如下:

●东西绿灯亮,南北红灯亮

●东西黄灯亮,南北红灯亮

●东西红灯亮,南北绿灯亮

●东西红灯亮,南北黄灯亮

●东西绿灯亮,南北红灯亮

南北方向是主干道车道,东西方向是支干道车道,要求两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行间为20秒,时间可设置修改。

在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。

要求交通灯控制器有复位功能,在复位信号使能的情况下能够实现交通灯的自动复位,并且要求所有交通灯的状态变化包括复位信号引起的均发生在时钟脉冲的上升沿处。

14.1.2 交通灯控制器的系统设计

根据交通灯系统设计要求,可以用一个有限状态机来实现这个交通灯控制器。首先根据功能要求,明确两组交通灯的状态,这两组交通灯总共有四种状态,分别用st0,st1,

?18 ?

内容简介

本书介绍了EDA技术和硬件描述语言VHDL的基础知识,通过对工程实例的系统分析、程序设计和仿真,深入细致的讨论了其在数字系统设计中的广泛应用。

本书首先介绍了EDA和VHDL语言基础知识,然后介绍了最常用的VHDL语言集成开发环境Quartus II,然后基于Qartus II介绍了VHDL语言的语法知识,包括VHDL 程序结构(如实体、结构体、块语句、库、程序包等)、VHDL语言要素(如文字规则、数据变量、数据类型、操作符等)、VHDL顺序语句和并行语句(如赋值语句、流程控制语句、子程序调用语句、进程语句、并行信号赋值语句等),讨论了基本电路(如组合逻辑里的加法器、译码器等,时序逻辑里的触发器、寄存器等,以及Mealy和Moore 型状态机)的VHDL实现方法;最后介绍了VHDL语言的综合、优化和层次设计并且给出了几个综合应用实例

本书从浅入深介绍了使用VHDL语言进行EDA设计的的整个流程,并且给出了大量的应用实例,适合具有一定数字电路基础的希望学习集成电路设计的读者,可以作为一本VHDL语言设计的参考手册,同时也适合以及高等院校电子类专业的学生和爱好者阅读。

? 19 ?

前言

行业背景

电子设计自动化(Electronic Design Automation,即EDA)技术是指包括电路系统设计、系统仿真、设计综合、PCB版图设计和制版的一整套自动化流程。随着计算机、集成电路和电子设计技术的高速发展,EDA技术已经渗透到百姓生活的各个角落,日益成为电子信息类产品的支柱产业;而硬件描述语言则是集成电路设计的核心技术,在常用的硬件描述语言中VHDL因其功能强大、严谨等特点占据了绝大部分市场。

关于本书

本书介绍了EDA技术和硬件描述语言VHDL的基础知识,通过对工程实例的系统分析、程序设计和仿真,深入细致的讨论了其在数字系统设计中的广泛应用。

本书首先介绍了EDA和VHDL语言基础知识,然后介绍了最常用的VHDL语言集成开发环境Quartus II,然后基于Qartus II介绍了VHDL语言的语法知识,包括VHDL程序结构(如实体、结构体、块语句、库、程序包等)、VHDL语言要素(如文字规则、数据变量、数据类型、操作符等)、VHDL顺序语句和并行语句(如赋值语句、流程控制语句、子程序调用语句、进程语句、并行信号赋值语句等),讨论了基本电路(如组合逻辑里的加法器、译码器等,时序逻辑里的触发器、寄存器等,以及Mealy和Moore型状态机)的VHDL实现方法;最后介绍了VHDL语言的综合、优化和层次设计并且给出了几个综合应用实例

本书的各个章节说明如下:

·第1章主要介绍EDA技术和VHDL语言的基础知识,并且详细介绍了使用VHDL语言来进行EDA设计的流程。

·第2章主要介绍了VHDL语言的集成开发环境Quartus II的使用方法。

·第3章主要介绍了VHDL语言程序的机构,包括描述风格、结构体、实体等。

·第4章主要介绍了VHDL语言的基本要素,包括标识符的命名规范,数据对象的使用和数据类型等。

·第5章主要介绍了VHDL语言的顺序描述语句,包括赋值语句、代入语句、流程控制语句、WAIT语句等。

·第6章主要介绍了VHDL语言的并行描述语句,包括并发信号代入语句、进程语句、过程语句等。

·第7章介绍了如何使用VHDL语言来设计组合逻辑电路,包括基础门电路、编码器、译码器、数据选择器等。

·第8章介绍了如何使用VHDL语言来设计时序电路,包括触发器、寄存器、计数器等。

·第9章介绍了如何使用VHDL语言来设计存储器,包括ROM、RAM、FIFO等。

·第10章介绍了如何使用VHDL语言来设计状态机,包括米勒型状态机、莫尔型状态机以及状态机的实际应用。

?20 ?

修改记录.txt

vhdl语言的基本知识点罗列.doc

VHDL语言的基本知识点罗列 1 VHDL语言的标识符 VHDL中的标识符可以是常数、变量、信号、端口、子程序或参数的名字。使用标识符要遵守如下法则: a)标识符由字母(A…Z;a…z)、数字和下划线字符组成。 任何标识符必须以英文字母开头。λ 末字符不能为下划线。λ b)不允许出现两个连续下划线。 标识符中不区分大小写字母。λ VHDL定义的保留子或称关键字,不能用作标识符。λ c) VHDL中的注释由两个连续的短线(--)开始,直到行尾。 以下是非法标识符: -Decoder —起始不能为非英文字母 3DOP —起始不能为数字 Large#number —“#”不能成为标识符的构成符号 Data__bus —不能有双下划线 Copper_ —最后字符不能为下划线 On —关键字不能用作标识符。 注:在AHDL语言中标识符要区分大小写,但在VHDL语言中不区分大小写。所以写程序时,一定要养成良好的书写习惯,应用关键字时用大写,自己定义的标识符用小写。 标识符表示的几种数据对象的详细说明如下: 1) 常数(Constant ) 常数是一个固定的值,主要是为了使设计实体中的常数更容易阅读和修改。常数一被赋值就不能在改变。一般格式: CONSTANT 常数名:数据类型:=表达式; 例:CONSTANT Vcc: REAL: =5.0; —设计实体的电源电压指定 常数所赋得值应与定义的数据类型一致。 常量的使用范围取决于它被定义的位置。程序包中定义的常量具有最大的全局化特性,可以用在调用此程序包的所有设计实体中;设计实体中某一结构体中定义的常量只能用于此结构体;结构体中某一单元定义的常量,如一个进程中,这个常量只能用在这一进程中。 2) 变量(Variable) 变量是一个局部变量,它只能在进程语句、函数语句和进程语句结构中使用。用作局部数据存储。在仿真过程中。它不像信号那样,到了规定的仿真时间才进行赋值,变量的赋值是立即生效的。变量常用在实现某种算法的赋值语句中。 一般格式: VARIABLE 变量名数据类型约束条件:=表达式; 例:VARIABLE x,y:INTEGER; —定义x,y为整数变量 VARIABLE count: INTEGER RANGE0 TO255:=10; —定义计数变量范围 变量的适用范围仅限于定义了变量的进程或子程序中。若将变量用于进程之外,必须该值赋给一个相同的类型的信号,即进程之间传递数据靠的信号。 变量赋值语句的语法格式如下:

第四章 VHDL的语言要素

第四章VHDL的语言要素 4.1 VHDL的数据对象 与其他高级语言一样,VHDL中把用来承载数据的容器叫做VHDL的数据对象,VHDL的数据对象主要有信号、常量和变量三类。 1 常量 在VHDL中,常量是一种不变的量,它只能在对它定义时进行赋值,并在整个程序中保持该值不变。常量的功能一方面可以在电路中代表电源、地线等,另一方面可提高程序的可读性,也便于修改程序。常量定义的格式为: CONSTANT 常量名:数据类型:=表达式; [例3.4] 常量定义举例 CONSTANT V: INTEGER:=8; 2 变量 变量是临时数据的容器,它没有物理意义,并且只能在进程和子程序中定义,也只能在进程和子程序中使用。变量一旦赋值立即生效。变量定义的描述格式为:VARIABLE 变量名:数据类型[:=表达式]; [例3.5]变量定义举例 VARIABLE y: INTEGER; 3 信号 信号是VHDL的一种重要数据对象,它定义了电路中的连线和元件的端口。其中端口和内部信号定义的差别是在端口定义中多了一个端口模式的定义。信号是一个全局量,可以用来进行各模块之间的通信。信号定义的格式为: SIGNAL 信号名:数据类型; [例3.6]信号定义举例 SIGNAL A: STD_LOGIC; 4.2 VHDL的数据类型 VHDL是一种强类型的语言,每一个数据对象都必须具有确定的数据类型定义,并且只有在相同数据类型的数据对象之间,才能进行数据交换。VHDL预定义了大量的数据类型,下面介绍几种最常用的数据类型。 1 整数数据类型(INTEGER) 整数类型的数有正整数负整数和零,在VHDL中其取值范围是:

VHDL语言的基本要素(大全)

VHDL语言的基本要素 一、数据对象 VHDL语言的主要数据对象有信号,变量,常量。 信号—信号是电路中的物理量,对应于电路的连线、节点;信号说明全局量,用于描述中的构造体(Architecture), 实体(Intity),程序包(package)。 变量—变量是程序运算中的中间量,并不对应电路中的物理量。变量说明局部量,用于进程语句(process), 函数(Function), 过程(procedure)。 常量—常数也不对应电路中的物理量,当常量说明全局量,在构造体(Architecture), 实体(Intity),程序包(package),进程语句(process), 函数(Function), 过程(procedure)中均可使用。数据对象的定义格式: signal 信号名:数据类型,约束条件,表达式 Variable 变量名:数据类型,约束条件:=表达式 Constant 常量名:数据类型,约束条件:=表达式 例如:Variable count:INTEGER RANGE 0 TO 255:=10 Constant Daly:Time:=100ns 信号代入和变量赋值的区别:两者形式不同,操作过程也不相同。变量赋值符“:=”,信号的代入符“<=”。 在变量的赋值语句中,该语句一当执行,其值立即将赋予变量;而信号的代入,其语句执行后不会立即使信号发生代入,在下条语句

执行时,仍使用原来的信号值,如进程语句中的敏感表的信号代入就是如此。 二、数据类型 VHDL语言中的数据类型,一般而言可分为:标量类型和组合类型。在实际使用中,也可分成予定义类型和用户定义类型。VHDL语言是强类型的语言,主要可按如下分类和变换处理。 ①标准数据类型 ⑴整数⑵实数(浮点数)-1.0E+38~+1.0E38 ⑶位bit (0,1) ⑷位矢量⑸布尔量,“假”,“真”⑹字符(ASCⅡ)字符 ⑺时间 ⑻错误等级⑼自然数(大于等于0的整数)⑽字符串 (字符矢量) ②用户定义的数据类型 TYPE 数据类型名{数据类型名} 数据类型定义 ⑴枚举类型⑵整数类型⑶实数类型⑷数组类型 ⑸存取类型⑹文件类型⑺记录类型⑻时间类型③用户定义子类型 SUBTUPE 子类型名IS 数据类型名[范围] 例:SUBTYPE digit is INTEGER RANGE 0 TO 9 ④数据类型转换 数据类型的变换函数通常由“STD_LOGIC_1164”,

03第三章VHDL语言基础习题答案.doc

填空题 1、一个标准的VHDL语言程序由库、实体和结构体组成。 2、个完整的VHDL语言描述是以对一个功能元件的完整描述为基础的 3、实体相当于电路图中一个器件符号。 4、端口说明( PORT )是对设计实体与外部接口的描述,也可以说是设计实体的外 部引脚的名称,它为实体与外部环境的动态通信提供通道 5、缓冲( BUFFER )端口描述模式和 INOUT 双向模式的区别在于只能接受一个驱动源,不允许多重驱动。 6、 VHDL语言的结构体的这些子结构互相之间是并行的。 7、将 VHDL语言的行为描述语句转换为门级描述由VHDL开发工具自动完成,是 VHDL 语言综合器的任务。 8、数据流描述也称为RTL (寄存器传输级)描述方式,它类似于布尔方程,它既 表示某种行为,又隐含结构信息,主要指非结构化的并行语句描述。 9、在结构描述中,元件间的连接是通过定义的端口界面来实现的。 10、结构描述的缺点是程序表示的是电路的结构连接关系,不能直观的得到设计电 路的逻辑功能。 综述题 1、写出实体的结构。 答案: ENTITY 实体名IS [GENERIC( 类属表 );] [PORT( 端口表 );] END ENTITY实体名; 2 、在 IEEE 库中定义了哪四种VHDL 语言的端口模式? 答案: IN :输入。 OUT :输出。 INOUT :双向,输入输出。 BUFFER :缓冲,其实质也是双向的,但是只能接受一个驱动源。 3、写出结构体的结构。

?2 ? 答案: ARCHITECTURE 结构体名OF 实体名IS [ 说明语句 ] BEGIN [ 功能描述语句] END ARCHITECTURE结构体名; 4 、写出结构体的功能性描述语句的 5 种子结构。 答案: 块语句、进程语句、子程序调用语句、信号赋值语句和元件例化语句。 5 、 VHDL 有哪四种描述风格? 答案: 行为描述、数据流描述、结构描述以及由前三种组合的混合描述。 实验题 实验【一】编写一个实体 实验目的:熟悉实体的编写方法。 实验任务:在 Quartus II 中建立一个 VHDL 语言文件,编写一个实体,该实体要求如下: 实体名: TEST 。 输入端口: INPUTA , INPUTB ,数据类型为BIT 。 输出端口: OUTPUT ,数据类型为BIT 。 没有类属说明。 答案: ENTITY TEST IS -- 实体 PORT( INPUTA,INPUTB: in bit; OUTPUT: out bit); --2 个输入引脚,类型BIT --1 个输出引脚,类型BIT END TEST; 实验【二】编写一个结构体 实验目的:熟悉结构体的编写方法。

第2章VHDL的语言要素讲义

第2章VHDL的语言要素 2.1 VHDL的命名规则: 2.1.1 数字型文字:d5<=16#E#E1 2.1.2 字符串型文字:文字字符串,数位字符串 数位字符串:位矢量,由数据类型为BIT的元素组成的一维数组。 书写格式:基数符“数值” 基数符:B—二进制数;O—八进制数;X—十六进制数例如:data1 <= B “1_1101_1110”; data2 <= O “15” ; data3 <= X “AD0”; data4 <= B “101_010_101_010”; data5 <= “101_010_101_010” ; --表达错误,缺B; dadata6 <= “0AD0”; --表达错误,缺X 2.1.3 标示符 标识符用来定义常数、变量、信号、端口、子程序或参数的名字等。 标示符包含:英文字母(大小写)、数字0~9 、下划线“_” 。 书写规则: ·有效的字符:英文字母包括26个大小写字母:a~z,A~Z;数字包括0~9以及下划线“_”。 ·任何标识符必须以英文字母开头。 ·必须是单一下划线“_”,且其前后都必须有英文字母或数字。 ·标识符中的英语字母不分大小写。 以下是几种标识符的示例: 合法的标识符: Decoder_1 , FFT , Sig_N , Not_Ack , State0 , Idle 非法的标识符: _Decoder_1 -- 起始为非英文字母 2FFT -- 起始为数字 Sig_#N -- 符号“#”不能成为标识符的构成

Not-Ack -- 符号“-”不能成为标识符的构成 RyY_RST_ -- 标识符的最后不能是下划线“_” data_ _BUS -- 标识符中不能有双下划线 return --关键字 扩展标识符:VHDL ’93标准还支持扩展标识符,但是目前仍有许多VHDL工具不支持扩展标识符。P20(1)、(2)、(3) 2.1.4\2.1.5 下标名和段名 ?(1)下标名指的是数组型变量或信号的某一个元素。 ?格式:标示符(表达式) ?SIGNALa,b:BIT_VECTOR(0 TO 3); ?SIGNAL m :INTEGER RANGE 0 TO 3; ?SIGNAL y,z :BIT; ?y <= a (m) ;-- 不可计算型下标表示 ?z <= b (3 ) ;-- 可计算型下标表示 ?(2)段名是多个下标名的组合,对应数组中某一段的元素 ?格式:标示符(表达式方向表达式) 方向:TO 或DOWNTO SIGNAL a ,z :BIT_VECTOR(0 TO 7); z(0 TO 3)<= a(4 TO 7);--z(0)<= a(4)、z(1)<= a(5)、… 2.1.6 注释:若要将一条语句加注释,在注释内容前加两个短划线。 2.2 VHDL语言的数据类型及运算操作符 Vhdl语言同其它语言一样有多种数据类型和运算符,且它们的定义也大多相同。VHDL语言的特点是用户可以自己定义数据类型。 如:type count is integer RANGE 0 to 10; 2.2.1 VHDL语言的客体(对象)及其分类 什么是客体? 可以赋予一个值的对象或者是数据类型所定义的对象。 客体主要包括3类

04 第四章 VHDL语言的基本要素 习题答案

填空题 1、VHDL语言的文字(Literal)主要包括数值型文字和标识符。 2、在VHDL语言的以数字基数表示的文字中,十进制计数的1582的表示方法是10#158#2。 3、在数位字符串中,B为二进制基数符号;O为八进制基数符号;X为十六进制基数符号。 4、下标用于指示数组型变量或信号的某一个元素。 5、VHDL语言的注释以--来表示。 6、VHDL语言中主要有4类基本的数据对象:常量(CONSTANT)、变量(VARIABLE)、信号(SIGNAL)和文件(FILES)。 7、在对信号进行赋初值时,使用:=表示没有延时,使用<=表示有延时。 8、VHDL是一种强类型语言,要求每一个数据对象必须具有确定的唯一的数据类型,而且只有数据类型相同的量才能互相传递和作用。 9、VHDL语言的数据类型按照数据来源来分,可以分为VHDL语言预定义的标准数据类型和用户自定义的数据类型。 10、位类型实际上是一个二值枚举型数据类型,只有两个可能的取值:0和1,用于表示逻辑0和逻辑1。 11、标准逻辑位类型是在IEEE的STD_LOGIC_1164程序包中定义的。 12、布尔类型和位类型类似,实际上是一个二值枚举型数据类型,有两个可能的取值:TRUE(真)和FALSE(假)。 13、VHDL语言中主要有4类操作符:逻辑操作符(LOGIC OPERATOR)、关系操作符(RELATION OPERATOR)、算术操作符(ARITHMETIC OPERATOR)和重载操作符(OVERLOADING OPERATOR)。 综述题 1、VHDL语言的数字型文字主要有哪几种表达方式,并且举例。 答案: ●整数型文字,如:1,123,518E2,12_345_678。 ●实数型文字,如:12.3,6.5E-2,12_23.45_32。 ●以数字基数表示的文字,如:10#158#2。 ●物理量文字,如:60s,1km。 2、VHDL语言标识符有哪些书写规范?

相关文档