VHDL硬件描述语言 (2).ppt

上传人:小飞机 文档编号:6522927 上传时间:2023-11-08 格式:PPT 页数:105 大小:1.86MB
返回 下载 相关 举报
VHDL硬件描述语言 (2).ppt_第1页
第1页 / 共105页
VHDL硬件描述语言 (2).ppt_第2页
第2页 / 共105页
VHDL硬件描述语言 (2).ppt_第3页
第3页 / 共105页
VHDL硬件描述语言 (2).ppt_第4页
第4页 / 共105页
VHDL硬件描述语言 (2).ppt_第5页
第5页 / 共105页
点击查看更多>>
资源描述

《VHDL硬件描述语言 (2).ppt》由会员分享,可在线阅读,更多相关《VHDL硬件描述语言 (2).ppt(105页珍藏版)》请在三一办公上搜索。

1、4.1 VHDL概述 4.2 VHDL语言基础知识4.3 VHDL的基本语句4.4 VHDL的子程序,第四章 VHDL硬件描述语言,4.1 VHDL概述,一、VHDL语言及产生背景二、VHDL的特点,4.1 VHDL概述,一、VHDL语言及产生背景 VHDL(Very High Speed Integrated Circuit Hardware Description Language)即超高速集成电路硬件描述语言。美国国防部在20世纪80年代初为其超高速集成电路VHSIC计划提出的硬件描述语言,它是硬件设计者和EDA工具之间的界面。设计者使用HDL来描述自己的设计,并把这个描述告诉EDA工具

2、,最后在EDA工具的帮助下进行详细地设计及验证。,4.1 VHDL概述,产生背景:美国国防部电子系统项目有着众多的承包商,他们各自建立和使用自己的电路硬件描述语 言,这就使得各公司之间的设计不能被重复利用,造成了信息交换和维护方面的困难。为解决此问题,20世纪80年代初美国国防部制定了VHDL,以作为各承包商之间提交复杂电路设计文档的一种标准方案。1987年12月,VHDL被正式接受为国际标准,编号为IEEE Std1076-1987,即VHDL87。1993年被更新为IEEE Std1164-1993,即VHDL93。,4.1 VHDL概述,功能强大,描述力强。可移植性好。研制周期短,成本低

3、。可以延长设计的生命周期。具有向ASIC移植的能力。,二、VHDL的特点,4.1 VHDL概述,三、VHDL和VerilogHDL的比较,1.一般的硬件描述语言可以在三个层次上进行电路描述,其描述层次依次可分为行为级、RTL级和门电路级。Verilog属于RTL级硬件描述语言,通常只适用于RTL级和更低层次的门电路级描述。VHDL更适合于行为级(也包括RTL级)的描述,也称行为描述语言。,2.由于任何一种硬件描述语言源程序最终都要转换成门电路级才能被布线器或适配器所接受,Verilog语言源程序的综合过程稍简单,只要经过RTL门电路级的转化即可;而VHDL语言源程序的综合则通常要经过行为级RT

4、L门电路级的转化方可。,4.1 VHDL概述,3.VHDL语言是一种高级描述语言,适用于电路高级建模,比较适合于CPLD/FPGA目标器件的设计,或间接方式的ASIC设计;而Verilog语言则是一种较低级的描述语言,更适用于描述门级电路,易于控制电路资源,因此更适用于直接的集成电路或ASIC设计。,4.VHDL和Verilog语言的共同特点是:能形式化地抽象表示电路的结构和行为,支持逻辑设计中层次与领域的描述,可借用高级语言的精巧结构来简化电路的描述,具有电路仿真与验证机制以保证设计的正确性,支持电路描述由高层到低层的综合转换,便于文档管理,易于理解和设计重用。,4.1 VHDL概述,5.V

5、HDL和Verilog语言的主要区别在于逻辑表达的描述级别。VHDL虽然也可以直接描述门电路,但这方面的能力却不如Verilog语言,而Verilog语言在高级描述方面不如VHDL语言。VHDL语言更适合于描述电路的行为,其先进行行为描述,然后由综合器根据功能要求来生成符合要求的电路网表;Verilog语言的描述风格接近于电路原理图,从某种意义上说,它是电路原理图的高级文本表示方式。,6.VHDL语言描述层次较高,不易控制底层电路,因而对VHDL综合器的综合性能要求较高。只要熟悉基本单元电路的描述风格,综合后的电路还是易于控制的。在Verilog设计中,工作量通常比较大,因为设计者需要搞清楚具

