(二)VHDL语言程序的基本结构课件.ppt

上传人(卖家):晟晟文业 文档编号:4375195 上传时间:2022-12-03 格式:PPT 页数:86 大小:271KB
下载 相关 举报
(二)VHDL语言程序的基本结构课件.ppt_第1页
第1页 / 共86页
(二)VHDL语言程序的基本结构课件.ppt_第2页
第2页 / 共86页
(二)VHDL语言程序的基本结构课件.ppt_第3页
第3页 / 共86页
(二)VHDL语言程序的基本结构课件.ppt_第4页
第4页 / 共86页
(二)VHDL语言程序的基本结构课件.ppt_第5页
第5页 / 共86页
点击查看更多>>
资源描述

1、VHDL硬件描述语言 第二章第二章VHDL语言程序的基本结构语言程序的基本结构 第三章第三章VHDL语言的数据类型及运算操作符语言的数据类型及运算操作符 第四章第四章VHDL语言构造体的描述方式语言构造体的描述方式第五章第五章VHDL语言的主要描述语句语言的主要描述语句 第七章基本逻辑电路设计第七章基本逻辑电路设计 VHDL语言描述数字系统的基本方法语言描述数字系统的基本方法 在电原理图中,如果要描述一个“与门”,那么在图上画出一个“与门”的逻辑符号就行了,如图1所示。图1 “与门”的逻辑符号描述&abc 人们看到了这个逻辑符号(如图1所示),就会联想到两件事:(1)确定该逻辑有两个输入信号a

2、和b,有一个输出信号c,而且都是位信号(每个信号占二进制位1位)。(2)根据逻辑符号形状判断,它是一个“与门”,在电路中实现“与”操作,即c=ab。知道了这两点,该电路的功能就一目了然了。由此我们可推论,要完整地描述一个系统或电路,就必须对输入和输出输入和输出以及电路的功能电路的功能这两部分作详细说明,从大规模的CPU到最简单的逻辑门都适用这一法则。从这个认识出发,用VHDL语言描述电路,就是要用相应的语句将电路的输入和输出及电路的功能描述清楚,那么其结果是完全和电原理图描述等效的。在用VHDL语言描述一个“与门”时,其语言描述与电原理图描述的对应关系如图2所示。图2 VHDL语言描述与电原理

3、图描述的对应关系&abcabc构造体:描述功能cab实体:描述输入输出第二章:第二章:VHDL语言程序的基本结构语言程序的基本结构 2.1 VHDL语言的基本设计单元构成语言的基本设计单元构成 VHDL语言程序的完整设计单元应由5部分构成:库库(Library)说明、包集合包集合(Package)说明、实体实体(Entity)描述、构造体构造体(Architecture)描述和配置配置(Configuration)描述。1最基本的设计单元构成最基本的设计单元构成 一个最基本的设计单元由实体实体和构造体构造体两部分组成,如例2-1所示。【例【例2-1】ENTITY mux2 ISPROT(d0,

4、d1,sel:IN BIT;q:OUT BIT);END mux2;ARCHITECTURE rtl OF mux2 ISBEGIN;PROCESS(d0,d1,sel)VARIABLE tmp1,tmp2,tmp3:BIT;BEGINtmp1:=d0 AND sel;tmp2:=d1 AND(NOT sel);tmp3:=tmp1 OR tmp2;q=tmp3;END PROCESS;END rtl;例2-1是一个最基本的设计单元,只有实体和构造体就行了。如前所述,它描述的是一个二选一选择器电路。利用EDA工具可以对它进行编译、综合生成TTL的器件。该设计单元仅由实体和构造体这两个描述部分组

5、成。这是有条件的:有条件的:第一,在实体和构造体中所使用的数据类型一定是在STD库中定义的,如BIT类型。STD库已自动挂接在VHDL语言的编译器中,因而无需在设计单元描述中进行独立的库声明。第二,设计单元的实体只与一个构造体对应。如前所述,一个实体可以对应多个构造体。在编译时一个实体只能选择某一个构造体进行设计单元编译,这种选择应由配置语句描述。2一个完整的设计单元构成一个完整的设计单元构成一个完整的设计单元构成的实例如例2-2所示。【例【例2-2】LIBRARY IEEE;-库说明库说明USE IEEE.STD_LOGIC_1164.ALL;-包集合说明包集合说明ENTITY mux2 I

