[信息与通信]EDA课件6.ppt
《[信息与通信]EDA课件6.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]EDA课件6.ppt(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 顺序描述语句部分 END PROCESS 进程名;,顺序描述语句部分可分为:
3、 (1) 信号赋值语句:在进程中将计算或处理的结果向信号赋值。 (2) 变量赋值语句:在进程中以变量的形式存储计算的中间值。 (3) 进程启动语句:当PROCESS的敏感信号表没有列出任何敏感量时,进程的启动只能通过进程启动语句。这时可以利用WAIT语句监视信号的变化情况,以便决定是否启动进程。WAIT语句可以看成是一种隐式的敏感信号表。 (4) 子程序调用语句:对已定义的过程和函数进行调用,并参与计算。 (5) 顺序描述语句:包括IF语句、CASE语句、LOOP语句和NULL语句等。 (6) 进程跳出语句:包括NEXT语句和EXIT语句,用于控制进程的运行方向。,例6.16所示是一个时钟同步
4、D触发器的VHDL描述。,与其他语句相比,进程语句结构具有更多的特点,对进程的认识和进行进程的设计需要注意以下几方面的问题。 (1) PROCESS为一无限循环语句。在同一结构体中的任一进程是一个独立的无限循环程序结构。进程只有两种运行状态,即执行状态和等待状态。,(2) PROCESS中的顺序语句具有明显的顺序/并行运行双重性。,例6.17 SIGNAL sel:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL q:STD_LOGIC_VECTOR(2 DOWNTO 0); PROCESS(sel) VARIABLE so:STD_LOGIC_VECTOR(2 DOW
5、NTO 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) 信号是多个进程间的信息传递通道。信号具有
6、全局特性,它是进程间进行并行联系的重要途径。在任一进程的进程说明部分不允许定义信号。 在PROCESS语句中,信号的赋值不是即时生效,需要等到PROCESS语句执行到最后才会生效,而变量的赋值是及时有效的。,6.2块(BLOCK)语句 块(BLOCK)语句是一个并行语句,它把许多并行语句包装在一起组成一个整体,目的是改变并行语句及其结构的可读性,可使结构体层次鲜明、结构明确。 与进程语句相比:本身都是并行语句,但进程语句内部由顺序语句构成,块语句内部为并行语句构成。,BLOCK语句的书写格式如下: 块标号:BLOCK (块保护表达式) 类属子句 类属端口表; BEGIN END BLOCK 块
7、标号;,例6.18所示为一个块语句的半加器VHDL描述实例。,6.3子程序(SUBPROGRAM)语句 子程序是一个VHDL程序模块。在一个VHDL的结构体中允许调用多个子程序,这些子程序可以并行运行。在子程序模块内部利用顺序语句来定义和完成算法,子程序的使用方式只能通过子程序调用及与子程序的界面端口进行通信。 子程序可以在VHDL程序的三个不同位置进行定义,即在程序包、结构体和进程中定义。,VHDL子程序具有可重载的特点,即允许有重名的子程序,但这些子程序的参数类型及返回值数据类型是不同的。 应该注意,综合后的子程序将映射于目标芯片中的一个相应的电路模块,且每一次调用都将在硬件结构中产生对应
8、于具有相同结构的不同的模块。 子程序有过程(PROCEDURE)语句和函数(FUNCTION)语句两种类型。,1) 过程(PROCEDURE)语句 过程语句的一般书写格式如下: PROCEDURE 过程名(参数表) -过程声明语句 PROCEDURE 过程名(参数表) IS -过程体语句 声明语句 BEGIN 顺序处理语句 END PROCEDURE 过程名; 在进程或结构体中的过程不必包含过程声明语句,在程序包中的过程则必须有过程声明语句。例6.19所示为一个过程语句的示例。,PROCEDURE comp ( a:IN STD_LOGIC_VECTOR; b:IN STD_LOGIC_VEC
9、TOR; q:OUT BOOLEAN) IS BEGIN IF (a=b) THEN -如果a大于等于b,则q输出TRUE q:=TRUE; ELSIF (a b) THEN -如果a小于b,则q输出FALSE q:=FALSE; END IF; END PROCEDURE comp; 该过程的调用语句如下: SIGNAL sign:BOOLEAN; comp(“ 1001” ,“ 1100” ,sign); 执行该调用语句后,信号“sign”的值将为“FALSE”。,过程调用语句可出现在结构体中,也可在进程之外执行过程调用语句。 调用规则如下: (1) 并行过程调用语句是一个完整的语句,在它
10、前面可以加标号。 (2) 并行过程调用语句应带“IN”、“OUT”、“INOUT”参数,列于过程名后的括号内。 (3) 并行过程调用可以有多个返回值,这些返回值通过过程中所定义的输出参数返回。,VHDL允许对过程进行重载,即两个或两个以上具有互不相同的参数数量或数据类型的过程取相同的过程名称。系统通过参量数量和类型来区别用户调用的重载后的过程。 例6.20所示是一个重载过程的调用示例。 例6.20 PROCEDURE comp ( a,b:IN INTEGER; outl:INOUT BOOLEAN); PROCEDURE comp ( a,b:IN STD_LOGIC_VECTOR (3 D
11、OWNTO 0); outl:INOUT BOOLEAN); comp(25,43,sign); -调用第一个过程comp comp(“ 1001001” ,“ 1001010” ,sign); -调用第二个重载过程comp,2) 函数“FUNCTION” 在VHDL中有多种函数形式,如用于不同目的的用户自定义函数和在库中现成的具有专用功能的预定义函数,如决断函数、转换函数等。 转换函数用于从一种数据类型到另一种数据类型的转换,如在元件例化语句中利用转换函数可允许不同数据类型的信号和端口间进行映射; 决断函数用于在多驱动信号时解决信号竞争问题。,函数的语言表达格式如下: FUNCTION 函数
12、名(参数表) RETURN 数据类型; -函数声明语句 FUNCTION 函数名(参数表) RETURN 数据类型 IS -函数体语句 说明部分 BEGIN 顺序语句; END FUNCTION 函数名; 函数定义由两部分组成,即函数声明语句和函数体语句。在进程或结构体中不必包含函数声明语句,而在程序包中必须包含函数声明语句(这时的函数声明就相当于函数的检索,声明该程序包中有对应的函数定义。如果要将一个已编制好的函数并入程序包,则函数声明语句必须放在程序包的声明部分,而函数体需放在程序包的包体内。如果只是在一个结构体中定义并调用函数,则仅需函数体即可。 )。,函数的名称就是函数的标志,需放在关
13、键词FUNCTION之后,此名称可以是普通的标识符,或者是操作符,如果是操作符,则必须在操作符上加双引号,这就是所谓的操作符重载。操作符重载就是对VHDL中的操作符进行重新定义,使操作符具有新的功能。新功能的定义是靠函数体来完成的,函数的参数表是用来定义输入、输出参数的,所以不必设置参数的方向,函数参量可以是信号或常数,参数名需放在关键词CONSTANT或SIGNAL之后。如果没有特别说明,则参数被默认为常数。,FUNCTION 函数名(参数表) RETURN 数据类型; -函数声明语句 FUNCTION 函数名(参数表) RETURN 数据类型 IS -函数体语句 说明部分 BEGIN 顺序
14、语句; END FUNCTION 函数名;,例6.21所示为一个完整的实现逻辑矢量大小比较功能的函数定义语句。 例6.21 FUNCTION comp (a,b:IN STD_LOGIC_VECTOR) RETURN BOOLEAN; FUNCTION comp (a,b:IN STD_LOGIC_VECTOR) RETURN BOOLEAN IS BEGIN IF (a=b) THEN -如果a大于等于b,则q输出TRUE RETURN TRUE; ELSIF (a b) THEN -如果a小于b,则q输出FALSE RETURN FALSE; END IF; END FUNCTION co
15、mp; 该函数的调用语句如下: SIGNAL result:BOOLEAN; result=comp(“1001“,“1101“);,函数的调用方式与过程完全不同。函数的调用是将所定义的函数作为语句中的一个因子,如一个操作数或一个赋值数据对象或信号等,而过程的调用是将所定义的过程名作为一条语句来执行。 VHDL允许重载函数,即用相同的函数名定义函数,但重载函数中定义的参数必须有不同的数据类型,以便调用时用以分辨不同功能的同名函数。,VHDL的IEEE库中的STD_LOGIC_UNSIGNED程序包中预定义的操作符如“+”、“”、“*”、“=”、“=”、“”、“”、“/=”、“AND”和“MOD
16、”等,对相应的数据类型“INTEGRE”、“STD_LOGIC”和“STD_LOGIC_VECTOR”的操作作了重载,赋予了新的数据类型操作功能,即通过重新定义操作符的方式,允许被重载的操作符能够对新的数据类型进行操作,或者允许不同的数据类型之间用此操作符进行操作。,6.4断言(ASSERT)语句 断言语句主要用于程序仿真与调试中的人机会话。在仿 真、调用过程中出现问题时,给出一个文字串作为提示信息。 提示信息分4类:失败(FAILURE)、错误(ERROR)、警告(WARNING)和注意(NOTE)。 断言语句的书写格式如下: ASSERT 条件REPORT报告信息 SEVERITY出错级别
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息与通信 信息 通信 EDA 课件
链接地址:https://www.31doc.com/p-2000542.html