第9讲 VHDL语言子程序

合集下载

eda技术实用教程(第四版)课件9

eda技术实用教程(第四版)课件9
(1)实验任务1: 基于5E+系统的基本控制演示示例是:/KX_7C5EE+/ EXPERIMENTs/EXP13_COLOR_LCD/ (2)实验任务2: (3)实验任务3: (4)实验任务4: (5)实验任务5: (6)实验任务6: 演示示例:/KX_7C5EE+/DEMOs/EXPL9_Super_Mario2/,和 /DEMOs/EXP7_LCD_light_GAME/。
实验与设计
9-1 乐曲硬件演奏电路设计
(1)实验目的: (2)实验原理:
实验与设计
9-1 乐曲硬件演奏电路设计
(1)实验目的: (2)实验原理:
实验与设计
9-1 乐曲硬件演奏电路设计
(3)实验内容1: (4)实验内容2: (5)实验内容3: (6)实验内容4: (7)实验内容5: (8)实验内容6: (9)实验内容7: (10)实验报告:5E+系统的演示文件: /KX_7C5EE+/EXPERIMENTs/EXP4_Music/。
EDA技术实用教程
第9章 VHDL结构与要素
9.1 实

9.1.1 实体语句结构
9.1 实

9.1.2 参数传递说明语句
9.1 实

9.1.2 参数传递说明语句
9.1 实

9.1.2 参数传递说明语句
9.1 实

9.1.3 参数传递映射语句
9.1 实

9.1.3 参数传递映射语句
9.1 实
3. WORK库
4. VITAL库
9.4 VHDL库
9.4.2 库的用法
9.5 VHDL程序包
9.5 VHDL程序包
9.5 VHDL程序包

VHDL语言及程序设计

VHDL语言及程序设计

建议:VHDL比较严谨,Verilog比较自由,初学 还是用VHDL比较好,初学用Verilog会比较容易 出错
hwadee 2014-7-2 2
VHDL中的注意事项
在VHDL语言中,大小写不加区分,但 在代码中巧妙应用大小写,可以使代码 变得易于阅读和规范 实体名必须与VHDL文件名相同,否则 编译会出错 信号与变量,过程与函数的区分
hwadee
2014-7-2
3
VHDL语言程序的基本构成
库、包集合:用于存放预先编译好的程序包 (PACKAGE)和数据集合体,以便不同 的VHDL设计使用 实体说明:规定设计单元的输入输出接口 信号和引脚 构造体:定义设计单元的具体构造和操作
hwadee
2014-7-2
4
VHDL语言程序的基本构成示例
hwadee
2014-7-2
17
IEEE预定义的标准逻辑位与矢量
STD_LOGIC:工业标准的逻辑类型,取值 为‘0’、‘1’、‘Z’、‘X’(强未知)、‘W’ (弱未知)、‘L’(弱0)、‘H’(弱1)、 ‘—’(忽略)、‘U’(未初始化),只有前 四种具有实际物理意义,其他的是为了与模 拟环境相容才保留的 STD_LOGIC_VECTOR:工业标准的逻辑类 型集,STD_LOGIC的组合
hwadee
2014-7-2
11
ARCHITECTURE的PROCESS子结构
PROCESS中的语句是顺序执行的,一个结构体中可以有多个 PROCESS,它们之间可以通过信号进行通信 PROCESS的启动受敏感信号控制,敏感信号的变化会直接导致 PROCESS的启动
hwadee
2014-7-2

《VHDL语法基础》PPT课件

《VHDL语法基础》PPT课件