6、S-实体说明实体说明PORT(d0,d1,sel:IN STD_LOGIC;q:OUT STD_LOGIC);END mux2;ARCHITECTURE rtl1 OF mux2 IS-构造体说明构造体说明 BEGINPROCESS(d0,d1,sel)VARIABLE tmp1,tmp2,tmp3:STD_LOGIC;BEGINtmp1:=d0 AND sel;tmp2:=d1 AND(NOT sel);tmp3:=tmp1 OR tmp2;END PROCESS;END rtl1;ARCHITECTURE rtl2 OF mux2 IS-构造体说明构造体说明 END rtl2;CONFIG

7、URATION rtl_mux2 OF mux2 IS-配置说明配置说明FOR rtl1END FOR;END rtl_mux2;例2-2中的第一行是对设计单元所使用的库库进行的描述和说明,这是因为该设计单元使用了IEEE库中定义的包集合。第二行说明使用了IEEE库中定义的 1164 包集合包集合。这是因为STD_LOGIC数据类型等在该1164包集合中定义。例2-2中包含了一个实体实体和两个构造体构造体,配置配置说明编译时应选中rtl1 构造体。当然,如果只有一个构造体,配置说明也就可以省略了。2.1.1实体描述实体描述 实体在电路描述中主要是说明该电路的输入和输输入和输出关系出关系。此外,

8、实体还定义电路名称电路名称及构造体中所用构造体中所用参数参数等。实体描述的一般书写格式如下:ENTITY 实体名实体名 IS类属参数说明;类属参数说明;端口说明;端口说明;END实体名;实体名;实体描述从“ENTITY实体名实体名IS”开始开始,至“END实体名实体名”结束结束。例如在例2-2中,实体描述可从“ENTITY mux2 IS”开始,至“END mux2”结束。这里的大写字母大写字母表示实体描述的框架,所用的词都是VHDL语言的保留用词,用户在编程中一般不能将其用作它用。每个实体都应这样书写,它们是不可缺少和省略的部分。小写字母小写字母是设计者添写的部分,随设计单元的不同而不同。实

9、际上,对VHDL语言而言,大写和小写字母都一视同仁大写和小写字母都一视同仁,不加区分。这样规定仅仅是为了增加程序的可读性而已。【例2-3】2输入或非门的实体说明程序:ENTITY nor2 ISPORT(a,b:IN bit;-说明两个输入端口a、b z :OUT bit);-说明一个输出端口zEND nor2;【例2-4】3位计数器的实体说明程序:ENTITY count3 ISGENERIC(m:TIME:=5ns);PORT(clock,enable:IN STD_LOGIC;qout:OUT INTEGER RANGE 0 TO 7);END count3;图2-1 二选一选择器的电原

10、理图&1d0d1sel 1q【例2-5】图2-1的VHDL语言描述:ENTITY mux2 ISGENERIC(m:TIME:=1ns);PORT(d0,d1,sel:IN BIT;q:OUT BIT);END mux2;ARCHITECTURE connect OF mux2 ISSIGNAL tmp:BIT;BEGIN;PROCESS(d0,d1,sel);VARIABLE tmp1,tmp2,tmp3:BIT;BEGIN;tmp1=d0 AND sel;tmp2=d1 AND(NOT sel);tmp3=tmp1 OR tmp2;tmp=tmp3;q=tmp AFTER m;END PR

11、OCESS;END connect;1.类属参数说明类属参数说明 类属参数说明必须放在端口说明之前端口说明之前,用于指定指定参数参数,如例2-5中的GENERIC(m:TIME=1 ns)。该语句指定了构造体内m的值为1 ns。这样,语句q=tmp AFTER m;表示tmp经1ns延迟才送到q。在这个例子中,GENERIC利用类属参数为q建立一个延迟值。类属参数说明语句的书写格式如下:GENERIC(常数名常数名:数据类型数据类型:=设定值设定值;常数名常数名:数据类型数据类型:=设定值设定值);2.端口说明端口说明 端口说明是对基本设计实体基本设计实体(单元单元)与外部接口的描述与外部接口

