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

合集下载

VHDL入门教程

VHDL入门教程

VHDL入门教程VHDL(Very High-speed Integrated Circuit HardwareDescription Language)是一种用于设计数字电路的硬件描述语言。

它是IEEE 1076标准中规定的一种语言,广泛应用于数字电路的设计、仿真和综合等领域。

本文将为大家介绍VHDL的基础知识和入门教程。

一、VHDL的基本概念1. 实体(Entity):VHDL代码的最高层次,用于定义模块的输入、输出和内部信号。

2. 架构(Architecture):定义了实体中的各个信号和组合逻辑的行为。

3. 信号(Signal):表示数据在电路中的传输和操作。

4. 进程(Process):定义了组合逻辑的行为,用于描述信号之间的关系。

5. 实体声明(Entity Declaration):用于描述模块的名称、输入、输出和内部信号。

6. 架构声明(Architecture Declaration):用于描述模块的内部逻辑。

二、VHDL的基本语法1.实体声明语法:```entity entity_name isport ( port_list );end entity_name;```其中,entity_name是实体的名称,port_list是实体的输入、输出和内部信号。

2.架构声明语法:```architecture architecture_name of entity_name issignal signal_list;beginprocess (sensitivity_list)begin--逻辑行为描述end process;end architecture_name;```其中,architecture_name是架构的名称,entity_name是实体的名称,signal_list是架构的内部信号,sensitivity_list是触发事件的信号列表。

三、VHDL的基本例子下面以一个简单的4位加法器为例介绍VHDL的编写和仿真流程。

vhdl程序的基本结构vhdl程序一般由5个部分组成

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语言的基本要素一、数据对象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语⾔基础1 数据对象数据对象包括常量、变量、信号和⽂件四种类型1.1 常量常量是对某⼀常量名赋予⼀个固定的值,⽽且只能赋值⼀次。

通常赋值在程序开始前进⾏,该值的数据类型则在声明语句中指明--定义常量语句:--Constant 常数名:数据类型:=表达式Constant Vcc:real:=5.2; --指定Vcc的数据类型是实数,赋值为5.0VConstant bus_width:integer:=8; --定义总线宽度为常数8常量所赋的值应和定义的数据类型⼀致;常量在程序包、实体、构造体或进程的说明性区域必须加以说明。

定义程序包内的常量课提供所包含的任何实体、构造体所引⽤,定义在实体说明内的常量只能在该实体内可见,定义在进程说明内的常量只能在该实体内可见,定义在进程说明区域中的常量只能在该进程内可见1.2 变量变量只能在进程语句、函数语句和过程语句结构中使⽤。

变量的赋值是直接的,⾮预设的。

变量不能表达“连线”或储存原件,不能设置传输延迟量--定义变量语句--Variable 变量名:数据类型:=初始值;Variable count:integer 0 to 255:=20; --定义count整数变量,变化范围0-255,初始值为20--变量赋值语句--⽬标变量名:=表达式;x:=10.0; --实数变量赋值为10.0Y:=1.5+x; --运算表达式赋值,表达式必须与⽬标变量的数据类型相同A(3 to 6):=("1101") --位⽮量赋值1.3 信号信号表⽰逻辑门的输⼊或输出,类似于连接线,也可以表达存储元件的状态。

