




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、,第四章 VHDL语言元素,4.1 VHDL语言的客体 4.2 VHDL语言的数据类型 4.3 VHDL数据类型转换 4.4 VHDL词法规则与标识符,4.1 VHDL语言的客体,VHDL语言中,可以赋予一个质的对象就称为客体。客体主要包括以下三种:变量(VARIABLE)、常量(CONSTANT)、信号(SIGNAL)。,4.1.1 常量(CONSTANT)(常数),定义一个常数主要是为了使设计实体中的某些量易于阅读和修改。常数说明就是对某一常数名赋予一个固定的值。通常在程序开始前进行赋值,该值的数据类型在说明语句中说明。 常数说明语句格式为: CONSTANT 常数名:数据类型 := 表达
2、式;,例如: CONSTANT Vcc : REAL := 5.0; CONSTANT Fbus : BIT_VECTOR := “1011”; CONSTANT Delay : TIME := 10ns;,注:常量是一个恒定不变的值,一旦做了数据类型和赋值定义,它在程序中就不能再改变。,4.1.2 变量(VARIABLE) 变量只能在进程和子程序中用,是一个局部量,不能将信息带出对它做出定义的当前设计单元。与信号不同,变量的赋值是理想化数据传输,其赋值是立即生效的,不存在任何的延时行为。 变量定义语句的格式为: VARIABLE 变量名 : 数据类型 : 约束条件 := 初始值; 例如: V
3、ARIABLE n: INTEGER RANGE 0 TO 15 := 2; VARIABLE a: INTEGER;,变量赋值语句的格式为: 目标变量名 := 表达式; 赋值语句 “:=” 右边的表达式必须与目标变量具有相同的数据类型,这个表达式可以是一个运算表达式也可以是一个数值。变量赋值语句左边的目标变量可以是单值变量,也可以是变量的集合。,例如定义变量: VARIABLE x,y : REAL; VARIABLE a,b : BIT_VECTOR(0 TO 7); x:=100.0 y:=1.5+x a:=b; a:=“1010101”; a(3 to 6):=(1,1,0,1); a
4、(0 to 5):=b(2 to 7); a(7):=0;,4.1.3 信号(SIGNAL) 信号是电子电路内部硬件连接的抽象。它可以作为设计实体中的并行语句模块间交流信息的通道。信号及其相关的延时语句明显地体现了硬件系统的特征。 信号定义语句的格式为: SIGNAL 信号名:数据类型:约束条件 := 初始值; 例如: SIGNAL gnd :BIT := 0; SIGNAL data :STD_LOGIC_VECTOR (7 DOWNTO 0);,信号赋值语句表达式为: 目标信号名 = 表达式; 符号 “=” 表示赋值操作,即将数据信息传入。数据信息传入时可以设置延时过程,这与器件的实际传播
5、延时十分接近。因此信号值的代入采用“=”代入符,而不是像变量赋值时那样用“:”。但信号定义时初始赋值符号“:”,即仿真的时间坐标是从赋初始值开始的。 信号赋值语句举例: x = y; a = 1; s1 = s2 AFTER 10 ns;,注意:变量和信号都必须先定义,后赋值。注意赋值符“=”和 “:”的差别。,信号与变量的区别: 信号和变量是VHDL中重要的客体,他们之间的主要区别有: 信号赋值至少要有延时;而变量赋值没有。 信号除当前值外有许多相关的信息,如历史信息和投影波形;而变量只有当前值。 进程对信号敏感而不对变量敏感。 信号可以是多个进程的全局信号;而变量只在定义他们的顺序域可见(
6、共享变量除外)。 信号是硬件中连线的抽象描述,他们的功能是保存变化的数据值和连接子元件,信号在元件的端口连接元件。变量在硬件中没有类似的对应关系,他们用于硬件特性的高层次建模所需要的计算中。,4.2 VHDL语言的数据类型 在对VHDL的客体进行定义时,都要指定其数据类型。VHDL有多种标准的数据类型,并且允许用户自定义数据类型。在VHDL语言语义约束中,对类型的要求反映在赋值语句的目标与源的一致,表达式中操作的一致,子类型中约束与类型的一致等许多方面。 4.2.1 VHDL中预定义的数据类型(编程者可直接使用) 预定义类型在VHDL标准程序包STANDARD中定义,在应用中自动包含进VHDL
7、的源文件,不需要USE语句显示调用。数据类型说明如下。,1.整数(INTEGER) 整数与数学中整数的定义相似,可以使用预定义运算操作符,如加“”、减“”、乘“”、除“”进行算术运算。在VHDL语言中,整数的表示范围为21474836472147483647,即从(2311)到(2311)。,2.实数(REAL) 在进行算法研究或实验时,作为对硬件方案的抽象手段,常常采用实数四则运算。实数的定义值范围为1.0E+38+1.0E+38。实数有正负数,书写时一定要有小数点。例如:1.0,+2.5,1.0E+38,3.位(BIT) 用来表示数字系统中的信号值。位值用字符0或者1(将值放在引号中)表示
8、。与整数中的1和0不同,1和0仅仅表示一个位的两种取值。 位数据可以用来描述数字系统中总线的值。位数据不同于布尔数据,可以用转换函数进行转换。,4.位矢量(BIT_VECTOR) 位矢量是用双引号括起来的一组数据。例如:“001100”,X“00bb”。在这里位矢量前面的X表示是十六进制。用位矢量数据表示总线状态最形象也最方便,在VHDL程序中将会经常遇到。使用位矢量时必须注明位宽,即数组中元素个数和排列,例如: SIGNAL s1:BIT_VECTOR(15 DOWNTO 0);,5.布尔量(BOOLEAN) 一个布尔量具有两种状态,“真”或者“假”。虽然布尔量也是二值枚举量,但它和位不同没
9、有数值的含义,也不能进行算术运算。它能进行关系运算。例如,它可以在if语句中被测试,测试结果产生一个布尔量TRUE或者FALSE。,6.字符(CHARACTER) 字符也是一种数据类型,所定义的字符量通常用单引号括起来,如a。一般情况下VHDL对大小写不敏感,但对字符量中的大小写则认为是不一样的。例如,B不同于b。字符量中的字符可以是从a到z中的任一个字母,从0到9中的任一个数以及空格或者特殊字符,如$,%等等。包集合standard中给出了预定义的128个ASC码字符,不能打印的用标识符给出。字符1与整数1和实数1.0都是不相同的,当要明确指出1的字符数据 时,则可写为:CHARACTER(
10、 1)。,7.字符串(STRING) 字符串是由双引号括起来的一个字符序列,也称字符矢量或字符串组。字符串常用于程序的提示和说明。字符串举例如下: VATIABLE string_1 : STRING (0TO 3); string_1:= “a b c d”;,8.时间(TIME) 时间是一个物理量数据。完整的时间量数据应包含整数和单位两部分,而且整数和单位之间至少应留一个空格的位置。例如55 sec,2 min等。在包集合STANDARD中给出了时间的预定义,其单位为fs,ps,ns,s,ms,sec,min和hr。例如:20 s,100 ns,3 sec。 在系统仿真时,时间数据特别有用
11、,用它可以表示信号延时,从而使模型系统能更逼近实际系统的运行环境。,9.错误等级(SEVERITY LEVEL) 错误等级类型数据用来表征系统的状态,共有4种:note(注意),warning(警告),error(出错),failure(失败)。在系统仿真过程中可以用这4种状态来提示系统当前的工作情况,从而使设计人员随时了解当前系统工作的情况,并根据系统的不同状态采取相应的对策。,10.大于等于零的整数(自然数)(NATURAL),正整数(POSITIVE) 这两种数据是整数的子类,NATURAL类数据为取0和0以上的正整数;而POSITIVE 则只能为正整数。,上述10种数据类型是VHDL语
12、言中标准的数据类型,在编程时可以直接引用。如果用户需使用这10种以外的数据类型,则必须进行自定义。但大多数的CAD厂商已在包集合中对标准数据类型进行了扩展。例如,数组型数据等,请同学们注意。,4.2.2 用户自定义的数据类型,可以由用户定义的数据类型有: 枚举(ENUMERATED)类型; 整数(INTEGER)类型; 实数(REAL)、浮点数(FLOATING)类型; 数组(ARRAY)类型; 存取(ACCESS)类型; 文件(FILE)类型; 记录(RECORDE)类型; 时间(TIME)类型(物理类型)。,4.2.3 IEEE预定义标准,1.标准逻辑位STD_LOGIC数据类型 IEEE
13、93增加了多值逻辑包STD_LOGIC_1164,使得“STD_LOGIC”数据具有9种不同的值。其定义如下所示: TYPE STD_LOGIC IS ( U, - - 初始值 X, - - 不定 0, - - 0 1, - - 1 Z, - - 高阻 W, - - 弱信号不定 L, - - 弱信号0 H, - - 弱信号1 - - 不可能情况 );,2.标准逻辑矢量STD_LOGIC_VECTOR数据类型,在使用中,标准逻辑矢量数据类型的数据对象赋值时,必须考虑位矢的宽度.同位宽、同数据类型的矢量才能进行赋值。,例:. TYPE t_date IS ARRAY(7 DOWNTO 0)OF S
14、TD_LOGIC; SIGNAL databus,memory:t_date; VARIABLE rega:t_date; . datebus=rega; . datebus=memory;.,4.2.4 枚举类型,枚举类型用特殊的字符来表示一组实际的二进制数. 例如:TYPE m_state IS( state1, state1 , state1 , state1) SIGNAL present_state,next_state:m_state;,默认state1为00 state2为01;,4.2.5 数组类型,数组可以是一维,也可以是多维.但是VHDL只支持一维数组. 数组的元素可以是任
15、意数据类型. TYPE 数组名 IS ARRY (数组范围) OF 数据类型 例1: TYPE data_bus1 IS (7 DOWNTO 0) OF REAL; TYPE data_bus2 IS (7 DOWNTO 0) OF STD_LOGIC; TYPE data_bus3 IS (7 DOWNTO 0,X) OF STD_LOGIC;,TYPE数组名 IS ARRY(NATURAL RANGE)OF数据类型; 例2:TYPE date IS ARRY(NATURAL RANGE)OF BIT; VARIABLE va:date(1 TO 6);,4.3 VHDL数据类型转换,在VH
16、DL程序设计中不同的数据类型的对象之间不能代入和运算。实现他们之间数据类型的转换有3种方法: 类型标记法; 函数转换法; 常数转换法。 4.3.1 用函数进行类型转换 VHDL语言中,程序包中提供了变换函数,这些程序包有3种,每个程序包中的变换函数不一样。现列表如下。,STD_LOGIC_1164包集合函数 函数 TO_ STDLOGICVECTOR(A) 由BIT_VECTOR转换为STD_LOGIC_VECTOR 函数 TO_ BITVECTOR(A) 由STD_LOGIC_VECTOR转换为BIT_VECTOR 函数 TO_ STDLOGIC(A) 由BIT转换为STD_LOGIC 函数
17、 TO_ BIT(A) 由STD_LOGIC转换为BIT .STD_LOGIC_ARITH包集合函数 函数:CONV_STD_LOGIC_VECTOR (A,位长) 由UNSINGED,SINGED转换为INTEGER STD_LOGIC_ UNSINGED包集合 函数:CONV_INTEGER (A) 由STD_LOGIC_VECTOR转换为INTEGER STD_LOGIC_ UNSINGED包集合 函数:CONV_INTEGER (A) 由INTEGER,UNSINGED,SINGED转换为 STD_LOGIC_VECTOR,LIBRARY IEEE; USE IEEE.STD_LOGI
18、C_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY qijian IS PORT(input:IN STD_LOGIC_VECTOR(2 DOWNTO 0); output:out STD_LOGIC_VECTOR(7 DOWNTO 0); END qijian; ARCHITECTURE a OF qijian IS BEGIN PROCESS(input) BEGIN Output0); Output (CONV_INTEGER(input)=1; END PROCESS; END a;,4.3.2 类型标记法实现类型转换 类型标记就是类
19、型的名称。类型标记法适合那些关系密切的标量类型之间的类型转换,即整数和实数的类型转换。 例如: VARIABLE I:INTEGER; VARIABLE R:REAL; I := INTEGER(R); R := REAL(I);,4.4 VHDL操作符,与其他程序设计语言相似,VHDL中的表达式也是由运算符将基本元素连接起来形成。这里的基本元素包括对象名、文字、函数调用及用括号括起来的表达式。 在VHDL语言中共有4类操作符,可以分别进行逻辑运算(LOGICAL)、关系运算(RELATIONAL)、算术运算(ARITHMETIC)和并置运算(CONCATENATION)。需要指出的是操作符操
20、作的对象是操作数,且操作数的类型应该和操作符所要求的类型相一致。另外,运算操作符是有优先级的,例如,逻辑运算符not,在所有操作符中优先级最高。,1.逻辑运算符 在VHDL语言中,共有6种逻辑运算符,他们分别是: NOT 取反; AND 与; OR 或; NAND 与非; NOR 或非; XOR 异或。,这6种逻辑运算符可以对“STD_LOGIC ”和“BIT”等逻辑型数据、“STD_LOGIC _VECTOR”逻辑型数组及布尔数据进行逻辑运算。必须注意,运算符的左边和右边,以及代入的信号的数据类型必须是相同的。,例: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164
21、.ALL; ENTITY yu IS PORT(a,b:IN STD_LOGIC_VECTOR(0 TO 3); output:out STD_LOGIC_VECTOR(0 TO 3); END yu; ARCHITECTURE a OF yu IS begin OUTPUT=a and b; end a;,2.算术运算符 VHDL语言中有5类算术运算符,他们分别是: 求和操作符: (加)、(减) 求积操作符:*(乘)、/(除)、MOD(求模)、REM(取余) 符号操作符: (正)、(负) 混合操作符: *(指数)、ABS(取绝对值) 移位操作符:SLL(逻辑左移)、SRL(逻辑右移)、SLA
22、(算术左移)、SRA(算术右移)、ROL(逻辑循环左移)、ROR逻辑循环右移),例:利用移位操作符设计译码器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY yimaqi IS PORT(input:IN STD_LOGIC_VECTOR(2 DOWNTO 0); output:out bit_VECTOR(7 DOWNTO 0); END yimaqi; ARCHITECTURE a OF yimaqi IS begin OUTPUT= 大于等于;,4.并置运算符 x = a (s); y = b (3); 上例中,a (s)为一下标语句,s是不可计算的下标名,只能在特定情况下进行综合;b (3)的下标为3,可以进行综合。,4.5.2 标识符 标识符是最常用的操作符,可以是常数、变量、信号、端口、子程序或参数的名字。标识符规则是VHDL语言中符号书写的一般规则,为EDA工具提供了标准
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国自动厕纸机行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国聚合物基增溶辅料行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国美食广场行业市场发展现状及发展趋势与投资前景研究报告
- 2025年船用GPS电子海图导航仪项目可行性研究报告
- 圆明园施工方案
- 2025-2030中国纯素食冰淇淋行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国粮食物流行业市场发展现状及竞争格局与投资前景研究报告
- 2025年胶/毛针织布项目可行性研究报告
- 2025-2030中国穿山甲养殖行业市场发展分析及发展趋势与投资前景研究报告
- 2025-2030中国税控软件行业市场发展分析及发展潜力与投资研究报告
- 护士N1晋级N2述职报告
- 中国糖尿病防治指南(2024版)解读
- 食堂食材配送采购投标方案(技术标)
- 山东省汶上县市级名校2025届中考生物全真模拟试卷含解析
- 2025年度智能硬件产品全国区域独家代理合同3篇
- 办公室安全知识培训课件
- 2025年四川省成都市青白江区招聘50人历年高频重点提升(共500题)附带答案详解
- 2025年浙江嘉兴市众业供电服务限公司招聘38人高频重点提升(共500题)附带答案详解
- 【课件】第12课+理想与典范-古希腊与古罗马美术+课件高中美术人教版(2019)美术鉴赏
- 建筑行业安全隐患举报奖励机制
- 公司事故隐患内部报告奖励机制
评论
0/150
提交评论