6、体电路的细节。目前,大多数软件都支持VHDL和Verilog语言混合设计.,4.2 VHDL语言基础知识,一、VHDL的程序结构二、VHDL的语言元素,4.2 VHDL语言基础知识,一、VHDL的程序结构,五个部分,实体(Entity),结构体(Architecture),配置(Configuration),程序包(Package),库(Library),可选,实体和结构体是VHDL设计文件的两个基本组成部分。实体描述设计系统的外部接口信号.结构体用于描述系统的行为、系统数据的流程或者系统组织结构形式(即系统的内部电路)。配置用于从库中选取所需元件安装到设计单元的实体中。包集合存放各设计模块能

7、共享的数据类型、常数、子程序等。库用于存放已编译的实体、结构体、包集合和配置。,4.2 VHDL语言基础知识,LIBRARY 库名;库USE 库名.程序包名.;程序包ENTITY 实体名 IS 实体PORT();END 实体名;ARCHITECTURE 结构体名 OF 实体名结构体()END 结构体名;,VHDL源文件基本格式,4.2 VHDL语言基础知识,VHDL源程序基本格式举例:,ENTITY test ISPORT(input_pin_name:IN bit;output_pin_name:OUT bit);END test;ARCHITECTURE test_body OF test

8、 ISBEGINoutput_pin_name=input_pin_name;END test_body;,4.2 VHDL语言基础知识,4.2 VHDL语言基础知识,例4-1 与门的逻辑描述,1、实体,格式,ENTITY 实体名 IS GENERIC(类属表);PORT(端口表);END 实体名;,实体说明所设计的逻辑电路的输入、输出信号及其特性(输入、输出、双向),在层次化系统设计中,实体是整个模块或整个系统的输入/输出;在一个器件级的设计中,实体是一个芯片的输入/输出。,4.2 VHDL语言基础知识,说明,PORT(端口名:端口模式 数据类型;端口名:端口模式 数据类型);,端口名是设计

9、者为实体的每一个对外通道所取的名字 端口模式是指这些通道上的数据流动方式 数据类型是指端口上流动的数据的表达格式或取值类型,VHDL要求只有相同数据类型的端口信号和操作数才能相互作用。实体名、端口名等均为符合VHDL命名规则的标识符,PORT说明语句是对一个设计实体界面的说明及对设计实体与外部电路的接口通道的说明,其中包括对每一接口的输入输出模式和数据类型的定义。它是设计实体和外部环境动态通信的通道,其功能对应于电路符号的一个引脚。,格式,4.2 VHDL语言基础知识,说明,IN 输入,信号只能自端口到实体 OUT 输出,信号只能自实体到端口 INOUT 双向,信号既可输入又可输出 BUFFE

10、R 缓冲,信号自实体输出,又有 内部反馈,几种常用端口模式,4.2 VHDL语言基础知识,Out与Buffer的区别,Entity test1 is port(a:in std_logic;b,c:out std_logic);end test1;architecture a of test1 is begin b=not(a);c=b;-Errorend a;,Entity test2 is port(a:in std_logic;b:buffer std_logic;c:out std_logic);end test2;architecture a of test2 isbegin b=n

11、ot(a);c=b;end a;,4.2 VHDL语言基础知识,4.2 VHDL语言基础知识,图4.3 四位加法器add4电路符号,ENTITY add4 IS PORT(a,b:IN STD_LOGIC_VECTOR(3 downto 0);Ci:IN STD_LOGIC;Sum:OUT STD_LOGIC_VECTOR(3 downto 0);Co:OUT STD_LOGIC);END add4;,例4-2 四位全加器实体说明程序,2、结构体,格式,对数据类型、常数、信号、子程序和元件 等元素的说明 描述实体逻辑行为,ARCHITECTURE 结构体名 OF 实体名 IS 说明语句BEGI

12、N 功能描述、并行处理语句END 结构体名;,4.2 VHDL语言基础知识,功能,4.2 VHDL语言基础知识,“结构体名”原则上可以是任意合法的标识符。为了提高程序的可读性,通常依据该结构体所采用的描述方式,用相应的英文单词如:behavior(行为)、dataflow(数据流)、structure(结构)或它们的缩略形式为其命名。“实体名”说明该结构体隶属于哪个实体。“定义语句”用于对该结构体内部使用的信号、常数、数据类型、函数进行定义。特别需要注意的是:实体说明中定义的I/O信号为外部信号,而结构体定义的信号为内部信号。“并行处理语句”是结构体功能描述的主要语句。该语句可以是赋值语句、元

