




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第2章章 VHDL词法根底词法根底2.1 标识符标识符2.2 对象对象2.3 数据类型数据类型2.4 类型转换类型转换2.5 词法单元词法单元2.6 运算操作符运算操作符2.1 标识符标识符标识符用来定义常数、变量、信号、端口、子程序或参数的标识符用来定义常数、变量、信号、端口、子程序或参数的名字。名字。VHDL有有87版和版和93版之分。版之分。87版的标识符规那么经扩展后,版的标识符规那么经扩展后,形成了形成了93版的标识符规那么。版的标识符规那么。 87版为短标识符,扩展部版为短标识符,扩展部分称为扩展标识符。分称为扩展标识符。93版含短标识符和扩展标识符两部分。版含短标识符和扩展标识
2、符两部分。由英文字母、数字、下划线构成。由英文字母、数字、下划线构成。 必需是英文字母开头,结尾不能是下划线,也不能呈现连续必需是英文字母开头,结尾不能是下划线,也不能呈现连续下划线。下划线。EDA工具综合、仿真时,短标识符不区分大小写。工具综合、仿真时,短标识符不区分大小写。VHDL的保管字、属性不能用作标识符。如的保管字、属性不能用作标识符。如ENTITY,ARCHITECTURE,END,BUS,USE,WHEN,WAIT,IS一、短标识符规那么一、短标识符规那么扩标用反斜杠界定。如:扩标用反斜杠界定。如:multi_screens。允许包含图形符号、空格符。如:允许包含图形符号、空格符
3、。如:mode A, $100等。等。反斜杠之间的字符可用保管字。如:反斜杠之间的字符可用保管字。如:buffer, entity等。等。扩标的界定符两个斜杠之间可以用数字打头。如:扩标的界定符两个斜杠之间可以用数字打头。如:100$,2chip,4screens等。等。扩标中允许多个下划线相连。如:扩标中允许多个下划线相连。如:Four_screens, TWO_Computer_sharptor等。等。扩标区分大小写。如扩标区分大小写。如: EDA 与与eda不同。不同。扩标与短标不同。如:扩标与短标不同。如:COMPUTER 与与Computer不同。不同。 二、扩展标识符规那么二、扩展
4、标识符规那么三、下标名及下标段名三、下标名及下标段名下标名用于指示数组型变量或信号的某一元素。下标名用于指示数组型变量或信号的某一元素。下标段名用于指示数组型变量或信号的某一段元素,其语句格式:下标段名用于指示数组型变量或信号的某一段元素,其语句格式:注:注:TO下标由低到高;下标由低到高;DOWNTO下标由高到低。下标由高到低。数组类型信号名或变量名数组类型信号名或变量名(表达式表达式1 TO/DOWNTO 表达式表达式2);数据对象数据对象Data Objects接受不同数据类型的赋值。接受不同数据类型的赋值。四种对象:常量四种对象:常量(CONSTANT)、变量、变量(VARIABLE)
5、、信号、信号(SIGNAL)、文件、文件(FILES)。其中文件类型是。其中文件类型是VHDL93规范中规范中新通过的。新通过的。 2.2 对象对象一、常量一、常量(CONSTANT) 常量定义形式:常量定义形式: CONSTANT 常量名:数据类型常量名:数据类型:=表达式;表达式; 例:例: CONSTANT FBUSBIT_VECTOR:=“010110;CONSTANT VCCREAL:=5.0;CONSTANT DELYTIME:=25 ns;常量设置使得设计实体中的常数易阅读和修改。如将位矢的常量设置使得设计实体中的常数易阅读和修改。如将位矢的宽度定义为一个常量,只要修改这个常量就
6、能改变宽度,从宽度定义为一个常量,只要修改这个常量就能改变宽度,从而改变硬件构造。而改变硬件构造。常量是一个恒定不变的值,一旦作了数据类型的赋值定义后常量是一个恒定不变的值,一旦作了数据类型的赋值定义后,在程序中不能再改变,有全局意义。,在程序中不能再改变,有全局意义。常量与表达式类型必需一致,只能是标量类型或复合类型。常量与表达式类型必需一致,只能是标量类型或复合类型。常量的可视性其使用范围取决于定义的位置:常量的可视性其使用范围取决于定义的位置:定义在程序包中的常量,具有最大全局化特征,可以用在定义在程序包中的常量,具有最大全局化特征,可以用在调用此程序包的所有设计实体中;调用此程序包的所
7、有设计实体中;定义在设计实体中的常量,其有效范围为这个实体定义的定义在设计实体中的常量,其有效范围为这个实体定义的所有的构造体;所有的构造体;定义在设计实体的某一构造体中的常量,那么只能用于此定义在设计实体的某一构造体中的常量,那么只能用于此构造体;构造体;定义在构造体的某一单元的常量,如一个进程中,那么这定义在构造体的某一单元的常量,如一个进程中,那么这个常量只能用在这一进程中。个常量只能用在这一进程中。 常量使用要点常量使用要点变量是一个部分量,只能在进程和子程序中使用,不能将信息变量是一个部分量,只能在进程和子程序中使用,不能将信息带出对它作出定义的当前设计单元。带出对它作出定义的当前设
8、计单元。变量赋值立即发生,无延时行为。变量赋值立即发生,无延时行为。VHDL不支持变量附加延时语句。变量常用在实现某种算法的不支持变量附加延时语句。变量常用在实现某种算法的赋值语句中。赋值语句中。变量的初值不是必需的,综合器将略去所有初值。变量的初值不是必需的,综合器将略去所有初值。变量数值的改变是通过变量赋值来实现的,其赋值语句的语法变量数值的改变是通过变量赋值来实现的,其赋值语句的语法格式:目的变量名格式:目的变量名:=表达式;表达式;二、变量二、变量(VARIABLE)变量定义格式:变量定义格式: VARIABLE 变量名:数据类型变量名:数据类型 约束条件约束条件:=表达式表达式;例:
9、例:VARIABLE A:INTEGER; -定义定义A为整数型变量为整数型变量VARIABLE B,C:INTEGER:=2; -定义定义B和和C为整型为整型变量,初始值为变量,初始值为2VARIABLE count: integer range 0 TO 255 :=10; 变量使用要点变量使用要点例:例:SIGNAL S1:STD_LOGIG:=0; -定义了一个规范位的单值信号定义了一个规范位的单值信号S1,初始值为低电平,初始值为低电平SIGNAL S2,S3:BIT; -定义了两个为定义了两个为BIT的信号的信号S2和和S3SIGNAL S4:STD_LOGIC_VECTOR(15
10、 DOWNTO 0);-定义了一个规范位矢的位矢量信号,共定义了一个规范位矢的位矢量信号,共16个信号元素个信号元素三、信号三、信号(SIGNAL) 信号定义格式:信号定义格式: SIGNAL 信号名:信号名: 数据类型数据类型 约束条件约束条件:=表达式表达式;信号不但可以容纳当前值,也可以坚持历史值。这一属性与信号不但可以容纳当前值,也可以坚持历史值。这一属性与触发器的记忆功能有很好的对应关系。触发器的记忆功能有很好的对应关系。信号的初值不是必需的,而且仅在仿真中有效。与变量相比信号的初值不是必需的,而且仅在仿真中有效。与变量相比,信号的硬件特征更为明显,它具有全局性特性。,信号的硬件特征
11、更为明显,它具有全局性特性。 “:表示对信号直接赋值,不产生延时。表示对信号直接赋值,不产生延时。“表示代入赋值,是变量之间信号的传送,代入赋值表示代入赋值,是变量之间信号的传送,代入赋值法允许产生延时。例如:法允许产生延时。例如:T1 T2 AFTER 20ns;在在EDA工具综合时,信号应在构造体中描绘清楚。工具综合时,信号应在构造体中描绘清楚。信号类似于连接线。信号可以作为设计实体中并行语句模块信号类似于连接线。信号可以作为设计实体中并行语句模块间的信息交流通道。间的信息交流通道。 信号使用要点信号使用要点四、文件四、文件(files) 文件文件(files)是传输大量数据的客体,包含一
12、些专门数据类型的是传输大量数据的客体,包含一些专门数据类型的数值。在仿真测试时,测试的输入鼓励数据和仿真结果的输数值。在仿真测试时,测试的输入鼓励数据和仿真结果的输出都要用文件来进展。出都要用文件来进展。 在在IEEE1076规范中,规范中,TEXTIO程序包中定义了文件程序包中定义了文件I/O传输的传输的方法。它们是对过程的定义,调用这些过程就能完成数据的方法。它们是对过程的定义,调用这些过程就能完成数据的传送。传送。从硬件电路系统来看,常量相当于电路中的恒定电平,如从硬件电路系统来看,常量相当于电路中的恒定电平,如GND或或VCC接口,而变量和信号那么相当于组合电路系统接口,而变量和信号那
13、么相当于组合电路系统中门与门间的连接及其连线上的信号值。中门与门间的连接及其连线上的信号值。从行为仿真和从行为仿真和VHDL语句功能上看,信号和变量的区别主要语句功能上看,信号和变量的区别主要表如今接受和坚持信息的方式与传送的区域大小上。表如今接受和坚持信息的方式与传送的区域大小上。从综合后所对应的硬件电路构造来看,信号一般将对应更多从综合后所对应的硬件电路构造来看,信号一般将对应更多的硬件构造,但在许多情况下,信号和变量并没有什么区别的硬件构造,但在许多情况下,信号和变量并没有什么区别。 虽然虽然EDA仿真器允许变量和信号设置初始值,但在实际应仿真器允许变量和信号设置初始值,但在实际应用中,
14、用中,EDA综合器并不会把这些信息综合进去。综合器并不会把这些信息综合进去。 五、常量、变量和信号三者的使用比较五、常量、变量和信号三者的使用比较VHDL是一种强类型语言,要求设计实体中的每一个常数、是一种强类型语言,要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量都必需具有确定的数信号、变量、函数以及设定的各种参量都必需具有确定的数据类型,并且只要数据类型一样的量才干互相传送和作用。据类型,并且只要数据类型一样的量才干互相传送和作用。数据类型按使用目的分:数据类型按使用目的分: 2.3 数据类型数据类型用于用于EDA综合的数据类型,如标量型综合的数据类型,如标量型(SCALAR
15、 TYPE)和复和复合类型合类型(COMPOSITE TYPE) 。用于用于EDA仿真的数据类型,如存取类型仿真的数据类型,如存取类型(ACCESS TYPE)。数据类型按其产生的来源分:数据类型按其产生的来源分:规范数据类型规范数据类型自行定义数据类型:自行定义数据类型:数据类型按其性质分:数据类型按其性质分:规范类型:如枚举类型、整数类型、物理类型等规范类型:如枚举类型、整数类型、物理类型等复合类型:数组类型、记录类型复合类型:数组类型、记录类型此数据类型都是在此数据类型都是在VHDL规范程序包规范程序包STANDARD中定义中定义的,在实际使用中,已自动包含进的,在实际使用中,已自动包含
16、进VHDL的源文件中,因而的源文件中,因而不用通过不用通过USE语句以显式调用。语句以显式调用。 一、规范数据类型一、规范数据类型 VHDL预定义的规范数据类型预定义的规范数据类型10种种布尔布尔(BOOLEAN)数据类型数据类型是二值枚举型数据类型,取值有是二值枚举型数据类型,取值有FALSE和和TRUE两种。两种。布尔量没有数量多少的概念,不能进展算术运算,只能进展布尔量没有数量多少的概念,不能进展算术运算,只能进展逻辑运算。逻辑运算。布尔量常用来表达信号的状态,或者总线上的控制权,仲裁布尔量常用来表达信号的状态,或者总线上的控制权,仲裁情况,忙、闲状态等。情况,忙、闲状态等。假设某个客体
17、被定义为布尔量,那么假设某个客体被定义为布尔量,那么EDA工具对设计进展仿工具对设计进展仿真时,自动地对其赋值情况进展核查。真时,自动地对其赋值情况进展核查。 位矢量位矢量(BIT_VECTOR)数据类型数据类型由多个由多个BIT组成的数组,组成的数组,BIT是其元素;使用时必需指出其是其元素;使用时必需指出其 元素个数和排列。元素个数和排列。位位(BIT)数据类型数据类型位用来表示一个信号的值。位用来表示一个信号的值。位通常用单引号括起来。如位通常用单引号括起来。如 TYPE BIT IS (0,1);位的值位的值0,1表示信号的状态;布尔量的值表示信号的状态;布尔量的值0,1表示表示假假,
18、真真。两者的意义不一样。两者的意义不一样。例:例:SIGNAL A:BIT_VECTOR7 DOWNTO 0; SIGNAL B:BIT_VECTOR3 DOWNTO 0; SIGNAL C:BIT; B=A7 DOWNTO 4; A7 DOWNTO 4=A3 DOWNTO 0; A3 DOWNTO 0= B; A7=C; 字符字符(CHARACTER)数据类型数据类型用单引号引起来,如用单引号引起来,如A。有大小写区分,如。有大小写区分,如B不同于不同于b。整数整数(INTEGER)数据类型数据类型其数代表正整数、负整数和零。其数代表正整数、负整数和零。对象的数据类型定义为整数时,范围应有约
19、束。对象的数据类型定义为整数时,范围应有约束。例:例:VARIABLE A: INTEGER RANGE -128 TO 128;整数常量的书写方式例如如下:整数常量的书写方式例如如下:2 -十进制整数十进制整数10E4 -十进制整数十进制整数16#D2# -十六进制整数十六进制整数 2#11011010# -二进制整数二进制整数自然数自然数(NATURAL)和正整数和正整数(POSITIVE)数据类型数据类型自然数是整数的一个子类型,是非负的整数,即零和正整自然数是整数的一个子类型,是非负的整数,即零和正整数;正整数也是整数的一个子类型,它包括整数中非零和数;正整数也是整数的一个子类型,它包
20、括整数中非零和非负的数值。非负的数值。实数实数(REAL)数据类型数据类型VHDL的实数类型类似于数学上的实数,或称浮点数。的实数类型类似于数学上的实数,或称浮点数。实数类型仅能在实数类型仅能在EDA仿真器中使用,仿真器中使用,EDA综合器不支持,因综合器不支持,因为其实现相当复杂,目前在电路规模上难以接受。为其实现相当复杂,目前在电路规模上难以接受。实数常量的书写方式举例如下:实数常量的书写方式举例如下: 65971.333333 -十进制浮点数十进制浮点数 8#43.6#E+4 -八进制浮点数八进制浮点数 43.6E-4 -十进制浮点数十进制浮点数字符串字符串(STRING)数据类型数据类
21、型字符串数据类型是字符数据类型的一个非约束型数组,或称字符串数据类型是字符数据类型的一个非约束型数组,或称为字符串数组。字符串必需用双引号标明。如:为字符串数组。字符串必需用双引号标明。如: VARIABLE STRING_VARSTRING(1 TO 7); STRING_VAR:=“A B C D;时间时间(TIME)数据类型数据类型VHDL中唯一的预定义物理类型是时间。完好的时间类型包中唯一的预定义物理类型是时间。完好的时间类型包括整数和物理量单位两部分,整数和单位之间至少留一个括整数和物理量单位两部分,整数和单位之间至少留一个空格,如空格,如55 ms,20 ns。STANDARD 程
22、序包中也定义了时间。定义如下:程序包中也定义了时间。定义如下:TYPE TIME IS RANGE -2147483647 TO 2147483647units fs; -飞秒,飞秒,VHDL中的最小时间单位中的最小时间单位 ps = 1000 fs; -皮秒皮秒 ns = 1000 ps; -纳秒纳秒 us = 1000 ns; -微秒微秒 ms = 1000 us; -毫秒毫秒 sec = 1000 ms; -秒秒 min = 60 sec; -分分 hr = 60 min; -时时 end untis;错误等级错误等级(SEVERITY_LEVEL)错误等级用来指示设计系统的工作状态,共
23、有四种可能的状错误等级用来指示设计系统的工作状态,共有四种可能的状态值:态值:NOTE(注意注意)、WARNING(警告警告)、ERROR(出错出错)、FAILURE(失败失败)。在仿真过程中,可输出这四种值来提示被仿真系统当前的工在仿真过程中,可输出这四种值来提示被仿真系统当前的工作情况。作情况。IEEE预定义的规范逻辑位与矢量预定义的规范逻辑位与矢量在在IEEE库的程序包库的程序包STD_LOGIC_1164中,定义了两个非常中,定义了两个非常重要的数据类型,即规范逻辑位重要的数据类型,即规范逻辑位STD_LOGIC 和规范逻辑矢和规范逻辑矢量量STD_LOGIC_VECTOR。规范逻辑位
24、规范逻辑位STD_LOGIC数据类型数据类型STD_LOGIC的定义如下:的定义如下: TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-); 各值的含义是:各值的含义是: U-未初始化的,未初始化的,X-强未知的,强未知的,0-强强0,1-强强1,Z-高阻态,高阻态,W-弱未知的,弱未知的,L-弱弱0,H-弱弱1, -忽略。忽略。注意:在数字器件中能实现的值只要注意:在数字器件中能实现的值只要4种:种:-,0, 1,Z。规范逻辑矢量规范逻辑矢量(STD_LOGIC_VECTOR)数据类型数据类型STD_LOGIC_VECTOR定义如下:定义如下:TYPE STD_LOG
25、IC_VECTOR IS ARRAY (NATURA RANGE) OF STD_LOGIC;注意:在程序中使用上述两种数据类型前,需参与下面语句:注意:在程序中使用上述两种数据类型前,需参与下面语句:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;其他预定义规范数据类型其他预定义规范数据类型如如 S y n o p s y s 公 司 在公 司 在 I E E E 库 中 参 与 的 程 序 包库 中 参 与 的 程 序 包STD_LOGIC_ARITH中定义了如下的数据类型:无符号型中定义了如下的数据类型:无符号型(UNSIGNED)、有符号型、有符号型(
26、SIGNED)和小整型和小整型(SMAL_INT)。在使用之前,请注意必需参与下面语句:在使用之前,请注意必需参与下面语句: LIBRARY IEEE; USE IEEE.STD_LOGIC_ARITH.ALL;VHDL允许用户自行定义数据类型,它们可以有多种,如:允许用户自行定义数据类型,它们可以有多种,如:枚举类型枚举类型(ENUMERA-TION TYPE)整数类型整数类型(INTEGER TYPE)数组类型数组类型(ARRAY TYPE)记录类型记录类型(RECORD TYPE)时间类型时间类型(TIME TYPE)实数类型实数类型(REA TYPE)等。等。 定义语法定义语法类型定义
27、:类型定义:TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义 OF 根本数据类型根本数据类型;子类型定义:子类型定义:SUBTYPE 子类型名子类型名 IS 根本数据根本数据 RANGE 约束范围;约束范围;二、用户自定义数据类型二、用户自定义数据类型注意:子类型注意:子类型SUBTYPE只是由只是由TYPE定义的原数据类型的一个定义的原数据类型的一个 子集,它满足原数据类型根本所有约束条件。子集,它满足原数据类型根本所有约束条件。枚举类型枚举类型枚举数据类型是用文字符号来表示一组实际的二进制数的类枚举数据类型是用文字符号来表示一组实际的二进制数的类型假设直接用数值来定义,那么必
28、需使用单引号。型假设直接用数值来定义,那么必需使用单引号。例:例: TYPE M_STATE IS( STATE1,STATE2,STATE3,STATE4,STATE5); SIGNA CURRENT_STATE,NEXT_STATE:M_STATE; 说明:在这里,信号说明:在这里,信号CURRENT_STATE和和NEXT_STATE的的数据类型定义为数据类型定义为M_STATE,它们的取值范围是可枚举的,它们的取值范围是可枚举的,即从即从STATE1STATE5共五种,而这些状态代表五组唯一共五种,而这些状态代表五组唯一的二进制数值。的二进制数值。数组类型数组类型是将一组具有一样数据类
29、型的元素集合在一起,作为一个数是将一组具有一样数据类型的元素集合在一起,作为一个数据对象来处置的数据类型。数组可以是一维每个元素只要据对象来处置的数据类型。数组可以是一维每个元素只要一个下标或多维每个元素有多个下标数组。一个下标或多维每个元素有多个下标数组。EDA仿仿真器支持多维数组,但综合器只支持一维数组。真器支持多维数组,但综合器只支持一维数组。数组的元素可以是任何一种数据类型,用以定义数组元素的数组的元素可以是任何一种数据类型,用以定义数组元素的下标范围子句决定了数组中元素的个数以及元素的排序方向下标范围子句决定了数组中元素的个数以及元素的排序方向,即下标数是由低到高,或是由高到低。,即
30、下标数是由低到高,或是由高到低。 限定性数组定义语句格式如下:限定性数组定义语句格式如下: TYPE 数组名数组名 IS ARRAY (数组范围数组范围) OF 数据类型;数据类型;说明:其中,数组名是限定性数组类型的名称,可以是任何说明:其中,数组名是限定性数组类型的名称,可以是任何标标识符,其类型与数组元素一样;数组范围明确指出识符,其类型与数组元素一样;数组范围明确指出数组数组元素的定义数量和排序方式,以整数来表示其数组元素的定义数量和排序方式,以整数来表示其数组的下的下标;数据类型即指数组各元素的数据类型。标;数据类型即指数组各元素的数据类型。例例1:TYPE STB IS ARRAY
31、(7 DOWNTO 0) OF STD_LOGIC;说明:数组类型的名称是说明:数组类型的名称是STB,它有八个元素,它的下标排序是,它有八个元素,它的下标排序是7,6,5,4,3,2,1,0,各元素的排序是,各元素的排序是STB(7),STB(6),STB(1),STB(0)。例例2: TYPE X IS (LOW,HIGH); TYPE DATA_BUS IS ARRAY (0 TO 7,X) OF BIT;说明:首先定义说明:首先定义X为两元素的枚举类型,然后将为两元素的枚举类型,然后将DATA_BUS定定义为一个数组类型,其中每一元素的数据类型是义为一个数组类型,其中每一元素的数据类型
32、是BIT。非限制性数组的定义语句格式如下:非限制性数组的定义语句格式如下: TYPE 数组名数组名 IS ARRAY (数组下标名数组下标名 RANGE) OF 数据类型;数据类型;说明:其中,数组名是非限制性数组类型的取名;数组下说明:其中,数组名是非限制性数组类型的取名;数组下标名标名是以整数类型设定的一个数组下标名称;符号是以整数类型设定的一个数组下标名称;符号“是下是下 标范围待定符号,用到该数组类型时,再填入详标范围待定符号,用到该数组类型时,再填入详细的数细的数值范围;数据类型是数组中每一元素的数据类型值范围;数据类型是数组中每一元素的数据类型。例例1: TYPE BIT_VECT
33、OR IS ARRAY(NATURA RANE) OF BIT;VARABLE VA:BIT_VECTOR(1 TO 6); -将数组取值将数组取值范围定在范围定在16例例2: TYPE LOGIC_VECTOR IS ARRAY(NATURA RANGE,POSITIVE RANGE) OF LOGIC; VARIABLE L16_ OBJECT:LOGIC_VECTOR(0 TO7,1 TO 2); -限定范围限定范围记录类型记录类型由已定义的、数据类型不同的对象元素构成的数组称为记录由已定义的、数据类型不同的对象元素构成的数组称为记录类型。类型。定义记录类型的语句格式如下:定义记录类型的
34、语句格式如下: TYPE 记录类型名记录类型名 IS RECORD 元素名元素名 : 元素数据类型;元素数据类型; 元素名元素名 : 元素数据类型;元素数据类型; END RECORD 记录类型名记录类型名;例例1: TYPE RECDATA IS RECORD -将将RECDATA定义为三元素记录类型定义为三元素记录类型ELEMENT1 TIME; -将元素将元素ELEMENT1定义为时间类型定义为时间类型ELEMENT2 TIME; -将元素将元素ELEMENT2定义为时间类型定义为时间类型ELEMENT3 STD_LOGIC; -将元素将元素ELEMENT3定义为规范位类型定义为规范位类
35、型END RECORD RECDATA;例例2: 利用记录类型定义的一个微处置器命令信息表。利用记录类型定义的一个微处置器命令信息表。TYPE REGNAME IS (AX,BX,CX,DX);TYPE OPERATION IS RECORD OPSTRSTRING(1 TO 10); OPCODEBIT_VECTOR(3 DOWNTO 0); OP1,OP2,RES:REGNAME;END RECORD OPERATION;VARIABLE INSTR1,INSTR2:OPERATION;INSTR1:=(ADD AX,BX,0001,AX,BX,AX);INSTR2:=(ADD AX,BX
36、,“0010,OTHERS=BX);VARIABLE INSTR3OPERATION;INSTR3.OPSTR:=MU AX,BX;INSTR3.OP1:=AX;2.4 类型转换类型转换不同类型的对象不能代入。对于某一数据类型的变量、信号、不同类型的对象不能代入。对于某一数据类型的变量、信号、常量、文件赋值时,类型一定要一致,否那么常量、文件赋值时,类型一定要一致,否那么EDA工具进工具进展综合、仿真等过程中不能通过。展综合、仿真等过程中不能通过。为了进展不同类型的数据变换,可以有为了进展不同类型的数据变换,可以有3种方法:类型标志种方法:类型标志法、函数转换和常数转换法。法、函数转换和常数转
37、换法。 下面介绍常用的两种:类型标志法和函数转换。下面介绍常用的两种:类型标志法和函数转换。 类型标志就是类型的名称。类型标志法仅适用于关系亲密的类型标志就是类型的名称。类型标志法仅适用于关系亲密的标量类型之间的类型转换,即整数和实数的类型转换。标量类型之间的类型转换,即整数和实数的类型转换。 标志法转换一般语句格式:数据类型标识符标志法转换一般语句格式:数据类型标识符(表达式表达式);一、类型标志法转换一、类型标志法转换假设:假设:variable I :integer;variable R :real;那么有:那么有:i:integer(r);r:real(i); 二、函数法转换二、函数法
38、转换VHDL语言规范中的程序包提供的变换函数来完成此工作。这些语言规范中的程序包提供的变换函数来完成此工作。这些程序包有程序包有3种:种:STD_LOGIC_1164程序包定义的转换函数:程序包定义的转换函数:函数函数 TO_STD_LOGIC_VECTOR(A)-由位矢量由位矢量BIT_VECTOR转换为规范逻辑矢量转换为规范逻辑矢量STD_LOGIC_VECTOR函 数函 数 TO _ B I T V E C TO R ( A ) - - 由 规 范 逻 辑 矢 量由 规 范 逻 辑 矢 量STD_LOGIC_VECTOR转换为位矢量转换为位矢量BIT_VECTOR函数函数 TO_STDL
39、OGICV(A) -由由BIT转换为转换为STD_LOGIC函数函数 TO_BIT(A) -由规范逻辑由规范逻辑STD_LOGIC转换转换BIT例:例:SIGNAL b: STD_LOGIC_VECTOR(11 DOWNTO 0);b=TO_STD_LOGIC_VECTOR(H“A0F)b=TO_STD_LOGIC_VECTOR(B“1010_0000_1111)std_logic_arith程序包定义的转换函数程序包定义的转换函数函数函数COMV_STD_LOGIC_VECTOR(A,位长,位长);-由由integer,singed,unsigned转换成转换成std_logic_vecto
40、r函数函数CONVINTEGER(A);-由由signed,unsigned转换成转换成integerstd_logic_unsigned程序包定义的转换函数程序包定义的转换函数函 数函 数 C O N V I N T E G E R ( A ) ;- - 由由STD_LOGIC_VECTOR转换成转换成integer #成成#金金 一、数字型文字一、数字型文字数字型文字的值有多种表达方式,现列举如下:数字型文字的值有多种表达方式,现列举如下:整数文字整数文字整数文字都是十进制的数,如:整数文字都是十进制的数,如: 5,678,0,156E2(=15600),45_234_287(=45234
41、287)实数文字实数文字实数文字也都是十进制的数,但必需带有小数点,如:实数文字也都是十进制的数,但必需带有小数点,如: 188.993, 88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499),1.335,0.0VHDL文字主要包括数值和标识符。数值型文字主要有数字文字主要包括数值和标识符。数值型文字主要有数字型、字符串型和位串型等。型、字符串型和位串型等。2.5 词法单元文字规那么词法单元文字规那么以数制基数表示的文字以数制基数表示的文字用这种方式表示的数由五个部分组成。用这种方式表示的数由五个部分组成。第一部分,用十进制数标明
42、数制进位的基数;第一部分,用十进制数标明数制进位的基数;第二部分,数制隔离符号第二部分,数制隔离符号“#;第三部分,表达的文字;第三部分,表达的文字;第四部分,指数隔离符号第四部分,指数隔离符号“#;第五部分,用十进制表示的指数部分,假如是第五部分,用十进制表示的指数部分,假如是0可省去。可省去。例:例:10#170# -(十进制数,等于十进制数,等于170)2#1111_1110# -(二进制数,等于二进制数,等于254)16#E#E1 -(十六进制数,等于十六进制数,等于2#11100000#,等于,等于224)16#F.01#E+2 -(十六进制数,等于十六进制数,等于3841.00)物
43、理量文字物理量文字VHDL综合器不接受此类文字综合器不接受此类文字如:如:60 s(60秒秒),100 m(100米米),k (千欧姆千欧姆),177 A(177安培安培)字符是用单引号引起来的字符是用单引号引起来的ASCII字符,可以是数值,也可以字符,可以是数值,也可以是符号或字母,如:是符号或字母,如:R,A,*,Z。字符串那么是一维的字符数组,须放在双引号中。字符串那么是一维的字符数组,须放在双引号中。VHDL中中有两品种型的字符串:文字字符串和数位字符串。有两品种型的字符串:文字字符串和数位字符串。二、字符串型文字二、字符串型文字文字字符串文字字符串文字字符串是用双引号引起来的一串文
44、字。文字字符串是用双引号引起来的一串文字。如:如:“ERROR,“BOTH S AND Q EQUA TO L,“X,“BB$CC数位字符串数位字符串数位字符串也称位矢量,是预定义的数据类型数位字符串也称位矢量,是预定义的数据类型BIT的一维数的一维数组,它们所代表的是二进制、八进制或十六进制的数组,组,它们所代表的是二进制、八进制或十六进制的数组,其位矢量的长度即为等值的二进制数的位数。其位矢量的长度即为等值的二进制数的位数。 数位字符串的表示首先要有计算基数,然后将该基数表示的数位字符串的表示首先要有计算基数,然后将该基数表示的值放在双引号中,基数符以值放在双引号中,基数符以“B、“O和和
45、“X表示,并放表示,并放在字符串的前面。它们的含义分别是:在字符串的前面。它们的含义分别是: B:二进制基数符号,表示二进制数位:二进制基数符号,表示二进制数位0或或1,在字符串,在字符串中每一个位表示一个中每一个位表示一个BIT。 O:八进制基数符号,在字符串中的每一个数代表一个:八进制基数符号,在字符串中的每一个数代表一个八进制数,即代表一个八进制数,即代表一个3位位(BIT)的二进制数。的二进制数。X:十六进制基数符号:十六进制基数符号(0F),字符串中的每一位代表一,字符串中的每一位代表一个十六进制数,即代表一个个十六进制数,即代表一个4位的二进制数。位的二进制数。例:例:B“1_1101_1110 -二进制数数组,位矢数组长度是二进制数数组,位矢数组长度是9 X“AD0 -十六进制数数组,位矢数组长度是十六进制数数组,位矢数组长度是12VHDL的各种表达式由操作数和操作符组成,其中,操作数的各种表达式由操作数和操作符组成,其中,操作数是各种运算的对象,而操作符那么规定运算的方式。是各种运算的对象,而操作符那么规定运算的方式。2.6 运算操作符运算操作符一、操作符品种及对应
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理带班组长竞聘
- 疫情防控宣传课件小学生
- 2025年乡村医生考试题库:农村医疗卫生机构管理法规与实务
- 2025年大学统计学期末考试题库:时间序列分析在水资源管理中的应用试题
- 2025-2030网络优化产业规划专项研究报告
- 2025-2030组合健身器械产业市场深度调研及发展趋势与投资研究报告
- 2025建筑工程劳务承包合同混凝土工
- 2025-2030米拉贝李子行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030童装项目商业计划书
- 2025-2030空压机密封垫市场发展现状调查及供需格局分析预测报告
- Unit+5+The+Monarchs+Journey+Language+points+课件-【知识精讲精研】高中英语外研版(2019)必修第一册+
- 挂篮检查验收记录表
- 召回产品处理登记表
- 3q认证3q认证模板
- 电机能效对照表
- 第4章-甲壳素和壳聚糖-天然高分子材料资料讲解课件
- 企业动态能力研究梳理与展望论文
- 中国移动公司物业管理方案
- 基于PLC控制的自动洗车系统设计
- 不动产登记操作规范与工作实务PPT
- 外脚手架旁站监理细则
评论
0/150
提交评论