EDA第五章复习总结_第1页
EDA第五章复习总结_第2页
EDA第五章复习总结_第3页
EDA第五章复习总结_第4页
EDA第五章复习总结_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 13 页 共 13 页5.1 VHDL概述硬件描述语言(VHDL)的突出优点1.打破了IC设计者与使用者的界线2.VHDL及其配套工具软件简单易学,直观明了,便于迅速掌握,也便于修改。3.极大地缩短了专用芯片的开发周期,降低开发成本,加快了产品更新换代的速度,提高产品的市场竞争力。4.大大缩小电路板面积和整机体积,提高产品可靠性,增强产品功能,实现技术保密。5.可实现电路设计的模块化和积木式多级组合。各模块均可在今后被重复再利用(调用)。6.完全实现拥有整机的自主知识产权,不再在关键芯片(专用芯片)的进口及价格方面受制于人。5.2 VHDL程序的结构一、 基本的VHDL描述的组成: l1.

2、实体(entity)部分 64页l 2.结构体(architecture)部分 67页IN(输入)、OUT(输出)是表示信号的类别;l BIT是表示信号的类型,BIT是系统定义的类型,即二进位类型,信号只有0和1两种值;l 每个VHDL语句都是以“;”结束,包括最后一个语句也不例外;l VHDL中的“注释”是以两个减号“-”开始的。二、 实体描述ENTITY 实体名 ISPORT(信号名: 类别信号类型;信号名: 类别信号类型);END 实体名;同样类别和类型的信号可以用逗号分隔,在一个语句行中说明。信号的类别主要有以下4种:IN:此信号是输入信号;lOUT:此信号是输出信号,提供给其他的实体

3、;lBUFFER:缓冲信号,也是实体的输出信号,但是可以被实体本身的结构体读入;lINOUT:双向信号,既可以输入,也可以输出。系统预定义的信号类型有:BIT:二进位型,信号的值只能是0或1。 l BIT_VECTOR:二进位向量,实际对应的是二进位数组 ;l BOOLEAN:布尔型,取值只能是true或者false ;l INTEGER:整型,一般都用32位二进制数表示整型数 ;l CHARACTER:字符型,使用8位编码的ASCII字符。三、 结构体描述zARCHITECTURE 结构体名 OF 实体名 IS<声明部分> BEGIN <描述部分> END 结构体名;

4、对于一个实体来说,可以有几种不同的结构体描述。5.3 VHDL程序的元素一、关键字 85页二、标识符的命名 85页三、数据类型 91页预定义:整数Integer:-(2的31次方-1)2的31次方-1实数Real:-1.0E+38-+1.0E+38位Bit:0或1位矢量Bit_Vector:”001100”布尔量Boolean:真或假字符Character:A,C物理Time:预定义为时间,其他如电压、电流等也为物理型错误等级:NOTE、WARNING、ERROR、FAILURE自然数(Natural)、正整数(Positive)字符串(String),如”morning”用户自定义类型: 9

