[信息与通信]EDA课件6

上传人:无*** 文档编号:177514397 上传时间:2022-12-25 格式:PPT 页数:50 大小:541KB
收藏 版权申诉 举报 下载
[信息与通信]EDA课件6_第1页
第1页 / 共50页
[信息与通信]EDA课件6_第2页
第2页 / 共50页
[信息与通信]EDA课件6_第3页
第3页 / 共50页
资源描述:

《[信息与通信]EDA课件6》由会员分享,可在线阅读,更多相关《[信息与通信]EDA课件6(50页珍藏版)》请在装配图网上搜索。

1、第6讲 VHDL基本语句与基本设计 -并行语句6.1进程进程(PROCESS)语句语句6.2块块(BLOCK)语句语句6.3子程序子程序(SUBPROGRAM)语句语句6.4断言断言(ASSERT)语句语句6.5信号赋值信号赋值(SIGNAL ASSIGNMENT)语句语句6.6参数传递参数传递(GENERIC)语句语句6.7通用模块与元件调用通用模块与元件调用(COMPONENT)、端口映射、端口映射(PORT MAP)语句语句6.8生成生成(GENERATE)语句。语句。6.1进程进程(PROCESS)语句语句 在VHDL程序中,PROCESS语句是描述硬件并行工作行为的最常用、最基本的语

2、句。一个结构体中通常包含多个进程语句结构,这些进程语句之间是并行关系的,而每一进程的内部是由一系列顺序语句构成的。PROCESS语句结构包含了一个描述设计实体中某一模块部分逻辑行为的、独立的顺序语句描述的部分。PROCESS语句具有如下特点:(1)进程结构中的所有语句都是按顺序执行的。(2)多进程之间是并行执行的,并可存取结构体或实体中所定义的信号。(3)在进程结构中必须包含一个显式的敏感信号量表或者包含一个WAIT语句。(4)进程之间的通信是通过信号量传递来实现的。PROCESS语句的一般书写结构、组织形式如下:进程名:PROCESS 敏感信号表IS 进程说明部分 BEGIN 顺序描述语句部

3、分END PROCESS 进程名;顺序描述语句部分可分为:(1)信号赋值语句:在进程中将计算或处理的结果向信号赋值。(2)变量赋值语句:在进程中以变量的形式存储计算的中间值。(3)进程启动语句:当PROCESS的敏感信号表没有列出任何敏感量时,进程的启动只能通过进程启动语句。这时可以利用WAIT语句监视信号的变化情况,以便决定是否启动进程。WAIT语句可以看成是一种隐式的敏感信号表。(4)子程序调用语句:对已定义的过程和函数进行调用,并参与计算。(5)顺序描述语句:包括IF语句、CASE语句、LOOP语句和NULL语句等。(6)进程跳出语句:包括NEXT语句和EXIT语句,用于控制进程的运行方

4、向。例6.16所示是一个时钟同步D触发器的VHDL描述。与其他语句相比,进程语句结构具有更多的特点,对进程的认识和进行进程的设计需要注意以下几方面的问题。(1)PROCESS为一无限循环语句。在同一结构体中的任一进程是一个独立的无限循环程序结构。进程只有两种运行状态,即执行状态和等待状态。(2)PROCESS中的顺序语句具有明显的顺序/并行运行双重性。例6.17SIGNAL sel:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL q:STD_LOGIC_VECTOR(2 DOWNTO 0);PROCESS(sel)VARIABLE so:STD_LOGIC_VECTOR

5、(2 DOWNTO 0);BEGIN CASE sel IS -对sel的值进行判断,执行对应so的赋值语句 WHEN 0000 =so:=111 WHEN 0001=so:=110 WHEN 0011 =so:=101 WHEN 0111 =so:=100 WHEN 1111 =so:=011 WHEN OTHERS=so:=000 ;END CASE;q=so&101 ;END PROCESS;(3)进程语句本身是并行语句。(4)信号是多个进程间的信息传递通道。信号具有全局特性,它是进程间进行并行联系的重要途径。在任一进程的进程说明部分不允许定义信号。在PROCESS语句中,信号的赋值不是

