EDA技术与VHDL设计 第四章 VHDL语言要素 (一)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
: BIT_VECTOR := "010100"; --声明常量 fbus 为位矢量类型
wenku.baidu.com
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间传递信息。需要注 意的是,全程变量也不能作为进程的敏感参数,并且可能导致 一些不确定性,使用全程变量必须小心。
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” --单比特赋值
3
第4章 VHDL语言要素
(3) 以数制基数表示的格式。用这种方式表示的数由五部 分组成:第一部分,基数,用十进制数表明所用数制;第二部 分,数制隔离符号“#”;第三部分,所要表达的数;第四部 分,指数隔离符号“#”;第五部分,用十进制数表示的指数, 如果这一部分为0可以省去不写。以数制基数表示的文字表达 方式举例:
10#235# 2#1110_1011# 8#353# 16#EB# 16#E#E1 16#F.01#E2 (十进制数表示,等于 235) (二进制数表示,等于 235) (八进制数表示,等于 235) (十六进制数表示,等于 235) (十六进制数表示,等于 16#E0#,等于 2#11100000#,等于 224) (十六进制数表示,等于 16#F01#,等于 3841.00)
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) VHDL定义的保留字或关键词,不能用作标识符。 (6) VHDL中的注释文字一律由两个连续的连接线“--”开 始,可以出现在任一语句后面,也可以出现在独立行。
10
第4章 VHDL语言要素
分析下面标识符的合法性:
_decoder 3dop large#number sig_N state0 NOT-ACK Data_ _bus Copper_ _ Return tx_clk --非法标识符,起始不能是非英文字母 --非法标识符,起始不能是非英文字母 –非法标识符, “#”不能成为标识符的构成 --合法标识符 --合法标识符 --非法标识符, “-”不能成为标识符的构成 --非法标识符,不能含有多个下划线 --非法标识符,不能以下划线结束 --非法标识符,关键字不能用作标识符 --合法标识符
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;
括正整数、负整数和零,表示范围是-(231-1)~(231-1),即 -2 147 483 647~2 147 483 647。整数的表达方式举例:
1,234,567E2(= 56700),12_345_678(=12 345 678)
其中,数字间的下划线仅仅是为了提高文字的可读性,相当于 一个空的间隔符,没有其他意义,也不影响文字本身的数值。
4
第4章 VHDL语言要素
(4) 物理文字量。物理文字量包括时间、电阻、电流等, 但此类文字综合器不能接受,多用于仿真。物理文字量的表达
方式举例:
55 ns,177 Ω,23 m 它一般由整数和单位两部分组成,整数与单位间至少留一 个空格。
5
第4章 VHDL语言要素
2. 字符串型 字符是用单引号引起来的ASCII字符,可以是数值,也可 以是符号或字母,如 ‘A’、 ‘8’、 ‘a’、 ‘-’。字符 串是字符的一维数组,必须使用双引号引起来。VHDL中有两 种字符串:文字字符串和数位字符串。
B“10001110” --二进制数组,数组长度8,表达正确
“1000_1110” 线 “10001110” "1AB" --表达正确 --表述错误,除二进制外,八进制和十六进 --表达错误,如果省去B,则不能加下划
制不能省去基数符
8
第4章 VHDL语言要素
4.1.2 标识符 VHDL中的标识符可以是常量、变量、信号、端口、子程
L15 END bhv; L16 -----------------------------------------------------------------------------------------------------------------
20
第4章 VHDL语言要素
4.2.3 信号 信号是电路内部硬件实体相互连接的抽象表示,可以实现 进程之间的通信。信号声明的格式如下: SIGNAL 信号名 : 数据类型 [:=初始值];
串中的每一位表示一个BIT;O代表八进制基数符号,字符串
中的每一位代表一个八进制数,即3位BIT的二进制数;X代表 十六进制基数符号,字符串中的每一位代表一个十六进制数,
即一个4位的二进制数。
7
第4章 VHDL语言要素
分析下面表达方式的正确性: B“1000_1110” --二进制数组,数组长度8,表达正确
序或参数的名称。使用标识符要遵守一定的法则,这不仅是对
电子系统设计工程师的一个约束,同时也为各种EDA工具提供 标准的书写规范,使之在综合仿真过程中不产生歧义,易于仿 真。VHDL中的标识符分为基本标识符和扩展标识符两种。
9
第4章 VHDL语言要素
基本标识符的规则如下: (1) 标识符由字母(A~Z,a~z)、数字(0~9)和下划线( _ ) 组成。 (2) 任何标识符必须以英文字母开头。 (3) 不允许出现多个连续的下划线,只能是单一下划线,
22
第4章 VHDL语言要素
信号的使用需要注意以下几个要点: (1) 信号的声明范围是程序包、实体和结构体。信号不能 在进程和子程序中声明,但可以使用。 (2) 与常量相似,信号也具有可视性规则。在程序包中声 明的信号,对于所有调用此程序包的设计实体都可见;在实体
13
第4章 VHDL语言要素
4.2.1 常量 常量是指在设计描述中不会变化的值。常量的使用主要是 为了使代码更容易阅读和修改。在VHDL描述中,一般用常量 名代替数值。常量是一个恒定不变的值,一旦作了数据类型和 赋值定义后,在代码中就不能再改变,因而具有全局意义。常
量声明的格式如下:
CONSTANT 常量名 :数据类型 := 取值;
第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)。整数是十进制数,与算数整数相似,包
(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,字符
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
14
第4章 VHDL语言要素
【例 4-1】
CONSTANT width_s : INTEGER := 8; CONSTANT delay CONSTANT fbus : TIME := 25ns; --声明常量 width_s,数据类型为整型,值为 8 --声明常量 dealy 作为延时时间 25 ns
17
第4章 VHDL语言要素
需要注意的是,赋值语句中的表达式必须与目标变量具有 相同的数据类型。变量在使用时还需注意以下几个要点: (1)变量是一个局部量,只用于进程和子程序。变量不能将 信息带出对它作定义的设计单元。 (2)变量的赋值是立即发生的,不存在任何延时的行为。
(3)VHDL语言规则不支持变量附加延时语句。
11
第4章 VHDL语言要素
12
第4章 VHDL语言要素
4.2 数 据 对 象
在VHDL中,凡是可以赋予一个值的客体称为数据对象。
数据对象是数据类型的载体,可以把它看做一个容器,能够接 收不同数据类型的赋值。常用的数据对象有:常量 (CONSTANT)、变量(VARIABLE)和信号(SIGNAL)。
【例 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,数据类型为标准逻辑矢