0601-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程序一般由5个部分组成

块语句
块标号:BLOCK[保护表达式] [类属子句;] [端口子句;] [块说明部分;] BEGIN
<块语句部分;>
; END BLOCK 块标号
类属子句用于参数的定义;端口子句用于信号的定义; 块说明部分对该块要用到的信号、常数、元件和子程序 等进行说明;块语句部分对该块的功能进行描述,块语 句部分的语句是并行执行的,和书写顺序无关。
缺省说明: library std; use std.standard.all;
常用库及其程序包
IEEE: IEEE认可的标准库 std_logic_1164:定义了 std_logic, std_logic_vector, std_ulogic, std_ulogic_vector 等数据类型
VHDL 程序的基本结构
设计实体
实体说明
构造体
设计实体的组成
实体说明
Entity <实体名> is
[类属说明;] [端口说明;]
[实体说明部分;] [实体语句部分;] End [entity]<实体名>;
最简单的例: entity nothing is end nothing;
实体说明--类属说明
类属为设计实体和外部环境通讯的静态通信提供通道。可以定
实体说明--实体语句部分
是设计实体接口的共同部分。只能由并行断 言语句、并行过程调用语句、被动进程语 句组成,且不能在语句中给信号赋值。
设计实体
实体说明
构造体
设计实体的组成
构造体
architecture <构造体名> of <实体名> is
[构造体说明语句;]
Begin
<功能描述语句;>
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 输出 右图所示为并置运算符操作的电路示意。
3、VHDL语言要素

entity(实体)
architecture (结构体)
process(进程)
subprograms(子程序)
block(块)
二、变量(variable)
1、作用:存储临时数据。 2、声明格式: variable 变量名:数据类型; 3、赋值语句:变量名:=表达式; 4、注意: ★定义变量的位置:进程、子程序。 使用变量的位置:进程、子程序。 ★变量不能将值带出当前结构。 变量的赋值是立即发生的。
九、unsigned
定义前需打开ieee库和std_logic_arith程序包 定义时必须注明宽度(与矢量类似) 不能用integer的写法,应使用数位字符串 不能按位操作,必要时需进行类型转换
十、signed
注意事项同上
十一、类型转换函数
函数名
STD_LOGIC_1164程序包:
2、关系操作符
Байду номын сангаас
关系运算的结果是布尔类型:true或false。 不同长度的数组也可进行关系运算,规则是从左至 右逐一比较(与定义顺序to或downto无关),若发 现有一位不同即可确定结果。如:“101” <“110”。
举例:
entity relation_ops is port ( a,b : in bit_vector (0 to 3) ; c,d : in integer; m,n : out boolean) ; end relational_ops ; architecture example of relation_ops is begin
a<=b and c; --(1) d<=e or f or g ; --(2) h<=i nand j nand k ; --(3) l<=(m xor n) and (o xor p); --(4) h<=i and j and k ; --(5) h<=i and j or k ; --(6) a<=b and e ; --(7) h<=i or l ; --(8)
第四章 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’表示。
第5讲 VHDL语言要素

常量 CONSTANT
常量的可视性,即常量的使用范围取决于它被定义的 位置。在程序包中定义的常量具有最大全局化特征,可以 用在调用此程序包的所有设计实体中;定义在设计实体中
的常量,其有效范围为这个实体定义的所有的结构体;定
义在设计实体的某一结构体中的常量,则只能用于此结构 体;定义在结构体的某一单元的常量,如一个进程中,则 这个常量只能用在这一进程中。
第5讲 VHDL 语言要素
1 2 3 4
VHDL VHDL VHDL VHDL
文字规则 数据对象 数据类型 操作符
VHDL 文字规则
1. 数字型文字 1、2、3
2. 字符串型文字 a、b、c
3. 标识符
4. 下标名 5. 段名
signal,
std_logic integer range 0 to 30;
VHDL数据对象
在VHDL中,数据对象(Data Objects)类似于一种容器,它接受不同 数据类型的赋值。数据对象有三种,即常量(CONSTANT)、变量
(VARIABLE)和信号(SIGNAL)。前两种可以从传统的计算机高级语言
中找到对应的数据类型,其语言行为与高级语言中的变量和常量十分相 似。但信号是具有更多的硬件特征的特殊数据对象,是VHDL中最有特 色的语言要素之一。
预定义数据类型
4、字符(character) 用单引号将字符括起来。 variable character_var : character; Character_var : = „A‟; 5、字符串(string) string 是 character 类型的一个非限定数组。 用双引号将一串字符括起来。如: variable string_var : string(1 to 7); …… string_var := “Rosebud”;
三、VHDL语言基础