(5) 在结构体ART3中,COMPONENT→END COMPONENT 语句结构对所要调用的或门和半加器两元件作了声明 (COMPONENT DECLARATION),并由SIGNAL语句定义了三 个信号D、E和F,作为中间信号转存点,以利于几个器件间的信 号连接。接下去的“PORT MAP( )”语句称为元件例化语句 (COMPONENT INSTANTIATION)。所谓例化,在电路板上, 相当于往上装配元器件;在逻辑原理图上,相当于从元件库中取 了一个元件符号放在电路原理图上,并对此符号的各引脚进行连 线。例化也可理解为元件映射或元件连接,MAP是映射的意思。 例如,语句“U2:H_ADDER PORT MAP(A=>E,B=>CIN, CO=>F,SO=>SUM)”表示将实体H_ADDER描述的元件U2的引 脚信号A、B、CO和SO分别连向外部信号E、CIN、F和SUM。
(2) VHDL具有丰富的仿真语句和库函数,使得在任何大系 统的设计早期,就能查验设计系统的功能可行性,随时可对系 统进行仿真模拟,使设计者对整个工程的结构和功能可行性做 出判断。
(3) VHDL语句的行为描述能力和程序结构,决定了它具 有支持大规模设计的分解和已有设计的再利用功能。符合市场 需求的大规模系统高效、高速的完成必须有多人甚至多个开发 组共同并行工作才能实现,VHDL中设计实体的概念、程序包 的概念、设计库的概念为设计的分解和并行工作提供了有利的 支持。
END ENTITY OR2; --实体OR2的结构体ART1的说明
ARCHITECTURE ART1 OF OR2 IS
BEGIN C<=A OR B; END ARCHITECTURE ART1;
2) 半加器的逻辑描述 -- IEEE库的使用说明

VHDL语言程序及其详细注释

VHDL语言程序及其详细注释
end;实体说明结束 architecture Behave of Mux8 is 实体的结构体名称及其所属关系 begin结构体开始
Y <=A after TDP when sel = ‘1’ else B after TDP; 延时 赋值 end;实体说明结束
if CLK = ‘1’ then Qi <=‘0’ after TRQ 条件 延时 赋值 elsif CLK’EVENT and CLK= ‘1’ 当时钟信号clk发生改变并且clk=1
then Qi <= D after TCQ; end if; end process;进程结束 end;结构体结束
end;实体说明结束 architecture Behave of DFFClr is实体的结构体名称及其所属关系 signal Qi : BIT;定义信号 begin QB <= not Qi ; Q <= Qi 结构体开始 信号赋值 process (CLR, CLK) begin 定义进程并且开始进程
stages: for i in 7 downto 0 generate 整体布局描述
LowBit: if i = 0 generate 局部布局描述
FA:Full_Adder port map (A(0),B(0),Cin,C(0),Sum(0));
end generate;
otherBits : if i /= 0 generate
STAGES: for i in 7 downto 0 generate 整体布局描述 FF:DFFClr port map (Clr,Clk,D(i),Q(i),open); 局部布局描述
end generate; 循环描述结束 end;结构体结束

VHDL语言基础PPT课件

VHDL语言基础PPT课件
程序包结构: 程序包说明(包首) 程序包主体(包体)
第36页/共80页
1、程序包说明(包首)
语法: package 程序包名 is { 包说明项 } end 程序包名;
包声明项可由以下语句组成: use 语句(用来包括其它程序包); 类型说明;子类型说明;常量说明; 信号说明;子程序说明;元件说明。
end 配置名;
第21页/共80页
一个与非门不同实现方式的配置
library ieee; use ieee.std_logic_1164.all; entity nand is
port(a: in std_logic; b: in std_logic; c: out std_logic);
end entity nand; architecture art1 of nand is begin
UNSIGNED,SIGNED和SMALL_INT,并为其定 义了相关的算术运算符和转换函数。 Std_logic_signed 和 Std_logic_Unsigned : 重载了可用于INTEGER型和STD_LOGIC及 STD_LOGIC_VECTOR型混合运算的运算符,并定 义了不同数据类型间的转换函数。
UNSIGNED.CONV_INTEGER; 上例表明,要使用IEEE库中STD_LOGIC_1164包 集合中的所有过程和函数,这里项目名为ALL, 表示包集合中的所有项目都要用。
第35页/共80页
五、程序包(包集合)Package
程序包(Package):将已定义的常数、 数据类型、元件语句、子程序等收集起来组成 一个集合,以便被更多的VHDL设计实体进行访 问和共享。
第31页/共80页
WORK库 WORK库:是用户的VHDL设计的现行工作库; 用于存放用户设计和定义的一些设计单元和程序包; 满足VHDL语言标准,在实际调用中不必以显式说明。