13、件调用语句、进程语句、块语句、子程序等。需要注意的是:这些语句是并行执行的,此并行性是由硬件本身的并行性决定的。,说明,ARCHITECTURE one OF mux21a ISBEGIN y=a WHEN s=0 ELSE b;END one;,结构体,举例:2选1多路选择器的VHDL结构体描述,4.2 VHDL语言基础知识,ENTITY mux21a IS PORT(a,b:IN BIT;s:IN BIT;y:OUT BIT);END mux21a;ARCHITECTURE one OF mux21a IS BEGIN y=a WHEN s=0 ELSE b;END one;,2选1多路选

14、择器的VHDL描述,4.2 VHDL语言基础知识,例4.3 八选一数据选择器,4.2 VHDL语言基础知识,LIBRARY IEEE;ENTITY mux8 IS PORT;(I0,I1,I2,I3,I4,I5,I6,I7,A,B,C:IN STD_LOGIC;Y:OUT STD_LOGIC);END mux8;ARCHITECTURE behav OF mux8 IS SIGNAL sel:INTEGER;BEGIN Y=I0 WHEN sel=0 ELSE I1 WHEN sel=1 ELSE I2 WHEN sel=2 ELSE I3 WHEN sel=3 ELSE I4 WHEN se

15、l=4 ELSE I5 WHEN sel=5 ELSE I6 WHEN sel=6 ELSE I7;Sel=0 WHEN A=0 AND B=0 AND C=0 ELSE 1 WHEN A=0 AND B=0 AND C=1 ELSE 2 WHEN A=0 AND B=1 AND C=0 ELSE 3 WHEN A=0 AND B=1 AND C=1 ELSE 4 WHEN A=1 AND B=0 AND C=0 ELSE 5 WHEN A=1 AND B=0 AND C=1 ELSE 6 WHEN A=1 AND B=1 AND C=0 ELSE 7;END behav;,说明:sel代表控

16、制信号的当前取值,由sel选择八个输入中的一个送给输出Y。从顺序上看,计算sel在使用sel之后,但实际上,位于结构体中的两个赋值语句并行工作,该程序是正确的。建议实际编写时将计算sel放在前,这样易于理解和阅读。,4.2 VHDL语言基础知识,结构体的描述方法:行为描述法、数据流描述法、结构描述法,结构体的行为描述 结构体的行为描述是对设计实体按算法的路径来描述,即描述该设计单元的功能。主要使用函数、过程和进程语句,以算法形式描述数据的变换和传递。,例4.4 用行为描述法设计四位比较器LIBRARY IEEE;ENTITY comp4 IS PORT(a,b:IN STD_LOGIC_VEC

17、TOR(3 downto 0);y:OUT STD_LOGIC);END comp4;ARCHITECTURE ehavior OF comp4 BEGIN comp:PROCESS(a,b)BEGIN IF a=b THEN y=1;ELSE y=0;ENDIF;END PROCESS comp;END behavio;,4.2 VHDL语言基础知识,结构体的数据流描述法 结构体的数据流描述法类似于寄存器传输级的描述方法,它描述了数据流的运动路径、运动方向和运动结果。,此程序的数据流程为:当a=b时,y=1;其余时间y=0。数据流描述的语句与行为描述的语句不同。数据流描述法采用并发信号赋值语

18、句,而不是进程语句。CASE-WHEN、WITH-SELECT-WHEN是数据流描述法常用的语句。,例4.5 用数据流描述法设计四位比较器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY comp4 IS PORT(a,b:IN STD_LOGIC_VECTOR(3 downto 0);y:OUT STD_LOGIC);END comp4;ARCHTECTURE dataflow OF comp4 ISBEGIN y=1 WHEN(a=b)ELSE 0;END dataflow;,4.2 VHDL语言基础知识,结构体的结构化描述法结构体的结构化描述

