




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、8.3子程序是一个VHDL程序模块,可以更有效地完成重复性工作。它只能由子程序调用,并与子程序的接口端口通信。它在包、结构和过程中定义,具有重载的特点,但参数类型和返回值数据类型不同。有两种类型:过程和函数,子程序有两种类型:过程和函数。过程调用可以得到多个返回值;该程序有输入参数、输出参数和双向参数。过程通常被认为是一个语句结构,也就是说,当调用过程语句时,它表现为一个完整的语句。函数参数表中的所有参数都是输入参数,函数的每次调用只有一个返回值,所以函数调用通常是语句中表达式的一部分。8.3.1函数,在VHDL中有许多函数形式,如用户定义的不同用途的函数和预定义的带有程序中现成的特定函数的函
2、数。功能可分为功能头和功能体。如果函数只在结构中定义和使用,它只需要函数体部分,但是函数的定义必须放在结构的定义语句部分。如果将已定义的功能放入包中,则功能体和功能资本应该具备;功能头放在包头中,功能体放在包体中。函数语句表达式格式:函数头描述结构:函数名(参数表)返回数据类型-函数头定义函数头定义只包括函数名(参数表)和返回数据类型,一般放在包头,包头是包中很多函数的索引。除上述部分外,没有具体的描述语句和算法,函数的详细描述放在函数体中。图书馆。使用ieee.std_logic_1164.all。包包轴-定义包函数最大值(a,标准逻辑向量中的b:),返回标准逻辑向量;-定义第一个函数fun
3、cl (a,b,c:real)返回real-定义功能头功能 (a,b:std _ logic)返回STD _ logic-定义功能头端;函数体描述结构:函数函数名(参数表)返回数据类型为-函数体部分定义描述开始顺序语句;返回;结束函数函数名称;函数体的第一部分类似于函数头的定义,除了最后还有一个“是”。图书馆。使用ieee.std_logic_1164.all。请使用ieee.std_logic_arith.all。包包轴-定义包函数最大值(a,标准逻辑向量中的b:),返回标准逻辑向量;-定义第一个函数funcl (a,b,c:real)返回real-定义功能头功能 (a,b:std _ lo
4、gic)返回STD _ logic-定义功能头端;包体包轴-包体函数最大值(l,r:整数)返回整数is-函数体变量result:整数的定义。如果“左”开始,则结果:=左;否则结果:=R;结束if;返回结果;结束功能最大值;结束;从硬件的角度来看,子程序的调用类似于组件模块的实例化。VHDL合成器为子程序(函数和过程)的每次调用生成一个电路逻辑块。区别在于组件的实例化将创建一个新的设计级别,而子例程调用只对应于当前级别的一部分。图书馆。-调用函数useieee . STD _ logic _ 1164 . all usework . pack exp . all;实体axamp是端口(std_l
5、ogic_vector中的dat1,dat2:向下到0);std_logic_vector中的dat3、dat 4:(3 down to 0);out1,out 2: out STD _ logic _ vector(3 downto 0);结束。axamp的架构bhv为begin out1=max(dat1,dat 2);-并行函数调用语句过程(dat 3,dat 4) begin out2=在赋值语句中使用的max (dat 3,dat 4 );-序列函数调用语句结束进程;结束。图书馆。使用ieee.std_logic_1164.all。实体函数是端口(std_logic_vector中的
6、a :(0到2);m: out std_logic_vector (0至2);结束实体功能;函数萨姆(x,y,z:std _ logic)返回标准逻辑的体系结构演示是定义函数开始返回(x和y)或z;结束功能sam。过程(a)开始m(0)=sam(a(0),a(1),a(2);-调用函数m(1)=sam(a(2),a(0),a(1);-调用函数m(2)=sam(a(1),a(2),a(0);-调用函数结束进程;最终架构演示;在这个例子中,没有函数头,函数的重载是VHDL语言中非常重要的语法点,这在VHDL语言中几乎随处可见。由于VHDL语言是一种强数据类型语言,不同的数据类型不能直接参与操作,有
7、时在程序设计中需要进行这种操作,因此需要调用各种操作函数来实现操作符的重载。函数重载有两种:基本函数重载和运算符重载。基本函数被重载,具有相同的函数名和不同数量或类型的函数参数,当调用一个函数时,它们被视为两个不同的函数。书中P218例8-6,运算符的重载,即在函数名为“function”的关键字后用双引号括起来的运算符,与基本函数重载在本质上是一致的。函数名(运算符)相同,但函数参数或参数类型的数量不同,因此在调用函数时,它们被视为两个不同的函数。如果“”运算符具有不同的参数或不同的数据类型,它将执行不同的操作。运算符重载函数的结尾使用“end”直接,没有函数名。书中P230的示例8-7,如
8、果程序中使用了“、“-”和“*”等运算符,通常需要用use语句打开包,例如:USE IEEE。STD_LOGIC_UNSIGNED。全部;使用重载运算符,库ieee使用ieee.std_logic_1164。全部;请使用ieee.std_logic_unsigned.all。-打开操作员过载包实体t减是端口(a:中的STD _ logic _ vector (3减0);标准_逻辑中的b:c : out STD _ logic _ vector(4 down to 0);d : out STD _ logic _ vector(3 down to 0);结束tminustminus的架构是以c=
9、a b开头的;d=a-b;结束阿米纳斯;重载运算符调用,8.3.3过程,过程是子程序的另一种形式,类似于函数,过程也可用于高级设计结构,如计算、类型转换、运算符重载和逻辑元素设计。在过程结构中,如果一个过程被放入一个包中,应该有一个过程头,过程头的结构如下:过程名(参数表)-过程头在过程或结构中不需要定义过程头!在VHDL语言中,过程体语句的结构如下:过程过程名(参数1,参数2,)是定义语句:(变量的定义等。)-过程的描述部分开始顺序处理语句;-流程描述部分中的结束流程名称;流程标题由流程名称和参数表组成。参数表可以解释三种类型的数据对象:常量、变量和信号,并用关键字in、out和inout定
10、义这些参数的模式,即信号的流向。如果未指定,则默认为in。例如:程序P1(变量m,n: inout整数);程序p2(整数常数a1 :变量B1 : out STD _ logic _ vector);程序p3(信号ma :位);通常,参数表中可以定义三种参数模式,即输入、输出和输入输出。如果只定义了in模式,但没有定义目标参数类型,则默认值为常量;如果只定义了inout或out,则默认的目标参数类型是可变的。过程体、过程和函数由顺序语句组成,过程调用启动过程的执行。然而,与函数不同,过程参数表可以是输入参数、输出参数或双向参数。流程主体中的描述部分只是部分的,各种定义只能应用于流程主体的内部。在
11、不同的调用环境中,有两种不同的方法调用过程:顺序语句或并行语句。对于前者,在一般顺序语句的自然执行过程中,如果一个过程被执行,它就属于顺序语句,因为此时它只相当于一个顺序语句的执行;对于后者,一个过程相当于一个小过程。当流程处于并行语句环境中,并且流程主体中定义的输入或输出的目标参数(即数据对象、变量、信号和常量)发生变化时,流程的调用将被启动,此时的调用属于并行语句。过程和函数一样,可以重复调用或嵌入。顺序过程调用语句,过程调用是替换过程中的形式参数并以下列格式执行它们的过程:过程名(形式参数名=形式参数表达式,形式参数名=形式参数表达式);参数表达式被称为参数,它可以是一个特定的值或一个标
12、识符,它是调用程序中过程参数的接收者。在这种调用格式中,参数名是要调用的当前过程引用的参数名,即与参数表达式关联的参数名。被调用进程的形式参数名和调用语句中的实际参数表达式之间有两种对应关系:位置关联方法和名称关联方法。位置关联法可以省略形式参数的名称,但必须注意参数表中形式参数的位置与实际参数的对应关系。名称关联方法不需要形式和实际参数的对应关系,但是类型参数和实际参数的名称应该同时写出,并用“=”进行关联。过程的调用将分为以下三个步骤:(1)首先,将输入和输出模式的参数值分配给要调用的过程中与之对应的参数。(2)然后执行该过程。(3)最后,将进程中输出和输入模式的形式参数值分配给相应的实际
13、参数,并带回调用程序。过程的定义和调用,图书馆ieee使用IEEE . STD _ logic _ 1164 . all;实体tproc是端口(位_vector(3 downto 0)中的a,b :);c,d : out bit _ vector(3 down to 0);结束tproc。tproc的体系结构bhv为过程prg1(变量ma: inout位向量(3向下至0)为开始情况ma为0000=ma :=0101当0101=ma :=0000时;当其他=ma :=1111时;结束案例;结束程序prg1begin,process (a,b)变量MB : bit _ vector(3 down
14、to 0);begin mb:=b。PRG 1(MB);d=mb结束流程;结束bhv。prg1的参数是一个变量,此过程的调用只能出现在包含顺序语句的结构中,如process,并且只有在这样的结构中,变量才能与之匹配,如示例中定义的变量mb。并行过程调用语句,它可以作为并行语句直接出现在结构或块语句中。并行过程调用语句的功能等同于包含相同过程调用语句的进程。语句的格式如下:进程名(关联参数名);并行进程的调用通常用于获取被调用进程的多个并行复制电路。程序加法器(信号a,标准逻辑中的b:信号sum : out STD _ logic);加法器(a1,b1,sum 1);-调用并行进程,其中a1、b1和sum1是分别对应于a、b和sum的相关参数名进程(c1、C2)-进程语句执行开始加法器(C1、C2、S1);-顺序过程调用,其中c1、c2和s1分别对应于相关联的参数名称结束进程a、b和sum流程结构中的语句按顺序执行。调用方应该在调用流程之前将初始值传递给流程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自然语言及语音处理项目式教程 实训指导 实训1 配置NLP环境
- 分析师预期选股策略月报:分析师预期修正选股策略今年相对中证全指超额3.06
- 2025以色列与伊朗冲突全面解析课件
- 氢能源未来2025年加氢站建设成本效益分析与布局指南报告
- 2025年家具制造业个性化定制生产模式市场风险预警报告
- 2025年煤炭清洁燃烧技术产业链上下游协同发展报告
- 工业互联网平台安全多方计算在智能仓储物流中的应用报告
- 教育大数据分析2025年:教育资源配置优化与教育公平研究报告
- 工业互联网平台网络安全态势感知技术在电力行业的应用与优化报告
- 工业互联网平台安全多方计算技术:2025年网络安全风险预警与应对策略研究报告
- 处方点评工作表模板
- 贵阳市南明区吉祥宠物医院建设项目环评报告
- 智能制造装备及系统 配套课件
- 辽宁省沈阳市沈北新区2022-2023学年六年级下学期期末考试语文试题
- 北师大版七年级上册数学27有理数的乘法课件(2课时)
- 安全生产标准化推进计划 模板
- 2022年咖啡师资格证考试参考题库及答案
- 新视野大学英语第三版第一册电子书
- 野生动物管理学知到章节答案智慧树2023年东北林业大学
- 2023年黑龙江省文化和旅游系统事业单位人员招聘笔试模拟试题及答案解析
- 口才与演讲实训教程智慧树知到答案章节测试2023年湖南师范大学
评论
0/150
提交评论