B5 DA3 D5 C2 VHDL D3 EF D1 D4要点_第1页
B5 DA3 D5 C2 VHDL D3 EF D1 D4要点_第2页
B5 DA3 D5 C2 VHDL D3 EF D1 D4要点_第3页
B5 DA3 D5 C2 VHDL D3 EF D1 D4要点_第4页
B5 DA3 D5 C2 VHDL D3 EF D1 D4要点_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

1、 3.1 VHDL3.1 VHDL实体实体 VHDL实体作为一个设计实体(独立的电路功能结构)实体作为一个设计实体(独立的电路功能结构) 的组成部分,其功能是对这个设计实体与外部电路进行接的组成部分,其功能是对这个设计实体与外部电路进行接 口描述。实体是设计实体的表层设计单元,实体说明部分口描述。实体是设计实体的表层设计单元,实体说明部分 规定了设计单元的输入输出接口信号或引脚,它是设计实规定了设计单元的输入输出接口信号或引脚,它是设计实 体对外的一个通信界面。实体的具体表述和用法已在前面体对外的一个通信界面。实体的具体表述和用法已在前面 有过详细例解,这里不再重复。有过详细例解,这里不再重复

2、。 3.2 VHDL3.2 VHDL结构体结构体 1. 结构体的一般语言格式结构体的一般语言格式 ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS 说明语句说明语句 BEGIN 功能描述语句功能描述语句 END ARCHITECTURE 结构体名结构体名; 3.2 VHDL3.2 VHDL结构体结构体 2. 结构体说明语句结构体说明语句 3. 功能描述语句结构功能描述语句结构 进程语句进程语句 信号赋值语句信号赋值语句 子程序调用语句子程序调用语句 元件例化语句元件例化语句 3.3 VHDL3.3 VHDL子程序子程序 3.3.1 VHDL函数函数 FUNCTION 函数名

3、函数名(参数表参数表) RETURN 数据类型数据类型 -函数首函数首 FUNCTION 函数名函数名(参数表参数表)RETURN 数据类型数据类型 IS - 函数体函数体 说明部分说明部分 BEGIN 顺序语句顺序语句 ; END FUNCTION 函数名函数名; 【例【例3-1】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE packexp IS -定义程序包定义程序包 FUNCTION max( a,b : IN STD_LOGIC_VECTOR) -定义函数首定义函数首 RETURN STD_LOGIC_VECTOR ; FUNC

4、TION func1 ( a,b,c : REAL ) -定义函数首定义函数首 RETURN REAL ; FUNCTION * ( a ,b : INTEGER ) -定义函数首定义函数首 RETURN INTEGER ; FUNCTION as2 (SIGNAL in1 ,in2 : REAL ) -定义函数首定义函数首 RETURN REAL ; END ; PACKAGE BODY packexp IS FUNCTION max( a,b : IN STD_LOGIC_VECTOR) -定义函数体定义函数体 RETURN STD_LOGIC_VECTOR IS BEGIN IF a b

5、 THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束结束FUNCTION语句语句 END; -结束结束PACKAGE BODY语句语句 LIBRARY IEEE; - 函数应用实例函数应用实例 USE IEEE.STD_LOGIC_1164.ALL; USE WORK.packexp.ALL ; ENTITY axamp IS PORT(dat1,dat2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); dat3,dat4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1,o

6、ut2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END; ARCHITECTURE bhv OF axamp IS BEGIN out1 = max(dat1,dat2); -用在赋值语句中的并行函数调用语句用在赋值语句中的并行函数调用语句 PROCESS(dat3,dat4) BEGIN out2 b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束结束FUNCTION语句语句 FUNCTION max( a,b :IN INTEGER) -定义函数体定义函数体 RETURN INTEG

7、ER IS BEGIN IF a b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束结束FUNCTION语句语句 接下页接下页 FUNCTION max( a,b :IN BIT_VECTOR) -定义函数体定义函数体 RETURN BIT_VECTOR IS BEGIN IF a b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束结束FUNCTION语句语句 END; -结束结束PACKAGE BODY语句语句. . - 以下是调用重载函数以下是调用

8、重载函数max的程序:的程序: LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE WORK.packexp.ALL; ENTITY axamp IS PORT(a1,b1 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); a2,b2 : IN BIT_VECTOR(4 DOWNTO 0); a3,b3 : IN INTEGER RANGE 0 TO 15; c1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); c2 : OUT BIT_VECTOR(4 DOWNTO 0); c3 : OUT INTEG

