EDA技术与VHDL第10章 VHDL结构.ppt

上传人:laozhun 文档编号:2403040 上传时间:2023-02-17 格式:PPT 页数:88 大小:821.50KB
返回 下载 相关 举报
EDA技术与VHDL第10章 VHDL结构.ppt_第1页
第1页 / 共88页
EDA技术与VHDL第10章 VHDL结构.ppt_第2页
第2页 / 共88页
EDA技术与VHDL第10章 VHDL结构.ppt_第3页
第3页 / 共88页
EDA技术与VHDL第10章 VHDL结构.ppt_第4页
第4页 / 共88页
EDA技术与VHDL第10章 VHDL结构.ppt_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《EDA技术与VHDL第10章 VHDL结构.ppt》由会员分享,可在线阅读,更多相关《EDA技术与VHDL第10章 VHDL结构.ppt(88页珍藏版)》请在三一办公上搜索。

1、EDA技术与VHDL,第10章VHDL结构,8.1 VHDL实体,VHDL实体作为一个设计实体(独立的电路功能结构)的组成部分,其功能是对这个设计实体与外部电路进行接口描述。实体是设计实体的表层设计单元,实体说明部分规定了设计单元的输入输出接口信号或引脚,它是设计实体对外的一个通信界面。实体的具体表述和用法已在前面有过详细例解,这里不再重复。,KX康芯科技,8.2 VHDL结构体,1.结构体的一般语言格式,ARCHITECTURE 结构体名 OF 实体名 IS 说明语句BEGIN 功能描述语句END ARCHITECTURE 结构体名;,8.2 VHDL结构体,2.结构体说明语句,3.功能描述

2、语句结构,进程语句,信号赋值语句,子程序调用语句,元件例化语句,8.3 VHDL子程序,8.3.1 VHDL函数,FUNCTION 函数名(参数表)RETURN 数据类型-函数首FUNCTION 函数名(参数表)RETURN 数据类型 IS-函数体 说明部分 BEGIN 顺序语句;END FUNCTION 函数名;,【例8-1】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE packexp IS-定义程序包 FUNCTION max(a,b:IN STD_LOGIC_VECTOR)-定义函数首 RETURN STD_LOGIC_VECTOR;F

3、UNCTION 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 THEN RETURN a;ELSE RETURN b;END IF;END FUNCTION

4、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,out2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END;ARCHITECTURE bhv OF axamp IS BEGIN out