12、的描述,也可以说是对外部引脚信号的名称,数据类型和输入、输外部引脚信号的名称,数据类型和输入、输出方向的描述出方向的描述。其一般书写格式书写格式如下:PORT(端口名端口名,端口名,端口名:方向方向 数据类型名;数据类型名;端口名端口名,端口名,端口名:方向方向 数据类型名数据类型名);1)端口名端口名。端口名是赋予每个外部引脚的名称,通常用一个或几个英文字母,或者用英文字母加数字命名之,例如图2-1中的外部引脚d0,d1,sel,q等。2)端口方向端口方向。端口方向用来定义外部引脚的信号方向是输入还是输出输入还是输出。例如,图2-1中的d0,d1,sel为输入引脚,故用方向说明符“IN”说明

13、之,而q则为输出引脚,用方向说明符“OUT”说明之。凡是用“IN”进行方向说明的端口,其信号自端口输入到构造体,而构造体内部的信号不能从该端口输出。相反,凡是用“OUT”进行方向说明的端口,其信号将从构造体内经端口输出,而不能通过该端口向构造体输入信号。另外,“INOUT”用以说明该端口是双向双向的,可以输入也可以输出;“BUFFER”用以说明该端口可可以输出信号,且在构造体内部也可以利用该输出信号以输出信号,且在构造体内部也可以利用该输出信号。“LINKAGE”用以说明该端口无指定方向无指定方向,可以与任与任何方向的信号相连接何方向的信号相连接。表示方向的说明符及其含义如表2-1所示。表表2

14、-1 端口方向说明端口方向说明 方向定义含义IN 输入端口输入端口输入OUT 输出端口输出端口输出(构造体内部不能再使用)INOUT 双向端口双向端口双向BUFFER 缓冲端口缓冲端口输出(构造体内部可再使用)LINKAGE 可连接端口可连接端口不指定方向,无论那个方向都可连接 表2-1中“OUT”和“BUFFER”都可以定义输出端口,但是它们之间是有区别区别的,如图2-2 所示。图2-2 OUT和和BUFFER的区别的区别(a)OUT;(b)BUFFER dqclkOUT(a)&dqclkBUFFER(b)3)数据类型数据类型。在VHDL语言中有10种种标准数据类型,但是在逻辑电路设计中常用

