欢迎来到天天文库
浏览记录
ID:55599499
大小:148.50 KB
页数:46页
时间:2020-05-20
《VHDL数字电路设计教程第10讲 函数和过程.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库。
1、第11章函数和过程函数(function)和过程(procedure)统称为子程序(subprogram)。子程序与进程的相同点:内部包含的都是顺序描述代码,使用相同的顺序描述语句,如if,case和loop(wait语句除外)。子程序与进程语句的区别:在使用目的上:进程可以直接在主代码中使用;而子程序一般在建库时使用,以便代码重用和代码共享。当然子程序也是可以在主代码中直接建立和使用的。在使用方法上:1、子程序不能从结构体的其余部分直接读写信号,所有通信都是通过子程序的接口来完成的;进程可以直接读写结构体内的其它信号。2、子程序中不允许使用wait语句。1子程序的存放位
2、置:Package、Architecture、Process子程序与硬件规模:与普通软件中子程序调用的区别:普通软件子程序调用增加处理时间;VHDL中每调用一次子程序,其综合后都将对应一个相应的电路模块。子程序调用次数与综合后的电路规模成正比。设计中应严格控制子程序调用次数。知识点补充(1):2子程序的类型:过程(Procedure):0个或多个in、inout、或out参数。可获得多个返回值。函数(Function):0个或多个in参数,一个return值。只能获得一个返回值。过程可作为一种独立的语句结构而单独存在,函数通常作为表达式的一部分来调用。子程序包含两部分:子
3、程序声明和子程序主体。知识点补充(2):3每次调用子程序时,都要首先对其进行初始化,即一次执行结束后再调用需再次初始化。因此,子程序内部的值是不能保持的。知识点补充(3):411.1函数(function)一个函数就是一段顺序描述的代码。对于一些经常遇到的具有共性的设计问题,如数据类型转换、算术运算等,希望将其功能实现的代码被共享和重用,使主代码简洁并易于理解---函数。注意:由于在于每次调用函数时,都要首先对其进行初始化,即一次执行结束后再调用需再次初始化,即函数内部的值是不能保持的,因此在函数中禁止进行信号声明和元件实例化。函数的使用过程:先创建函数,再调用函数。5函
4、数的创建:Function函数名[<参数列表>]return数据类型IS[声明]BEGIN(顺序描述代码)END函数名;<(输入)参数列表>=[constant]常量名:常量类型;<(输入)参数列表>=SIGNAL信号名:信号类型;参数列表指明函数的输入参数:输入参数的个数是任意的,也可以没有参数;输入参数的类型:变量不能作为参数,可以是常量和信号,语法如下:6在VHDL语言中,FUNCTION语句只能计算数值,不能改变其参数的值,所以其参数的模式只能是IN,通常可以省略不写。FUNCTION的输入值由调用者拷贝到输入参数中,如果没有特别指定,在FUNCTION语句中按常
5、数或信号处理。因此输入参数不能为变量类型。另外,由于FUNCTION的输入值由调用者拷贝到输入参数中,因此输入参数不能指定取值范围。7函数的输出:使用RETURN语句,语法结构如下:return[表达式];return语句只能用于子程序(函数或过程)中,并用来终止一个子程序的执行。当用于函数时,必须返回一个值。返回值的类型由return后面的数据类型指定。8创建一个函数的例子:创建名为f1的函数,有3个输入参数a,b,c,其中a,b是常量(关键字constant可以省略),c为信号。输出参数(只能有一个),是boolean类型的。functionf1(a,b:intege
6、r;signalc:std_logic_vector)returnbooleanISBEGIN(顺序描述代码)ENDf1;不能指定范围不能有变量类型9函数的调用:函数可以单独构成表达式,也可以作为表达式的一部分被调用。例:x<=conv_integer(a);--单独构成表达式;ifx>max(a,b)....--表达式的一部分;10例11.1:positive_edge()函数时钟上升沿检测函数,可用于D触发器的设计:---------------函数的创建-------------------functionpositive_edge(signals:std_logi
7、c)returnbooleanisbeginreturn(s’eventands=‘1’);endpositive_edge;----------------函数的调用---------------........ifpositive_edge(clk)then....11例11.2:conv_integer()函数,将std_logic_vector类型的数据转换为integer类型,可处理任意宽度和方向的输入矢量:---------------函数的创建-------------------functionconv_int
此文档下载收益归作者所有