VHDL语言详解

VHDL语言详解

概述(4/4)
VHDL vs. Verilog HDL
USA—IBM,TI,AT&T,INTEL…VHDL; USA—Silicon Valley…Verilog; Europe—VHDL; Japan—Verilog; Korea—70-80%VHDL;
VHDL的一些基本概念
基本概念(1/7)
操作数的类型应该和运算操作符所要求并置一维数组整数和实数包括浮点数整数和实数包括浮点数mod整数rem整数sll逻辑左移bit或布尔型一维数组srl逻辑右移bit或布尔型一维数组sla算术左移bit或布尔型一维数组sra算术右移bit或布尔型一维数组rol逻辑循环左移bit或布尔型一维数组ror逻辑循环右移bit或布尔型一维数组乘方整数算术操作符abs取绝对值整数vhdl语言的运算操作符2等于任何数据类型不等于任何数据类型小于枚举与整数类型及对应的一维数组大于枚举与整数类型及对应的一维数组小于等于枚举与整数类型及对应的一维数组关系操作符大于等于枚举与整数类型及对应的一维数组bitbooleanstdlogibitbooleanstdlogibitbooleanstdlogibitbooleanstdlogibitbooleanstdlogibitbooleanstdlogibitbooleanstdlogi整数符号操作符整数vhdl语言的运算操作符3运算符优先级xnor最低优先级vhdlvhdl语言的运算操作符4norxorstdlogicvector1downtostdlogicsignalnandjnandbooleansignalstdlogicvector1downtostdlogicsignalbooleanvhdl语言的运算操作符5主要用于位和位矢量的连接
两个进程语句并行执行

VHDL语言教程ppt课件

VHDL语言教程ppt课件
信号赋值语句: 目标信号名 <= 表达式;
x<=9; Z<=x after 5 ns; -- 在5ns后将x的值赋予z
9
3.1.2 数据类型
➢ VHDL的预定义数据类型 在VHDL标准程序包STANDARD中定义好,实际使用过程中,已
自动包含进VHDL源文件中,不需要通过USE语句显式调用。
布尔:(Boolean)
来,区分大小写;
VARIABLE string_var: STRING (1 TO 7);
string_var:=“A B C D” ;
-- 通常用“”引起来,区分大小写;
整数:(Integer)
取值范围 -(231-1) ~(231-1),可用32位有符号的二进制数表示
variable a:integer range -63 to 63
在条件语句中,必须要全面考虑Std_Logic的所有可能取值情况,否则综 合器可能会插入不希望的锁存器。
13
➢ 用户自定义
TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型 或 TYPE 数据类型名 IS 数据类型定义
数组:type value_type is array (127 downto 0) of integer; type matrix_type is array (0 to 15, 0 to 31) of std_logic;
L: Weak 0
H: Weak 1
—:Don’t care
标准逻辑位矢量( Std_Logic_vector)
基于Std_Logic类型的数组;
使用Std_Logic和 Std_Logic_Vector要调用IEEE库中的Std_Logic_1164 程序包;就综合而言,能够在数字器件中实现的是“-、0、1、Z”四种状态。

《VHDL语言程序设计》课程教学大纲

《VHDL语言程序设计》课程教学大纲

《VHDL语言程序设计》课程教学大纲课程简介课程简介:本课程为软件工程专业嵌入式专业方向的专业课,是开发基于FPGA/CPLD嵌入式系统的必备基础。

主要内容包括FPGA/CPLD目标器件的结构和工作原理、EDA技术和工作流程、VHDL基础知识、VHDL实用方法和设计深入、原理图输入法、LPM宏功能模块实用方法、状态机设计以及EDA优化设计。

目的是为后续课程的学习和嵌入式系统的设计作必须的基础准备。

课程大纲一、课程的性质与任务:本课程是软件工程专业的专业方向课程。

