第9讲VHDL语言子程序ppt课件.ppt_第1页
第9讲VHDL语言子程序ppt课件.ppt_第2页
第9讲VHDL语言子程序ppt课件.ppt_第3页
第9讲VHDL语言子程序ppt课件.ppt_第4页
第9讲VHDL语言子程序ppt课件.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

电子设计自动化技术 第9讲VHDL语言子程序 子程序 子程序是在主程序调用它以后能将结果返回主程序的程序模块 它可以反复调用 方便程序设计 VHDL子程序模块 由顺序语句构成 每调用一次子程序都意味着增加了一个硬件电路模块 因此 在实际使用时 要密切关注和严格控制子程序的调用次数 子程序通常放在程序包中 也可放在结构体和进程中 子程序 函数 Function 过程 Procedure 程序包 程序包也叫包集合 主要用来存放各个设计都能共享的数据类型定义 常量定义 子程序定义 信号定义及元件定义等部分 设计者使用时要用USE语句进行说明 程序包 程序包的格式 PACKAGE包集合名IS 说明语句 END包集合名 PACKAGEBODY包集合名IS 说明语句 END包集合名 定义子程序 实现子程序 程序包首 程序包体 程序包 PACKAGESTD LOGIC 1164IS TYPEstd logic vectorISARRAY NATURALRANGE OFstd logic FUNCTION and l r std logic vector RETURNstd logic vector FUNCTION or l r std logic vector RETURNstd logic vector ENDSTD LOGIC 1164 PACKAGEBODYSTD LOGIC 1164IS FUNCTION and l r std logic vector RETURNstd logic vectorIS Begin End and ENDSTD LOGIC 1164 函数 Function 函数语句的作用是输入若干参数 通过函数运算 最后返回一个值 函数可以重复使用 相当于其他高级语言的函数 函数仅返回一个值 函数中至少有一条返回语句 函数首函数体 函数 函数 Function Function函数名 参数表 Return数据类型 Function函数名 参数表 Return数据类型IS说明部分Begin顺序语句ENDFunction函数名 函数首在程序包首中定义 函数体在程序包体中定义 函数通常定义在程序包中 也可放在结构体和进程中 在结构体和进程中定义时 仅需定义函数体 定义的位置不同 其使用的范围也不同 函数 Function Function函数名 参数表 Return数据类型 参数只能是IN模式 用来定义输入值 参数只能是信号 signal 或常数 constant 若无特殊说明 参数被默认为常数 数据类型只能是非限制形式 不能使用STD LOGIC VECTOR 0TO7 INTEGERRANGE20DOWNTO1 例 FUNCTIONmax a b integer RETURNinteger FUNCTION xor l r std logic vector RETURNstd logic vector FUNCTIONd2 signala b std logic RETURNstd logic LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL PACKAGEhanshuIS 定义程序包FUNCTIONmax a b INSTD LOGIC VECTOR 定义函数首RETURNSTD LOGIC VECTOR END PACKAGEBODYhanshuISFUNCTIONmax a b INSTD LOGIC VECTOR 定义函数体RETURNSTD LOGIC VECTORISBEGINIFa bTHENRETURNa RETURN返回语句ELSERETURNb ENDIF ENDFUNCTIONmax 结束FUNCTION语句END 结束PACKAGEBODY语句 函数定义实例 程序包中 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL USEWORK hanshu ALL ENTITYaxampISPORT dat1 dat2 INSTD LOGIC VECTOR 3DOWNTO0 dat3 dat4 INSTD LOGIC VECTOR 3DOWNTO0 out1 out2 OUTSTD LOGIC VECTOR 3DOWNTO0 ENDaxamp ARCHITECTUREbhvOFaxampISBEGINout1 max dat1 dat2 PROCESS dat3 dat4 BEGINout2 max dat3 dat4 ENDPROCESS END 函数应用实例 声明程序包 并行函数调用 顺序函数调用 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL USEWORK hanshu ALL ENTITYaxampISPORT dat1 dat2 INSTD LOGIC VECTOR 3DOWNTO0 dat3 dat4 INSTD LOGIC VECTOR 3DOWNTO0 out1 out2 OUTSTD LOGIC VECTOR 3DOWNTO0 ENDaxamp ARCHITECTUREbhvOFaxampISBEGINout1dat3 b dat4 ENDPROCESS END 函数应用实例 位置映射 名称映射 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYaxampISPORT dat1 dat2 INSTD LOGIC VECTOR 3DOWNTO0 dat3 dat4 INSTD LOGIC VECTOR 3DOWNTO0 out1 out2 OUTSTD LOGIC VECTOR 3DOWNTO0 ENDaxamp ARCHITECTUREbhvOFaxampISFUNCTIONmax a b INSTD LOGIC VECTOR 定义函数体RETURNSTD LOGIC VECTORISBEGINIFa bTHENRETURNa RETURN返回语句ELSERETURNb ENDIF ENDFUNCTIONmax 结束FUNCTION语句BEGINout1 max dat1 dat2 out2 max dat3 dat4 END 函数定义 结构体中 实例 定义在结构体仅能被该结构体使用 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL PACKAGEhanshuIS 定义程序包FUNCTIONmax a b INSTD LOGIC VECTOR 定义函数首RETURNSTD LOGIC VECTOR END PACKAGEBODYhanshuISFUNCTIONmax a b INSTD LOGIC VECTOR 定义函数体RETURNSTD LOGIC VECTORISBEGINIFa bTHENRETURNa RETURN返回语句ELSERETURNb ENDIF ENDFUNCTIONmax 结束FUNCTION语句END 结束PACKAGEBODY语句 练习 请大家设计函数 数据比较 相等为1 不等为0 过程语句的作用和函数类似 但过程参数有输入 输出 比函数更为灵活 过程也以重复使用 相当于其他高级语言的子程序 过程可以返回多个值 也可以不返回值 过程首过程体 过程 过程 Procedure 过程 Procedure Procedure过程名 参数表 Procedure过程名 参数表 IS说明部分Begin顺序语句ENDProcedure过程名 过程首在程序包首中定义 过程体在程序包体中定义 过程通常定义在程序包中 也可放在结构体和进程中 在结构体和进程中定义时 仅需定义过程体 定义的位置不同 其使用的范围也不同 参数有常数 变量 信号 需明确说明 用关键字IN OUT INOUT定义参数信息流向 参数无特别说明 IN作为常数对待 只说明OUT INOUT 作为变量对待 信号必须明确用关键字SIGNAL声明 数据类型只能是非限制形式 不能使用STD LOGIC VECTOR 0TO7 INTEGERRANGE20DOWNTO1 例 PROCEDUREPROG1 SIGNALa b c INOUTSTD LOGIC VECTOR PROCEDUREPROG2 CONSTANTa INBIT VARIABLEb INOUTBIT SIGNALc OUTBIT PROCEDUREPROG3 a INBIT b INOUTBIT c OUTBIT 过程 Procedure Procedure过程名 参数表 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL PACKAGEhanshuIS 定义程序包proceduremax signala b INSTD LOGIC VECTOR signalc outstd logic vector 定义过程首END PACKAGEBODYhanshuISproceduremax signala b INSTD LOGIC VECTOR 定义过程体signalc outstd logic vector isBEGINc a if a b thenc b endif ENDproceduremax ENDhanshu 结束PACKAGEBODY语句 过程定义 程序包中 实例 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL USEWORK hanshu ALL ENTITYaxampISPORT dat1 dat2 INSTD LOGIC VECTOR 3DOWNTO0 dat3 dat4 INSTD LOGIC VECTOR 3DOWNTO0 out1 out2 OUTSTD LOGIC VECTOR 3DOWNTO0 END ARCHITECTUREbhvOFaxampISBEGINmax dat1 dat2 out1 PROCESS dat3 dat4 BEGINmax dat3 dat4 out2 ENDPROCESS END 过程应用实例 声明程序包 并行过程调用 顺序过程调用 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYaxampISPORT dat1 dat2 INSTD LOGIC VECTOR 3DOWNTO0 dat3 dat4 INSTD LOGIC VECTOR 3DOWNTO0 out1 out2 OUTSTD LOGIC VECTOR 3DOWNTO0 END ARCHITECTUREbhvOFaxampISproceduremax signala b INSTD LOGIC VECTOR 定义过程体signalc outstd logic vector isBEGINc a if a b thenc b endif ENDproceduremax BEGINmax dat1 dat2 out1 max dat3 dat4 out2 END 过程应用实例 结构体中定义仅能被该结构体使用 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL PACKAGEhanshuIS 定义程序包proceduremax signala b INSTD LOGIC VECTOR signalc outstd logic vector 定义过程首END PACKAGEBODYhanshuISproceduremax signala b INSTD LOGIC VECTOR 定义过程体signalc outstd logic vector isBEGINc a if a b thenc b endif ENDproceduremax END 结束PACKAGEBODY语句 练习 请大家设计过程 数据比较 相等为1 不等为0 函数与过程对比 过程可以返回多值 函数只能返回一个值 过程的参数有常量 IN 变量 信号 IN OUT INOUT 函数的参数只有常量 信号 为IN 默认 函数和过程均能重复产生新的电路模块 WORK库中自定义程序包的使用 建立工作目录 建立设计项目 在同一工作目录下建立项目VHDL设计文件建立自定义程序包 在同一工作目录下将自定义程序包加入到设计项目 WORK库中自定义程序包的使用 建立工作目录 建立设计项目 在同一工作目录下 WORK库中自定义程序包的使用 建立项目VHDL设计文件 WORK库中自定义程序包的使用 建立自定义程序包 在同一工作目

温馨提示

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

评论

0/150

提交评论