5、1=max(dat1,dat2);-用在赋值语句中的并行函数调用语句 PROCESS(dat3,dat4)BEGIN out2=max(dat3,dat4);-顺序函数调用语句 END PROCESS;END;,KX康芯科技,8.3 VHDL子程序,8.3.1 VHDL函数,图8-1 10-2 例8-1的逻辑电路图,8.3 VHDL子程序,【例8-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY func IS PORT(a:IN STD_LOGIC_VECTOR(0 to 2);m:OUT STD_LOGIC_VECTOR(0 to 2);E

6、ND ENTITY func;ARCHITECTURE demo OF func IS FUNCTION sam(x,y,z:STD_LOGIC)RETURN STD_LOGIC IS BEGIN RETURN(x AND y)OR z;END FUNCTION sam;BEGIN PROCESS(a)BEGIN m(0)=sam(a(0),a(1),a(2);m(1)=sam(a(2),a(0),a(1);m(2)=sam(a(1),a(2),a(0);END PROCESS;END ARCHITECTURE demo;,8.3 VHDL子程序,8.3.2 VHDL重载函数,【例8-3】(M

7、axplusII不支持本例)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE packexp IS-定义程序包 FUNCTION max(a,b:IN STD_LOGIC_VECTOR)-定义函数首 RETURN STD_LOGIC_VECTOR;FUNCTION max(a,b:IN BIT_VECTOR)-定义函数首 RETURN BIT_VECTOR;FUNCTION max(a,b:IN INTEGER)-定义函数首 RETURN INTEGER;END;PACKAGE BODY packexp IS FUNCTION max(a,b:I

8、N STD_LOGIC_VECTOR)-定义函数体 RETURN STD_LOGIC_VECTOR IS BEGIN IF a b THEN RETURN a;ELSE RETURN b;END IF;END FUNCTION max;-结束FUNCTION语句 FUNCTION max(a,b:IN INTEGER)-定义函数体 RETURN INTEGER IS BEGIN IF a b THEN RETURN a;ELSE RETURN b;END IF;END FUNCTION max;-结束FUNCTION语句,接下页,FUNCTION max(a,b:IN BIT_VECTOR)-

9、定义函数体 RETURN BIT_VECTOR IS BEGIN IF a b THEN RETURN a;ELSE RETURN b;END IF;END FUNCTION max;-结束FUNCTION语句 END;-结束PACKAGE BODY语句.-以下是调用重载函数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

10、,b3:IN INTEGER RANGE 0 TO 15;c1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);c2:OUT BIT_VECTOR(4 DOWNTO 0);c3:OUT INTEGER 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)的调用 E

11、ND;,【例8-4】LIBRARY IEEE;-程序包首 USE IEEE.std_logic_1164.all;USE 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_

12、VECTOR;function SHR(ARG: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 return L;els

13、e 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;,8.3 VHDL子程序,8.3.3 VHDL转换函数,表8-1 IEEE库类型转换函数表,8.3 VHDL子程序,8.3.3 VHDL转换函数,【例8-5】LIBR

14、ARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY exg IS PORT(a,b:in bit_vector(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;,8.3 VHDL子程序,8.3.3 VHDL转换函数,【例8-6】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_

15、LOGIC_ARITH.ALL;-注意使用了此程序包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=conv_std_logic_vector(a,4)when conv_integer(c)=8 else conv_std_logic_vector(b,4);END;,【例8-7】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE n_pac

16、k IS SUBTYPE nat IS Integer range 0 to 255;-定义一个Integer的子类型 TYPE Bit8 IS array(7 downto 0)OF std_logic;-定义一个数据类型 FUNCTION nat_to_Bit8(s:nat)RETURN Bit8;End n_pack;PACKAGE BODY n_pack IS FUNCTION nat_to_Bit8(s:nat)RETURN Bit8 IS VARIABLE Din:Integer range 255 downto 0;VARIABLE Rut:Bit8;VARIABLE Rig:I

17、nteger:=2*7;BEGIN Din:=s;FOR I in 7 downto 0 LOOP IF Din/Rig 1 THEN Rut(i):=1;Din:=Din-Rig;ELSE Rut(i):=0;END IF;Rig:=Rig/2;END LOOP;RETURN Rut;END nat_to_Bit8;END n_pack;LIBRARY IEEE;-用户定义转换函数应用实例USE IEEE.STD_LOGIC_1164.ALL;USE WORK.n_pack.ALL;ENTITY axamp IS PORT(dat:IN nat;-注意数据类型的定义 ou:OUT Bit8)

18、;-注意数据类型的定义 END;ARCHITECTURE bhv OF axamp IS BEGIN ou=nat_to_Bit8(dat);END;,8.3 VHDL子程序,8.3.4 VHDL决断函数,决断函数输入一般是单一变量,多个驱动源的信号值组成非限定数组,如2个信号驱动源,其信号值组成的数组是2个元素长度;3个信号驱动源信号值组成的数组是3个元素长度,多个信号驱动源信号值组成的未限定数组可依次类推。但决断函数调用后返回的是单一信号值,称断信号值。,8.3 VHDL子程序,8.3.5 VHDL过程,PROCEDURE 过程名(参数表)-过程首PROCEDURE 过程名(参数表)IS

19、说明部分 BIGIN-过程体 顺序语句;END PROCEDURE 过程名,8.3 VHDL子程序,8.3.5 VHDL过程,PROCEDURE pro1(VARIABLE a,b:INOUT REAL);PROCEDURE pro2(CONSTANT a1:IN INTEGER;VARIABLE b1:OUT INTEGER);PROCEDURE pro3(SIGNAL sig:INOUT BIT);,8.3 VHDL子程序,8.3.5 VHDL过程,【例8-8】PROCEDURE prg1(VARIABLE value:INOUT BIT_VECTOR(0 TO 7)ISBEGIN CAS

20、E value IS WHEN 0000=value:0101;WHEN 0101=value:0000;WHEN OTHERS=value:1111;END CASE;END PROCEDURE prg1;,8.3 VHDL子程序,8.3.5 VHDL过程,【例8-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

21、v2 v1;-当v2 v1,跳出循环LOOP END LOOP Q1 ASSERT(v2 v1)REPORT OUT OF RANGE-输出错误报告 SEVERITY ERROR;END PROCEDURE comp;,【例8-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-过程体定义 PROCEDURE na

22、nd4a(SIGNAL a,b,c,d:IN STD_LOGIC;SIGNAL y:OUT STD_LOGIC)IS BEGIN y=NOT(a AND b AND c AND d);RETURN;END nand4a;END axamp;LIBRARY IEEE;-主程序USE IEEE.STD_LOGIC_1164.ALL;USE WORK.axamp.ALL;ENTITY EX IS PORT(e,f,g,h:IN STD_LOGIC;x:OUT STD_LOGIC);END;ARCHITECTURE bhv OF EX IS BEGIN nand4a(e,f,g,h,x);并行调用过程

23、END;,8.3 VHDL子程序,8.3.6 VHDL重载过程,【例8-11】PROCEDURE calcu(v1,v2:IN REAL;SIGNAL out1:INOUT INTEGER);PROCEDURE calcu(v1,v2:IN INTEGER;SIGNAL out1:INOUT REAL);.calcu(20.15,1.42,signl);-调用第一个重载过程calcu calcu(23,320,sign2);-调用第二个重载过程 calcu.,8.3 VHDL子程序,8.3.7 子程序调用语句,1.过程调用,过程名(形参名=实参表达式,形参名=实参表达式);,(1)将IN和IN

24、OUT模式的实参值赋给欲调用的过程中与它们对应的形参;(2)执行这个过程;(3)将过程中IN和INOUT模式的形参值返回给对应的实参。,8.3 VHDL子程序,8.3.7 子程序调用语句,1.过程调用,【例8-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_type

25、sENTITY sort IS PORT(in_array:IN data_array;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(low)data

26、(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是对应于data、low、high的实参 swap(my_array,2,3);-位置关联法调用,第2、第3元素交换 swap(my_array,1,2);-位置

27、关联法调用,第1、第2元素再次交换 out_array=my_array;END Process;END exmp;,8.3 VHDL子程序,8.3.7 子程序调用语句,1.过程调用,【例8-13】ENTITY sort4 isGENERIC(top:INTEGER:=3);PORT(a,b,c,d:IN BIT_VECTOR(0 TO top);ra,rb,rc,rd:OUT BIT_VECTOR(0 TO top);END sort4;ARCHITECTURE muxes OF sort4 ISPROCEDURE sort2(x,y:INOUT BIT_VECTOR(0 TO top)is

28、 VARIABLE tmp:BIT_VECTOR(0 TO top);BEGIN IF x 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:=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;,8.3 V

29、HDL子程序,8.3.7 子程序调用语句,1.过程调用,2函数调用,函数调用与过程调用是十分相似的,不同之处是,调用函数将返还一个指定数据类型的值,函数的参量只能是输入值。,8.3 VHDL子程序,8.3.8 并行过程调用语句,过程名(关联参量名);,【例8-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,c2);-进程语句执行 BEGI

30、N Adder(c1,c2,s1);-顺序过程调用,在此c1、c2、s1即为分别对END PROCESS;-应于a、b、sum的关联参量名,8.3 VHDL子程序,8.3.8 并行过程调用语句,【例8-15】PROCEDURE check(SIGNAL a:IN STD_LOGIC_VECTOR;-在调用时 SIGNAL error:OUT BOOLEAN)IS-再定位宽 VARIABLE found_one:BOOLEAN:=FALSE;-设初始值 BEGIN FOR i IN aRANGE LOOP-对位矢量a的所有的位元素进行循环检测 IF a(i)=1 THEN-发现a中有 1 IF

31、found_one THEN-若found_one为TRUE,则表明发现了一个以上的1 ERROR=TRUE;-发现了一个以上的1,令found_one为TRUE RETURN;-结束过程 END IF;Found_one:=TRUE;-在a中已发现了一个1 End IF;End LOOP;-再测a中的其他位 error=NOT found_one;-如果没有任何1 被发现,error 将被置TRUE END PROCEDURE check;,8.3 VHDL子程序,8.3.8 并行过程调用语句,.CHBLK:BLOCK SIGNAL s1:STD_LOGIC_VECTOR(0 TO 0);-

32、过程调用前设定位矢尺寸 SIGNAL s2:STD_LOGIC_VECTOR(0 TO 1);SIGNAL 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);-并行过程调用,关联参数名为s4、e4 END BLOCK;.,8.4 VH

33、DL库,8.4.1 库的种类,1.IEEE库,2.STD库,3.WORK库,4.VITAL库,8.4 VHDL库,8.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;,8.5 VHDL程序包,定义程序包的一般语句结构如下:PACKAGE 程序包名 IS-程序包首 程序包首说明部分 END 程序包名;PACKAGE BODY 程序包名 I

34、S-程序包体 程序包体说明部分以及包体内 END 程序包名;,8.5 VHDL程序包,【例8-16】PACKAGE pacl IS-程序包首开始 TYPE byte IS RANGE 0 TO 255;-定义数据类型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:O

35、UT BOOLEAN);END COMPONENT;FUNCTION my_function(a:IN byte)Return byte;-定义函数 END pacl;-程序包首结束,【例8-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

36、simple 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 8,B1111011 WHEN 9,B0000000 WHEN OTHERS;END simple;,KX康芯科技,8.6 VHDL配置,配置语句的一般格式如下:CONFIGURATION 配置名 OF 实体名 I

37、S 配置说明 END 配置名;,8.7 VHDL文字规则,8.7.1 数字,整数:,5,678,0,156E2(=15600),45_234_287(=45234287),实数:,1.335,88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499),以数制基数表示的文字:,SIGNAL d1,d2,d3,d4,d5,:INTEGER RANGE 0 TO 255;d1=10#170#;-(十进制表示,等于 170)d2=16#FE#;-(十六进制表示,等于 254)d3=2#1111_1110#;-(二进制表示,等于 254)d4=8

38、#376#;-(八进制表示,等于 254)d5=16#E#E1;-(十六进制表示,等于2#1110000#,等于224),物理量文字(VHDL综合器不接受此类文字),60s(60秒),100m(100米),k(千欧姆),177A(177安培),8.7 VHDL文字规则,8.7.2 字符串,(1)文字字符串,ERROR,Both S and Q equal to 1,X,BB$CC,(2)数位字符串,B:二进制基数符号,表示二进制位0或1,在字符串中的每位表示一个Bit。O:八进制基数符号,在字符串中的每一个数代表一个八进制数,即代表一个3位(BIT)的二进制数。X:十六进制基数符号(0F),代

39、表一个十六进制数,即一个4位的二进制数。,data1=B1_1101_1110-二进制数数组,位矢数组长度是9data2=O15-八进制数数组,位矢数组长度是6data3=XAD0-十六进制数数组,位矢数组长度是12data4=B101_010_101_010-二进制数数组,位矢数组长度是12data5=101_010_101_010-表达错误,缺B。data6=0AD0-表达错误,缺X。,8.7 VHDL文字规则,8.7.3 标识符,Decoder_1,FFT,Sig_N,Not_Ack,State0,Idle,_Decoder_1-起始为非英文字母2FFT-起始为数字Sig_#N-符号“#

40、”不能成为标识符的构成Not-Ack-符号“-”不能成为标识符的构成RyY_RST_-标识符的最后不能是下划线“_”data_ _BUS-标识符中不能有双下划线return-关键词,8.7 VHDL文字规则,8.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);-可计算型下标表示,8.8 VHDL数据类型,标量型(Scalar Type):包括实数类型、整数类型、枚举类型、时间类型。复合类型(Composite T

41、ype):可以由小的数据类型复合而成,如可由标量型复合而成。复合类型主要有数组型(Array)和记录型(Record)。存取类型(Access Type):为给定的数据类型的数据对象提供存取方式。文件类型(Files Type):用于提供多值存取类型。,8.8 VHDL数据类型,8.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;,8.8

42、 VHDL数据类型,8.8.1 预定义数据类型,4.字符(CHARACTER)类型,5.整数(INTEGER)类型,6.实数(REAL)类型,8.8 VHDL数据类型,7.字符串(STRING)类型,8.时间(TIME)类型,VARIABLE string_var:STRING(1 TO 7);string_var:=a b c d;,TYPE time IS RANGE 2147483647 TO 2147483647 units fs;-飞秒,VHDL中的最小时间单位 ps=1000 fs;-皮秒 ns=1000 ps;-纳秒 us=1000 ns;-微秒 ms=1000 us;-毫秒 s

43、ec=1000 ms;-秒 min=60 sec;-分 hr=60 min;-时end units;,8.8 VHDL数据类型,8.8.1 预定义数据类型,9.文件(FILES)类型,PROCEDUER 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

44、Read(L:INOUT LINE;Value:OUT std_logic_ vector;Good:OUT BOOLEAN);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;

45、IN WIDTH:=0);,8.8 VHDL数据类型,8.8.2 IEEE预定义标准逻辑位与矢量,1.标准逻辑位STD_LOGIC数据类型,2.标准逻辑矢量(STD_LOGIC_VECTOR)数据类型,STD_LOGIC_VECTOR类型定义如下:TYPE STD_LOGIC_VECTOR IS ARRAY(NATURAL RANGE)OF STD_LOGIC;,8.8 VHDL数据类型,8.8.3 其他预定义标准数据类型,无符号型(UNSIGNED)有符号型(SIGNED)小整型(SMALL_INT),LIBRARY IEEE;USE IEEE.STD_LOIGC_ARITH.ALL;,8.

46、8 VHDL数据类型,8.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,5SIGNED(1011)代表 5,VARIABLE var:SIGNED(0 TO 10);,8.8 VHDL数据类型,8.8.4 VHDL数组类型,TYPE 数组名IS ARRAY(数组范围)OF数据类型;,TYPE stb IS ARRAY(7 DOWNT

47、O 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 数据类型;,8.8 VHDL数据类型,8.8.4 VHDL数组类型,【例8-18】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_VECT

48、OR(3 DOWNTO 0);b1,b2,b3:INTEGER RANGE 0 TO 15;d1,d2,d3,d4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END 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)=8 ELSE c3;-(3)d4=c1 WHEN c2=8 else c3;-(4),8.8

49、 VHDL数据类型,8.8.4 VHDL数组类型,【例8-19】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY decoder3to8 IS PORT(input:IN STD_LOGIC_VECTOR(2 DOWNTO 0);output:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END decoder3to8;ARCHITECTURE behave OF decoder3to8 IS BEGIN PROCESS(input)BEGIN output 0);

50、output(CONV_INTEGER(input)=1;END PROCESS;END behave;,8.8.4 VHDL数组类型,【例8-20】FUNCTION To_bit(s:std_ulogic;xmap:BIT:=0)RETURN BIT;FUNCTION To_bitvector(s:std_logic_vector;xmap:BIT:=0)RETURN BIT_VECTOR;FUNCTION To_bitvector(s:std_ulogic_vector;xmap:BIT:=0)RETURN BIT_VECTOR;下面是转换函数To_bitvector的函数体:FUNCTI

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号