第三章VHDL语言基础本章介绍VHDL语言的基础知识,具体内容包括:1、概述2、VHDL程序的基本结构库、程序包、实体说明、结构体、配置3、VHDL的语言要素语法规则、数据对象、数据类型、运算操作符4、VHDL的描述语句并行语句、顺序语句、子程序、属性语句5、VHDL的描述方式行为描述方式、寄存器传输级描述方式、结构描述方式第一节概述HDL(Hardware Description Language):硬件描述语言,描述数字电路和系统的语言。
具体来说,用于描述数字系统的结构、行为、功能和接口。
在EDA设计中,设计者利用硬件描述语言,可以描述自己的设计思想,完成设计输入的步骤。
设计输入共有三种方法——原理图、文本、波形输入,其中,文本输入方式就是用硬件描述语言跟计算机交流,让计算机读懂设计者的设计。
VHDL的全称是V ery-High-Speed Integrated Circuit Hardware Description Language,译作甚高速集成电路硬件描述语言,是当前广泛使用的HDL语言之一,并被IEEE和美国国防部采用为标准的HDL语言。
1、发展历程:美国国防部1982年开发VHDL语言,在1987年被IEEE采用为标准硬件描述语言。
在实际使用过程中,发现1987年版本的缺陷,并于1993年对87版进行了修订。
因此,现在有两个版本的VHDL语言。
1)1987年的IEEE 1076(VHDL87)2)1993年进行了修正(VHDL93)VHDL语言目前已成为,开发设计可编程逻辑器件的重要工具。
2、优点:VHDL语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。
归纳起来,VHDL 语言主要具有以下优点:功能强大,设计方式多样VHDL具有功能强大的语言结构, 可用简洁明确的代码来描述十分复杂的硬件电路。
VHDL 语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法;既支持模块化设计方法,也支持层次化设计方法。
第5讲VHDL语言要素