教学任务主要包括使学生了解EDA技术的工作流程,正确使用开发平台,掌握以VHDL为代表的硬件描述语言的基本知识、编程实用方法和工程设计方法,掌握原理图设计法、状态机设计法,能够正确使用IP Core和LPM等宏功能模块。

本课程是软件工程专业嵌入式专业方向的第一门专业方向课,是后续课程的必备基础,具有较重要的地位。

二、课程的目的与基本要求:本课程涉及到的学科基础知识面广,要求软硬件兼备,需要较好的学科基础。

通过本课程的学习,最终达到能够设计基于FPGA/CPLD的ASIC,并能进行EDA优化的目的。

三、面向专业:软件工程四、先修课程:《计算系统基础》五、本课程与其它课程的联系:本课程的先行课程是计算系统基础。

服务的主要后续课程包括基于FPGA的嵌入式软件开发、基于ARM的嵌入式软件开发等。

六、教学内容安排、要求、学时分配及作业:第一章概述(2学时)1.1 EDA技术及其发展(C)1.2 硬件描述语言硬件描述语言种类、自顶向下设计方法、EDA工程设计流程。

(A)1.3 面向FPGA/CPLD的开发流程设计输入、分析综合、布局布线、仿真、下载和硬件测试。

(A)1.4 IP Core 及EDA技术发展趋势。

(C)第二章 FPGA硬件特性与编程技术(8学时)2.1 PLD发展历程及其分类(c)2.2 低密度PLD工作原理PROM、PLA、PAL、GAL。

《VHDL语言程序设计》课程教学大纲

《VHDL语言程序设计》课程教学大纲

GDOU-B-11-213《VHDL语言程序设计》课程教学大纲课程简介课程简介:本课程为软件工程专业嵌入式专业方向的专业课,是开发基于FPGA/CPLD嵌入式系统的必备基础。

主要内容包括FPGA/CPLD目标器件的结构和工作原理、EDA技术和工作流程、VHDL基础知识、VHDL实用方法和设计深入、原理图输入法、LPM宏功能模块实用方法、状态机设计以及EDA优化设计。

目的是为后续课程的学习和嵌入式系统的设计作必须的基础准备。

课程大纲一、课程的性质与任务:本课程是软件工程专业的专业方向课程。

教学任务主要包括使学生了解EDA技术的工作流程,正确使用开发平台,掌握以VHDL为代表的硬件描述语言的基本知识、编程实用方法和工程设计方法,掌握原理图设计法、状态机设计法,能够正确使用IP Core和LPM等宏功能模块。

本课程是软件工程专业嵌入式专业方向的第一门专业方向课,是后续课程的必备基础,具有较重要的地位。

二、课程的目的与基本要求:本课程涉及到的学科基础知识面广,要求软硬件兼备,需要较好的学科基础。

通过本课程的学习,最终达到能够设计基于FPGA/CPLD的ASIC,并能进行EDA优化的目的。

三、面向专业:软件工程四、先修课程:《计算系统基础》五、本课程与其它课程的联系:本课程的先行课程是计算系统基础。

服务的主要后续课程包括基于FPGA的嵌入式软件开发、基于ARM的嵌入式软件开发等。

六、教学内容安排、要求、学时分配及作业:第一章概述(2学时)1.1 EDA技术及其发展(C)1.2 硬件描述语言硬件描述语言种类、自顶向下设计方法、EDA工程设计流程。

(A)1.3 面向FPGA/CPLD的开发流程设计输入、分析综合、布局布线、仿真、下载和硬件测试。

(A)1.4 IP Core 及EDA技术发展趋势。

(C)第二章 FPGA硬件特性与编程技术(8学时)2.1 PLD发展历程及其分类(c)2.2 低密度PLD工作原理PROM、PLA、PAL、GAL。

第9讲 VHDL语言子程序

第9讲 VHDL语言子程序