6、即时生效,需要等到PROCESS语句执行到最后才会生效,而变量的赋值是及时有效的。6.2块块(BLOCK)语句语句块(BLOCK)语句是一个并行语句,它把许多并行语句包装在一起组成一个整体,目的是改变并行语句及其结构的可读性,可使结构体层次鲜明、结构明确。与进程语句相比:本身都是并行语句,但进程语句内部由顺序语句构成,块语句内部为并行语句构成。BLOCK语句的书写格式如下:块标号:BLOCK(块保护表达式)类属子句 类属端口表;端口子句 端口端口表;BEGIN END BLOCK 块标号;例6.18所示为一个块语句的半加器VHDL描述实例。6.3子程序子程序(SUBPROGRAM)语句语句子程

7、序是一个VHDL程序模块。在一个VHDL的结构体中允许调用多个子程序,这些子程序可以并行运行。在子程序模块内部利用顺序语句来定义和完成算法,子程序的使用方式只能通过子程序调用及与子程序的界面端口进行通信。子程序可以在VHDL程序的三个不同位置进行定义,即在程序包、结构体和进程中定义。VHDL子程序具有可重载的特点,即允许有重名的子程序,但这些子程序的参数类型及返回值数据类型是不同的。应该注意,综合后的子程序将映射于目标芯片中的一个相应的电路模块,且每一次调用都将在硬件结构中产生对应于具有相同结构的不同的模块。子程序有过程(PROCEDURE)语句和函数(FUNCTION)语句两种类型。1)过程

8、(PROCEDURE)语句过程语句的一般书写格式如下:PROCEDURE 过程名(参数表)-过程声明语句 PROCEDURE 过程名(参数表)IS-过程体语句 声明语句 BEGIN 顺序处理语句 END PROCEDURE 过程名;在进程或结构体中的过程不必包含过程声明语句,在程序包中的过程则必须有过程声明语句。例6.19所示为一个过程语句的示例。PROCEDURE comp(a:IN STD_LOGIC_VECTOR;b:IN STD_LOGIC_VECTOR;q:OUT BOOLEAN)ISBEGIN IF (a=b)THEN -如果a大于等于b,则q输出TRUEq:=TRUE;ELSIF

9、 (a=b)THEN -如果a大于等于b,则q输出TRUE RETURN TRUE;ELSIF (a b)THEN-如果a小于b,则q输出FALSE RETURN FALSE;END IF;END FUNCTION comp;该函数的调用语句如下:SIGNAL result:BOOLEAN;result=”、“”、“”、“/=”、“AND”和“MOD”等,对相应的数据类型“INTEGRE”、“STD_LOGIC”和“STD_LOGIC_VECTOR”的操作作了重载,赋予了新的数据类型操作功能,即通过重新定义操作符的方式,允许被重载的操作符能够对新的数据类型进行操作,或者允许不同的数据类型之间用

10、此操作符进行操作。6.4断言断言(ASSERT)语句语句断言语句主要用于程序仿真与调试中的人机会话。在仿真、调用过程中出现问题时,给出一个文字串作为提示信息。提示信息分4类:失败(FAILURE)、错误(ERROR)、警告(WARNING)和注意(NOTE)。断言语句的书写格式如下:ASSERT 条件REPORT报告信息 SEVERITY出错级别;断言语句的使用规则如下;(1)报告信息必须是用双引号括起来的字符串类型的文字。(2)出错级别必须是SEVERITY_LEVEL类型。(3)REPORT子句默认时,默认报告信息为ASSERTION VIOLATION,即违背断言条件。(4)若SEVER

