当前位置:
文档之家› 08第八讲VHDL语言中的函数子程序包和库精品PPT课件
08第八讲VHDL语言中的函数子程序包和库精品PPT课件
所有的上述电路单元都采用相同的名字→子程序重载
通过调用时的参量表来找到正确的子程序
子程序的重载
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)指明库和包的可见性
函数举例: 判决函数
在驱动器中保存了信号的当前值和未来时刻的 值,即该信号的预期波形
信号赋值语句的执行就是对一个信号的驱动器 进行修改
信号的当前值就是驱动器头部的值
函数举例: 判决函数
如何计算共享信号的值?引入判决函数
函数举例: 判决函数
当冲突的信号事件发生时就需要引用判决函数 判决是一种隐式的关联操作