信号定义语句格式: SIGNAL 信号名: 数据类型 [:= 初始值] ;
12
例:SIGNAL clk : std_logic := ‘0’; SIGNAL a : integer range 0 to 15; SIGNAL data : std_logic_vector(15
15
…… SIGNAL a,b,c,y,z: integer ;
…… PROCESS(a,b,c )
BEGIN y <= a*b; --------- 不对y进行赋值 z <= c-y; y <= b; --------- y的最后赋值
END PROCESS; ……
16
信号与变量的区别
(1)声明的形式与位置不同 信号 signal count : std_logic_vector(7 downto 0); 变量 variable tema:std_logic_vector(3 downto 0); 信号在结构体中声明;变量在进程中声明
C
练习
A
X
B
Y
architecture m2 of bcv is begin process(a,b,c) variable d:std_logic; begin d:=a; x<=c xor d; d:=b; y<=c xor d; end process; end m2;
x<=c xor a, y<=c xor b 20
27
(4) 字符 是用单引号括起来的ASCⅡ码,一般情况下
VHDL语言要素

(3) 以数制基数表示的文字:用这种方式表示的数由五个部分 组成。第一部分,用十进制数标明数制进位的基数;第二部分, 数制隔离符号“#”;第三部分,表达的文字;第四部分,指数 隔离符号“#”;第五部分,用十进制表示的指数部分,这一部 分的数如果是0可以省去不写。
第2章 VHDL硬件描述语言
EDA技术
常量的使用范围取决于它被定义的位置。在程序包中定义 的常量具有最大全局化特征,可以用在调用此程序包的所有 设计实体中;
定义在设计实体中的常量,其有效范围为这个实体定义的 所有的结构体;定义在结构体中的常量,则只能用于此结构 体;定义在结构体的某一单元的常量,如一个进程中,则这 个常量只能用在这一进程中。
第2章 VHDL硬件描述语言
EDA技术
(8)时间(TIME)类型 完整的时间类型包括整数和物理量单位两部分,整数和单
位之间至少留一个空格,如55 ms,20 ns。 例:CONSTANT delay: time=55 ns;
第2章 VHDL硬件描述语言
STANDARD 程序包中也定义了时间。定义如下:
--定义了一个标准位矢的位矢量 --(数组、总线)信号,共有16个信号元素
信号的赋值语句的语法格式 信号名<=表达式;
第2章 VHDL硬件描述语言
EDA技术
4.三者的使用比较
(1) 从硬件电路系统来看,常量相当于电路中的恒定电平, 如GND或VCC接口,而变量和信号则相当于组合电路系统中 门与门间的连接及其连线上的信号值。
例:Variable s:boolean=true;
第2章 VHDL硬件描述语言
EDA技术
(6)字符(CHARACTER)型数据类型 字符通常用单引号括起来,对大小写敏感。 例: Variable s:character=‘H’;
VHDL语言的基本知识点罗列

VHDL语言的基本知识点罗列1 VHDL语言的标识符VHDL中的标识符可以是常数、变量、信号、端口、子程序或参数的名字。
使用标识符要遵守如下法则:a)标识符由字母(A…Z;a…z)、数字和下划线字符组成。
任何标识符必须以英文字母开头。
λ末字符不能为下划线。
λb)不允许出现两个连续下划线。
标识符中不区分大小写字母。
λVHDL定义的保留子或称关键字,不能用作标识符。
λc) VHDL中的注释由两个连续的短线(--)开始,直到行尾。
以下是非法标识符:-Decoder —起始不能为非英文字母3DOP —起始不能为数字Large#number —“#”不能成为标识符的构成符号Data__bus —不能有双下划线Copper_ —最后字符不能为下划线On —关键字不能用作标识符。
注:在AHDL语言中标识符要区分大小写,但在VHDL语言中不区分大小写。
所以写程序时,一定要养成良好的书写习惯,应用关键字时用大写,自己定义的标识符用小写。
标识符表示的几种数据对象的详细说明如下:1) 常数(Constant )常数是一个固定的值,主要是为了使设计实体中的常数更容易阅读和修改。
常数一被赋值就不能在改变。
一般格式:CONSTANT 常数名:数据类型:=表达式;例:CONSTANT Vcc: REAL: =5.0;—设计实体的电源电压指定常数所赋得值应与定义的数据类型一致。
常量的使用范围取决于它被定义的位置。
程序包中定义的常量具有最大的全局化特性,可以用在调用此程序包的所有设计实体中;设计实体中某一结构体中定义的常量只能用于此结构体;结构体中某一单元定义的常量,如一个进程中,这个常量只能用在这一进程中。
2) 变量(Variable)变量是一个局部变量,它只能在进程语句、函数语句和进程语句结构中使用。
用作局部数据存储。
在仿真过程中。
它不像信号那样,到了规定的仿真时间才进行赋值,变量的赋值是立即生效的。
变量常用在实现某种算法的赋值语句中。
EDA技术与应用实践—VHDL语言要素