11、ITY子句默认,则默认出错级别为ERROR。(5)任何并行断言(ASSERT)语句的条件以表达式定义时,这个断言语句等价于一个无敏感信号的以WAIT语句结尾的进程。它在仿真开始时执行一次,然后无限等待下去。(6)延缓的并行断言(ASSERT)语句被映射为一个等价的延缓进程。(7)被动进程语句没有输出,与其等价的并行断言语句的执行在电路模块上不会引起任何事情的发生。(8)若断言为FALSE,则报告错误信息。(9)并行断言语句可以放在实体、结构体和进程中,放在任何一个要观察、要调试的点上。6.5信号赋值信号赋值(SIGNAL ASSIGNMENT)语句语句赋值语句是VHDL的基本语句之一,其功能就

12、是将一个值或一个表达式的运算结果传递给某一数据对象,当数据对象是信号时,赋值的过程是并行的。并行信号赋值语句的一般书写格式如下:信号量=信号量表达式;常用的信号赋值语句有3种形式:简单信号赋值语句、条件信号赋值语句和选择信号赋值语句。1)简单信号赋值语句 代入符号右边的表达式可以是逻辑运算表达式、算术运算表达式和关系比较表达式。信号赋值语句允许的信号赋值目标有 标识符赋值目标、数组单元素赋值目标、段下标元素赋值目标和 集合块赋值目标等。(1)标识符赋值目标。标识符赋值目标是以简单的标识符作为被赋值的信号或变量名。例6.22所示就是并行信号赋值语句对标志符赋值的一个简单例子。例6.22ENTIT

13、Y and2 IS PORT(a,b:IN STD_LOGIC;q:OUT STD_LOGIC);END ENTITY and2;ARCHITECTURE behav OF and2 IS q=a AND b;END ARCHITECTURE;(2)数组单元素赋值目标。数组单元素赋值目标的表达形式如下:数组类信号或变量名(下标名)下标名可以是一个具体的数字,也可以是一个文字表示的数字名,它的取值范围在该数组元素个数范围内。例如:SIGNAL a:STD_LOGIC_VECTOR(7 DOWNTO 0);a(1)=1;是给8位矢量a中下标为1的位赋值为“1”。(3)段下标元素赋值目标和集合块赋值

14、目标。段下标元素赋值目标可用以下方式表示:数组类信号(下标l TO/DOWNTO 下标2)括号中的下标1和下标2必须用具体数值表示,并且其数值范围必须在所定义的数组下标范围内。例如:SIGNAL a:STD_LOGIC_VECTOR(7 DOWNTO 0);a(0 TO 3)=“1100”;集合块赋值目标用于一次对集合块的全部内容进行赋值,例如:(second,minute,hour):=(45,30,8);2)条件信号赋值语句条件信号赋值语句的格式如下:目标信号=赋值l WHEN 条件1 ELSE 赋值2 WHEN 条件2 ELSE 赋值3 WHEN 条件3 ELSE 赋值n WHEN 条件

15、n ELSE 赋值n+1;例6.22所示为采用条件信号赋值语句描述一个8选1多路选通器的例子。3)选择信号赋值语句选择信号赋值语句用于通过选择信号的值控制目标信号,其格式如下:WITH 表达式 SELECT 目标信号连接对象端口名,);元件定义语句:相当于对一个现成的设计实体进行封装,使其只留出外面的接口界面。类属表可列出端口的数据类型和参数,例化元件端口名表可列出对外通信的各端口名。元件定义语句可认为是某一型号元件的对外接口,可理解为电路设计中的集成块的型号、引脚说明,元件名就对应于集成块的型号,PORT端口表就是集成块的引脚列表。元件定义语句如下:COMPONENT 元件名 ISGENER

16、IC(类属表)PORT(元件端口表)END COMPONENT 元件名;元件调用端口映射语句:元件对象名是必须存在的,综合程序需要靠元件对象名来区别同一元件的不同对象,该名称类似于电路原理中的元件编号,在同一个电路中可能有很多同一种型号的元件,为了区别它们,在绘制电路图时会给这些同型号的元件进行编号,例如用R1、R2等对电阻进行编号。在VHDL中,采用元件对象名来区别多次调用的同一种型号的元件。元件名则是已定义好的元件的名称。该名称类似于电路中的元件型号。PORT MAP是端口映射的意思,其中的例化元件端口名是在元件定义语句中的端口名表中已定义好的例化元件端口的名字,连接对象端口名则是当前系统