信号通常在构造体、程序包和实体中说明--信号定义语句--Signal 信号名:数据类型:=初始值Signal clock:bit:='0'; --定义时钟信号,初始值为0Signal count:BIT_VECTOR(3 DOWNTO 0); --定义count为4位位⽮量--信号赋值语句⽬标信号名<=表达式;x<=9;Z<=x after 5 ns; --在5ns后将x的值赋给z2 数据类型2.1 VHDL的预定义数据类型类型定义说明布尔(Boolean)TYPE BOOLEAN IS (FALSE,TRUE);取值为FALSE和TRUE,不是数值,不能运算,⼀般⽤于关系运算符位(Bit)TYPE BIT IS ('0','1');取值为0和1,⽤于逻辑运算位⽮量(Bit_Vector)TYPE BIT_VECTOR IS ARRAY(Natural range<>)OF BIT;基于Bit类型的数组,⽤于逻辑运算字符(Character)TYPE CHARACTER IS (NUL,SOH,STX,...,'','!',...);通常⽤''引号引起来,区分⼤⼩写字符串(String)VARIABLE string_var:STRING(1 TO 7);string_var:="A B C D";通常⽤""引起来,区分⼤⼩写整数(Integer)variable a:integer range -63 to 63取值范围 -(231 -1)~(231-1)要求⽤RANGE⼦句为所定义的数限定范围,以便根据范围决定此信号或变量的⼆进制位数实数(Real)-取值范围-1.0E38~+1.0E38,仅可⽤于仿真不可综合时间(Time)-物理量数据,完整的包括整数和单位两个部分,⽤⾄少⼀个空格隔开,仅可⽤于仿真不可综合时间(Time)-开,仅可⽤于仿真不可综合错误等级(SeverityLevel)TYPE severity_level IS (NOTE、WARNING、ERROR、FAILURE);表⽰系统状态,仅可⽤于仿真不可⽤于综合类型定义说明2.2 IEEE预定义标准逻辑位与⽮量标准逻辑类型对数字逻辑电路的逻辑特性描述更加完整、真实,因此在VHDL程序中,对逻辑信号的定义通常采⽤标准逻辑类型标准逻辑位(Std_Logic)符号说明'U'Undefined(未初始化)'X'Forcing Unknown(强未知)'0'Forcing 0(强0)'1'Forcing 1(强1)'Z'High Impedance(⾼阻)'W'Weak Unknown(弱未知)'L'Weak 0(弱0)'H'Weak 1(弱1)'-'Don't Care(忽略)标准逻辑位⽮量(Std_Logic_Vector)基于Std_Logic类型的数组使⽤Std_Logic和Std_Logic_Vector要调⽤IEEE库中的Std_Logic_1164程序包;就综合⽽⾔,能够在数字器件中实现的是“-、0、1、Z”四种状态。

VHDL语言的基本知识点罗列

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)变量是一个局部变量,它只能在进程语句、函数语句和进程语句结构中使用。

用作局部数据存储。

在仿真过程中。

它不像信号那样,到了规定的仿真时间才进行赋值,变量的赋值是立即生效的。

变量常用在实现某种算法的赋值语句中。

3、VHDL语言要素

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

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

3.2 VHDL语言要素

3.2 VHDL语言要素

TYPE Operation IS RECODE
Mnemonic:STRING(1 TO 10);--助记符
OPCode:BIT_VECTOR(3 DOWNTO 0);
OP1,OP2,Res:RegName; END RECODE;
VARIABLE Instr1,Instr2,Instr3:Operation;
8、字符串(STRING)数据类型
字符串是用双引号括起来的字符序列,也称字符矢 量或字符串数组。例如, “A BOY.‖,“10100011‖
9、时间(TIME)数据类型
时间是物理量数据,由整数数据和单位两部分组 成,定义语句:
TYPE TIME 2147483647
units
IS
RANGE
–2147483647
整数包括:正整数、负整数和零
范围:32位带符号数原码,即-(231-1)~+(231-1)
(-2147483647~+2147483647)
6、自然数(NATURAL)和正整数(POSITIVE) 数据类型 自然数——包括0和正整数 正整数——不包括0的正整数 7、实数(REAL)数据类型 由正、负、小数点和数字组成,如:-1.0,+2.5, -1.0E38 范围:-1.0E+38 TO +1.0E+38
4、下标名——数组
格式:标识符(表达式) 例如:b(3) 5、段名——多个下标名的组合
格式:标识符(表达式 方向 表达式)
方向:TO——下标序号由低到高 DOWNTO——下标序号由高到低 例如:D(7 DOWNTO 0);表示数据总线D7~D0 D(0 TO 7 );表示数据总线D0~D7
3.2.2 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

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;

VHDL语言

VHDL语言

