VHDL结构及语言要素

合集下载

VHDL语言的基本要素(大全)

VHDL语言的基本要素(大全)

VHDL语言的基本要素一、数据对象VHDL语言的主要数据对象有信号,变量,常量。

信号—信号是电路中的物理量,对应于电路的连线、节点;信号说明全局量,用于描述中的构造体(Architecture), 实体(Intity),程序包(package)。

变量—变量是程序运算中的中间量,并不对应电路中的物理量。

变量说明局部量,用于进程语句(process), 函数(Function), 过程(procedure)。

常量—常数也不对应电路中的物理量,当常量说明全局量,在构造体(Architecture), 实体(Intity),程序包(package),进程语句(process), 函数(Function), 过程(procedure)中均可使用。

数据对象的定义格式:signal 信号名:数据类型,约束条件,表达式Variable 变量名:数据类型,约束条件:=表达式Constant 常量名:数据类型,约束条件:=表达式例如:Variable count:INTEGER RANGE 0 TO 255:=10Constant Daly:Time:=100ns信号代入和变量赋值的区别:两者形式不同,操作过程也不相同。

变量赋值符“:=”,信号的代入符“<=”。

在变量的赋值语句中,该语句一当执行,其值立即将赋予变量;而信号的代入,其语句执行后不会立即使信号发生代入,在下条语句执行时,仍使用原来的信号值,如进程语句中的敏感表的信号代入就是如此。

二、数据类型VHDL语言中的数据类型,一般而言可分为:标量类型和组合类型。

在实际使用中,也可分成予定义类型和用户定义类型。

VHDL语言是强类型的语言,主要可按如下分类和变换处理。

①标准数据类型⑴整数⑵实数(浮点数)-1.0E+38~+1.0E38 ⑶位bit(0,1)⑷位矢量⑸布尔量,“假”,“真”⑹字符(ASCⅡ)字符⑺时间⑻错误等级⑼自然数(大于等于0的整数)⑽字符串(字符矢量)②用户定义的数据类型TYPE 数据类型名{数据类型名} 数据类型定义⑴枚举类型⑵整数类型⑶实数类型⑷数组类型⑸存取类型⑹文件类型⑺记录类型⑻时间类型③用户定义子类型SUBTUPE 子类型名IS 数据类型名[范围]例:SUBTYPE digit is INTEGER RANGE 0 TO 9④数据类型转换数据类型的变换函数通常由“STD_LOGIC_1164”,“STD_LOGIC_ARITH”,“STD_LOGIC_UNSIGNED”的程序包提供例如,在STD_LOGIC_1164程序包中,TO_STD LOGIC VECTOR(A) 由BIT_VECTOR转换为STD_LOGIC_VECTORTO_BITVECTOR(A) 由STO_LOGIC_VECTOR转为BIT_VECTORTO_STDLOGIC(A) 由BIT转换为STD_LOGICTO_BIT(A) 由STD_LOGIC转换成BIT signal a: BIT_VECTOR(11 DOWNTO 0)signal b: STD_LOGIC_VECTOR(11 DOWNTO 0)a<=X”A8” 十六进制值可赋予位矢量b<=X”A8” 语法错,十六进制不能赋予.STD 矢量b<=TO_STDLOGICVECTOR(X“AF7”)b<=TO_STDLOGICVECTOR(O“5177”)八进制变换b<=TO_STDLOGICVECTCR(B“1010_1111_0111”)下表中也给出一些典型的类型变换函数三、运算符运算符的优先级如下表所示:运算符的优先级例如,并置运算符的使用:tmp_b<=b AND (en&en&en&en) y <= a & tmp_b第一个语句表示b 的4位位矢量由en 进行选择 得到一个4位位矢量输出第二个语句表示4位位矢量a 和4位位矢量b 再 次连接(并置)构成8位的位矢量y 输出 右图所示为并置运算符操作的电路示意。

EDA 第9章 VHDL结构与要素

EDA 第9章 VHDL结构与要素
9.7.2 字符串
“B”、 “X”
“O ” 、
9.7 VHDL文字规则
9.7.3 标识符及其表述规则
9.7 VHDL文字规则
9.7.4 下标名
9.8 数 据 类 型
● 标量型(Scalar Type):包括实数类型、整数类型、枚举类 型、时间类型。 ● 复合类型(Composite Type):可以由小的数据类型复合而 成,如可由标量型复合而成。复合类型主要有数组型(Array) 和记录型(Record)。 ● 存取类型(Access Type):为给定的数据类型的数据对象 提供存取方式。 ● 文件类型(Files Type):用于提供多值存取类型。
7. 字符串类型
8. 时间类型
9.8 数 据 类 型
9.8.1 VHDL预定义数据类型
9. 文件类型
9.8 数 据 类 型
9.8.2 IEEE预定义标准逻辑位与矢量
1. 标准逻辑位数据类型
2. 标准逻辑矢量数据类型
9.8 数 据 类 型
9.8.3 其他预定义标准数据类型
1. 无符号数据类型
9.8 数 据 类 型


9-10 判断下列VHDL标识符是否合法,如果有误则指出原因: 16#0FA#, 10#12F#, 8#789#, 8#356#, 2# 0101010# 74HC245 , \74HC574\, CLR/RESET, \IN 4/SCLK\, D100% 9-11 数据类型BIT、INTEGER和BOOLEAN分别定义在哪个库中?哪 些库和程序包总是可见的? 9-12 函数与过程的设计与功能有什么区别?调用上有什么区别?
3. 功能描述语句结构 ● 进程语句 ● 信号赋值语句 ● 子程序调用语句 ● 元件例化语句

第1章VHDL语言基础

第1章VHDL语言基础
(Bit)、位矢量型(Bit-vector)和整数型(Integer)等。 ➢ 在实用中,端口描述中的数据类型主要有两类:位(BIT)和
位矢量(BIT_VECTOR)。若端口定义为BIT,则其信号值 是一个1位的二进制数,取值只能是0或1;若端口定义为 BIT_VECTOR,则其信号值是一组二进制数。
➢ 在电路中,如果实体代表一个器件符号,则结构体描述了 这个符号的内部行为。当把这个符号例化成一个实际的器 件安装到电路上时,则需用配置语句为这个例化的器件指 定一个结构体(即指定一种实现方案),或由编译器自动选一 个结构体。
1. 结构体的一般语句格式 ARCHITECTURE 结构体名 OF 实体名 IS [说明语句;] BEGIN [功能描述语句;] END [ARCHITECTURE] [结构体名];
1.1 VHDL程序基本结构
一、VHDL程序设计约定 ➢ 语句结构描述中方括号“[ ]”内的内容为可选内容。 ➢ 对于VHDL的编译器和综合器来说,程序文字的大小写是不
加区分的。 ➢ 程序中的注释使用双横线“- -”。 ➢ 源程序命名与实体同名(MAX+plus Ⅱ要求)。
二、VHDL程序设计引例( 74LS00的设计 )
③ 信号赋值语句将设计实体内的处理结果向定义的信号或界面 端口进行赋值。
④ 子程序调用语句用于调用一个已设计好的子程序。
⑤ 元件例化语句对其他的设计实体作元件调用说明,并将此元 件的端口与其他的元件、信号或高层次实体的界面端口进行 连接。
A
A NAND2
Y
Y
B
B
(a)
A1
A NAND2
U1 Y
Y1
B1
B
A2
A NAND2

第九讲VHDL结构及语言要素

第九讲VHDL结构及语言要素

2006-10
26
7)实数(REAL) 或称浮点数
取值范围:-1.0E38 ~ +1.0E38 实数类型仅能用于VHDL仿真器,一般综合器 不支持。
8)字符串(string) string 是 character 类型的一个非限定数组。用
双引号将一串字符括起来。如:
variable string_var : string(1 to 7);
2006-10
14
1、常量说明
常量说明:对某一个常量名赋予一个固定的值。 格式:
constant 常数名:数据类型:= 表达式;
例: constant data: bit_vector(3 downto 0):=“1010”
constant width: integer: = 8; constant x: new_bit: = ‘x’; 常量数据类型必须与表达式的数据类型一致。
b:=not a;
2006-10
17
3、信号说明
电子硬件系统运行的基本特性:
各部分电路工作的并行特性;
信号传输过程中的延时特性;
多驱动源的总线特性;
时序电路中触发器的记忆特性等。
信号是电子系统内部硬件连接和硬件特性的抽 象表示。用来描述硬件系统的基本特性。
信号定义格式:
signal 信号名:数据类型 约束条件:= 表达式;
注:‘_’用以提高数字可读性;数字间不允许空

