第四章 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语言基础精品PPT课件
Sec.4.2. VHDL程序结构
1. VHDL程序结构 2. ⑴.实体说明(Entity declaration)
3. ⑵.结构体(Architecture body) 4. 定义与概念
5. ⑴.实体说明 6. ⑵.结构体
2.实体说明和结构体之间的关系
⑴.“包裹皮” 的概念
实体①
⑵.实体和结构体之间的关系
END Majority_vote; ARCHITECTURE examp1 OF Majority_vote IS
BEGIN Y<=(a and b)or (b and c)or (a and c);
END examp1;
三.Signal(信号)及其并行性
定义:信号是电子电路内部硬件实体相互连接的信息表示。
表4-1.数字系统各层次划分及功能
层次名称 系统级(算法级)
寄存器传输级 (RTL级) 逻辑级(门级) 电路级
行为级描述
针对设计技术条 件、流程图、算 法进行系统级综 合
寄存器传输
逻辑函数、状态 方程 传输函数
各层次功能及结构
结构级描述
物理层表示的对象
处理器、控制器、存 集成电路芯片、印刷电路
储器、总线等
第四章 VHDL语言基础
VHDL语法和语句
本章任务
• 1.VHDL语言的基础知识,如何用VHDL语言描述数字系统。 • 2.VHDL程序结构,实体和结构体的概念。实体说明、结构体说明。结
构体的3种描述方法。 • 3.QuartusⅡ开发软件及应用。图形编辑方法;数字系统的VHDL文
本文件编辑方法。 • 4.一些基本的VHDL语法。 • 数组(Array)、 • 并行语句(Concurrent Statement)、 • 选择信号代入语句(Selected Signal Assignment Statement)、 • 并行信号赋值语句(Concurrent Signal Assignment
第4章VHDL语言基础
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端口
用于定义模块所有的输入/输出信号,相当于定义一个 模块符号
第4章VHDL语言要素
"ERROR"
"Both S and Q equal to 1" "X" "BB$CC"
பைடு நூலகம்
(2) 数位字符串
数位字符串也称位矢量 是预定义的数据类型 Bit 的一位数组 数位字符串与文字 字符串相似 但所代表的是二进制 八进制或十六进制的数组 它们所代表的位矢量的长
度即为等值的二进制数的位数 字符串数值的数据类型是一维的枚举型数组 与文字字符
KONXIN 杭州康芯电子有限公司 KONXIN
59
第 4 章 VHDL 语言要素
量和常量十分相似 但信号这一数据对象比较特殊 它具有更多的硬件特征 是 VHDL 中
最有特色的语言要素之一
从硬件电路系统来看 变量和信号相当于组合电路系统中门与门间的连线及其连线
上的信号值 常量相当于电路中的恒定电平 如 GND 或 VCC 接口 从行为仿真和 VHDL
下例各信号分别以段的方式进行赋值 内部则按对应位的方式分别进行赋值
SIGNAL a z : BIT_VECTOR (0 TO 7) ;
SIGNAL b : STD_LOGIC_VECTOR (4 DOWNTO 0) ;
SIGNAL c : STD_LOGIC_VECTOR (0 TO 4) ;
SIGNAL e : STD_LOGIC_VECTOR (0 TO 3) ;
-- 可计算型下标表示
5 段名
段名即多个下标名的组合 段名将对应数组中某一段的元素 段名的表达形式是
标识符(表达式 方向 表达式)
这里的标识符必须是数组类型的信号名或变量名 每一个表达式的数值必须在数组 元素下标号范围以内 并且必须是可计算的(立即数) 方向用 TO 或者 DOWNTO 来表示 TO 表示数组下标序列由低到高 如(2 TO 8) DOWNTO 表示数组下标序列由高到低 如(8 DOWNTO 2) 所以段中两表达式值的方向必须与原数组一致
VHDL语言要素
标准数据类型
10、自然数(NATURAL) 正整数(POSITIVE) 自然数是整数的一个子类型,包括0和正整数;
正整数也是整数的一个子类型。 只能是正整数数据除定义类型外,有时还需
要定义约束范围。 INTEGER RANGE 100 DOWNTO 0 BIT_ VECTOR (3 DOWNTO 0) REAL RANGE 2.0 TO 30.0
信号与变量区别
信号赋值可以有延迟时间,变量赋值无时间延迟 信号除当前值外还有许多相关值,如历史信息等,变量
只有当前值 进程对信号敏感,对变量不敏感 信号可以是多个进程的全局信号,但变量只在定义它之
后的顺序域可见 信号可以看作硬件的一根连线,但变量无此对应关系 赋值的形式不同;声明的位置不同
TYPE current IS REAL RANGE -1E4 TO 1E4
VARIABLE A:CURRENT; A:=1E3;
A:=1E10;
用户自定义的数据类型
4、数组(ARRAY) 格式:TYPE 数据类型名 IS ARRAY 范围 OF 原数据类型名; 例:TYPE word IS ARRAY (1 TO 8) OF STD_LOGIC; TYPE word IS ARRAY (INTEGER 1 TO 8) OF STD_LOGIC; 数组常在总线、ROM和RAM中使用。
第三讲要点回顾
有效标识符 变量信号的区别 三种数据类型 三类属性 四种操作符
标识符
标识符(Identifiers)由英文字母“a”到“z”、 “A”到“Z”、数字“0”到“9”以及下划线 “_”组成 使用时注意: 1、VHDL不区分大小写 2、标识符一定要以字母开头 3、下划线不能放在结尾 4、下划线不能连用 5、保留字(关键字)不能做标识符
EDA技术和VHDL设计第4章 VHDL语言要素.ppt
10#235#
(十进制数表示,等于235)
2#1110_1011#
(二进制数表示,等于235)
8#353#
(八进制数表示,等于235)
16#EB#
(十六进制数表示,等于235)
16#E#E1
(十六进制数表示,等于16#E0#,等于
2#11100000#,等于224)
16#F.01#E2
(十六进制数表示,等于16#F01#,等于3841.00)
Data_ _bus Copper_ _ Return tx_clk
--非法标识符,不能含有多个下划线 --非法标识符,不能以下划线结束 --非法标识符,关键字不能用作标识符 --合法标识符
11
第4章 VHDL语言要素 VHDL93标准还支持扩展标识符,以反斜杠来界定,免
去了87标准中基本标识符的一些限制,如:可以以数字打头, 允许包含图形符号,允许使用VHDL保留字,区分字母大小 写等。扩展标识符举例:\entity\、\2chip\、\EDA\、\eda\、 \aa\\bb\。但目前仍有较多VHDL工具不支持扩展标识符,所 以本书仍以87标准为准。由于VHDL语言不区分大小写,在 书写时一定要养成良好的书写习惯。一般而言,应用关键词 时应大写,自行定义的标识符应小写。
2
第4章 VHDL语言要素 其中,数字间的下划线仅仅是为了提高文字的可读性,相当 于一个空的间隔符,没有其他意义,也不影响文字本身的数 值。 (2) 实数(Real)。实数也是十进制的数,但必须带有小数 点。它类似于数学上的实数,或称浮点数,表示范围是 1.0E38~1.0E38。实数的表达方式举例: 0.0,123.45,6.0,78.99E - 2( = 0.7899), 12_345.678_999(=12345.678999)
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语言要素
第4章 VHDL语言基础
4.2.4 操作符
与传统的程序设计语言一样,VHDL的各种表达式由操作数和操作 符组成。其中,操作数是各种运算的对象,而运算操作符则规定 运算的方式。VHDL中共有四类操作符:算术运算符、关系运算符、 逻辑运算符和符号运算符。 1.操作符的功能和使用操作数的数据类型 2.各种操作符的使用说明
4.1.4 库
在使用VHDL语言进行设计时,需要将别人或自己的设计成果汇集 在一个或几个库中,方便调用,以便提高设计效率。VHDL库就是 用于存放预定义好的数据类型、子程序等设计单元的集合体。 1.VHDL库 VHDL中的库大致可归纳为5种,分别为IEEE库、STD库、ASIC 矢量库、WORK库和用户定义库。
b:=3.0;
c:=d+e; 信号赋值语句的格式为: 信号名 <= 信号变量表达式;
例如,用户对信号“a”进行赋值,代码如下所示:
a<=b;
4.3.2 IF语句
句 Then 顺序语句
IF语句是一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语 句,其语句的格式有三种,分别如下所示: //第一种IF语句结构
[实体说明部分]; END[ENTITY]<实体名>;
1.GENERIC类属说明语句 2.PORT端口说明
4.1.2 结构体
设计单元中的结构体主要用来描述设计的内部结构或逻辑功能。 在设计中,设计人员常常将一个设计实体比喻成一个盒子,实体说 明可以被看作是一个“黑盒子”。通过它,只能了解其输入和输 出,无法知道盒子的内容。而结构体描述盒子内部的详细内容。 在VHDL语言中,一个结构体的具体格式,如下所示: ARCHITECTURE<结构体名>OF<实体名>IS [结构体说明部分]; BEGIN <并行处理语句>;
第4章 VHDL语言基础
设计实体
结构体1
结构体2
结构体3
。 。 。
结构体n
FPGA-CPLD原理及应用
结构体的语法
第4章 VHDL语言基础
architecture 结构体名称 of 实体名称 is [说明语句] ;
begin [(功能描述)语句];
end [architecture] 结构体名称;
注:同一实体的结构体不能同名。定义语句中的常 数、信号不能与实体中的端口同名。
equal: out std_logic ); end eqcomp4;
A[3..0] B[3..0]
equal
FPGA-CPLD原理及应用
端口声明
第4章 VHDL语言基础
确定输入、输出端口的数目和类型。
Port (端口名称{,端口名称}:端口模式
… 端口名称{,端口名称}:端口模式 );
数据类型; 数据类型
FPGA-CPLD原理及应用
VHDL组成
第4章 VHDL语言基础
库 包 实体
结构体
eqcomp4.vhd
--eqcomp4 is a four bit equality comparator
Library IEEE; use IEEE.std_logic_1164.all;
entity eqcomp4 is port(a, b:in std_logic_vector(3 downto 0);
FPGA-CPLD原理及应用
第4章 VHDL语言基础
计数器等效描述(out与buffer的区别)
FPGA-CPLD原理及应用
3、数据类型
第4章 VHDL语言基础
指端口上流动的数据表达格式,为预先定好的数据类型,如: bit、bit_vector、integer、std_logic、std_logic_vector 等。 例: entity m81 is port (a: in std_logic_vector(7 downto 0); sel: in std_logic_vector(2 downto 0); b:out bit ); end entity m81;
EDA第4章 VHDL基础文字规则与操作符(4.3-4.4)
第4章
VHDL基础
第4章
VHDL基础
变量数值的改变是通过变量赋值来实现的,其赋 值语句的语法格式如下: 目标变量名:=表达式; 如: VARIABLE A,B:BIT_VECTOR(0 TO 7); VARIABLE X,Y: REAL; X:=1.2; Y:=100.1+X; A:=“10101011”; A(7):=‘0’;
第4章
VHDL基础
• 常量、信号、变量的使用比较
• (1) 从硬件电路系统来看,常量相当于电路中的恒定 电平,如GND或VCC接口,而变量和信号则相当于组合 电路系统中门与门间的连接及其连线上的信号值。 • (2) 从行为仿真和VHDL语句功能上看,信号和变量的 区别主要表现在接受和保持信息的方式、信息保持与 传递的区域大小上。 • (3) 从综合后所对应的硬件电路结构来看,信号一般 将对应更多的硬件结构,但在许多情况下,信号和变 量并没有什么区别。 • (4) 虽然VHDL仿真器允许变量和信号设置初始值,但 在实际应用中,VHDL综合器并不会把这些信息综合进 去。
第4章
VHDL基础
5.段名
对应数组中某一段元素,是多个下标名的组合。表达形式: 标识符(表达式 方向 表达式) 方向----To 由低到高 DOWNTO 由高到低 如:signal a, z: bit_vector(0 to 7);-- 8位位矢量 z(0 to 3)<=a(4 to 7); --以段的方式进行赋值 z(4 to 7)<=a(0 to 3); --以段的方式进行赋值
VHDL语言要素 EDA技术与应用 教学PPT课件
标识符中首字母必须是英文字母。 标识符中末字母不能是下划线。 标识符中不允许出现两个连续的下划线。 标识符中不区分字母、数字的大小写。 VHDL语言中的关键保留字不能用作标识符。 VHDL语言中的分隔符由分号“;”构成。 VHDL语言中的注释符由双横线“--”构成。
合法标识符:
X<=15; Y<= x+10;
Halfsum <=“00001111”;
信号的赋值
SIGNAXL:te十m六p 进: S制TD_LOGIC_VECTOR (7 downto 0);
整体赋O值::十进制
temp <= “10101010”;
temp <= x”AA” ;
逐位赋值:
temp(7) <= ‘1’;
第4章 VHDL语言要素
• VHDL 的标识符 • VHDL 的数据对象 • VHDL 的数据类型 • VHDL 的运算操作符 • VHDL 的关键字 • EDA技术常用术语
4.1 标识符
标识符(identifiers): 可用来为设计实体、构造体、端口及
内部信号、变量、常量等参数命名,由英文字母、数字、下 划线组成。
Decoder_1 , FFT3 , Sig_N_8 , State0 , I2d_8le6
非法标识符:
_Decoder_1 2FFT, 74HC245 Sig_#N, CLR/RST Not-Ack, D10% RyY_RST_ data_ _BUS return , BLOCK
-- 起始为非英文字母 -- 起始为数字 -- 符号“#” “/”不能成为标识符的构成 -- 符号“-” “%”不能成为标识符的构成 -- 标识符的最后不能是下划线“_” -- 标识符中不能有双下划线 -- 标识符不能为关键字
第4章 VHDL基本语句与要素
4.1 VHDL的顺序语句
SEL<=0; --设置初始值 IF S1='1' THEN SEL<=SEL+1; ELSIF S2='1'THEN SEL<=SEL+2; ELSIF S3='1' THEN SEL<=SEL+4; ELSIF S4='1' THEN SEL<=SEL+8; ELSE NULL; --NULL空操作语句,表示什么都不做 END IF; Z1<='0';Z2 <='0'; Z3<='0'; Z4<='0'; CASE SEL IS WHEN 0=> Z1<='1'; --当SEL=0时选中 WHEN 1|3=> Z2<='1'; --当SEL为1或3时选中 WHEN 4 TO 7|2=> Z3<='1'; --当SEL为2、4、5、6或7时选中 WHEN OTHERS=> Z4<='1';--当SEL为8~15时选中 END CASE; END PROCESS; END ART;
CASE 条件表达式 IS
WHEN 选择值=>顺序语句1; WHEN 选择值=>顺序语句2;
…
【WHEN OTHERS=>顺序语句n]; END CASE;
4.1 VHDL的顺序语句
4.1.3 CASE语句 【例4.4】4-1多路选择器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MUX41 IS PORT(S1,S2:IN STD_LOGIC; A,B,C,D:IN STD_LOGIC; Z:OUT STD_LOGIC); END ENTITY MUX41; ARCHITECTURE ART OF MUX41 IS SIGNAL S:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN
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第4章基本数据类型与命令语句PPT教学课件
‘0’; 波形n-1 WHEN 条件n-1 ELSE
END priority; 波形n ;
2020/12/11
29
A并R行CH语IT句ECTURE1.p信r号io赋rit值y 语O句F 。example IS
(B3)EG选I择N 型 格式:WWIITTHH c表S达EL式ECSTELECT
2020/12/11
7
ENTITY bcdadder IS
port(op1,op2:IN integer range 0 to 9;
result:out integer range 0 to 31
);
END bcdadder;
ARCHITECTURE behavior OF bcdadder IS
BEGIN C<=A(2 DOWNTO 1); B<=A(3) & D & ‘1’;
END a;
2020/12/11
16
4.3 基本结构
组成
库
2020/12/11
17
程序包
--程序包说明部分 PACKAGE 程序包名 IS --说明部分 END<PAC-KA-G程E序><包程包序体包说名明> 部分
CONSTANT adjustnum:integer:=6;
signal binadd:integer range 0 to 18;
BEGIN
binadd<=op1+op2;
PROCESS(binadd)
variable tmp:integer:=0;
BEGIN
IF binadd>9 THEN
tmp:=adjustnum;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章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’表示。
4 位矢量数据类型(BIT_VECTOR)
位矢量是用双引号括起来的一组位数据,例如“010101”,通常用来表示数据总线。
5 布尔量数据类型(BOOLEAN)
布尔量数据类型也属于枚举类型,其值只有“TRUE”和“FALSE”两种状态,通常用来表示关系运算和关系运算结果。
6 字符数据类型(CHARACTER)
VHDL的字符数据类型表示ASCII码的128个字符,书写时要求用单引号括起来,并且要区分大小写。
例如:‘A’,‘a’等。
7 字符串数据类型(STRING)
字符串是双引号括起来的一串字符。
例如:“laksdklakld”
8 STD_LOGIC数据类型
与位数据类型相似,STD_LOGIC数据类型也属于枚举类型,但它的取值有下面的九种:‘U’初始值
‘X’不定
‘0’0
‘1’1
‘Z’高阻
‘W’弱信号不定
‘L’弱信号0
‘H’弱信号1
‘-’不可能情况。
9 STD_LOGIC_VECTOR数据类型
STD_LOGIC_VECTOR数据类型,表示的是用双引号括起来的一组STD_LOGIC数据“10101101”,通常用来表示数据总线。
由于STD_LOGIC的九种取值,更能反映电路的实际情况,所以在VHDL描述中一般用STD_LOGIC和STD_LOGIC_VECTOR,取代BIT和BIT_VECTOR等数据类型。
因为STD_LOGIC数据类型,是在IEEE库的STD_LOGIC_1164程序包中说明的,所以当在设计中要使用这种数据类型时,必须在VHDL的库、程序包说明语区,加入下列库、程序包说明语句:
[例3.7]库、程序包说明举例
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
4.3 VHDL语言的操作符和表达式
VHDL中大量的设计思想是用表达式配合实现的。
与其他高级软件编程语言相似,VHDL的表达式由操作数和操作符组成。
操作数由前面介绍的具有确定数据类型的数据对象担任。
操作符用来连接操作数,以完成所要求的数据的处理和转换。
VHDL具有丰富的预定义操作符,由这些操作符可以完成各种形式的表达式的功能。
预定义操作符可分为四种类型:算术操作符,关系操作符,逻辑操作符和连接操作符。
下面分别介绍四种类型的操作符和对应的简单的表达式,关于表达式的综合表示形式将在后面的具体实例中进行介绍。
1 逻辑操作符和逻辑表达式
逻辑操作符在逻辑表达式中,用来完成逻辑类型数据对象的逻辑操作。
VHDL的逻辑操作符如表3.2所示。
表3.2 逻辑操作符
[例3.8]简单逻辑表达式举例
A and B
not Z
注意,逻辑操作符左右的数据类型必须相同
2 算数操作符和算数表达式
VHDL提供的完成算数运算的操作符如表3.3所示。
表3.3 算数操作符
[例3.9]简单算数表达式举例
A +
B –C
3 关系操作符和关系表达式
关系操作符在关系表达式中,用于进行相同数据类型数据对象间的比较,关系表达式的结果是布尔类型,VHDL提供的关系操作符如表3.4所示。
表3.4 关系操作符
[例3.10]简单关系表达举例
Y >= G
注意,小于等于符号和信号赋值符号的形式完全相同,只能从程序上下文中进行区别。
4 并置操作符和并置表达式
VHDL提供的并置操作符是”&”。
它主要用来将普通操作数或数组组合起来,以形成新的操作数。
例如”HE”&”LLO”的结果为”HELLO”;‘0’& …1‟ & “010110”的结果为”01010110”。