当前位置:
文档之家› 第八讲 VHDL语言中的函数子程序包和PPT课件
第八讲 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)和用途
子程序与信号
子程序与信号
子程序可以对作为输入参量的信号进行赋值 按照设计中的层次划分,子程序可以对来自高层的非参量表中的
信号,如端口进行赋值 按照设计中的层次划分,子程序中设计的信号可能在子程序之外
函数举例: 判决函数
在驱动器中保存了信号的当前值和未来时刻的值,即该信号的预 期波形
信号赋值语句的执行就是对一个信号的驱动器进行修改 信号的当前值就是驱动器头部的值
函数举例: 判决函数
如何计算共享信号的值?引入判决函数
函数举例: 判决函数
当冲突的信号事件发生时就需要引用判决函数 判决是一种隐式的关联操作