2、VHDL语言元素

合集下载

第四讲VHDL语言基础知识

第四讲VHDL语言基础知识

关键词 VHDL 实体 逻辑功能
此两处必须同名
逻辑行为描述
1、实体
格式
ENTITY 实体名 IS [GENERIC ( 类属表 );] [PORT ( 端口表 );] END 实体名;
说明
实体说明所设计的逻辑电路的输入、输 出信号及其特性(输入(in)输出(out)、双向 (inout)、buffer)
•文件(FILES)是传输大量数据的客体,包含一些专门数据 类型的数值。
对象说明的一般格式是: <对象类型> < 标识符表>:<子类型说明> <信号种类>: =<表达式>; 说明 标识符 <子类型说明>是类型名或类型名加限制条件 <信号种类>为BUS或REGISTER,该项为任选项 :=<表达式>为对象赋初值
IS
一个包集合由包集合标题和包集合体两 大部分组成。 包集合体是一个可选项。
5、库
格式
LIBRARY 库名; USE 库名. 程序包名. All;
USE语句的使用有两种常用格式: USE 库名.程序包名.项目名 ; USE 库名.程序包名.ALL ;
VHDL库的种类
• IEEE库:IEEE标准库, 是按IEEE组织制定的 工业标准进行编写的, 是内容丰富的资源库 使用需声明 • •STD_LOGIC_1164 程序包 •STD_LOGIC_ARITH 程序包 •STD_LOGIC_UNSIGNED 程序包
STD库:VHDL标准库,STANDARD和 TEXTIO程序包即收入在STD库中 使用无需声明
VHDL库的种类
• • •
ASIC库:EDA厂商提供库 使用需声明 WORK库:现行作业库,当前工作目录的所有设计 使用无需声明 USER库:用户自定义库 使用需声明

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 输出 右图所示为并置运算符操作的电路示意。

VHDL语言介绍

VHDL语言介绍

VHDL语言介绍VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述数字电路的结构和行为。

它是一种高级编程语言,用于描述数字系统中的硬件功能。

VHDL是一种被广泛应用于数字系统设计的硬件描述语言,它可以用于描述数字系统的结构和功能,并且允许进行仿真、综合和验证。

VHDL最初是由美国国防部(DoD)为了应对不同供应商生产的不同硬件之间互通性的问题而开发的。

它提供了一种用于描述数字电路的方法,可以在不同供应商的工具之间进行交换。

VHDL已成为一种行业标准,在数字系统设计领域被广泛应用。

VHDL的语法类似于Ada编程语言,它使用关键字、运算符和数据类型来描述数字系统中的硬件元素。

VHDL中的关键概念包括实体(entity)、架构(architecture)和过程(process)。

实体描述了数字系统的接口和功能,架构描述了数字系统的内部结构和行为,而过程描述了数字系统中的操作和控制。

VHDL主要有两种用途,一是用于模拟和验证数字系统的功能,二是用于综合数字系统的设计,生成实际的硬件电路。

在模拟和验证阶段,设计师可以使用VHDL描述数字系统的功能,并通过仿真工具对其进行验证。

在综合阶段,设计师可以使用VHDL描述数字系统的结构,并通过综合工具生成对应的硬件电路。

VHDL的优点在于其强大的表达能力和灵活性。

设计师可以使用VHDL描述各种复杂的数字系统,包括处理器、通信接口、存储器等。

VHDL还提供了丰富的数据类型和运算符,使设计师可以轻松地描述数字系统中的各种操作。

除了描述数字系统的结构和行为,VHDL还提供了丰富的标准库和模块化编程的方法。

设计师可以使用标准库中提供的各种功能模块来加速开发过程,并且可以将自己设计的模块封装成库以便重复使用。

VHDL还支持面向对象的设计方法,设计师可以使用面向对象的技术来组织和管理复杂的数字系统。

通过使用面向对象的方法,设计师可以将数字系统分解成多个模块,每个模块都有自己的接口和功能,并且可以通过继承和复用来简化设计过程。

VHDL语言的基本结构