17、与准备接入的例化元件对应端口相连的通信端口,类似于电路图设计中的网络列表。元件对象名称:元件名 PORT MAP(元件端口名=连接对象端口名,);元件调用语句中所定义的例化元件的端口名与当前系统的连接实体端口名的接口表达有两种方式:一种是名字关联方式,在这种关联方式下,例化元件的端口名和关联(连接)符号“”两者都是必须存在的,这时例化元件端口名与连接实体端口名的对应式在PORT MAP句中的位置可以是任意的;另一种是位置关联方式,若使用这种方式,端口名和关联连接符号都可省去,在PORT MAP子句中,只要列出当前系统中的连接实体端口名就行了,但要求连接实体端口名的排列方式与所需例化的元件端口定

18、义中的端口名一一对应。例6.25所示的就是一个使用元件调用语句的简单例子。6.8生成生成(GENERATE)语句语句生成(GENERATE)语句用来产生多个相同的结构和描述规则结构,如块、元件调用或进程。生成语句可以简化有规则设计结构的逻辑描述。GENERATE语句有两种形式。1)FOR-GENERATE形式FOR-GENERATE形式的生成语句的书写格式如下:标号:FOR 循环变量 IN 连续区间 GENERATE BEGINEND GENERATE 标号名;FOR-GENERATE形式的生成语句用于描述多重模式。结构中所列举的是并行处理语句。这些语句是并行执行的,而不是顺序执行的,因此结构

19、中不能使用EXIT语句和NEXT语句。2)IF-GENERATE形式IF-GENERATE形式的生成语句的一般书写格式如下:标号:IF 条件 GENERATEBEGINEND GENERATE 标号名;IF-GENERATE形式的生成语句用于描述结构的例外情况,如边界处发生的特殊情况。IF-GENERATE语句在IF条件为“真”时,才执行结构体内部的语句,因为是并行处理生成语句,所以与IF语句不同。在这种结构中不能含有ELSE语句。这两种语句格式都是由如下四部分组成的。(1)生成语句头:有FOR语句结构或IF语句结构,用于规定并行语句的复制方式。(2)说明部分:包括对元件数据类型、子程序和数据

20、对象做一些局部说明。(3)并行生成语句:用来复制的基本单元,主要包括元件、进程语句、块语句、并行过程调用语句、并行信号赋值语句甚至生成语句。这表示生成语句允许存在嵌套结构,因而可用于生成元件的多维阵列结构。(4)标号:生成语句中的标号并不是必需的,但如果在嵌套生成语句结构中就是很重要的。GENERATE语句典型的应用包括计算机存储阵列、寄存器阵列和仿真状态编译机。例6.26所示即为生成语句的应用示例。ENTITY counter IS PORT(clk,carry:IN STD_LOGIC;dout:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY cou

21、nter;ARCHITECTURE stru OF counter ISCOMPONENT tff is PORT(clk,t:STD_LOGIC;q:STD_LOGIC);END COMPONENT tff;COMPONENT and2 is PORT(a,b:STD_LOGIC;C:OUT BIT);END COMPONENT and2;SIGNAL s:BIT_VECTOR(7 DOWNTO 0);SIGNAL tied_high:BIT:=1;BEGIN g1:FOR i IN 7 DOWNTO 0 GENERATE g2:IF i=7 GENERATE tff_7:tff PORT MAP(clk,s(i-1),dout(i);END GENERATE g2;g3:IF i=0 GENERATE tff_0:tff PORT MAP(clk,tied_high,dout(i);s(i)0 AND i7 GENERATE and_1:and2 PORT MAP(s(il),dout(i),s(i);tff_1:tff PORT MAP(clk,s(i1),dout(i);s(i)=dout(i);END GENERATE g4;END GENERATE g1;END ARCHITECTURE stru;

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