VHDL主要描述语句(并行语句).ppt

上传人:tia****nde 文档编号:14142563 上传时间:2020-07-07 格式:PPT 页数:52 大小:526KB
收藏 版权申诉 举报 下载
VHDL主要描述语句(并行语句).ppt_第1页
第1页 / 共52页
VHDL主要描述语句(并行语句).ppt_第2页
第2页 / 共52页
VHDL主要描述语句(并行语句).ppt_第3页
第3页 / 共52页
资源描述:

《VHDL主要描述语句(并行语句).ppt》由会员分享,可在线阅读,更多相关《VHDL主要描述语句(并行语句).ppt(52页珍藏版)》请在装配图网上搜索。

1、第五章 VHDL主要描述语句第二部分并行语句,5.2.1 进程语句 5.2.2 BLOCK 语句 5.2.3 并行过程调用语句 5.2.4 元件例化语句 5.2.5 并行断言语句 5.2.6 生成语句,5.2 并行语句,相对于传统的软件描述语言,并行语句结构是最具VHDL特色的。在VHDL中,并行语句具有多种语句格式,各种并行语句在结构体中的执行是同步进行的,或者说是并行运行的,其执行方式与书写的顺序无关。在执行中,并行语句之间可以有信息往来,也可以是互为独立、互不相关、异步运行的(如多时钟情况)。 每一并行语句内部的语句运行方式可以有两种不同的方式,即并行执行方式(如块语句)和顺序执行方式(

2、如进程语句)。因此,VHDL并行语句勾画出了一幅充分表达硬件电路的真实的运行图景。,如下图所示的是在一个结构体中各种并行语句运行的示意图。这些语句不必同时存在,在每一语句模块都可以独立异步运行,模块之间并行运行,并通过信号来交换信息。,VHDL中的并行运行有多层含义,即模块间的运行方式可以有同时运行、异步运行、非同步运行等方式,从电路的工作方式上可以包括组合逻辑运行方式、同步逻辑运行方式和异步逻辑运行方式等。 并行语句在结构体中的使用格式如下:ARCHITECTURE 结构体名 OF 实体名 IS 说明( 定义)语句;BEGIN并行语句;并行语句;END ARCHITECTURE 结构体名;,

3、5.2.1 进程语句,进程(PROCESS)语句是最具VHDL语言特色的语句,因为它提供了一种用算法(顺序语句)描述硬件行为的方法。进程实际上是用顺序语句描述的一种进行过程,也就是说进程用于描述顺序事件。PROCESS语句结构包含了一个代表着设计实体中部分逻辑行为的、独立的顺序语句描述的进程。一个结构体中可以有多个并行运行的进程结构,而每一个进程的内部结构却是由一系列顺序语句来构成的。 PROCESS语句的表达格式如下:进程标号:PROCESS(敏感信号参数表)IS进程说明部分;BEGIN顺序描述语句;END PROCESS进程标号;,PROCESS 组成 PROCESS语句结构是由三个部分组

4、成的,即进程说明部分、顺序描述语句部分和敏感信号参数表。 (1) 进程说明部分主要定义一些局部量,可包括数据类型、常数、属性、子程序等。但需注意,在进程说明部分中不允许定义信号和共享变量。 (2) 顺序描述语句部分是一段顺序执行的语句,描述该进程的行为。PROCESS中规定了每个进程语句在它的某个敏感信号(由敏感信号参量表列出)的值改变时都必须立即完成某一功能行为。 它可分为赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句等。 (3) 敏感信号参数表需列出启动本进程要读入的信号名(当有WAIT语句时例外)。,例 ARCHITECTURE art OF stat IS BEGI

