- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七讲VHDL子程序
第7讲 VHDL子程序
子程序和进程(Process)一样,采用顺序描述来定义算法。和进程不同的是,子程序不可以直接从结构体的其他部分对信号进行读写操作,所有的通信都必须通过子程序的接口完成。由于可以在结构体的不同部分调用子程序完成重复的计算,因此子程序显得非常的实用。和元件例化语句不同的是,当子程序被实体或者其他子程序调用的时候,并不会产生新的设计层次,但是可以通过手工定义的方法增加设计层次。
子程序由过程(PROCEDURE)和函数(FUNCTION)组成。函数只能用以计算数值,而不能用以改变与函数形参相关的对象的值。因此,函数的参量只能是方式为IN的信号与常量;而过程的参量可以为IN, OUT, INOUT方式(注意:不能为BUFFER方式)。过程没有返回值,但是可以通过改变过程参数值的方法向过程的调用者传递信息。
函数和过程常见于面向逻辑综合的设计中,主要进行高层次的数值运算或类型转换、运算符重载,也可用来元件例化。
第7讲 VHDL子程序
函数的语法格式:
函数首(一般放在程序包的说明部分):
FUNCTION 函数名 (输入参数表) RETURN 数据类型 ;
函数体:
FUNCTION 函数名 (输入参数表) RETURN 数据类型 IS
[说明语句];
BEGIN
顺序处理语句;
RETURN 返回变量名;
END FUNCTION 函数名 ;
其中输入参数表中的每个参数均应表示为:参数名:数据类型;
函数(Function)
第7讲 VHDL子程序
第7讲 VHDL子程序
例1:函数举例。此函数完成取反功能。
PACKAGE declare IS --程序包首
TYPE three_level_logic IS (0,1,Z);
FUNCTION invert(s :three_level_logic) RETURN three_level_logic ; --函数首
END PACKAGE declare;
PACKAGE BODY declare IS --程序包体
FUNCTION invert(s :three_level_logic) RETURN three_level_logic IS –-函数体
VARIABLE temp: three_level_logic ;
BEGIN
CASE s IS --顺序语句
WHEN 0=temp:=1;
WHEN 1=temp:=0;
WHEN Z=temp:=Z;
END CASE;
RETURN temp;
END FUNCTION invert;
END PACKAGE BODY declare;
函数(Function)
第7讲 VHDL子程序
第7讲 VHDL子程序
例1:函数举例。此函数完成取反功能。
USE WORK.declare.ALL;
ENTITY fun_example IS
PORT(x: IN three_level_logic;
y: OUT three_level_logic);
END ENTITY fun_example;
ARCHITECTURE a OF fun_example IS
BEGIN
y=invert(x); --函数的调用! x为in类型
END a;
函数(Function)
第7讲 VHDL子程序
第7讲 VHDL子程序
过程的语法格式:
过程首:
PROCEDURE 过程名 (参数表);
过程体:
PROCEDURE 过程名(参数表)IS
[说明语句];
BEGIN
顺序处理语句;
END PROCEDURE 过程名;
过程 (Procedure)
第7讲 VHDL子程序
第7讲 VHDL子程序
例2:过程举例。此过程返回两数中的较大数。
PACKAGE data_types IS
TYPE data_element IS RANGE 0 TO 3;
TYPE data_array IS ARRAY (1 TO 3) OF data_element;
END data_types;
USE WORK.data_types.ALL;
ENTITY procedure_example IS
PORT( in_array: IN data_array;
文档评论(0)