2006-10
2
2、字符串型文字
按字符个数多少分为: 字符:用单引号引起来的ASCII字符,可以是
数值,也可以是符号或字母。 如:‘A’,‘*’,‘Z’ 字符串:用双引号引起来的一维字符数组
2006-10

第五章 VHDL语言的语言要素

第五章 VHDL语言的语言要素

3.信号(SIGNAL)
信号赋值语句:
目标信号名<=表达式; 例如: x<=9;
y<=x;
z<=x AFTER 5ns;
25
VHDL语言的语言要素
3.信号(SIGNAL)
信号与变量的区别:
① 使用场合不同 变量在进程、函数和过程中说明; 信号在结构体中说明。 ② 赋值符号不同 变量用“:=”号赋值, 其值被立即使用(无时间延时); 信号用“<=”赋值,其值可以附加延时。
VHDL语言的语言要素
5 VHDL语言的语言要素
语言要素是组成编程语句的基本单元,主要有:
■ 数据对象(Object)
■ 数据类型(Type)
■ 操作数(Operands)
■ 运算操作符(Operator)
1
VHDL语言的语言要素
5.1 VHDL语言的文字规则
任何一种程序设计语言都有自己的一套书写符 1.数字型文字 号和语法规则,这些符号和语法规则构成了程序设 数字型文字有多种表达方式,包括: 计语言的文字规则。 ● 整数型文字 ● 实数型文字 ● 数制基数型文字 ● 物理量型文字
2
VHDL语言的语言要素
1.数字型文字 (1)整数型文字 整数型文字都是十进制数,由数字和下划线组成。
例如:
0,6,876,516E2,23_456_789
156E2 = 15600
23_456_789 = 23 456 789
3
VHDL语言的语言要素
1.数字型文字 (2)实数型文字 也是十进制数,但必须带小数点,由数字、小数
;等效B“001010”,长度为6
X“BC6”;等效B“101111000110”,长度为12
9
VHDL语言的语言要素

第八章VHDL结构与要素

第八章VHDL结构与要素

FUNCTION max (a,b : IN STD-LOGIC-VECTOR )函数首 RETURN STD-LOGIC-VECTOR ; FUNCTION max (a,b : IN BIT-VECTOR ) RETURN BIT-VECTOR; FUNCTION max (a,b : IN INTEGER ) RETURN INTEGER; END; 函数首 函数首
(3) 例 ENTITY MCU1 IS GENERIC(addrwidth:INTEGER:=16); PORT(add_bus:OUT STD_LOGIC_VECTOR( addrwidth-1 DOWNTO 0); …
(4) 特点 A、 与常数不同,类属的值可以由设计体 外部提供,常数只能从实体内部得到 赋值 B、 在一个实体中定义的、来自外部赋入 类属的值可以在实体内部或与之相应 的结构体中读到 C、 数据类型通常取INTEGER或TIME等类 型,但是VHDL综合器只支持数据类型 为整数的类属值
8-3 子程序
顺序语句定义和完成算法的程序模块; 定义和完成算法的程序模块 用顺序语句定义和完成算法的程序模块; 可以在三个不同的位置定义:程序包、结构体、进程; 可以在三个不同的位置定义:程序包、结构体、进程; 具有可重载性,每一次调用将在综合后的硬件中产生相应的模块; 具有可重载性,每一次调用将在综合后的硬件中产生相应的模块; 可重载性 有过程和函数两种类型 8-3-1 函数 自定义函数 预定义函数 函数的表达格式——由函数首和函数体组成 由函数首和函数体组成 函数的表达格式 FUNCTION 函数名 (参数表) RETURN 数据类型 参数表) 函数首 函数体
程序包(体) 定义函数体
结束FUNCTION语句 结束PACKAGE BODY语句

第五讲 VHDL语言程序的基本结构

第五讲 VHDL语言程序的基本结构

端口说明
端口说明是对基本设计实体(单元)与外部接口的描 述,也可以说是对外部引脚信号的名称,数据类型和 输入,输出方向的描述; 其一般书写格式为: PORT(端口名{,端口名}:方向 数据类型名; 端口名{,端口名}:方向 数据类型名); 举例: PORT(d0,d1,sel : IN BIT; q : OUT BIT; bus : OUT BIT_VECTOR(7 DOWNTO 0) );
敏感信号: 只要有一个发 生变化(如由 "0"变成"1" 或由"1"变为 "0")都将启 动PROCESS语 句.
PROCESS语句的特点
(1) 进程内部的所有语句都是顺序执行的. (2) 多进程之间,是并行执行的,并可访问构 造体或实体中所定义的信号. (3) 进程的启动是由进程标识符Process后的 敏感信号来触发,也可用WAIT语句等待一个 触发条件的成立. (4) 各进程之间的通信是由信号来传递的.
第2章 VHDL语言程序的基本结构 章 语言程序的基本结构
主要内容
VHDL语言设计的基本单元及其构成 : 语言
实体 + 构造体
VHDL语言构造体的子结构描述 : 语言
块,进程,子程序
包集合, 包集合,库及配置
一个完整的VHDL语言程序 通常包含5个部分:
必 备 部 分
库,包集合 实体(Entity)
构造体:描述系统内部的结构和行为;
包集合:存放各种设计模块都能共享的数据类型, 常数和子程序等; 库: 存放已经编译的实体,构造体,包集合和 配置.
前四种是可分别编译的源设计单元
2.1 VHDL语言设计的基本单元及其构成 语言 实体+构造体 构造体) (实体 构造体)

VHDL简介

VHDL简介

VHDL简介——王春桃内容提要VHDL程序结构VHDL基本语法总结 VHDL语言要素VHDL设计常见错误VHDL程序结构第二章VHDL程序的基本结构一个完整的VHDL语言程序通常包含实体(Entity)、结构体(Architecture)、配置(Configuration)、)包集合(Package)、库(Library)5个部分。

VHDL基本结构实体和结构体是最基本的两个组成部分,两者配合可以组成简单的VHDL文件。

一个可综合的VHDL描述的的最小和最基本的逻辑结构中,IEEE标准库说明、实体和结构体是最基本的和不可缺少的三个部分,其他的结构层次可根据需要选用。

VHDL 基本结构VHDL 设计VHDL 文件程序包(Packages )声明在设计或实体中将用到的常数数据类型声明在设计或实体中将用到的常数,数据类型,元件及子程序等实体(Entities )声明到其他实体及其结构体A hit t 他设计的接口,即定义本设计的输入/出端口(Architectures )定义了实体的实现。