(5)布尔数据类型(BOOLEAN) )布尔数据类型( ) 属于枚举数据类型 取值为‘TRUE’和 FALSE’。 枚举数据类型, 属于枚举数据类型,取值为‘TRUE 和‘FALSE 。 常用来表示关系运算和关系运算结果。 常用来表示关系运算和关系运算结果。 (6)字符数据类型(CHARACTER) )字符数据类型( ) ASCII码的128个字符 书写时用单引号, 码的128个字符, ASCII码的128个字符,书写时用单引号,区分 大小写, 大小写,如‘a’、‘A’等。 、 等 (7)字符串数据类型(STRING) )字符串数据类型( ) 双引号括起来的一串字符 一串字符, abgh”。 双引号括起来的一串字符,如“abgh 。
SIGNAL 信号名 数据类型; 信号名:数据类型; 数据类型
[例1.4.6] 信号定义举例 例
SIGNAL A:INTEGER; ;
2.VHDL数据类型 2.VHDL数据类型 (1)整数数据类型(INTEGER) )整数数据类型( ) 取值范围: 2147483547~ 取值范围:-2147483547~ 2147483546 (2)实数数据类型(REAL) )实数数据类型( ) 取值范围: 1.0E38~ 取值范围:-1.0E38~ 1.0E38 (3)位数据类型(BIT) )位数据类型( ) 属于枚举数据类型 取值为‘ 和 枚举数据类型, 属于枚举数据类型,取值为‘1’和‘0’。 。 (4)位矢量数据类型(BIT_VECTOR) )位矢量数据类型( ) 用双引号括起来的一组位数据 一组位数据, 用双引号括起来的一组位数据,如“10011”, , 通常用来表示数据总线 表示数据总线。 通常用来表示数据总线。
(8)STD_LOGIC数据类型 ) 数据类型 属于枚举数据类型 取值有以下九种: 枚举数据类型, 属于枚举数据类型,取值有以下九种: ‘U’ 初始值 U ‘X’ 不定 ‘1’ ‘0 ’ 0 1 1 ‘Z’ 高阻 Z ‘W’ 弱信号不定 弱信号0 ‘H’ 弱信号1 ‘L’ 弱信号0 H 弱信号1 ‘-’ 不可能情况 (9)STD_LOGIC_VECTOR数据类型 ) 数据类型 用双引号括起来的一组 数据, 用双引号括起来的一组STD_LOGIC数据, 一组 数据 表示数据总线。 如“101011”,通常用来表示数据总线。 ,通常用来表示数据总线 注意:使用STD_LOGIC、 STD_LOGIC_VECTOR 注意:使用 、 数据类型时必须在库、程序包说明区进行说明。 数据类型时必须在库、程序包说明区进行说明。

第5讲VHDL语言要素

第5讲VHDL语言要素
计实体中并行语句模块间动态交换数据的手段。在 物理上信号对应着硬件设计中的一条连接线。它除 了没有数据流动方向说明以外,其他性质与实体的 端口(Port)概念一致。
信号定义语句格式: 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语言要素

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‟93规定的标识符
SIGNAL TEMP :STD_LOGIC:=„0‟‟ SIGNAL A:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SIG_A:INTEGER RANGE 0 TO 15; TEMP<=„1‟; A<=“1001”; A(0)<=„0‟; SIG_A<=14;
VHDL语言要素
VHDL语言要素
VHDL语言要素
信号和变量的区别
信号 赋值符号 功能 作用范围 行为 <= 电路的内部连接 全局,进程和进程之间的通信 延迟一定时间后才赋值 变量 := 内部数据交换 进程的内部 立即赋值
VHDL语言要素
三、常量(CONSTANT)
常数(Constant)
•固定值,不能在程序中被改变 •增强程序的可读性,便于修改程序 •在综合后,连接到电源和地 •可在Library、Entity、Architecture、Process中进行定
VHDL语言要素
第四章 VHDL语言要素
语言要素: 编程语句的基本单元。
文字及标识符 数据对象 VHDL 语言要素 数据类型 操作符
VHDL语言要素
4.1 VHDL文字规则
数字 数值 文
字符/字符串
字 标识符
保留字 自定义
VHDL语言要素