过程应用实例
LIBRARY IEEE; 声明程序包 USE IEEE.STD_LOGIC_1164.ALL; USE WORK.hanshu.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 max(dat1,dat2,out1); PROCESS(dat3,dat4) BEGIN max(dat3,dat4,out2); END PROCESS;
并行过程调用
顺序过程调用
过程应用实例
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.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
FUNCTION max (a,b:integer) RETURN integer; FUNCTION “xor” (l,r :std_logic_vector) RETURN std_logic_vector; FUNCTION d2 (signal a,b:std_logic) RETURN std_logic;

VHDL的子程序

VHDL的子程序

BEGIN
IF (S'EVENT) AND (S = '1') AND
--
line 3
(S'LAST_VALUE = '0') THEN
-- line 4
RETURN TRUE; -- line 5
ELSE RETURN FALSE;
-- line 6 END IF;
END rising_edge; END dff;
u1 convert4val(clk)a,(3)
a(3)
convert4val(clr),
clk convert4value(q) => q(2));
clr U4 : dff PORT MAP(convert4val(a(3)), convert4val(clk), convert4val(clr), convert4value(q) => q(3)); END structure;
函数
USE WORK.std_logic_1164.ALL; PACKAGE num_types IS
TYPE log8 IS ARRAY (0 TO 7) OF std_logic; -- line 1 END num_types;
USE WORK.std_logic_1164.ALL; USE WORK.num_types.ALL; ENTITY convert IS
-- line 4
和返回值
RETURN INTEGER is
-- line 5
函数说明区它能说明变量、常量和类型,但不
VARIABLE result能:说I明N信TE号GER := 0;
-- line 6
BEGIN FOR

第九章VHDL描述数字电路

第九章VHDL描述数字电路

基于硬件描述语言的设计过程
• VHDL语言的基本特点
– 可以在各个不同的设计阶段对系统进行描述。 包括系统级、寄存器级和门级。 – 支持结构化的层次设计方法。支持自顶向下的 层次化设计方法。 – 具有很好的时间性能的描述机制,可以真实的 反映系统或电路的时间特性。 – 可以支持各种不同类型的数字电路和系统的设 计。VHDL的设计主要是用来设计同步系统, 但是也可以设计异步电路。
基于硬件描述语言的设计过程
• 设计过程
– 基于硬件描述 语言的数字系 统设计是一个 从抽象到具体 的过程。 – 逻辑模拟验证 设计的正确性 – 时间模拟验证 系统的时间特 性。
基于硬件描述语言的设计过程
• Quartus II设计 软件
– 可以用于逻辑 仿真和逻辑设 计。 – 器件编程就是 将设计结果写 入可编程逻辑 阵列芯片,相 当于布局布线。
• 在VHDL中,不仅可以对数组的整体赋值,还可以 对数组的一部分进行操作。如定义了regist_1类型 的数组信号:
TYPE regist_1 IS ARRAY (7 DOWNTO 0) OF BIT; SIGNAL arr_1, arr_2 : regist_1; – 以下的赋值操作在VHDL中都是允许的: arr_1 <= "10110110"; arr_2 <=arr_1; arr_2(0 TO 3) <="1011";
VHDL描述的基本结构
• 基本的VHDL描述由两个部分组成:实体 (entity)部分和结构体(architecture) 部分。
– 实体部分有时也称为接口(interface)部分, 主要描述一个硬件模块或系统的输入、输出接 口,包括输入、输出信号的名称,类型等。 – 结构体部分,有时也称为主体(body)部分, 是对硬件内部结构或性能的具体描述。

VHDL的子程序(“函数”相关文档)共33张

VHDL的子程序(“函数”相关文档)共33张

BEGIN
CASE S IS
WHEN X => RETURN 'X';
四值转换函数
WHEN L =>
RETURN '0';
WHEN H =>
RETURN '1';
WHEN Z =>
RETURN 'Z';
END CASE;
END convert4val;
***************************************************
ARCHITECTURE behave OF convert IS
FUNCTVIOHNDveLc的tor子_to程_i序nt((S2): log8)
-- line 4 RETURN INTEGER is
函数名.变元和 返回值
-- line 5
VARIABLE result 函:数I说NT明E区GE它R能:说=明变0;量、常量和类型,但不能说明信号
clr convert4val(clr),
convert4value(q) => q(3));
END structure;
VHDL的子程序(8)
下面是在称之为trans2的实体中含两个双向转换器件的 例子。
PACKAGE my_pack IS TYPE nineval IS (Z0, Z1, ZX, R0, R1, RX, '0', '1', FX); TYPE nvector2 IS ARRAY(0 TO 1) OF nineval; TYPE fourstate IS (X, L, H, Z);
函数的参量总只能是输入参数,上例的参量是constant类别的,没 有显式地指定而是默认为一个常量。函数还有另一种参量是signal信号 参量,由信号参量传入信号属性,并在函数中是可用的。

