VHDL语言及程序设计
2014-7-2
21
数据类型转换
VHDL中,不同数据类型不能直接进行运算和代入,要进行运算或 代入必需对类型进行转换,使之一致
hwadee
2014-7-2
22
BIT_VECTOR与STD_LOGIC_VECTOR
代入STD_LOGIC_VECTOR的值只能是二进制,代入BIT_VECTOR的 值除二进制外还可以是八进制和十六进制
hwadee
2014-7-2
26
VHDL的主要描述语句
顺序描述语句和并发描述语句是VHDL程 序设计中两大基本描述语句系列 顺序描述语名只出现在PROCESS和 SUBPROGRAM中,语句按出现的次序加以 执行 对于FPGA搭建的应用系统,元件在定义的仿 真时该应该是并发工作的,并发语句就用于 表示这种并发行为
hwadee
2014-7-2
3
VHDL语言程序的基本构成
库、包集合:用于存放预先编译好的程序包 (PACKAGE)和数据集合体,以便不同 的VHDL设计使用 实体说明:规定设计单元的输入输出接口 信号和引脚 构造体:定义设计单元的具体构造和操作
hwadee
2014-7-2
4
VHDL语言程序的基本构成示例
hwadee
2014-7-2
18
用户自定义的数据类型
用户自定义的数据类型有枚举类型、整数类型和实数类型、数组类型、 记录类型四种 枚举类型: TYPE 数据类型名 IS (枚举文字,枚举文字,. . . .) 整数类型与实数类型是标准包中预定义的整数类型的子集,由于综合器 无法综合未限定范围的整数类型的信号或变量,故一定要用RANGE子 句为所定义整数范围限定范围以使综合器能决定信号或变量的二进制的 位数。 格式: TYPE 数据类型名 IS RANGE 约束范围; 数组类型:数组是同一类型数据集合,记录内元素类型可以不同 TYPE 数据类型名 IS ARRAY(下限 TO 上限) OF 类型名称,多维数组 不能生成逻辑电路,只能用于仿真图形 记录类型: TYPE 记录类型名 IS RECODE 元素名: 数据类型名; 元素名: 数据类型名; 。。。。。。。。。。。。。 END RECODE
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 6
实体(ENTITY)
实体类似于原理图中的一个部件符号,它并不描述 设计的具体功能,只是定义所需的全部输入/输出信 号。实体格式如下:
ENTITY 实体名 IS
[GENERIC(常数名:数据类型[:设定值])] PORT 端口说明 (端口信号名1: 模式 类型; 端口信号名2: 模式 类型; 端口信号名3: 模式 类型; 端口信号名4: 模式 类型); END 实体名; 类属说明
在逻辑综合中,VHDL常用的数据对象有信号、变量及常量 信号SIGNAL:为全局变量,定义格式: SIGNAL 信号名: 数据类型[:=初始值]; 赋值格式: 目标信号名<=表达式 常在结构体中用赋值语句完成对信号赋初值的任务,因为综合器往往忽略信号声 名时所赋的值 常量:全局变量,在设计中描述某一规定类型的特定值不变,如利用它可设计 不同模值的计数器,模值存于一常量中,对不同的设计,改变模值仅需改变此常 量即可,就如上一章所说的参数化元件。 定义格式: CONSTANT 常数名:数据类型:=表达式
hwadee
2014-7-2
9
Exemple of ARCHITECTURE
hwadee
2014-7-2
10
ARCHITECTURE的BLOCK子结构
子结构的使用使设计者可以把整个电路分成若干个相对独立的模块来进 行描述 子结构有:BLOCK,PROCESS,SUBPROGRAMS BLOCK与ARCHITECTURE相当于整体原理图与子原理图关系,结 构内部语句是并发的,如希望BLOCK有条件执行,可采用卫式 BLOCK,如下:
库、包集合说明
实体说明
构造体
hwadee
2014-7-2
5
库和包集合的使用
库的说明总是放在设计单元的最前面,调用方法: LIRARY 库名 USE 库名.所要调用的程序包名.ALL 具体可打开安装目录C:\altera\quartus60\libraries\vhdl下相 应的文件进行学习 常用库和包集合:IEEE库中的包集合 STD_LOGIC_1164,STD_LOGIC_ARITH,STD_LOGIC_UN SIGNED,其中后两个包在日本synopsys(新思)公司目录中,该公 司在FPGA行列还推出了prime time静态时序分析工具 STD库中STANDARD包集合是VHDL的标准配置,使用时可以不 说明 WORK库:VHDL现行工作库,可以理解为用户当前编辑的目录中 所有可用的包和数据集
hwadee
2014-7-2
23
数据类型的限定
VHDL中有时可以用上下文关系来判断某一数据的数据类型,如果不能判 断出来,就必需对数据进行类型限定,类似C中的强制类型转换
hwadee
2014-7-2
24
运算符:算术运dee
2014-7-2
25
运算符的使用
hwadee
2014-7-2
27
赋值语句
顺序语句
赋值语句分为变量赋值和信号赋值,区 别如下:
2014-7-2 15
hwadee
VHDL的数据类型
VHDL是一种强类型语言,对于每一个常数、 变量、信号、函数及设定的各种参量的数据 类型(DATA TYPES)都有严格要求,相同 数据类型的变量才能互相传递和作用,标准 定义的数据类型都在VHDL标准程序表STD中 定义,实际使用中,不需要用USE语句以显 式调用 VHDL常用的数据类型有三种:标准定义的 数据类型、IEEE预定义标准逻辑位与矢量及 用户自定义的数据类型
分别有IN、OUT、 INOUT、BUFFER、 LINKAGE 常用的有INTEGER、 STD_LOGIC、 STD_LOGIC_VECTOR
hwadee
2014-7-2
8
ARCHITECTURE
所有能被仿真的实体都由结构体(ARCHITECTURE)描述,即 结构体描述实体的结构或行为,一个实体可以有多个结构体,每 个结构体分别代表该实体功能的不同实现方案 结构体格式: ARCHITECTURE 结构体名 OF 实体名 IS [定义语句(元件例化);] BEGIN 并行处理语句; END 结构体名; 结构体名是对本结构体的命名,它是该结构体的惟一名称,虽然 可以由设计人员自由命名,但一般都将命名和对实体的描述结合 起来,例如:行为描述(BEHAVE),寄存器传输级(RTL)
逻辑运算、算术运算、关系运算的左右以及代入的数据类型一定 要相同 VHDL中左右没有优先级的差异,如 x<=(a AND b) OR (NOT c AND d) 能真正综合的算术运算符只有“+”,“-”,“*”;“MOD”, “REM”,“/”分母是2乘方时可综合,由于硬件特性,后4种应 慎用,最好作适当变通 “《=”应通过上下文关系判定是关系运算符还是代入符 位的连接也可以采用集合的方式,把并置符改成“,”即可,如: temp_4<=(‘1’,‘0’,‘1’,‘0’);其中temp_4为4位宽的位 失量,但这种方式不能用于位失量连接,如: temp_4<=(temp_2,temp_2);就是错误的
变量(VARIABLE):用于声明局部值或用于子程序中,变量的
赋值符号为“:=”, 定义格式: VARIABLE 变量名: 数据类型[:=初始值]
hwadee
2014-7-2
14
VHDL中的信号与变量
信号是实际的,是内部的一个存 储元件(SIGNAL)或者是外部 输入(IN、OUT、INOUT、 BUFFER) 变量是虚的,仅是为了书写方便 而引入的一个名称,常用在实现 某种算法的赋值语句当中 如果在一个进程中多次为一个信 号赋值,只有最后一个值会起作 用 ,这与SIGNAL的硬件特性 有关 变量赋值时,变量的值改变是立 即发生的 信号赋值用“<=”,变量赋值用 “:=”
hwadee
2014-7-2
16
标准定义的数据类型
Boolean布尔量:取值为FALSE和TRUE CHARACTER字符:ASCII字符,编程时用单引号括起来,如‘A’ STRING字符串:字符失量,双引号括起来,如“ADFBD” INTEGER整数:32位,范围从-(231-1)到(231-1); REAL实数:实数类型仅能在VHDL仿真器中使用,综合器不支持 BIT位:取值为0或1; TIME时间:范围从-(231-1)到(231-1),表达方法包含数字、 (空格)单位两部分,如(10 PS); BIT_VECTOR位矢量:其于BIT数据的数组,使用矢量必须注明宽度, 即数组中的元素个数和排列,如SIGNAL A: BIT_VECTOR (7 DOWNTO 0) NATUREAL自然数:整数的一个 POSITIVE正整数: SEVRITY LEVEL错误等级:在VHDL仿真器中,错误等级用来设计系 统的工作状态,共有四种可能的状态值:NOTE,WARNING,ERROR 和FAILURE
hwadee