第10章 VHDL子程序和VHDL程序包_第1页
第10章 VHDL子程序和VHDL程序包_第2页
第10章 VHDL子程序和VHDL程序包_第3页
第10章 VHDL子程序和VHDL程序包_第4页
第10章 VHDL子程序和VHDL程序包_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第1010章章10.4 VHDL10.4 VHDL子程序子程序10.5 VHDL10.5 VHDL程序包程序包第第8章章 VHDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院10.4 VHDL10.4 VHDL子程序子程序 10.4.1 VHDL函数函数 FUNCTION 函数名函数名(参数表参数表) RETURN 数据类型数据类型 -函数函数首首FUNCTION 函数名函数名(参数表参数表)RETURN 数据类型数据类型 IS - 函数体函数体 说明部分说明部分 BEGIN 顺序语句顺序语句 ; END FUNCTION 函数名函数名;

2、 l由主程序调用由主程序调用l无法从本结构体的并行语句或者无法从本结构体的并行语句或者进程结构中直接读取信号或者向进程结构中直接读取信号或者向信号赋值。信号赋值。 由顺序语句组成,与进程相似,但是不能直接读取信由顺序语句组成,与进程相似,但是不能直接读取信号或向信号赋值,只能通过子程序调用及子程序的界面端口号或向信号赋值,只能通过子程序调用及子程序的界面端口通信。通信。l子程序利用顺序语句来完成。子程序利用顺序语句来完成。l子程序分两类:函数和过程子程序分两类:函数和过程第第8章章 VHDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院【例例

3、8-1】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE packexp IS -定义程序包定义程序包 FUNCTION max( a,b : IN STD_LOGIC_VECTOR) -定义函数首定义函数首 RETURN STD_LOGIC_VECTOR ; FUNCTION func1 ( a,b,c : REAL ) -定义函数首定义函数首 RETURN REAL ; FUNCTION * ( a ,b : INTEGER ) -定义函数首定义函数首 RETURN INTEGER ; FUNCTION as2 (SIGNAL in1 ,in

4、2 : REAL ) -定义函数首定义函数首 RETURN REAL ; END ;PACKAGE BODY packexp IS FUNCTION max( a,b : IN STD_LOGIC_VECTOR) -定义函数体定义函数体 RETURN STD_LOGIC_VECTOR IS BEGIN IF a b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束结束FUNCTION语句语句 END; -结束结束PACKAGE BODY语句语句 第第8章章 VHDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章

5、 矿业大学计算机学院矿业大学计算机学院 LIBRARY IEEE; - 函数应用实例 USE IEEE.STD_LOGIC_1164.ALL; USE WORK.packexp.ALL ; ENTITY axamp IS PORT(dat1,dat2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); dat3,dat4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1,out2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END; ARCHITECTURE bhv OF axamp IS BEGIN out1 =

6、 max(dat1,dat2); -用在赋值语句中的并行函数调用语句 PROCESS(dat3,dat4) BEGIN out2 b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束FUNCTION语句 FUNCTION max( a,b :IN INTEGER) -定义函数体 RETURN INTEGER IS BEGIN IF a b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束FUNCTION语句10.4 VHDL子程序子程序 第第8章章 VHD

7、L结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院FUNCTION max( a,b :IN BIT_VECTOR) -定义函数体定义函数体 RETURN BIT_VECTOR IS BEGIN IF a b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束结束FUNCTION语句语句 END; -结束结束PACKAGE BODY语句语句. . - 以下是调用重载函数以下是调用重载函数max的程序的程序: 10.4 VHDL子程序子程序 第第8章章 VHDL结构结构中国矿业大

8、学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE WORK.packexp.ALL; ENTITY axamp IS PORT(a1,b1 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); a2,b2 : IN BIT_VECTOR(4 DOWNTO 0); a3,b3 : IN INTEGER RANGE 0 TO 15; c1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); c2 : OUT BIT_VECTOR(4 D

9、OWNTO 0); c3 : OUT INTEGER RANGE 0 TO 15); END; ARCHITECTURE bhv OF axamp IS BEGIN c1 = max(a1,b1); -对函数对函数max( a,b :IN STD_LOGIC_VECTOR)的调的调用用 c2 = max(a2,b2); -对函数对函数max( a,b :IN BIT_VECTOR) 的调用的调用 c3 value:=0101 ; WHEN 0101 = value:=0000 ; WHEN OTHERS = value:=1111 ; END CASE ;END PROCEDURE prg1