15、到两种两种:BIT和和BIT_VECTOR。当端口被说明为BIT数据类型时,该端口的信号取值只可能是“1”或“0”。注意,这里的“1”和“0”是指逻辑值。所以,BIT数据类型是位逻辑数据类型位逻辑数据类型,其取值只能是两个逻辑值(“1”和“0”)中的一个。当端口被说明为BIT_VECTOR数据类型时,该端口的取值可能是一组二进制位的值一组二进制位的值。例如,某一数据总线输出端口具有8位的总线宽度,那么这样的总线端口的数据类型可以被说明成BIT_VECTOR。总线端口上的值由8位二进制位的值所确定。较完整的端口说明如例26所示。【例【例2-6】PORT(d0,d1,sel:IN BIT;q:OU

16、T BIT;bus:OUT BIT_VECTOR(7 DOWNTO 0);该例中,d0,d1,sel,q 都是BIT数据类型,而bus是BIT_VECTOR类型,(7 DOWNTO 0)表示该 bus 端口是一个8位端口,由B7B0 8位构成,位矢量长度为 8 位。在某些VHDL语言的程序中,数据类型的说明符号有所不数据类型的说明符号有所不同同。仍以例2-6为例进行说明。【例【例2-7】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mu ISPORT(d0,d1,sel:IN STD_LOGIC;q:OUT STD_LOGIC;bus:OUT

17、STD_LOGIC_VECTOR(7 DOWNTO 0);END mu;该例中BIT类型用STD_LOGIC替代,而bus则用STD_LOGIC_VECTOR(7 DOWNTO 0)说明。这样做在语法上都是语法上都是对的对的,所不同的是BIT、BIT_VECTOR与STD_LOGIC、STD_LOGIC_VECTOR尽管都同样描述位和位矢量同样描述位和位矢量,但是它们的数数据类型是不一样的据类型是不一样的,前者只有两种状态两种状态“1”和和“0”;而后者却有9种状态种状态(这一点在后面详述)。BIT和和BIT_VECTOR在VHDL语言的标准库(STD库)中定义,使用该类型数据可以不作任何说明

18、不作任何说明。STD_LOGIC和STD_LOGIC_VECTOR在IEEE库的 1164 包集合中定义。在该包集合中专门对STD_LOGIC和和STD_LOGIC_VECTOR数据类型的定义作了具体说明,其作用像C语言中的include文件一样。正如例2-7 所示那样,如果在实体和构造体中要使用这种类型的数据,就必须在实体描述前加两条语句:库说明语句和使用包集合的必须在实体描述前加两条语句:库说明语句和使用包集合的说明语句说明语句。这样可以使VHDL语言的编译器在对实体编译时从指定库的包集合中找到数据类型的定义。2.1.2 构造体描述构造体描述 构造体具体地指明了该对应实体的行为、元件及内部

19、的连指明了该对应实体的行为、元件及内部的连接关系接关系,也就是说它定义了设计单元具体的功能设计单元具体的功能。构造体功能可以用3种描述方式种描述方式,即行为描述行为描述(数学模型描述数学模型描述)、寄存器传寄存器传输描述输描述(数据流描述数据流描述)和结构描述结构描述(逻辑元件连接描述逻辑元件连接描述)。不同的描述方式,只体现在描述语句上,而其构造体的结构是完全一样的。由于构造体是对实体功能的具体描述,因此它一定要跟在它一定要跟在实体的后面实体的后面。通常,编译实体之后才能对构造体进行编译。如果实体需要重新编译,那么相应构造体也应重新进行编译。一个构造体的具体结构描述如下:ARCHITECTU

20、RE 构造体名构造体名 OF 实体名实体名 IS 定义语句内部信号,常数,数据类型,函数等的定义;定义语句内部信号,常数,数据类型,函数等的定义;BEGIN 并行处理语句;并行处理语句;END构造体名;构造体名;一个构造体从从“ARCHITECTURE 构造体名构造体名 OF 实体名实体名 IS”开始,至开始,至“END 构造体名构造体名”结束结束。下面对构造体的有关内容和书写方法作一说明。1.构造体名称的命名构造体名称的命名 构造体的名称是对本构造体的命名,它是该构造体的惟一名称。OF后面紧跟的实体名表明了该构造体所对应的是哪一个实体。用IS来结束构造体的命名。构造体的名称可以由设计者自由命

21、名自由命名,但最好与其性质有关与其性质有关。在 大 多 数 的 文 献 和 资 料 中,通 常 把 构 造 体 的 名 称 命 名 为通 常 把 构 造 体 的 名 称 命 名 为 behavioral(行为行为)、dataflow(数据流数据流)、rtl(寄存器传输寄存器传输)或者或者 structural(结构结构)。如前所述,这3个名称实际上是3种构造体描述方式的名称。当设计者采用某一种描述方式来描述构造体时,该构造体的结构名称就命名为某名称。这样,使得阅读VHDL语言程序的人能直接了解直接了解设计者所采用的描述方式描述方式。例如,使用结构描述方式来描述二选一电路,那么二选一电路的构造体

22、就可以这样命名:ARCHITECTURE structural OF mux IS 2.定义语句定义语句 定义语句位于ARCHITECTURE和BEGIN之间,用于对构造用于对构造体内部所使用的信号、常数、数据类型和函数等进行定义体内部所使用的信号、常数、数据类型和函数等进行定义,例如:ARCHITECTURE behav OF mux ISSIGNAL nes1:BIT;BEGIN END behav;信号定义和端口说明的语句一样,应有信号名和数据类型信号名和数据类型的说明。因它是内部连接用的信号内部连接用的信号,故没有也不需有方向的说明不需有方向的说明。3.并行处理语句并行处理语句 并行处

23、理语句处于语句 BEGIN 和 END 之间,这些语句具体地描述了构造体的行为及其连接关系描述了构造体的行为及其连接关系。例如,二选一的数据流方式描述可以如例2-8 所示。【例2-8】ENTITY mux2 IS PORT(d0,d1:IN BIT;sel:IN BIT;q:OUT BIT);END mux2;ARCHITECTURE dataflow OF mux2 IS BEGIN q=(d0 AND sel)OR(NOT sel AND d1);END dataflow;一个异或门实体对应的一个异或门实体对应的3种描述方式的构造体种描述方式的构造体【例例2-8】异或门构造体的数据流方式描

24、述:异或门构造体的数据流方式描述:ARCHITECTURE data_flow OF xor_gate IS BEGIN c=(a and(not b)or(not a)and b);END data_flow;【例例2-9】异或门构造体的行为描述异或门构造体的行为描述:ARCHITECTURE behavioral OF xor_gate IS PROCESS(a,b)BEGIN IF(a=0 AND b1)THEN c=1;ELSIF(a=1 AND b0)THEN c=1;ELSE c=0;END IF;END PROCESS;END behavioral;【例例2-10】异或门构造体的

25、结构描述异或门构造体的结构描述:ARCHITECTURE structure OF xor_gate IS COMPONENT not_gate PORT(a:IN BIT;b:OUT BIT);END COMPONENT;COMPONENT and_gate PORT(a,b:IN BIT;c:OUT BIT);END COMPONENT;COMPONENT or_gate PORT(a,b:IN BIT;c:OUT BIT);END COMPONENT;SIGNAL na,nb:BIT;SIGNAL c1,c2:BIT;BEGIN u1:not_gate PORT MAP(a,na);u2

26、:not_gate PORT MAP(b,nb);u3:and_gate PORT MAP(a,nb,c1);u4:and_gate PORT MAP(b,na,c2);u5:or_gate PORT MAP(c1,c2,c);END structure;2.2.2 VHDL语言构造体的子结构描述语言构造体的子结构描述 在规模较大的电路设计中,全部电路都用惟一的一个模块来描述是非常不方便的。为此,电路设计者总希望将整个电路分成若干个相对比较独立的模块来进行电路的描述。这样,一个构造体可以用几个子结构,即相对比较独立的几个模块来构成。VHDL语言可以有以下 3 种形式种形式的子结构描述语句的子结

27、构描述语句:BLOCK语句结构;语句结构;PROCESS语句结构;语句结构;SUBPROGRAMS结构。结构。1BLOCK语句结构描述语句结构描述 1)BLOCK语句的结构语句的结构 采用BLOCK语句描述局部电路的书写格式如下所示:块结构名块结构名:BLOCK BEGIN END BLOCK 块结构名;块结构名;如果采用BLOCK语句来描述二选一电路,那么用VHDL语言就可以书写为例2-12形式。【例2-12】用VHDL语言描述二选一电路ENTITY mux ISPORT(d0,d1,sel:IN BIT;q:OUT BIT);END mux;ARCHITECTURE connect OF

28、mux IS SIGNAL tmp1,tmp2,tmp3:BIT;BEGINcale:BLOCKBEGINtmp1=d0 AND sel;tmp2=d1 AND(NOT sel);tmp3=tmp1 OR tmp2;q=tmp3;END BLOCK cale;END connect;2)BLOCK块和子原理图的关系块和子原理图的关系 人们在用计算机电路辅助设计工具输入电原理图时,往往将一个大规模的电原理图分割成多张子原理大规模的电原理图分割成多张子原理图进行输入和存档图进行输入和存档。同样在VHDL语句中也不例外,电路的构造体电路的构造体对应整个电原理图,而构造体可以对应整个电原理图,而构造体