VHDL语言的基本结构
1 实体说明 1)实体语句结构 ENTITY 实体名 IS [GENERIC(类属表);] [PORT(端口表);] END ENTITY 实体名 2)类属参数说明 GENERIC([常数名:数据类型[:设定值] {;常数名:数据类型[:设定值]};
4
一、VHDL语言设计的基本单元及其构成
3)端口说明 PORT(端口名{,端口名}:方向 数据类型; 是对设计实体与外部接口 的描述,即对元件引脚、 ┇ 数据类型和I/O方向的描述 端口名{,端口名}:方向 数据类型); 1端口名
设计实体
进程 或其它并行结构 结构体 n (ARCHITECTURE 进程 或其它并行结构
配置(CONFIGURATION)
VHDL程序设计实体的一般结构
2
VHDL语言的基本结构
主要内容
一、 VHDL语言设计的基本单元及其构成 二、 VHDL语言构造体的子结构描述 三、 包集合、库及配置
3
一、VHDL语言设计的基本单元及其构成
VHDL语言
15
二、VHDL语言构造体的子结构描述
【例】4位二进制加法计数器构造体逻辑描述。
SIGNAL cnt4:INTEGER RANGE O TO 15; ... PROCESS(clk,clear,Stop) BEGIN IF clear='0' THEN cnt4<=0; ELSIF clk'EVENT AND clk='1' THEN IF stop='0' THEN cnt4<=cnt4+1; END IF; END IF; END PROCESS; --注意cnt4的数据类型
存盘文件 为 bpac.vhd

第四章 VHDL的语言要素

第四章 VHDL的语言要素

第四章VHDL的语言要素4.1 VHDL的数据对象与其他高级语言一样,VHDL中把用来承载数据的容器叫做VHDL的数据对象,VHDL的数据对象主要有信号、常量和变量三类。

1 常量在VHDL中,常量是一种不变的量,它只能在对它定义时进行赋值,并在整个程序中保持该值不变。

常量的功能一方面可以在电路中代表电源、地线等,另一方面可提高程序的可读性,也便于修改程序。

常量定义的格式为:CONSTANT 常量名:数据类型:=表达式;[例3.4] 常量定义举例CONSTANT V: INTEGER:=8;2 变量变量是临时数据的容器,它没有物理意义,并且只能在进程和子程序中定义,也只能在进程和子程序中使用。

变量一旦赋值立即生效。

变量定义的描述格式为:VARIABLE 变量名:数据类型[:=表达式];[例3.5]变量定义举例VARIABLE y: INTEGER;3 信号信号是VHDL的一种重要数据对象,它定义了电路中的连线和元件的端口。

其中端口和内部信号定义的差别是在端口定义中多了一个端口模式的定义。

信号是一个全局量,可以用来进行各模块之间的通信。

信号定义的格式为:SIGNAL 信号名:数据类型;[例3.6]信号定义举例SIGNAL A: STD_LOGIC;4.2 VHDL的数据类型VHDL是一种强类型的语言,每一个数据对象都必须具有确定的数据类型定义,并且只有在相同数据类型的数据对象之间,才能进行数据交换。

VHDL预定义了大量的数据类型,下面介绍几种最常用的数据类型。

1 整数数据类型(INTEGER)整数类型的数有正整数负整数和零,在VHDL中其取值范围是:-2147483547---2147483646 。

2 实数数据类型(REAL)VHDL的实数与数学中的实数或浮点数相似,只是范围被限定为:-1.0E38---1.0E38,并且在书写时一定要有小数。

3 位数据类型(BIT)在数字系统中,信号经常用位数据类型表示,位数据类型属于枚举类型,其值是用带单引号的‘1’和‘0’表示。

VHDL语言的基本语法

VHDL语言的基本语法

B:二进制基数符号,表示二进制数位0或1。 二进制基数符号,表示二进制数位0 O:八进制基数符号。 八进制基数符号。 X:十六进制基数符号(0~F) 。 十六进制基数符号(0~ (0 例如: 1_1101_1110 1_1101_1110” 例如:B“1_1101_1110 --二进制数数组,位矢数组长度是9 --二进制数数组,位矢数组长度是9 二进制数数组 AD0 X“AD0” AD --十六进制数数组,位矢数组长度是12 --十六进制数数组,位矢数组长度是12 十六进制数数组
4、下标名及下标段名 下标名用于指示数组型变量或信号的某一 下标名用于指示数组型变量或信号的某一 元素, 元素,如:a(2) , b(n) 下标段名则用于指示数组型变量或信号的 下标段名则用于指示数组型变量或信号的 某一段元素,其语句格式如下: 某一段元素,其语句格式如下:
数组类型信号名或变量名(表达式 表达式2]); 数组类型信号名或变量名 表达式1 [TO/DOWNTO 表达式 ; 表达式
信号的使用和定义范围是实体、结构体和程序包 信号的使用和定义范围是实体、结构体和程序包.
在程序中: 在程序中 (1) 信号值的代入采用“<=”代入符,而且信号 信号值的代入采用“ ”代入符, 代入时可以附加延时。 代入时可以附加延时。 (2) 变量赋值时用“:=”,不可附加延时。 变量赋值时用“ ” 不可附加延时。 (3) 信号的初始赋值符号仍是“:=”。 信号的初始赋值符号仍是“ ” 例: X<=Y AFTER 10 ns; ; --X,Y都是信号,且Y的值经过 都是信号, 的值经过10ns延 , 都是信号 的值经过 延 时以后才被代入X。 时以后才被代入 。
(1) 赋值语句右方的表达式必须是一个与目标变量有相同 数据类型的数值。 数据类型的数值。 (2) 变量不能用于硬件连线和存储元件。 变量不能用于硬件连线和存储元件。 (3) 变量的适用范围仅限于定义了变量的进程或子程序中。 变量的适用范围仅限于定义了变量的进程或子程序中。 (4) 若将变量用于进程之外,必须将该值赋给一个相同的 若将变量用于进程之外, 类型的信号,即进程之间传递数据靠的是信号。 类型的信号,即进程之间传递数据靠的是信号。

VHDL语言教程

VHDL语言教程

VHDL语言教程VHDL是一种硬件描述语言,用于描述数字电路和系统,并进行硬件的设计和仿真。

它被广泛应用于数字电路设计、嵌入式系统开发和可编程逻辑控制器等领域。

本教程将介绍VHDL语言的基本概念和语法,帮助您了解和学习这门强大的硬件描述语言。

一、VHDL概述VHDL是Very High Speed Integrated Circuit Hardware Description Language的缩写,意为高速集成电路硬件描述语言。

它是一种硬件描述语言,用于描述数字电路和系统。

与传统的电路设计方法相比,使用VHDL可以更加方便、高效地进行电路设计和测试。

1.VHDL的起源和发展VHDL最早由美国国防部为了解决数字电路设计复杂、效率低下的问题而研发。

后来,VHDL成为了一种IEEE标准(IEEE1076)并被广泛应用于数字电路设计和仿真。

2.VHDL的优点VHDL具有以下几个优点:-高级抽象:VHDL提供了一种高级描述电路的方法,使得设计者能够更加方便地表达复杂的电路结构和行为。

-可重用性:VHDL支持模块化设计,使得设计者可以将电路的不同部分进行抽象和封装,提高了电路的可重用性。

-高效仿真:VHDL可以进行高效的电路仿真和测试,有助于验证电路设计的正确性和可靠性。

-灵活性:VHDL可以应用于各种不同类型和规模的电路设计,从小规模的数字逻辑电路到大规模的系统级设计。

二、VHDL语法和基本概念1.VHDL的结构VHDL程序由程序单元(unit)组成,程序单元是VHDL描述的最小单元。

程序单元包括实体(entity)、结构(architecture)、过程(process)和包(package)等。

2. 实体(entity)实体是VHDL描述电路模块的一个部分,包括输入输出端口、信号声明和实体标识符等。

3. 结构(architecture)结构描述了实体的具体电路结构和行为,包括组件声明、信号赋值和行为描述等。

vhdl语言

vhdl语言

VHDL语言VHDL(VHSIC Hardware Description Language)是用于描述数字电路和系统的硬件描述语言,是一种标准化的硬件描述语言,广泛应用于数字电路设计和电子系统设计领域。

VHDL语言是一种强大的工具,可以帮助工程师描述复杂的数字电路,并进行仿真和综合。

它可以描述电路的结构、功能和时序行为,是一种形式化的语言,能够准确地描述电路的行为特性,有助于工程师在设计阶段发现和解决问题。

VHDL语言的基本概念实体(Entity)•实体描述了电路的接口和功能,可以看作是一种抽象的模块。

•实体中定义了输入输出端口,以及对应的信号类型和位宽。

•实体可以包含多个体系结构(Architecture)。

体系结构(Architecture)•体系结构描述了实体的具体实现,定义了实体的行为。

•体系结构中包含了处理逻辑、时序行为以及信号的赋值。

•体系结构可以描述电路的功能和行为。

信号(Signal)•信号是VHDL语言中的基本数据类型,用于在电路中传递信息。

•信号可以是标量(Scalar)或矢量(Vector),可以是时序或组合。

•信号的赋值可以是同步的或异步的。

过程(Process)•过程描述了VHDL中的行为,通常用于描述组合逻辑或时序逻辑。

•过程中可以包含逻辑运算、条件语句、循环语句等。

•过程中的代码在仿真或综合时会被执行。

VHDL语言的应用VHDL语言主要用于数字电路设计、电子系统设计、FPGA设计等领域。

工程师可以使用VHDL语言描述数字电路的结构和行为,进行仿真和综合,快速验证设计的正确性。

VHDL语言的应用领域包括但不限于:•数字电路设计•通信系统设计•控制系统设计•图像处理系统设计•嵌入式系统设计VHDL语言在电子设计领域具有广泛的应用前景,可以帮助工程师快速高效地设计数字电路系统,并满足不同应用场景的需求。

总结VHDL语言是一种强大的硬件描述语言,可以帮助工程师描述数字电路的结构和行为,进行仿真和综合,快速验证设计的正确性。

vhdl语言要素

vhdl语言要素




SIGNAL x:STD_LOGIC; --x is declared as a one-digit (scalar) signal of type STD_LOGIC. SIGNAL y: STD_LOGIC_VECTOR (3 DOWNTO 0):= "0001"; --y is declared as a 4-bit vector, with the left most bit being the MSB. The initial value (optional)of y is "0001".Notice that the ":=“ operator is used to establish the initial value.
1、 CONSTANT 2、 SIGNAL 3、 VARIABLE
Object’ active zone

1、Global in object
Object is declared in package or entity。 2、Partial in object Object is declared in architecture 。

20 μs,100 ns,3 sec。
9、SEVERITY LEVEL: note,warning,error,failure
10、NATURAL
Non-negative integers (from 0 to +2,147,483,647).
11、 STD_LOGIC STD_LOGIC_VECTOR :
CHAPTER 2
vhdl language element
(Ⅰ)Object in VHDL (Ⅱ)Data type in VHDL (Ⅲ)Operation actor in VHDL

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语言要素

VHDL语言要素
3. 标识符 保留字:VHDL已定义的关键字 已定义的关键字, 保留字 已定义的关键字
ENTITY ARCHITECTURE CASE BUFFER AND BEGIN END FOR IF THEN IN OUT ELSIF
OR NOT XOR NOR INOUT ….
短标识符--由用户创建的符合VHDL 87 短标识符--由用户创建的符合VHDL'87规定的标识符 --由用户创建的符合VHDL 87规定的标识符 扩展标识符--VHDL'93 扩展标识符--VHDL 93规定的标识符 --VHDL 93规定的标识符
VHDL语言要素
PROCESS SIGNAL SIGNAL MUX SIGNAL
PROCESS REG SIGNAL
VHDL语言要素
语法(定义,赋值) 语法(定义,赋值) 定义语法: 定义语法: SIGNAL <信号名 :< 数据类型 初值 信号名> 数据类型>[:初值 初值]; 信号名 两点说明: 两点说明 1.设定的初始值仅在防真中有效 综合器将忽略设定的初值, 设定的初始值仅在防真中有效,综合器将忽略设定的初值 设定的初始值仅在防真中有效 综合器将忽略设定的初值 一般情况下,在结构体中完成初始值的设定 在结构体中完成初始值的设定. 一般情况下 在结构体中完成初始值的设定 2.表达式可以是具体的数值 也可以是运算表达式 表达式可以是具体的数值,也可以是运算表达式 表达式可以是具体的数值 也可以是运算表达式. 信号赋值: 信号赋值 表达式; 信号名 <= 表达式
VHDL语言要素
4. 下标 段名 下标/ 有一8位的数据 ( 有一 位的数据A(A7A6A5A4A3A2A1A0) 位的数据 VHDL下标表示: 下标表示: 下标表示 标识符(表达式) 标识符(表达式) 表达式:具体数值,表达式. 表达式:具体数值,表达式. VHDL段表示: 段表示: 段表示 标识符( 表达式) 标识符(表达式 方向 表达式) 表达式:具体数值,表达式. 表达式:具体数值,表达式.

vhdl语言

vhdl语言

VHDL语言简介VHDL(VHSIC Hardware Description Language)即可高速集成电路硬件描述语言,是一种用于描述数字系统和电路的硬件描述语言。

它在1981年由美国国防部的高速集成电路联合委员会(VHSIC)开发,用于设计大规模集成电路。

VHDL是一种面向对象的语言,可以用于描述各种数字系统,从简单的逻辑门到复杂的处理器。

它提供了丰富的语法和语义,使得设计人员可以准确地描述他们的电路和系统。

VHDL的优势VHDL作为一种硬件描述语言,在数字系统设计中具有许多优势。

1.可重用性:VHDL允许设计人员创建可重用的模块和子系统,这些模块和子系统可以在不同的项目中重复使用,提高了设计效率和可维护性。

2.仿真和验证:VHDL具有强大的仿真和验证能力,可以在设计之前对系统进行全面的仿真和验证。

这有助于检测和纠正潜在的问题,并确保系统在硬件实现之前达到预期的功能。

3.抽象级别:VHDL允许设计人员在不同的抽象级别上描述系统,从高级的行为级别到底层的结构级别。

这使得设计人员可以根据需要在不同的级别上工作,并且可以更容易地进行系统级别的优化。

4.灵活性和可扩展性:VHDL支持灵活的设计方法和工作流程,并允许设计人员在设计过程中进行迭代和修改。

它还可以与其他常用的设计工具和方法集成,以满足特定的需求。

VHDL语言的基本结构VHDL语言由模块、实体、架构以及信号和过程等基本元素组成。

模块(Module)模块是VHDL中描述数字系统的最基本单位。

一个模块可以包含多个实体和架构,并通过连接信号进行通信。

每个模块都有一个顶层实体和一个或多个架构。

实体(Entity)实体是描述模块的接口和行为的抽象。

它定义了输入输出端口,以及模块对外部环境的接口。

一个实体可以有一个或多个架构。

架构(Architecture)架构描述模块的具体行为和内部结构。

它定义了模块的内部信号和过程,以及对外部信号和过程的接口。

VHDL数据类型vhdl语法行业信息

VHDL数据类型vhdl语法行业信息
(3)信号为全局量,而变量只在定义它的域中才可见。因此, 变量不能在两个进程之间传递信息。
(4)在一个进程中多次为一个信号赋值时,只有最后一个值会起 作用;而变量则不同,每次赋值都会改变它的值。
(5)赋值不同。在进程中,信号赋值只有在进程结束时起作用, 而变量赋值是立即进行的。而且赋值符号不同:信号赋值为 “<=”,变量赋值为“:=”。
vabc=a & b & c ;
注:其中‘<=’操作符也
用于表示信号的赋值操 作。
• 如 果 a=‘1’ , b=‘0’ , c=‘1’ ,
• 则 vabc=“101” 。
学习课
二、VHDL数据类型与数据对象
用户自定义数据类型: (1) 列举数据类型 Type 列举名称 is (元素1,元素2,…)
学习课
二、VHDL数据类型与数据对象
CONV_INTEGER 将数据类型 UNSIGNED, SIGNED转换为 INTEGER 类型.
CONV_UNSIGNED 将数据类型INTEGER, SIGNED转换为 UNSIGNED 类型.
CONV_SIGNED 将数据类型INTEGER, UNSIGNED转换为
二、VHDL数据类型与数据对象
在VHDL程序中,我们经常会遇到这样的语句:
Signal Variable Constant
A : std_logic; B : std_logic_vector(7 downto 0); C : integer;
数据对象类 数据对象 数据类型


学习课
二、VHDL数据类型与数据对象
学习课
二、VHDL数据类型与数据对象
数据类型的转换
在VHDL语言里,不同类型的数据信号之 间不能互相赋值。当需要不同类型数据之 间传递信息时,就需要类型转换函数将其 中的一种类型数据转换为另一中数据类型 后,再进行信号的传递。

EDA技术与VHDL第五版教学设计

EDA技术与VHDL第五版教学设计

EDA技术与VHDL第五版教学设计前言EDA技术(Electronic Design Automation)是现代电子工程中不可或缺的技术手段。

EDA技术主要是指借助EDA(Electronic Design Automation)软件工具来进行电子系统及芯片的设计、生产和测试等各个环节中所需的CAD技术。

而VHDL(VHSIC Hardware Description Language)则是用来描述数字系统的硬件特性的一种表示语言。

本文将针对EDA技术和VHDL第五版的教学内容进行简要讨论。

EDA技术EDA技术的应用范围非常广泛,包括模拟电路和数码电路的设计、布局、验证和测试等各个环节。

EDA技术的使用可以大大简化电路设计的过程,提高电路设计的效率和准确性。

目前市面上主流的EDA软件有Altium Designer、Protel、PADS、Eagle、OrCAD等。

EDA技术在电子工程教育中的意义非常重要,对于培养学生的电路设计能力和实践能力有着重要作用。

在课堂教学中,可以通过以下几个方面来进行EDA技术的教学:1.EDA软件的基本操作首先,需要对常用的EDA软件进行介绍。

学生需要了解如何打开、创建和保存项目,如何进行电路设计和模拟,如何进行元器件库的管理等。

其中最重要的是掌握软件的快捷键和常用操作。

2.电路设计流程其次,需要讲解电路设计的流程,包括电路分析、元器件选型、电路设计、仿真和测试等各个环节。

通过实践操作,使学生掌握电路设计的基本流程和步骤。

3.实验实践最后,对于EDA技术的实验实践也是非常重要的一环。

学生可以通过设计一些小的实验电路,并进行仿真和测试,来巩固自己的掌握程度。

比如设计一个简单的加法器,然后通过仿真来验证电路的正确性。

VHDL第五版VHDL是一种常用的数字电路设计语言,它可以用来描述数字电路中各种电路的行为与结构。

VHDL第五版是目前最新版的VHDL标准。

学习VHDL第五版对于培养学生的数字电路实践能力具有非常重要的作用。

第三章 VHDL语言要素

第三章 VHDL语言要素
(2) 字符可以大小写的字母、数字和下划线“_”。
(3) 下划线前后都必须有英文字母或数字。
(4) 英文字母不区分大小写 (5)不能连续使用下划线“_”,最后一个符号也 不能用下划线 (6) 不允许包含图形符号、空格符
3.3 VHDL语言要素
注意:
EDA工具综合、仿真时,不区分大小写。
对VHDL的保留字(关键字)不能做标识符: ENTITY , ARCHITECTURE , END , BUS,USE,WHEN,WAIT,IS…
常量说明: 对某一常量名赋予的一个固定值。
格式如下: CONSTANT 常数名:数据类型 [:=表达式]; 例: CONSTANT width:integer:=8; CONSTANT x:new_bit:=’x’;
CONSTANT data:bit_vector(3 downto 0):="1010";
举例如下:
SIGNAL a, b:BIT :=‘0‟;
SIGNAL count:bit_vector(7 downto 0); SIGNAL init:integer :=-1; SIGNAL count:std_logic:= „0‟ ;
3.3 VHDL语言要素
注:1)信号初始值仿真时有用,综合被忽略 2)信号是全局量,可在结构体、实体、块 中说明和使用信号。 3)在进程和子程序中只能使用信号,不能 说明信号。 4)变量赋值用“:=” , 信号赋值用“<=” 5)变量执行后,立即被赋值;信号实际代 入过程和代入语句的处理是分开的
3.3 VHDL语言要素
用户在做电子系统设计时,自行定义的 数据类型:
(1) 枚举类型 (ENUMERATED TYPE)
(2) 数组类型 (ARRAY TYPE)

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。