5、N P1:PROCESS - 该进程未列出敏感信号,进程需靠WAIT语句来启动 BEGIN WAIT UNTIL CLOCK ; - 等待CLOCK激活进程 IF (driver=1) THEN - 当driver为高电平时进入CASE语句 CASE output IS WHEN s1= output output output output=s1; END CASE; END IF; END PROCESS P1; END ARCHITECTURE art;,例 SIGNAL cnt4:INTEGER RANGE 0 TO 15; -注意CNT4的数据类型 . PROCESS(clk,cle

6、ar,stop)-该进程定义了3个敏感信号 clk, clear,stop -当其中任何一个改变时,都将启动进程的运行 BEGIN IF clear =0 THEN cnt4 =0; ELSIF clkEVENT AND clk=1THEN -如果遇到时钟上升沿,则 IF stop =0THEN -如果stop为低电平,则进行加法计数,否则停止计数 cnt4 = cnt+1; END IF; END IF; END PROCESS;,进程设计要点 进程的设计需要注意以下几方面的问题: 虽然同一结构体中的进程之间是并行运行的,但同一进程中的逻辑描述语句则是顺序运行的,因而在进程中只能设置顺序语句

7、。 进程的激活必须由敏感信号表中定义的任一敏感信号的变化来启动,否则必须有一个显式的WAIT语句来激活。 结构体中多个进程之所以能并行同步运行,一个很重要的原因是进程之间的通信是通过传递信号和共享变量值来实现的。 进程是重要的建模工具。进程结构不但为综合器所支持,而且进程的建模方式将直接影响仿真和综合结果。,进程语句是VHDL程序中使用最频繁和最能体现VHDL语言特点的一种语句,其原因是由于它的并行和顺序行为的双重性,以及其行为描述风格的特殊性。为了使VHDL的软件仿真与综合后的硬件仿真对应起来,应当将进程中的所有输入信号都列入敏感表中。不难发现,在对应的硬件系统中,一个进程和一个并行赋值语句