29、可以由多由多个个BLOCK块构成,每一个块构成,每一个BLOCK块块对应一张子原理对应一张子原理图。图。这样电原理图的分割关系和VHDL语言程序中用BLOCK分割构造体的关系是一一对应的。一个具体实例如图2-3所示。图2-3 BLOCK块和子原理图的关系BLOCK1BLOCK2BLOCK4BLOCK3子图1子图2子图3子图4ENTITY separateBLOCK 1:BLOCKBLOCK 2:BLOCKBLOCK 3:BLOCKBLOCK 4:BLOCKARCHITECTURE3)BLOCK中语句的并发性中语句的并发性 在对程序进行仿真时,BLOCK语句中所描述的各个语句是可以并行执行并行执

30、行的,它和书写顺序无关。在VHDL语言中将这样可以并行执行的语句称为并发语句并发语句(Concurrent Statement)。当然,在构造体内直接书写的语构造体内直接书写的语句也是并发的句也是并发的。在VHDL语言中也存在只能顺序执行顺序执行的语句,这一点将在后面介绍。4)卫式卫式BLOCK(Guarded BLOCK)在图2-3 中使用BLOCK语句,仅仅是将构造体划分成几个独立的程序模块,这和执行控制没有直接关系。如前所述,在系统仿真时BLOCK语句将被无条件地执行。但是,在实际电路设计中,往往会碰到这样的情况:当某一种条件得到满足时,BLOCK语句才可以被执行;而条件不满足时,该BL