时间(Time)
时间单位fs, ps, ns,us,ms,sec,min,hr
错误等级(Severity Level)NOTE,WARNING,ERROR,FAILURE
自然数、正整数(Natual & Positive)
整数的子集
字符串(String)
字符矢量Biblioteka 表 4 - 3 标准的数据类型
6
4.3 VHDL 语言要素
由STD_LOGIC_VECTOR转换成 INTEGER
10
【例4 - 10】:数据类型转换示例 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY dec3to8 IS
PORT(input:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
4.3 VHDL 语言要素
(4)记录类型 TYPE 数据类型名 IS RECORD 元素名:数据类型名; 元素名:数据类型名; …. END RECORD;
3. 用户定义的子类型
4.3 VHDL语言要素
⒋ 数据类型的转换
表 4 - 4 数据类型变换函数
函数名
功能
STTTTTOOOOD_____SBSBLTITIODTDTGLVL(IOEOACGCG)_ITI1COC1VR(6E(A4CA)T)程OR序(A包):由S由B由由TIBDSTBSILTVITTODETDVGLCL转EIOTOCCGOG换TVIRIOECC为RCV转TE转SOCT换RT换DOL为R为O转GBII换CT 为
4
4.3 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语言的语言要素
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PROCESS语句(回顾)
[进程名:] PROCESS [(敏感信号表)] IS 变量说明语句 变量说明语句 BEGIN … 进程内逻辑语句 … END PROCESS [进程名];
可有可无, 区分不同 进程
process语句使用的类型、常量、变
量、子程序声明、子程序体、属性声明 等,但不能有信号声明*
1、为了用起来像个函数的样子,不妨加个 port关键词,把输入输出引脚象参数一样排列 起来。
2、很好地表达了4个输入引脚,1个输出引脚。 3、提供给别人调用。
1、内部功能实现的细节 2、T1、T2似乎有点奇怪,哪来的? 3、那我们也规定先定义,后使用!
VHDL语言如何做的?(回顾)
Library IEEE; Use IEEE.STD_LOGIC_1164.ALL;
仪器与电子学院
可编程逻辑器件应用
主讲人:刘文怡
第6讲: VHDL的基本元素
1 2 3 4 5
标识符 数据对象 数据类型 操作符 端口模式
漂亮的程序(回顾)
Fengzhuang_kaishi port ( IN1:in ; IN2:in ; IN3:in ; IN4:in ; OUT4:out ) Fengzhuang_jieshu Gongneng_kaishi signal T1,T2; OUT4 <= T1 or T2; T2 <= IN3 and IN4; T1 <= IN1 and IN2; Gongneng_jieshu
客体 代入符 操作 过程 信号 <= 变量 :=
由于信号代入语句是并行处理的,下 一条语句执行时,仍使用原来的信号 值。
PROCESS(A,B,C) BEGIN D<=A; X<=B+D; D<=C; Y<=B+D; END PROCESS; 结果: X<=B+C; Y<=B+C;
变量的赋值语句不是并行的,在执 行下一条语句时,变量的值就为上 一句新赋的值。
数据对象声明举例
对象说明的一般书写格式为: 对象类别 标识符表 : 子类型标识[:=初值]; 对象说明举例: CONSTANT T1,T2:time := 30ns; --常量说明 VARIABLE SUM:read; --变量说明 SIGNAL CLOCK:bit; --信号说明
常量
常量标识符、WIDTH ,VCC,DALY,PBUS 等在VHDL程序中多 处有用,其值在运行中不变。若要改变常量值,必须要改 变设计,改变实体中的常量说明,然后重新编译。 常数所赋的值应和定义的数据类型一致; 常量必须在程序包、实体、结构体或进程的说明区域中对 常量的标识符、类型、常量值进行指定。 定义在程序包中的常量由所在的实体或结构体调用。 定义在实体内的常量仅在实体内使用,定义在进程内的常 量仅在进程内使用。
信号
信号(signal)是电子电路内部硬件实体相互连接的抽象表示。 信号通常在构造体、包集合和实体说明中使用,其一般书写 格式为: SIGNAL 信号名:数据类型、约束条件:=表达式; 使用上述格式举例如下: SIGNAL sys_clk : BIT := ‘0’; --系统时钟信号 SIGNAL count : bit_vector(7 downto 0);--计数器宽度
如果在同一个对象说明语句中,对多个同一类型的对象指 定初始值,则多个对象同时取得了这一指定值。 信号和变量的默认值。当信号和变量没有指定初始值或没 有给信号变量赋值时,即信号和变量的值在对象说明语句 中默认时,信号变量的取值称为默认值。一般地,若变量、 信号为数值型变量,则取初始值,默认值为‘0’.
ENTITY mux IS PORT(d0,d1,sel:in bit; q:out bit); END mux; Architecture dataflow of mux is signal tmp1,tmp2,tmp3:bit; Begin tmp1<=d0 and sel; tmp2<=d1 and (not sel); tmp3<=tmp1 or tmp2; q<=tmp3; End dataflow;
信号
有关信号的使用规则说明如下: ‚ :=” 表示对信号直接赋值,表示信号初始值不产生延时。 ‚ <=” 表示代入赋值,是变量之间信号的传递,代入赋值 法允许产生延时。例如:T1 <= T2; 在仿真中,初始化能保证信号设定在指定值上。对于存储 元件的加电初始状态,应该设计复位或予置位机构,而不 是通过信号指定初始化值来实现。 在EDA工具综合时,信号应在结构体中描述清楚。 在进程中,变量的使用范围在进程之内。若将变量用于进 程之外,必须将该值赋给一个相同类型的信号,即进程之 间传递数据靠的是信号。
2 数据对象 Nhomakorabea
在VHDL语言中,凡是可以赋予一个值的客体叫对象。 VHDL对象包含有专门数据类型,主要有4个基本类型:常量 (CONSTANT)、信号(SIGNAL)、变量(VARIABLE)和文件 (FILES)。其中文件类型是VHDL’93标准中新通过的。 信号和变量可以连续的赋予不同的值。 常量只在它被说明时赋值,在整个器件工作期间值不变化。 试图对常量多次赋值是错误的。 文件可以用参数向子程序传递数据,通过子程序对文件进 行读和写操作。文件不可以通过赋值来更新文件的内容, 文件参数没有模式。
常量
常量(constant)是设计者给实体中某一常量名赋予的固定值。一般地,常量赋 值在程序开始前进行说明,数据类型在实体说明语句中指明。常量说明的一般 格式如下: CONSTANT 常数名:数据类型:=表达式; 根据上面的格式,举例如下: 8位寄存器宽度指定: CONSTANT regw:integer:=8; 设计实体的电源供电电压指定: CONSTANT Vcc:real:=5.0; 某一模块信号输入/输出的延迟时间: CONSTANT DALY:time:=100ns;
变量
变量(variables)仅用在进程语句、函数语句、过程语句中 的结构中使用,变量是一个局部量,变量的赋值立即生效, 不产生赋值延时。变量书写的一般格式为: VARIABLES 变量名:数据类型 约束条件:=表达式; 根据上述格式,举例如下: VARIABLES result: std_logic:='0';—变量赋初值 VARIABLES x,y,z : integer; VARIABLES count: integer range 0 TO 255 :=10; 变量不能加附加延时,如‛after 10 ns”。
1 标识符
标识符规则是 VHDL 语言中符号书写的一般规则。 不仅对电子系统设计工程师是一个约束,同时也 为各种各样的EDA工具提供了标准的书写规范。 VHDL 语言有两个标准版: VHDL’87 版和 VHDL’93 版。 VHDL’87 版的标识符语法规则经过扩展后, 形成了VHDL’93版的标识符语法规则。 前一部分称为短标识符,扩展部分称为扩展标识 符。 VHDL’93 版含有短标识符和扩展标识符两部 分。
d0 d1 sel
q
d0 d1 sel
& &
≥ 1
q
实体声明(回顾)
实体声明语法:
ENTITY 实体名 IS [类属参数说明]; [端口说明]; END 实体名;
d0 d1 q sel
举例:
ENTITY mux IS PORT(d0,d1,sel:IN BIT; q:OUT BIT ); END mux;
PROCESS(A,B C) VARIABLE D:STD_LOGIC; BEGIN D:=A; X<=B+D; D:=C; Y<=B+D; END PROCESS; 结果: X<=B+A; Y<=B+C;
举 例
数据对象赋值的补充说明
可用函数调用的方法给对象赋初值。
CONSTANT Bus_number:Integer :=My_function(True,6);
变量
在VHDL语言中,变量的使用规则和限制范围说明如下: 变量赋值是直接非预设的。在某一时刻仅包含了一个值。 变量赋值和初始化赋值符号用‚:=‛表示。 变量不能用于硬件连线和存储元件。 在仿真模型中,变量用于高层次建模。 在系统综合时,变量用于计算,作为索引载体和数据暂存。 在进程中,变量的使用范围在进程之内。若将变量用于进 程之外,必须将该值赋给一个相同类型的信号,即进程之 间传递数据靠的是信号。
信号和变量代入的区别
声明的形式与位置不同:信号在结构体中 声明;变量在进程中声明。 赋值符号不同:count<=‚00000000‛; data:=‚00000000‛; 进程对信号敏感,对变量不敏感 作用域不同:信号可以是多个进程的全局 信号;变量只在定义后的顺序域可见。
信号和变量代入的区别
3 数据类型
VHDL语言标准定义了10种标准的数据类型。 为了方便设计,允许用户自定义数据类型。 VHDL语言程序是系统行为的描述、功能的说 明和结构的组织,使用规范化语言,有着很 强的约束性。不同的数据类型不能直接代入, 相同的类型,位长不同也不能代入。 EDA 工 具在编译、综合时会报告类型错。
短标识符(1)
短标识符 在VHDL语言中使用的名字,如信号名、实体名、结构体名、 变量名、各种进程标记、块标记等命名时,采用短标识符 要遵守以下规则: (1) 必须以英文字母打头。 (2) 字符可以是大小写的字符、数字(0~9)和下划线(_)。 (3) 下划线前后都必须有英文字母或数字。 (4) 短标识符不区分大小写。 一般地,对VHDL的保留字:ENTITY,ARCHITECTURE,END, BUS,USE,WHEN,WAIT ,IS…在程序书写时,一般要求大 写或黑体,使得程序易于阅读,易于检查错误。