![第5章 VHDL并行语句_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-6/25/c30a6371-0012-4a1a-ac65-e58d7dc907f1/c30a6371-0012-4a1a-ac65-e58d7dc907f11.gif)
![第5章 VHDL并行语句_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-6/25/c30a6371-0012-4a1a-ac65-e58d7dc907f1/c30a6371-0012-4a1a-ac65-e58d7dc907f12.gif)
![第5章 VHDL并行语句_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-6/25/c30a6371-0012-4a1a-ac65-e58d7dc907f1/c30a6371-0012-4a1a-ac65-e58d7dc907f13.gif)
![第5章 VHDL并行语句_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-6/25/c30a6371-0012-4a1a-ac65-e58d7dc907f1/c30a6371-0012-4a1a-ac65-e58d7dc907f14.gif)
![第5章 VHDL并行语句_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-6/25/c30a6371-0012-4a1a-ac65-e58d7dc907f1/c30a6371-0012-4a1a-ac65-e58d7dc907f15.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第5章章 VHDL并行语句并行语句 并行语句结构是并行语句结构是VHDLVHDL的特色。在的特色。在VHDLVHDL中,并行语句具有多中,并行语句具有多种语句格式,种语句格式,各种并行语句在结构体中的执行是同步进行各种并行语句在结构体中的执行是同步进行的,或者说是并行运行的,其执行方式与书写的顺序无关的,或者说是并行运行的,其执行方式与书写的顺序无关。每一并行语句内部的语句运行方式可以有两种不同的方式,每一并行语句内部的语句运行方式可以有两种不同的方式,即即并行执行方式并行执行方式( (如块语句如块语句) )和顺序执行方式和顺序执行方式( (如进程语句如进程语句) )。并行语句在结构体中的使
2、用格式如下并行语句在结构体中的使用格式如下:ARCHITECTURE ARCHITECTURE 结构体名结构体名 OF OF 实体名实体名 IS IS 说明语句说明语句; ;BEGIN BEGIN 并行语句并行语句; ;END ARCHITECTURE END ARCHITECTURE 结构体名;结构体名;VHDLVHDL中不存在纯粹的并行行为和顺中不存在纯粹的并行行为和顺序行为的语句。例如,相对于其他序行为的语句。例如,相对于其他的并行语句,的并行语句,进程属于并行语句进程属于并行语句,而进程内部运行的都是顺序语句。而进程内部运行的都是顺序语句。PROCESSPROCESS结构中的顺序语句,
3、其顺序结构中的顺序语句,其顺序执行过程只是相对于计算机中的软执行过程只是相对于计算机中的软件行为仿真的模拟过程而言的件行为仿真的模拟过程而言的,这,这个过程与硬件结构中实现的对应的个过程与硬件结构中实现的对应的逻辑行为是不相同的。逻辑行为是不相同的。并行信号赋值语句并行信号赋值语句三种形式:三种形式:简单信号赋值语句简单信号赋值语句、条件信号赋值语句条件信号赋值语句和和选择信号赋值语句选择信号赋值语句。共同点是:共同点是: 赋值目标必须都是信号,所有赋值语句在结构体内的执行是赋值目标必须都是信号,所有赋值语句在结构体内的执行是同时发生的,与它们的书写顺序和是否在块语句中没有关系。同时发生的,与
4、它们的书写顺序和是否在块语句中没有关系。 每一信号赋值语句都相当于一条缩写的进程语句,而这条语句的所有每一信号赋值语句都相当于一条缩写的进程语句,而这条语句的所有输入输入( (或读入或读入) )信号都被隐性地列入此过程的敏感信号表中。任何信号的变信号都被隐性地列入此过程的敏感信号表中。任何信号的变化都将启动相关并行语句的赋值操作,而这种启动完全是独立于其他语句化都将启动相关并行语句的赋值操作,而这种启动完全是独立于其他语句的。的。5.1 并行信号赋值并行信号赋值语句语句5.1 并行信号赋值并行信号赋值语句语句5.1.1.5.1.1.简单信号赋值语句简单信号赋值语句信号赋值操作:符号信号赋值操作
5、:符号“=”=”进行信号赋值操作进行信号赋值操作的,它可以用在顺序执行语句中,也可以用在的,它可以用在顺序执行语句中,也可以用在并行处理语句中并行处理语句中注意注意1 1、用在并行处理语句中时,符号、用在并行处理语句中时,符号=右边的值是右边的值是此条语句的敏感信号,即符号此条语句的敏感信号,即符号=右边的值发生右边的值发生变化就会重新激发此条赋值语句,也即符号变化就会重新激发此条赋值语句,也即符号=右边的值不变化时,此条赋值语句就不会执行。右边的值不变化时,此条赋值语句就不会执行。如果符号如果符号=右边是常数则赋值语句一直执行。右边是常数则赋值语句一直执行。2 2、用在顺序执行语句中时,没有
6、以上说法。、用在顺序执行语句中时,没有以上说法。并行简单信号赋值语句是并行简单信号赋值语句是VHDLVHDL并行语句结构的最基本的单元,它的语句并行语句结构的最基本的单元,它的语句格式如下:格式如下: 信号赋值目标信号赋值目标=表达式表达式 式中信号赋值目标的数据对象必须是式中信号赋值目标的数据对象必须是信号信号,它的数据类型必须与赋,它的数据类型必须与赋值符号右边表达式的数据类型一致。值符号右边表达式的数据类型一致。通过通过AFTERAFTER给信号赋值,可以描述信号在确定延迟时间后取值的变化。这种给信号赋值,可以描述信号在确定延迟时间后取值的变化。这种适用于非循环的有限变化信号赋值。特别注
7、意此语句中,对适用于非循环的有限变化信号赋值。特别注意此语句中,对“赋值目标赋值目标”进进行赋值的行赋值的v0v0、v1v1、v2v2等是按顺序执行的,然而等是按顺序执行的,然而AFTERAFTER后指定的时间却是同时后指定的时间却是同时开始计时的。例如对复位信号的描述可以表示为:开始计时的。例如对复位信号的描述可以表示为: 其中其中rest_periodrest_period是是TimeTime类型,信号类型,信号resetreset初始值为初始值为1 1(有效有效),),经过一经过一个复位时长个复位时长rest_periodrest_period后变为后变为0 0(无效无效),),从而实现
8、异步复位。从而实现异步复位。用于仿真的用于仿真的VHDL程序中,常用程序中,常用AFTER语句来描述延迟信息,因而常与语句来描述延迟信息,因而常与Time类型一起使用,于是,用类型一起使用,于是,用AFTER语句描述其赋值延迟的赋值语句的语句描述其赋值延迟的赋值语句的语法格式如下:语法格式如下:5.1 并行信号赋值语句并行信号赋值语句 5.1.1.5.1.1.简单信号赋值语句简单信号赋值语句5.1 并行信号赋值并行信号赋值语句语句 5.1.25.1.2条件信号赋值语句条件信号赋值语句在结构体中的条件信号赋值语句的功能与在进程中的在结构体中的条件信号赋值语句的功能与在进程中的IFIF语句语句相同
9、。相同。在执行条件信号赋值语句时,每一赋值条件是按书写在执行条件信号赋值语句时,每一赋值条件是按书写的先后关系逐项测定的,一旦发现赋值条件的先后关系逐项测定的,一旦发现赋值条件=TRUE=TRUE,立即将表,立即将表达式的值赋给赋值目标。达式的值赋给赋值目标。条件信号赋值语句的表达方式如下:条件信号赋值语句的表达方式如下:赋值目标赋值目标 = = 表达式表达式 WHEN WHEN 赋值条件赋值条件 ELSEELSE 表达式表达式 WHEN WHEN 赋值条件赋值条件 ELSEELSE 表达式;表达式; 5.1 并行信号赋值语句并行信号赋值语句 5.1. 25.1. 2条件信号赋值语句条件信号赋
10、值语句程序显示,由于条件测试的顺序性,第一程序显示,由于条件测试的顺序性,第一子句具有最高赋值优先级,第二子句其次,子句具有最高赋值优先级,第二子句其次,第三句最后,也就是说,如果当第三句最后,也就是说,如果当p1和和p2同时为同时为1时,时,z获得的赋值是获得的赋值是a。选择信号赋值语句格式如下:选择信号赋值语句格式如下:WITH WITH 选择表达式选择表达式 SELECTSELECT赋值目标信号赋值目标信号=表达式表达式WHENWHEN选择值,选择值, 表达式表达式WHENWHEN选择值,选择值, 表达式表达式WHENWHEN选择值;选择值; 5.1 并行信号赋值并行信号赋值语句语句5.
11、1.35.1.3选择信号赋值语句选择信号赋值语句 选择信号赋值语句本身不能在进程中应用,功选择信号赋值语句本身不能在进程中应用,功能与进程中的能与进程中的CASECASE语句的功能相似。语句的功能相似。CASECASE语句的语句的执行依赖于进程中敏感信号的改变而启动进程,执行依赖于进程中敏感信号的改变而启动进程,而且要求而且要求CASECASE语句中各子句的条件不能有重叠,语句中各子句的条件不能有重叠,必须包容所有的条件。必须包容所有的条件。 选择信号语句中的敏感量为关键词选择信号语句中的敏感量为关键词WITHWITH旁的选旁的选择表达式。择表达式。当选择表达式的值发生变化时,就将当选择表达式
12、的值发生变化时,就将启动此语句对于各子句的选择值进行测试对比,启动此语句对于各子句的选择值进行测试对比,当发现有满足条件的子句的选择值时,就将此子当发现有满足条件的子句的选择值时,就将此子句表达式中的值赋给赋值目标信号。句表达式中的值赋给赋值目标信号。 与与CASECASE语句相似,语句相似,选择赋值语句对于子句条选择赋值语句对于子句条件选择值的测试具有同期性,而条件信号赋值语件选择值的测试具有同期性,而条件信号赋值语句是按照子句的书写顺序从上至下逐条测试的。句是按照子句的书写顺序从上至下逐条测试的。 选择赋值语句不允许有条件重叠的现象,也选择赋值语句不允许有条件重叠的现象,也不允许存在条件涵
13、盖不全情况。不允许存在条件涵盖不全情况。式中信号赋值目标的数据对象必须是信号,式中信号赋值目标的数据对象必须是信号,它的数据类型必须与赋值符号右边表达式的它的数据类型必须与赋值符号右边表达式的数据类型一致。数据类型一致。5.1 并行信号赋值并行信号赋值语句语句5.1.35.1.3选择信号赋值语句选择信号赋值语句【例例】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_LOGI
14、C; DATAOUT: OUT STD_LOGIC);END DECODER;ARCHITECTURE ART OF DECODER IS BEGIN SIGNAL INSTRUCTION:STD_LOGIC_VECTOR(2 DOWNTO 0); INSTRUCTION =C & B & A; WITH INSTRUCTION SELECT DATAOUT L-TIME,GB2=S-TIME);-局部端口参量设定局部端口参量设定 PORT (PB1:IN BIT;PB2:INOUT BIT); -块结构中局部端口定义块结构中局部端口定义POTR MAP(PB1=B1,PB2=A1); -块结
15、构端口连接说明块结构端口连接说明CONSTANT DELAY:TIME:=1 MS; -局部常数定义局部常数定义SIGNAL S1:BIT; -局部信号定义局部信号定义BEGIN S1=PB1 AFTER DELAY; PB2=S1 AFTER GB1,B1 AFTER GB2; - GB1、 GB2为时间量为时间量END BLOCK BLK1; END ARCHITECTURE ART;2 2BLOCKBLOCK的应用的应用5.1 并行信号赋值语句并行信号赋值语句 5.1.4 5.1.4 块语句块语句 BLOCKBLOCK语句的应用,包括其中的类属说明和端口定义,都不会影响对原结构体语句的应
16、用,包括其中的类属说明和端口定义,都不会影响对原结构体的逻辑功能的仿真结果。的逻辑功能的仿真结果。3 3、BLOCKBLOCK语句在综合中的地位语句在综合中的地位【例例】OUT1=1 AFTER 2 NS; BLK1: BLOCKBEGIN A2:OUT 2=1 AFTER 3 NS; A3:OUT 3=0 AFTER 2 NS; END BLOCK BLK1;【例例】A1:OUT1 =1 AFTER 2 NS; A2:OUT2=1 AFTER 3 NS; A3:OUT3=0 AFTER 2 NS; 两例的仿真结果是完全相同的。两例的仿真结果是完全相同的。基于实用的观点,结构体中功能基于实用的
17、观点,结构体中功能语句的划分最好使用元件例化语句的划分最好使用元件例化(COMPONENT INSTANTIATION)的方式来完成。的方式来完成。 块语句的并行工作方式更为明显,块语句的并行工作方式更为明显,块语句本身是并行语句结构,块语句本身是并行语句结构,而且它而且它的内部也都是由并行语句构成的的内部也都是由并行语句构成的( (包括包括进程进程) )。 需特别注意的是,块中定义的所需特别注意的是,块中定义的所有的数据类型、数据对象有的数据类型、数据对象( (信号、变量、信号、变量、常量常量) )和子程序等都是局部的;对于多和子程序等都是局部的;对于多层嵌套的块结构,这些局部定义量只层嵌套
18、的块结构,这些局部定义量只适用于适用于当前块,以及嵌套于本层块的当前块,以及嵌套于本层块的所有层次的内部块,而对此块的外部所有层次的内部块,而对此块的外部来说是不可见的。来说是不可见的。 5.1 并行信号赋值语句并行信号赋值语句 块块(BLOCK)(BLOCK)语句是一种将结构体中的并行描述语句进行组合的方法,它的语句是一种将结构体中的并行描述语句进行组合的方法,它的主要目的是改善并行语句及其结构的可读性。主要目的是改善并行语句及其结构的可读性。5.1.4 5.1.4 块语句块语句 3 3、BLOCKBLOCK语句在综合中的地位语句在综合中的地位【例例】 B1:BLOCK -定义块定义块B1
19、SIGNAL S: BIT; -在在B1块中定义块中定义S BEGIN S=A AND B; -向向B1中的中的S赋值赋值B2:BLOCK -定义块定义块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 连接实体端口名,连接实体端口名,); A1U1U2Z1U3B1C1D1ABABABCCCS1S2ND2ND2ND2LIBRARY IEEE;USE IEEE
20、.STD_LOGIC_1164.ALL;ENTITY ORD41 IS PORT(A1,B1,C1,D1:IN STD_LOGIC; Z1:OUT STD_LOGIC);END ORD41;ARCHITECTURE ARTORD41 OF ORD41 IS COMPONENT ND2 IS PORT(A,B:IN STD_LOGIC; C:OUT STD_LOGICEND COMPONENT ND2 ;SIGNAL S1,S2 :STD_LOGIC;BEGINU1:ND2 PORT MAP (A1,B1,S1); -位置关联方式位置关联方式U2:ND2 PORT MAP (A=C1,C=S2,
21、B=D1);- -名字关联方式名字关联方式U3:ND2 PORT MAP (S1,S2,C=Z1); -混合关联方式混合关联方式END ARCHITECTURE ARTORD41;5.1 并行信号赋值语句并行信号赋值语句 5.1.5 5.1.5 元件例化语句元件例化语句 元件例化语句中所定义的例化元件的元件例化语句中所定义的例化元件的端口名端口名与与当前系统的连接实体端口名的接口表当前系统的连接实体端口名的接口表达有两种方式达有两种方式。一种是一种是名字关联方式名字关联方式,在这种关联方式下,例化元件的,在这种关联方式下,例化元件的端口名和关联端口名和关联( (连接连接) )符号符号“=”两者
22、都是必须存在的。这时,例化元件端口名与连接实体端口名的对应式在两者都是必须存在的。这时,例化元件端口名与连接实体端口名的对应式在PORT MAPPORT MAP句中的位置可以是任意的。句中的位置可以是任意的。另一种是另一种是位置关联方式位置关联方式。若使用这种方式,例化元件端口名和关联连接符号都可省。若使用这种方式,例化元件端口名和关联连接符号都可省去,在去,在PORT MAPPORT MAP子句中,只要列出当前系统中的连接实体端口名就行了,但要求子句中,只要列出当前系统中的连接实体端口名就行了,但要求连连接实体端口名的排列方式与所需例化的元件端口定义中的端口名接实体端口名的排列方式与所需例化
23、的元件端口定义中的端口名一一对应。一一对应。2 2输入与非门的设计,利用输入与非门的设计,利用元件例化产生由元件例化产生由3 3个相同的个相同的与非门连接而成的电路。与非门连接而成的电路。【例例】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ND2 IS PORT(A,B:IN STD_LOGIC; C:OUT STD_LOGIC);END ND2;ARCHITECTURE ARTND2 OF ND2 IS BEGIN Y=A NAND B;END ARCHITECTURE ARTND2;5.1 并行信号赋值语句并行信号赋值语句 5.1.6 5
24、.1.6 全加器设计与例化语句应用全加器设计与例化语句应用 显然,显然,元件例化就是引入一种元件例化就是引入一种连接关系,将预先设计好的实连接关系,将预先设计好的实体定义为一个元件,然后利用体定义为一个元件,然后利用特定的语句将此元件与当前的特定的语句将此元件与当前的设计实体中的指定端口相连,设计实体中的指定端口相连,从而为当前设计实体引进一个从而为当前设计实体引进一个新的低一级的设计层次。新的低一级的设计层次。5.1 并行信号赋值语句并行信号赋值语句 5.1.6 5.1.6 全加器设计与例化语句应用全加器设计与例化语句应用 显然,当前设计实体相当于一个较大的显然,当前设计实体相当于一个较大的
25、电路系统,所定义的例化元件相当于一电路系统,所定义的例化元件相当于一个要插在这个电路板系统上的芯片,而个要插在这个电路板系统上的芯片,而当前设计实体中指定的端口则相当于这当前设计实体中指定的端口则相当于这块电路板上准备接受此芯片的一个插座,块电路板上准备接受此芯片的一个插座,元件例化是使元件例化是使VHDL设计实体构成自上设计实体构成自上而下层次化的一种重要途径。而下层次化的一种重要途径。注意,注意,端口信号的数据类型端口信号的数据类型的定义必须与原设计实体文的定义必须与原设计实体文件一致,而且信号的排列方件一致,而且信号的排列方式也要与原来的一致,包括式也要与原来的一致,包括端口模式、数据类
26、型、功能端口模式、数据类型、功能定义等。定义等。- -名字关联方式名字关联方式- -位置关联方式位置关联方式注意,注意,这里参与设计的半加这里参与设计的半加器文件,或门文件和全加器器文件,或门文件和全加器顶层设计文件都分别存于同顶层设计文件都分别存于同一文件夹中。一文件夹中。5.1 并行信号赋值语句并行信号赋值语句 5.1.7 5.1.7 生成语句生成语句 这两种语句格式都是由如下四部分组成:这两种语句格式都是由如下四部分组成:(1) (1) 生成方式:生成方式:由由FORFOR语句结构或语句结构或IFIF语句结构,用于规定并行语句的复制方式。语句结构,用于规定并行语句的复制方式。(2) (2
27、) 说明部分:说明部分:对元件数据类型、子程序和数据对象作一些局部说明。对元件数据类型、子程序和数据对象作一些局部说明。(3) (3) 并行语句:并行语句:生成语句结构中的并行语句是用来生成语句结构中的并行语句是用来“COPYCOPY”的基本单元,包括的基本单元,包括元件、进元件、进程语句、块语句、并行过程调用语句、并行信号赋值程语句、块语句、并行过程调用语句、并行信号赋值语句甚至生成语句。语句甚至生成语句。(4) (4) 标号:标号:生成语句中的标号并不是必须的,但如果在嵌套生成语句结构中就很重要。生成语句中的标号并不是必须的,但如果在嵌套生成语句结构中就很重要。生成语句(生成语句(GENE
28、RATE)是一种可以建立重复结构或者是在多个模块的表示形式是一种可以建立重复结构或者是在多个模块的表示形式之间进行选择的语句。由于生成语句可以用来产生多个相同的结构,因此使用生之间进行选择的语句。由于生成语句可以用来产生多个相同的结构,因此使用生成语句就可以避免多段相同结构的成语句就可以避免多段相同结构的VHDL程序的重复书写(相当于程序的重复书写(相当于复制复制)。)。只要根据某些条件,设定好某一元件或设计单位,就可以利用生成语句复制一组只要根据某些条件,设定好某一元件或设计单位,就可以利用生成语句复制一组完全相同的并行元件或设计单元电路结构。完全相同的并行元件或设计单元电路结构。5.1 并
29、行信号赋值语句并行信号赋值语句 5.1.7 5.1.7 生成语句生成语句 利用了数组性语句作为生利用了数组性语句作为生成语句的取值范围,进行成语句的取值范围,进行重复元件例化过程,从而重复元件例化过程,从而产生一组并列的电路结构。产生一组并列的电路结构。5.1 并行信号赋值语句并行信号赋值语句 5.1.7 5.1.7 生成语句生成语句 待调用的待调用的D触发器触发器5.1 并行信号赋值语句并行信号赋值语句 5.1.7 5.1.7 生成语句生成语句 n位(位(n=6)二进制计数器,电路中间部分的)二进制计数器,电路中间部分的结构是规则的,但在两端是不规则的,而由结构是规则的,但在两端是不规则的,
30、而由n个个D触发器构成的触发器构成的n位二进制计数器的位数是位二进制计数器的位数是一个待定值,对此,利用一个待定值,对此,利用FOR_GENERATEFOR_GENERATE语句语句或或IF_GENERATEIF_GENERATE语句来描述最为方便。语句来描述最为方便。5.1 并行信号赋值语句并行信号赋值语句 5.1.8 GENERIC参数传递映射语句及其使用方法参数传递映射语句及其使用方法 5.1 并行信号赋值语句并行信号赋值语句 5.1.8 GENERIC参数传递映射语句及其使用方法参数传递映射语句及其使用方法 注意,使用此句的条件是,所例注意,使用此句的条件是,所例化的模块必须有化的模块
31、必须有GENERIC语句定语句定义的参量端口描述义的参量端口描述例例化化元元件件5.1 并行信号赋值语句并行信号赋值语句 5.1.9 数据类型定义语句数据类型定义语句 1. 限定性数组型数据类型定义限定性数组型数据类型定义 【例例】TYPE STB IS ARRAY (7 DOWNTO 0 ) OF STD_LOGICTYPE STB IS ARRAY (7 DOWNTO 0 ) OF STD_LOGIC; 这个数组类型的名称是这个数组类型的名称是STBSTB,它有,它有8 8个元素,个元素,它的下标排序是它的下标排序是7 7,6 6,5 5,4 4,3 3,2 2,1 1,0 0,各元素的排
32、序是,各元素的排序是STB(7)STB(7),STB(6)STB(6),STB(1)STB(1),STB(0)STB(0)。 其中其中“数组名数组名”是新定义的限定性数组类型的名称,可以是任何标志符,由设是新定义的限定性数组类型的名称,可以是任何标志符,由设计者自定,此名将作为定义的新数据类型之用,而使用方法则与曾经提到的预定计者自定,此名将作为定义的新数据类型之用,而使用方法则与曾经提到的预定义数据类型的用法一样,数据类型与数组元素的数据类型相同。义数据类型的用法一样,数据类型与数组元素的数据类型相同。“数组范围数组范围”明明确指出数组元素的定义数量,和排列方式,以整数来表示其数组的下标。确
33、指出数组元素的定义数量,和排列方式,以整数来表示其数组的下标。5.1 并行信号赋值语句并行信号赋值语句 5.1.9 数据类型定义语句数据类型定义语句 2. 非限定性数组型数据类型定义非限定性数组型数据类型定义 【例例】VARABLE VA:BIT_VECTOR(1 TO 6); -将数组取值范围定在将数组取值范围定在16 不说明所定义的数组下标的取值范围,而是定义某一数据对象为此数组类型时,不说明所定义的数组下标的取值范围,而是定义某一数据对象为此数组类型时,再确定该数组下标取值范围。这样就可以通过不同的定义取值,使相同的数据对再确定该数组下标取值范围。这样就可以通过不同的定义取值,使相同的数
34、据对象具有不同下标取值的数值类型,象具有不同下标取值的数值类型,这就是非限定数组类型这就是非限定数组类型 其中其中“数组名数组名”是新定义的非限定性数组类型的名称,是新定义的非限定性数组类型的名称,“数组下标名数组下标名”是以整数是以整数类型设定的一个数组下标名称,其中符号类型设定的一个数组下标名称,其中符号“”是下标范围待定符号,用到该数是下标范围待定符号,用到该数组时,再自动填入具体的数值范围。组时,再自动填入具体的数值范围。“数据类型数据类型”是数组中每一元素的数据类型是数组中每一元素的数据类型。5.1 并行信号赋值语句并行信号赋值语句 5.1.9 数据类型定义语句数据类型定义语句 3.
35、 枚举型数据类型定义枚举型数据类型定义 其中的数据类型名就是用户用标识符命名的枚举数据类型名,其用法同预定义数据其中的数据类型名就是用户用标识符命名的枚举数据类型名,其用法同预定义数据类型相同,而数据类型定义表述,就是具体列出所定义的类型的表述方法与形式。类型相同,而数据类型定义表述,就是具体列出所定义的类型的表述方法与形式。对于此枚举类型,在综合过程中,对于此枚举类型,在综合过程中,都将转换成二进制代码都将转换成二进制代码5.1 并行信号赋值语句并行信号赋值语句 5.1.9 数据类型定义语句数据类型定义语句 4. 枚举型子类型数据类型定义枚举型子类型数据类型定义 子类型的定义只在基本数据类型
36、上作一些约束,并没有定义新的数据类型,这子类型的定义只在基本数据类型上作一些约束,并没有定义新的数据类型,这是与是与TYPETYPE最大的不同之处。子类型定义中的基本数据类型必须是已有过最大的不同之处。子类型定义中的基本数据类型必须是已有过TYPETYPE定定义的类型,包括已在义的类型,包括已在VHDLVHDL预定义程序包中用预定义程序包中用TYPETYPE定义过的类型定义过的类型5.1 并行信号赋值语句并行信号赋值语句 5.1.10 VHDL的存储器描述的存储器描述 利用时钟的双边沿控制数据读写的利用时钟的双边沿控制数据读写的VHDLVHDL存存储器描述程序。注意,此程序在同一进程储器描述程
37、序。注意,此程序在同一进程中,在时钟的上升沿将数据写入存储器,中,在时钟的上升沿将数据写入存储器,而在同一时钟的下降沿将数据从存储器中而在同一时钟的下降沿将数据从存储器中读出。此程序之所以可以综合,是因为在读出。此程序之所以可以综合,是因为在进程中程序并没有用时钟的两个边沿对同进程中程序并没有用时钟的两个边沿对同一信号进行赋值操作。显然,在时钟的上一信号进行赋值操作。显然,在时钟的上升沿程序是对信号升沿程序是对信号MEMMEM赋值,而在下降沿赋值,而在下降沿是对是对Q Q赋值。赋值。二二维维数数据据类类型型5.1 并行信号赋值语句并行信号赋值语句 5.1.10 VHDL的存储器描述的存储器描述
38、 结构体部分的两条语句是数据类型定义语句。第一句定义了一个二维的结构体部分的两条语句是数据类型定义语句。第一句定义了一个二维的数据类型数据类型G_ARRAYG_ARRAY,其元素是其元素是128128* *8 8;第二条语句定义了信号第二条语句定义了信号MEMMEM,规定规定此信号的数据类型是此信号的数据类型是G_ARRAYG_ARRAY。于是信号于是信号MENMEN有有128128个单元;个单元;MEM(0)MEM(0),MEN(1)MEN(1)、MEN(127)MEN(127);每一个单元有每一个单元有8 8个基本元素,如个基本元素,如MEM(0)(b7MEM(0)(b7,b b6 6、b
39、0)b0),其中每一个单元如其中每一个单元如MEM(0)(bi)MEM(0)(bi)的数据类型都是标准逻辑位的数据类型都是标准逻辑位std_logicstd_logic。于是,于是,MEMMEM的取值范围是的取值范围是128128* *8(=1024)8(=1024)个单元。这实际上是个单元。这实际上是一个存储器,其存储深度是一个存储器,其存储深度是128128,对应地址口线宽度是对应地址口线宽度是7 7;每一单元的数每一单元的数据宽度是据宽度是8 8,对应存储器的数据口线宽度是对应存储器的数据口线宽度是8 8。5.1 并行信号赋值语句并行信号赋值语句 5.1.11 信号属性及属性函数信号属性
40、及属性函数 综合器支持的属性有:综合器支持的属性有:LEFTLEFT、RIGHTRIGHT、HIGHHIGH、LOWLOW、 RANGERANGE、REVERS RANGEREVERS RANGE、LENGTHLENGTH、EEVENTEEVENT及及STABLESTABLE 属性是指关于设计实体、结构体、类型、信号等项目的属性是指关于设计实体、结构体、类型、信号等项目的指定特性。指定特性。1.1.属性提供了描述特定对象的多个侧面值的手段属性提供了描述特定对象的多个侧面值的手段2.2.信号属性在检测信号变化和建立详细的时域模型时非常重要信号属性在检测信号变化和建立详细的时域模型时非常重要3.3
41、.为什么要有属性:为什么要有属性:电路元件需要时钟信号同步电路元件需要时钟信号同步需要控制信号控制整个电路的行为(进程的执行)需要控制信号控制整个电路的行为(进程的执行)时钟信号与控制信号的使用多种多样时钟信号与控制信号的使用多种多样利用属性可以使利用属性可以使VHDLVHDL源代码更加简明扼要,便于理解源代码更加简明扼要,便于理解5.1 并行信号赋值语句并行信号赋值语句 5.1.11 信号属性及属性函数信号属性及属性函数 1. 信号类属性信号类属性 主要用来得到信号的各种行为功能信息:包括信号值的变化、信号变化后主要用来得到信号的各种行为功能信息:包括信号值的变化、信号变化后经过的时间、变化
42、前的信号值等。共有经过的时间、变化前的信号值等。共有5种属性:种属性:(1)EVENT -当前很短的时间内信号发生了变化,则返回当前很短的时间内信号发生了变化,则返回TRUE,否则,否则返回返回FALSE。(2)ACTIVE -当前信号等于当前信号等于1,则返回,则返回TRUE,否则返回,否则返回FALSE。(3)LAST_EVENT -返回信号从前一个事件发生到现在的时间值。返回信号从前一个事件发生到现在的时间值。(4)LAST_VALUE -返回信号在最近一个事件发生以前的值返回信号在最近一个事件发生以前的值(5)LAST_ACTIVE -返回信号从上一次等于返回信号从上一次等于1到现在的
43、时间值到现在的时间值5.1 并行信号赋值语句并行信号赋值语句 5.1.11 信号属性及属性函数信号属性及属性函数 2. 数据区间类属性数据区间类属性 该属性按指定输入参数可以得到一个确定的数组区间范围。只能用该属性按指定输入参数可以得到一个确定的数组区间范围。只能用于数组,只有于数组,只有2种:种:1. RANGE其中其中n 是输入参数,该属性可以得到一个的自然数区间是输入参数,该属性可以得到一个的自然数区间2. REVERSE_RANGE该属性该属性5.1 并行信号赋值语句并行信号赋值语句 5.1.11 信号属性及属性函数信号属性及属性函数 3. 数值类属性数值类属性 ele1ele1、el
44、e2ele2、ele3ele3、ele4ele4获得的赋值分别为获得的赋值分别为1515、0 0、1515和和0 0常用数据类型的数值类属性:常用数据类型的数值类属性:LEFTLEFT:返回一个数据类型或子类型:返回一个数据类型或子类型。RIGHTRIGHT:返回一个数据类型或子类型:返回一个数据类型或子类型。HIGHHIGH:返回一个数据类型或子类型的:返回一个数据类型或子类型的。LOWLOW:返回一个数据类型或子类型的:返回一个数据类型或子类型的。:对数值取最大、对数值取最大、最小值;对枚举类型数最小值;对枚举类型数据下限取左边界值,上据下限取左边界值,上限取右边界值;对数组限取右边界值;
45、对数组取数组区间的最大最小取数组区间的最大最小值。值。:按书写顺序按书写顺序取左边或右边值。取左边或右边值。5.1 并行信号赋值语句并行信号赋值语句 5.1.11 信号属性及属性函数信号属性及属性函数 3. 数值类属性数值类属性 奇偶校验判别信号发生器奇偶校验判别信号发生器5.1 并行信号赋值语句并行信号赋值语句 5.1.11 信号属性及属性函数信号属性及属性函数 4. 数组类属性数组类属性LENGTH 5. 用户定义属性用户定义属性 5.2 VHDL运算操作符运算操作符 逻辑操作符逻辑操作符(Logical Operator)关系操作符关系操作符(Relational Operator)算术
46、操作符算术操作符(Arithmetic Operator)省略赋值操作符省略赋值操作符 (Omit assignment operator)与其他程序设计语言相似,与其他程序设计语言相似,VHDL中的表达式也是由运算符将中的表达式也是由运算符将基本元素连接起来形成。基本元素连接起来形成。在在VHDL语言中共有语言中共有4大类操作符:大类操作符:5.2 VHDL运算操作符运算操作符 5.2.1 逻辑操作符逻辑操作符 在在VHDL语言中,共有语言中,共有6种逻辑运算符,他们分别是:种逻辑运算符,他们分别是: NOT 取反;取反; AND 与;与; OR 或;或; NAND 与非;与非; NOR 或
47、非;或非; XOR 异或。异或。 这这6种逻辑运算符可以对种逻辑运算符可以对 “BIT”和和“STD_LOGIC ”等逻辑型数据、等逻辑型数据、“STD_LOGIC _VECTOR”逻辑型逻辑型数组及数组及布尔数据布尔数据进行逻辑运算。进行逻辑运算。必须注意必须注意: : 运算符的左边和右边,运算符的左边和右边,以及代入的信号的数据类型必须是以及代入的信号的数据类型必须是相同的。相同的。 5.2 VHDL运算操作符运算操作符 5.2.1 逻辑操作符逻辑操作符 5.2 VHDL运算操作符运算操作符 5.2.1 逻辑操作符逻辑操作符 【例例5-12】 SIGNAL a ,b,c : STD_LOG
48、IC_VECTOR (3 DOWNTO 0) ; SIGNAL d,e,f,g : STD_LOGIC_VECTOR (1 DOWNTO 0) ; SIGNAL h,i,j,k : STD_LOGIC ; SIGNAL l,m,n,o,p : BOOLEAN ; . a=b AND c; -b、c相与后向相与后向a赋值,赋值,a、b、c的数据类型同属的数据类型同属4位长的位矢量位长的位矢量 d=e OR f OR g; - 两个操作符两个操作符OR相同,不需括号相同,不需括号 h=(i NAND j)NAND k;- NAND不属上述三种算符中的一种,必须加括号不属上述三种算符中的一种,必须加
49、括号 l=(m XOR n)AND(o XOR p); - 操作符不同,必须加括号操作符不同,必须加括号 h=i AND j AND k; - 两个操作符都是两个操作符都是AND,不必加括号,不必加括号 h=i AND j OR k; - 两个操作符不同,未加括号,表达错误两个操作符不同,未加括号,表达错误 a=b AND e; - 操作数操作数b与与 e的位矢长度不一致,表达错误的位矢长度不一致,表达错误 h=i OR l; - i 的数据类型是位的数据类型是位STD_LOGIC,而,而l的数据类型是的数据类型是 . - 布尔量布尔量BOOLEAN,因而不能相互作用,表达错误。,因而不能相互
50、作用,表达错误。5.2 VHDL运算操作符运算操作符 5.2.2 关系操作符关系操作符 关系操作符的作用是将相同数据类型的数据对象进行数值比较或关系排序判关系操作符的作用是将相同数据类型的数据对象进行数值比较或关系排序判断,并将结果一布尔类型的数据表现出来,即断,并将结果一布尔类型的数据表现出来,即TURETURE或或FALSEFALSE两种。两种。【例例1】 ENTITY relational_ops_1 IS PORT ( a,b : IN BITVECTOR (0 TO 3) ; output : OUT BOOLEAN) ; END relational_ops_1 ; ARCHITECTURE example OF relational_ops_1 IS BEGIN output =(a=b) ; END example ; 【例例2】 ENTITY relational_ops_2 IS PORT (a,b : IN INTEGER RANGE 0 TO 3 ; output : OUT BOOLEAN) ; END relational_ops_2 ; ARCHITECTURE example OF relational_ops_2 IS BEGIN output=b) ; END example ;六种关系运六种关系运算操作符:算操作符:“ = =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论