31、OCK语句将不能被执行。这就是卫式卫式BLOCK,它可以实现实现BLOCK的执行控制的执行控制。例如,现在用BLOCK语句来描述一个锁存器的结构。该锁存器是一个D触发器,它具有一个数据输入端d,时钟输入端clk,输出端q和反相输出端qb。众所周知,只有clk有效时(clk=1),输出端q和qb才会随d端输入数据的变化而变化(电平触发方式)。此时,用卫式BLOCK语句描述该锁存器结构的VHDL语言程序如例2-13所示。【例【例2-13】ENTITY latch IS PORT(d,clk:IN BIT;q,qb:OUT BIT);END latch;ARCHITECTURE latch_guar

32、d OF latch ISBEGIN G1:BLOCK(clk=1)BEGIN q=GUARDED d AFTER 5 ns;qb=GUARDED NOT(d)AFTER 7 ns;END BLOCK G1;END latch_guard;如上述程序所示,卫式BLOCK语句的格式为:BLOCK 卫式布尔表达式卫式布尔表达式当卫式布尔表达式为真卫式布尔表达式为真时(例中clk=1为真时),该BLOCK语句被启动执行启动执行;而当卫式表达式为假卫式表达式为假时,该BLOCK语句将不被执行不被执行。在BLOCK块中的两个信号传送语句都写有前卫前卫关键词关键词GUARDED,这表明只有卫式布尔表达式为

33、真时,这两个语句才被执行。现在根据程序,描述一下锁存器的工作过程。当端口clk的值为“1”时,卫式布尔表达式为真。d端的输入值经5 ns延迟以后从q端输出,并且对d端的值取反,经7 ns后从qb端输出。当端口clk的值为“0”时,d端到q、qb端的信号传递通道将被切断,q端和qb端的输出保持原状,不随d端值的变化而改变。2进程进程(PROCESS)语句结构描述语句结构描述 1)PROCESS语句的结构语句的结构 采用PROCESS语句描述电路结构的书写格式如下:进程名进程名:PROCESS(敏感信号敏感信号1,敏感信号,敏感信号2,)BEGIN END PROCESS;进程名可以有,也可省略。

34、PROCESS语句从PROCESS开始至END PROCESS结束。执行PROCESS语句时,通常带有若干个敏感信号量。这些信号量将在PROCESS结构的语句中被使用。用PROCESS语句结构描述的程序如例2-14所示。ENTITY mux ISPORT(d0,d1,sel:IN BIT;q:OUT BIT);END mux;ARCHITECTURE connect OF mux ISBEGINcale:PROCESS(d0,d1,sel)VARIABLE tmp1,tmp2,tmp3:BIT;BEGINtmp1:=d0 AND sel;tmp2:=d1 AND(NOT sel);tmp3:=

35、tmp1 OR tmp2;qb)THEN tmp:=a;ELSE tmp:=b;END IF;RETURN tmp;END max;END bpac;3)过程语句和函数语句的使用过程语句和函数语句的使用(1)过程语句使用。过程语句使用。例2-15 定义的过程语句在进程中可以用以下形式书写:PROCESS(.)BEGIN;vector_to_int(z,x_flag,q);END PROCESS;过程用于描述电路设计中经常经常出现的可以共享共享的某一功能电路。它可以在构造体、构造体、BLOCK、PROCESS和子程序和子程序中使用。(2)函数语句的使用。函数语句的使用。函数语句与过程语句类同,它

36、也可以在构造构造体、体、BLOCK、PROCESS和子程序和子程序中使用,如下例为函数在构造体中调用的格式如下:用FUNCTION语句描述最大值检出的程序:LIBRARY IEEE.NEWLIB;USE IEEE.STD_LOGIC_1164.ALL;USE NEWLIB.bpac.ALL;ENTITY peakdetect IS PORT(data:IN STD_LOGIC_VECTOR(5 DOWNTO 0);clk,set:IN STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);END peakdetect ARCHITECTURE r

37、tl OF peakdetect IS SIGNAL peak:STD_LOGIC_VECTOR(5 DOWNTO 0);BEGIN dataout=peak;PROCESS(clk)BEGIN IF(clkEVENT AND clk=1)THEN IF(SET=1)THEN peak=data;ELSE peak=MAX(data,peak);END IF;END IF;END PROCESS;END rtl;在上述程序中,peak=MAX(data,peak)就是调用FUNCTION的语句。在上例2-17包集合中的参数 a 和和 b,在这里用 data 和和 peak 所代替。函数的返回值

