EDA技术 第05讲 VHDL02元素
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HYIT
28
4. 位数据类型(bit)
在IEEE1076中定义
type bit is (‘0’,‘1’);
只有两种取值: ‘0’,‘1’ 关键字: bit
如:signal z: bit ;
HYIT
29
在数字系统中,信号通常用一个位来表示。位 值的表示方法是:用字符‘0’或者‘1’(将值放在单 引号内)表示。‘1’和‘0’仅表示一个位的两种取值, 与整数中的l和0不同,但可以用转换函数进行转换。 位数据可以用来描述数字系统中信号的状态。
HYIT
36பைடு நூலகம்
10. 自然数(Natural)和正整数(Positive)
自然数和正整数都是整数的子类。
NATURAL类数据为取0和0以上的正整数; POSITIVE 则只能为正整数。
HYIT
37
以上10种数据类型是VHDL语言中标准的数据类型, 在编程时可以直接引用。如果用户需要使用这10种以外的 数据类型,必须进行自定义。
A, 3fft ,fft, if, old_, hell*, jfaj-2, signal, Abcd
HYIT
6
注释
以‚--”开始直到本行结束的一段文字; 注释不会被编译; 注释起到对程序说明和解释。程序应该包 括充分的注释;
HYIT
7
2
数据对象
数据 对象
常量CONSTANT
变量VARIABLE 信号SIGNAL
信号的物理意义:表示电路中的一条连线。
HYIT
13
信号说明的一般格式: SIGNAL 信号名[,信号名]:数据类型 [:=表达式];
例如: SIGNAL address_bus:std_logic_vector(7 DOWNTO 0); SIGNAL reset:std_logic:=’1’;
HYIT
19
标准程序包STANDARD定义的数据类型
整数(Integer) 实数(Real) 位(Bit) 位矢量(Bit_vector) 布尔量(Boolean) 字符(Character) 字符串(String) 32位带符号整数 带符号浮点数,在-1.0E+38~+1.0E+38之间 字符‘0’或‘1’ 双引号括起来的二进制位数据 逻辑值TRUE或FALSE 单引号括起来的ASCII字符 双引号括起来的一串ASCII字符,字符串中 要包含双引号时,必须双写该双引号 时间(Time) 表示时间的数据和单位 非负整数(Natural)和正整数(Positive) 错误等级(Severity 表示系统的状态,有NOTE(注意)、 Level) WARNING(警告)ERROR(错误)和 FAILURE(失败)四种状态 20
HYIT
16
信号和变量的区别
PROCESS(A,B,C,D) BEGIN D <= A; X <= B + D; D <= C; Y <= B + D; END PROCESS 结果:X<=B+C; Y<=B+C; PROCESS(A,B,C) VARIABLE D: integer range 0 TO 63); BEGIN D := A; X <= B + D; D := C; Y <= B + D; END PROCESS 结果:X<=B+A; Y<=B+C;
HYIT
38
任何一个信号和变量的赋值均需要落入给定的约束区间 中,也就是要落入有效数值的范围中。约束区间的说明通 常跟在数据类型说明的后面。 例如: a:IN INTEGER range 0 to 9; d:IN bit_vector (7 downto 0); c:OUT CHARACTER range ‘A’ to ‘Z’; 注意:约束区间可以不写,由综合器自动生成。但是合 理地定义约束区间可以节省器件的资源,最优化程度高。 所以尽量定义好约束区间!
例如: VARIABLE A:INTEGER; --定义A为整数型变量 VARIABLE B,C:INTEGER:=2; --定义B和C为整型变量,初始值为2
HYIT
12
信号(Signal)
信号是内部硬件连线的抽象表示,除了没有方向
说明之外,它几乎与端口(Port)的概念是一致的。端口 实际上是一种隐式定义的信号。
HYIT
9
定义常量的用途:增加可读性和方便修改。 可视性,即有效范围,取决于被定义的位置。
在程序包中定义的常量:可以用在调用此程序包的所有设计
实体中;定义在设计实体中的常量,其有效范围为这个实体定义 的所有的结构体;定义在某一结构体中的常量,则只能用于此结 构体;定义在结构体的某一单元的常量,如一个进程中,则这个 常量只能用在这一进程中。
HYIT
s1 <= s2 after 10ns;
15
信号和变量的区别
信号赋值是有延时的,且在进程中时,在进程结 束时才赋值;而变量的赋值没有延时;信号的代入符 号(<=)和变量的赋值符号(:=)不同。 变量的值可以传给信号,但信号不能传给变量。 信号除当前值外,还有历史信息等其他信息;变 量只有当前信息。 进程只对信号敏感,不对变量敏感。 信号可以是多个进程的全局信号,变量只能在一 个进程范围内。 信号是硬件连线的抽象描述,变量无实际的对应 关系,通常用于计算。
HYIT
10
变量(VARIABLE)
用于对暂时的数据进行局部的存储,是一个局部
变量。只能在进程和子程序中使用。
变量的物理意义:主要用于局部数据的暂时存储
,是一种载体。
变量的赋值是一种理想化的数据传输,是立即发
生,不存在任何延时的行为。格式为:
目标变量名 := 表达式;
HYIT
11
定义变量的语法格式如下: VARIABLE 变量名:数据类型:=初始值;
HYIT
30
5. 位矢量(Bit_vector)
常用于表示总线状态;
关键字: Bit_vector
signal a,b,c: bit_vector(7 downto 0); 二、十六、八 进制基数符号 分别为B、X、 O a <= ”01010110”; X”C9”; B”1111_0110”;
HYIT
23
尽管整数值在电子系统中可能是用一系列二进制位 值来表示的;但是整数不能看做是位矢量,也不能按位 来访问,对整数不能用逻辑操作符。当需要进行位操作 时,必须用转换函数,将整数转换为位矢量。在电子系 统的开发过程中,整数可以作为对信号总线状态的一种 抽象手段,用来准确地表示总线的某一种状态。
2
HYIT
内容提要
1 2 3 词法和标识符 数据对象 数据类型 运算符
3
4
HYIT
1
词法和标识符
短标识符
VHDL-93接收了VHDL-87关于标识符的全部标准, VHDL-87标准中的标识符称为短标识符,VHDL-93 标准中的标识符称为扩展标识符。 短标识符的组成:英文字母、数字、下划线 短标识符的开始:必须以英文字母开始 短标识符的最后一个字符不能是下划线 下划线不能连续出现 短标识符不敏感大小写 不能采用保留字作为短标识符
HYIT
32
7. 字符串(STRING)
关键字: STRING
字符串是由双引号括起来的一个字符序列,也称字 符矢量或字符串数组,常用于程序的提示和说明。
例如:‚time range”
HYIT
33
8. 时间(Time)
关键字: Time
HYIT
34
时间是一个物理量数据。完整的时间量数据应包含整 数和单位两部分,而且整数和单位之间至少应留一个空格 的位置。 例如:2 min、100 ns 在包集合Standard中给出时间的预定义,其单位为:fs、 ps、ns、us、ms、s、min、h。在系统仿真时,时间数据 特别重要,用它可以表示信号延时,从而使模型系统能更 逼近实际系统的运行环境。 注意:时间量只对仿真器起作用,综合器将它忽略!
HYIT
24
2.实数类型(Real)
实数的最小范围
1.0E+38至+1.0E+38 关键字:real
例如:variable a,b,c,d:real;
a:=12.0; b:=3.14_159;
HYIT
c:=2.0E5; d:=1.5e-6;
25
在进行算法研究或实验时,作为对硬件方案的抽象手 段,常常用到实数的四则运算。 实数有正负,书写时一定要有小数点。 所有的综合器都不支持实数,但部分仿真器支持。 MaxPlus II不支持!
--对c的赋值实际是123456,
HYIT
21
数制表示法
间隔符
10 # 97 # E2
数制进 位基数
数值
指数 部分
22
HYIT
Signal a,b,c,d,e: integer range 0 to 100000; A<=10#97#E2; --9700 B<=16#FF#;--等于255 C<=2#1111_1110#;--254 D<=8#175#; --等于125 E<=16#E#E1;--等于224
第五讲 VHDL 之二
HYIT
1
第四章 硬件描述语言VHDL
4.1 硬件描述语言概述 4.2 VHDL程序基本结构 4.3 VHDL的基本数据类型及运算操作符 4.4 VHDL中的顺序语句 4.5 VHDL中的并行语句 4.6 程序包与库 4.7 类属 4.8 子程序 4.9 基本逻辑电路设计 4.10 状态机的VHDL设计
HYIT
8
常量(CONSTANT)
常量是一个恒定不变的数据对象。
常量的定义形式如下: CONSTANT 常量名:数据类型﹕=表达式;
例如: CONSTANT FBUS﹕BIT_VECTOR﹕=“010111”; CONSTANT VCC﹕REAL﹕=5.0; CONSTANT DELY﹕TIME﹕=25ns;
HYIT
1.整数类型(Integer)
VHDL标准规定整数的最小范围为:
(2311)至(2311)
关键字:integer
例如:
signal a,b,c,d,e:integer;
数字中的下划 线只是为了提 高可读性
a<=012; b<=0; c<=123_456; d<=2E5; e<=4e3;
31
b <= c <=
HYIT
6. 字符(Character)
关键字: CHARACTER
字符量通常用单引号括起来,如:‘a’、‘B’。 一般情况下,VHDL对大小写不敏感,但对字 符量中的大、小写字符则认为是不一样的。 字符量中的字符可以是大小写字母、数字及 空白或者特殊字符$、@、%等。
4
HYIT
扩展标识符
用反斜杠来界定, 例如:\data_bus\ 两个反斜杠之间可以使用保留字。\ENTITY\ 区分大小写 允许下划线连续使用 同名的扩展标识符和短标识符是不一样的。 例如:\data_bus\和data_bus不一样
HYIT
5
判断以下标识符的合法性,并给出理由
17
HYIT
3
数据类型
VHDL语言要求为各种常量、变量、信 号指定明确的数据类型 参于运算的数据对象在数据类型、长度 等方面要匹配
VHDL属于严格数据类型的语言。不同
的数据类型之间要进行转换。
HYIT
18
标准库中定义的类型
数据 类型
IEEE库中定义的类型
用户自己定义的类型
HYIT
当对信号进行初始赋值时,赋值符号为‚:=”,但是
14 当在程序中进行信号赋值时,采用的赋值符号为‚<=”。
信号说明的位置:程序包、实体说明、结构体说 明部分;不允许在进程和子程序中定义信号。信号可 以有多个驱动源,或者说赋值信号源,但必须将此信 号的数据类型定义为决断性数据类型。 在进程中,只能将信号列入敏感表,而不能将变 量列入敏感表。 信号可以作为结构体中各进程之间通信的手段 信号的赋值被称为带入,它可以附加延时。 例如:
HYIT
35
9. 错误等级(Severity Level)
关键字: Severity Level
错误等级类型数据用来表征系统的状态,它共 有4种:NOTE(注意)、WARNING(警告)、ERROR( 错误)、FAILURE(失败)。在系统仿真时,这4种状态 用来提示系统当前的工作情况。 注意:只在仿真时使用!
HYIT
26
3.布尔数据类型(boolean)
在IEEE1076中定义
type boolean is (false,true);
只有两种取值: false,true 关键字: boolean
如:signal z: boolean := true ;
HYIT
27
布尔量没有数值含义,也不能进行算术运算, 但可以进行关系运算(即:逻辑运算)。 可以在条件语句中被测试,测试结果产生一个 布尔量TRUE或者FALSE。 一般这一类型的数据的初始值总为FALSE。