《2022年EDA第五章复习总结 .pdf》由会员分享,可在线阅读,更多相关《2022年EDA第五章复习总结 .pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、5.1 VHDL 概述硬件描述语言 (VHDL) 的突出优点1.打破了 IC 设计者与使用者的界线2.VHDL 及其配套工具软件简单易学,直观明了,便于迅速掌握,也便于修改。3.极大地缩短了专用芯片的开发周期,降低开发成本,加快了产品更新换代的速度,提高产品的市场竞争力。4.大大缩小电路板面积和整机体积,提高产品可靠性,增强产品功能,实现技术保密。5.可实现电路设计的模块化和积木式多级组合。各模块均可在今后被重复再利用(调用) 。6.完全实现拥有整机的自主知识产权,不再在关键芯片(专用芯片)的进口及价格方面受制于人。5.2 VHDL 程序的结构一、基本的 VHDL 描述的组成:实体( enti
2、ty)部分64 页2.结构体( architecture)部分67 页IN(输入)、OUT( 输出)是表示信号的类别;BIT 是表示信号的类型, BIT 是系统定义的类型,即二进位类型,信号只有0和1两种值;每个 VHDL 语句都是 以“; ” 结束,包括最后一个语句也不例外;VHDL 中的“注释”是以两个减号“-” 开始的。二、实体描述ENTITY 实体名IS PORT(信号名 : 类别信号类型;信号名 : 类别信号类型 ); END 实体名 ; 同样类别和类型的信号可以用逗号分隔,在一个语句行中说明。信号的类别主要有以下 4 种:IN:此信号是输入信号;OUT :此信号是输出信号,提供给其
3、他的实体;:缓冲信号,也是实体的输出信号,但是可以被实体本身的结构体读入;INOUT :双向信号,既可以输入,也可以输出。系统预定义的信号类型有:BIT :二进位型,信号的值只能是0或 1 。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 14 页 - - - - - - - - - - BIT_VECTOR :二进位向量,实际对应的是二进位数组;BOOLEAN :布尔型,取值只能是true 或者 false ;INTEGER :整型,一般都用32 位二进制数表示整型数;CHARACTER :
4、字符型,使用 8 位编码的 ASCII 字符。三、结构体描述ARCHITECTURE 结构体名OF 实体名IS BEGIN END 结构体名 ; 对于一个实体来说,可以有几种不同的结构体描述。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:预定义为时间,其他如电压、电流等
5、也为物理型错误等级 :NOTE、WARNING 、ERROR、FAILURE 自然数( Natural) 、正整数( Positive)字符串( String) ,如” morning”用户自定义类型:96 页枚举型 可以通过枚举类型来定义信号的取值。除了最常用的二值逻辑(已经预定义为 BIT 型) ,还可以有三值逻辑(信号有三种取值: 0 、 1和 z ) ,九值逻辑等TYPE 枚举类型名IS (枚举型值表 ); 如TYPE qit_logic IS (0,1,Z,X) STD_ULOGIC 在 IEEE1164 标准逻辑包中所定义的std_ulogic 类型是一种九值逻辑,也是一种枚举型的
6、数据类型:TYPE std_ulogic IS ( U, -Uninitialized X, -Forcing Unknown 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 14 页 - - - - - - - - - - 0, - Forcing 0 1, - Forcing 1 Z, -High Impedance W,-Weak Unknown L, -Weak 0 H, -Weak 1 - , -Dont Care); 数组类型TYPE 数组名 IS ARRAY( 范围) OF 基类
7、型1,其中的“基类型”是已经定义过的类型,甚至可以是已经定义过 的数组类型。2,定义中的“范围”,既表示数组的大小,也说明用什么方式表示数组元素的下标。通常,“范围”是用整数表示,也可以用枚举值表示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; 类型实际上是用 register基类型 定义的 二维数组 ,即TYPE rom IS
8、 ARRAY (0 TO 7, 0 TO 7) OF BIT; 数组的范围还可以用 已经定义过的枚举型来表示,如:TYPE light_delay IS ARRAY (traffic_light) OF INTEGER; 这里的traffic-light是已经定义的枚举类型,有三个取值(“red、yellow、green ” ) 。将来定义的类型为light-delay 的数组,也 只会有三个元素 。在 VHDL 中,可以对数组的整体赋值:如定义了 regist_1 类型的数组信号:TYPE regist_1 IS ARRAY (7 DOWNTO 0) OF BIT; SIGNAL arr_1
9、, arr_2 : regist_1; 以下的赋值操作在VHDL 中都是允许的:arr_1 = 10110110; arr_2 =arr_1; 子类型97 页希望对某种类型数据的范围加以限制四、对象把信号、变量、常量和文件统称为对象。89 页1. 常量的定义CONSTANT 常量名 : 类型名 := 常量值; 例如:CONSTANT array_size : INTEGER := 16; CONSTANT gate_delay : TIME := 50ns; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第
10、 3 页,共 14 页 - - - - - - - - - - 2.变量的定义变量的定义采用如下的方式:VARIABLE 变量名: 类型名 :=初值;变量的赋值用“ :=” 来表示。变量的赋值没有延迟。3.信号的定义信号定义的方式:SIGNAL 信号名 : 类型名 :=初值; 信号的赋值用“ =” 表示,有延迟,初始化不同于赋值信号的传送可以规定延迟,也可以不规定延迟。但是VHDL 规定,如果没有指定信号传送的延迟,信号的传送也会有一个最小延迟 。信号可以是 全局定义 的,PORT 中定义的信号就是对所有的结构体都有效。但是,信号也可以是 局部定义 的,在结构体内部定义的信号只对这个结构体有效
11、。五、词法单元87 页1.注释以双连符( -)开始直到行末2.VHDL 中的数字八进制: 以 O 开头,如 O”340”二进制: 以 B 开头,如 B”11100000”十六进制: 以 X 开头,如 X”E0”字符文字字符表示形式为:单引号括起来的ASCII 字符,如 A,*字符串文字字符串表示形式为:双引号括起来的图形字符序列。如”how are you” , ” ”等5.位串位串表示形式为:双引号括起来的扩展的数字序列 ,数字序列前冠以基数说明符。如:长度为八的二进制数,等效245 6.VHDL 语句中使用的标点符号分号(; )是一条语句结束的标志逗号(, )是对象的分隔符冒号(: )和原
12、点( .)的用法在每条语句中给出六、表达式与运算符102 页具体的运算符和其他程序设计语言中的表达式很相似,一个表达式是由运算符把对象名、文字、函数调用及括起来的表达式连接起来的式子。在一个 VHDL 表达式中,数据的类型应该相同。如果不同的数据类型出现在同一个表达式, VHDL 不会进行自动类型的转换,而只会给出错误信息。支持运算符的重载。例如可以对不同类型的信号各自进行AND 运算。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 14 页 - - - - - - - - - - 七、 VH
13、DL 的库和包1.VHDL 库的种类和使用VHDL 的库可以分为三种类型:系统库, IEEE 库、用户库。系统库 是 VHDL 语言本身预定义的库,包括STD 库和 WORK 库。 STD 库是系统的标准库,所有系统本身预定义的类型和有关的操作都包含在这个库中。WORK 库是用户的工作库。对用户都是 透明的 ,也就是 随时都可以使用 的,不需要在描述中专门说明。IEEE 库是 IEEE 认可的标准库,其中包括对于STD_LOGIC 类型以及有关函数的定义。用户库 就是 VHDL 软件提供厂商开发的库,应该查询相应软件的说明。2.程序包一个 VHDL 库可以包含许多内容,并且往往以程序包(Pac
14、kage )的形式组织在一起。一个程序包由两个部分构成:包的说明部分(Package Declaration)和包的主体部分( Package Body ) 。基本的结构如下:PACKAGE 程序包名 IS 程序包说明部分END 程序包名 ; PACKAGE BODY 程序包名IS 程序包主体描述END 程序包名 ; 说明部分可以包括:常量说明;信号说明,这里说明的信号可以被所有的结构体使用;类型说明;函数或过程说明;部件( Component)说明,程序包的主体部分 则是对所包含的函数、过程、结构体进行具体的描述。程序包示例PACKAGE qit_utilities IS TYPE qit
15、IS (0, 1, Z, X);FUNCTION AND (a, b :qit) RETURN qit; 只是声明,有这个函数FUNCTION OR (a, b :qit) RETURN qit; END qit_utilities; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 14 页 - - - - - - - - - - PACKAGE BODY qit_utilities IS FUNCTION AND (a, b :qit) RETURN qit IS 对函数的具体过程描述CON
16、STANT qit_and_table : qit_2d := ( (0, 0, 0, 0), (0, 1, 1, X), (0, 1, 1, X), (0, X, X, X); BEGIN RETURN qit_and_table(a, b); END AND; FUNCTION OR (a, b :qit) RETURN qit IS 函数的定义方法 71 页例 3-3 比较CONSTANT qit_or_table : qit_2d := ( (0, 1, 1, X), (1, 1, 1, 1), (1, 1, 1, 1), (X, 1, 1, X); BEGIN RETURN qit_
17、or_table(a, b); END OR; END qit_utilities; 以上的程序包中定义了一种4 值逻辑及其操作 。在说明部分定义了一种新的信号类型 qit, 也就是一种 4 值逻辑,还说明了两个函数 AND 和 OR, 用来对 4 值逻辑进行“与”“或”运算。在 BODY 部分实现了这两个函数。3.库和程序包的引用77 页在所有的VHDL源程序都要首先声明使用什么VHDL库。声明要使用关键字LIBRARY ,例如,要使用 IEEE 库,使用这个库中的哪个程序包就应该作以下的声明:LIBRARY IEEE; USE 库名.程序包名 .ALL; 包中所有内容可用USE 库名.程序
18、包名 .子程序名 ; 包中选中内容可用4.函数和过程前一页程序包的例子中既可以使用函数,也可以使用过程(Procedure ) 。两者统称为子程序。函数的定义 包括函数说明和函数主体两部分,基本的格式如下:FUNCTION 函数名 (参数表 ) RETURN 类型 IS BEGIN 函数体END 函数名 ; 函数体中 一定要包括 RETURN 语句。过程的定义和函数的定义非常相似:PROCEDURE 过程名 (参数表 ) IS BEGIN 过程体END 过程名 ; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - -
19、 -第 6 页,共 14 页 - - - - - - - - - - 过程没有返回值。函数的参数传递总是 一个方向 的,也就是传入到函数,而过程的参数传递可以是两个方向 的。具体在过程执行中参数如何传递,取决于参数的类别(IN、OUT、INOUT等) ,而对于函数参数的类别,则只能有一种 :IN,就是输入到函数。5.4 VHDL 程序的描述语句可以有许多并行处理语句,这些语句的执行是可以同时进行的。并行语句主要是 信号传送语句。传送时可以指定传输延迟。如果传送时没有指定时延,VHDL 会对并行处理语句的执行加上一个最小时延。一、并行赋值 语句并行赋值语句是最基本的VHDL 语句,它的格式是:信
20、号名 =表达式 ; 信号名 =表达式 AFTER 延迟时间 ; 例 5.4 半加器 的数据流描述 。ENTITY half_adder IS PORT(a, b: IN BIT; s, c0: OUT BIT); END half_adder; ARCHITECTURE h_adder OF half_adder IS SIGNAL c, d: BIT; BEGIN 信号时非输入输出的中间量相c= a OR b; d= a NAND b; 当于下一阶段的输入和上一阶段的输出? c0= NOT d; s= c AND d; END h_adder; 二、条件赋值语句条件赋值语句也是一种信号赋值语
21、句,只是赋给信号的值可以根据条件的不同而不同。条件赋值语句的 格式如下 :信号名 = 表达式 1 WHEN 布尔表达式 1 ELSE 表达式 2 WHEN 布尔表达式 2 ELSE 表达式 n WHEN 布尔表达式 n ELSE 表达式 ; 例 5.5 用条件赋值语句描述 数据选择器。ENTITY mux4_to_1 IS PORT(d0, d1, d2, d3, a, b: IN BIT; y: OUT BIT); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 14 页 - - - - -
22、 - - - - - END mux4_to_1; ARCHITECTURE sample_1 OF mux4_to_1 IS 和例 5.4 比,没有需要中间信号BEGIN y= d0 WHEN a=0 AND b=0 ELSE d1 WHEN a=0 AND b=1 ELSE d2 WHEN a=1 AND b=0 ELSE d3 WHEN a=1 AND b=1 ; END sample_1 三,选择信号赋值语句选择信号赋值语句可以根据一个表达式的不同取值,给信号或者信号数组赋以不同的结果。选择信号赋值语句的格式如下:WITH 表达式 SELECT 信号名 = 信号值 1 WHEN 表达式
23、值 1, 信号值 2 WHEN 表达式值 2, 信号值 n WHEN others; 例 5.6 用信号选择语句 描述数据选择器。ENTITY mux4_to_1 IS PORT(d0, d1, d2, d3, a, b: IN std_logic; y: OUT std_logic); END mux4_to_1; ARCHITECTURE sample_2 OF mux4_to_1 IS BEGIN WITH a&b SELECT y= d0 WHEN 00, d1 WHEN 01, d2 WHEN 10, d3 WHEN 11, X WHEN OTHERS; END sample_2;
24、5.4.2 顺序描述语句并行信号传输语句主要描述硬件电路或系统中信号的传送过程。同时,VHDL 还支持顺序描述语句,主要使用于对电路和系统的性能描述。顺序描述语句的执行就和一般程序设计语言中语句相似,是按照语句的顺序依次执行的。前一条语句的 结果会影响到下一条语句的执行。一、PROCESS语句132 页尽管 PROCESS语句本身是并行描述语句, 可以和其他并行语句同时执行,但是PROCESS语句内部的语句都是顺序语句。PROCESS语句一旦开始执行,就要依次执行其中的顺序语句,一直到最后的END PROCESS为止。精品资料 - - - 欢迎下载 - - - - - - - - - - -
25、欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 14 页 - - - - - - - - - - 语句的格式如下:PROCESS(信号 1,信号 k) 用到的信号变量说明 (定义); 其他说明 ; BEGIN 顺序语句顺序语句END PROCESS; 二、分支语句两分支 IF 语句的格式:多分支 IF 语句的格式:IF 布尔表达式IF 布尔表达式THEN 顺序语句THEN 顺序语句ELSE 顺序语句ELSIF 布尔表达式END IF; THEN 顺序语句ELSE 顺序语句END IF; 例 5.7 反向器 的顺序描述。ENTITY inverter IS PORT(x
26、: IN BIT; y: OUT BIT); END inverter; ARCHITECTURE behave OF inverter IS BEGIN PROCESS(x) 只用到 x作为判断条件BEGIN IF (x=0) THEN y=1;ELSE y 顺序语句 1 WHEN 值 k = 顺序语句 k WHEN OTHERS = 顺序语句 k+1 END CASE; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 14 页 - - - - - - - - - - 例 5.8 四选一数据
27、选择器 的顺序描述。ENTITY mux4_1 IS PORT(a, b, i0, i1, i2, i3: IN BIT;y: OUT BIT); END mux4_1; ARCHITECTURE behave OF mux4_1 IS SIGNAL sel bit_vector(1 DOWNTO 0); BEGIN sel y y y y信号名 1, ,接口信号 n =信号名n); 采用这样的格式,就不要求 COMPONENT 语句中的信号名和ENTITY 的PORT部分的信号名保持顺序上的一致,而只要它们的对应关系正确就可以了。精品资料 - - - 欢迎下载 - - - - - - - -
28、 - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 14 页 - - - - - - - - - - 例 5.9 全加器的结构描述。使用前面已经定义过的半加器ENTITY full_adder IS PORT(x, y, cin: IN BIT; sum, carry: OUT BIT); END full_adder; ARCHITECTURE struct OF full_adder IS COMPONENT half_adder 部件声明PORT(a, b: IN BIT;s, c0: OUT BIT); END COMPONENT; SIGNAL
29、h1_s, h1_c, h2_c: BIT; BEGIN h1: half_adder PORT MAP(x, y, h1_s, h1_c); 部件描述第一种(如 x 对应声明中的 a)h2: half_adder PORT MAP(a=h1_s, b=cin, s=sum, c0=h2_c); 第二种( h2 中的 a 对应 h1_s)第一个全家器的输出被第二个的输入对应carry=h2_c OR h1_c; END struct; 5.5.2 时序逻辑电路中的应用一、时钟信号时序逻辑电路中进程的敏感信号是时钟信号。描述方式有两种:(1) 时钟信号显示地出现在PROCESS语句后面的敏感信号
30、表中。(2) 时钟信号没有显示地出现在PROCESS语句后面的敏感信号表中,而是出现在 WAIT 语句的后面。沿分为上升沿和下降沿。(1) 上升沿描述 : 其物理意义是指时钟信号的逻辑值是从0跳变到 1 。描述 1:PROCESS(clk)BEGIN IF (clkEVENT AND clk = 1 )THEN END PROCESS;描述 2:label2:PROCESS(clk)BEGIN WAIT UNTIL clk = 1 ;END PROCESS;精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第
31、12 页,共 14 页 - - - - - - - - - - (2) 下降沿描述 : 其物理意义是指时钟信号的逻辑值是从1跳变到 0描述 1:PROCESS(clk)BEGIN IF (clkEVENT AND clk = 0 )THEN END PROCESS;描述 2:PROCESS(clk)BEGIN WAIT UNTIL clk = 0 ;END PROCESS;精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 14 页 - - - - - - - - - - 文档编码:KDHSIBDSUFVBSUDHSIDHSIBF-SDSD587FCDCVDCJUH 欢迎下载 精美文档欢迎下载 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 14 页 - - - - - - - - - -