9、ER RANGE 0 TO 15); END; ARCHITECTURE bhv OF axamp IS BEGIN c1 = max(a1,b1); -对函数对函数max( a,b :IN STD_LOGIC_VECTOR)的调用的调用 c2 = max(a2,b2); -对函数对函数max( a,b :IN BIT_VECTOR) 的调用的调用 c3 = max(a3,b3); -对函数对函数max( a,b :IN INTEGER) 的调用的调用 END; 【例【例3-4】 LIBRARY IEEE ; - 程序包首程序包首 USE IEEE.std_logic_1164.all ; U

10、SE IEEE.std_logic_arith.all ; PACKAGE STD_LOGIC_UNSIGNED is function + (L : STD_LOGIC_VECTOR ; R : INTEGER) return STD_LOGIC_VECTOR ; function + (L : INTEGER; R : STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR ; function + (L : STD_LOGIC_VECTOR ; R : STD_LOGIC ) return STD_LOGIC_VECTOR ; function SHR (AR

11、G : STD_LOGIC_VECTOR ; COUNT : STD_LOGIC_VECTOR ) return STD_LOGIC_VECTOR ; . end STD_LOGIC_UNSIGNED ; LIBRARY IEEE ; - 程序包体程序包体 use IEEE.std_logic_1164.all ; use IEEE.std_logic_arith.all ; package body STD_LOGIC_UNSIGNED is function maximum (L, R : INTEGER) return INTEGER is begin if L R then retur

12、n L; else return R; end if; end; function + (L : STD_LOGIC_VECTOR ; R : INTEGER) return STD_LOGIC_VECTOR is Variable result : STD_LOGIC_VECTOR (Lrange) ; Begin result := UNSIGNED(L) + R ; return std_logic_vector(result) ; end ; . end STD_LOGIC_UNSIGNED ; 3.3 VHDL3.3 VHDL子程序子程序 3.3.3 VHDL转换函数转换函数 函数名

13、函数名功能功能 程序包程序包: STD_LOGIC_1164 to_stdlogicvector(A)由由bit_vector类型的类型的A转换为转换为std_logic_vector to_bitvector(A)由由std_logic _vector转换为转换为bit_vector to_stdlogic (A)由由bit转换成转换成std_logic to_bit(A)由由std_logic转换成转换成bit 程序包程序包: STD_LOGIC_ARITH conv_std_logic_vector(A, 位长位长)将整数将整数integer转换成转换成std_logic_vector类

14、型,类型,A是整数是整数 conv_integer(A)将将std_logic_vector转换成整数转换成整数integer 程序包程序包: STD_LOGIC_UNSIGNED conv_integer(A)由由std_logic_vector转换成转换成integer 表表3-1 IEEE库类型转换函数表库类型转换函数表 3.3 VHDL3.3 VHDL子程序子程序 3.3.3 VHDL转换函数转换函数 【例【例3-5】 LIBRARY IEEE; USE IEEE. std_logic_1164.ALL; ENTITY exg IS PORT (a,b : in bit_vector(

15、3 downto 0); q : out std_logic_vector(3 downto 0); end ; architecture rtl of exg is begin q= to_stdlogicvector(a and b);-将位矢量数据类型转换成标准逻辑位矢量数据将位矢量数据类型转换成标准逻辑位矢量数据 end; 3.3 VHDL3.3 VHDL子程序子程序 3.3.3 VHDL转换函数转换函数 【例【例3-6】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;-注意使用了此程序包

16、注意使用了此程序包 ENTITY axamp IS PORT(a,b,c : IN integer range 0 to 15 ; q : OUT std_logic_vector(3 downto 0) ); END; ARCHITECTURE bhv OF axamp IS BEGIN q 1 THEN Rut(i) := 1; Din := Din-Rig; ELSE Rut (i):= 0; END IF; Rig := Rig / 2; END LOOP; RETURN Rut; END nat_to_Bit3; END n_pack; LIBRARY IEEE; - 用户定义转换函

17、数应用实例用户定义转换函数应用实例 USE IEEE.STD_LOGIC_1164.ALL; USE WORK.n_pack.ALL ; ENTITY axamp IS PORT(dat : IN nat; -注意数据类型的定义注意数据类型的定义 ou : OUT Bit3); -注意数据类型的定义注意数据类型的定义 END; ARCHITECTURE bhv OF axamp IS BEGIN ou value: 0101 ; WHEN 0101 = value: 0000 ; WHEN OTHERS = value: 1111 ; END CASE ; END PROCEDURE prg1

18、 ; 3.3 VHDL3.3 VHDL子程序子程序 3.3.5 VHDL过程过程 【例【例3-9】 PROCEDURE comp ( a, r : IN REAL; m : IN INTEGER ; v1, v2: OUT REAL) IS VARIABLE cnt : INTEGER ; BEGIN v1 := 1.6 * a ; - 赋初始值赋初始值 v2 := 1.0 ; - 赋初始值赋初始值 Q1 : FOR cnt IN 1 TO m LOOP v2 := v2 * v1 ; EXIT Q1 WHEN v2 v1; - 当当v2 v1,跳出循环,跳出循环LOOP END LOOP Q

19、1 ASSERT (v2 v1 ) REPORT OUT OF RANGE - 输出错误报告输出错误报告 SEVERITY ERROR ; END PROCEDURE comp ; 【例【例3-10】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE axamp IS -过程首定义过程首定义 PROCEDURE nand4a (SIGNAL a,b,c,d : IN STD_LOGIC ; SIGNAL y : OUT STD_LOGIC ); END axamp; PACKAGE BODY axamp IS -过程体定义过程体定义 PROC

20、EDURE nand4a (SIGNAL a,b,c,d : IN STD_LOGIC ; SIGNAL y : OUT STD_LOGIC ) IS BEGIN y 实参表达式实参表达式 ,形参名形参名= 实参表达式实参表达式) ; (1) 将将IN和和INOUT模式的实参值赋给欲调用的过程中与它们对应的形参;模式的实参值赋给欲调用的过程中与它们对应的形参; (2) 执行这个过程;执行这个过程; (3) 将过程中将过程中IN和和INOUT模式的形参值返回给对应的实参。模式的形参值返回给对应的实参。 3.3 VHDL3.3 VHDL子程序子程序 3.3.7 子程序调用语句子程序调用语句 1.

21、过程调用过程调用 【例【例3-12】 PACKAGE data_types IS - 定义程序包定义程序包 SUBTYPE data_element IS INTEGER RANGE 0 TO 3 ;- 定义数据类型定义数据类型 TYPE data_array IS ARRAY (1 TO 3) OF data_element; END data_types; USE WORK.data_types.ALL; -打开以上建立在当前工作库的程序包打开以上建立在当前工作库的程序包data_types ENTITY sort IS PORT ( in_array : IN data_array ;

22、out_array : OUT data_array); END sort; ARCHITECTURE exmp OF sort IS BEGIN PROCESS (in_array) - 进程开始,设进程开始,设data_types为敏感信号为敏感信号 PROCEDURE swap(data : INOUT data_array; - swap的形参名为的形参名为data、low、high low, high : IN INTEGER ) IS VARIABLE temp : data_element ; BEGIN - 开始描述本过程的逻辑功能开始描述本过程的逻辑功能 IF (data(l

23、ow) data(high) THEN - 检测数据检测数据 temp := data(low) ; data(low) := data(high); data(high) := temp ; END IF ; END swap ; - 过程过程swap定义结束定义结束 VARIABLE my_array : data_array ; - 在本进程中定义变量在本进程中定义变量my_array BEGIN - 进程开始进程开始 my_array := in_array ; - 将输入值读入变量将输入值读入变量 swap(my_array, 1, 2); - my_array、1、2是对应于是对应

24、于data、low、high的实参的实参 swap(my_array, 2, 3); - 位置关联法调用,位置关联法调用, 第第2、第、第3元素交换元素交换 swap(my_array, 1, 2); - 位置关联法调用,位置关联法调用, 第第1、第、第2元素再次交换元素再次交换 out_array y THEN tmp := x; x := y; y := tmp; END IF; END sort2; BEGIN PROCESS (a, b, c, d) VARIABLE va, vb, vc, vd : BIT_VECTOR(0 TO top); BEGIN va := a; vb :=

25、 b; vc := c; vd := d; sort2(va, vc); sort2(vb, vd); sort2(va, vb); sort2(vc, vd); sort2(vb, vc); ra = va; rb = vb; rc = vc; rd = vd; END PROCESS; END muxes; 3.3 VHDL3.3 VHDL子程序子程序 3.3.7 子程序调用语句子程序调用语句 1. 过程调用过程调用 2函数调用函数调用 函数调用与过程调用是十分相似的,不同之处是,调用函数调用与过程调用是十分相似的,不同之处是,调用 函数将返还一个指定数据类型的值,函数的参量只能是输入函数

26、将返还一个指定数据类型的值,函数的参量只能是输入 值。值。 3.3 VHDL3.3 VHDL子程序子程序 3.3.8 并行过程调用语句并行过程调用语句 过程名过程名(关联参量名关联参量名); 【例【例3-14】 . PROCEDURE adder(SIGNAL a, b :IN STD_LOGIC ; -过程名为过程名为adder SIGNAL sum : OUT STD_LOGIC ); . adder(a1,b1,sum1) ; - 并行过程调用并行过程调用 . - 在此,在此,a1、b1、sum1即为分别对应于即为分别对应于a、b、sum的关联参量名的关联参量名 PROCESS( c1,

27、c2) ; - 进程语句执行进程语句执行 BEGIN Adder(c1,c2,s1) ; - 顺序过程调用,在此顺序过程调用,在此c1、c2、s1即为分别对即为分别对 END PROCESS ; - 应于应于a、b、sum的关联参量名的关联参量名 3.3 VHDL3.3 VHDL子程序子程序 3.3.8 并行过程调用语句并行过程调用语句 【例【例3-15】 PROCEDURE check(SIGNAL a : IN STD_LOGIC_VECTOR; - 在调用时在调用时 SIGNAL error : OUT BOOLEAN ) IS - 再定位宽再定位宽 VARIABLE found_one

28、 : BOOLEAN := FALSE ; - 设初始值设初始值 BEGIN FOR i IN aRANGE LOOP - 对位矢量对位矢量a的所有的位元素进行循环检测的所有的位元素进行循环检测 IF a(i) = 1 THEN - 发现发现a中有中有 1 IF found_one THEN - 若若found_one为为TRUE,则表明发现了一个以上的,则表明发现了一个以上的1 ERROR = TRUE; - 发现了一个以上的发现了一个以上的1,令,令found_one为为TRUE RETURN; - 结束过程结束过程 END IF; Found_one := TRUE; - 在在a中已发现

29、了一个中已发现了一个1 End IF; End LOOP; - 再测再测a中的其他位中的其他位 error = NOT found_one; - 如果没有任何如果没有任何1 被发现,被发现,error 将被置将被置TRUE END PROCEDURE check; 3.3 VHDL3.3 VHDL子程序子程序 3.3.8 并行过程调用语句并行过程调用语句 . CHBLK:BLOCK SIGNAL s1: STD_LOGIC_VECTOR (0 TO 0); - 过程调用前设定位矢尺寸过程调用前设定位矢尺寸 SIGNAL s2: STD_LOGIC_VECTOR (0 TO 1); SIGNAL

30、 s3: STD_LOGIC_VECTOR (0 TO 2); SIGNAL s4: STD_LOGIC_VECTOR (0 TO 3); SIGNAL e1, e2, e3, e4: Boolean; BEGIN Check (s1, e1); - 并行过程调用,关联参数名为并行过程调用,关联参数名为s1、e1 Check (s2, e2); - 并行过程调用,关联参数名为并行过程调用,关联参数名为s2、e2 Check (s3, e3); - 并行过程调用,关联参数名为并行过程调用,关联参数名为s3、e3 Check (s4, e4); - 并行过程调用,关联参数名为并行过程调用,关联参数

31、名为s4、e4 END BLOCK; . 3.4 VHDL3.4 VHDL库库 3.4.1 库的种类库的种类 1. IEEE库库 2. STD库库 3. WORK库库 4. VITAL库库 3.4 VHDL3.4 VHDL库库 3.4.2 库的用法库的用法 USE 库名库名.程序包名程序包名.项目名项目名 ; USE 库名库名.程序包名程序包名.ALL ; LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.STD_ULOGIC ; USE IEEE.STD_LOGIC_1164.RISING_EDGE ; USE WORK.std_logic_1164.ALL; 3

32、.5 VHDL3.5 VHDL程序包程序包 定义程序包的一般语句结构如下:定义程序包的一般语句结构如下: PACKAGE 程序包名程序包名 IS - 程序包首程序包首 程序包首说明部分程序包首说明部分 END 程序包名程序包名; PACKAGE BODY 程序包名程序包名 IS - 程序包体程序包体 程序包体说明部分以及包体内程序包体说明部分以及包体内 END 程序包名程序包名; 3.5 VHDL3.5 VHDL程序包程序包 【例【例3-16】 PACKAGE pacl IS - 程序包首开始程序包首开始 TYPE byte IS RANGE 0 TO 255 ; - 定义数据类型定义数据类型

33、byte SUBTYPE nibble IS byte RANGE 0 TO 15 ; - 定义子类型定义子类型nibble CONSTANT byte_ff : byte := 255 ; - 定义常数定义常数byte_ff SIGNAL addend : nibble ; - 定义信号定义信号addend COMPONENT byte_adder - 定义元件定义元件 PORT( a, b : IN byte ; c : OUT byte ; overflow : OUT BOOLEAN ) ; END COMPONENT ; FUNCTION my_function (a : IN by

34、te) Return byte ; - 定义函数定义函数 END pacl ; - 程序包首结束程序包首结束 【例【例3-17】 PACKAGE seven IS SUBTYPE segments is BIT_VECTOR(0 TO 6) ; TYPE bcd IS RANGE 0 TO 9 ; END seven ; USE WORK.seven.ALL ; - WORK库默认是打开的,库默认是打开的, ENTITY decoder IS PORT (input: bcd; drive : out segments) ; END decoder ; ARCHITECTURE simple

35、OF decoder IS BEGIN WITH input SELECT drive = B1111110 WHEN 0 , B0110000 WHEN 1 , B1101101 WHEN 2 , B1111001 WHEN 3 , B0110011 WHEN 4 , B1011011 WHEN 5 , B1011111 WHEN 6 , B1110000 WHEN 7 , B1111111 WHEN 3 , B1111011 WHEN 9 , B0000000 WHEN OTHERS ; END simple ; 3.6 VHDL3.6 VHDL配置配置 配置语句的一般格式如下:配置语句的

36、一般格式如下: CONFIGURATION 配置名配置名 OF 实体名实体名 IS 配置说明配置说明 END 配置名配置名; 3.7 VHDL3.7 VHDL文字规则文字规则 3.7.1 数字数字 整数:整数: 5, 673, 0, 156E2(=15600), 45_234_237 (=45234237) 实数:实数: 1.335, 33_670_551.453_909(=33670551.453909),1.0,44.99E-2(=0.4499) 以数制基数表示的文字:以数制基数表示的文字: SIGNAL d1,d2,d3,d4,d5, : INTEGER RANGE 0 TO 255;

37、d1 = 10#170# ; - (十进制表示,等于十进制表示,等于 170) d2 = 16#FE# ; - (十六进制表示,等于十六进制表示,等于 254) d3 = 2#1111_1110#; - (二进制表示,等于二进制表示,等于 254) d4 = 3#376# ; - (八进制表示,等于八进制表示,等于 254) d5 = 16#E#E1 ; - (十六进制表示,等于十六进制表示,等于2#1110000#,等于,等于224) 物理量文字物理量文字(VHDL综合器不接受此类文字综合器不接受此类文字) 60s (60秒秒), 100m (100米米), k (千欧姆千欧姆), 177A

38、 (177安培安培) 3.7 VHDL3.7 VHDL文字规则文字规则 3.7.2 字符串字符串 (1) 文字字符串文字字符串 ERROR , Both S and Q equal to 1 , X , BB$CC (2) (2) 数位字符串数位字符串 B:二进制基数符号,表示二进制位:二进制基数符号,表示二进制位0或或1,在字符串中的每位表示一个,在字符串中的每位表示一个Bit。 O:八进制基数符号,在字符串中的每一个数代表一个八进制数,即代表一个:八进制基数符号,在字符串中的每一个数代表一个八进制数,即代表一个3位位 (BIT)的二进制数。的二进制数。 X:十六进制基数符号:十六进制基数符

39、号(0F),代表一个十六进制数,即一个,代表一个十六进制数,即一个4位的二进制数。位的二进制数。 data1 = B1_1101_1110 - 二进制数数组,位矢数组长度是二进制数数组,位矢数组长度是9 data2 = O15 - 八进制数数组,位矢数组长度是八进制数数组,位矢数组长度是6 data3 = XAD0 - 十六进制数数组,位矢数组长度是十六进制数数组,位矢数组长度是12 data4 = B101_010_101_010 - 二进制数数组,位矢数组长度是二进制数数组,位矢数组长度是12 data5 = 101_010_101_010 -表达错误,缺表达错误,缺B。 data6 =

40、0AD0 -表达错误,缺表达错误,缺X。 3.7 VHDL3.7 VHDL文字规则文字规则 3.7.3 标识符标识符 Decoder_1 , FFT , Sig_N , Not_Ack , State0 , Idle _Decoder_1- 起始为非英文字母起始为非英文字母 2FFT- 起始为数字起始为数字 Sig_#N- 符号符号“#”不能成为标识符的构成不能成为标识符的构成 Not-Ack- 符号符号“-” 不能成为标识符的构成不能成为标识符的构成 RyY_RST_- 标识符的最后不能是下划线标识符的最后不能是下划线“_” data_ _BUS - 标识符中不能有双下划线标识符中不能有双下

41、划线 return - 关键词关键词 3.7 VHDL3.7 VHDL文字规则文字规则 3.7.4 下标名下标名 标识符标识符(表达式表达式) SIGNAL a,b : BIT_VECTOR (0 TO 3) ; SIGNAL m : INTEGER RANGE 0 TO 3 ; SIGNAL y,z : BIT ; y = a(m) ; - 不可计算型下标表示不可计算型下标表示 z = b(3) ; - z = b(3) ; - 可计算型下标表示可计算型下标表示 3.8 VHDL3.8 VHDL数据类型数据类型 标量型标量型(Scalar Type): 包括实数类型、整数类型、枚举类型、时间

42、类型。包括实数类型、整数类型、枚举类型、时间类型。 复合类复合类型型(Composite Type)(Composite Type): 可以由小的数据类型复合而成,如可由标量型复合而成。复合可以由小的数据类型复合而成,如可由标量型复合而成。复合 类型主要有数组型类型主要有数组型(Array)(Array)和记录型和记录型(Record)(Record)。 存取类型存取类型(Access Type)(Access Type): 为给定的数据类型的数据对象提供存取方式。为给定的数据类型的数据对象提供存取方式。 文件类型文件类型(Files Type)(Files Type): 用于提供多值存取类型

43、。用于提供多值存取类型。 3.8 VHDL3.8 VHDL数据类型数据类型 3.8.1 预定义数据类型预定义数据类型 1. 布尔布尔(BOOLEAN)类型类型 TYPE BOOLEAN IS (FALSE,TRUE); 2. 位位(BIT)数据类型数据类型 TYPE BIT IS (0,1); 3. 位矢量位矢量(BIT_VECTOR)类型类型 TYPE BIT_VECTOR IS ARRAY (Natural Range ) OF BIT ; 3.8 VHDL3.8 VHDL数据类型数据类型 3.8.1 预定义数据类型预定义数据类型 4. 字符字符(CHARACTER)类型类型 5. 整数整

44、数(INTEGER)类型类型 6. 实数实数(REAL)类型类型 1.0十进制浮点数十进制浮点数 0.0十进制浮点数十进制浮点数 65971.333333十进制浮点数十进制浮点数 65_971.333_3333与上一行等价与上一行等价 3#43.6#e+4八进制浮点数八进制浮点数 43.6E4十进制浮点数十进制浮点数 3.8 VHDL3.8 VHDL数据类型数据类型 7. 字符串字符串(STRING)类型类型 3. 时间时间(TIME)类型类型 VARIABLE string_var : STRING (1 TO 7 ) ; string_var := a b c d ; TYPE time

45、IS RANGE 2147433647 TO 2147433647 units fs ; - 飞秒,飞秒,VHDL中的最小时间单位中的最小时间单位 ps = 1000 fs ; - 皮秒皮秒 ns = 1000 ps ; - 纳秒纳秒 us = 1000 ns ; - 微秒微秒 ms = 1000 us ; - 毫秒毫秒 sec = 1000 ms ; - 秒秒 min = 60 sec ; - 分分 hr = 60 min ; - 时时 end units ; 3.8 VHDL3.8 VHDL数据类型数据类型 3.8.1 预定义数据类型预定义数据类型 9. 文件文件(FILES)类型类型 P

46、ROCEDUER Readline (F: IN TEXT; L: OUT LINE); PROCEDUER Writeline (F: OUT TEXT; L: IN LINE); PROCEDUER Read ( L: INOUT LINE; Value: OUT std_logic; Good: OUT BOOLEAN); PROCEDUER Read (L: INOUT LINE; Value: OUT std_logic); PROCEDUER Read ( L: INOUT LINE; Value: OUT std_logic_ vector; Good: OUT BOOLEAN)

47、; PROCEDUER Read (L: INOUT LINE; Value: OUT std_logic_ vector; PROCEDUER Write ( L: INOUT LINE; Value: IN std_logic; Justiaied: IN SIDE :=Right;field; IN WIDTH :=0); PROCEDUER Write (L: INOUT LINE; Value: IN std_logic _ vector, Justiaied: IN SIDE :=Right;field; IN WIDTH :=0); 3.8 VHDL3.8 VHDL数据类型数据类

48、型 3.8.2 IEEE预定义标准逻辑位与矢量预定义标准逻辑位与矢量 1. 标准逻辑位标准逻辑位STD_LOGIC数据类型数据类型 2. 标准逻辑矢量标准逻辑矢量(STD_LOGIC_VECTOR)数据类型数据类型 STD_LOGIC_VECTOR类型定义如下:类型定义如下: TYPE STD_LOGIC_VECTOR IS ARRAY ( NATURAL RANGE ) OF STD_LOGIC ; 3.8 VHDL3.8 VHDL数据类型数据类型 3.8.3 其他预定义标准数据类型其他预定义标准数据类型 无符号型无符号型(UNSIGNED) 有符号型有符号型(SIGNED) 小整型小整型(

49、SMALL_INT) LIBRARY IEEE ; USE IEEE.STD_LOIGC_ARITH.ALL ; 3.8 VHDL3.8 VHDL数据类型数据类型 3.8.3 其他预定义标准数据类型其他预定义标准数据类型 1. 无符号数据类型无符号数据类型(UNSIGNED TYPE) UNSIGNED(1000) VARIABLE var : UNSIGNED(0 TO 10) ; SIGNAL sig : UNSIGNED(5 TO 0) ; 2. 有符号数据类型有符号数据类型(SIGNED TYPE) SIGNED(0101) 代表代表 +5,5 SIGNED(1011) 代表代表 5

50、VARIABLE var :SIGNED(0 TO 10); 3.8 VHDL3.8 VHDL数据类型数据类型 3.8.4 VHDL数组类型数组类型 TYPE 数组名数组名IS ARRAY(数组范围数组范围)OF数据类型数据类型 ; TYPE stb IS ARRAY (7 DOWNTO 0) of STD_LOGIC ; TYPE x is (low,high) ; TYPE data_bus IS ARRAY (0 TO 7,x) of BIT ; TYPE 数组名数组名IS ARRAY (数组下标名数组下标名RANGE )OF 数据类型数据类型 ; 3.8 VHDL3.8 VHDL数据类

51、型数据类型 3.8.4 VHDL数组类型数组类型 【例【例3-13】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY amp IS PORT ( a1,a2 : IN BIT_VECTOR(3 DOWNTO 0); c1,c2,c3 : IN STD_LOGIC_VECTOR (3 DOWNTO 0); b1,b2,b3 : INTEGER RANGE 0 TO 15; d1,d2,d3,d4 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END

52、amp; d1 = TO_STDLOGICVECTOR(a1 AND a2); -(1) d2 = CONV_STD_LOGIC_VECTOR(b1,4) WHEN CONV_INTEGER(b2)=9 else CONV_STD_LOGIC_VECTOR(b3,4); -(2) d3 = c1 WHEN CONV_INTEGER(c2)= 3 ELSE c3; -(3) d4 = c1 WHEN c2 = 3 else c3; -(4) 3.8 VHDL3.8 VHDL数据类型数据类型 3.8.4 VHDL数组类型数组类型 【例【例3-19】 LIBRARY IEEE; USE IEEE.S

53、TD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY decoder3to3 IS PORT ( input: IN STD_LOGIC_VECTOR (2 DOWNTO 0); output: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); END decoder3to3; ARCHITECTURE behave OF decoder3to3 IS BEGIN PROCESS (input) BEGIN output 0); output(CONV_INTEGER(input) result(i) := 0

54、; WHEN 1|H = result(i) := 1; WHEN OTHERS = result(i) := xmap; END CASE ; END LOOP ; RETURN result ; END ; 3.9 VHDL3.9 VHDL操作符操作符 3.9.1 逻辑操作符逻辑操作符(Logical Operator) 逻辑操作符逻辑操作符(Logical Operator) 关系操作符关系操作符(Relational Operator) 算术操作符算术操作符(Arithmetic Operator) 符号操作符符号操作符(Sign Operator) 重载操作符重载操作符(Overlo

55、ading Operator) A and B and C and D (A or B) xor C 类类 型型操作符操作符功功 能能操作数数据类型操作数数据类型 算术操作符算术操作符 + +加加 整数整数 减减 整数整数 -b、c 相与后向相与后向a赋值,赋值,a、b、c的数据类型同属的数据类型同属4位长的位矢量位长的位矢量 d=e OR f OR g ; - 两个操作符两个操作符OR相同,不需括号相同,不需括号 h=(i NAND j)NAND k ; - NAND不属上述三种算符中的一种,必须加括号不属上述三种算符中的一种,必须加括号 l=(m XOR n)AND(o XOR p); -

56、 操作符不同,必须加括号操作符不同,必须加括号 h=i AND j AND k ; - 两个操作符都是两个操作符都是AND,不必加括号,不必加括号 h=i AND j OR k ; - 两个操作符不同,未加括号,表达错误两个操作符不同,未加括号,表达错误 a=b AND e ; - 操作数操作数b 与与 e的位矢长度不一致,表达错误的位矢长度不一致,表达错误 h” (大于大于) “=” (大于等于大于等于) “ 011; 101 110; 3.9 VHDL3.9 VHDL操作符操作符 3.9.2 关系操作符关系操作符(Relational Operator) 【例【例3-22】 ENTITY

57、relational_ops_1 IS PORT ( a,b : IN BITVECTOR (0 TO 3) ; m : OUT BOOLEAN) ; END relational_ops_1 ; ARCHITECTURE example OF relational_ops_1 IS BEGIN output = (a = b) ; END example ; 3.9 VHDL3.9 VHDL操作符操作符 3.9.2 关系操作符关系操作符(Relational Operator) 【例【例3-23】 ENTITY relational_ops_2 IS PORT (a,b : IN INTEG

58、ER RANGE 0 TO 3 ; m : OUT BOOLEAN) ; END relational_ops_2 ; ARCHITECTURE example OF relational_ops_2 IS BEGIN output = b) ; END example ; 3.9 VHDL3.9 VHDL操作符操作符 3.9.3 算术操作符算术操作符(Arithmetic Operator) 类类 别别算术操作符分类算术操作符分类 1 求和操作符求和操作符(Adding operators)+(加加),(减减), (并置并置) 2 求 积 操 作 符求 积 操 作 符 ( M u l t i

59、 p l y i n g operators) * , / , MOD , REM 3 符号操作符符号操作符(Sign operators) +(正正), (负负) 4 混合操作符混合操作符(Miscellaneous operators) * , ABS 5 移位操作符移位操作符(Shift operators) SLL,SRL,SLA,SRA,ROL, ROR 表表3-4 算术操作符分类表算术操作符分类表 3.9 VHDL3.9 VHDL操作符操作符 3.9.3 算术操作符算术操作符(Arithmetic Operator) 1. 求和操作符求和操作符 【例【例3-24】 VARIABLE

60、 a,b ,c ,d ,e ,f : INTEGER RANGE 0 TO 255 ; . a := b + c ; d := e f ; 【例【例3-25】 PROCEDURE adding_e (a : IN INTEGER ; b : INOUT INTEGER ) IS . b := a + b ; 3.9 VHDL3.9 VHDL操作符操作符 3.9.3 算术操作符算术操作符(Arithmetic Operator) 1. 求和操作符求和操作符 【例【例3-26】 PACKAGE example_arithmetic IS TYPE small_INt IS RANGE 0 TO 7

温馨提示

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

评论

0/150

提交评论