8、确实有十分相似的对应关系,并行赋值语句就相当于一个将所有输入信号隐性的列入结构体监测范围的(即敏感表的)进程语句。 综合后的进程语句所对应的硬件逻辑模块,其工作方式可以是组合逻辑方式的,也可以是时序逻辑方式的。例如在一个进程中,一般的IF语句,综合出的多为组合逻辑电路(一定条件下);若出现WAIT语句,在一定条件下,综合器将引入时序元件,如触发器。,例 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt10a IS PORT(clr: IN STD_LOGIC; in1:

9、IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END cnt10a; ARCHITECTURE art OF cnt10a IS BEGIN PROCESS (in1, clr) BEGIN IF (clr=1 OR in1= 1001) THEN out1=0000; -有清零信号,或计数已达9,out1输出0, ELSE -否则作加1操作 out1=in1+1; END IF; END PROCESS; END art;,组合电路型十进制加法器cnt10a综合后的RTL硬件结构图,例 LIBR

10、ARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt10b IS PORT ( clr: IN STD_LOGIC; Clk: IN STD_LOGIC; Cnt: Buffer STD_LOGIC_VECTOR(3 DOWNTO 0) ); END CNT10b; ARCHITECTURE actv of cnt10b IS BEGIN PROCESS BEGIN WAIT UNTIL clkEVENT AND clk=1; -等待时钟clk的上沿 IF(clr=1 OR cnt=

11、1001) THEN cnt =0000; -有清零信号,或计数已达9,out1输出0, ELSE -否则作加1操作 cnt=cnt + 1; END IF; END PROCESS; END actv;,组合电路型十进制加法器cnt10b综合后的RTL硬件结构图(增加了D触发器),块(BLOCK)语句是一种将结构体中的并行描述语句进行组合的方法,它的主要目的是改善并行语句及其结构的可读性,或是利用BLOCK的保护表达式关闭某些信号。 BLOCK语句的格式: 块标号:BLOCK (块保护表达式)类属子句类属接口表端口子句 端口接口表BEGINEND BLOCK 块标号;,5.2.2 BLOCK

12、 语句,类属子句和类属接口表为接口说明,它有点类似于实体的定义部分,它可包含由关键词PORT、GENERIC、PORT MAP和GENERIC MAP引导的接口说明等语句,对BLOCK的接口设置以及与外界信号的连接状况加以说明。 块的类属说明部分和接口说明部分的适用范围仅限于当前BLOCK。所以,所有这些在BLOCK内部的说明对于这个块的外部来说是完全不透明的,即不能适用于外部环境,但对于嵌套于内层的块却是透明的。块的说明部分可以定义的项目主要有:USE语句、子程序、数据类型、子类型、常数、信号、元件。 块中的并行语句部分可包含结构体中的任何并行语句结构。BLOCK语句本身属并行语句,BLOC

13、K语句中所包含的语句也是并行语句。,BLOCK的应用可使结构体层次鲜明,结构明确。利用BLOCK语句可以将结构体中的并行语句划分成多个并列方式的BLOCK,每一个BLOCK都像一个独立的设计实体,具有自己的类属参数说明和界面端口,以及与外部环境的衔接描述。 下例描述了一个具有块嵌套方式的BLOCK语句结构。,例 ENTITY gat IS GENERIC(L_time:TIME;S_time:TIME); -类属说明 PORT (b1,b2,b3:INOUT BIT); -结构体全局端口定义 END ENTITY gat; ARCHITECTURE art OF gat IS SIGNAL a

14、1:BIT; -结构体全局信号a1定义 BEGIN blk1:BLOCK -块定义,块标号名是BLK1 GENERIC (gb1,gb2:time); -定义块中的局部类属参量 GENERIC MAP (gb1=L-time,gb2=S-time); -局部端口参量设定 PORT (pb1:IN BIT;pb2:INOUT BIT); -块结构中局部端口定义 POTR MAP(pb1=b1,pb2=a1); -块结构端口连接说明 CONSTANT delay:time:=1 ms; -局部常数定义 SIGNAL s1:BIT; -局部信号定义 BEGIN s1=pb1 AFTER delay;

15、 pb2=s1 AFTER gb1; END BLOCK blk1; END ARCHITECTURE art;,块中定义的所有的数据类型、数据对象(信号、变量、常量)和子程序等都是局部的;对于多层嵌套的块结构,这些局部定义量只适用于当前块,以及嵌套于本层块的所有层次的内部块,而对此块的外部来说是不可见的。 下例是一个含有三重嵌套块的程序,从此例能很清晰地了解上述关于块中数据对象的可视性规则。它实际描述的是如下图所示的两个相互独立的2输入与门:,例 b1:BLOCK -定义块b1 SIGNAL s: BIT; -在b1块中定义s BEGIN s=a AND b; -向b1中的s赋值 b2:BL

16、OCK -定义块b2,套于b1块中 SIGNAL s: BIT; -定义b2块中的信号s BEGIN s= c AND d; -向b2中的s赋值 b3 :BLOCK BEGIN z= s; -此s来自b2块 END BLOCK b3; END BLOCK b2; y= s; -此s来自b1块 END BLOCK b1;,并行信号赋值语句有三种形式:简单信号赋值语句、条件信号赋值语句和选择信号赋值语句。 这三种信号赋值语句的共同点是:赋值目标必须都是信号,所有赋值语句与其他并行语句一样,在结构体内的执行是同时发生的,与它们的书写顺序和是否在块语句中没有关系。 简单信号赋值语句 并行简单信号赋值语

17、句是VHDL并行语句结构的最基本的单元,它的语句格式如下: 信号赋值目标=表达式; 式中,信号赋值目标的数据类型必须与赋值符号右边表达式的数据类型一致。,5.2.3 并行信号赋值语句,例 ARCHITECTURE curt OF bc1 IS SIGNAL s1: STD_LOGIC; BEGIN output1 = a AND b; output2 = c+d; b1:BLOCK IS SIGNAL e,f,g,h: STD_LOGIC; BEGIN g =e OR f; h=e XOR f; END BLOCK b1; s1=g; END ARCHITECTURE curt,条件信号赋值语

18、句 条件信号赋值语句的表达方式如下:赋值目标 =表达式1 WHEN 赋值条件1 ELSE 表达式2 WHEN 赋值条件2 ELSE 表达式n; 在结构体中的条件信号赋值语句的功能与在进程中的IF语句相同。在执行条件信号赋值语句时,每一赋值条件是按书写的先后关系逐项测定的,一旦发现赋值条件为TRUE,立即将表达式的值赋给赋值目标。,例 z = a WHEN p1=1 ELSE b WHEN p2=0 ELSE c; 由于条件测试的顺序性,第一句具有最高赋值优先级,第二句其次,第三句最后。这就是说,如果当p1和p2同时为1 时,z获得的赋值是a。,上例等同于原在顺序语句所的例子: SIGNA a,

19、b,c,p1,p2,z: BIT; . IF (p1=1) THEN z=a; -满足此语句的执行条件是(p1=1) ELSIF (p2=0) THEN z=b; -满足此语句的执行条件是(p1=0)AND (p2=0) ELSE z=c; -满足此语句的执行条件是(p1=0)AND (p2=1) END IF;,选择信号赋值语句 选择信号赋值语句格式如下:WITH 选择表达式SELECT赋值目标信号=表达式WHEN选择值, 表达式 WHEN选择值, 表达式WHEN选择值; 下例是一个简化的指令译码器。对应于由A、B、C三个位构成的不同指令码,由DATA1和DATA2输入的两个值将进行不同的逻

20、辑操作,并将结果从DATAOUT输出。,例 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY decoder IS PORT(a,b,c: IN STD_LOGIC; data1,data2:IN STD_LOGIC; dataout: OUT STD_LOGIC); END ENTITY decoder; ARCHITECTURE concunt OF decoder IS BEGIN SIGNAL instruction:STD_LOGIC_VECTOR(2 DOWNTO 0

21、); instruction =c PORT(例化元件端口名表);- 元件定义语句END COMPONENT 例化元件名;元件例化名:例化元件名 PORT MAP( 例化元件端口名=连接实体端口名, );-元件例化语句,例 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY nd2 IS PORT(a,b:IN STD_LOGIC; c:OUT STD_LOGIC); END ENTITY nd2; ARCHITECTURE nd2behv OF nd2 IS BEGIN c=a NAND b; END ARCHITECTURE nd2behv;

22、,续例: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ord41 IS PORT(a1,b1,c1,d1:IN STD_LOGIC; z1:OUT STD_LOGIC); END ENTITY ord41; ARCHITECTURE ord41behv OF ord41 IS COMPONENT nd2 IS PORT(a,b:IN STD_LOGIC; c:OUT STD_LOGIC); END COMPONENT nd2; SIGNAL s1,s2:STD_LOGIC; BEGIN u1:nd2 PORT MAP (a1,b1,s1)

23、; -位置关联方式 u2:nd2 PORT MAP (a=c1,c=s2,b=d1); -名字关联方式 u3:nd2 PORT MAP (s1,s2,c=z1); -混合关联方式 END ARCHITECTURE ord41behv;,ORD41逻辑原理图,生成(GENERATE)语句可以简化为有规则设计结构的逻辑描述。生成语句有一种复制作用,在设计中,只要根据某些条件,设定好某一元件或设计单位,就可以利用生成语句复制一组完全相同的并行元件或设计单元电路结构。生成语句的语句格式有如下两种形式: 标号:FOR 循环变量 IN 取值范围 GENERATE 说明 BEGIN 并行语句 END GEN

24、ERATE标号;标号:IF 条件 GENERATE说明 BEGIN并行语句 END GENERATE标号;,5.2.6 生成语句,这两种语句格式都是由如下四部分组成: 生成方式:有FOR语句结构或IF语句结构,用于规定并行语句的复制方式。 说明部分:这部分包括对元件数据类型、子程序和数据对象作一些局部说明。 并行语句:生成语句结构中的并行语句是用来“COPY”的基本单元,主要包括元件、进程语句、块语句、并行过程调用语句、并行信号赋值语句甚至生成语句。这表示生成语句允许存在嵌套结构,因而可用于生成元件的多维阵列结构。 标号:生成语句中的标号并不是必须的,但如果在嵌套生成语句结构中就是很重要的。,

25、对于FOR语句结构,主要是用来描述设计中的一些有规律的单元结构,其生成参数及其取值范围的含义和运行方式与LOOP语句十分相似。但需注意,从软件运行的角度上看,FOR语句格式中生成参数(循环变量)的递增方式具有顺序的性质,但是最后生成的设计结构却是完全并行的,这就是为什么必须用并行语句来作为生成设计单元的缘故。 生成参数(循环变量)是自动产生的,它是一个局部变量,根据取值范围自动递增或递减。取值范围的语句格式与LOOP语句是相同的,有两种形式: 表达式 TO 表达式; -递增方式, 如1 TO 5 表达式 DOWNTO 表达式; -递减方式, 如5 DOWNT 1 其中的表达式必须是整数。,下例

26、是利用了VHDL数组属性语句ATTRIBUTERANGE作为生成语句的取值范围,进行重复元件例化过程,从而产生了一组并列的电路结构(如图所示):,生成语句产生的8个相同的电路模块,例: COMPONENT comp IS PORT (x:IN STD_LOGIC; y:OUT STD_LOGIC); END COMPONENT comp; SIGNAL a,b:STD_LOGIC_VECTOR (0 TO 7); gen: FOR i IN aRANGE GENERATE u1:comp PORT MAP (x= a(i), y=b(i); END GENERATE gen; ,以下将利用元件

27、例化和FORGENERATE语句完成一个8位三态锁存器的设计。示例仿照74373(或74LS373/ 4HC373) 的工作逻辑进行设计。74373的器件引脚功能如下图所示,它的引脚功能分别是:D1D8为数据输入端;Q1Q8为数据输出端;OEN为输出使能端,若OEN=1,则Q8Q1的输出为高阻态,若OEN=0,则Q8Q1的输出为保存在锁存器中的信号值;G为数据锁存控制端,若G=1,D8D1输入端的信号进入74373中的8位锁存器中,若G =0,74373中的8位锁存器将保持原先锁入的信号值不变。,SN74373的内部逻辑结构,例 LIBRARY IEEE; USE IEEE.STD_LOGIC

28、_1164.ALL; ENTITY latch IS PORT(d:IN STD_LOGIC; ena:IN STD_LOGIC; q:OUT STD_LOGIC); END ENTITY latch; ARCHITECTURE one OF latch IS SIGNAL s0: STD_LOGIC; BEGIN PROCESS(d,ena) IS BEGIN IF ena=1 THEN s0=D; END IF; Q=s0; END PROCESS; END ARCHITECTURE one;,下面开始SN74373的逻辑描述 LIBRARY IEEE; USE IEEE.STD_LOGI

29、C_1164.ALL; ENTITY SN74373 IS -SN74373器件接口说明 PORT (d:IN STD_LOGIC_VECTOR(8 DOWNTO 1); -定义8位输入信号 oen:IN STD_LOGIC; g:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(8 DOWNTO 1); -定义8位输出信号 END ENTITY SN74373; ARCHITECTURE one OF SN74373 IS COMPONENT latch IS -声明调用前面描述的1位锁存器 PORT(d,ena:IN STD_LOGIC; q:OUT STD_LOG

30、IC ); END COMPONENT latch;,续上例 SIGNAL s1:STD_LOGIC_VECTOR (8 DOWNTO 1); BEGIN GeLatch:FOR iNum IN 1 TO 8 GENERATE -用FORGENERATE语句循环例化8个1位锁存器 Latchx:Latch PORT MAP(D(iNum),G,s1(iNum); -位置关联 END GENERATE GeLatch; q=s1 WHEN oen=0 ELSE -条件信号赋值语句 ZZZZZZZZ; -当OEN=1 时,Q(8)Q(1)输出状态呈高阻态 END ARCHITECTURE one;

31、,续上例 ARCHITECTURE two OF SN74373 IS SIGNAL s2:STD_LOGIC_VECTOR(8 DOWNTO 1); BEGIN PROCESS(d, oen, g, s2) IS BEGIN IF oen=0 THEN -IF语句 q=s2; ELSE q=ZZZZZZZZ; END IF; IF g=1THEN s2=d; END IF; END PROCESS; END ARCHITECTURE two;,由本例可以看出: 程序中安排了两个结构体,以不同的电路来实现相同的逻辑,即一个实体可以对应多个结构体,每个结构体对应一种实现方案。 COMPONENT语句对将要例化的器件进行了接口声明,它对应一个已设计好的实体(ENTITY latch)。 在FORGENERATE语句使用中,GELATCH为标号,iNum为变量,从18共循环了八次。 “latchx:latch PORT MAP(D(iNum),G,s1(iNum);是一条含有循环变量iNum的例化语句,且信号的连接方式采用的是位置关联方式,安装后的元件标号是LATCHX。,THANKS!,

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!