19、法描述该设计单元的硬件结构,即该硬件是如何构成的。该描述法主要使用元件例化语句及配置指定语句来描述元件的类型及元件之间的互连关系。,例4.6 用结构化描述法设计四位比较器LIBRARY IEEE;ENTITY comp4 IS PORT(a,b:IN STD_LOGIC_VECTOR(3 downto 0);y:OUT STD_LOGIC);END comp4;ARCHITECTURE structural OF comp4 ISCOMPONENT xnor2 PORT(in1,in2:IN STD_LOGIC;out:OUT STD_LOGIC);END COMPONENT;COMPONEN

20、T and4 PORT(in1,in2,in3,in4:IN STD_LOGIC;out:OUT STD_LOGIC);END COMPONENT;SIGNAL s:STD_LOGIC(0 TO 3);BEGIN u0:xnor2 PORT MAP(a(0),b(0),s(0);u1:xnor2 PORT MAP(a(1),b(1),s(1);u2:xnor2 PORT MAP(a(2),b(2),s(2);u3:xnor2 PORT MAP(a(3),b(3),s(3);u4:and4 PORT MAP(s(0),s(1),s(2),s(3),y);END structural;,3、配置,

21、CONFIGURATION 配置名 OF 实体名 IS 说明语句;END 配置名;,格式,配置语句(Configuration)用于描述层与层之间的连接关系和实体与结构体之间的连接关系。它主要用于指定与实体对应的结构体。这种配置用于选择不包含块(BLOCK)和元件(COMPONENTS)的构造体。在配置语句中只包含有实体所选配的构造体名,其他什么也没有。,4.2 VHDL语言基础知识,说明,4.2 VHDL语言基础知识,说明语句形式有多种:对于不含块语句(BLOCK)和元件语句(COMPONENTS)的结构,可使用如下形式:FOR 选配结构体名END FOR 对于包含COMPONENTS语句的

22、结构体,可使用如下的配置形式:FOR 选配结构体名 FOR 元件标号表:元件型号 USE ENTITY WORK.实体名(结构体名);END FOR;END FOR;利用配置语句将例4-4、例4-5和例4-6三个独立的例子合在一起,组成一个含有一个实体和三个结构体的新设计文件,例如4-7。,说明,4.2 VHDL语言基础知识,例4.7 加入了配置的四位比较器设计文件LIBRARY IEEE;ENTITY comp4 IS PORT(a,b:IN STD_LOGIC_VECTOR(3 DOWNTO 0);y:OUT STD_LOGIC);END comp4;ARCHITECTURE behavi

23、o OF comp4 BEGIN comp:PROCESS(a,b)BEGIN IF a=b THEN y=1;ELSE y=0;ENDIF;END PROCESS comp;END behavio;,ARGHTECTURE dataflow OF comp4 IS BEGIN y=1 WHEN(a=b)ELSE 0;END dataflow;ARCHITECTURE structural OF comp4 IS COMPONENT xnor2 PORT(in1,in2:IN STD_LOGIC;out:OUT STD_LOGIC);END COMPONENT;COMPONENT and4 P

24、ORT(in1,in2,in3,in4:IN STD_LOGIC;out:OUT STD_LOGIC);END COMPONENT;SIGNAL s:STD_LOGIC(0 TO 3);BEGIN u0:xnor2 PORT MAP(a(0),b(0),s(0);u1:xnor2 PORT MAP(a(1),b(1),s(1);u2:xnor2 PORT MAP(a(2),b(2),s(2);u3:xnor2 PORT MAP(a(3),b(3),s(3);u4:and4 PORT MAP(s(0),s(1),s(2),s(3),y);END structural;CONFIGUATION c

25、omp4_con OF comp4 IS FOR behavio END FOR;END comp4_con;,若要对structural结构体中的元件xnor2、and4进行配置,则需要在该结构体中增加如下配置语句,CONFIGUATION comp4_con OF comp4 IS FOR u1:xnor2 USE ENTITY WORK.xnor2END FOR;FOR u2:and4 USE ENTITY WORK.and4END FOR;END comp4_con;,4、包集合 为使一组类型说明、常量说明和子程序说明能被其他的设计实体及其结构体所引用,VHDL提供了程序包(包集合)结

26、构。,格式,PACKAGE 包集合名 IS 说明语句;END 包集合名;PACKAGE BODY 包集合名 IS 说明语句;END BODY;一个包集合由包集合标题和包集合体两大部分组成。包集合体是一个可选项。,4.2 VHDL语言基础知识,说明,4.2 VHDL语言基础知识,说明,程序包由程序包说明和包集合体组成。程序包说明为程序包定义接口,声明包中的类型、元件、函数和子程序,其方式与实体定义模块接口非常相似。包集合体规定程序的实际功能,存放说明中的函数和子程序,其方式与模块中结构体语句方法相同。,包体中的子程序及其相应的说明是专用的,不能被其他VHDL单元所引用;而程序包中的说明是公用的,

27、可供外部引用。程序包说明单元是主设计单元,它可以独立地编译并插入到设计库中。包集合体是次级设计单元,只有在其对应的主设计单元编译并插入设计库后,才可独立的编译并插入到设计库中。需注意的是:当程序包中包含子程序说明时,必须将子程序体放在对应的包体中。当程序包仅含类型说明时,可以不带包集合体。,4.2 VHDL语言基础知识,5、库,库是用来存储和放置可编译的设计单元的地方,可通过其目录来查询、调用。VHDL语言的库分为设计库和资源库。设计库设计库对当前项目是可见的、默认的。STD库是VHDL的标准库,含有称为STANDARD的标准程序包,其中定义了多种常用的数据类型,均不加说明便可直接引用。另一个

28、程序包TEXTIO(文本文件输入/输出),则需说明后方可使用。WORK库是VHDL语言的工作库,用于保存当前正在进行的设计。资源库除了STD库和WORK库之外的其他库均为资源库。资源库是常规远见和标准模块存放的库。使用时需预先说明。,格式,USE语句的使用有两种常用格式:USE 库名.程序包名.项目名;USE 库名.程序包名.ALL;,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.STD_ULOGIC;USE IEEE.STD_LOGIC_1164.RISING_EDGE;USE IEEE.STD_LOGIC_1164.ALL;,LIBRARY 库名;USE 库名.

29、程序包名.All;,例,4.2 VHDL语言基础知识,IEEE库:IEEE标准库使用需声明STD库:VHDL标准库使用无需声明ASIC库:EDA厂商提供库使用需声明WORK库:现行作业库,当前工作目录的所有设计使用无需声明USER库:用户自定义库使用需声明,STD_LOGIC_1164 程序包STD_LOGIC_ARITH 程序包STD_LOGIC_UNSIGNED 程序包,VHDL库的种类,注意事项,注意事项,USE语句一般应在LIBRARY语句之后使用。USE语句的最后一个标识符可以是保留字ALL,其含义是:打开由前面各标识符共同指定的程序包说明中的所有说明,或是库中的所有单元。但应注意:

30、使用多个带ALL的USE语句,则可能会出现被打开的对象之间重名的问题。因此,应慎重用带ALL的USE语句。LIBRARY语句和USE语句的作用范围只限于紧跟其后的实体及结构体。,库说明的作用范围,从一个实体说明开始到其所属的结构体、配置为止,当一个源程序中出现两个以上的实体时,必须重复说明。,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY example1 IS()ENDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY example2 IS()END,4.2 VHDL语言基础知识,二、VHDL的语言

31、元素,一)VHDL文字规则,1 数字型文字 整数文字 实数文字 以数制基数表示的文字 2 字符串型文字 文字字符串 数位字符串,3 标识符,VHDL中的标识符有:,保留标识符即关键字或保留字,短标识符由用户创建的符合VHDL87规定的标识符,扩展标识符VHDL93规定的标识符,4.2 VHDL语言基础知识,1)保留标识符,保留标识符是VHDL的关键字或保留字,如:,4.2 VHDL语言基础知识,2)短标识符,VHDL的短标识符是遵守以下规则的字符序列:,有效字符:英文字符(a-z,A-Z),数字(0-9)和下划线(_),必须以英文字母打头,下划线(_)的前后都必须有英文字母或数字,EDA工具综

32、合、仿真时,短标识符不区分大小写,4.2 VHDL语言基础知识,3)扩展标识符,扩展标识符有以下特征:,用反斜杠来定义,允许包含图形符号,允许包含空格符,2个反斜杠之间的字可以用数字打头,和保留字相同,扩展标识符中允许多个下划线相邻,扩展标识符区分大小写,扩展标识符的名字中如有1个反斜杠,则用相邻的两个反斜杠来代表它,4.2 VHDL语言基础知识,二)对象 VHDL有四类对象:常量(CONSTANT)是一个在仿真和综合过程中固定不变的值,可通过其标识符来引用。信号(SIGNAL)代表电路内部各元件之间的连接线,是实体间动态交换数据的手段。变量(VARIABLE)暂存数据的量,只在进程和子程序中

33、用。文件(FILES)是传输大量数据的客体,包含一些专门数据类型的数值。,4.2 VHDL语言基础知识,对象说明的一般格式是:=;是常量、信号、变量中的一个 是一个标识符或由逗号隔开的多个 标识符 是类型名或类型名加限制条件 为BUS或REGISTER,该项为任选项:=为对象赋初值,4.2 VHDL语言基础知识,说明,三)数据类型,数据类型根据产生的来源分为:1、标准数据类型 VHDL语言定义了10种标准的数据类型。1)字符(CHARACTER)字符是用单引号括起来的一个字母数字空格或一些特殊字符。字符区分大小写字母。2)字符串(STRING)字符串是用双引号括起来的一个字符序列。字符串区分大