5、6页枚举型 可以通过枚举类型来定义信号的取值。除了最常用的二值逻辑(已经预定义为BIT型),还可以有三值逻辑(信号有三种取值:0、1和z),九值逻辑等 TYPE枚举类型名 IS (枚举型值表);如 TYPE qit_logic IS ('0','1','Z','X')STD_ULOGIC在IEEE1164标准逻辑包中所定义的std_ulogic类型是一种九值逻辑,也是一种枚举型的数据类型:TYPE std_ulogic IS ( 'U', -Uninitialized'X', -Forcing Un

6、known'0', - Forcing 0'1', - Forcing 1'Z', -High Impedance'W',-Weak Unknown'L', -Weak 0'H', -Weak 1'-' , -Don't Care);数组类型TYPE 数组名 IS ARRAY(范围) OF 基类型1,其中的“基类型”是已经定义过的类型,甚至可以是已经定义过的数组类型。z 2,定义中的“范围”,既表示数组的大小,也说明用什么方式表示数组元素的下标。通常,“范围”是用整数表示,也

7、可以用枚举值表示3,“范围”用整数表示时,整数范围可以是递增表示,也可以是递减表示:TYPE register IS ARRAY (0 TO 7) OF BIT; TYPE regist_1 IS ARRAY (7 DOWNTO 1) OF BIT; TYPE rom IS ARRAY (0 TO 7) OF register; lrom类型实际上是用register基类型定义的二维数组,即TYPE rom IS ARRAY (0 TO 7, 0 TO 7) OF BIT;数组的范围还可以用已经定义过的枚举型来表示,如:TYPE light_delay IS ARRAY (traffic_li

8、ght) OF INTEGER;l这里的traffic-light是已经定义的枚举类型,有三个取值(“red、yellow、green”)。将来定义的类型为light-delay的数组,也只会有三个元素。在VHDL中,可以对数组的整体赋值:l如定义了regist_1类型的数组信号:TYPE regist_1 IS ARRAY (7 DOWNTO 0) OF BIT; SIGNAL arr_1, arr_2 : regist_1; l以下的赋值操作在VHDL中都是允许的:arr_1 <= "10110110" arr_2 <=arr_1;子类型 97页希望对某种类

9、型数据的范围加以限制四、对象lVHDL把信号、变量、常量和文件统称为对象。 89页1. 常量的定义 CONSTANT常量名: 类型名 := 常量值;z例如:CONSTANT array_size : INTEGER := 16; CONSTANT gate_delay : TIME := 50ns;2.变量的定义 变量的定义采用如下的方式:VARIABLE 变量名: 类型名:=初值;z变量的赋值用“:=”来表示。变量的赋值没有延迟。3.信号的定义l 信号定义的方式:SIGNAL 信号名: 类型名:=初值;z 信号的赋值用“<=”表示,有延迟,初始化不同于赋值 z信号的传送可以规定延迟,也

10、可以不规定延迟。但是VHDL规定,如果没有指定信号传送的延迟,信号的传送也会有一个最小延迟。z信号可以是全局定义的,PORT中定义的信号就是对所有的结构体都有效。但是,信号也可以是局部定义的,在结构体内部定义的信号只对这个结构体有效。五、词法单元 87页l1.注释以双连符(-)开始直到行末l2.VHDL中的数字八进制:以O开头,如O”340”二进制:以B开头,如B”11100000”十六进制:以X开头,如X”E0”l3.字符文字字符表示形式为:单引号括起来的ASCII字符,如A,*l4.字符串文字字符串表示形式为:双引号括起来的图形字符序列。如”how are you”,” ”等5.位串位串表

11、示形式为:双引号括起来的扩展的数字序列,数字序列前冠以基数说明符。如:lB”11110101” 长度为八的二进制数,等效2456.VHDL语句中使用的标点符号l分号(;)是一条语句结束的标志l逗号(,)是对象的分隔符l冒号(:)和原点(.)的用法在每条语句中给出六、表达式与运算符 102页具体的运算符和其他程序设计语言中的表达式很相似,一个表达式是由运算符把对象名、文字、函数调用及括起来的表达式连接起来的式子。在一个VHDL表达式中,数据的类型应该相同。如果不同的数据类型出现在同一个表达式,VHDL不会进行自动类型的转换,而只会给出错误信息。lVHDL支持运算符的重载。例如可以对不同类型的信号

12、各自进行AND运算。七、VHDL的库和包1.VHDL库的种类和使用 VHDL的库可以分为三种类型:系统库,IEEE库、用户库。系统库是VHDL语言本身预定义的库,包括STD库和WORK库。STD库是系统的标准库,所有系统本身预定义的类型和有关的操作都包含在这个库中。WORK库是用户的工作库 。对用户都是透明的,也就是随时都可以使用的,不需要在描述中专门说明。IEEE库是IEEE认可的标准库,其中包括对于STD_LOGIC类型以及有关函数的定义。用户库就是VHDL软件提供厂商开发的库,应该查询相应软件的说明。2.程序包 一个VHDL库可以包含许多内容,并且往往以程序包(Package)的形式组织

13、在一起。一个程序包由两个部分构成:包的说明部分(Package Declaration)和包的主体部分(Package Body)。基本的结构如下:PACKAGE 程序包名IS程序包说明部分END 程序包名;PACKAGE BODY 程序包名 IS程序包主体描述END 程序包名;说明部分可以包括:常量说明;l 信号说明,这里说明的信号可以被所有的结构体使用;l 类型说明;l 函数或过程说明;l 部件(Component)说明,程序包的主体部分则是对所包含的函数、过程、结构体进行具体的描述。程序包示例PACKAGE qit_utilities ISTYPE qit IS ('0, 1,

14、Z, X);FUNCTION "AND" (a, b :qit) RETURN qit; 只是声明,有这个函数FUNCTION "OR" (a, b :qit) RETURN qit;END qit_utilities;PACKAGE BODY qit_utilities ISFUNCTION "AND" (a, b :qit) RETURN qit IS 对函数的具体过程描述CONSTANT qit_and_table : qit_2d := ('0', '0', '0', '

15、0'),('0', '1', '1', 'X'),('0', '1', '1', 'X'),('0', 'X', 'X', 'X');BEGINRETURN qit_and_table(a, b);END "AND"FUNCTION "OR" (a, b :qit) RETURN qit IS 函数的定义方法71页例3-3比较CONSTANT qit_or_

16、table : qit_2d := ('0', '1', '1', 'X'),('1', '1', '1', '1'),('1', '1', '1', '1'),('X', '1', '1', 'X');BEGINRETURN qit_or_table(a, b);END "OR"END qit_utilities;|以上

17、的程序包中定义了一种4值逻辑及其操作。在说明部分定义了一种新的信号类型qit,也就是一种4值逻辑,还说明了两个函数AND和OR,用来对4值逻辑进行“与”“或”运算。在BODY部分实现了这两个函数。3.库和程序包的引用 77页l 在所有的VHDL源程序都要首先声明使用什么VHDL库。声明要使用关键字LIBRARY,例如,要使用IEEE库,使用这个库中的哪个程序包就应该作以下的声明: LIBRARY IEEE; USE 库名.程序包名.ALL; 包中所有内容可用USE 库名.程序包名.子程序名; 包中选中内容可用4.函数和过程 前一页程序包的例子lVHDL 中既可以使用函数,也可以使用过程(Pro

18、cedure)。两者统称为子程序。l函数的定义包括函数说明和函数主体两部分,基本的格式如下:FUNCTION 函数名(参数表) RETURN 类型ISBEGIN函数体END 函数名; 函数体中一定要包括RETURN语句。过程的定义和函数的定义非常相似:PROCEDURE过程名(参数表) ISBEGIN过程体END 过程名; z过程没有返回值。z函数的参数传递总是一个方向的,也就是传入到函数,而过程的参数传递可以是两个方向的。具体在过程执行中参数如何传递,取决于参数的类别(IN、OUT、INOUT等),而对于函数参数的类别,则只能有一种:IN,就是输入到函数。5.4 VHDL程序的描述语句可以有

19、许多并行处理语句,这些语句的执行是可以同时进行的。并行语句主要是信号传送语句。传送时可以指定传输延迟。如果传送时没有指定时延,VHDL会对并行处理语句的执行加上一个最小时延。一、并行赋值语句 并行赋值语句是最基本的VHDL语句,它的格式是: 信号名<=表达式;信号名<=表达式 AFTER 延迟时间;例5.4 半加器的数据流描述。ENTITY half_adder ISPORT(a, b: IN BIT;s, c0: OUT BIT);END half_adder;ARCHITECTURE h_adder OF half_adder ISSIGNAL c, d: BIT;BEGIN

20、信号时非输入输出的中间量相c<= a OR b;d<= a NAND b; 当于下一阶段的输入和上一阶段的输出?c0<= NOT d;s<= c AND d;END h_adder;二、条件赋值语句 l条件赋值语句也是一种信号赋值语句,只是赋给信号的值可以根据条件的不同而不同。l条件赋值语句的格式如下:信号名<= 表达式1 WHEN 布尔表达式1 ELSE表达式2 WHEN 布尔表达式2 ELSE表达式n WHEN 布尔表达式n ELSE表达式;例5.5 用条件赋值语句描述数据选择器。ENTITY mux4_to_1 ISPORT(d0, d1, d2, d3,

21、a, b: IN BIT;y: OUT BIT);END mux4_to_1;ARCHITECTURE sample_1 OF mux4_to_1 IS 和例5.4比,没有需要中间信号BEGINy<= d0 WHEN a='0' AND b='0' ELSEd1 WHEN a='0' AND b='1' ELSEd2 WHEN a='1' AND b='0' ELSEd3 WHEN a='1' AND b='1' ;END sample_1三,选择信号赋值语句

22、l选择信号赋值语句可以根据一个表达式的不同取值,给信号或者信号数组赋以不同的结果。l选择信号赋值语句的格式如下:WITH 表达式SELECT信号名<= 信号值1 WHEN 表达式值1,信号值2 WHEN 表达式值2,信号值n WHEN others;例5.6 用信号选择语句描述数据选择器。ENTITY mux4_to_1 ISPORT(d0, d1, d2, d3, a, b: IN std_logic;y: OUT std_logic);END mux4_to_1;ARCHITECTURE sample_2 OF mux4_to_1 ISBEGINWITH a&b SELECT

23、y<= d0 WHEN "00",d1 WHEN "01",d2 WHEN "10",d3 WHEN "11",'X' WHEN OTHERS;END sample_2;5.4.2 顺序描述语句并行信号传输语句主要描述硬件电路或系统中信号的传送过程。同时,VHDL还支持顺序描述语句,主要使用于对电路和系统的性能描述。顺序描述语句的执行就和一般程序设计语言中语句相似,是按照语句的顺序依次执行的。前一条语句的结果会影响到下一条语句的执行。一、PROCESS语句 132页l尽管PROCESS语句本身

24、是并行描述语句,可以和其他并行语句同时执行,但是PROCESS语句内部的语句都是顺序语句。 PROCESS语句一旦开始执行,就要依次执行其中的顺序语句,一直到最后的END PROCESS为止。lPROCESS语句的格式如下:PROCESS(信号1,信号k) 用到的信号变量说明(定义);其他说明;BEGIN顺序语句顺序语句END PROCESS;二、分支语句 l两分支IF语句的格式: 多分支IF语句的格式: IF 布尔表达式 IF 布尔表达式THEN 顺序语句 THEN 顺序语句ELSE 顺序语句 ELSIF 布尔表达式END IF; THEN顺序语句ELSE 顺序语句END IF; 例5.7

25、反向器的顺序描述。ENTITY inverter ISPORT(x: IN BIT;y: OUT BIT);END inverter;ARCHITECTURE behave OF inverter ISBEGINPROCESS(x) 只用到x作为判断条件BEGINIF (x='0') THEN y<=1'ELSE y<=0'END IF;END PROCESS;END behave;三、另外一种分支语句CASE语句lCASE语句是从多个可能的分支中选择一个分支进行操作。lCASE语句的格式如下:CASE 表达式ISWHEN 值1 => 顺序语句

26、1WHEN 值k => 顺序语句kWHEN OTHERS =>顺序语句k+1END CASE;例5.8 四选一数据选择器的顺序描述。ENTITY mux4_1 ISPORT(a, b, i0, i1, i2, i3: IN BIT;y: OUT BIT);END mux4_1;ARCHITECTURE behave OF mux4_1 ISSIGNAL sel bit_vector(1 DOWNTO 0);BEGINsel<=b & a;PROCESS(sel, i0, i1, i2, i3)BEGINCASE sel ISWHEN "00" =&

27、gt; y<=i0;WHEN "01" => y<=i1;WHEN "10" => y<=i2;WHEN "11" => y<=i3;END CASE;END PROCESS;END behave四、循环语句 lVHDL中提供了两种形式的循环语句:FOR循环和WHILE循环。FOR循环的格式如下:FOR 变量IN 范围LOOP顺序语句顺序语句END LOOP; 其中的“变量”和“范围”应该有相同的类型。例如变量是整型,范围可以是一个整数范围。如果变量是枚举型,则“范围”要限制在枚举类型所定义的

28、取值范围内。WHILE循环的格式如下:WHILE 布尔表达式LOOP顺序语句顺序语句END LOOP; zWHILE循环中的布尔表达式可以是逻辑表达式或者关系表达式。z在FOR循环或者WHILE循环中都可以使用NEXT语句来结束本次循环,用EXIT语句来结束循环,到下一条顺序语句继续执行。它们的格式基本相同:NEXT WHEN 布尔表达式; EXIT WHEN 布尔表达式;5.4.3 VHDL的描述风格在VHDL中对这一类的描述称为“性能”描述(行为描述),性能描述中一定有PROCESS语句。l VHDL 还有另一种描述,称为“结构”描述。1. 性能描述(行为描述) 这种描述完全是从与非门输入

29、和输出的逻辑关系出发,对与非门性能的一种描述。2. 数据流描述(RTL描述)l建立在并行信号赋值语句基础上。当语句中任意一个输入信号的值发生改变时,赋值语句就被激活,从而认为数据从一个设计中“流入”,然后又“流出”3.结构描述语句 l结构描述是VHDL的三种描述方法之一。l结构描述的基础是部件:COMPONENT。l所使用的部件应该是事先已经定义过的。可以直接取自某个VHDL库,也可以是用户自定义的存放在WORK库的部件。l所用部件所在的库或程序包,必须在程序开始前声明。l在结构描述中所使用的部件必须首先声明。部件的声明在ARCHTECTURE的声明部分进行。l部件声明语句(Component Declaration)的格式如下:COMPONENT 部件名PORT(信号名: 类别 信号类型;信号名: 类别 信号类型);END COMPONENT;部件描述语句 l第一种格式的COMPONENT语句是:标号: 部件名PORT MAP(信号名1, 信号名2, ,信号名n); z在使用这种格式时,必须注意PORT MAP所列出的信号名应该和部件定义时的信号名的顺序相一致。z标号是部件的标识。同样的部件在电路中可以使用多次,它们都有相同的部件名,但是有不同的标号 àl第二种格式是:标号: 部件名PORT MAP(接口信号1=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论