硬件描述语言(VHDL)

硬件描述语言(VHDL)
FOR 元件标号:元件名 USE ENTITY 库名.实体名[(结构名)];

(1)体内配置指定

(2)体外配置说明
由于体外配置语句是一个独立的编译单位, 故需给它指定一个单位名—配置名。实体 名和结构体名为需对例元做配置的实体及 相应的结构体。

(3)直接例化

二. VHDL语言的数据对象,数据类型
TYPE week IS(sum,mon,tue,wed,thu,fri,sat);
2.整数,实数(Integer,Real)类型 格式:TYPE 数据类型名 IS 数据类型定义约束范围
TYPE twos IS INTEGER RANGE –32768 TO 32767; TYPE voltage IS REAL RANGE 0.0 TO 10.0;



结构体的子结构描述:
BLOCK,PROCESS,SUBPROGRAM三种语句结构
1. BLOCK语句结构描述
格式: 块结构名: BLOCK BEGIN ….
END BLOCK 块结构名;
在对程序进行仿真时,BLOCK语句中所描述的各个语 句是可以并发执行的,它与书写顺序无关。 卫式BLOCK语句的格式::BLOCK [卫式布尔表达式]; 当卫式布尔表达式为真时,BLOCK语句执行。
为了能重复使用这些函数和过程,这些程 序通常组织在包集合库中。 (1)多个过程和函数汇集在一起就构成一个 包集合(Package)。 (2)n个包集合汇集在一起就形成一个库 (Library)。


(三) 包集合,库及配置
1.库(Library):它是一个经过编译后的数据的集合, 存放包集合EE库,STD库,ASIC矢量库, WORK库,用户定义库。

第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 信号名:数据类型[:=初始值];

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

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

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

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

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

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

数据对象的定义格式:
signal 信号名:数据类型,约束条件,表达式
Variable 变量名:数据类型,约束条件:=表达式
Constant 常量名:数据类型,约束条件:=表达式
例如:Variable count:INTEGER RANGE 0 TO 255:=10
Constant 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_VECTOR
TO_BITVECTOR(A) 由STO_LOGIC_VECTOR转为BIT_VECTOR
TO_STDLOGIC(A) 由BIT转换为STD_LOGIC
TO_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 语言程序的基本结构
⑴ 实体(Entity )
实体主要由实体说明和构造体组成;实体说明描述电路的外部特征,
构造体描述的是电路内部的逻辑。

①实体说明主要包括·类属参数说明 ·端口说明
②构造体主要包括 ·名称命名 ·定义语句 ·并行处理语句等 定义语句是对其内部使用的信号、常数、数据类型、函数定义
y(4) en
b(0) b(1) b(2) b(3) y(5) y(6) y(7)
a(0) a(1) a(2) a(3)
实体
实体说明
接口说明
构造体
功能定义entity top is port(
i, j, k: in bit; z: out bit);
end top;
architecture top of top is
signal h: bit;
begin
u1: and2 port map(a=>i, b=>j, x=>h); u2: or2 port map(a=>h, b=>k, y=>z); end;
端口配置中的形参和实参
设计实体与其实体说明、构造体的关系
⑵构造体的子结构
构造体的子结构主要可由如下语句结构组成
·Block语句结构
·Process语句结构过程(procedure)·SUBPROGRAMS结构
函数(Function)
⑶程序包、库、配置
重载运算符(overloaded operators):和其他运算符一样,关系运算符也可以重载。

重载运算符允许多种类型使用运算符(这些运算符不是由IEEE1076标准预定义的)。

运算符可能由用户定义函数重载,但很多重载运算符是由IEEE1164和IEEE1076.3标准所定义。

例如,IEEE 1076标准定义了为类型signed和integer以及unsigned和natural 重载=运算符的函数。

此重载运算符允许以下的代码段被执行。

相关文档
最新文档