34、小写字母。常用于程序的提示和结果的说明等。3)布尔量(BOOLEAN)布尔量是二值枚举量,用TURE和FALSE表示。用于关系运算和逻辑判断。,4.2 VHDL语言基础知识,4)位(BIT)位用来表示一个信号的取值。位只有两种取值0和1。例如:TYPE BIT IS(0,1);注意:位的值0和1表示信号的状态,而布尔量的取值0和1表示真 假,两者意义不同。5)位矢量(BIT_VECTOR)位矢量是用双引号括起来的一组位数据,每位只有0,1两种取值。在其前面可以加数值标记,例如:X(十六进制)B(二进制)O(八进制)等。位矢量常用于表示总线的状态。6)整数(INTEGER)整数的取值范围从-(-

35、1)到+(-1)。整数不能看作矢量,不能单独对某一位操作,只能用于算术运算。整数可用来抽象的表达总线状态,例如:多位计数器的输出。,4.2 VHDL语言基础知识,7)实数(REAL)实数的取值范围从-1.0E+28到+1.0E+38。主要用于硬件方案的研究和实验。8)自然数(NATUREAL)和正整数(POSITIVE)前者是零和零以上的整数;后者是大于零的整数。9)时间(TIME)时间的取值范围从-(-1)到+(-1)。书写格式含整数和时间单位两部分。常用于指定时间延时和标定仿真时刻。10)错误等级(SEVERITY LEVEL)错误等级分为:注意(NOTE)警告(WARING)出错(ERR

36、OR)失败(FAILURE)四级,用于提示系统错误等级。,4.2 VHDL语言基础知识,存放在IEEE库STD_LOGIC_1164程序包中的STD_LOGIC类型(对应于BIT类型)和STD_LOGIC_VECTOR类型(对应于BIT_VECTOR类型)也是两类很常用的数据类型,它们有九种取值,其含义如下:U:初始值 0:0 1:1 W:弱信号不定,未知 L:弱信号0 H:弱信号1-:不可能情况 X:不定,未知 Z 高阻 其中X方便了系统仿真,Z方便了双向总线的描述,因此对信号和总线的描述能力大大增强,应用十分广泛。,4.2 VHDL语言基础知识,2、用户自定义数据类型,VHDL语言允许用户