10、; 10.4 VHDL10.4 VHDL子程序子程序 第第8章章 VHDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院10.4.5 VHDL过程过程 【例例10-7】 PROCEDURE comp ( a, r : IN REAL; m : IN INTEGER ; v1, v2: OUT REAL) IS VARIABLE cnt : INTEGER ; BEGIN v1 := 1.6 * a ; - 赋初始值赋初始值 v2 := 1.0 ; - 赋初始值赋初始值 Q1 : FOR cnt IN 1 TO m LOOP v2 := v2

11、* v1 ; EXIT Q1 WHEN v2 v1; - 当当v2 v1,跳出循环,跳出循环LOOP END LOOP Q1 ASSERT (v2 v1 ) REPORT OUT OF RANGE - 输出错误报告输出错误报告 SEVERITY ERROR ; END PROCEDURE comp ; 10.4 VHDL10.4 VHDL子程序子程序 第第8章章 VHDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院【例例10-8】LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;PACKAGE axamp

12、IS -过程首定义过程首定义 PROCEDURE nand4a (SIGNAL a,b,c,d : IN STD_LOGIC ; SIGNAL y : OUT STD_LOGIC ); END axamp;PACKAGE BODY axamp IS -过程体定义过程体定义 PROCEDURE nand4a (SIGNAL a,b,c,d : IN STD_LOGIC ; SIGNAL y : OUT STD_LOGIC ) IS BEGIN y 实参表达式实参表达式,形参名形参名=实参表达式实参表达式); (1)将将IN和和INOUT模式的实参值赋给欲调用的过程中与它模式的实参值赋给欲调用的过

13、程中与它们对应的形参;们对应的形参;(2)执行这个过程;执行这个过程;(3)将过程中将过程中OUT和和INOUT模式的形参值返回给对应的实模式的形参值返回给对应的实参。参。 10.4 VHDL10.4 VHDL子程序子程序 第第8章章 VHDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院8.3 VHDL8.3 VHDL子程序子程序 8.3.7 子程序调用语句子程序调用语句 1.过程调用过程调用 【例例10-10】PACKAGE data_types IS - 定义程序包定义程序包SUBTYPE data_element IS INTEGER

