EDA技术与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 输出 右图所示为并置运算符操作的电路示意。
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’表示。
VHDL and PLD 第04章 VHDL语言要素(2013年10月)
常数(CONSTANT) 常数的定义和设置主要是为了使设计实体中的常数更容易阅读 和修改。 在程序中,常量是一个恒定不变的值。一旦作了数据类型和赋 值定义后 在程序中不能再改变 ,因而具有全局性意义。 其形式如下: CONSTANT 常数名:数据类型 := 表达式; 例如 CONSTANT fbus : BIT_VECTOR := "010115" ;--位矢数据类型 CONSTANT Vcc : REAL := 5.0 ; --实数数据类型 CONSTANT dely : TIME := 25ns ; --时间数据类型
第4章 VHDL语言要素
信号(SIGNAL) 信号是描述硬件系统的基本数据对象,它类似于连接 线。信号可以作为设计实体中并行语句模块间的信息 交流通道(交流来自顺序语句结构中的信息)。在 VHDL 中,信号及其相关的信号赋值语句、决断函数、延时 语句等很好地描述了硬件系统的许多基本特征。如硬 件系统运行的并行性、信号传输过程中的惯性延迟特 性、多驱动源的总线行为等。 信号定义格式: SIGNAL 信号名:数据类型 := 初始值;
变量(VARIABLE) 在 VHDL 语法规则中,变量是一个局部量,只能在进 程和子程序中使用。变量不能将信息带出对它作出定 义的当前设计单元,变量的赋值是一种理想化的数据 传输 是立即发生,不存在任何延时的行为。 定义变量的语法格式如下 VARIABLE 变量名 数据类型 := 初始值 ; 例如变量定义语句 VARIABLE a : INTEGER ; VARIABLE b, c : INTEGER := 2 ; VARIABLE d : STD_LOGIC ;
第4章 VHDL语言要素
EDA技术及应用 第四章 VHDL设计初步PPT课件
4.1 多路选择器的VHDL描述
1. 2选1多路选择器的示意图和真值表
a 0y b1
s
当s=0时,y=a 当s=1时,y=b
absy ax0a xb1b
4
4.1 多路选择器的VHDL描述
2. 2选1多路选择器实现-原理图形输入法
01
10
a0
yy==ab
01
0b
5
4.1 多路选择器的VHDL描述
yasbs
19
4.1 多路选择器的VHDL描述
6. 各种表达式的比较---条件赋值表达式
y <= a WHEN s1=‘0’ ELSE b;
赋值目标 <= 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE 表达式 ;
20
4.1 多路选择器的VHDL描述
14
_ 4.1 多路选择器的VHDL描述 4. 思考 y = ab + c
思考1:画出真值表
abcy
xx11
0 x 0 _0
1b0b 15
_ 4.1 多路选择器的VHDL描述 4. 思考 y = ab + c
思考2:使用原理图方式实现上式功能
16
_ 4.1 多路选择器的VHDL描述 4. 思考 y = ab + c
描述结构体的关键词。
功能描述语句:并行语句,顺序语句
并行语句:WHEN_ELSE,逻辑操作赋值
顺序语句:IF_THEN_ELSE
13
4.1 多路选择器的VHDL描述
3. 相关语句结构和语法-文件名称 文件名称建议和实体名称相同 使用VHDL语句编写:后缀是.vhd 使用Verilog HDL语句编写:后缀是.v 使用原理图输入设计:后缀是.gdf
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
第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端口
用于定义模块所有的输入/输出信号,相当于定义一个 模块符号
EDA课件4
信号与变量的区别(1)
architecture rtl of start is signal count : integer range 0 to 7; begin process(clk) begin if (clk'event and clk='1') then count <= count + 1; if(count=0) then carryout <= '1'; else carryout <= '0'; end if; end if; end process; end rtl; architecture rtl of start is begin process(clk) variable count : integer range 0 to 7; begin if (clk'event and clk='1') then count := count + 1; if(count=0) then carryout <= '1'; else carryout <= '0'; end if; end if; end process; end rtl;
该语句定义了一个名为“data”的整数常数,并且赋来自初值50。2.变量 .
只能在Process、Function和Procedure中定义,并只在其内部 有效。它是一个局部量,在仿真过程中执行到变量赋值语句后, 变量被即时赋值。临时数据,没有物理意义。 变量说明语句的一般格式如下: VARIABLE变量名:数据类型:=初值表达式; 如:“VARIABLE t,m:INTEGER ; ”语句表示定义了两个名为t和
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)
EDA技术与数字系统设计第4章 VHDL语言基础
第4章 VHDL语言基础
端口模式用来说明数据、信号通过该端口的方向。 VHDL提供了以下四种端口模式:
(1) IN:输入,只读模式。该模式主要用于输入控制 信号、地址、数据和时钟等。
(2) OUT:输出,单向赋值模式。该模式主要用于输 出控制信号、地址和数据等。
图4.1 VHDL程序的基本结构示意图
第4章 VHDL语言基础
从例4.1的描述可以看出,一个最基本的VHDL程序 由三部分组成:库说明(LIBRARY)、实体说明 (ENTITY)和结构体说明(ARCHITECTURE),其它的结 构层次可根据需要选用。一个程序只能有一个实体, 但可以有多个结构体。
库名是一系列标识符,这一语句表示打开了以此库 名命名的库,以便后面的设计实体可以利用其中的程 序包。如例4.1中的“LIBRARY IEEE; ”表示打开 IEEE库。
第4章 VHDL语言基础
1. 库的种类 VHDL语言中的库分为设计库和资源库两类。设计 库不需要使用LIBRARY和USE子句声明;资源库是标 准模块和常规元件存放的库,使用之前要声明。程序 设计中常用的库有以下四种。
第4章 VHDL语言基础
4.2.2 结构体(ARCHITECTURE) 结构体是设计实体中的一个组成单元,用于描述
设计实体的内部结构和实体端口间的逻辑关系。结构 体对基本设计单元的输入输出关系可以用行为 (behavior)描述、数据流(dataflow)描述、结构(structure) 描述和混合(mixture)描述四种方式进行描述。
实体语句部分;] END [ENTITY] 实体名;
第4章 VHDL语言基础
2. 类属(GENERIC)说明 类属参量常以一种说明的形式放在实体或块结构体前 的说明部分。类属为实体和外部环境通信提供一种静态 信息通道,尤其是用来规定实体端口的大小、设计实体 的物理特性和结构体中的总线宽度等等。类属与常数不 同,常数只能从设计实体内部得到赋值,并且不能再改 变,而类属的值可以由设计实体外部提供。
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语言要素
EDA技术与VHDL设计 第四章 VHDL语言要输(二)
第 4 章 VHDL语言要素
4.1 VHDL文字规则
4.2 数据对象
4.3 VHDL的数据类型 4.4 VHDL操作符 4.5 属性 习题
1
第4章 VHDL语言要素
4.3 VHDL的数据类型
VHDL是硬件设计语言,是一种类型概念很强的语言。任 何的数据对象、函数或参数在声明时必须要声明数据类型,并 且只能携带或返回该类型的值。 数据类型一般可以分为两大类:可以从现成程序包中随时 获得的预定义数据类型和用户自定义数据类型。
19
第4章 VHDL语言要素
(6) SMALL_INT数据类型。SMALL_INT数据类型是 INTEGER数据类型的子类型,按照在std_logic_arith程序包中 定义的源代码,它将INTEGER约束到只含有2个值。程序包 std_logic_arith中声明SMALL_INT的源代码如下: SUBTYPE SMALL_INT IS INTEGER RANGE 0 TO 1;
18
第4章 VHDL语言要素
(5)SIGNED数据类型。SIGNED数据类型表示一个有符号 的数,最高位是符号位,一般用“0”表示正,“1”表示负, 综合器将其解释为补码。例4-19是SIGNED数据类型的示例。
【例 4-19】
ARCHITECTURE bhv OF ex IS SIGNAL BEGIN PROCESS(c) VARIABLE v1 : SIGNED(0 TO 3); --声明变量 v1 为有符号数 BEGIN v1 := "0101"; s1 <= "1011"; … --最高位 v1(0)是符号位,v1=+5 --最高位 s1(3)是符号位,s1=-5 s1 : SIGNED(3 TO 0); --声明信号 s1 为有符号数
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
-- 起始为非英文字母 -- 起始为数字 -- 符号“#” “/”不能成为标识符的构成 -- 符号“-” “%”不能成为标识符的构成 -- 标识符的最后不能是下划线“_” -- 标识符中不能有双下划线 -- 标识符不能为关键字
VHDL语言要素课件
常量
常量是一个在仿真/综合过程中固定不变 的值,可通过标识符来引用。与C语言中的 常量的意义完全相同。
使用常量的主要目的是增加设计文件的 可读性和可维护性。
常量是全局量,在结构体、程序包说明、 实体说明、过程说明、函数调用说明和进程 说明中使用
VHDL语言要素
常量
常数的描述格式: CONSTANT 常数名:数据类型:=表达式 例: CONSTANT Vcc: REAL:=5.0; CONSTANT DALY: TIME:=100ns;
VHDL语言要素
信号
信号是全局量,在实体说明、结构体描 述和程序包说明中使用。SIGNAL用于声明 内部信号,信号除了没有方向的概念以外几 乎和端口概念一致。
作用:在元件之间起互联,代表电路内 部各元件之间的连接线,可以赋值给外部信 号。
VHDL语言要素
信号
信号的描述格式: SIGNAL 信号名:数据类型 [:=初始值]
VHDL语言要素
用户自定义的数据类型
2、整数(INTEGER) 格式:TYPE 数据类型名 IS 数据类型定义 约束范围 例 TYPE digit IS INTEGER RANGE 0 TO 9
VARIABLE A:DIGIT; A:=5;
A:=28;
VHDL语言要素
用户自定义的数据类型
3、实数(REAL) 格式:TYPE 数据类型名 IS 数据类型定义 约 束范围
VHDL语言要素
记录(RECODE) 类型
例:CONSTANT LEN:integer:=100;
TYPE array logic IS ARRAY (99 downto 0)OF STD_LOGIC_VECTOR(7 DOWNTO 0)
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’;
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语言要素
⒋ 信号和变量的区别 ⑴ 信号用于电路中的信号连线,变量用于进程中局部数据存储单元; ⑵ 信号的使用和定义范围在结构体、程序包和实体中,不能在进程、 函数和子程序中使用,而变量只能在进程、函数和子程序中使用;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
17
第4章 VHDL语言要素
需要注意的是,赋值语句中的表达式必须与目标变量具有 相同的数据类型。变量在使用时还需注意以下几个要点: (1)变量是一个局部量,只用于进程和子程序。变量不能将 信息带出对它作定义的设计单元。 (2)变量的赋值是立即发生的,不存在任何延时的行为。
(3)VHDL语言规则不支持变量附加延时语句。
2
第4章 VHDL语言要素
(2) 实数(Real)。实数也是十进制的数,但必须带有小数点。 它类似于数学上的实数,或称浮点数,表示范围是-1.0E38~ 1.0E38。实数的表达方式举例: 0.0,123.45,6.0,78.99E-2(=0.7899), (=12345.678999) 12_345.678_999
16
第4章 VHDL语言要素
虽然变量可以在声明时赋予初始值,但综合器并不支持初 始值的设置,使用时将忽略。初始值仅对仿真器有效。当变量 在声明语句中没有赋予初值时,可以通过变量赋值语句在使用 时对其赋值。变量赋值语句的格式如下: 目标变量名 := 表达式;
【例 4-3】
VARIABLE x,y,z : STD_LOGIC_VECTOR(7 DOWNTO 0); --声明变量 x、y、z x := "01001010"; y := "00010001"; z := x(0 TO 3) & y(4 TO 7);
【例 4-5】
SIGNAL sys_clk :BIT := '0'; SIGNAL temp --声明位型的信号 sys_clk,初始值为低电平 量,没有设置初始值 SIGNAL s1,s2 :STD_LOGIC; --声明了两个 STD_LOGIC 类型的信号 s1 和 s2 :STD_LOGIC_VECTOR(7 DOWNTO 0); --信号 temp,数据类型为标准逻辑矢
14
第4章 VHDL语言要素
【例 4-1】
CONSTANT width_s : INTEGER := 8; CONSTANT delay CONSTANT fbus : TIME := 25ns; --声明常量 width_s,数据类型为整型,值为 8 --声明常量 dealy 作为延时时间 25 ns
序或参数的名称。使用标识符要遵守一定的法则,这不仅是对
电子系统设计工程师的一个约束,同时也为各种EDA工具提供 标准的书写规范,使之在综合仿真过程中不产生歧义,易于仿 真。VHDL中的标识符分为基本标识符和扩展标识符两种。
9
第4章 VHDL语言要素
基本标识符的规则如下: (1) 标识符由字母(A~Z,a~z)、数字(0~9)和下划线( _ ) 组成。 (2) 任何标识符必须以英文字母开头。 (3) 不允许出现多个连续的下划线,只能是单一下划线,
括正整数、负整数和零,表示范围是-(231-1)~(231-1),即 -2 147 483 647~2 147 483 647。整数的表达方式举例:
1,234,567E2(= 56700),12_345_678(=12 345 678)
其中,数字间的下划线仅仅是为了提高文字的可读性,相当于 一个空的间隔符,没有其他意义,也不影响文字本身的数值。
22
第4章 VHDL语言要素
信号的使用需要注意以下几个要点: (1) 信号的声明范围是程序包、实体和结构体。信号不能 在进程和子程序中声明,但可以使用。 (2) 与常量相似,信号也具有可视性规则。在程序包中声 明的信号,对于所有调用此程序包的设计实体都可见;在实体
3
第4章 VHDL语言要素
(3) 以数制基数表示的格式。用这种方式表示的数由五部 分组成:第一部分,基数,用十进制数表明所用数制;第二部 分,数制隔离符号“#”;第三部分,所要表达的数;第四部 分,指数隔离符号“#”;第五部分,用十进制数表示的指数, 如果这一部分为0可以省去不写。以数制基数表示的文字表达 方式举例:
: BIT_VECTOR := "010100"; --声明常量 fbus 为位矢量类型
15
第4章 VHDL语言要素
4.2.2 在 进程和子程序中使用。变量声明的格式如下: VARIABLE 变量名 :数据类型 [:=初始值];
【例 4-2】
VARIABLE count: INTEGER RANGE 0 TO 99 := 0; --声明变量 count,数据类型为整型,初值为 0 VARIABLE result : STD_LOGIC := '1'; --变量 result 为标准逻辑位数据类型,初值为‘1’ 类型,没有定义初值 VARIABLE x,y,z : STD_LOGIC_VECTOR(7 DOWNTO 0); --声明变量 x、y、z 为标准逻辑矢量数据
(4)变量常用在实现某种运算的赋值语句中。变量赋值和初 始化赋值都使用符号“:=”。 (5)变量不能用于硬件连线。
18
第4章 VHDL语言要素
在VHDL 93标准中对变量的类型作了增加,引入了全程变 量,可以把值传送到进程外部,参见例4-4。从分析可知,定 义了一个全程变量v,用于在进程P0和P1间传递信息。需要注 意的是,全程变量也不能作为进程的敏感参数,并且可能导致 一些不确定性,使用全程变量必须小心。
第4章 VHDL语言要素
第 4 章 VHDL语言要素
4.1 VHDL文字规则
4.2 数据对象
4.3 VHDL的数据类型 4.4 VHDL操作符 4.5 属性 习题
1
第4章 VHDL语言要素
4.1 VHDL文字规则
4.1.1 数值型文字
1.数字型 数字型文字有多种表达方式,列举如下:
(1) 整数(Integer)。整数是十进制数,与算数整数相似,包
4
第4章 VHDL语言要素
(4) 物理文字量。物理文字量包括时间、电阻、电流等, 但此类文字综合器不能接受,多用于仿真。物理文字量的表达
方式举例:
55 ns,177 Ω,23 m 它一般由整数和单位两部分组成,整数与单位间至少留一 个空格。
5
第4章 VHDL语言要素
2. 字符串型 字符是用单引号引起来的ASCII字符,可以是数值,也可 以是符号或字母,如 ‘A’、 ‘8’、 ‘a’、 ‘-’。字符 串是字符的一维数组,必须使用双引号引起来。VHDL中有两 种字符串:文字字符串和数位字符串。
且不能以下划线结束。
(4) 标识符不区分英文字母大小写。 (5) VHDL定义的保留字或关键词,不能用作标识符。 (6) VHDL中的注释文字一律由两个连续的连接线“--”开 始,可以出现在任一语句后面,也可以出现在独立行。
10
第4章 VHDL语言要素
分析下面标识符的合法性:
_decoder 3dop large#number sig_N state0 NOT-ACK Data_ _bus Copper_ _ Return tx_clk --非法标识符,起始不能是非英文字母 --非法标识符,起始不能是非英文字母 –非法标识符, “#”不能成为标识符的构成 --合法标识符 --合法标识符 --非法标识符, “-”不能成为标识符的构成 --非法标识符,不能含有多个下划线 --非法标识符,不能以下划线结束 --非法标识符,关键字不能用作标识符 --合法标识符
(1) 文字字符串。文字字符串即用双引号引起来的一串文
字,举例: "STRING","Both A and B equal to 0"
6
第4章 VHDL语言要素
(2) 数位字符串。数位字符串即位矢量,用双引号引起来 的一维位(BIT,VHDL预定义数据类型)数据,采用基数符加字 符串的表达形式,举例: B“1_1101_0010” (二进制数组,位矢量长度是9) O“34”(八进制数组,位矢量长度是6,相当于 B“011100”) X"1AB" (十六进制数组,位矢量长度是12) 其中,B代表二进制基数符号,表示二进制数位0或者1,字符
串中的每一位表示一个BIT;O代表八进制基数符号,字符串
中的每一位代表一个八进制数,即3位BIT的二进制数;X代表 十六进制基数符号,字符串中的每一位代表一个十六进制数,
即一个4位的二进制数。
7
第4章 VHDL语言要素
分析下面表达方式的正确性: B“1000_1110” --二进制数组,数组长度8,表达正确
21
第4章 VHDL语言要素
与变量相同,对信号初始值的设置也不是必须的,并且仅 在仿真中有效。一般在设计中对信号进行赋值,信号赋值语句 的格式如下: 目标信号名<=表达式;
【例 4-6】
SIGNAL a,b,c,d : STD_LOGIC_VECTOR(7 DOWNTO 0); a <= "10101010"; b <= X"AA"; c(7 DOWNTO 4) <= "1100"; d(7) <= '1'; --以二进制形式将 8 个比特一次赋值完毕 --以十六进制形式赋值,在 VHDL 97 标准中定义 --比特分割,信号 c 的高 4 位被赋值“1100” --单比特赋值
19
第4章 VHDL语言要素
【例 4-4】
L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12 L13 L14 ------------------------------------------------------------------------------------------------------------------------ARCHITECTURE bhv OF example IS SHARED VARIABLE v : STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN P0 : PROCESS(a,b) BEGIN v := a & b; END PROCESS p0; p1 : PROCESS(c) BEGIN IF v = "11" THEN y <= c; ELSE y <= "0000"; END IF; END PROCESS p1;