VHDL语言程序基础992014

VHDL语言程序基础992014
句有相同的选择条件。可以用others语句表示相同操作的 选择条件。 ④ when 语句书写顺序可以互换,但是others语句必须放在最 后一个。
14
➢ 选择语句举例——描述4选1电路
If语句实现
Process(input,sel ) Begin
If(sel=“00”)then y<=input(0); elsif(sel=“01”)then y<=input(1); elsif(sel=“10”)then y<=input(2); else y<=input(3); End if; End process;
✓变量代表电路单元内部的操作,代表暂存的临时数据。
② 赋值行为的不同
✓信号赋值延迟更新数值,用于时序电路; ✓变量赋值立即更新数值,用于组合电路。
③ 信号的多次赋值
✓一个进程:最后一次赋值有效 ✓ 多个进程:一般编译器无法编译
6
信号的多次赋值
只有最后一个值有效
architecture rtl of ex is signal a : std_logic;
12
CASE语句
CASE语句根据满足的条件直接选择多项顺序语句中的一项执行.
多条件选择值的一般表达式为: 选择值 [ |选择值 ]
选择值可以有四种不同的表达方式: 单个普通数值,如6。 数值选择范围,如(2 TO 4),表示取值为2、3或4. 并列数值,如35,表示取值为3或者5。 混合方式,以上三种方式的混合。
begin process(…) begin a <= b; … a <= c; end process;
end rtl;
许多编译器无法编译
architecture rtl of ex is signal a : std_logic;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