14、 RANGE 0 TO 3 ;- 定义数据类型定义数据类型TYPE data_array IS ARRAY (1 TO 3) OF data_element;END data_types;USE WORK.data_types.ALL; -打开以上建立在当前工作库的程序包打开以上建立在当前工作库的程序包data_typesENTITY sort IS PORT ( in_array : IN data_array ; out_array : OUT data_array);END sort; ARCHITECTURE exmp OF sort IS BEGIN PROCESS (in_arra

15、y) - 进程开始,设进程开始,设data_types为敏感信号为敏感信号 PROCEDURE swap(data : INOUT data_array; - swap的形参名为的形参名为data、low、high low, high : IN INTEGER ) IS VARIABLE temp : data_element ; BEGIN - 开始描述本过程的逻辑功能开始描述本过程的逻辑功能 IF (data(low) data(high) THEN - 检测数据检测数据 temp := data(low) ; data(low) := data(high); data(high) :=

16、temp ; END IF ; END swap ; - 过程过程swap定义结束定义结束 VARIABLE my_array : data_array ; - 在本进程中定义变量在本进程中定义变量my_array BEGIN - 进程开始进程开始 my_array := in_array ; - 将输入值读入变量将输入值读入变量 swap(my_array, 1, 2); - my_array、1、2是对应于是对应于data、low、high的实参的实参 swap(my_array, 2, 3); - 位置关联法调用,位置关联法调用, 第第2、第、第3元素交换元素交换 swap(my_arr

17、ay, 1, 2); - 位置关联法调用,位置关联法调用, 第第1、第、第2元素再次交换元素再次交换 out_array = my_array ; END Process ;ENDexmp; 第第8章章 VHDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院2函数调用函数调用 函数调用与过程调用是十分相似的,不同之处函数调用与过程调用是十分相似的,不同之处是,调用函数将返还一个指定数据类型的值,函数是,调用函数将返还一个指定数据类型的值,函数的参量只能是输入值。的参量只能是输入值。 10.4 VHDL10.4 VHDL子程序子程序 第第8章章

18、 VHDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院10.4 VHDL10.4 VHDL子程序子程序 10.4.7 RETUREN语句语句RETUREN;RETURN 表达式表达式; 前者用于结束过程,并没有返回值,后者用于前者用于结束过程,并没有返回值,后者用于函数,有返回值。函数,有返回值。第第8章章 VHDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院10.4.8 并行过程调用语句并行过程调用语句 过程名过程名(关联参量名关联参量名); 【例例10-14】.PROCEDUREad

19、der(SIGNALa,b:INSTD_LOGIC;-过程名为过程名为adderSIGNALsum:OUTSTD_LOGIC);.adder(a1,b1,sum1);-并行过程调用并行过程调用.-在此,在此,a1、b1、sum1即为分别对应于即为分别对应于a、b、sum的关联参量名的关联参量名PROCESS(c1,c2);-进程语句执行进程语句执行BEGINAdder(c1,c2,s1);-顺序过程调用,在此顺序过程调用,在此c1、c2、s1即为分别对即为分别对ENDPROCESS;-应于应于a、b、sum的关联参量名的关联参量名10.4 VHDL10.4 VHDL子程序子程序 第第8章章 V

20、HDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院10.4.8 并行过程调用语句并行过程调用语句 【例例10-15】PROCEDUREcheck(SIGNALa:INSTD_LOGIC_VECTOR;-在调用时在调用时SIGNALerror:OUTBOOLEAN)IS-再定位宽再定位宽VARIABLEfound_one:BOOLEAN:=FALSE;-设初始值设初始值BEGINFORiINaRANGELOOP-对位矢量对位矢量a的所有的位元素进行循环检测的所有的位元素进行循环检测IFa(i)=1THEN-发现发现a中有中有1IFfound_

21、oneTHEN-若若found_one为为TRUE,则表明发现了一个以上的,则表明发现了一个以上的1ERROR=TRUE;-发现了一个以上的发现了一个以上的1,令,令found_one为为TRUERETURN;-结束过程结束过程ENDIF;Found_one:=TRUE;-在在a中已发现了一个中已发现了一个1EndIF;EndLOOP;-再测再测a中的其他位中的其他位error=NOTfound_one;-如果没有任何如果没有任何1被发现,被发现,error将被置将被置TRUEENDPROCEDUREcheck;10.4 VHDL10.4 VHDL子程序子程序 第第8章章 VHDL结构结构中国

22、矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院10.4.8 并行过程调用语句并行过程调用语句 .CHBLK:BLOCKSIGNALs1:STD_LOGIC_VECTOR(0TO0);-过程调用前设定位矢尺寸过程调用前设定位矢尺寸SIGNALs2:STD_LOGIC_VECTOR(0TO1);SIGNALs3:STD_LOGIC_VECTOR(0TO2);SIGNALs4:STD_LOGIC_VECTOR(0TO3);SIGNALe1,e2,e3,e4:Boolean;BEGINCheck(s1,e1);-并行过程调用,关联参数名为并行过程调用,关联参数名

23、为s1、e1Check(s2,e2);-并行过程调用,关联参数名为并行过程调用,关联参数名为s2、e2Check(s3,e3);-并行过程调用,关联参数名为并行过程调用,关联参数名为s3、e3Check(s4,e4);-并行过程调用,关联参数名为并行过程调用,关联参数名为s4、e4ENDBLOCK;.对对4个不同位宽的位矢量信号利用上个不同位宽的位矢量信号利用上述过程进行检测的并行过程调用程序述过程进行检测的并行过程调用程序10.4 VHDL10.4 VHDL子程序子程序 第第8章章 VHDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院10

24、.5 VHDL10.5 VHDL程序包程序包回顾:库的种类回顾:库的种类 1. IEEE库库 2. STD库库 3. WORK库库 4. VITAL库库 第第8章章 VHDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院 LIBRARY 库名;库名; USE 库名库名.程序包名程序包名.ALL ; LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.STD_ULOGIC ;USE IEEE.STD_LOGIC_1164.RISING_EDGE ; USE WORK.std_logic_1164.ALL; 10.5 VHDL10.5 VHDL程序包程序包回顾:库的使用回顾:库的使用第第8章章 VHDL结构结构中国矿业大学计算机学院中国矿业大学计算机学院第10章 矿业大学计算机学院矿业大学计算机学院定义程序包的一般语句结构如下:定义程序包的一般语句结构如下: PACKAGE 程序包名程序包名 IS - 程序包首程序包首 程序包首说明部分程序包首说明部分 END 程序包名程序包名; PACKAGE BODY 程序包名程序包名 IS - 程序包体程序包体 程序包体说明部分以及包体内程

温馨提示

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

最新文档

评论

0/150

提交评论