37、自己定义数据类型。TYPE 数据类型名,数据类型名 IS 数据类型定义;常用的用户自定义类型有:1)枚举(ENUMERATED)类型 枚举类型就是把类型中的所有元素一一列举。TYPE 数据类型名 IS(元素,元素,);TYPE boolean IS(FALSE,TRUE);,4.2 VHDL语言基础知识,格式,格式,例,2)数组(ARRAY)类型 数组类型是多个相同类型的数据集合。它可以是二维的和多维的。TYPE 数据类型 IS ARRAY(范围)OF 元素类型名;其中(范围)规定数组下标的类型和范围。TYPE kkk IS ARRAY(INTEGER 0 TO 9)OF STD_LOGIC;

38、本句话的含义是:数据类型kkk是一个具有10个元素的数组型数据类型,数组中的每一个元素的数据类型都是STD_LOGIC型。,4.2 VHDL语言基础知识,格式,例,3)记录(RECORD)类型 记录类型是多个不同数据类型的集合。TYPE 数据类型 IS RECORD 元素名:数据类型名;元素名:数据类型名;END RECORD;记录适用于描述总线仿真等。对于记录类型的数据对象进行单元素赋值时,可在记录类型对象名后加点.,然后再加赋值元素的元素名。,4.2 VHDL语言基础知识,格式,说明,3 数据类型转换 在VHDL程序中,不同类型的对象不能代入,因此要进行类型转换。类型转换的方法有下述两种:

39、1)类型标记法 用类型名称来实现关系密切的标量类型之间的转换。VARIABLE x:INTEGER;VARIABLE y:REAL;则 x:=INTEGER(y);y:=REAL(x).其中INTEGER(y)可将y从实数类型转换为整数类型;REAL(x)可将x从整数类型转换为实数类型。,4.2 VHDL语言基础知识,例,2)函数转换法 利用VHDL语言程序包中提供的转换函数进行数据类型的相互转换。转换函数的作用是将一种属于某种数据类型的数据对象转换成属于另一种数据类型的数据对象。STD_LOGIC_1164程序包定义的转换函数有:TO_STD LOGIC VECTOR():将BIT_VECT

40、OR类型转STD_LOGIC_VECTOR类型 TO_BIT VECTOR():将STD_LOGIC_VECTOR类型转换为 BIT_VECTOR类型 TO_STD LOGIC():将BIT类型转换为STD_LOGIC类型 TO_BIT():将STD_LOGIC类型转换为BIT类型 其中,括号内填写要进行转换的数据对象。这些函数在引用前必须打开库和相应的程序包。,4.2 VHDL语言基础知识,注意,4、运算操作符,VHDL的运算符,算术运算符,关系运算符,逻辑运算符,连接运算符,+ABS+-*/MODREM*,=/=,NOT ANDORNANDNOR XOR,4.2 VHDL语言基础知识,1)

41、算术运算符,算术运算符包括:,定义在一维数组上,元素类型必须为Bit或Boolean,4.2 VHDL语言基础知识,2)关系运算符,关系运算符包括:,,,注意,运算符两边必须为相同的类型,结果为Boolean类型,4.2 VHDL语言基础知识,3)逻辑运算符(Logical),逻辑运算符包括:,它们对“STDLOGIC”和“BIT”等的逻辑型数据,“STDLOGICVECTOR”逻辑型数组及布尔型数组进行逻辑运算,4.2 VHDL语言基础知识,)连接运算符,其它运算符包括:,连接运算符用于一维数组,右边的内容接在左边内容之后形成一个新的元素,或将两个元素连接成数组。,“VH”“DL”“VHDL

42、”01“01”,4.2 VHDL语言基础知识,例,四种运算操作符的优先级按从高到低的顺序排列为:NOT、ABS、*、REM、MOD、/、*、-(负)、+(正)、-(减)、+(加)、=、=、/=、=、XOR、NOR、NAND、OR、AND。在编写VHDL程序时,必须保证操作数的数据类型和运算符所要求的数据类型一致。,4.2 VHDL语言基础知识,注意,四)属性(ATTRIBUTE)VHDL中可具有属性的项目有:类型、子类型;过程、函数;信号、变量、常量;实体、结构体、配置、程序包;元件等。属性是所述各类项目的特征。属性的值与对象的值不同,在任一给定的时刻,一个对象只能具有一个值,但可以有多个属性

43、。属性功能有许多重要应用,如:检出时钟边沿,完成定时检查,获取未约束的数据类型范围等。VHDL的属性可分为:数值类属性函数函数类属性函数信号类属性函数数据类型类属性函数数据范围类属性函数。对象属性。,4.2 VHDL语言基础知识,格式,4.2 VHDL语言基础知识,(1)信号的属性函数 信号的属性函数用来得到有关信号的行为和功能信息。其格式为:signalEVENT信号的值发生改变(不同于前一时刻的 值),则返回真;signalACTIVE信号的值发生变化(可以与前一时刻的 值相同),则返回真;signalLAST_EVENT返回一个时间值,即从信号最 近一次改变到现在经过的时间;signal

44、LAST_VALUE信号最后一次变化前的值,并 将该历史值返回:signalLAST_ACTIVE返回一个时间值,即从信号最 近一次变化到现在经过的时间。,4.2 VHDL语言基础知识,(2)信号类属性函数 信号类属性函数的作用对象是信号,其返回值也是信号。signalDELAYED(time)该属性使信号signal延时time所规定的值。如 aDELAYED(5ns)即信号延时5ns。signalSTABLE(time)若信号signal在规定的time时间内无变化,则返回一个布尔真值。如:若a,b均为STD_LOGIC类型,b=aSTABLE(20ns)则a,b波形如图4-2所示。,4.

