08第八讲VHDL语言中的函数子程序包和库精品PPT课件

合集下载

VHDL课件

VHDL课件

2) 半加器的逻辑描述 LIBRARY IEEE; -- IEEE库的使用说明 USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS --实体h_adder的说明 PORT(a,b:IN STD_LOGIC; co,so:OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE art2 OF h_adder IS -- 实体h_adder的结构体art2的说明 BEGIN so<=(a OR b) AND (a NAND b); co<=NOT (a NAND b); END ARCHITECTURE art2;
(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。 符号“=>”表示信号连接。
3.1.3 VHDL程序设计约定 为了便于程序的阅读和调试,对VHDL程序设计特作如下约 定: (1) 语句结构描述中方括号“[ ]”内的内容为可选内容。 (2) 对于VHDL的编译器和综合器来说,程序文字的大小 写是不加区分的。 (3) 程序中的注释使用双横线“--”。在VHDL程序的任何 一行中,双横线“--”后的文字都不参加编译和综合。 (4) 为了便于程序的阅读与调试,书写和输入程序时,使 用层次缩进格式,同一层次的对齐,低层次的较高层次的缩 进两个字符。 (5) 考虑到MAX+plusII要求源程序文件的名字与实体名 必须一致,因此为了使同一个VHDL源程序文件能适应各个 EDA开发软件上的使用要求,建议各个源程序文件的命名均 与其实体名一致。

《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语言PPT课件

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课件

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课件

VHDL基本语法PPT课件
1. 逻辑运算符 逻辑运算符有 6 种:NOT 、
OR 、 AND 、 NAND 、 NOR 和 XOR 。常用的是前 3 种。
参加逻辑运算的 变量或者信号必 须有相同的数据类型和数据长度。逻 辑运算符适用的数据类型为
std_ logic
第1页/共59页
例:
SIGANL a,b,e,f:STD_LOGIC; SIGANL c,d: STD_LOGIC_VECTOR(7 DOWNTO 0);
a AND b; c AND d; a AND c;
a OR b; NOT a --正确
c XOR d;
NOT C --正确
--错误 , 因为数据类型不同
第2页/共59页
• 除了 not 运算符的优先级最高外 , 其余逻辑运算符的优先级相同 , 运算从左到 右展开。 因此要注意加括号 , 如 : (a AND b) OR (e AND f) 不能写成 a AND b OR e AND f
信号映射表中的各项用的书写顺序必须和por句映射的元件的端口名书写顺序一致种映射方式第52页共59页设计一个与或门实现的功能为andorresulta1anda2a4a1a2a3a4andorresultop1op2op1op2andresultorresult第53页共59页低层的设计实体andgate它将两个输入信号op1op2进行出信号andresult低层的设计实体orgate它将两个输入信号op1op2进行出信号orresult参见程序例8第54页共59页顶层设计实体andorgate它把两个低层设计实体当作元件引用
VHDL的层次结构设计
第39页/共59页
层次结构设计是设计较大规模硬件 的必要手段 , 也是 VHDL 的重要优 点。

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程序设计基础》课件

语法格式
library library_name; use library_name.packag e_name.item;
库的使用
在程序中引用库中的函 数、过程、数据类型等 。
示例
library IEEE; use IEEE.STD_LOGIC_116 4.ALL;
程序包(Package)
01 程序包描述
并行赋值语句
同时对多个信号进行赋值操作。
生成语句
用于生成多个相似的电路结构, 如多路选择器、译码器等。
04 VHDL设计方法
自顶向下设计方法
总词
从整体到局部的设计方法
详细描述
自顶向下设计方法是一种从整体到局部的设计方法,首先确定系统的整体结构 和功能,然后逐步细化各个模块的设计,最终完成整个系统的设计。这种方法 有助于提高设计的层次性和模块化,便于设计和调试。
状态机设计
总结词
通过实例演示如何使用VHDL设计状态机。
详细描述
介绍状态机的基本概念和设计方法,包括状态图的绘制、状 态转移的实现等。通过具体的VHDL代码实现一个有限状态机 ,并解释代码中的各个部分。
06 VHDL仿真与验证
仿真工具与流程
仿真工具
ModelSim、Vivado Simulation等常用的 VHDL仿真工具,支持多种仿真算法和精度 。
02 语法格式
03 包的内容
04 包的使用
05 示例
程序包是库的子集,用于 组织相关的函数、过程、 数据类型等。
package package_name is
在包中声明函数、过程、 数据类型等。
在其他程序中引用包中的 内容。
package logic_operators is function AND (A, B: in std_logic) return std_logic; function OR (A, B: in std_logic) return std_logic; end logic_operators;

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程序包及函数

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课件

第二章-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([类属常量名:类型 [:=静态表达式]; ……
[类属常量名:类型 [:=静态表达式]);

第VHDL快速入门PPT课件

第VHDL快速入门PPT课件

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DFFl IS
PORT(D,CLK: IN STD_LOGIC;
【例3.1】
第3页/共65页
3.1 VHDL体系结构
【例3.1】
第4页/共65页
3.1 VHDL体系结构
需要说明的是,以上例子的实体和结 构体分别是以“END ENTITY xxx”和 “END ARCHITECTURE xxx”语句结 尾的,这是符合VHDL的IEEE STD l076-1993版的语法要求的。若根据 VHDL’87版本,即IEEE STD l0761987的语法要求,这两条结尾语句只 需写成“END;”或"END xxx;”。
3.1 VHDL体系结构
结构体的语法格式如下: ARCHITECTURE 结构体名 OF 实体名 IS [说明语句] BEGIN 功能描述语句;--并行处理语句; END 结构体名;--结构体名可以任意,但当 一个实体具有多个结构体时,取名不可重复。
第18页/共65页
3.1 VHDL体系结构
例3.1中计数器的结构体如下:
3.3 触发器的VHDL描述
信号属性函数描述时序逻辑电路是一种 常用的方法,本例中的CLK’EVENT AND CLK=‘1’是用于检测时钟信号的 上升沿,即如果检测到CLK的上升沿,此 表达式将输出为真。关键词EVENT是信 号属性函数,用来获得信号行为信息的函 数称为信号属性函数。
在VHDL中,用表达式 <信号名 >’EVENT来测定某个信号的跳变情况。
例3.1中计数器的实体对应的原理图符 号如图3.2所示。
图3.2 实体对应的原理图符号

第八讲 VHDL语言中的函数子程序包和PPT课件

第八讲 VHDL语言中的函数子程序包和PPT课件
4
函数(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
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
所有的上述电路单元都采用相同的名字→子程序重载
通过调用时的参量表来找到正确的子程序
子程序的重载
VHDL是一种强类型语言
重载是一种处理用户自定义类型的有效、方便 的办法
对重载操作和重载机制的管理导致了包 (package)的概念的出现
包(package)
包的申明部分
对包中所包含的函数,子程序和类型进行申明 用作包的接口 只有被申明的内容才可以被外部引用
第八讲 VHDL语言中的函数、子 程序、包和库
提纲
函数 子程序 子程序重载 包 库
函数(Function)
函数(Function)
函数的外部参量与模式
默认的模式是in
函数不能修改输入参量 函数内部定义的变量在每一次调用时都要被初始化 函数内部不允许出现Wait语句 函数不能调用另一函数
Learning Is To Achieve A Certain Goal And Work Hard, Is A Process To Overcome Various Difficulties For A Goal
次级设计单元是通过基本设计单元来获得库的信息 的
通过use子句可以有选择地指定可见性, 如, 函数 rising_edge()只是在实体design-2内是可 见的;
次级设计单元继承基本设计单元的可见性
提问与解答环节
Questions And Answers
谢谢聆听
·学习就是为了达到一定目的而努力去干, 是为一个目标去 战胜各种困难的过程,这个过程会充满压力、痛苦和挫折
子程序(Procedure)
子程序(Procedure)
子程序(Procedure)
子程序的位置决定了它的可见性(visibility) 和用途
子程序与信号
子程序与信号
子程序可以对作为输入参量的信号进行赋值
按照设计中的层次划分,子程序可以对来自高 层的非参量表中的信号,如端口进行赋值
函数举例: 判决类型std_logic
函数举例: “线或”逻辑
多个芯片共同驱动一个共享的出错指示信号 结构值是各个驱动信号的逻辑或
函数举例: “线或”逻辑
函数资源
在IEEE包(package)中有标准函数定义,可 以参考学习
子程序(Procedure)
参数的模式可以是 in (读) 和 out (写) 默认的输入参数类型是常数 默认的输出类型是变量 子程序内部定义的变量在子程序每一次调用时将被初始化
函数举例: 判决函数
函数举例: 判决函数
电路行为
如果有任何其中一个控制信号打开了开关,则输出 信号被拉低
VHDL描述
如果有任何一个信号驱动器试图将输出信号拉低 (驱动器头部的值),则判决函数返回一个0值
在任一个驱动器试图对输出信号赋值时,判决函 数将被调用
函数举例: 判决类型std_logic
按照设计中的层次划分,子程序中设计的信号 可能在子程序之外定义
并行与顺序的子程序调用
并行子程序调用
等价的顺序子程序调用
子程序的重载
电路单元在输入信号的数量和输入信号的类型上存在 差异
用不同的子程序来描述这些电路单元 子程序的命名将变得很烦琐
子程序的重载
上述电路单元可以描述为:
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)
通过use子句来对包进行引用
包体
对包头中定义的函数和子程序进行实现 实例化包头中定义的常数
包举例:std_logic_1164包头
包体
包体是被编译到库(library)中的 新定义的类型必须具有关于运算的定义,例如逻辑运
算(如, and, or )和算术运算 (如, +, *) 分析存储在IEEE 库中的std_logic_1164包
函数(Function)
在结构或进程的定义区域加入函数代码
函数举例:时钟沿判断函数
函数举例:位矢量函数
函数的一种用法:类型转换
函数举例: 判决函数
信号赋值语句的基本结构: signal <= (value expression after time
expression) 右边的的部分常称为一个波形元素 每一个信号和一个驱动器对应
库(library)
设计单元最终被编译和存储在库中 逻辑库的名字和其物理存储目录相对应 STD库和WORK库是隐含定义的
库:设计内容
对基本设计单元和次级设计单元进行区分 定义了编译顺序
库:可见性规则
库:可见性规则
当同一个文件中包含多个设计单元,则必须分 别针对每一个基本设计单元(entity, package header, configuration)指明库和包的可见性
函数举例: 判决函数
在驱动器中保存了信号的当前值和未来时刻的 值,即该信号的预期波形
信号赋值语句的执行就是对一个信号的驱动器 进行修改
信号的当前值就是驱动器头部的值
函数举例: 判决函数
如何计算共享信号的值?引入判决函数
函数举例: 判决函数
当冲突的信号事件发生时就需要引用判决函数 判决是一种隐式的关联操作
相关文档
最新文档