




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、电子设计自动化技术第第 9 讲讲 VHDL语言子程序语言子程序子程序子程序 子程序子程序是在主程序调用它以后能将结果返回主程序的程序模是在主程序调用它以后能将结果返回主程序的程序模块,它可以反复调用,方便程序设计。块,它可以反复调用,方便程序设计。 VHDL VHDL子程序模块,由顺序语句构成。子程序模块,由顺序语句构成。每调用一次子程序都意每调用一次子程序都意味着增加了一个硬件电路模块味着增加了一个硬件电路模块,因此,在实际使用时,要密切关,因此,在实际使用时,要密切关注和严格控制子程序的调用次数。注和严格控制子程序的调用次数。 子程序通常放在程序包中子程序通常放在程序包中, ,也可放在结构
2、体和进程中。也可放在结构体和进程中。 子程序子程序函数(函数(Function)过程(过程(Procedure)程序包程序包 程序包程序包也叫包集合,主要用来存放各个设也叫包集合,主要用来存放各个设计都能计都能共享共享的数据类型定义、常量定义、子程的数据类型定义、常量定义、子程序定义、信号定义及元件定义等部分。序定义、信号定义及元件定义等部分。 设计者使用时要用设计者使用时要用USE语句进行说明。语句进行说明。程序包程序包程序包的格式:程序包的格式:PACKAGE 包集合名包集合名 IS说明语句说明语句END 包集合名包集合名;PACKAGE BODY 包集合名包集合名 IS说明语句说明语句E
3、ND 包集合名;包集合名;定义子程序定义子程序实现子程序实现子程序程序包首程序包首程序包体程序包体程序包程序包PACKAGE STD_LOGIC_1164 ISTYPE std_logic_vector IS ARRAY ( NATURAL RANGE ) OF std_logic;FUNCTION and ( l, r : std_logic_vector ) RETURN std_logic_vector;FUNCTION or ( l, r : std_logic_vector ) RETURN std_logic_vector;END STD_LOGIC_1164;PACKAGE BO
4、DY STD_LOGIC_1164 ISFUNCTION and ( l,r : std_logic_vector ) RETURN std_logic_vector ISBeginEnd and“;END STD_LOGIC_1164; 函数函数(Function) 函数语句的作用是输入若干参数,通过函数运算,最函数语句的作用是输入若干参数,通过函数运算,最后返回后返回一个值。一个值。 函数可以重复使用,相当于其他高级语言的函数;函数可以重复使用,相当于其他高级语言的函数; 函数仅返回一个值,函数中至少有一条返回语句;函数仅返回一个值,函数中至少有一条返回语句;函数首函数首函数体函数体函数函
5、数 函数函数(Function)Function 函数名函数名 (参数表)(参数表) Return 数据类型数据类型Function 函数名函数名 (参数表)(参数表) Return 数据类型数据类型 IS 说明部分说明部分Begin 顺序语句顺序语句END Function 函数名;函数名;函数首函数首在程序包首中在程序包首中定义定义函数体函数体在程序包体中在程序包体中定义定义l函数通常定义在程序包中函数通常定义在程序包中,也可放在结构体和进程中。也可放在结构体和进程中。l在结构体和进程中定义时,仅需定义函数体。在结构体和进程中定义时,仅需定义函数体。l定义的位置不同,其使用的范围也不同。定
6、义的位置不同,其使用的范围也不同。 函数函数(Function)Function 函数名函数名 (参数表)(参数表) Return 数据类型数据类型l参数只能是参数只能是IN模式,用来定义输入值;模式,用来定义输入值;l参数只能是信号(参数只能是信号(signal)或常数)或常数(constant);l若无特殊说明,参数被默认为常数;若无特殊说明,参数被默认为常数;l数据类型只能是非限制形式;数据类型只能是非限制形式; 不能使用不能使用STD_LOGIC_VECTOR( 0TO 7) INTEGER RANGE 20 DOWNTO 1例:例:FUNCTION max (a,b:integer)
7、 RETURN integer;FUNCTION max (a,b:integer) RETURN integer;FUNCTION “xor” (l,r :std_logic_vector) RETURN FUNCTION “xor” (l,r :std_logic_vector) RETURN std_logic_vector;std_logic_vector;FUNCTION d2 (signal a,b:std_logic) RETURN std_logic;FUNCTION d2 (signal a,b:std_logic) RETURN std_logic;LIBRARY IEEE
8、;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE hanshu IS -定义程序包定义程序包 FUNCTION max( a,b : IN STD_LOGIC_VECTOR) -定义函数首定义函数首 RETURN STD_LOGIC_VECTOR ;END ;PACKAGE BODY hanshu IS FUNCTION max( a,b : IN STD_LOGIC_VECTOR) -定义函数体定义函数体 RETURN STD_LOGIC_VECTOR IS BEGIN IF a b THEN RETURN a; -RETURN 返回语句返回语句 ELSE RETUR
9、N b; END IF; END FUNCTION max; -结束结束FUNCTION语句语句END; -结束结束PACKAGE BODY语句语句 函数定义实例函数定义实例(程序包中程序包中)LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE WORK.hanshu.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_VEC
10、TOR(3 DOWNTO 0) );END axamp; ARCHITECTURE bhv OF axamp ISBEGIN out1 = max(dat1,dat2); PROCESS(dat3,dat4) BEGIN out2 = max(dat3,dat4); END PROCESS;END; 函数应用实例函数应用实例声明程序包声明程序包并行函数调用并行函数调用顺序函数调用顺序函数调用LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE WORK.hanshu.ALL ;ENTITY axamp IS PORT(dat1,dat2 : IN STD_
11、LOGIC_VECTOR(3 DOWNTO 0); dat3,dat4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1,out2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END axamp; ARCHITECTURE bhv OF axamp ISBEGIN out1 = max(dat1,dat2); PROCESS(dat3,dat4) BEGIN out2 dat3,b=dat4); END PROCESS;END; 函数应用实例函数应用实例位置映射位置映射名称映射名称映射LIBRARY IEEE; USE IEEE.ST
12、D_LOGIC_1164.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 axamp; ARCHITECTURE bhv OF axamp ISFUNCTION max( a,b : IN STD_LOGIC_VECTOR) -定义函数体定义函数体 RETURN STD_LOGIC_VECTOR IS BEGIN
13、IF a b THEN RETURN a; -RETURN 返回语句返回语句ELSE RETURN b;END IF;END FUNCTION max; -结束结束FUNCTION语句语句BEGIN out1 = max(dat1,dat2); out2 b THEN RETURN a; -RETURN 返回语句返回语句 ELSE RETURN b; END IF; END FUNCTION max; -结束结束FUNCTION语句语句END; -结束结束PACKAGE BODY语句语句 练习练习请大家设计函数请大家设计函数“数据比较数据比较”,相等为,相等为1,不等为,不等为0 过程语句的作
14、用和函数类似,但过程参数有输入、输过程语句的作用和函数类似,但过程参数有输入、输出,比函数更为灵活出,比函数更为灵活。 过程也以重复使用,相当于其他高级语言的子程序;过程也以重复使用,相当于其他高级语言的子程序; 过程可以返回多个值,也可以不返回值;过程可以返回多个值,也可以不返回值;过程首过程首过程体过程体过程过程过程(过程(Procedure)过程(过程(Procedure)Procedure 过程名过程名 (参数表)(参数表)Procedure 过程名过程名 (参数表)(参数表) IS 说明部分说明部分 Begin 顺序语句顺序语句END Procedure 过程名;过程名;过程首过程首
15、在程序包首中在程序包首中定义定义过程体过程体在程序包体中在程序包体中定义定义l过程通常定义在程序包中过程通常定义在程序包中,也可放在结构体和进程中。也可放在结构体和进程中。l在结构体和进程中定义时,仅需定义过程体。在结构体和进程中定义时,仅需定义过程体。l定义的位置不同,其使用的范围也不同。定义的位置不同,其使用的范围也不同。l参数有常数、变量、信号,需明确说明;参数有常数、变量、信号,需明确说明;l用关键字用关键字IN、OUT、INOUT定义参数信息流向;定义参数信息流向;l参数无特别说明,参数无特别说明,IN作为常数对待;作为常数对待;l只说明只说明OUT、INOUT,作为变量对待;,作为
16、变量对待;l信号必须明确用关键字信号必须明确用关键字SIGNAL声明声明;l数据类型只能是非限制形式;数据类型只能是非限制形式; 不能使用不能使用STD_LOGIC_VECTOR( 0TO 7) INTEGER RANGE 20 DOWNTO 1例:例:PROCEDURE PROG1 (SIGNAL a,b,c:INOUT STD_LOGIC_VECTOR);PROCEDURE PROG1 (SIGNAL a,b,c:INOUT STD_LOGIC_VECTOR);PROCEDURE PROG2 (CONSTANT a:IN BIT; VARIABLE b:INOUT BIT; SIGNAL
17、c:OUT BIT);PROCEDURE PROG2 (CONSTANT a:IN BIT; VARIABLE b:INOUT BIT; SIGNAL c:OUT BIT);PROCEDURE PROG3 (PROCEDURE PROG3 (a:IN BIT; b:INOUT BIT; c:OUT BITa:IN BIT; b:INOUT BIT; c:OUT BIT);); 过程(过程(Procedure)Procedure 过程名过程名 (参数表)(参数表)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE hanshu IS -定义程序包定义
18、程序包 procedure max( signal a,b: IN STD_LOGIC_VECTOR; signal c: out std_logic_vector);-定义过程首定义过程首END ;PACKAGE BODY hanshu IS procedure max( signal a,b: IN STD_LOGIC_VECTOR)-定义过程体定义过程体 signal c: out std_logic_vector) is BEGINc=a;if(a=b) then c=b;end if;END procedure max; END hanshu; -结束结束PACKAGE BODY语句
19、语句 过程定义(程序包中)实例过程定义(程序包中)实例LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE WORK.hanshu.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 ISBEGINmax(dat1,dat
20、2,out1);PROCESS(dat3,dat4) BEGIN max(dat3,dat4,out2); END PROCESS;END; 过程应用实例过程应用实例声明程序包声明程序包并行过程调用并行过程调用顺序过程调用顺序过程调用LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.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_VECT
21、OR(3 DOWNTO 0) ); END;ARCHITECTURE bhv OF axamp ISprocedure max( signal a,b: IN STD_LOGIC_VECTOR)-定义过程体定义过程体 signal c: out std_logic_vector) is BEGINc=a;if(a=b) then c=b;end if;END procedure max;BEGINmax(dat1,dat2,out1); max(dat3,dat4,out2); END; 过程应用实例过程应用实例结构体中定义结构体中定义仅能被该结构仅能被该结构体使用体使用LIBRARY IEE
22、E;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE hanshu IS -定义程序包定义程序包 procedure max( signal a,b: IN STD_LOGIC_VECTOR; signal c: out std_logic_vector);-定义过程首定义过程首END ;PACKAGE BODY hanshu IS procedure max( signal a,b: IN STD_LOGIC_VECTOR)-定义过程体定义过程体 signal c: out std_logic_vector) is BEGINc=a;if(a=b) then c=b;end if;END procedure max; END; -结束结束PACKAGE BODY语句语句 练习练习请大家设计过程请大家设计过程“数据比较数据比较” ,相等为,相等为1,不等为,不等为0函数与过程对比函数与过程对比 过程可以返回多值,函数只能返回一个值。过程可以返回多值,函数只能返回一个值。 过程的参数有常量(过程的参数有常量(ININ), ,变量、信号变量、信号(IN(IN、OUTOUT、INOUT)INOUT) 函数的参数只有常量、信号,为函数的参数只有常量、信号,为IN(IN(默认默认) )。 函数和过程均能重复产生新的电路模块。函数和过程均能重复产生新的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铭记教诲感恩前行
- 《酒店管理方面》课件2
- 专升本方剂试题库及答案
- 安全招聘考试题及答案
- 智能制造驱动未来制造业转型
- 助理广告师试题及答案轻松掌握
- 广告设计师产品包装设计考题及答案
- 如何在设计项目中实现价值回报试题及答案
- 2024年设计基础知识国际商业美术设计师考试试题及答案
- 学校党务技能大赛课件
- 体外高频热疗的护理
- JGJ79-2012 建筑地基处理技术规范
- 海康威视校招在线测评题库
- 新编酒水知识与调酒
- 电网两票培训课件
- 班级管理《班主任经验交流》课件
- 预防机车车辆伤害培训课件
- 《土地集约利用》课件
- 2024老旧小区改造质量验收规范
- 小学英语(完整版)现在进行时练习题附答案
- 《画几何图形》教学课件
评论
0/150
提交评论