38、 tmp 被赋予被赋予 peak。在MAX(a,b)函数的定义中,返回值 tmp 可以赋予信号或者变量信号或者变量,在本例中被赋予信号peak。无论是过程还是函数,在VHDL语言中常常用于描述多次使用的公共单元电路,以使设计者能方便地共享。为了能重复使用这些过程和函数,这些程序通常组织在包集合、库中。它们与包集合和库的关系是:多个过程和函数汇集在一起构成包集合(多个过程和函数汇集在一起构成包集合(Package),),而几个包集合汇集在一起就形成一个库(而几个包集合汇集在一起就形成一个库(Library)。)。有关包集合和库后面介绍,注意不同公司发布的包集合和库的登记方法是各不相同的。子程序重

39、载子程序重载 子程序重载(Subprograms Overload)的语言特性使得能够声能够声明多个名字相同但参数表不同的函数和过程明多个名字相同但参数表不同的函数和过程。在具有不同数据类型操作数构成的同名函数中,以运算符重载运算符重载式函数最为常见式函数最为常见,它为不同数据类型间的运算带来了极大的方便。例:子程序重载举例。运算符重载式函数FUNCTION “+”(L:STD_LOGIC_VECTOR;R:INTEGER)RETURN STD_LOGIC_VECTOR;FUNCTION “+”(L:INTEGER;R:STD_LOGIC_VECTOR)RETURN STD_LOGIC_VEC

40、TOR;FUNCTION“+”(L:STD_LOGIC_VECTOR;R:STD_LOGIC)RETURN STD_LOGIC_VECTOR;。q=q+1;。在程序中,首先对重载操作符进行了声明,使用双引号“”将需要声明的操作符括起来。这样,在执行q=q+1;时,如果q 的类型为STD_LOGIC_VECTOR,1为整数,程序就自动调用第一个函数。过程重载PROCEDURE swap(a1,a2:IN real;q1:OUT INTEGER);PROCEDURE swap(a1,a2:IN INTEGER;q1:OUT BIT);swap(1.5,2.1,out1);swap(4,6,out2

41、);程序中声明了两个过程名、参数数目和模式相同,而各参数的数据两个过程名、参数数目和模式相同,而各参数的数据类型不同的过程类型不同的过程。程序执行时可以自动根据参量的数据类型来调用相应的过程,例如语句1:swap(1.5,2.1,out1);将调用第一个过程,而语句2:swap(4,6,out2);将调用另外一个过程。2.3 库、包集合及配置库、包集合及配置2.3.1 库库 库(Library)是经编译后的数据的集合经编译后的数据的集合,它存放包集合定义、包集合定义、实体定义、构造体定义和配置定义。实体定义、构造体定义和配置定义。库的功能类似于UNIX和MS-DOS操作系统中的目录目录,库中存

42、放设计的数据。在VHDL语言中,库的说明总是放在设计单设计单元的最前面元的最前面:LIBRARY 库名;库名;这样在设计单元内的语句就可使用库中的数据。由此可见,库的好处库的好处就在于使设计者可以共享已经编译过的设计结果。共享已经编译过的设计结果。在VHDL语言中可以存在多个不同的库,但是库和库之间是独立库和库之间是独立的,不能互相嵌套。的,不能互相嵌套。1.库的种类库的种类 当前在VHDL语言中存在的库大致可以归纳为5种种:IEEE库、库、STD库、库、ASIC矢量库、矢量库、WORK库和用户定义的库和用户定义的库库。1)IEEE库库。在IEEE库中有一个“STD_LOGIC_1164”的包

43、集合的包集合,它是IEEE正式认可的标准包集合。现在有些公司,如 S Y N O P S Y S 公 司 也 提 供 一 些 包 集 合“STD_LOGIC_ARITH”、“STD_LOGIC_UNSIGNED”,尽管它们没有得到IEEE的承认,但是仍汇集在IEEE库中。2)STD库。库。STD库是VHDL的标准库,在库中存放有称为“STANDARD”的包集合的包集合。由于它是VHDL的标准配置的标准配置,因此设计者如要调用“STANDARD”中的数据,可以不按标准格式说明。STD库中还包含有称作“TEXTIO”的包集合。的包集合。在使用“TEXTIO”包集合中的数据时,应先说明库和包集合名,

