子程序过程和函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
– 例:3-8位译码器与8-3位编码器的过程描述和 复用 描述程序
调用
译码器的调用: dec_enc(“101”,‟1‟,‟0‟,‟0‟,bit8); Y<= bit8; 调用上述过程,把位矢量“11011111”由 bit8传递给输出y。 编码器调用: dec_enc(“11011111”,bit3); Y<= bit3; 把矢量“101”由bit3赋给输出Y。
函数
• • • • 能和运算符一起参加运算的广义表达式 用顺序语句实现 先定义后调用 包括函数说明和函数体
– 函数说明(外观),放在包的说明部分,便于 外部调用
– 函数体,具体描述过程的功能,放在包、进程 和结构体中
• 函数说明:
函数的格式
function 函数名 (形参表) return 数据类型;
• 过程体:
Procedure <过程名>(参数表) is 说明部分; Begin 顺序语句; [return;] --与c语言不一样 End procedure 过程名;
• 过程体用于具体描述过程的功能,可放在 package体中 • Return语句为可选项,用于提前结束进程 体。如果没有return,则执行完所有语句。
• 函数体:
function 函数名 (形参表) return 数据类型 is 说明部分; Begin 顺序语句; return; End function 函数名; • 函数名可以是标识符或“运算符”(运算符重载,给运算符 以新的定义) • 函数的参数都是输入值,不必指定端口方向 函数
函 Function max(a,b: std_logic_vector) 数 Return std_logic_vector; 声 Function “*”(a,b: integer) 明 Return integer; 与 End; 定 Package body packexp is 义 Function max(a,b: std_logic_vector)
子程序过程和函数
子程序:代码的复用
• 实现重复出现的硬件结构,节省代码 • 子程序用顺序语句编写
– 过程 – 函数
• 过程通过参数表与外界交换数据 • 函数通过参数接收外部数据,通过返回 值向Biblioteka Baidu部反馈数据
函数 过程
过程语句 procedure
• 子程序的一种 • 目的:
• 包括过程说明和过程体
– 把复杂的进程分块 – 把可复用的行为单独描述供调用 – 过程说明(外观),放在包的说明部分,便 于外部调用 – 过程体,具体描述过程的功能,可放在包、 进程和结构体中
函数的重载
• 函数名相同,形参数据类型不同
• 方便使用同一函数名定义多个相似功能 的函数 • 与过程的重载相似,参考课本P178程序
过程与函数调用时的参数映射
函数的调用
直接以函数名(实参表)作为表达式使用 Use work.packexp.all; …. Architecture … begin out1<=max(dat1,dat2); process(dat3,dat4) begin out2<= max(dat3,dat4); end process End;
过程调用环境的顺序与并行
• 在顺序语句中调用过程语句
– 顺序执行 – 可视为一条复合语句
• 在并行语句中调用过程语句
– 整体与其他语句并行执行 – 由in或inout类型的参数触发,执行调用
过程的复用(重载)
• 重载:具有不同参数数目或不同数据 类型的同名过程,称重载过程。
– 与oop中的重载类似。 – Vhdl数据类型很难混用,故不同数据类 型的复用很少,多为不同参数数目的过 程复用。
四输入与非门过程描述: Package a_pack is procedure NAnd(signal a,b,c,d: in std_logic; signal y: out std_logic; constant delay :in time); end pack; …… Package body a_pack is procedure NAnd(signal a,b,c,d: in std_logic; signal y: out std_logic; constant delay :in time) is begin y<=not(a and b and c and d) after delay; return; --可选项 End NAnd; End a_pack;
Package packexp is
Return std_logic_vector is begin if a>b then return a; else return b; 如果调用函数的进程 end if; 含有敏感信号表,函 end function max; 数中就不能使用wait End;
过程调用
• 先定义后使用 • 调用: 过程名(参数表);
例:调用四输入与非门1 Library IEEE; use ieee.std_logic_1164.all; use work a_pack.all; --work为当前库 signal a: std_logic:=1; 相当于执行以下程序: signal b: std_logic:=0; signal c: std_logic:=1; Y<=„1‟ after 10ns; signal d: std_logic:=0; 注意实参与形参的一致 signal y: std_logic; constant delay:time:=10ns; …… nand(a,b,c,d,y,delay);
• 过程说明: Procedure 过程名 (参数表);
– 过程名:标识符 – 参数表:形式参数及其端口类型和数据类型。 – 若端口类型为in,而未说明常量还是变量,默 认为常量 – 若端口类型为inout或out,默认为变量 – 若参数是信号,需特别说明。 如:procedure and2(signal a,b: in std_logic signal c: out std_logic);
调用
译码器的调用: dec_enc(“101”,‟1‟,‟0‟,‟0‟,bit8); Y<= bit8; 调用上述过程,把位矢量“11011111”由 bit8传递给输出y。 编码器调用: dec_enc(“11011111”,bit3); Y<= bit3; 把矢量“101”由bit3赋给输出Y。
函数
• • • • 能和运算符一起参加运算的广义表达式 用顺序语句实现 先定义后调用 包括函数说明和函数体
– 函数说明(外观),放在包的说明部分,便于 外部调用
– 函数体,具体描述过程的功能,放在包、进程 和结构体中
• 函数说明:
函数的格式
function 函数名 (形参表) return 数据类型;
• 过程体:
Procedure <过程名>(参数表) is 说明部分; Begin 顺序语句; [return;] --与c语言不一样 End procedure 过程名;
• 过程体用于具体描述过程的功能,可放在 package体中 • Return语句为可选项,用于提前结束进程 体。如果没有return,则执行完所有语句。
• 函数体:
function 函数名 (形参表) return 数据类型 is 说明部分; Begin 顺序语句; return; End function 函数名; • 函数名可以是标识符或“运算符”(运算符重载,给运算符 以新的定义) • 函数的参数都是输入值,不必指定端口方向 函数
函 Function max(a,b: std_logic_vector) 数 Return std_logic_vector; 声 Function “*”(a,b: integer) 明 Return integer; 与 End; 定 Package body packexp is 义 Function max(a,b: std_logic_vector)
子程序过程和函数
子程序:代码的复用
• 实现重复出现的硬件结构,节省代码 • 子程序用顺序语句编写
– 过程 – 函数
• 过程通过参数表与外界交换数据 • 函数通过参数接收外部数据,通过返回 值向Biblioteka Baidu部反馈数据
函数 过程
过程语句 procedure
• 子程序的一种 • 目的:
• 包括过程说明和过程体
– 把复杂的进程分块 – 把可复用的行为单独描述供调用 – 过程说明(外观),放在包的说明部分,便 于外部调用 – 过程体,具体描述过程的功能,可放在包、 进程和结构体中
函数的重载
• 函数名相同,形参数据类型不同
• 方便使用同一函数名定义多个相似功能 的函数 • 与过程的重载相似,参考课本P178程序
过程与函数调用时的参数映射
函数的调用
直接以函数名(实参表)作为表达式使用 Use work.packexp.all; …. Architecture … begin out1<=max(dat1,dat2); process(dat3,dat4) begin out2<= max(dat3,dat4); end process End;
过程调用环境的顺序与并行
• 在顺序语句中调用过程语句
– 顺序执行 – 可视为一条复合语句
• 在并行语句中调用过程语句
– 整体与其他语句并行执行 – 由in或inout类型的参数触发,执行调用
过程的复用(重载)
• 重载:具有不同参数数目或不同数据 类型的同名过程,称重载过程。
– 与oop中的重载类似。 – Vhdl数据类型很难混用,故不同数据类 型的复用很少,多为不同参数数目的过 程复用。
四输入与非门过程描述: Package a_pack is procedure NAnd(signal a,b,c,d: in std_logic; signal y: out std_logic; constant delay :in time); end pack; …… Package body a_pack is procedure NAnd(signal a,b,c,d: in std_logic; signal y: out std_logic; constant delay :in time) is begin y<=not(a and b and c and d) after delay; return; --可选项 End NAnd; End a_pack;
Package packexp is
Return std_logic_vector is begin if a>b then return a; else return b; 如果调用函数的进程 end if; 含有敏感信号表,函 end function max; 数中就不能使用wait End;
过程调用
• 先定义后使用 • 调用: 过程名(参数表);
例:调用四输入与非门1 Library IEEE; use ieee.std_logic_1164.all; use work a_pack.all; --work为当前库 signal a: std_logic:=1; 相当于执行以下程序: signal b: std_logic:=0; signal c: std_logic:=1; Y<=„1‟ after 10ns; signal d: std_logic:=0; 注意实参与形参的一致 signal y: std_logic; constant delay:time:=10ns; …… nand(a,b,c,d,y,delay);
• 过程说明: Procedure 过程名 (参数表);
– 过程名:标识符 – 参数表:形式参数及其端口类型和数据类型。 – 若端口类型为in,而未说明常量还是变量,默 认为常量 – 若端口类型为inout或out,默认为变量 – 若参数是信号,需特别说明。 如:procedure and2(signal a,b: in std_logic signal c: out std_logic);