即本设计的输出端电路的具体描述一、实体(Entity)实体(VHDL表达的所有设计均与实体有关,实体是设计中最基本的模块。

设计的最顶层是顶层实体。

如果设计分层次,那么在顶级实体中将包含较低级别的实体那么在顶级实体中将包含较低级别的实体。

实体中定义了该设计所需的输入/输出信号,信号的输入输出类型被称为端模式,同时,/类型被称为端口模式,同时,实体中还定义他们的数据类型。

实体(Entity)实体作为个实体的组部分其功能这个实体作为一个设计实体的组成部分,其功能是对这个设计实体与外部电路进行接口描述实体是设计实体的表层设计单元,实体说明部分规定了设计单元的输入输出接口信号或引脚,它是设计实体对外的一个通信界面。

就个设计实体而言外界所看到的仅仅是它的界面上的 就一个设计实体而言,外界所看到的仅仅是它的界面上的各种接口。

设计实体可以拥有一个或多个结构体,用于描述此设计实体的逻辑结构和逻辑功能。

第4章VHDL语言基础

第4章VHDL语言基础
BEGIN 结构体描述部分;
END 结构体名;
4.1.3 结构体部分
结构体组成

构 体

明 结

体 结 构 体
功 能 描 述
常数说明 数据类型说明
信号说明 例化元件说明 子程序说明
块语句 进程语句 信号赋值语句 子程序调用语句 元件例化语句
结构体描述风格
行为描述 描述该设计单元的功能,主要使用函数、过程和进程语 句,以算法形式描述数据的变换和传送
例4-4
Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Use ieee.std_logic_arith.all;
行为描述
Entity eqcomp4 is Port (a,b: in std_logic_vector (3 downto 0); equals: out std_logic);
4.1.2 实体部分
实体(ENTITY)
实体是一个设计实体的表层设计单元,其功能是 对这个设计实体与外部电路进行接口描述。它规定了 设计单元的输入/输出接口信号或引脚,是设计实体 经封装后对外的一个通信界面。类似于原理图中的一 个部件符号。
4.1.2 实体部分
实体格式
ENTITY 实体名 IS
书写格式: GENERIC([常数名:数据类型[:设定值]
{;常数名:数据类型[:=设定值 ]}); 例4-1
GENERIC (cntwidth : integer:=4);
4.1.2 实体部分
PORT端口
用于定义模块所有的输入/输出信号,相当于定义一个 模块符号

EDA教案--2VHDL语言

EDA教案--2VHDL语言
: 端口名{,端口名}:方向 数据类型名);
例如:PORT(a,b:IN STD_LOGIC; s:IN STD_LOGIC; y:OUT STD_LOGIC);
端口方向包括: IN; --输入, 符号: OUT; --输出, 符号: INOUT;--双向, 符号: BUFFER; --具有读功能的输出,符号:
EDA教案--2VHDL语言
一、 VHDL程序设计基本结构
库、程序包
实体(ENTITY)


结构体

(ARCHITECTURE)

进程
或其它并行结构
配置(CONFIGURATION)
库、程序包
库(LIBRARY)——存放预先设计好的程序包和 数据的集合体。
程序包(PACKAGE)——将已定义的数据类型、 元件调用说明及子程序收集在一起,供VHDL设计实 体共享和调用,若干个包则形成库。
(15 DOWNTO 0);
信号赋值语句: 目标信号名<=表达式
例如:x<=9; y<=x; z<=x AFTER 5ns;
信号与变量的区别: (1)使用场合不同;(变量:进程;信号:结构体) (2)变量用“:=”号赋值,其值被立即使用(无 时间延迟);而信号用“<=”赋值,其值可以附加 延迟。
3. 常数(CONSTANT) 规则:常数在程序前部定义,且一旦被赋值就不能再 改变。 常数定义格式: CONSTANT 常数名:数据类型:=初值;
GENERIC(m:TIME:=1 ns);--说明m是 一个值为1ns的时间参数
则程序语句:tmp1 <= d0 AND se1 AFTER m;--表 示d0 AND se1经1ns延迟后才送到tem1。
(2)端口说明是描述器件的外部接口信号的说 明,相当于器件的引脚说明。其格式为: PORT(端口名{,端口名}:方向 数据类型名;

VHDL语言要素

VHDL语言要素
结果 x<=b+c y<=b+c
9
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;
architecture behave of bianliang is begin process(a,b,c)
use ieee.std_logic_unsigned.all;
end zifuchuan;
architecture rtl of zifuchuan is
begin b<=X"a_b";
end rtl;
4
3 标识符 规则: l有效的字符:包括26个大小写英文字母,数字包括0~9 以及下划线“_”
。 l任何标识符必须以英文字母开头。 l必须是单一下划线“_”,且其前后都必须有英文字母或数字。 l标识符中的英语字母不分大小写。
实际上是一种指针类型
文件类型(Files Type)
用于定义代表文件的对象
17
4.3.1 VHDL的预定义数据类型
VHDL预定义数据类型都是在VHDL标准程序包STANDARD中定义的,在实际使用中 已经自动包含进VHDL的源文件中,不必通过USE语句显式调用。
1. 布尔(BOOLEAN)数据类型
8
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity xinhao is port(a,b,c:in std_logic_vector(3 downto 0); x,y:out std_logic_vector(3 downto 0)); end xinhao;

第9章VHDL结构与要素

第9章VHDL结构与要素
存放已经编译的实体、结构体、包集合和配置
2019/7/24
2
9.1 实体
VHDL实体作为一个设计实体(独立的电路功能结构)的组成部分,其功能是 对这个设计实体与外部电路进行接口描述。
实体是设计实体的表层设计单元,实体说明部分规定了设计单元的输入输 出接口或引脚,它是设计实体对外的一个通信界面。
它可以是一个简单的数字电路,也可以是复杂的数字电路,但基本构成是 一致的。
通常命名为behavioral(行为), dataflow(数据 流),structural(结构)
位于ARCHITECTURE和BEGIN之间,对信号、常数、数据类型、函数 进行定义
位于BEGIN和END之间,描述构造体的行为及连接关系
2019/7/24
7
在HDL设计中,设计者将自上至下分为3个层次:
2. 有符号数据类型(SIGNED TYPE)
例如: SIGNED'("0101") 代表 +5,5 SIGNED'("1011") 代表 –5
2019/7/24
变量var有11位数值, 最高位是var(0)
信号sig有6位数值, 最高位是sig(5)
最高位是符号位
16
9.9 VHDL语言的运算操作符
实体名 端口名 方向
实体
进 程 语
结 构 体

2019/7/24
4
一、实体说明
基本结构:ENTITY 实体名 IS [类属参数说明]; [端口说明]; END 实体名;
1、类属参数说明 必须放在端口说明之前,用于指定参数。
如:q<=tmp AFTER m;说明tmp建立一个延时值。 GENERIC(m:TIME:=1ns);构造体内m的值为1ns。 2、端口说明

第5章_vhdl语言要素

第5章_vhdl语言要素
1)数字型文字
1)整数文字:整数文字都是十进制的数,如:4,578, 0,156E2(=15600),45_234_287(=45234287)。 数字间的下划线仅仅是为了提高文字的可读性,相当 于一个空的间隔符。 (2)实数文字:实数文字也都是一种十进制的数,但必 须带有小数点,如:18.993,1.0,0.0, 88_670_551.453_909 (=88670551.453909)。
第5章 VHDL设计入门
一、第一个数代表一 个八进制数,即代表一个3位(BIT)的二进制数。 X:十六进制基数符号(0~1),代表一个十六进制 数,即代表一个4位的二进制数。 例如:B“1_1101_1110” 二进制数数组,位矢数组长度 是9;X“AD0”- - 十六进制数数组,位矢数组长度 是12。
第5章 VHDL设计入门
二、数据对象
在VHDL中,数据对象(Data Objects)类似于一 种容器,它接受不同数据类型的赋值。数据对象有三 种,即常量(CONSTANT)、变量(VARIABLE)和信 号(SIGNAL)。前二种可以从传统的计算机高级语言 中找到对应的数据类型,其语言行为与高级语言中的 变量和常量十分相似。但信号是具有更多的硬件特征 的特殊数据对象,是VHDL中最有特色的语言要素之一。
第5章 VHDL设计入门
二、数据对象
信号与端口的区别:
除没有方向外,信号与实体的“端口(port)”概念 相似,端口就是一种隐形的信号。 entity exam is port([signal]a,b:in std_logic; ([singal]c:out std_logic); end exam; 端口是一种有方向的信号。即输出端口不能读出数据, 只能写入数据;输入端口不能写入。 信号本身无方向,可写可读。 信号定义:SIGNAL 信号名:数据类型[:=初始值];

课件:第02讲 VHDL结构和语法要素

课件:第02讲  VHDL结构和语法要素

以半加器的设计为例,给出不同的描述方法
第2讲 VHDL结构与要素
§2. 1.4 配置
可以为实体指定或配属一个结构体.
CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 END FOR; END 配置名;
txwy
第2讲 VHDL结构与要素
§2.2 VHDL的语法要素
➢2.2.1 VHDL的词法元素 ➢2.2.2 VHDL的数据对象 ➢2.2.3 VHDL的数据类型 ➢2.2.4 VHDL的操作符
std_logic_vector
CONV_INTEGER(A)
由signed\unsigned转为integer
Std_logic_unsi gned
CONV_INTEGER(A)
由std_logic_vector转为 integer
txwy
第2讲 VHDL结构与要素
§2.2.4 VHDL的操作符
txwy
第2讲 VHDL结构与要素
描述方式
优点
缺点
适用场合
结构化 描述
数据流 描述 行为 描述
txwy
连接关系 电路不易理解、 清晰,电路 繁琐、复杂 模块化清晰
布尔函数 不易描述复杂电 定义明白 路,修改不易
电路层次 化设计
小门数 设计
电路特性 清楚明了
进行综合效率 大型复杂的电
相对较低
路模块设计
•architecture rt1 of var is •begin •process •variable a,b : std_logic; •begin • a:=b; • b:=a; •end process; •end architecture rtl;

第三章 VHDL程序结构与要素

第三章 VHDL程序结构与要素

件、函数和过程只能用于这个结构体中,若希望其能
用于其他的实体或结构体中,则需要将其作为程序包
来处理。
第3章
VHDL程序结构与要素
ARCHITECTURE behavioral OF example_dairu IS
SIGNAL a, b, c, d : BIT ;
SIGNAL temp0, temp1 : STD_LOGIC ; BEGIN
第3章
VHDL程序结构与要素
数 D1 据 输 入 D2-1 n
D0

Y
数 据 输 出
n 位地址选择信号
S 0 1
Y a b
第3章
VHDL程序结构与要素
【例3-1】 2选1多路选择器程序 LIBRARY IEEE; --IEEE库使用说明语句 USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 IS --实体说明部分 PORT( a,b : IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC ); END ENTITY mux21;
[3]结构体说明用于描述该设计实体内部工作的逻辑关 系,是不可视部分。在一个实体中,可以含有一个或一个 以上的结构体,而在每一个结构体中又可以含有一个或多 个进程以及其他的语句。
第3章
VHDL程序结构与要素
3.1.1 实体
实体是一个设计实体的表层设计单元,其功能
是对这个设计实体与外部电路进行接口描述。它规
INOUT
BUFFER
双向(可以输入,也可以输出)
输出(结构体内可再使用),可以读或 写
第3章
VHDL程序结构与要素
IN
OUT

VHDL基本结构与语法

VHDL基本结构与语法

第5章 VHDL 基本结构与语法本章通过几个例题介绍VHDL 语言的基本结构和语法规则5.1 VHDL 基本结构一个相对完整的VHDL 设计由以下四部分组成:(1) 库LIBRARY 、程序包PACKAGE :库用于存储预先完成的程序包和数据集合体;程序包用于声明在设计中将要用到的常数、数据类型、元件及子程序等。

(2) 实体ENTITY :定义设计的输入输出端口。

(3) 结构体ARCHITECTURE :定义实体的实现,即电路的具体描述。

可有多个结构体,但只有一个起作用。

(4) 配置CONFIGURA TION :为实体选定某个特定的结构体。

以上四个部分不是每个VHDL 程序必须的,但每个VHDL 程序至少含有1个实体和1个结构体。

1个实体可有多个结构体,通过配置选择1个结构体对实体起作用,其他结构体不起作用。

当只有1个结构体时不要实体。

【例5-1】2选1多路数据选择器,其功能见图5-1。

功能描述为当S=0时A 送Y , S=1时B 送Y 。

其对应的VHDL 描述为:ENTITY mux21a IS --给出实体名mux21a 和管脚定义 PORT (a,b : IN BIT ;s : INBIT ; y : OUT BIT );END mux21a ;ARCHITECTURE one OF mux21a IS --结构体,描述电路器件的内部逻辑 BEGIN功能或电路结构。

y <=a WHEN s=’0’ ELSE b;END one ;综合后结构体的门电路见图5-3。

5.1.1 实体ENTITY :定义本设计的输入输出端口/信号。

图5-1 例5-1功能示意图图5-3 例5-1综合后的门电路A S约定:[]表示为可选项;--开始的语句为注释,不参与编译和综合;黑体单词为保留字。

1、实体框架:ENTITY实体名IS--此处无分号[GENERIC(常数名:数据类型[:设定值]);]PORT - -端口定义(端口1:端口模式端口类型;…端口n:端口模式端口类型- -最后一个无分号);END[ENTITY] 实体名;注:END中带ENTITY、ARCHITECTURE为IEEESTDl076_1993版的语法要求,不带为IEEESTD1076 1987的语法要求。

VHDL语言详解

VHDL语言详解

VHDL语⾔详解第⼆章 VHDL程序基础2.1 VHDL程序结构2.2 VHDL的语⾔元素2.3 VHDL的基本描述语句2.4 VHDL结构体的三种描述⽅法2.1 VHDL程序结构2.1.1 VHDL程序基本结构2.1.2 VHDL结构体的基本⼦结构2.1 VHDL程序结构2.1.1 VHDL程序基本结构例1 ⼀个2输⼊的与门的逻辑描述LIBRARY ieee; --库说明语句USE ieee.std_logic_1164.ALL; --程序包说明语句ENTITY and2 ISPORT(a,b : IN STD_LOGIC;y : OUT STD_LOGIC);END and2;ARCHITECTURE and2x OF and2 ISBEGINy<=a AND b;END and2x;实体部分结构体部分VHDL设计⽂件的两个基本组成部分实体(Entity)结构体(Architecture)配置(Configuration)包集合(Package)库(Library)⼀个完整的VHDL程序库⽤于存放已编译的实体,结构体,包集合和配置2.1.1 VHDL程序基本结构实体部分描述设计系统的外部接⼝信号(即输⼊/输出信号)结构体⽤于描述系统的内部电路配置⽤于从库中选取所需元件安装到设计单元的实体中包集合存放各设计模块能共享的数据类型,常数,⼦程序等2.1.1.1 实体(ENTITY)实体的⼀般格式为:ENTITY 实体名 IS[类属参数说明];[端⼝说明];END;ENTITY,IS,END是VHDL的关键字(保留字).实体中的每⼀个I/O信号被称为端⼝,其功能对应于电路图符号的⼀个引脚.端⼝说明则是对⼀个实体的⼀组端⼝的定义,即对基本设计实体与外部接⼝的描述.端⼝是设计实体和外部环境动态通信的通道.ayand2b类属参数说明是可选部分.如果需要,可使⽤以"GENERIC"语句来指定该设计单元的类属参数(如延时,功耗等).实体名,端⼝名等均应为符合VHDL命名规则的标识符.端⼝说明的⼀般格式为:PORT(端⼝名{,端⼝名}:端⼝模式数据类型;端⼝名{,端⼝名}:端⼝模式数据类型);端⼝模式⽤来说明数据传输通过该端⼝的⽅向.端⼝模式有以下⼏类:IN(输⼊):仅允许数据流进⼊端⼝.主要⽤于时钟输⼊,控制输⼊,单向数据输⼊.OUT(输出):仅允许数据流由实体内部流出端⼝.该模式通常⽤于终端计数⼀类的输出,不能⽤于反馈.BUFFER(缓冲):该模式允许数据流出该实体和作为内部反馈时⽤,但不允许作为双向端⼝使⽤.INOUT(双向):可以允许数据流⼊或流出该实体.该模式也允许⽤于内部反馈.如果端⼝模式没有指定,则该端⼝处于缺省模式为:IN .数据类型原则上可以是任何标准的数据类型和⽤户⾃定义类型.PORT (a,b : IN STD_LOGIC;y : OUT STD_LOGIC);inininoutoutbufferinoutmodemode模式及其信号源类属参数说明的格式为:GENERIC(端⼝名{,端⼝名}:[IN] ⼦类型 [:=初始值]{;端⼝名{,端⼝名}: [IN] ⼦类型 [:=初始值]} );例2:加⼊类属说明的2输⼊的与门的逻辑描述ENTITY and2 ISGENERIC (rise,fall:time);PORT(a,b: IN STD_LOGIC;y : OUT STD_LOGIC);END and2;ARCHITECTURE and2x OF and2 ISSIGNAL u: BIT;BEGINu<=a AND b;y<=u after(rise) when u='1' else u after(fall) ;END and2x;例3: 四位加法器实体说明程序ENTITY add4 ISPORT(a, b: IN STD_LOGIC_VECTOR(3 downto 0);Ci: IN STD_LOGIC;Sum: OUT STD_LOGIC_VECTOR(3 downto 0);Co: OUT STD_LOGIC);END add4;由实体说明画出四位加法器add4的电路图如下所⽰.add4a[3..0]b[3..0]Sum[3..0]CiCo2.1.1.2 结构体(ARCHITECTURE )结构体的⼀般格式如下:ARCHITECTURE 结构体名 OF 实体名 IS[结构体说明部分];BEGIN[并发处理语句];END 结构体名;结构体说明是指对结构体需要使⽤的信号,常数,数据类型和函数进⾏定义和说明.并发处理语句位于BEGIN和END之间,这些语句具体地描述了构造体的⾏为.并发处理语句是功能描述的核⼼部分,也是变化最丰富的部分.并发处理语句可以使⽤赋值语句,进程语句,元件例化语句,块语句以及⼦程序等.需要注意的是,这些语句都是并发(同时)执⾏的,与排列顺序⽆关.2.1.1.3 配置(CONFIGURATION)配置的基本格式为:CONFIGURATION 配置名 OF 实体名 IS[配置说明];END 配置名;配置语句描述了层与层之间的连接关系,以及实体与构造体之间的连接关系.设计者可以利⽤配置语句选择不同的构造体,使其与要设计的实体相对应;在仿真某⼀个实体时,可以利⽤配置选择不同的构造体进⾏性能对⽐实验,以得到性能最佳的构造体. CONFIGURATION 配置名 OF 实体名 ISFOR 选配结构体名END FOR;END 配置名;配置语句根据不同情况,其说明语句有简有繁.最简单的缺省配置格式为:例4:加⼊了配置的4位等值⽐较器设计⽂件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY comp4 ISPORT(a, b: IN STD_LOGIC_VECTOR(3 downto 0);y: OUT STD_LOGIC);END comp4;--结构体 1:ARCHITECTURE behavior OF comp4 ISBEGINComp: PROCESS(a, b)BEGINIF a=b THENy<='1';ELSEy RETURN '0';WHEN 'Z'=> RETURN 'Z';END CASE;END invert;END BODY;⼀个包集合说明⾄多可以带⼀个包体,包体和包头使⽤相同的名字.包体的内容是基本说明和⼦程序体说明.但要注意,若包集合中含有⼦程序说明时,必须将⼦程序放在对应的包体中.包体中的⼦程序及其相应的说明是专⽤的,不能被其它VHDL单元所引⽤;⽽包集合中的说明是公⽤的,它可以独⽴地编译并插⼊设计库中.包集合体是次级设计单元,只有在其对应的主设计单元编译并插⼊设计库之后,才可独⽴地编译并插⼊到设计库中.程序包举例(见vhdl程序example )2.1.1.5 库(LIBRARY)库是⽤来放置可编译的设计单元的地⽅,通过其⽬录可查询和调⽤. VHDL中的库⼤致可归纳为5种:IEEE库,STD库,ASIC⽮量库,WORK库和⽤户定义库.IEEE库.常⽤的资源库.IEEE库包含经过IEEE正式认可的STD_LOGIC_1164包集合和某些公司提供的⼀些包集合,如STD_LOGIC_ARITH(算术运算库),STD_LOGIC_UNSIGNED等.STD库.VHDL的标准库.库中存放有称为"standard"的标准包集合,其中定义了多种常⽤的数据类型,均不加说明可直接引⽤.STD 库中还包含有称为"textio"的包集合.在使⽤"textio"包集合中的数据时,应先说明库和包集合名,然后才可使⽤该包集合中的数据. ASIC⽮量库.在VHDL语⾔中,为了进⾏门级仿真,各公司可提供⾯向ASIC的逻辑门库.在该库中存放着与逻辑门⼀⼀对应的实体.为了使⽤⾯向ASIC的库,对库进⾏说明是必要的.WORK库.WORK库是现⾏作业库.设计者所描述的VHDL语句不需要任何说明,将都存放在WORK库中.WORK库对所有设计都是隐含可见的,因此在使⽤该库时⽆需进⾏任何说明.⽤户定义库.⽤户定义库简称⽤户库,是由⽤户⾃⼰创建并定义的库.设计者可以把⾃⼰经常使⽤的⾮标准(⼀般是⾃⼰开发的)包集合和实体等汇集成在⼀起定义成⼀个库,作为对VHDL标准库的补充.⽤户定义库在使⽤时同样要⾸先进⾏说明.上述5类库中,除了STD库和WORK库之外的其它库均为资源库.资源库是存放常规元件和标准模块的库,使⽤时需预先说明.库说明语句的语法形式为:LIBRARY 库名; --说明使⽤什么库USE 包集合名; --说明使⽤库中哪⼀个包集合及包集合中的项⽬(如过程名,函数名等)包集合名最多为三个层次,即 :library-name. packge-name. item-nameLIBRARY 语句和USE语句的作⽤范围:仅限于紧跟起后的实体和结构体.2.1.2 VHDL结构体的基本⼦结构在规模较⼤的电路设计中,整个电路将被分成若⼲个相对独⽴的模块来描述.这样,⼀个结构体可以⽤⼏个⼦结构,即相对独⽴的⼏个模块来构成.VHDL语⾔有以下3种形式的⼦结构描述语句:BLOCK 语句结构PROCESS 语句结构SUBPROGRAMS 结构2.1.2.1 块( BLOCK )BLOCK语句的语法格式为:块标号:BLOCK [(块保护条件)][说明语句];BEGIN[并发处理语句];END BLOCK 标号名;保护条件是可选项,它是⼀个布尔表达式.如果有保护条件,则该条件应⽤圆括号括起来,放在BLOCK之后.保护条件的作⽤是:只有当其为真时,该块中的语句才被启动执⾏;否则,该块中的语句不被执⾏.BLOCK语句中所描述的各个语句是可以并⾏执⾏的,它和书写顺序⽆关.⼀个⼤规模的电原理图通常可以分割成多张⼦原理图,以便于设计和存档.同样,在VHDL程序设计中,构造体对应整个电原理图,⽽构造体可由多个BLOCK块组成,每⼀个BLOCK块则对应⼀张⼦原理图.电原理图的分割关系和VHDL程序中⽤BLOCK块分割构造体的关系是⼀⼀对应的.例7 ⽤BLOCK语句描述2选1电路的程序.ENTITY mux2_1 ISPORT(d0, d1, sel : IN STD_LOGIC;q :OUT STD_LOGIC);END mux2_1;ARCHITECTURE amux OF mux2_1 ISSIGNAL tmp1,tmp2,tmp3 : STD_LOGIC;BEGINcale: BLOCKBEGINtmp1<=d0 AND sel;tmp2<=d1 AND (not sel);tmp3<=tmp1 OR tmp2;q<=tmp3;END BLOCK cale;END amux;上述结构体中只有⼀个 BLOCK块,若电路复杂时可由⼏个BLOCK块组成.2选1 数据选择器d1d0qselu2u1u3tmp1tmp2tmp3例8 ⽤带保护条件的BLOCK语句描述⼀个锁存器的结构.ENTITY latch ISPORT(d, clk : IN STD_LOGIC;q, qn : OUT STD_LOGIC);END latch;ARCHITECTURE latch_a OF latch ISBEGINg1:BLOCK(clk='1')BEGINq<=guarded d after 5ns;qn<=guarded not(d) after 7ns;END BLOCK g1;END latch_a;qnqQD Cdclk在BLOCK块中的两个信号传送语句都写有前卫关键词guarded,表明只有clk='1'为真时,这两个语句才能执⾏.(注意 :这⾥的综合⼯具不⽀持 guarded block 语句和 after 短语.)2.1.2.2 进程( PROCESS )PROCESS语句是⼀种并发处理语句,在⼀个构造体中多个PROCESS语句可以同时并发运⾏.因此,PROCESS语句是VHDL中描述硬件系统并发⾏为的最常⽤,最基本的语句.进程语句的⼀般格式为;[进程名:] PROCESS (敏感信号表)进程说明语句BEGIN顺序描述语句;END PROCESS [进程名];例9 利⽤PROCESS语句设计与⾮门电路.nandx: PROCESS (a, b)BEGINy<=a NAND b AFTER 10ns;END PROCESS nandx;敏感信号表所标明的信号是⽤来启动进程的.敏感信号表中的信号⽆论哪⼀个发⽣变化(如由'0'变'1'或由'1'变'0' )都将启动该PROCESS语句.⼀旦启动后, PROCESS中的语句将从上⾄下逐句执⾏⼀遍.当最后⼀个执⾏完毕以后,即返回到开始的PROCESS语句,等待下⼀次启动.因此,只要PROCESS中指定的信号变化⼀次,该PROCESS语句就会执⾏⼀遍. PROCESS内部各语句之间是顺序关系 .在系统仿真时, PROCESS语句是按书写顺序⼀条⼀条向下执⾏的.⽽不象BLOCK中的语句可以并⾏执⾏.若构造体中有多个进程存在,各进程之间的关系是并⾏关系 ;进程之间的通信则⼀边通过接⼝由信号传递,⼀边并⾏地同步执⾏.2.1.2.3 ⼦程序( SUBPROGRAM )⼦程序的特点:⼦程序可以在结构体或程序包的任何位置被调⽤,⽽且可以反复调⽤.⼦程序是⼀个⾮重⼊的程序,即⼦程序返回后才能再被调⽤.在调⽤时⼦程序⾸先要进⾏初始化,执⾏结束后⼦程序终⽌;再调⽤时要再进⾏初始化.因此,⼦程序内部的值不能保持.VHDL的⼦程序具有可重载性,即允许有许多重名的⼦程序,但这些⼦程序的参数类型和返回数值类型是不同的.VHDL的⼦程序有两种类型:过程(PROCEDURE)函数(FUNCTION)过程(PROCEDURE)过程语句的结构:PROCEDURE 过程名(参数1;参数2; (I)[定义语句];BEGIN[顺序处理语句];END 过程名;过程语句的调⽤格式:过程名(实际参数表);例10 设计⼀个从两个整数中求取最⼤值的过程.PROCEDURE max(a, b: IN INTEGER;y: OUT INTEGER) ISBEGINIF (ay<=b;ELSEyb) THENtmp:=a;ELSEtmp:=b;END IF;RETURN tmp;END max;函数的参数均为输⼊参数.函数调⽤返回⼀个指定数据类型的值.例11 在结构体中调⽤求最⼤值的函数.LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.newlib.ALL;ENTITY dpeak ISPORT(clk, set : IN STD_LOGIC;date : IN STD_LOGIC_VECTOR(5 downto 0);dout : OUT STD_LOGIC_VECTOR(5 downto 0));END dpeak;ARCHITECTURE rtl OF dpeak ISSIGNAL peak : STD_LOGIC_VECTOR(5 downto 0);BEGINdout<=peak;PROCESS (clk)BEGINIF (clk'event and clk='1') THENIF (set='1') THENpeak<=date;ELSEpeak<= max(date,peak);END IF;END IF;END PROCESS;END rtl;2.2 VHDL的语⾔元素2.2.1 标识符2.2.2 数据对象2.2.3 数据类型2.2.4 运算符与操作符2.2.5 属性标识符规则:标识符规则是在书写VHDL程序时的⼀般⽂字规则.基本标识符由字母,数字以及下划线字符组成,且具有以下特征要求:●第⼀个字符必须是字母;●最后⼀个字符不能是下划线;●不允许连续两个下划线;●在标识符中⼤,⼩写字母是等效的.● VHDL中的注释⽂字⼀律为2个连续的连接线"--",可以出现在任⼀语句后⾯,也可以出现在独⽴⾏;● VHDL的保留字(关键字)不能⽤于标识符;2.2.1 标识符如下标识符是⾮法的:_ tx_clk8B10Blarge#numberlink__barselectrx_clk_例如:如下标识符是合法的:tx_clkThree_state_Enablesel7DHIT_1124--标识符必须起始于字母--只能是字母,数字,下划线--不能有连续两个下划线--关键字(保留字)不能⽤于标识符--最后字符不能是下划线2.2.2 数据对象在VHDL中,数据对象是可以赋予⼀个值的客体.常⽤的数据对象为常量,变量和信号,在使⽤前必须给予说明.●常量(CONSTANT)常量是指在设计描述中不会变化的值.在VHDL描述中,⼀般⽤常量名代替数值.常量说明语句的⼀般格式为:CONSTANT 常量名{,常量名}:数据类型 := 取值;例如: CONSTANT width : integer : = 8 ;常量所赋值和定义的数据类型应⼀致.常量⼀旦赋值就不能再改变.●变量(VARIABLE)变量是暂存数据的量.变量说明语句的格式是:VARIABLE 变量名{,变量名}:数据类型 [:=初始值];例如:VARIABLE count: INTEGER RANGE 0 TO 99 : =0变量是⼀个局部量 ,它只⽤于进程和⼦程序.变量必须在进程或⼦程序的说明区域中加以说明.变量赋值是直接的,⾮预设的 ,它在某⼀时刻仅包含⼀个值.变量的赋值⽴即⽣效,不存在延时⾏为.变量常⽤在实现某种运算的赋值语句中.赋值语句中的表达式必须与⽬标变量具有相同的数据类型.变量赋值语句格式为: ⽬标变量名 := 表达式;●信号(SIGNAL)信号是电⼦电路内部硬件实体相互连接的抽象表⽰.信号能够代表连线,也可内连元件,端⼝也是信号.信号说明语句的格式为:SIGNAL 信号名{,信号名} :数据类型 [:=初始值];例如: SIGNAL count: BIT_VECTOR(3 downto 0);信号包括I/O引脚信号以及IC内部缓冲信号,有硬件电路与之对应,故信号之间的传递有实际的附加延时.信号通常在构造体,包集合和实体中说明;信号不能在进程中说明(但可以在进程中使⽤).硬件中的信号总是同时⼯作的,即信号同时在各个模块中流动,这就是硬件电路的并发性 .HDL体现了实际电路中信号"同时"流动的这种基本特性.信号赋值语句格式为: ⽬标信号名 <= 表达式;赋值语句中的表达式必须与⽬标信号具有相同的数据类型.信号和变量的主要区别:1. 变量是⼀个局部量,只能⽤于进程或⼦程序中;信号是⼀个全局量,它可以⽤来进⾏进程之间的通信.2. 变量赋值⽴即⽣效,不存在延时⾏为;信号赋值具有⾮⽴即性,信号之间的传递具有延时性.4. 信号赋值可以出现在进程中,也可以直接出现在结构体中,但它们的运⾏含义不同:前者属顺序信号赋值,此时的赋值操作要视进程是否已被启动;后者属并⾏信号赋值,其赋值操作是各⾃独⽴并⾏发⽣的.3. 变量⽤作进程中暂存数据的单元;信号⽤作电路中的信号连线.5. 在进程中变量和信号的赋值形式与操作过程不同:在变量的赋值语句中,该语句⼀旦被执⾏,其值⽴即被赋予变量.在执⾏下⼀条语句时,该变量的值即为上⼀句新赋的值.在信号的赋值语句中,该语句即使被执⾏,其值不会使信号⽴即发⽣代⼊,在下⼀条语句执⾏时,仍使⽤原来的信号值.直到进程结束之后,所有信号赋值的实际代⼊才顺序进⾏处理.因此,实际代⼊过程和赋值语句的执⾏是分开进⾏的.如例12所⽰.例12 信号和变量值代⼊的区别举例PROCESS (a,b,c,d)BEGINd<=a;x<=b+d;d<=c;y<=b+d;END PROCESS;结果: x<=b+c;y<=b+c;PROCESS (a,b,c)VARIABLE d:std_logic_vector(3 downto 0);BEGINd:=a;x<=b+d;d:=c;y<=b+d;END PROCESS;结果: x<=b+a;y<=b+c;当进程运⾏时,信号赋值将⾃上⽽下顺序执⾏,但第⼀项赋值操作并不会发⽣,这是因为信号赋值是在进程结束时才起作⽤.因为在进程结束更新时,d的最后⼀个赋值为c ,因此执⾏结果为该式.2.2.3 数据类型VHDL是⼀种类型型很强的语⾔.对象的数据类型定义了该对象可以具有的值和对该对象可以进⾏的运算的限制.在VHDL中,这种限制是被强制执⾏的.VHDL提供了多种标准的数据类型.在VHDL描述中,每个信号,常量,变量都要指定它的数据类型,以确定它能保持那⼀类数据. VHDL对数据类型的定义相当严格,在进⾏赋值或变换过程中都要进⾏类型检查.VHDL不允许不同类型的数值相互赋值或使⽤类型不允许的运算符进⾏运算.这种特性可以帮助设计者在设计前期发现错误.标准数据类型⽤户⾃定义数据类型数据类型的转换1. 标准数据类型VHDL提供的10种标准数据类型.(2)Real(实数).取值范围为 -1.0E+38 ~ +1.0E+38.和整数⼀样,实数能被约束.由于实数运算需要⼤量的资源,因此综合⼯具常常并不⽀持实数类型.(3)Bit(位). 只有两种取值,即 0 和 1 ,可⽤于描述信号的取值.(4)Bit_Vector(位⽮量). 是⽤双引号括起来的⼀组数据,每位只有两种取值:0 和 1.在其前⾯可加以数制标记,如X(16进制),B(2进制,默认),O(8进制)等.位⽮量常⽤于表⽰总线的状态.(1)Integer(整数). 取值范围为 -(231-1)~(231-1).⼀个整数类型和要被综合进逻辑的信号或变量在其范围上应有约束.例如: variable a: integer range –255 to 255;整数可通过语句内带符号⽮量来表达给综合⼯具.(5)Boolean(布尔量). ⼜称逻辑量.有"真","假"两种状态,分别⽤TRUE和FALSE标记.⽤于关系运算和逻辑运算.(6)Character(字符).是⽤单引号括起来的⼀个字母,数字,空格或⼀些特殊字符(如$,@,%等).字符区分⼤,⼩写字母.(7)String(字符串).是⽤双引号括起来的⼀个字符序列.字符串区分⼤,⼩写字母.常⽤于程序的提⽰和结果说明等.(8)Time(时间).时间的取值范围从 -(231-1)~(231-1).时间由整数值,⼀个以上空格以及时间单位组成.常⽤的时间单位有:fs,ns,µs,ms,s,min,hr等.时间常⽤于指定时间延时和标记仿真时刻.上述10种数据类型是VHDL种标准的数据类型,在编程时可以直接引⽤.如果⽤户需使⽤其它的数据类型,则必须进⾏⾃定义.(9)Natural(⾃然数)和Positive(正整数).是整数类型的⼦类型.⾃然数取值范围为0 ~(231-1);正整数是⼤于 0 的整数.(10)Severity Level(错误等级).错误等级分为:NOTE(注意),WARNING(警告),ERROR(出错),FAILURE(失败)四级,⽤于提⽰系统的错误等级.时间单位fs,ps,ns,µs,ms,sec,min,hr时间整数的⼦集:⾃然数取值范围为0 ~(231-1);正整数是⼤于0的整数⾃然数,正整数Note,warning,error,failure错误等级字符⽮量字符串ASCII字符字符逻辑"真" 或"假",⽤TRUE和FALSE标记布尔量位⽮量,⽤双引号括起来的⼀组数据位⽮量逻辑'0'或'1'位浮点数,取值范围: -1.0e+38 ~ 1.0e+38实数整数32位, 取值范围:-(231-1) ~ (231-1)整数含义数据类型标准数据类型IEEE库STD_LOGIC_1164程序包中定义的STD_LOGIC类型和STD_LOGIC_VECTOR类型.STD_LOGIC类型的数据可以具有九种取值,其含义如下:'U':初始值'X':不定态'0': 强制0'1': 强制1'Z': ⾼阻态'W':弱信号不定态'L':弱信号0'H':弱信号1'_':不可能情况(可忽略值)其中,"X"⽅便了系统仿真,"Z"⽅便了双向总线的描述.STD_LOGIC_VECTOR类型定义如下:TYPE STD_LOGIC_VECTOR IS ARRAY (NATURALRANGE ) OF STD_LOGIC;2. ⽤户⾃定义数据类型VHDL允许⽤户⾃⼰定义数据类型.常⽤的⽤户⾃定义数据类型主要有:(1)枚举(Enumerated)类型. 通过列举某类变量所有可能的取值来加以定义.对这些取值,⼀般使⽤⾃然语⾔中有相应含义的单词或字符序列来代表,以便于阅读和理解.⾃定义数据类型说明语句的⼀般格式是:TYPE 数据类型名 {,数据类型名} IS [数据类型定义];枚举类型定义的格式为:TYPE 数据类型名 IS (元素1,元素2,…);该数据类型括号中的值⾃左向右按升序排列,中间⽤逗号分隔.在VHDL中,对其中每⼀个元素都赋予⼀个位置编号,最左边的元素开始记为"0" ,向右依次递增"1" .这为"属性"提供了⼀个访问位置编号的机制.例如,在程序包STD_LOGIC_1164中对STD_LOGIC的定义为TYPE STD_LOGIC IS ( 'U' ,'X' ,'0' ,'1' ,'Z' ,'W' ,'L' ,'H' ,'_' );(2) 数组(ARRAY)类型. ⼜称为向量,是多个相同类型的数据集合.它可以是⼆维的和多维的.数组类型定义的格式为:TYPE 数据类型名 IS ARRAY (范围) OF 元素类型名;范围⼀项规定数组下标的类型和范围.默认的下标类型是整型,但也可以使⽤其它数据类型,这就需要在范围中标明下标的类型.例如:TYPE count1 IS ARRAY ( STD_LOGIC '_' DOWNTO 'U' )OF INTEGER;多维数组需要⽤两个以上的范围来描述,⽽且多维数组不能⽣成逻辑电路,因此只能⽤于⽣成仿真图形及硬件的抽象模型. (3) 纪录(RECORD)类型. 是多个不同类型的数据集合.纪录类型定义的格式为:TYPE 数据类型名 IS RECORD元素名: 数据类型名;元素名: 数据类型名;……END RECORD;纪录适⽤于描述总线,仿真等.对于记录类型的对象进⾏单元素赋值时,可在记录类型对象名后加点".",然后再加赋值元素的元素名.(4)时间(TIME)类型(物理类型).表⽰时间的数据类型,在仿真时是必不可少的.时间类型定义的⼀般格式为:TYPE 数据类型名 IS 范围;UNITS 基本单位;单位;END UNITS;例如:TYPE time IS range –1e18 TO 1e18;UNITS fs;ps=1000fs;ns=1000ps;µs=1000ns;ms=1000µs;set=1000ms;min=60set;hr=60min;END UNITS;这⾥的基本单位是"fs".时间是物理类型的数据,当然对容量,阻抗值也可以做定义.(5) ⼦类型(SYBTYPE).⼦类型是⼀个具有限制条件的类型,通常⽤来定义具有⼀定限制条件的基本类型的数据对象.⼦类型定义的⼀般格式为:SYBTYPE ⼦类型名 IS 数据类型名[约束范围];例如:如下 Byte 被定义作为⼀个⼦类型,⽽后数据对象被定义为从属于该⼦类型.SYBTYPE Byte IS Bit_Vector(7 downto 0);SIGNAL Byte1, Byte2:Byte;SIGNAL Data1, Data2:Byte;SIGNAL Addr1, Addr2:Byte;3. 数据类型的转换在VHDL程序中,不同类型的对象不能代⼊,因此要进⾏类型转换.类型转换的⽅法有:(1)类型标记法.⽤类型名称来实现关系密切的标量类型之间的转换.例如: VARIABLE x:INTEGER;VARIABLE y:REAL;使⽤类型标记(即类型名)实现类型转换时,可采⽤赋值语句:x :=INTEGER(y); y :=REAL(x).(2)类型函数法.VHDL程序包中提供了多种转换函数,使得某些类型的数据之间可以相互转换,以实现正确的赋值操作.常⽤的类型转换函数有:★CONV_INTEGER ( ):将STD_LOGIC_VECTOR类型转换成INTEGER类型.★CONV_STD_LOGIC_VECTOR( ):将INTEGER类型,UNSIGNED类型或 SIGNED类型转换成STD_LOGIC_VECTOR类型.★TO_BIT ( ): 将STD_LOGIC类型转换成BIT类型.★TO_BIT_VECTOR( ):将STD_LOGIC_VECTOR类型转换BIT_VECTOR 类型.★TO_STD_LOGIC( ): 将BIT类型转换成STD_LOGIC类型.★TO_STD_LOGIC_VECTOR( ): 将BIT_VECTOR类型转换成STD_LOGIC_VECTOR类型.注意 :引⽤时必须⾸先打开库和相应的程序包.该函数由STD_LOGIC_UNSIGNED程序包定义该函数由STD_LOGIC_ARITH程序包定义以下函数由STD_LOGIC_1164程序包定义2.2.4 运算符与操作符VHDL中共有四类运算符:(1)算术运算符:包括⼀元算术运算符和⼆元算术运算符.⼀元算术运算符包括:+(正号),—(负号),ABS(求绝对值)⼆元算术运算符包括:+ ,— ,* ,/ ,MOD(求模),REM(求余),**(指数运算)(2)关系运算符:它包括:= ,/= ,=(3)逻辑运算符:包括⼀元逻辑运算符和⼆元逻辑运算符.⼀元逻辑运算符包括:NOT⼆元逻辑运算符包括:AND,OR,NAND,NOR,XOR(4)并置运算符:&(连接),⽤于将多个位连接成为位⽮量.例如:DBUS<=D0&D1&D2&D3,即DBUS= ,,<,/= ,= ;XOR,NOR,NAND,OR,AND .需要注意的是:在编写VHDL程序时,必须保证操作数的数据类型与运算符所要求的数据类型⼀致.VHDL中的操作符:● "" 符号: 在WHEN语句中出现,其含义是"THEN(则)".2.2.5 属性(Attributes)VHDL没有⼀般程序设计语⾔中那些运算类标准函数,取⽽代之的是多种能反映和影响硬件⾏为的属性.VHDL的属性可分为数值类,函数类,信号类,类型类和范围类等属性.属性的⼀般格式为:Object ′Attributes为获取硬件设计中的⼀些有关信息(各类项⽬特性)⽽定义的内部函数某⼀项⽬的属性或特征通常可以⽤⼀个值或⼀个表达式来表⽰;它可以通过VHDL的属性描述语句加以访问.1.数值类属性数值类属性⽤于返回数组,块,或⼀般数据的有关值,如边界,数组长度等.●对⼀般数据属性,返回函数的边界值.其格式为Object ′LEFT;Object ′RIGHT;Object ′HIGH;Object ′LOW;●对于数组的数值属性,返回数组的长度值.其格式为Object ′LENGTH;●对于块结构体的数值属性,返回块的信息.其格式为Object ′BEHAVIOR;Object ′STRUCTURE;例如:TYPE num IS ARRAY RANGE 7 DOWNTO 0;VARIABLE i1,i2,i3,i4,M: INTEGER;BEGINi1:=num ′LEFT; --i1取得num的左边界值 7i2:=num ′RIGHT; --i2取得num的右边界值 0i3:=num ′HIGH; --i3取得num的上限值 7i4:=num ′LOW; --i4取得num的下限值 0M:= num ′LENGTH;2.函数类属性函数类属性是以函数形式为设计⼈员提供数据类型,数组,信号的相关信息的.●数据类型的属性函数.利⽤数组属性可以获得数组的区间,该属性的格式为Object ′SUCC(X); --获取X的下⼀个值Object ′PRED(X); --获取X的前⼀个值Object ′LEFTOF(X); --获取X的左边值Object ′RIGHTOF(X); --获取X的右边值其中, "Object"为数据类型名,X为其中的⼀个元素.例如:TYPE time IS (year,month,day,hour,min,sec);则 time ′SUCC(hour); --获取元素hour的下⼀个值mintime ′LEFTOF(day); --获取元素day的左边值month●数组的属性函数.其格式为Object ′LEFT(n); --获取索引号为n的区间左端边界值Object ′RIGHT(n); --获取索引号为n的区间右端边界值Object ′HIGH(n); --获取索引号为n的区间⾼端边界值Object ′LOW(n); --获取索引号为n的区间低端边界值其中, "Object"为数组名;n为多维数组中所定义的多维区间的序号.默认值n=1,表⽰对⼀维空间进⾏操作.●信号的属性函数.利⽤信号属性可得到信号的⾏为和功能信息,其格式为Object ′EVENT; --反映信号的值是否变化,是,则返回为"真"Object ′ACTIVE; --反映信号是否活跃,是,则返回为"真"Object ′LAST_EVENT; --反映从最近⼀次事件到现在经过的时间,返回⼀个时间值Object ′LAST_VALUE; --反映信号变化前的取值,并将该历史值返回Object ′LAST_ACTIVE; --反映从最近⼀次活跃到现在经过的时间,返回⼀个时间值需要注意的是 :信号的事件(Event)和活跃(Active)是两个不同的概念,必须严格区分.信号的活跃定义为信号值的任何变化.信号值由1变为0是⼀个活跃,⽽从1变为1也是⼀个活跃,唯⼀的准则是发⽣了事情,这种情况被称为⼀个事项处理(Transaction).然⽽,信号的事件则要求信号值发⽣变化.信号值从1变为0是⼀个事件,但从1变为1虽是⼀个活跃却不是⼀个事件.所有的事件都是活跃,但并⾮所有的活跃都是事件.例如:利⽤函数信号属性检查信号的建⽴时间.LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff1 ISPORT(d,clk : IN STD_LOGIC;q : OUT STD_LOGIC);END dff1;ARCHITECTURE setup_time_check OF dff1 ISBEGINPROCESS(clk)BEGINIF(clk='1′) AND (clk ′EVENT) THENq5ns) --条件为真,向下执⾏REPORT "SETUP VIOLATION" --条件为假,报告错误信息: 建⽴时间不符合要求SEVERITY ERROR; --出错等级:ERROR。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2006-10
\entity\、\ENTITY\h
10
4、下标名及下标段名
下标名:用于指示数组型变量或信号的某一个 元素。
格式: 标识符(表达式) 下标段名(段名):用于指示数组型变量或信号 的某一 段元素。 格式:标识符(表达式 to/downto 表达式) to:下标序列由低到高;downto:下标序列由高到低 如: a : std_logic_vector(7 downto 0)
h 2006-10
8
基本标识符中的英文字母不分大小写; VHDL的保留字不能作为标识符使用。
合法标识符如下: my_counter、 Decoder_1、 FFT、 Sig_N、 Not_Ack、 State0
2006-10
非法标识符如下:
_Decoder_1、
2FFT、
Sig_#N、
Not-Ack、
O“34” 八进X:制十数六数进组制,基长数度符为号6 ,每一个十六进制数
2X00“6-110AB” 十六进代制表数一数个组4位,h的长二度进为制12数。
7
3、标识符
定义常数、变量、信号、端口、子程序或 参数的名字。
基本标识符的要求(87标准): 以英文字母开头; 不连续使用下划线“_”; 不以下划线“_”结尾; 由26个大小写英文字母、数字0~9及 下划线“_”组成的字符串。
h 2006-10
12
二. 数据对象 (page59 --unit4.2)
三种对象:常量(Constant) 变量(Variable) 信号(Signal)
三种对象的物理含义: 常量代表数字电路中的电源、地、恒定逻辑值等
常数; 变量代表暂存某些值的载体,常用于描述算法; 信号代表物理设计中的某一条硬件连接线,包括
h 2006-10
15
常量的可视性(作用范围):
2006-10
库、程序包 实体(Entity)
结构体1 进 程1
结构体2 进 程2
h
常量是全局 量,其作用 范围取决于 常量被定义 的位置。
16
2、变量说明
变量是一个局部量,只能在进程和子程序中 定义、使用。其作用范围仅限于定义了变量的进 程和子程序中。
或:(=14×16=224)
16#F.01#E+2
(=(15+1/(16 × 16)×16 ×16=3841.00)
h 2006-10
3
(4)物理量文字 如:60 s、100 m、 177 A
注:整数可综合实现; 实数一般不可综合实现; 物理量不可综合实现;
h 2006-10
4
2、字符串型文字
按字符个数多少分为: 字符:用单引号引起来的ASCII字符,可以是
第九讲 VHDL结构及语言要素(1)
1. 文字规则
2. 数据对象
3. 数据类型
4一. VHDL文字规则
1、数字型文字
(1)整数文字:十进制整数
如:5,678,156E2(=15600),
45_234_287 (=45234287)
(2)实数文字:带小数的十进制数
如:23.34,2.0,44.99E-2(=0.4499)
定义变量格式: variable 变量名:数据类型 := 初始值;
例: variable a, b : bit;
variable count : integer range 0 to 255 := 10;
变量的初值可用于仿真,但综合时被忽略。
变量赋值语句格式: 目标变量名:=表达式
h 2006-10
14
1、常量说明
常量说明:对某一个常量名赋予一个固定的值。 格式:
constant 常数名:数据类型:= 表达式;
例: constant data: bit_vector(3 downto 0):=“1010”
constant width: integer: = 8; constant x: new_bit: = ‘x’; 常量数据类型必须与表达式的数据类型一致。
ALL_RST_、
data__BUS、
return、
h
entity
9
扩展标识符(93标准):
以反斜杠来界定,免去了87标准中基本标
识符的一些限制。使描述更加直观、方便
可以以数字打头, 允许包含图形符号, 允许使用VHDL保留字,
有些VHDL工 具并不支持扩 展标识符
区分字母大小写等。
如:\74LS163\、 \Sig_#N\、
输入、输出端口。
h 2006-10
13
三种对象的特点及说明场合:
信号:全局量,可设置传输延迟,作模块间的 信息载体。用于architecture、package、entitiy。
变量:局部量,不可设置传输延迟,最后靠信 号传递信息。用于process、function、procedure。
常量:全局量,可用于上面两种场合。使实体 中某些量易于修改和阅读。
a(7), a(6)… a(0) 2006-10 a(7 downto 0), a(7 dowh nto 4), a(5 downto 3)… 11
5. 注释
用以提高程序可读性 以‘- -’开头,直至本行结尾 注释在程序段中以特征颜色标记显示,不参与 程序编译 如: --定义了器件的端口名称及类型
数值,也可以是符号或字母。 如:‘A’,‘*’,‘Z’ 字符串:用双引号引起来的一维字符数组
h 2006-10
5
字符串分为: (1)文字字符串:“文字”
如:“ERROR”, “XXXXXXXX”, “ZZZZZZZZ”, “X”, “BOTH S AND Q EQUAL TO L”,
h 2006-10
88_67_551.23_909(8867551.23909)
注:‘_’用以提高数字可读性;数字间不允许空

h 2006-10
2
(3)以数制基数表示的文字
格式: 基数#数字文字#E指数 (5部分组成)
如:10#170#
(=170)
2#1111_1110# (=254)
16#E#E1
(=2#1110_0000# =224)
6
(2)数位字符串: (由双引号引起来的数字序列)
称为位矢量,代表二进制、八进制、十六进
制的数组。其位矢量的长度为等值的二进制数的
位数。 格式: 基数符号 “数值”
其中基数符号有三种:
B:二进制基数符号。
O:八进制基数符号,每一个八进制数一个
B“1_1101_1110”3位二的进二制进数制数数组。,长度为9
相关文档
最新文档