第八讲 VHDL语言中的函数子程序包和PPT课件
库(library)
设计单元最终被编译和存储在库中 逻辑库的名字和其物理存储目录相对应 于好的学习习惯
The foundation of success lies in good habits
35
谢谢大家
荣幸这一路,与你同行
It'S An Honor To Walk With You All The Way
通过use子句来对包进行引用
包体
– 对包头中定义的函数和子程序进行实现 – 实例化包头中定义的常数
包举例:std_logic_1164包头
包体
包体是被编译到库(library)中的 新定义的类型必须具有关于运算的定义,例如逻辑运算(如,
and, or )和算术运算 (如, +, *) 分析存储在IEEE 库中的std_logic_1164包
函数举例: 判决函数
函数举例: 判决函数
电路行为
– 如果有任何其中一个控制信号打开了开关,则输出信号被拉低
VHDL描述
– 如果有任何一个信号驱动器试图将输出信号拉低(驱动器头部的 值),则判决函数返回一个0值
– 在任何一个驱动器试图对输出信号赋值时,判决函数将被调用
函数举例: 判决类型std_logic
函数举例: 判决类型std_logic
函数举例: “线或”逻辑
多个芯片共同驱动一个共享的出错指示信号 结构值是各个驱动信号的逻辑或
函数举例: “线或”逻辑
函数资源
在IEEE包(package)中有标准函数定义,可以参考学习
子程序(Procedure)
参数的模式可以是 in (读) 和 out (写) 默认的输入参数类型是常数 默认的输出类型是变量 子程序内部定义的变量在子程序每一次调用时将被初始化
讲师:XXXXXX XX年XX月XX日
第八讲 VHDL语言中的函数、子程序、 包和库
提纲
结构模型 层次与抽象 类属 配置 总结
函数(Function)
函数(Function)
函数的外部参量与模式
– 默认的模式是in
函数不能修改输入参量 函数内部定义的变量在每一次调用时都要被初始化 函数内部不允许出现Wait语句 函数不能调用另一函数
函数(Function)
在结构或进程的定义区域加入函数代码
函数举例:时钟沿判断函数
函数举例:位矢量函数
函数的一种用法:类型转换
函数举例: 判决函数
信号赋值语句的基本结构: signal <= (value expression after time expression)
右边的的部分常称为一个波形元素 每一个信号和一个驱动器对应
所有的上述电路单元都采用相同的名字→子程序重载 通过调用时的参量表来找到正确的子程序
子程序的重载
VHDL是一种强类型语言 重载是一种处理用户自定义类型的有效、方便的办法 对重载操作和重载机制的管理导致了包(package)的概念的出
现
包(package)
包的申明部分
– 对包中所包含的函数,子程序和类型进行申明 – 用作包的接口 – 只有被申明的内容才可以被外部引用
定义
并行与顺序的子程序调用
并行子程序调用
等价的顺序子程序调用
子程序的重载
电路单元在输入信号的数量和输入信号的类型上存在差异 用不同的子程序来描述这些电路单元 子程序的命名将变得很烦琐
子程序的重载
上述电路单元可以描述为:
dff_bit (clk, d, q, qbar) asynch_dff_bit (clk, d,q,qbar,reset,clear) dff_std (clk,d,q,qbar) asynch_dff_std (clk, d,q,qbar,reset,clear)
子程序(Procedure)
子程序(Procedure)
子程序(Procedure)
子程序的位置决定了它的可见性(visibility)和用途
子程序与信号
子程序与信号
子程序可以对作为输入参量的信号进行赋值 按照设计中的层次划分,子程序可以对来自高层的非参量表中的
信号,如端口进行赋值 按照设计中的层次划分,子程序中设计的信号可能在子程序之外
函数举例: 判决函数
在驱动器中保存了信号的当前值和未来时刻的值,即该信号的预 期波形
信号赋值语句的执行就是对一个信号的驱动器进行修改 信号的当前值就是驱动器头部的值
函数举例: 判决函数
如何计算共享信号的值?引入判决函数
函数举例: 判决函数
当冲突的信号事件发生时就需要引用判决函数 判决是一种隐式的关联操作
VHDL语言及应用软件PPT课件
是A(7),最右位是A(0)。
➢ 字符(CHARACTER)数据类型
✓ 字符类型通常用单引号引起来,如‘A’。字符类型区 分大小写,如‘B’不同于‘b’。字符类型已在 STANDARD程序包中作了定义。
【例】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY CONTROL_STMTS IS
PORT (A,B,C: IN BOOLEAN; OUTPUT:OUT BOOLEAN);
END CONTROL_STMTS; ARCHITECTURE EXAMPLE OF CONTROL_STMTS IS
PORT(S1,S2: IN STD_LOGIC; A,B,C,D:IN STD_LOGIC; Z: OUT STD_LOGIC);
END ENTITY MUX41; ARCHITECTURE ART OF MUX41 IS
SIGNAL S :STD_LOGIC_VECTOR(1 DOWNTO 0);
--定义A为整数型变量
✓ VARIABLE B,C:INTEGER:=2; --定义B和C为整型变量,初始 值为2
➢ 信号(SIGNAL)
✓ SIGNAL 信号名: 数据类型﹕=初始值;
✓ SIGNAL S1:STD_LOGIG﹕=0;--定义了一个标准位的单值信号 S1,初始值为低电平
✓ SIGNAL S2,S3:BIT; --定义了两个位BIT的信号S2和S3
BEGIN S<=S1 & S2;
PROCESS(S1,S2,A,B,C,D)
《VHDL程序基本结构》课件
VHDL程序基本结构示意图
VHDL程序基本结构
这是一张示意图,展示了VHDL程序的基本结构和各个部分之间的关系。
VHDL程序编写实例
这里将展示一个简单的VHDL程序编写实例,以帮助理解VHDL程序的应用和编 写方法。
总结
通过本课程,我们了解了VHDL程序的基本结构和编写方法,以及各个部分的功能和关系。希望这些知识对你 的学习和工作有所帮助。
VHDL程序的基本组成
VHDL程序由实体说明部分、 架构说明部分、信号声明与 处理部分和过程描述部分组 成。
VHDL程序的编写流程
编写VHDL程序的流程包括定 义实体、编写架构、声明信 号和编写过程。
实体说明部分
ห้องสมุดไป่ตู้
1 实体声明
实体声明定义了模块的输入输出接口,包括 输入输出端口和内部信号。
2 输入端口声明
输入端口声明用于定义模块的输入信号和其 属性,如信号类型和位宽。
3 输出端口声明
输出端口声明用于定义模块的输出信号和其 属性,如信号类型和位宽。
4 端口映射
端口映射将模块的输入输出端口与上层设计 连接起来,以实现功能。
架构说明部分
1
架构声明
架构声明定义了模块的行为逻辑和组成元素,包括信号和过程。
2
参考文献
1. VHDL程序设计教程 2. VHDL语言基础与应用 3. VHDL编程入门
信号赋值语句
信号赋值语句用于给信号赋予特 定的值,以实现逻辑功能。
信号处理语句
信号处理语句用于处理信号的逻 辑运算和状态转换,以实现电路 功能。
过程描述部分
过程声明
过程声明用于定义过程的名称 和输入输出参数。
过程体
vhdl语言PPT课件
格式4: ---优先条件列举IF语句
IF 条件句1 THEN
顺序语句1;
ELSIF 条件句2 THEN
顺序语句2;
… ELSE
顺序语句n; END IF;
注意!
在PROCESS中“IF” 语句可嵌套使用, 在IF语句中可再调用另一个“IF”语句。
2021/6/16
13
6.6.2 VHDL顺序语句
2. IF语句
2021/6/16
11
6.6.2 VHDL顺序语句
2. IF语句
格式3:多重IF嵌套语句 IF 条件语句1 THEN
顺序语句1; IF 条件语句2 THEN
顺序语句2; ELSE
顺序语句3; END IF; ELSE 顺序语句4 END IF;
2021/6/16
12
6.6.2 VHDL顺序语句 2. IF语句
END;
ARCHITECTURE behav OF alu_ab IS
CONSTANT plus:STD_LOGIC_VECTOR (1 DOWNTO 0):= b “ 00 ” ; CONSTANT minus:STD_LOGIC_VECTOR (1 DOWNTO 0):= b “ 01 ” ; CONSTANT and_ab:STD_LOGIC_VECTOR (1 DOWNTO 0):= b " 10 " ;
a,b,c,d:IN STD_LOGIC; z:OUT STD_LOGIC); END;
2021/6/16
a
数
b
据
c
选 择
z
d
器
s1 s2
4选1数据选择器的功能
s1s2 z 00 a 01 b 10 c 11 d
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语言教程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引入程序包的结构,使一些通用的对象、数据类型及子程序能被其他程序的实体共同使用一个程序包由两大部分组成:程序包说明和程序包体。
程序包体是一个可选项一般情况,程序包说明列出所有项的名称,而程序包体给出各项的细节。
程序包说明通常的常量、信号数据类型及子类型的数据范围、函数和过程等说明的集合,称程序包说明。
下述内容中只要是通用的全局量,都可以在程序包中加以说明。
对象(常量、变量、信号)的数据类型说明对象(常量、变量、信号)子类型的数值范围说明函数与过程说明元件语句说明信号连接说明延时常量说明文件说明设计者自定义的属性说明程序包说明格式如下:package程序包名is说明语句;end程序包名;程序包名:设计者自定义便于记忆的标识符说明语句:包括各种类型的说明语句程序包体描述函数和过程功能的函数体与过程等的集合称程序包体程序包说明中,定义了数据类型和子程序中的函数、过程说明,而程序包体中才具体地描述该函数、过程功能的语句和数据的赋值。
程序包体格式:package body程序包名is顺序语句;end程序包名;程序包名:与程序包说明中的程序包名相同顺序语句:描述函数、过程及其他功能的程序流子程序--过程VHDL中,所谓子程序指主程序调用它后能将处理结果返回主程序的程序模块。
VHDL语言中,子程序有两种类型,过程(procedure)和函数(function)。
他们的区别:1、过程可具有多个返回值,而函数只能有一个2、过程通常用来定义一个算法,而函数往往用来产生一个特定的值3、过程中的参数可具有3种端口模式:in、out、inout,而函数中的参数只能具有一直端口模式:in过程的书写结构对于VHDL子程序来说,它通常包括子程序说明部分和子程序定义部分。
其中,子程序说明部分定义了其他设计调用子程序的接口;子程序定义部分则描述该子程序具体功能的实现。
因此,通常将子程序说明部分和子程序定义部分的书写结构分别介绍在VHDL中,过程说明部分的书写结构:procedure:过程名(对象类型1参数名1:端口模式1数据类型1;对象类型2参数名2:端口模式2数据类型2;.);过程说明部分以保留字"procedure"开始,紧跟着的是过程名;然后是过程的参数列表。
第二章-VHDL语言程序的基本结构PPT课件
-
5
二选一电路的VHDL语言描述
entity mux is
architecture connect of mux is
实 generic(m: time :=1 ns); signal tmp: bit;
体 port(d0,d1,sel: in bit; begin
说 明
q: out bit);
每个构造体必须有一个名称:
命名要符合命名规则
命名可根据设计者 采用何种描述方式 来描述模 块的功能来命名,给阅读程序的人带来方便。 如:
beh (行为描述,基本设计单元的数学模型描述)
rtl (寄存器传输描述,数据流描述)
str (结构描述,逻辑元件的连接)
例: architecture str of mux2_1 is
entity mux is port(d0,d1,sel: in bit; q: out bit);
end entity mux;
architecture dataflow of mux is signal q0,q1:bit; begin
q0 <= d0 and sel; q1 <= not sel and d1; q <= q0 or q1; end architecture dataflow;
一句也可以写若干行; 在一句结束后,可以在“--”符号后接说明文字,
有助于理解程序,不会对编译产生影响; 单词之间必须使用空格; 并列信号间使用逗号; 根据不同的层次关系最好设定不同的缩进。
-
9
2)类属参数说明格式:
generic([类属常量名:类型 [:=静态表达式]; ……
[类属常量名:类型 [:=静态表达式]);
子程序——函数(共23张PPT)
k:=trunc(sqrt(x));
for m:=3 to k do
if odd(m) then {判断奇数的函数odd,布尔类型(lèixíng)}
if x mod m=0 then yy:=false; end;
begin b:=3;
{主程序 }
repeat
a:=b;
{a 为第一个素数 }
repeat
Pascal中的子程序有两种形式:函数和过程。
第二页,共二十三页。
函数(hánshù)
之前我们接触了pascal中提供的标准(biāozhǔn)函数,
如abs(),sqrt(),inc()等等,这些函数
为我们编写程序提供了很大的方便。但是这些函 数知识常用的函数,编程的时候需要自定义一些 函数。
yes:=true;
inc(b,2);
{b是a后面待求的素数}
sub(b,yes);
{调用SUB过程来确认b是否为素数 }
if yes then s:=b-a;
{如果b是素数,则求出跨度s }
until yes;
until s > = 10;
for n:=a+1 to a+10 do
write(n:6);
从上面规划的步骤看来,从步骤②到步骤⑤需处理的目标是相同的 ,因此我们可以设计(shèjì)一段子程序Max(x1,x2),以找出x1和x2
中最大的值并返回。
第四页,共二十三页。
Program Exp41; Var n1,n2,n3,n4,n5,t1 : integer;
Function max(x1,x2 : integer) : integer;
[例4.4]如果一个自然数除了1和本身,还有别的数能够整除它, 这样的自然数就是合 数。例如15,除了1和15,还有3和5能够整除,所以15是合数。14,15,16是三个连续的
第八讲 VHDL语言中的函数子程序包和PPT课件
函数(Function)
在结构或进程的定义区域加入函数代码
5
函数举例:时钟沿判断函数
6
函数举例:位矢量函数
函数的一种用法:类型转换
7
函数举例: 判决函数
信号赋值语句的基本结构: signal <= (value expression after time expression)
右边的的部分常称为一个波形元素 每一个信号和一个驱动器对应
电路单元在输入信号的数量和输入信号的类型上存在差异 用不同的子程序来描述这些电路单元
28 子程序的命名将变得很烦琐
子程序的重载
上述电路单元可以描述为:
dff_bit (clk, d, q, qbar) asynch_dff_bit (clk, d,q,qbar,reset,clear) dff_std (clk,d,q,qbar) asynch_dff_std (clk, d,q,qbar,reset,clear)
11 判决是一种隐式的关联操作
函数举例: 判决函数
12
函数举例: 判决函数
电路行为
– 如果有任何其中一个控制信号打开了开关,则输出信号被拉低
VHDL描述
– 如果有任何一个信号驱动器试图将输出信号拉低(驱动器头部的 值),则判决函数返回一个0值
– 在任何一个驱动器试图对输出信号赋值时,判决函数将被调用
– Secondary design inherit visibility Note design unit descriptions are decoupled from boundaries
37
学习总结
经常不断地学习,你就什么都知道。你知道得越多,你就越有力量 Study Constantly, And You Will Know Everything. The More
VHDL的子程序(“函数”相关文档)共33张
VHDL的子程序
子程序由函数和过程组成,函数只有输 入参数和单一的返回值,而过程有任意多 个输入、输出和双向参数。
ENTITY reg IS
PORT (a : IN fvector4;
clr : IN fourval;Fourval(fvector4)
clk : IN fourval; a
q : OUT fvector4);
4
clk
clr
Fvector4(fourval)
a
4
reg
VHDL的子程序(7)
ARCHITECTURE structure OF reg IS
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)
