




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章第八章 超高速集成电路硬件超高速集成电路硬件 描述语言描述语言VHDLVHDL简介8-1 VHDL语言的基本组成语言的基本组成8-2 VHDL数据类型和属性数据类型和属性8-3 VHDL的行为描述的行为描述8-4 VHDL的结构描述的结构描述小结小结 传统的电路系统设计方法的步骤从状态图的简化,传统的电路系统设计方法的步骤从状态图的简化,写出最简逻辑表达式,到绘出电路原理图。这在不是写出最简逻辑表达式,到绘出电路原理图。这在不是较大的电路系统中,工程师可以用一定的时间,了解较大的电路系统中,工程师可以用一定的时间,了解电路的原理。若电路系统非常庞大,工程师就不容易电路的原理。若电路系统非
2、常庞大,工程师就不容易在电路原理图上了解电路的原理,而且对绘图者也是在电路原理图上了解电路的原理,而且对绘图者也是一项非常烦琐的工作。因此众多软件公司开发研制了一项非常烦琐的工作。因此众多软件公司开发研制了具有自己特色的电路硬件描述语言(具有自己特色的电路硬件描述语言(Hardware Description Language,HDL),这些硬件描述语言必),这些硬件描述语言必然有很大的差异,工程师一旦选用某种硬件描述语言然有很大的差异,工程师一旦选用某种硬件描述语言作为输入工具,就被束缚在这个硬件设计环境之中,作为输入工具,就被束缚在这个硬件设计环境之中,不能在众多的软件工具中选择一个最佳组
3、合作为自己不能在众多的软件工具中选择一个最佳组合作为自己的最优设计环境。因此,硬件设计工程师需要一种强的最优设计环境。因此,硬件设计工程师需要一种强大的、标准化的硬件描述语言,作为可相互交流的设大的、标准化的硬件描述语言,作为可相互交流的设计环境。计环境。 美国国防部在美国国防部在80年代初提出了年代初提出了VHSIC(Very High Speed Integrated Circuit)计划,其目标之)计划,其目标之一是为下一代集成电路的生产,实现阶段性的工一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成艺极限以及完成10万门级以上的设计,建立一项万门级以上的设计,建立一项新的描述方
4、法。新的描述方法。1981年提出了一种新的年提出了一种新的HDL,称,称之为之为VHSIC Hardware Description Language,简,简称为称为VHDL,这种语言的成就有两个方面:,这种语言的成就有两个方面:1. 描述复杂的电路系统描述复杂的电路系统;2. VHDL成为硬件描述语言的标准成为硬件描述语言的标准。VHDL的主要优点是:的主要优点是: 1.覆盖面广,描述能力强,是一个多层次的硬件描述语言。覆盖面广,描述能力强,是一个多层次的硬件描述语言。即设计的原始描述可以是非常简练的描述,经过层层细化求即设计的原始描述可以是非常简练的描述,经过层层细化求精,最终成为可直接付
5、诸生产的电路级或版图参数描述,整精,最终成为可直接付诸生产的电路级或版图参数描述,整个过程都可以在个过程都可以在VHDL的环境下进行。的环境下进行。 2.VHDL有良好的可读性,即可以被计算机接受,也容有良好的可读性,即可以被计算机接受,也容易被理解。用易被理解。用VHDL书写的原文件书写的原文件,即是程序,又是文档,即是程序,又是文档,即是技术人员之间交换信息的文件,又可作为合同签约者即是技术人员之间交换信息的文件,又可作为合同签约者之间的文件。之间的文件。 3.VHDL本身的生命期长,因为本身的生命期长,因为VHDL的硬件描述与工的硬件描述与工艺技术无关,不会因工艺变化而使描述过时。与工艺
6、技术艺技术无关,不会因工艺变化而使描述过时。与工艺技术有关的参数可通过有关的参数可通过VHDL提供的属性加以描述,工艺改变提供的属性加以描述,工艺改变时,只需修改相应程序中的属性参数即可。时,只需修改相应程序中的属性参数即可。 4.支持大规模设计的分解和已有设计的支持大规模设计的分解和已有设计的再利用,一个大规模设计不可能一个人独再利用,一个大规模设计不可能一个人独立完成,它将由多人,多项目组来共同完立完成,它将由多人,多项目组来共同完成。成。VHDL为设计的分解和设计的再利用为设计的分解和设计的再利用提供了有力的支持。提供了有力的支持。VHDL的主要优点是:的主要优点是: 5.VHDL已成为
7、已成为IEEE承认的一个工业标承认的一个工业标准,事实上已成为通用硬件描述语言。准,事实上已成为通用硬件描述语言。8-1 VHDL的基本组成的基本组成 VHDL可以把任意复杂的电路系统视作一个模可以把任意复杂的电路系统视作一个模块,一个模块可主要分为三个组成部分:块,一个模块可主要分为三个组成部分: 每个模块中的程序包有每个模块中的程序包有IEEE标准的标准程序标准的标准程序包或设计者自身设计的程序包,而且调用的数量包或设计者自身设计的程序包,而且调用的数量不限。模块中的程序包是设计中的子程序和公用不限。模块中的程序包是设计中的子程序和公用数据类型的集合,是构成设计工具的工具箱,工数据类型的集
8、合,是构成设计工具的工具箱,工具箱中最基本的工具是数据类型包,调用此标准具箱中最基本的工具是数据类型包,调用此标准程序包的程序包的VHDL语言是:语言是:一一、参数部分、参数部分程序包程序包例例1:LIBRARY ieee;USE ieee.std_logic_1164.all;调用程序包调用程序包语句语句标标准准程程序序包包定定义义程程序序包包 这两句设置在这两句设置在VHDL程序的前面,表示以后程序的前面,表示以后在实体或结构体中要用在实体或结构体中要用到数据类型包中的数据到数据类型包中的数据类型。类型。 模块中仅有一个设计实体,模块中仅有一个设计实体,它提供该设计模块的公共信息,它提供该
9、设计模块的公共信息,是是VHDL设计电路的最基本部设计电路的最基本部分。分。VHDL设计的电路系统是设计的电路系统是可以分层次的,所以设计的模可以分层次的,所以设计的模块系统实体即可以是顶层实体,块系统实体即可以是顶层实体,又可以是最底层实体。又可以是最底层实体。二、接口部分二、接口部分设计实体:设计实体:调用程序包调用程序包语句语句标标准准程程序序包包定定义义程程序序包包实体实体 及实及实体声体声明语明语句句ENTITY kxor ISkxor PORT(a1,b1:IN std_logic;a1b1 c1:OUT std_logic);c1END kxor;例例 2 实体部分的大写单词实体
10、部分的大写单词ENTITY、IS、PORT、IN、OUT和和END为关键字。在为关键字。在ENTITY.END之之间表示实体内容,间表示实体内容,ENTITY后的字符串后的字符串kxor表示表示实体的名称,即电路的符号名。端口(引脚)信实体的名称,即电路的符号名。端口(引脚)信息关键字息关键字PORT中的语句有三个端口,描述了信中的语句有三个端口,描述了信号的流向,分别是两个输入(号的流向,分别是两个输入(IN)模式)模式a1和和b1,一个是输出(一个是输出(OUT)模式)模式c1,端口信息除了输入,端口信息除了输入输出之外,还可以是双向、缓冲器等。输出之外,还可以是双向、缓冲器等。std_l
11、ogic表示信号取值的类型为标准逻辑位,除了标准逻表示信号取值的类型为标准逻辑位,除了标准逻辑位之外,还可以是实数、整数、无符号数、物辑位之外,还可以是实数、整数、无符号数、物理以及以上数据类型组成的记录和数组集合,信理以及以上数据类型组成的记录和数组集合,信号类型也可以是设计者定义。号类型也可以是设计者定义。三、描述部分三、描述部分结构体:结构体: 当异或门的符号和外部端口当异或门的符号和外部端口a1、b1和和c1确定之后,就要确定确定之后,就要确定实体的内部电路,使之与实体相实体的内部电路,使之与实体相对应。电路描述部分称之为结构对应。电路描述部分称之为结构体体ARCHITECTURE,它
12、描述实,它描述实体硬件的互连关系、数据的传输体硬件的互连关系、数据的传输和变换以及动态行为。一个实体和变换以及动态行为。一个实体可以对应多个结构体,每个结构可以对应多个结构体,每个结构体可以代表该硬件的某一方面特体可以代表该硬件的某一方面特性,例如行为特性,结构特性。性,例如行为特性,结构特性。调用程序包调用程序包语句语句标标准准程程序序包包定定义义程程序序包包实体实体 及实及实体声体声明语明语句句结结构构体体1结结构构体体2结结构构体体nARCHITECTURE kxor_arc OF kxor IS例例3BEGIN c1 = (NOT a1 AND b1) OR (a1 AND NOT b
13、1);END kxor_arc;kxora1b1c1a1b1c18-2 VHDL数据类型和属性数据类型和属性 VHDL硬件描述语言中涉及到了许多信号,变量和常硬件描述语言中涉及到了许多信号,变量和常量,它们用来保持一个数据。量,它们用来保持一个数据。 保持数据的信号,变量和常量,在保持数据的信号,变量和常量,在VHDL中称为中称为目标,每一个目标都有一个数据类型确定目标保持的目标,每一个目标都有一个数据类型确定目标保持的那一类数据。那一类数据。 VHDL是一种非常严格的数据类型化语言,规定每个信是一种非常严格的数据类型化语言,规定每个信号,常量或变量和每个表达式有一个唯一的确定数据类型,号,常
14、量或变量和每个表达式有一个唯一的确定数据类型,一般说,在表达式中分配数值给目标时的数据类型不可以一般说,在表达式中分配数值给目标时的数据类型不可以被混用。被混用。每个目标和表达式的类型静态地确定。每个目标和表达式的类型静态地确定。在在VHDL中有三类目标:信号、变量和常量。中有三类目标:信号、变量和常量。 信号和变量可以赋予一系列的值,而常量一次信号和变量可以赋予一系列的值,而常量一次仅被分配一个值。仅被分配一个值。 变量和信号又有不同,赋予信号的数值要到未来变量和信号又有不同,赋予信号的数值要到未来的某个时刻,信号才接受当前的数值,而赋予变量的的某个时刻,信号才接受当前的数值,而赋予变量的数
15、值,变量立即接受当前的数值。数值,变量立即接受当前的数值。目标的一般形式如下:目标的一般形式如下: 目标目标 : := ;目标目标:是一个或多个代表着目标种类的字符串,多个目:是一个或多个代表着目标种类的字符串,多个目 标时用标时用“,”号分开。号分开。 目标目标 : := ;目标种类目标种类:信号信号、变量变量和和常量常量。信号信号:它可以表示把元件的端口连接在一起的互连线。:它可以表示把元件的端口连接在一起的互连线。 变量变量:用于对暂时数据的局部存储,变量只在进程和子:用于对暂时数据的局部存储,变量只在进程和子 程序内部定义。程序内部定义。 常量常量:对某些特定类型数据赋予的数值。:对某
16、些特定类型数据赋予的数值。表达式表达式:表达式是为了规定目标的初始值,这是缺省部分。:表达式是为了规定目标的初始值,这是缺省部分。目标类型目标类型:为了规定目标的特征,:为了规定目标的特征,VHDL含有很宽范围的含有很宽范围的数据类型。数据类型。VHDL除了有基本的数据类型之外,设计者还除了有基本的数据类型之外,设计者还可以建立自己新的数据类型,类型说明部分规定类型名和可以建立自己新的数据类型,类型说明部分规定类型名和类型范围,它的一般形式是:类型范围,它的一般形式是:TYPE IS ;标量类型、复合类型、子类型、文件类型和寻址类型。标量类型、复合类型、子类型、文件类型和寻址类型。标量类型包括
17、所有的简单类型:如整数、实数等标量类型包括所有的简单类型:如整数、实数等复合类型包括数组和记录复合类型包括数组和记录寻址类型在一般编辑语言中等价为指针寻址类型在一般编辑语言中等价为指针文件类型用设计者定义的文件类型为设计者提供说明的文件对象文件类型用设计者定义的文件类型为设计者提供说明的文件对象子类型主要是对现有类型加以限制子类型主要是对现有类型加以限制VHDL可用数据类型有五类:可用数据类型有五类:一、一、 标量数据类型标量数据类型标量数据类型是基本的数据类型,它包括整数类型、标量数据类型是基本的数据类型,它包括整数类型、实数类型、物理类型和枚举类型。实数类型、物理类型和枚举类型。一个目标的
18、数值有可能经常更换或者说是包含多个值,一个目标的数值有可能经常更换或者说是包含多个值,但一个目标一次只能被一种类型说明。但一个目标一次只能被一种类型说明。物理类型要提供一个基本单位,然后在这个基本单位物理类型要提供一个基本单位,然后在这个基本单位上定义多个或零个次级单位,每个次级单位都是基本上定义多个或零个次级单位,每个次级单位都是基本单位的整数倍。单位的整数倍。枚举类型在形式上是定义括弧括起来的字符串文字表,枚举类型在形式上是定义括弧括起来的字符串文字表,一个字符串文字在枚举类型定义中只能出现一次,但一个字符串文字在枚举类型定义中只能出现一次,但允许同样一个字符串文字出现在不同的枚举类型的字
19、允许同样一个字符串文字出现在不同的枚举类型的字符串文字表中,枚举类型的字符串文字表中的文字是符串文字表中,枚举类型的字符串文字表中的文字是由设计者定义的,这些字母可以是单个字母,也可以由设计者定义的,这些字母可以是单个字母,也可以是一个字符串,例如是一个字符串,例如BREAKFAST, Lunch, a等。等。 下面举两个下面举两个VHDL程序加深理解程序加深理解枚举枚举类型的使用。类型的使用。P A C K A G E m e a l s _ p k g I S T Y P E m e a l I S ( b re a k f a s t , l u n c h , d i n n e r
20、) ;END meals_pkg;例例2:USE work . meals_pkg . all;ENTITY meals IS PORT(previous_meal:IN meal; next_meal:OUT meal);END meals;ARCHITECTURE meals_arc OF meals ISBEGIN WITH previous_meal SELECT next_meal = breakfast WHEN dinner, lunch WHEN breakfast, dinner WHEN lunch;END meals_arc;二、复合数据类型二、复合数据类型 复合类型是由
21、数组类型和记录类型组成,它们的元复合类型是由数组类型和记录类型组成,它们的元素是标量类型的元素。数组类型是由相同的标量元素素是标量类型的元素。数组类型是由相同的标量元素组成,即同构复合类型,数组可以是一维二维或多维。组成,即同构复合类型,数组可以是一维二维或多维。例如例如TYPE matrix IS ARRAY(row,column) OF std_logic;TYPE r_ma IS ARRAY( 1 TO 10, 1 TO 40) OF std_logic; TYPE word IS ARRAY(15 DOWNTO 0) OF BIT;TYPE column IS RANGE 1 TO 4
22、0; TYPE row IS RANGE 1 TO 10;CONSTANT ROM : BIT_VECTOR(0 TO 15);ARCHITECTURE rom_arc OF rom ISBEGIN PROCESS(cs,x1,x2,x3,x4) VARIABLE n:NATURAL RANGE 0 TO 15; CONSTANT rom0:std_logic_vector(0 TO 15):= “0101010101010101”; CONSTANT rom1:std_logic_vector(0 TO 15):= “0011001100110011”; CONSTANT rom2:std_
23、logic_vector(0 TO 15):= “0000111100001111”; CONSTANT rom3:std_logic_vector(0 TO 15):= “0000000011111111”;下面举一个VHDL程序说明一维数组实现164的ROM。LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY rom IS PORT(cs,x1,x2,x3,x4:IN std_logic; d0,d1,d2,d3:OUT std_logic);END rom; BEGIN IF cs= 1 THEN n:=0; IF x1 = 1 THEN n:
24、= n+1; END IF; IF x2 = 1 THEN n:= n+2; END IF; IF x3 = 1 THEN n:= n+4; END IF; IF x4 = 1 THEN n:= n+8; END IF; d0 = rom0(n) AFTER 10 ns; d1 = rom1(n) AFTER 10 ns; d2 = rom2(n) AFTER 10 ns; d3 = rom3(n) AFTER 10 ns; ELSE d0 = Z AFTER 10 ns; d1 = Z AFTER 10 ns; d2 = Z AFTER 10 ns; d3 = Z AFTER 10 ns;
25、END IF; END PROCESS; END rom_arc; 在结构体说明区(在结构体说明区(ARCHITECTURE和和BEGIN之间)被之间)被说明的目标,仅可以在此结构体中引用或在结构体中的任何说明的目标,仅可以在此结构体中引用或在结构体中的任何进程语句中被引用,称此目标为局部信号。进程语句中被引用,称此目标为局部信号。数据类型的全局化和局部化数据类型的全局化和局部化 前面已经讨论前面已经讨论VHDL描述语言的组成是由程序包、实体、描述语言的组成是由程序包、实体、结构体(结构体中有进程)、以及子程序而组成,不同的目标结构体(结构体中有进程)、以及子程序而组成,不同的目标可以在指定的
26、组成部分内加以说明。可以在指定的组成部分内加以说明。 如果一个目标在实体说明部分被说明,那么在本实体和本如果一个目标在实体说明部分被说明,那么在本实体和本实体内部的任何结构体和任何进程中都可以引用在实体中说明实体内部的任何结构体和任何进程中都可以引用在实体中说明的目标,称为全局信号;的目标,称为全局信号;VHDL中不同的目标和类型规定在不同的构造中可以被说明。中不同的目标和类型规定在不同的构造中可以被说明。信 号信 号 : 实 体 、 结 构 体 说 明 区 、 程 序 包 和 子 程 序 。: 实 体 、 结 构 体 说 明 区 、 程 序 包 和 子 程 序 。变量变量:进程语句说明区和子
27、程序。:进程语句说明区和子程序。常量常量:实体、结构体、进程语句说明区和程序包和子程序。:实体、结构体、进程语句说明区和程序包和子程序。标量类型标量类型:实体、结构体、进程语句说明区和程序包和子程序。:实体、结构体、进程语句说明区和程序包和子程序。复合类型复合类型:实体、结构体、进程语句说明区和程序包和子程序。:实体、结构体、进程语句说明区和程序包和子程序。文 件 类 型文 件 类 型 : 子 程 序 和 进 程 语 句 说 明 区 。: 子 程 序 和 进 程 语 句 说 明 区 。寻址类型寻址类型:进程语句说明区。:进程语句说明区。VHDL的属性的属性 VHDL中的属性使得中的属性使得VH
28、DL程序更加简明扼要,更程序更加简明扼要,更加容易理解,加容易理解,VHDL的属性在时序程序中几乎处处可的属性在时序程序中几乎处处可见,如值类属性的左边界、右边界、上下边界以及值见,如值类属性的左边界、右边界、上下边界以及值类属性的长度,还可以检测信号上升沿和下降沿以及类属性的长度,还可以检测信号上升沿和下降沿以及前一次发生的事件等等。前一次发生的事件等等。 VHDL的属性可归纳为,信号类属性、函数类属性、的属性可归纳为,信号类属性、函数类属性、 值类属性、类型类属性和范围类属性。本节介绍值类值类属性、类型类属性和范围类属性。本节介绍值类属性及函数信号类属性。属性及函数信号类属性。TYPE b
29、it IS ARRAY(63 DOWNTO 32) OF BIT; VARIABLE left_range,right_range,uprange,lowrange:INTEGER;BEGIN l e f t _ r a n g e : = b i t L E F T ; - - re t u r n s 6 3 right_range:= bitRIGHT; -returns 32 uprange:= bitHIGH; -returns 63 lowrange:= bitLOW; -returns 32 值类属性值类属性:值类属性用于返回数组的边界或长度,首先举一例值类属性用于返回数组的边界
30、或长度,首先举一例数组边界的例子说明类型属性。数组边界的例子说明类型属性。例例8:TYPE bit IS ARRAY(0 TO 7) OF BIT;TYPE bit1 IS ARRAY(8 TO 31) OF BIT; VA R I A B L E l e n 1 , l e n 2 : I N T E G E R ;BEGIN len1:=bitLENGTH; -return 8 len2:=bit1LENGTH; -return 24 下面再举一个值类数组属性的例子,让其返下面再举一个值类数组属性的例子,让其返回数组范围的总长度。回数组范围的总长度。例例: 它可用来检查一个信号的变化,并且
31、变化刚它可用来检查一个信号的变化,并且变化刚刚发生,既推断出在信号上发生了一个跳变。刚发生,既推断出在信号上发生了一个跳变。 函数信号属性:函数信号属性用来返回有关信函数信号属性:函数信号属性用来返回有关信号行为功能的信息,它反映一个信号是否正好有值号行为功能的信息,它反映一个信号是否正好有值的变化或事件的发生,如的变化或事件的发生,如clkEVENT,这个属性为,这个属性为“EVENT”,对检查时钟边沿触发是很有效的。,对检查时钟边沿触发是很有效的。下面举一个例子,说明函数信号属性的用法下面举一个例子,说明函数信号属性的用法IF clk= 1 AND clkEVENT THEN q = d;
32、END IF; 上述语句中用到了函数信号属性上述语句中用到了函数信号属性clkEVENT,说明,说明如果时钟信号如果时钟信号clk为高电平,并且事件刚刚发生,也就为高电平,并且事件刚刚发生,也就是说是时钟上升沿有效,此时是说是时钟上升沿有效,此时q得到得到d的信号。的信号。8-3 VHDL的行为描述的行为描述 在在VHDL硬件描述语言中,描述电路逻辑的程硬件描述语言中,描述电路逻辑的程序称为序称为行为描述行为描述,行为描述有,行为描述有并行行为描述并行行为描述、进程进程行为描述行为描述和和顺序行为描述顺序行为描述。 三个行为即可以是相互独立,成为单一的行为三个行为即可以是相互独立,成为单一的行
33、为描述体,又可以相互联系,成为混合描述体,如进描述体,又可以相互联系,成为混合描述体,如进程行为描述行为程行为描述行为之间之间是并行行为,进程行为体的是并行行为,进程行为体的内内部部是顺序行为。是顺序行为。一、一、VHDL的并行行为的并行行为 在典型的编程语言如在典型的编程语言如C或或Pascal中,每个赋值语句按规定的次中,每个赋值语句按规定的次序,一个接在另一个之后顺序执行,执行的次序由源文件决定。序,一个接在另一个之后顺序执行,执行的次序由源文件决定。 在在VHDL中,结构体的内部没有规定语句的次序,执行的次序中,结构体的内部没有规定语句的次序,执行的次序仅由对语句中的敏感信号发生的事件
34、决定,且语句是同时执行,产仅由对语句中的敏感信号发生的事件决定,且语句是同时执行,产生其并行型。生其并行型。结构体中并行赋值语句的一般格式如下:结构体中并行赋值语句的一般格式如下: = 该一般形式读作对象得到表达式的值,其作用是将表达式的信号该一般形式读作对象得到表达式的值,其作用是将表达式的信号值分配给对象,也就是说每当表达式的信号值变化时执行该语句。值分配给对象,也就是说每当表达式的信号值变化时执行该语句。 每个表达式都至少有一个敏感信号,每当敏感信号改变其每个表达式都至少有一个敏感信号,每当敏感信号改变其值时,这个信号赋值语句就执行,值时,这个信号赋值语句就执行, 在所有的并行语句中,两
35、个以上的并行赋值语句在字面在所有的并行语句中,两个以上的并行赋值语句在字面上的顺序并不表明它们的执行顺序,上的顺序并不表明它们的执行顺序,例如下面的两个结构体在功能上是等价的。例如下面的两个结构体在功能上是等价的。ENTITY exe IS PORT(a1,a2:IN BIT; b1,b2:OUT BIT);END exe;ARCHITECTURE exe_arc1 OF exe ISBEGIN b1 = a1 AND b2; b2 = NOT a1 OR a2;END exe_arc1;ARCHITECTURE exe_arc2 OF exe ISBEGIN b2 = NOT a1 OR a
36、2; b1 = a1 AND b2;END exe_arc2;a1a2b1b2 另一种并行信号赋值语句是选择信号赋值语句,它们的每一另一种并行信号赋值语句是选择信号赋值语句,它们的每一个赋值语句都需要给出一个表达式,同时给出与该表达式的每个个赋值语句都需要给出一个表达式,同时给出与该表达式的每个可能值相关联的信号可能值相关联的信号 选择信号赋值语句的一般形式如下:选择信号赋值语句的一般形式如下: WITH SELECT = WHEN , WHEN , WHEN ; 一个典型的四路数据选择器的一个典型的四路数据选择器的VHDL程序说明程序说明WITH一般一般形式的用法形式的用法ENTITY se
37、ls IS PORT(d0,d1,d2,d3:IN BIT; s :IN INTEGER RANGE 0 TO 3; out1 :OUT BIT);END sels;ARCHITECTURE sels_arc OF sels ISBEGIN WITH s SELECT out1 = d0 WHEN 0, d1 WHEN 1, d2 WHEN 2, d3 WHEN 3;END sels_arc;d0d1d2d3sout1sels 仍以四路数据选择器为例,讨论另一个较为复杂的并仍以四路数据选择器为例,讨论另一个较为复杂的并行信号赋值语句的例子,以便更详细地说明并行概念,行信号赋值语句的例子,以便更
38、详细地说明并行概念,下面是四输入数据选择器的第二个下面是四输入数据选择器的第二个VHDL程序。程序。例:例:LIBRARY ieee; USE ieee.std_logic_1164.all;ENTITY mux4 IS PORT(I0,I1,I2,I3,A,B:IN std_logic; Q :OUT std_logic);END mux4;ARCHITECTURE mux4_arc OF mux4 IS SIGNAL sel :INTEGER ;BEGIN Q = I0 AFTER 10 ns WHEN sel= 0 ELSE I1 AFTER 10 ns WHEN sel= 1 ELSE
39、 I2 AFTER 10 ns WHEN sel= 2 ELSE I3 AFTER 10 ns ; sel = 0 WHEN A= 0 AND B= 0 ELSE 1 WHEN A= 1 AND B= 0 ELSE 2 WHEN A= 0 AND B= 1 ELSE 3 ;END mux4_arc;二、二、VHDL的进程行为的进程行为 VHDL除了并行行为之外,还有顺序行为。顺序行为执行除了并行行为之外,还有顺序行为。顺序行为执行的顺序是一个接在另一个之后严格执行。的顺序是一个接在另一个之后严格执行。顺序行为的语句存在于顺序行为的语句存在于VHDL程序中的程序中的进程行为进程行为之中。之中。而
40、进程行为之间是并行行为语句而进程行为之间是并行行为语句。进程行为语句的一般形式如下进程行为语句的一般形式如下: :PROCESS BEGIN WAIT ON ; WAIT UNTIL ; WAIT FOR ; END PROCESS; 进程行为的说明区定义该进程所需要的局部数据环境、它进程行为的说明区定义该进程所需要的局部数据环境、它包括包括子程序说明子程序说明、属性说明属性说明和和变量说明变量说明等等在这里只给出在这里只给出变量说明变量说明的一个例子,变量说明的一般形式为的一个例子,变量说明的一般形式为VARIABLE : ;下面进程说明区中说明了变量下面进程说明区中说明了变量count,进
41、程也可对变量赋值。,进程也可对变量赋值。 PROCESS VARIABLE count:INTEGER:= 0; BEGIN count:= count+1; WAIT FOR 1000 ns; END PROCESS; 整个实体模块中的每个进程行为语句,可以在任何时候被整个实体模块中的每个进程行为语句,可以在任何时候被激活,所有被激活的进程是并行执行的激活,所有被激活的进程是并行执行的 下面举一个三八通用译码器程序的例子,说明进程语句下面举一个三八通用译码器程序的例子,说明进程语句如何工作。如何工作。LIBRARY ieee; USE ieee.std_logic_1164.all; USE
42、 ieee.std_logic_arith.all; ENTITY decoder IS PORT(sel : IN UNSIGNED(2 DOWNTO 0); dout : OUT UNSIGNED(7 DOWNTO 0); END decoder;ARCHITECTURE decoder_arc OF decoder IS SIGNAL sel1 :INTEGER; BEGIN PROCESS(sel) BEGINsel1 dout dout dout dout dout dout dout dout = (1,0,0,0,0,0,0,0) AFTER 5 ns; END CASE; EN
43、D PROCESS; END decoder_arc; 此例不像上例那样等待时间到此例不像上例那样等待时间到1000ns以后再激活进程,而以后再激活进程,而是只要是只要sel的值一发生改变就激活进程,从第一句执行直到满足的值一发生改变就激活进程,从第一句执行直到满足条件后再被挂起。条件后再被挂起。下例是另一种激活进程的方式:下例是另一种激活进程的方式:ENTITY reg IS PORT(d,clk:IN BIT; q1,q2:OUT BIT); END reg; ARCHITECTURE reg_arc OF reg IS BEGIN PROCESS BEGIN WAIT UNTIL clk
44、= 1; q1 = d; END PROCESS; PROCESS BEGIN WAIT UNTIL clk= 0; q2 = d; END PROCESS; END reg_arc;进程行为语句之间是进程行为语句之间是并行关系,进程行为并行关系,进程行为语句内部是顺序关系。语句内部是顺序关系。VHDL的每个结构的每个结构体中可以有多个进程体中可以有多个进程行为语句。行为语句。它的关键之处是:它的关键之处是:三、三、VHDL的顺序行为的顺序行为顺序行为语句可分为两大类:顺序行为语句可分为两大类:条件控制类条件控制类,循环控制类循环控制类 在这两类中选出六种在这两类中选出六种 IF、CASE、F
45、OR、WHILE.LOOP、EXIT和和ASSERT进行讨论进行讨论 IF THEN ; ELSIF THEN ; ELSIF THEN ; ELSE ; END IF;1、IF语句语句IF语句的一般形式为:语句的一般形式为:ARCHITECTURE alarm_arc OF alarm ISBEGIN下面举例说明下面举例说明IF条件语句的用法。条件语句的用法。例例: 用用VHDL设计一家用告警系统的控制逻辑,它有来自传感设计一家用告警系统的控制逻辑,它有来自传感器的三个输入信号器的三个输入信号smoke、door、water和准备传输到告警设备和准备传输到告警设备的三个输出触发信号的三个输出
46、触发信号fire_alarm、burg_alarm、water_alarm以以及使能信号及使能信号en和和alarm_en。VHDL程序描述如下:程序描述如下:LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY alarm IS PORT(smoke,door,water:IN std_logic; en,alarm_en :IN std_logic; fire_alarm,burg_alarm,water_alarm:OUT std_logic);END alarm;PROCESS(smoke,door,water,en,alarm_en) BEG
47、IN IF (smoke= 1) AND (en= 0) THEN fire_alarm = 1; ELSE fire_alarm = 0; END IF;IF (door= 1) AND (en= 0) AND (alarm_en= 0) THEN burg_alarm = 1; ELSE burg_alarm = 0; END IF;IF (water= 1) AND (en= 0) THEN water_alarm = 1; ELSE water_alarm = 0; END IF; END PROCESS; END alarm_arc;2、CASE 语句语句CASE语句的一般形式:语句
48、的一般形式:CASE IS WHEN ; WHEN | ; WHEN ; WHEN OTHERS ;END CASE; CASE语句是语句是VHDL提供的另一种形式的控制语句,每当提供的另一种形式的控制语句,每当单个表达式的值在多个起作用的项中选择时,用此语句是较合单个表达式的值在多个起作用的项中选择时,用此语句是较合适的,它根据所给表达式的值或域,选择适的,它根据所给表达式的值或域,选择“=”后面的执行语句。后面的执行语句。用用CASE语句应该注意三个问题:语句应该注意三个问题: 一,是关键字一,是关键字WHEN的数量不作限制,但不容许两的数量不作限制,但不容许两个语句用一个值;个语句用一个
49、值; 二,是所有二,是所有WHEN后面的值在后面的值在CASE语句中合起来的语句中合起来的值域中的全部;值域中的全部;三,是三,是WHEN的次序可以任意排定的次序可以任意排定信号可被看作两个元件之间数据传输的通路,信号可被看作两个元件之间数据传输的通路,8-4 VHDL的结构描述实体主要描述元件、端口与信号。实体主要描述元件、端口与信号。元件是硬件的描述,即门、芯片或者电路板。元件是硬件的描述,即门、芯片或者电路板。端口是元件与外界的连接点,数据通过端口进入或流出元件。端口是元件与外界的连接点,数据通过端口进入或流出元件。而信号则是作为硬件连线的一种抽象描述,它即能保持变化而信号则是作为硬件连线的一种抽象描述,它即能保持变化的数据,又可以连接各个子元件。的数据,又可以连接各个子元件。下面举例说
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 拍卖行拍卖业务全球竞争力提升路径规划考核试卷
- 液压阀的智能控制技术考核试卷
- 2025中介合同相关司法解释内容
- 2025残疾人劳动合同范本:残疾人劳动合同样式
- T-JLJY 01 -2023 幼儿园教育装备配置规范
- 砖厂承包经营合同书范文二零二五年
- 最简单厂房租赁合同二零二五年
- 车库房屋租赁合同书范例
- 二零二五版贷款买车担保合同书猫腻多多
- 二零二五版知识产权合同书大全
- 风力发电施工合同范本
- 粪群移植的护理
- 企业文化与员工认同培训课件
- 古寺庙重建可行性报告
- 老年护理的专科发展课件
- 人工智能对经济的影响
- 大班语言优质课课件PPT《青蛙歌》
- 预防校园欺凌法治知识竞答题库及答案
- 意大利(百得)TBG 系列燃烧机说明书
- 污水处理设施运维服务投标方案(技术方案)
- 《交通运输概论》 课件全套 第1-7章 绪论、公路运输系统-综合运输系统
评论
0/150
提交评论