过程(Procedure)
过程语句的作用和函数类似,但过程参数有输入、输 出,比函数更为灵活。
过程也以重复使用,相当于其他高级语言的子程序; 过程可以返回多个值,也可以不返回值;
过程首
过程
过程体
过程(Procedure)
Procedure 过程名 (参数表) 过程首 在程序包首中 定义 Procedure 过程名 (参数表) IS 说明部分 Begin 顺序语句 END Procedure 过程名;
FUNCTION max (a,b:integer) RETURN integer; FUNCTION “xor” (l,r :std_logic_vector) RETURN std_logic_vector; FUNCTION d2 (signal a,b:std_logic) RETURN std_logic;
定义在结构体 仅能被该结构 体使用
练习
请大家设计函数“数据比较”,相等为1,不等为0
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE hanshu IS FUNCTION max( a,b : IN STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR ; END ;
PACKAGE BODY hanshu IS FUNCTION max( a,b : IN STD_LOGIC_VECTOR) --定义函数体 RETURN STD_LOGIC_VECTOR IS BEGIN IF a > b THEN RETURN a; --RETURN 返回语句 ELSE RETURN b; END IF; END FUNCTION max; --结束FUNCTION语句 END; --结束PACKAGE BODY语句
END STD_LOGIC_1164; PACKAGE BODY STD_LOGIC_1164 IS
…… FUNCTION "and" ( l,r : std_logic_vector ) RETURN std_logic_vector IS …… Begin …… End "and“; ……
END STD_LOGIC_1164;
函数(Function)
函数语句的作用是输入若干参数,通过函数运算,最 后返回一个值。
函数可以重复使用,相当于其他高级语言的函数; 函数仅返回一个值,函数中至少有一条返回语句;
函数首
函数
函数体
函数(Function)
Function 函数名 (参数表) Return 数据类型 函数首 在程序包首中 定义 Function 函数名 (参数表) Return 数据类型 IS 说明部分 Begin 顺序语句 函数体 END Function 函数名; 在程序包体中 定义
程序包
程序包也叫包集合,主要用来存放各个设 计都能共享的数据类型定义、常量定义、子程 序定义、信号定义及元件定义等部分。 设计者使用时要用USE语句进行说明。
程序包
程序包的格式: 程序包首 PACKAGE 包集合名 IS [说明语句] END 包集合名; PACKAGE BODY 包集合名 IS [说明语句] END 包集合名; 定义子程序
过程应用实例
LIBRARY IEEE; 声明程序包 USE IEEE.STD_LOGIC_1164.ALL; USE WORK.hanshu.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;
电子设计自动化技术
第 9 讲 VHDL语言子程序
子程序
子程序是在主程序调用它以后能将结果返回主程序的程序模 块,它可以反复调用,方便程序设计。 VHDL子程序模块,由顺序语句构成。每调用一次子程序都意 味着增加了一个硬件电路模块,因此,在实际使用时,要密切关 注和严格控制子程序的调用次数。 子程序通常放在程序包中,也可放在结构体和进程中。 函数(Function) 子程序 过程(Procedure)
--定义程序包 --定义函数首
PACKAGE BODY hanshu IS FUNCTION max( a,b : IN STD_LOGIC_VECTOR) --定义函数体 RETURN STD_LOGIC_VECTOR IS BEGIN IF a > b THEN RETURN a; --RETURN 返回语句 ELSE RETURN b; END IF; END FUNCTION max; --结束FUNCTION语句 END; --结束PACKAGE BODY语句
ARCHITECTURE bhv OF axamp IS BEGIN max(dat1,dat2,out1); PROCESS(dat3,dat4) BEGIN max(dat3,dat4,out2); END PROCESS;
并行过程调用
顺序过程调用
过程应用实例
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.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
函数定义实例(程序包中)
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE hanshu IS FUNCTION max( a,b : IN STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR ; END ;
--定义程序包 --定义函数首
过程体 在程序包体中 定义
过程通常定义在程序包中,也可放在结构体和进程中。 在结构体和进程中定义时,仅需定义过程体。 定义的位置不同,其使用的范围也不同。
过程(Procedure)
Procedure 过程名 (参数表)
参数有常数、变量、信号,需明确说明; 用关键字IN、OUT、INOUT定义参数信息流向; 参数无特别说明,IN作为常数对待; 只说明OUT、INOUT,作为变量对待; 信号必须明确用关键字SIGNAL声明; 数据类型只能是非限制形式; 不能使用STD_LOGIC_VECTOR( 0TO 7) INTEGER RANGE 20 DOWNTO 1位置映射 Nhomakorabea名称映射
函数定义(结构体中)实例
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.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 axamp; ARCHITECTURE bhv OF axamp IS FUNCTION max( a,b : IN STD_LOGIC_VECTOR) --定义函数体 RETURN STD_LOGIC_VECTOR IS BEGIN IF a > b THEN RETURN a; --RETURN 返回语句 ELSE RETURN b; END IF; END FUNCTION max; --结束FUNCTION语句 BEGIN out1 <= max(dat1,dat2); out2 <= max(dat3,dat4); END;
并行函数调用
顺序函数调用
函数应用实例
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE WORK.hanshu.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 axamp; ARCHITECTURE bhv OF axamp IS BEGIN out1 <= max(dat1,dat2); PROCESS(dat3,dat4) BEGIN out2 <= max(a=>dat3,b=>dat4); END PROCESS; END;
函数应用实例
LIBRARY IEEE; 声明程序包 USE IEEE.STD_LOGIC_1164.ALL; USE WORK.hanshu.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 axamp; ARCHITECTURE bhv OF axamp IS BEGIN out1 <= max(dat1,dat2); PROCESS(dat3,dat4) BEGIN out2 <= max(dat3,dat4); END PROCESS; END;
过程定义(程序包中)实例
相关文档
最新文档