VHDL设计进阶之第四讲.ppt
文本预览下载声明
1.函数首——在程序包中定义函数必须有 FUNCTION 函数名(参数表) RETURN 数据类型; --函数首 函数名可以是普通的标识符,也可以是运算符(这时必须加上双引号)。 如:FUNCTION * (A,B:INTEGER) RETURN INTEGER;--注意函数名*要用引号括住 2. 函数体 FUNCTION 函数名(参数表) RETURN 数据类型 IS --函数体开始 [说明部分;] BEGIN 顺序语句; END FUNCTION 函数名; --函数体结束 函数体包括对数据类型、常数、变量等的局部说明以及用以完成规定算法或转换的顺序语句,并以关键词END FUNCTION 以及函数名结尾。一旦函数被调用,就将执行这部分语句。 LIBRARY IEEE; -- 函数应用实例 USE IEEE.STD_LOGIC_1164.ALL; USE WORK.packexp.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 IS BEGIN out1 = max(dat1,dat2); --用在赋值语句中的并行函数调用语句 PROCESS(dat3,dat4) BEGIN out2 = max(dat3,dat4); --顺序函数调用语句 END PROCESS; END; 函数语法小结 1、将函数定义在程序包中,函数首和体要分开放。 2、函数首放在程序包首中,函数体放在程序包体中。 3、在一个实体中引用程序包中的函数,需要在实体开头打开对应的库和程序包。 4、在设计实体中调用函数时,可能是在并行语句中调用,也可能是在顺序语句中调用。 5.4.3 过程(PROCEDURE) 1.过程首 PROCEDURE 过程名(参数表); --过程首 参数表用于对常数、变量和信号三类数据对象目标作出说明,并用关键词IN、OUT和INOUT定义这些参数的工作模式,即信息的流向。 PROCEDURE PRO1(VARIABLE A,B:INOUT REAL); PROCEDURE PRO2 (CONSTANT A1:IN INTEGER; VARIABLE B1:OUT INTEGER); PROCEDURE PRO3 (SIGNA S1:INOUT BIT); 一般,参数表中信号有三种模式IN、OUT和INOUT; 如果只定义IN模式而未定义目标参数类型,则默认为 常数量; 如果只定义了INOUT或OUT,则默认目标参数类型是 变量。 2.过程体 PROCEDURE 过程名(参数表) IS --过程体开始 [说明部分;] BEGIN 顺序语句; END PROCEDURE 过程名; --过程体结束 过程体的顺序语句部分可以包含任何顺序执行的语句,包括WAIT语句。但如果一个过程是在进程中调用的,且这个进程已列出了敏感参量表,则不能在此过程中使用WAIT语句。 5.4.4 重载过程(OVERLOADED PROCEDURE) 两个或两个以上有相同的过程名和互不相同的参数数量及数据类型的过程称为重载过程。对于重载过程,也是靠参量类型来辨别究竟调用哪一个过程的。 常用的预定义的程序包 1) STD_LOGIC_1164程序包 它是IEEE库中最常用的程序包,是IEEE的标准程序包。 2) STD_LOGIC_ARITH程序包 它预先编译在IEEE库中,是Synopsys公司
显示全部