45、2 VHDL语言基础知识,上图表示,若a信号在20ns的时间内不变化,则b信号获取一个布尔真值;否则获取一个布尔假。(3)signalQUIET(time)若信号signal在time规定的时间内无变化,则返回一个布尔真值。在此函数中,signal信号用于一个事件处理的触发,如一个中断处理事件。signalQUIET由电平触发。signalSTABLE与signalQUIET不同之处在于:前者用于测信号signal自身的变化,后者用于信号处理其他事务。,4.2 VHDL语言基础知识,(4)signalTRANSACTION 当信号signal有变化,有事务处理时,产生一个数值型变量的变化。信号

46、signal每变化一次,每处理一个事务,其值都要变化一次。在程序包STD_IEEE_1164中,预定义了下面两个函数用来检测时钟沿:FUNCTION rising_edge(SIGNAL s:STD_ULOGIC)RETURN BOOLEAN;FUNCTION falling_edge(SIGNAL s:STD_ULOGIC)RETURN BOOLEAN。利用这两个函数和信号类届性可以实现时钟信号的边沿检测。可用逻辑表达式(clkEVENT)AND(clk=1)或NOT(clkSTABLE)AND(clk=1)来判断时钟的上升沿是否到来,也可用rising_edge(clk)来检测时钟信号的上

47、升沿;同理,可用逻箱表达式(clkEVENT)AND(clk=0)或NOT(clkSTABLE)AND(clk=0)或falling_edge(clk)来检测时钟信号的下降沿。,4.3 VHDL的基本语句,一、VHDL的顺序语句二、VHDL的并行语句,4.3 VHDL的基本语句,一、VHDL的顺序语句 顺序语句用来定义进程、过程或函数的行为。顺序语句完全按照程序中出现的顺序执行各条语句,在结构层次中前面语句的执行结果可能直接影响后面语句的结果,而并行语句中仅仅执行被激活的语句,而不是所有的语句,4.3 VHDL的基本语句,顺序语句包括:1、IF语句 2、CASE语句 3、LOOP语句 4、NE

48、XT语句 5、EXIT语句 6、RETURN语句 7、NULL语句,4.3 VHDL的基本语句,1、IF语句,IF语句是VHDL语言中最常见最基础的语句。IF语句有四种形式。1)IF 条件 THEN 顺序语句;END IF;,格式,注意,这是一种不完整的IF语句,通常用于产生时序电路。例4-8,4.3 VHDL的基本语句,2)IF 条件 THEN 顺序语句1;ELSE 顺序语句2;END IF;,格式,注意,这是一种完整的IF语句,通常用于产生组合电路。例4-9,4.3 VHDL的基本语句,3)IF 条件 THEN IF 条件 THEN 顺序语句;END IF;END IF;,格式,注意,这是

49、一种多重IF语句嵌套式条件句,可以产生较为丰富的条件描述,既可以产生组合电路,又可以产生时序电路,或者产生两者的混合。在使用该语句时应注意,END IF结束句的个数应该与嵌入条件句数量一致。,4.3 VHDL的基本语句,4)IF 条件1 THEN 顺序语句1;ELSIF 条件2 THEN 顺序语句2;ELSIF 条件n THEN 顺序语句n;ELSE 顺序语句n+1;END IF;,格式,注意,这类语句可以实现不同类型电路的描述。其任一分支顺序语句的执行条件是以上各分支条件相与,即语句中顺序语句的执行条件具有向上相与的功能。例4-10,4.3 VHDL的基本语句,4.3 VHDL的基本语句,2

50、、CASE语句,CASE 条件表达式 IS WHEN 选择值1=顺序语句1;WHEN 选择值2=顺序语句2;WHEN OTHRES=顺序语句n;END CASE;,格式,注意,条件句中的选择值必须在表达式的取值范围内;CASE语句中每一条件句的选择只能出现一次,相同选择值的条件语句不能重复出现;所有表达式的值都必须穷举,不能穷举的值用OTHERS表示。,4.3 VHDL的基本语句,3、LOOP语句 VHDL语言中的LOOP语句有两种形式。,1)FOR循环变量形成的LOOP语句 循环标号:FOR 循环变量 IN 循环范围 LOOP 顺序语句;END LOOP循环标号;,格式,说明,循环标号是一个

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号