44、然后才可使用该包集合中的数据,例如,LIBRARY STD;USE STD.TEXTIO.ALL;该包集合在测试时使用。3)面向面向ASIC的库。的库。在VHDL中,为了进行门级仿真门级仿真,各公司可提供面向ASIC的逻辑门库。在该库中存放着与逻辑与逻辑门一一对应的实体门一一对应的实体。为了使用面向ASIC的库,对库进行说明是必要的。4)WORK库。库。WORK库是现行作业库现行作业库。设计者所描述的VHDL语句不需要不需要任何说明,都将存放在WORK库中。在使用该库时无需无需进行任何说明。5)用户定义库。用户定义库。用户为自身设计需要所开发的共用包共用包集合和实体等集合和实体等,也可以汇集在

45、一起定义成一个库汇集在一起定义成一个库,这就是用户定义库或称用户库。在使用时同样要首先说明库名。2.库的使用库的使用1)库的说明。库的说明。前面提到的5类库除除WORK库和库和STD库之外,其库之外,其他他3类库在使用前都需要先作说明类库在使用前都需要先作说明,第一个语句是“LIBRARY 库名;库名;”,表明使用什么库。另外还要说明设计者要使用的是库中哪一个包集合以及包集合中的项目名(如过程名、函数名等)。这样第二个语句的格式可以是:USE LIBRARY_name.package_name.ITEM.name;所以,一般在使用库时首先要用两条语句对库进行说明,例如:LIBRARY IEEE

46、;USE IEEE.STD_LOGIC_1164.ALL;2)库说明作用范围。库说明作用范围。库说明语句的作用范围从一个实体说明作用范围从一个实体说明开始到它所属的构造体、配置为止。开始到它所属的构造体、配置为止。当一个源程序中出现两个以上的实体时,两条作为使用库的说明语句应在每个实体说明在每个实体说明语句前重复书写语句前重复书写,请参看例2-18。【例2-18】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY and1 IS END and1;ARCHITECTURE rtl of and1 IS 库使用说明 END rtl;CONFIGURAT

47、ION s1 OF and1 ISEND s1;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or1 IS CONFIGURATION s2 OF or1 IS END s2;库使用说明 2.3.2 包集合包集合 包集合包集合(Package)的说明像C语言中include语句一样,用来单纯地罗列罗列VHDL语言中所要用到的信号定义、常数定义、数信号定义、常数定义、数据类型、元件语句、函数定义和过程定义据类型、元件语句、函数定义和过程定义等,它是一个可编译可编译的设计单元的设计单元,也是库结构中的一个层次库结构中的一个层次。在使用包集合时可以用

48、用USE语句说明语句说明。例如:USE IEEE.STD_LOGIC_1164.ALL;该语句表示在VHDL程序中要使用名为STD_LOGIC_1164的包集合中的所有定义或说明项。包集合的结构如下所示:PACKAGE 包集合名包集合名 IS 说明语句;说明语句;END 包集合名;包集合名;PACKAGE BODY 包集合名包集合名 IS 说明语句;说明语句;END 包集合名;包集合名;包集合标题包集合标题 包集合体包集合体 一个包集合由两大部分组成:包集合标题包集合标题(Header)和包集和包集合体合体。(Package Body)包集合体是一个可选项可选项,也就是说,包集合可以只由包集合

49、标题构成。一般包集合标题列出所有项包集合标题列出所有项的名称,而包集合体具体给出各项的细节的名称,而包集合体具体给出各项的细节。例如,在例2-16中,包集合由包集合标题和包集合两部分组成。在包集合标题中,定义了数据类型和函数的调用关系,而在包集合体中,具体地描述了实现该函数功能的语句和数据的赋值。这种分分开描述的好处开描述的好处是,当函数的功能需要作某些调整或数据赋值需要变化时,只要改变包集合体的相关语句就行了,而无需改变包标题的说明,这样可以使重新编译的单元数目尽可能重新编译的单元数目尽可能少少。【例2-19】LIBRARY IEEE;USE IEEE STD_LOGIC_1164.ALL;

50、PACKAGE upac ISCONSTANT k:INTEGER:=4;TYPE instruction IS(add,sub,adc,inc,srf,slf);SUBTYPE cpu_bus IS STD_LOGIC_VECTOR(k-1 DOWNTO 0);END upac;上述的包集合是用户自定义的。在该包集合中定义了CPU的指令这一数据类型和cpu_bus为一个4位的位矢量。由于它是用户自己定义的,因此编译以后就会自动地加到WORK库中,如要使用该包集合,则可用如下格式调用:USE WORK.upac.instruction;2.3.3 配置配置 配置配置(Configuration

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文((二)VHDL语言程序的基本结构课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|