第2节 VHDL语言元素

第2节  VHDL语言元素
例如定义变量: VARIABLE a,b := REAL; VARIABLE x,y := BIT_VECTOR(0 TO 7);
2.1.3 信号(SIGNAL)
信号是电子电路内部硬件连接的抽象。它可以作为设计实 体中的并行语句模块间交流信息的通道。信号及其相关的 延时语句明显地体现了硬件系统的特征。
· 信号是硬件中连线的抽象描述,他们的功能是保存变化的数据 值和连接子元件,信号在元件的端口连接元件。变量在硬件中 没有类似的对应关系,他们用于硬件特性的高层次建模所需要 的计算中。
2.2 VHDL语言的数据类型
在对VHDL的客体进行定义时,都要指定其数据类型。 VHDL有多种标准的数据类型,并且允许用户自定义数据 类型。在VHDL语言语义约束中,对类型的要求反映在赋 值语句的目标与源的一致,表达式中操作的一致,子类型 中约束与类型的一致等许多方面。 2.2.1 VHDL中预定义的数据类型(编程者可直接使用) 预定义类型在VHDL标准程序包STANDARD中定义, 在应用中自动包含进VHDL的源文件,不需要USE语句显 示调用。数据类型说明如下。
变量定义语句的格式为:
VARIABLE 变量名 : 数据类型 [约束条件][:= 初始值]; 例如: VARIABLE n: INTEGER RANGE 0 TO 15 := 2; VARIABLE a: INTEGER;
变量赋值语句的格式为: 目标变量名 := 表达式;
赋值语句 “:=” 右边的表达式必须与目标变量具有相同 的数据类型,这个表达式可以是一个运算表达式也可以 是一个数值。变量赋值语句左边的目标变量可以是单值 变量,也可以是变量的集合。
ARCHITECTURE arch OF typeconv IS TYPE typeconv_type IS ARRAY(STD_ULOGIC)OF BIT; CONSTANT typecon_con : typeconv_type : = ( ‘ 0‟/„L‟=>„0‟ , ‘ 1‟/„H‟ =>1‟ , OTHERS=>„0‟); SIGNAL b:BIT; SIGNAL b:BIT; SIGNAL s:STD_ULOGIC;

第三章 VHDL的语言要素

第三章 VHDL的语言要素

--(十六进制,等于2#11100000#,等于224) 16#F.01#E+2
--(十六进制数表示,等于3841.00) (VHDL综合器不接受此类文字)。如:
3kΩ ,177 A
2. 字符串
字符是用单引号引起来的ASCII字符,可以是数值, 也可以是符号或字母,如:‘R‘,‗A‘,‗*‘ 。而字符串 则是一维的字符数组,须放在双引号中。VHDL中有两 种类型的字符串:文字字符串和数位字符串。
3.标识符 最常用的操作符,用来定义常数、变量、信号、端 口、子程序或参数的名字。VHDL的标识符书写规则: · 有效字符:英文字母、数字0~9以及下划线‚_‛组 成 · 以英文字母开头,不分大小写 · 不连续使用下划线‚_‛,不以下划线‚_‛结尾。 · VHDL的保留字不能用于作为标识符使用。
VHD ‘93标准还支持扩展标识符,但是目前仍有许多VHDL工 具不支持。
型(BOOLEAN)的数据表示出来,即TRUE或FALSE两种。
六种移位操作符号SLL、SRL、SLA、SRA、ROL和ROR都是 VHDL'93标准新增的运算符,在1987标准中没有。
3. 2 VHDL数据对象
在VHDL中,数据对象(Data Objects)类似于一 种容器,它接受不同数据类型的赋值。数据对象 主要有三种,即 常量 ——CONSTANT 变量 ——VARIABLE 信号 ——SIGNAL
常量的可视性规则
常量的使用范围取决于它被定义的位臵。 在程序包中定义的常量具有最大全局化特征,可以 用在调用此程序包的所有设计实体中; 定义在设计实体中的常量,其有效范围为这个实体
定义的所有的结构体;
定义在结构体中的常量,则只能用于此结构体;
定义在结构体的某一单元的常量,如一个进程中,

EDA技术 第05讲 VHDL02元素

EDA技术 第05讲 VHDL02元素
--对c的赋值实际是123456,
HYIT
21
数制表示法
间隔符
10 # 97 # E2
数制进 位基数
数值
指数 部分
22
HYIT
Signal a,b,c,d,e: integer range 0 to 100000; A<=10#97#E2; --9700 B<=16#FF#;--等于255 C<=2#1111_1110#;--254 D<=8#175#; --等于125 E<=16#E#E1;--等于224
HYIT
36
10. 自然数(Natural)和正整数(Positive)

自然数和正整数都是整数的子类。
NATURAL类数据为取0和0以上的正整数; POSITIVE 则只能为正整数。
HYIT
37
以上10种数据类型是VHDL语言中标准的数据类型, 在编程时可以直接引用。如果用户需要使用这10种以外的 数据类型,必须进行自定义。
HYIT
24
2.实数类型(Real)
实数的最小范围
1.0E+38至+1.0E+38 关键字:real
例如:variable a,b,c,d:real;
a:=12.0; b:=3.14_159;
HYIT
c:=2.0E5; d:=1.5e-6;
25
在进行算法研究或实验时,作为对硬件方案的抽象手 段,常常用到实数的四则运算。 实数有正负,书写时一定要有小数点。 所有的综合器都不支持实数,但部分仿真器支持。 MaxPlus II不支持!
2
HYIT
内容提要
1 2 3 词法和标识符 数据对象 数据类型 运算符
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三、 IEEE预定义标准
1.标准化数据类型
IEEE‘93增加了多值逻辑包STD_LOGIC_1164,使得“STD_LOGIC”数据 具有9种不同的值。其定义如下所示: TYPE STD_LOGIC IS ( ‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘—’ ); - - 初始值 - - 不定 -- 0 -- 1 - - 高阻 - - 弱信号不定 - - 弱信号0 - - 弱信号1 - - 不可能情况
VHDL语言的客体
3、信号(SIGNAL)
信号是电子电路内部硬件连接的抽象。它可以作为设计实 体中的并行语句模块间交流信息的通道。信号及其相关的 延时语句明显地体现了硬件系统的特征。 信号是全局量,内部信号说明不要注明数据流向。 信号定义语句的格式为: SIGNAL 信号名:数据类型:约束条件 := 表达式; 例如: SIGNAL gnd :BIT := ‘0’; SIGNAL data :STD_LOGIC_VECTOR (7 DOWNTO 0);
VHDL语言元素
VHDL语言的客体 VHDL语言的数据类型 VHDL数据类型转换 VHDL操作符 VHDL词法规则与标识符
VHDL语言的数据类型
在对VHDL的客体进行定义时,都要指定其数据类型。 VHDL有多种标准的数据类型,并且允许用户自定义数据 类型。在VHDL语言语义约束中,对类型的要求反映在赋 值语句的目标与源的一致,表达式中操作的一致,子类型 中约束与类型的一致等许多方面。 一、 VHDL中预定义的数据类型(编程者可直接使用) 预定义类型在VHDL标准程序包STANDARD中定义, 在应用中自动包含进VHDL的源文件,不需要USE语句显 示调用。数据类型说明如下。
9.错误等级(SEVERITY LEVEL) 错误等级类型数据用来表征系统的状态,共有4种:note(注 意),warning(警告),error(出错),failure(失败)。在 系统仿真过程中可以用这4种状态来提示系统当前的工作情况, 从而使设计人员随时了解当前系统工作的情况,并根据系统 的不同状态采取相应的对策。 10.大 于等于 零的 整数 (自然数 ) (NATURAL) ,正 整 数 (POSITIVE) 这两种数据是整数的子类,NATURAL类数据为取0和0以上的 正整数;而POSITIVE 则只能为正整数。
Entity bcdadder is Port(op1,op2 :in integer range 0 to 16; result :out integer range 0 to 31 ); End dcdadder; Architecture behavior of bcdadder is constant adjustnum :integer:=6 --定义一常量:整数型,值为6 signal binadd :integer range 0 to 18;
VHDL语言的客体
信号赋值语句表达式为: 目标信号名 <= 表达式;
符号 “<=” 表示赋值操作,即将数据信息传入。数据信息传入时可以设置 延时过程,这与器件的实际传播延时十分接近。因此信号值的代入采用 “<=”代入符,而不是像变量赋值时那样用“:=”。但信号定义时初始赋 值符号“:=”,即仿真的时间坐标是从赋初始值开始的。
数据类型 整数(integer) 实数(real) 位(bit) 位矢量(bit_vector) 布尔量(boolean) 字符(character) 时间(time) 错误等级(severity level) 自然数(natural) 正整数(positive) 字符串(string)
含 义 32位,-2147483647~ 2147483647 浮点数,-1.0E+38~+1.0E+38 逻辑“0”或“1” 多位“0”和“1”的组合 逻辑“真”或逻辑“假”: true 和 false ASCII字符 时间单位:fs,ps,ns,µs,ms,sec,min,hr Note, warning,error,failure ≥0的整数 >0的整数 字符矢量
5.布尔量(BOOLEAN) 一个布尔量具有两种状态,“真”或者“假”。虽然布尔 量也是二值枚举量,但它和位不同没有数值的含义,也不能进 行算术运算。它能进行关系运算。例如,它可以在if语句中被 测试,测试结果产生一个布尔量TRUE或者FALSE。综合工具 将false译为0,将true译为1。 6.字符(CHARACTER) 字符也是一种数据类型,所定义的字符量通常用单引号括起 来,如‘a’。一般情况下VHDL对大小写不敏感,但对字符量 中的大小写则认为是不一样的。例如,‘B’不同于‘b’。字符 量中的字符可以是从a到z中的任一个字母,从0到9中的任一个 数以及空格或者特殊字符,如$,@,%等等。包集合standard 中给出了预定义的128个ASCⅡ码字符,不能打印的用标识符 给出。字符‘1’与整数1和实数1.0都是不相同的,当要明确指 出1的字符数据 时,则可写为:CHARACTER( ‘ 1’)。
信号赋值语句举例: x <= y; a <= ‘1’; s1 <= s2 ;
注意:变量和信号都必须先 定义,后赋值。注意赋值符 “<=”和 “:=”的差别。
信号与变量的区别:
信号和变量是VHDL中重要的客体,他们之间的主要区别有: ·信号赋值至少要有δ延时;而变量赋值没有。 ·信号除当前值外有许多相关的信息,如历史信息和投影波形; 而变量只有当前值。 ·进程对信号敏感而不对变量敏感。 ·信号可以是多个进程的全局信号;而变量只在定义他们的顺 序域可见(共享变量除外)。 ·信号是硬件中连线的抽象描述,他们的功能是保存变化的数 据值和连接子元件,信号在元件的端口连接元件。变量在硬件 中没有类似的对应关系,他们用于硬件特性的高层次建模所需 要的计算中。
1 、常量(CONSTANT)(常数) 常量(CONSTANT)(常数 常数)
定义一个常数主要是为了使设计实体中的某些量易 于阅读和修改。常数说明就是对某一常数名赋予一 个固定的值。通常在程序开始前进行赋值,该值的 数据类型在说明语句中说明。 常数说明语句格式为: CONSTANT 常数名:数据类型 := 表达式;
VHDL
语言元素
VHDL语言元素
VHDL语言的客体 VHDL语言的数据类型 VHDL数据类型转换 VHDL操作符 VHDL词法规则与标识符
VHDL语言的客体
VHDL语言中,可以赋予一个质的对象就称为客体。客 体主要包括以下三种:变量(VARIABLE)、常量 (CONSTANT)、信号(SIGNAL)。
上述10种数据类型是VHDL语言中标准的数据类型, 在编程时可以直接引用。如果用户需使用这10种 以外的数据类型,则必须进行自定义。但大多数 的CAD厂商已在包集合中对标准数据类型进行了 扩展。例如,数组型数据等,请同学们注意。
二、 用户自定义的数据类型
格式:type 数据类型名 {数据类型名} 数据类型定义; 可以由用户定义的数据类型有: ·枚举(ENUMERATED)类型; ·整数(INTEGER)类型; ·实数(REAL)、浮点数(FLOATING)类型; ·数组(ARRAY)类型; ·存取(ACCESS)类型; ·文件(FILE)类型; ·记录(RECORDE)类型; ·时间(TIME)类型(物理类型)。
1.整数(INTEGER) 整数与数学中整数的定义相似,可以使用预定义运算操 作符,如加“+”、减“-”、乘“×”、除“÷”进行算术 运算。在VHDL语言中,整数的表示范围为-2147483647~ 2147483647,即从-(231-1)到(231-1)。 不用32位时,可采用: a)自定义类型,如: type digit is integer range 0 to 9; b) 直接注明范围,如:port( x: in integer range 0 to 9); 2.实数(REAL) 在进行算法研究或实验时,作为对硬件方案的抽象手段, 常常采用实数四则运算。实数的定义值范围为-1.0E+38~ +1.0E+38。实数有正负数,书写时一定要有小数点。例如: -1.0,+2.5,-1.0E+38
3.位(BIT) 用来表示数字系统中的信号值。位值用字符‘0’或者‘1’ (将值放在引号中)表示。与整数中的1和0不同,‘1’和 ‘0’仅仅表示一个位的两种取值。 位数据可以用来描述数字系统中总线的值。位数据不同于布 尔数据,可以用转换函数进行转换。 4.位矢量(BIT_VECTOR) 位矢量是用双引号括起来的一组数据。例如:“001100”, X“00bb”。在这里位矢量前面的X表示是十六进制。用位矢 量数据表示总线状态最形象也最方便,在VHDL程序中将会 经常遇到。使用位矢量时必须注明位宽,即数组中元素个数 和排列,例如: SIGNAL s1:BIT_VECTOR(15 DOWNTO 0);
变量定义语句的格式为: VARIABLE 变量名 : 数据类型 : 约束条件 := 初始值; 例如: VARIABLE n: INTEGER RANGE 0 TO 15 := 2; VARIABLE a: INTEGER;
VHDL语言的客体
变量赋值语句的格式为: 目标变量名 := 表达式; 赋值语句 “:=” 右边的表达式必须与目标变量具有相同 的数据类型,这个表达式可以是一个运算表达式也可以 是一个数值。变量赋值语句左边的目标变量可以是单值 变量,也可以是变量的集合。 例如定义变量: VARIABLE a,b := REAL; VARIABLE x,y := BIT_VECTOR(0 TO 7); 变量赋值立即生效,不产生附加延时
VHDL标准中只定义了bit和bit_vector,而bit只能取 “0”和“1”,给设计带来限制: a) 不能描述三态 b)不能使同一信号具有多个驱动源 c)不能给信号赋未知值 d)不能给信号赋无关值 解决方法:由ieee制定了标准化数据类型。 在ieee.std_logic_1164包中定义了 a) std_ulogic类型 b) Std_l义一个信号,以保存两数二进制相加的和.
相关文档
最新文档