好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

EDA第4章VHDL基础文字规则与操作符4344.ppt

82页
  • 卖家[上传人]:壹****1
  • 文档编号:590313649
  • 上传时间:2024-09-13
  • 文档格式:PPT
  • 文档大小:986.50KB
  • / 82 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第第4 4章章 VHDLVHDL基础基础 4.3 VHDL4.3 VHDL的数据及文字规则的数据及文字规则•4.3.1 VHDL4.3.1 VHDL文字规则文字规则• VHDLVHDL文文字字(Literal)(Literal)主主要要包包括括数数值值和和标标识识符符数数值值型型文文字字主要有数字型、字符串型和位串型等主要有数字型、字符串型和位串型等 第第4 4章章 VHDLVHDL基础基础 1 1、数字型文字、数字型文字 数字型文字的值有多种表达方式,现列举如下:数字型文字的值有多种表达方式,现列举如下: (1) (1) 整数文字整数文字:都是十进制的整数,如::都是十进制的整数,如: 5 5,,678678,,0 0,,156E2(=15600)156E2(=15600),, 45_234_287(=45234287)45_234_287(=45234287) (2) (2) 实数文字实数文字::实数文字也都是十进制的数,但必须实数文字也都是十进制的数,但必须带有小数点,如:带有小数点,如: 188.993, 188.993, 88_670_551.453_909(=88670551.453909) 88_670_551.453_909(=88670551.453909),, 1.01.0,,44.99E-2(=0.4499)44.99E-2(=0.4499),,1.3351.335,,0.00.0 第第4 4章章 VHDLVHDL基础基础 (3)(3) 以以数数制制基基数数表表示示的的文文字字::用用这这种种方方式式表表示示的的数数由由五五个个部部分分组组成成。

      第第一一部部分分,,用用十十进进制制数数标标明明数数制制进进位位的的基基数数;;第第二二部部分分,,数数制制隔隔离离符符号号““# #””;;第第三三部部分分,,表表达达的的文文字字;;第第四四部部分分,,指指数数隔隔离离符符号号““# #””;;第第五五部部分分,,用用十十进进制制表表示示的的指指数数部部分分,,这一部分的数如果是这一部分的数如果是0 0可以省去不写现举例如下:可以省去不写现举例如下: 10#170# --(10#170# --(十进制数表示,等于十进制数表示,等于170)170) 2#1111_1110# --( 2#1111_1110# --(二进制数表示,等于二进制数表示,等于254)254) 16#FE# --( 16#FE# --(十六进制数表示,等于十六进制数表示,等于254254)) 16#F.01#E+2 --(16#F.01#E+2 --(十六进制数表示,等于十六进制数表示,等于3841.00)3841.00)(4)(4) 物理量文字物理量文字(VHDL(VHDL综合器不接受此类文字综合器不接受此类文字) )。

      如:如:60s(6060s(60秒秒) ),,100m(100100m(100米米) ),,kΩkΩ( (千欧姆千欧姆) ),,177A(177177A(177安培安培) ) 第第4 4章章 VHDLVHDL基础基础 2. 2. 字符串型文字字符串型文字 字字符符是是用用单单引引号号引引起起来来的的ASCIIASCII字字符符,,可可以以是是数数值值,,也也可可以以是是符符号号或或字字母母,,如如::‘‘R R’’,,‘‘A A’’,,‘‘* *’’,,‘‘Z Z’’而而字字符符串串则则是是一一维维的的字字符符数数组组,,须须放放在在双双引引号号中中VHDLVHDL中中有有两两种种类类型型的的字字符符串串::文文字字字字符符串串和和数数位位字符串 (1) (1) 文文字字字字符符串串::文文字字字字符符串串是是用用双双引引号号引引起起来来的的一一串文字,如:串文字,如: ““ERRORERROR””,,““BOTH BOTH S S AND AND Q Q EQUA EQUA TO TO L L””,,““X X””,,““BB$CCBB$CC”” 第第4 4章章 VHDLVHDL基础基础 (2) (2) 数数位位字字符符串串::数数位位字字符符串串也也称称位位矢矢量量,,是是预预定定义义的的数数据据类类型型BITBIT的的一一维维数数组组,,它它们们所所代代表表的的是是二二进进制制、、八八进进制制或或十十六六进进制制的的数数组组,,其其位位矢矢量量的的长长度度即即为为等等值值的二进制数的位数。

      的二进制数的位数 数数位位字字符符串串的的表表示示首首先先要要有有计计算算基基数数,,然然后后将将该该基基数数表表示示的的值值放放在在双双引引号号中中,,基基数数符符以以““B B””、、““O O””和和““X X””表表示示,,并并放放在在字字符符串串的的前前面面它它们们的的含含义义分分别别是:是:• B B::二二进进制制基基数数符符号号,,表表示示二二进进制制数数位位0 0或或1 1,,在在字字符串中每一个位表示一个符串中每一个位表示一个BITBIT• O O::八八进进制制基基数数符符号号,,在在字字符符串串中中的的每每一一个个数数代代表表一个八进制数,即代表一个一个八进制数,即代表一个3 3位位(BIT)(BIT)的二进制数的二进制数 第第4 4章章 VHDLVHDL基础基础 • X X::十十六六进进制制基基数数符符号号(0(0~~F)F),,字字符符串串中中的的每每一一位位代代表一个十六进制数,即代表一个表一个十六进制数,即代表一个4 4位的二进制数位的二进制数•例如:例如: B B““1_1101_11101_1101_1110”” -- --二进制数数组,位矢数组长度是二进制数数组,位矢数组长度是9 9 O O““1515”” -- -- 八进制数数组,位矢数组长度是八进制数数组,位矢数组长度是6 6 X X““AD0AD0”” -- --十六进制数数组,位矢数组长度是十六进制数数组,位矢数组长度是1212 第第4 4章章 VHDLVHDL基础基础 3.3.标识符标识符用来定义常数、变量、信号、端口、子程序或参数的名字。

      用来定义常数、变量、信号、端口、子程序或参数的名字规则:规则:•有效的字符:包括有效的字符:包括2626个大小写英文字母,数字包括个大小写英文字母,数字包括0 0~~9 9 以及下划线以及下划线““_ _””•任何标识符必须以英文字母开头任何标识符必须以英文字母开头•必须是单一下划线必须是单一下划线““_ _””,且其前后都必须有英文字母或,且其前后都必须有英文字母或数字•标识符中的英语字母不分大小写标识符中的英语字母不分大小写•VHDLVHDL的保留字不能用于作为标识符使用的保留字不能用于作为标识符使用 第第4 4章章 VHDLVHDL基础基础 标识符举例标识符举例例例: : •_Decoder F_Decoder F•2fft ,2fft ,sig_#nsig_#n, data_ _bus, return , data_ _bus, return •FFT, FFT, sig_nsig_n, state0, return1 , state0, return1 •VHDLVHDL‘‘9393版支持扩展标识符版支持扩展标识符 第第4 4章章 VHDLVHDL基础基础 4.4.4.4.下标名下标名下标名下标名指示数组型变量或信号的某一元素。

      表达形式:指示数组型变量或信号的某一元素表达形式: 语句格式:标识符(表达式)语句格式:标识符(表达式)如:如:Signal a, b: bit_vector(0 to 3);;Signal m: integer range 0 to 3;;•Signal x, y :bit•y <= a(m) ; -- 不可计算型下标表示不可计算型下标表示•z <= b(3) ; -- 可计算型下标表示可计算型下标表示 第第4 4章章 VHDLVHDL基础基础 对应数组中某一段元素,是多个下标名的组合表达形式:对应数组中某一段元素,是多个下标名的组合表达形式: 标识符(表达式标识符(表达式 方向方向 表达式)表达式)方向方向----- To ----- To 由低到高由低到高 DOWNTO DOWNTO 由高到低由高到低如:如:signal a, z: bit_vector(0 to 7)signal a, z: bit_vector(0 to 7);;-- 8-- 8位位矢量位位矢量 z(0 to 3)<=a(4 to 7)z(0 to 3)<=a(4 to 7);; ----以段的方式进行赋值以段的方式进行赋值 z(4 to 7)<=a(0 to 3)z(4 to 7)<=a(0 to 3);; ----以段的方式进行赋值以段的方式进行赋值 5.5.5.5.段名段名段名段名 第第4 4章章 VHDLVHDL基础基础 • 4.3.2 VHDL4.3.2 VHDL数据对象数据对象 在在VHDLVHDL中,数据对象中,数据对象(Data Objects)(Data Objects)类似于一种容类似于一种容器,它接受不同数据类型的赋值。

      数据对象有四种,即器,它接受不同数据类型的赋值数据对象有四种,即常量常量(CONSTANT)(CONSTANT)、、变量变量(VARIABLE)(VARIABLE)、信号、信号(SIGNAL)(SIGNAL)和文和文件(件(FILEFILE) 第第4 4章章 VHDLVHDL基础基础 • 1 1.常量.常量(CONSTANT)(CONSTANT) 常常量量的的定定义义和和设设置置主主要要是是为为了了使使设设计计实实体体中中的的常常数数更更容容易易阅阅读读和和修修改改例例如如,,将将位位矢矢的的宽宽度度定定义义为为一一个个常常量量,,只只要要修修改改这这个个常常量量就就能能很很容容易易地地改改变变宽宽度度,,从从而而改改变变硬硬件件结结构构在在程程序序中中,,常常量量是是一一个个恒恒定定不不变变的的值值,,一一旦旦作作了了数数据据类类型型的的赋赋值值定定义义后后,,在在程程序序中中不不能再改变,因而具有全局意义常量的定义形式如下:能再改变,因而具有全局意义常量的定义形式如下:• CONSTANT CONSTANT 常量名:数据类型常量名:数据类型:=:=表达式;表达式;例如:例如:• CONSTANT FBUS﹕BIT_VECTOR:=CONSTANT FBUS﹕BIT_VECTOR:=““010110010110””;;• CONSTANT VCC ﹕REAL:=5.0CONSTANT VCC ﹕REAL:=5.0;;• CONSTANT DELAY﹕TIME:=25 nsCONSTANT DELAY﹕TIME:=25 ns;; 第第4 4章章 VHDLVHDL基础基础 • VHDLVHDL要要求求所所定定义义的的常常量量数数据据类类型型必必须须与与表表达达式式的的数数据据类类型型一一致致。

      常常量量的的数数据据类类型型可可以以是是标标量量类类型型或或复复合合 类类 型型 ,, 但但 不不 能能 是是 文文 件件 类类 型型 (File)(File)或或 存存 取取 类类 型型(Access)(Access)• 常常量量定定义义语语句句所所允允许许的的设设计计单单元元有有实实体体、、结结构构体体、、程程序序包包、、块块、、进进程程和和子子程程序序在在程程序序包包中中定定义义的的常常量量可以暂不设具体数值,它可以在程序包体中设定可以暂不设具体数值,它可以在程序包体中设定• 常量的可视性,即常量的使用范围取决于它被定义常量的可视性,即常量的使用范围取决于它被定义的位置在程序包中定义的常量具有最大全局化特征,的位置在程序包中定义的常量具有最大全局化特征,可以用在调用此程序包的所有设计实体中;定义在设可以用在调用此程序包的所有设计实体中;定义在设计实体中的常量,其有效范围为这个实体定义的所有计实体中的常量,其有效范围为这个实体定义的所有的结构体;定义在设计实体的某一结构体中的常量,的结构体;定义在设计实体的某一结构体中的常量,则只能用于此结构体;定义在结构体的某一单元的常则只能用于此结构体;定义在结构体的某一单元的常量,如一个进程中,则这个常量只能用在这一进程中。

      量,如一个进程中,则这个常量只能用在这一进程中 第第4 4章章 VHDLVHDL基础基础 • 2 2.变量.变量(VARIABLE)(VARIABLE) 在在VHDLVHDL语语法法规规则则中中,,变变量量是是一一个个局局部部量量,,只只能能在在进进程程和和子子程程序序中中使使用用变变量量不不能能将将信信息息带带出出对对它它作作出出定定义义的的当当前前设设计计单单元元变变量量的的赋赋值值是是一一种种理理想想化化的的数数据据传传输输,,是是立立即即发发生生,,不不存存在在任任何何延延时时的的行行为为VHDLVHDL语语言言规规则则不不支支持持变变量量附附加加延延时时语句变量常用在实现某种算法的赋值语句中变量常用在实现某种算法的赋值语句中定义变量的语法格式如下:定义变量的语法格式如下: VARIABLE VARIABLE 变量名:数据类型变量名:数据类型:=:=初始值;初始值;例如:例如:•VARIABLE AVARIABLE A::INTEGERINTEGER;; ----定义定义A A为整数型变量为整数型变量•VARIABLE VARIABLE B B,,C C::INTEGER:=2INTEGER:=2;;----定定义义B B和和C C为为整整型型变变量量,,初初始始值为值为2 2•VARIABLE DVARIABLE D::BIT_VECTOR(0 TO 5)BIT_VECTOR(0 TO 5);;----定义定义b b为数组型变量为数组型变量 第第4 4章章 VHDLVHDL基础基础 变量数值的改变是通过变量赋值来实现的,其赋变量数值的改变是通过变量赋值来实现的,其赋值语句的语法格式如下:值语句的语法格式如下: 目标变量名目标变量名:=:=表达式;表达式;如:如: VARIABLE AVARIABLE A,,B B::BIT_VECTOR(0 TO 7);BIT_VECTOR(0 TO 7); VARIABLE X,Y: REAL; VARIABLE X,Y: REAL; X:=1.2; Y:=100.1+X; X:=1.2; Y:=100.1+X; A:= A:=““1010101110101011””; A(7):=; A(7):=‘‘0 0’’; ; 第第4 4章章 VHDLVHDL基础基础 变量的使用规则如下:变量的使用规则如下:(1)(1)变量赋值和初始化赋值都用变量赋值和初始化赋值都用““::= =””表示。

      表示2)(2)变量赋的初值不是预设的,某一时刻只能有一个值变量赋的初值不是预设的,某一时刻只能有一个值3)(3)变量不能用于在进程间传递数据变量不能用于在进程间传递数据4)(4)变量不能用于硬件连线和存储元件变量不能用于硬件连线和存储元件5)(5)仿真时,变量用于建模仿真时,变量用于建模; ;综合时,变量充当数据的暂存综合时,变量充当数据的暂存 第第4 4章章 VHDLVHDL基础基础 • 3. 3. 信号信号(SIGNAL)(SIGNAL) 信号是描述硬件系统的基本数据对象,它类似于信号是描述硬件系统的基本数据对象,它类似于连接线信号可以作为设计实体中并行语句模块间的连接线信号可以作为设计实体中并行语句模块间的信息交流通道在信息交流通道在VHDLVHDL中,信号及其相关的信号赋值中,信号及其相关的信号赋值语句、决断函数、延时语句等很好地描述了硬件系统语句、决断函数、延时语句等很好地描述了硬件系统的许多基本特征如硬件系统运行的并行性;信号传的许多基本特征如硬件系统运行的并行性;信号传输过程中的惯性延时特性;多驱动源的总线行为等输过程中的惯性延时特性;多驱动源的总线行为等。

      第第4 4章章 VHDLVHDL基础基础 • 信信号号作作为为一一种种数数值值容容器器,,不不但但可可以以容容纳纳当当前前值值,,也也可可以以保保持持历历史史值值这这一一属属性性与与触触发发器器的的记记忆忆功功能能有有很好的对应关系信号的定义格式如下:很好的对应关系信号的定义格式如下: SIGNAL SIGNAL 信号名:信号名: 数据类型数据类型:=:=初始值;初始值;• 信号初始值的设置不是必需的,而且初始值仅在信号初始值的设置不是必需的,而且初始值仅在VHDLVHDL的行为仿真中有效与变量相比,信号的硬件特的行为仿真中有效与变量相比,信号的硬件特征更为明显,它具有全局性特性征更为明显,它具有全局性特性 第第4 4章章 VHDLVHDL基础基础 •以下是信号的定义示例:以下是信号的定义示例:•SIGNAL S1SIGNAL S1::STD_LOGIG:=0STD_LOGIG:=0;; ----定义了一个标准位的单值信号定义了一个标准位的单值信号S1S1,,初始值为低电平初始值为低电平•SIGNAL S2SIGNAL S2,,S3S3::BITBIT;; ----定义了两个为定义了两个为BITBIT的信号的信号S2S2和和S3S3•SIGNAL S4SIGNAL S4:: STD_LOGIC_VECTOR(15 DOWNTO 0)STD_LOGIC_VECTOR(15 DOWNTO 0);; ----定定义义了了一一个个标标准准位位矢矢的的位位矢矢量量( (数数组组、、总总线线) )信信号号,,共共有有1616个信号元素个信号元素 第第4 4章章 VHDLVHDL基础基础 •信号赋值语法:信号赋值语法: 目标信号名目标信号名<=<=表达式;表达式;如如:signal a:std_logic_vector(15 :signal a:std_logic_vector(15 downtodownto 0); 0); a<=X a<=X””FBFCFBFC””; ; 第第4 4章章 VHDLVHDL基础基础 [ [例例] ]......SIGNAL aSIGNAL a,,b b,,c c,x,y:,x,y:INTEGERINTEGER;;......PROCESS(aPROCESS(a,,b b,,c) c) BEGINBEGIN xx<=a*b<=a*b;; yy<=<=cc- -x;x; xx<=b<=b;; END PROCESSEND PROCESS;;A,B,CA,B,C被列入敏感表被列入敏感表不发生赋值不发生赋值x被赋值x被赋值b b。

      在进程中允许同一信号有多个赋值源,其结果只有最后的赋值在进程中允许同一信号有多个赋值源,其结果只有最后的赋值语句被启动,并进行赋值操作语句被启动,并进行赋值操作 第第4 4章章 VHDLVHDL基础基础 信号和变量之间的区别信号和变量之间的区别•(1)(1)信号的代入过程与代入语句分开处理,执行代入语句不会使信号的代入过程与代入语句分开处理,执行代入语句不会使信号立即代入;而变量的赋值语句一旦执行,其值立即被赋予变信号立即代入;而变量的赋值语句一旦执行,其值立即被赋予变量•(2)(2)在进程中,信号可以列入敏感表,而变量不能列入敏感表在进程中,信号可以列入敏感表,而变量不能列入敏感表•(3)(3)仿真过程中,变量使用很少的存储器;而为了调度安排和处仿真过程中,变量使用很少的存储器;而为了调度安排和处理信号属性,信号需要存储更多的信息理信号属性,信号需要存储更多的信息 •(4)(4)信号可能需要使用信号可能需要使用WAITWAIT语句来为执行相同迭代做信号赋值的语句来为执行相同迭代做信号赋值的同步处理;而变量不存在这个问题同步处理;而变量不存在这个问题 第第4 4章章 VHDLVHDL基础基础 • 常量、信号、变量的常量、信号、变量的使用比较使用比较•(1) (1) 从从硬硬件件电电路路系系统统来来看看,,常常量量相相当当于于电电路路中中的的恒恒定定电电平平,,如如GNDGND或或VCCVCC接接口口,,而而变变量量和和信信号号则则相相当当于于组组合合电路系统中门与门间的连接及其连线上的信号值。

      电路系统中门与门间的连接及其连线上的信号值•(2) (2) 从行为仿真和从行为仿真和VHDLVHDL语句功能上看,信号和变量的语句功能上看,信号和变量的区别主要表现在接受和保持信息的方式、信息保持与区别主要表现在接受和保持信息的方式、信息保持与传递的区域大小上传递的区域大小上•(3) (3) 从综合后所对应的硬件电路结构来看,信号一般从综合后所对应的硬件电路结构来看,信号一般将对应更多的硬件结构,但在许多情况下,信号和变将对应更多的硬件结构,但在许多情况下,信号和变量并没有什么区别量并没有什么区别 •(4) (4) 虽然虽然VHDLVHDL仿真器允许变量和信号设置初始值,但仿真器允许变量和信号设置初始值,但在实际应用中,在实际应用中,VHDLVHDL综合器并不会把这些信息综合进综合器并不会把这些信息综合进去 第第4 4章章 VHDLVHDL基础基础 4.文件文件•IEEE STD1076-1987IEEE STD1076-1987中定义了中定义了TEXTIOTEXTIO程序包,它定义了几种文件程序包,它定义了几种文件I I//O O传输的方式例如:传输的方式例如:((1 1))procedure procedure Readline(FReadline(F::inTextinText;;L L::out Line)out Line);; --读入测试矢量文件的一行--读入测试矢量文件的一行 ((2 2))procedure procedure Writeline(FWriteline(F::outTextoutText;;L L::inLineinLine) );; --向测试文件中写一行测试矢量--向测试文件中写一行测试矢量 •这些文件这些文件I I//O O传输方式实际上是对一些过程的定义,调用这些过传输方式实际上是对一些过程的定义,调用这些过程就能完成数据的传递。

      程就能完成数据的传递 文件是传输大量数据的对象,可以包含一些专门数据类文件是传输大量数据的对象,可以包含一些专门数据类型的数值在系统仿真测试时,为方便控制及观察,测试的型的数值在系统仿真测试时,为方便控制及观察,测试的输入激励数据和仿真结果的输出都要用文件来进行输入激励数据和仿真结果的输出都要用文件来进行 第第4 4章章 VHDLVHDL基础基础 4.3.3 VHDL4.3.3 VHDL数据类型数据类型 • VHDLVHDL是一种强类型语言,要求设计实体中的每一是一种强类型语言,要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量都必个常数、信号、变量、函数以及设定的各种参量都必须具有确定的数据类型,并且只有数据类型相同的量须具有确定的数据类型,并且只有数据类型相同的量才能互相传递和作用才能互相传递和作用VHDLVHDL作为强类型语言的好处是作为强类型语言的好处是能使能使VHDLVHDL编译或综合工具很容易地找出设计中的各种编译或综合工具很容易地找出设计中的各种常见错误常见错误VHDLVHDL中的数据类型可以分成四大类中的数据类型可以分成四大类。

      第第4 4章章 VHDLVHDL基础基础 • 标标量量型型(SCALAR (SCALAR TYPE)TYPE)::属属单单元元素素的的最最基基本本的的数数据据类类型型,,通通常常用用于于描描述述一一个个单单值值数数据据对对象象,,它它包包括括实实数数类类型型、、整数类型、枚举类型和时间类型整数类型、枚举类型和时间类型• 复复合合类类型型(COMPOSITE (COMPOSITE TYPE)TYPE)::可可以以由由细细小小的的数数据据类类型型复复合合而而成成,,如如可可由由标标量量复复合合而而成成复复合合类类型型主主要要有有数数组型组型(ARRAY)(ARRAY)和记录型和记录型(RECORD)(RECORD)• 存存取取类类型型(ACCESS (ACCESS TYPE)TYPE)::为为给给定定的的数数据据类类型型的的数数据据对象提供存取方式对象提供存取方式• 文件类型文件类型(FILES TYPE)(FILES TYPE)::用于提供多值存取类型用于提供多值存取类型上述上述4 4大数据类型根据产生的来源又可分成预定义数据类型大数据类型根据产生的来源又可分成预定义数据类型和用户自定义数据类型两大类别。

      和用户自定义数据类型两大类别 第第4 4章章 VHDLVHDL基础基础 4.3.3.14.3.3.1..VHDLVHDL的预定义数据类型的预定义数据类型• VHDLVHDL的的预预定定义义数数据据类类型型都都是是在在VHDLVHDL标标准准程程序序包包STANDARDSTANDARD中中定定义义的的,,在在实实际际使使用用中中,,已已自自动动包包含含进进VHDLVHDL的源文件中,因而不必通过的源文件中,因而不必通过USEUSE语句以显式调用语句以显式调用 1) 1) 布尔布尔(BOOLEAN)(BOOLEAN)数据类型数据类型• 程序包程序包STANDARDSTANDARD中定义布尔数据类型的源代码如下:中定义布尔数据类型的源代码如下: TYPE BOOLEAN IS(FALSETYPE BOOLEAN IS(FALSE,,TRUE)TRUE);;• 布布尔尔数数据据类类型型实实际际上上是是一一个个二二值值枚枚举举型型数数据据类类型型,,它它的取值有的取值有FALSEFALSE和和TRUETRUE两种 第第4 4章章 VHDLVHDL基础基础 2) 2) 位位(BIT)(BIT)数据类型数据类型• 位位数数据据类类型型也也属属于于枚枚举举型型,,取取值值只只能能是是1 1或或0 0。

      位位数数据据类类型型的的数数据据对对象象,,如如变变量量、、信信号号等等,,可可以以参参与与逻逻辑辑运运算算,,运运算算结结果果仍仍是是位位的的数数据据类类型型VHDLVHDL综综合合器器用用一一个个二二进进制制位位表表示示BITBIT在程序包在程序包STANDARDSTANDARD中定义的源代码是:中定义的源代码是: TYPE BIT IS (TYPE BIT IS (‘‘0 0’’,,‘‘1 1’’) );;3) 3) 位矢量位矢量(BIT_VECTOR)(BIT_VECTOR)数据类型数据类型• 位矢量只是基于位矢量只是基于BITBIT数据类型的数组,在程序包数据类型的数组,在程序包 STANDARDSTANDARD中定义的源代码是:中定义的源代码是: TYPE BIT _VETOR IS ARRAY(NATURA RANGE<>)OF BITTYPE BIT _VETOR IS ARRAY(NATURA RANGE<>)OF BIT;; 第第4 4章章 VHDLVHDL基础基础 4) 4) 字符字符(CHARACTER)(CHARACTER)数据类型数据类型• 字符类型通常用单引号引起来,如字符类型通常用单引号引起来,如‘‘A A’’。

      字符类字符类型区分大小写,如型区分大小写,如‘‘B B’’不同于不同于‘‘b b’’字符类型已在字符类型已在STANDARDSTANDARD程序包中作了定义程序包中作了定义5) 5) 整数整数(INTEGER)(INTEGER)数据类型数据类型 整数类型的数代表正整数、负整数和零整数类型的数代表正整数、负整数和零•整数常量的书写方式示例如下:整数常量的书写方式示例如下:•2 --2 --十进制整数十进制整数•10E4 --10E4 --十进制整数十进制整数•16#D2# --16#D2# --十六进制整数十六进制整数•2#11011010# --2#11011010# --二进制整数二进制整数 第第4 4章章 VHDLVHDL基础基础 6) 6) 自然数自然数(NATURAL)(NATURAL)和正整数和正整数(POSITIVE)(POSITIVE)数据类型数据类型 自然数是整数的一个子类型,是非负的整数,即零和正整自然数是整数的一个子类型,是非负的整数,即零和正整数;正整数也是整数的一个子类型,它包括整数中非零和非负数;正整数也是整数的一个子类型,它包括整数中非零和非负的数值。

      它们在的数值它们在STANDARDSTANDARD程序包中定义的源代码如下:程序包中定义的源代码如下:SUBTYPE NATURA IS INTEGER RANGE 0 TO INTEGER 'HIGHSUBTYPE NATURA IS INTEGER RANGE 0 TO INTEGER 'HIGH;;SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGER 'HIGHSUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGER 'HIGH;; 第第4 4章章 VHDLVHDL基础基础 7) 7) 实数实数(REAL)(REAL)数据类型数据类型 VHDLVHDL的的实实数数类类型型类类似似于于数数学学上上的的实实数数,,或或称称浮浮点点数数实实数数的的取取值值范范围围为为-1.0E38-1.0E38~~+1.0E38+1.0E38通通常常情情况况下下,,实实数数类类型型仅仅能能在在VHDLVHDL仿仿真真器器中中使使用用,,VHDLVHDL综综合合器器不不支支持持实实数数,,因因为为实实数数类类型型的的实实现现相相当当复复杂杂,,目目前前在在电路规模上难以承受。

      电路规模上难以承受实数常量的书写方式举例如下:实数常量的书写方式举例如下: 65971.333333 --65971.333333 --十进制浮点数十进制浮点数 8#43.6#E+4 --8#43.6#E+4 --八进制浮点数八进制浮点数 43.6E-4 --43.6E-4 --十进制浮点数十进制浮点数 第第4 4章章 VHDLVHDL基础基础 8 8) ) 字符串字符串(STRING)(STRING)数据类型数据类型 字字符符串串数数据据类类型型是是字字符符数数据据类类型型的的一一个个非非约约束束型型数数组,或称为字符串数组字符串必须用双引号标明如:组,或称为字符串数组字符串必须用双引号标明如: VARIABLE STRING_VAR﹕STRING(1 TO 7)VARIABLE STRING_VAR﹕STRING(1 TO 7);; …… STRING_VAR﹕ STRING_VAR﹕““A B C DA B C D””;; 第第4 4章章 VHDLVHDL基础基础 9) 9) 时间时间(TIME)(TIME)数据类型数据类型• VHDLVHDL中中惟惟一一的的预预定定义义物物理理类类型型是是时时间间。

      完完整整的的时时间间类类型型包包括括整整数数和和物物理理量量单单位位两两部部分分,,整整数数和和单单位位之之间至少留一个空格,如间至少留一个空格,如55 ms55 ms,,20 ns20 ns STANDARD STANDARD 程序包中也定义了时间定义如下:程序包中也定义了时间定义如下: 第第4 4章章 VHDLVHDL基础基础 •TYPE TIME IS RANGE -2147483647 TO 2147483647TYPE TIME IS RANGE -2147483647 TO 2147483647•units units • fsfs;; ----飞秒,飞秒,VHDLVHDL中的最小时间单位中的最小时间单位• psps = 1000 = 1000 fsfs;; ----皮秒皮秒• ns = 1000 ns = 1000 psps;; ----纳秒纳秒• us = 1000 nsus = 1000 ns;; ----微秒微秒 • ms = 1000 usms = 1000 us;; ----毫秒毫秒• sec = 1000 mssec = 1000 ms;; ----秒秒• min = 60 secmin = 60 sec;; ----分分• hr = 60 minhr = 60 min;; ----时时•end end untisuntis;; 第第4 4章章 VHDLVHDL基础基础 10) 10) 错误等级错误等级(SEVERITY_LEVEL)(SEVERITY_LEVEL)• 在在VHDLVHDL仿真器中,错误等级用来指示设计系统的工作状仿真器中,错误等级用来指示设计系统的工作状态,共有四种可能的状态值:态,共有四种可能的状态值:NOTE(NOTE(注意注意) )、、WARNING(WARNING(警告警告) )、、ERROR(ERROR(出错出错) )、、FAILURE(FAILURE(失败失败) )。

      在仿真过程中,可输出这四在仿真过程中,可输出这四种值来提示被仿真系统当前的工作情况其定义如下:种值来提示被仿真系统当前的工作情况其定义如下: TYPE SEVERITY_LEVE IS (NOTETYPE SEVERITY_LEVE IS (NOTE,,WARNINGWARNING,,ERRORERROR,,FAILURE)FAILURE);; 第第4 4章章 VHDLVHDL基础基础 4.3.3.2. IEEE4.3.3.2. IEEE预定义标准逻辑位与矢量预定义标准逻辑位与矢量• 在在IEEEIEEE库库的的程程序序包包STD_LOGIC_1164STD_LOGIC_1164中中,,定定义义了了两两个个非非常常重重要要的的数数据据类类型型,,即即标标准准逻逻辑辑位位STD_LOGICSTD_LOGIC和和标标准准逻辑矢量逻辑矢量STD_LOGIC_VECTORSTD_LOGIC_VECTOR1)1)标准逻辑位标准逻辑位STD_LOGICSTD_LOGIC数据类型数据类型 以下是定义在以下是定义在IEEEIEEE库程序包库程序包STD_LOGIC_1164STD_LOGIC_1164中的数据类型。

      中的数据类型数据类型数据类型STD_LOGICSTD_LOGIC的定义如下所示:的定义如下所示:TYPE TYPE STD_LOGIC STD_LOGIC IS IS ( (‘‘U'U',,‘‘X'X',,‘‘0 0’’,,‘‘1'1',,‘‘Z'Z',,‘‘W'W',,‘‘L'L',,‘‘H'H',,‘‘-')-');;各值的含义是:各值的含义是: ‘‘U U’’----未初始化的,未初始化的,‘‘X X’’----强未知的,强未知的,‘‘0 0’’----强强0 0,,‘‘1 1’’----强强1 1,, ‘‘Z Z’’----高阻态,高阻态, ‘‘W W’’----弱未知的,弱未知的,‘‘L L’’----弱弱0 0,,‘‘H H’’----弱弱1 1,, ‘‘-'---'--忽略 第第4 4章章 VHDLVHDL基础基础 在程序中使用此数据类型前,需加入下面的语句:在程序中使用此数据类型前,需加入下面的语句:•LIBRARY IEEELIBRARY IEEE;;•USE IEEE.STD_LOGIC_1164.ALLUSE IEEE.STD_LOGIC_1164.ALL;; 由定义可见,由定义可见,STD_LOGICSTD_LOGIC是标准的是标准的BITBIT数据类型的扩数据类型的扩展,共定义了九种值。

      展,共定义了九种值 第第4 4章章 VHDLVHDL基础基础 2) 2) 标准逻辑矢量标准逻辑矢量(STD_LOGIC_VECTOR)(STD_LOGIC_VECTOR)数据类型数据类型STD_LOGIC_VECTORSTD_LOGIC_VECTOR类型定义如下:类型定义如下:•TYPE STD_LOGIC_VECTOR IS ARRAY (NATURA RANGE<>) OF STD_LOGIC;;•在使用中必须严格考虑位矢的宽度同位宽和数据类型的在使用中必须严格考虑位矢的宽度同位宽和数据类型的矢量间才能进行赋值矢量间才能进行赋值 •描述总线信号,使用描述总线信号,使用STD_LOGIC_VECTOR是最方便是最方便的,但需注意总线中的每一根信号线都必须定义为相同的,但需注意总线中的每一根信号线都必须定义为相同的数据类型的数据类型STD_LOGIC 第第4 4章章 VHDLVHDL基础基础 3. 3. 其他预定义标准数据类型其他预定义标准数据类型 VHDLVHDL综合工具配带的扩展程序包中,定义了一些有用综合工具配带的扩展程序包中,定义了一些有用的类型。

      如的类型如SynopsysSynopsys公司在公司在IEEEIEEE库中加入的程序包库中加入的程序包STD_LOGIC_ARITHSTD_LOGIC_ARITH中定义了如下的数据类型:无符号型中定义了如下的数据类型:无符号型(UNSIGNED)(UNSIGNED)、、有符号型有符号型(SIGNED)(SIGNED)和小整型和小整型(SMAL_INT)(SMAL_INT)在程序包在程序包STD_LOGIC_ARITHSTD_LOGIC_ARITH中的类型定义如下:中的类型定义如下:•TYPE UNSIGNED IS ARRAY (NATURA RANGE <>) OF STD_LOGICTYPE UNSIGNED IS ARRAY (NATURA RANGE <>) OF STD_LOGIC;;•TYPE SIGNED IS ARRAY (NATURA RANGE<>) OF STD_LOGICTYPE SIGNED IS ARRAY (NATURA RANGE<>) OF STD_LOGIC;;•SUBTYPE SMALL_INT IS INTEGER RANGE 0 TO 1SUBTYPE SMALL_INT IS INTEGER RANGE 0 TO 1;; 第第4 4章章 VHDLVHDL基础基础 如如果果将将信信号号或或变变量量定定义义为为这这几几个个数数据据类类型型,,就就可可以以使使用用本本程程序序包包中中定定义义的的运运算算符符。

      在在使使用用之之前前,,请请注注意必须加入下面的语句:意必须加入下面的语句: LIBRARY IEEELIBRARY IEEE;; USE IEEE.STD_LOGIC_ARITH.ALLUSE IEEE.STD_LOGIC_ARITH.ALL;; 第第4 4章章 VHDLVHDL基础基础 1) 1) 无符号数据类型无符号数据类型(UNSIGNED TYPE)(UNSIGNED TYPE) UNSIGNED UNSIGNED数据类型代表一个无符号的数值,在综合数据类型代表一个无符号的数值,在综合器中,这个数值被解释为一个二进制数,这个二进制数器中,这个数值被解释为一个二进制数,这个二进制数的最左位是其最高位的最左位是其最高位 [例] …… VARIABLE a:UNSIGNED( 0 TO 8); SIGNAL b:UNSIGNED(4 TO 0); 变量a有9位数值,最高位是a(0),而非a(8); 信号b有5位数值,最高位是b(4)2) 2) 有符号数据类型有符号数据类型(SIGNED TYPE)(SIGNED TYPE) SIGNED SIGNED数据类型表示一个有符号的数值,综合器将数据类型表示一个有符号的数值,综合器将其解释为补码,此数的最高位是符号位,例如:其解释为补码,此数的最高位是符号位,例如: SIGNED(SIGNED(““01010101””) ) 代表代表+5+5;; SIGNED(SIGNED(““11011101””) ) 代表代表-5-5。

      第第4 4章章 VHDLVHDL基础基础 4.3.3.3 4.3.3.3 用户自定义数据类型方式用户自定义数据类型方式 VHDLVHDL允许用户自行定义新的数据类型,它们可以允许用户自行定义新的数据类型,它们可以有多种,如枚举类型有多种,如枚举类型(ENUMERATION TYPE)(ENUMERATION TYPE)、、整数类型整数类型(INTEGER TYPE)(INTEGER TYPE)、、数组类型数组类型(ARRAY TYPE)(ARRAY TYPE)、、记录类型记录类型(RECORD TYPE)(RECORD TYPE)、、时间类型时间类型(TIME TYPE)(TIME TYPE)、、实数类型实数类型(REAL TYPE)(REAL TYPE)等,其定义数据类型是用等,其定义数据类型是用TYPETYPE类型定义语类型定义语句和句和SUBTYPESUBTYPE字类型定义语句实现的字类型定义语句实现的 第第4 4章章 VHDLVHDL基础基础 1) TYPE1) TYPE语句用法语句用法TYPETYPE语句语法结构如下:语句语法结构如下: TYPE TYPE 数据类型名数据类型名 IS IS 数据类型定义数据类型定义 [OF [OF 基本数据类型基本数据类型] ];;2) SUBTYPE2) SUBTYPE语句用法语句用法 子子类类型型SUBTYPESUBTYPE只只是是由由TYPETYPE所所定定义义的的原原数数据据类类型型的的一一个个子子集集,,它它满满足足原原数数据据类类型型的的所所有有约约束束条条件件,,原原数数据据类类型型称称为为基基本本数数据据类类型型。

      子子类类型型SUBTYPESUBTYPE的的语语句句格格式式如下:如下: SUBTYPE SUBTYPE 子类型名子类型名 IS IS 基本数据基本数据 RANGE RANGE 约束范围;约束范围; 第第4 4章章 VHDLVHDL基础基础 •自定义数据类型•1. 1. 枚举类型枚举类型 VHDLVHDL中中的的枚枚举举数数据据类类型型是是用用文文字字符符号号来来表表示示一一组组实实际际的的二二进进制制数数的的类类型型( (若若直直接接用用数数值值来来定定义义,,则则必必须须使使用单引号用单引号) )例例】】TYPE M_STATE IS( STATE1TYPE M_STATE IS( STATE1,,STATE2STATE2,,STATE3STATE3,,STATE4STATE4,,STATE5)STATE5);;SIGNAL CURRENT_STATESIGNAL CURRENT_STATE,,NEXT_STATENEXT_STATE::M_STATEM_STATE;;TYPE LOGIC IS TYPE LOGIC IS ((‘‘1 1’’, ,‘‘z z’’, ,‘‘u u’‘’‘0 0’’)); ;Signal s : LOGIC;Signal s : LOGIC; 在这里,信号在这里,信号CURRENT_STATECURRENT_STATE和和NEXT_STATENEXT_STATE的数据的数据类型定义为类型定义为M_STATEM_STATE,它们的取值范围是可枚举的,即,它们的取值范围是可枚举的,即从从STATE1STATE1~~STATE5STATE5共五种,而这些状态代表五组惟一的共五种,而这些状态代表五组惟一的二进制数值。

      二进制数值 第第4 4章章 VHDLVHDL基础基础 2 2.整数类型和实数类型.整数类型和实数类型 整整数数和和实实数数的的数数据据类类型型在在标标准准的的程程序序包包中中已已作作了了定定义义,,但但在在实实际际应应用用中中,,特特别别在在综综合合中中,,由由于于这这两两种种非非枚枚举举型型的的数数据据类类型型的的取取值值定定义义范范围围太太大大,,综综合合器器无无法进行综合法进行综合实际应用中,实际应用中,VHDLVHDL仿真器通常将整数或实数类型作为有仿真器通常将整数或实数类型作为有符号数处理,符号数处理,VHDLVHDL综合器对整数或实数的编码方法是:综合器对整数或实数的编码方法是:• 对对用用户户已已定定义义的的数数据据类类型型和和子子类类型型中中的的负负数数,,编编码为二进制补码;码为二进制补码;• 对对用用户户已已定定义义的的数数据据类类型型和和子子类类型型中中的的正正数数,,编编码为二进制原码码为二进制原码 第第4 4章章 VHDLVHDL基础基础 •【【例例】】• 数据类型定义数据类型定义 综合结果综合结果•TYPE N1 IS RANGE 0 TO 100TYPE N1 IS RANGE 0 TO 100;; --7--7位二进制原码位二进制原码•TYPE N2 IS RANGE 10 TO 100TYPE N2 IS RANGE 10 TO 100;; --7--7位二进制原码位二进制原码•TYPE N3 IS RANGE -100 TO 100TYPE N3 IS RANGE -100 TO 100;; --8--8位二进制补码位二进制补码•SUBTYPE N4 IS N3 RANGE 0 TO 6SUBTYPE N4 IS N3 RANGE 0 TO 6;;--3--3位二进制原码位二进制原码 第第4 4章章 VHDLVHDL基础基础 3 3.数组类型.数组类型 数数组组类类型型属属复复合合类类型型,,它它是是将将一一组组具具有有相相同同数数据据类类型型的的元元素素集集合合在在一一起起,,作作为为一一个个数数据据对对象象来来处处理理的的数数据据类类型型。

      数数组组可可以以是是一一维维( (每每个个元元素素只只有有一一个个下下标标) )数数组组或或多多维维数数组组( (每每个个元元素素有有多多个个下下标标) )VHDLVHDL仿仿真真器器支支持持多多维维数组,但数组,但VHDLVHDL综合器只支持一维数组综合器只支持一维数组 数数组组的的元元素素可可以以是是任任何何一一种种数数据据类类型型,,用用以以定定义义数数组组元元素素的的下下标标范范围围子子句句决决定定了了数数组组中中元元素素的的个个数数以以及及元元素的排序方向,即下标数是由低到高,或是由高到低素的排序方向,即下标数是由低到高,或是由高到低 第第4 4章章 VHDLVHDL基础基础 限定性数组定义语句格式如下:限定性数组定义语句格式如下: TYPE TYPE 数组名数组名 IS ARRAY (IS ARRAY (数组范围数组范围) OF) OF数据类型;数据类型; 其其中中,,数数组组名名是是新新定定义义的的限限定定性性数数组组类类型型的的名名称称,,可可以以是是任任何何标标识识符符,,其其类类型型与与数数组组元元素素相相同同;;数数组组范范围围明明确确指指出出数数组组元元素素的的定定义义数数量量和和排排序序方方式式,,以以整整数数来来表表示示其其数数组组的的下下标标;;数数据据类类型型即即指指数数组组各各元元素素的的数数据类型。

      据类型 第第4 4章章 VHDLVHDL基础基础 【【例例】】 TYPE STB IS ARRAY(7 DOWNTO 0) OF STD_LOGIC TYPE STB IS ARRAY(7 DOWNTO 0) OF STD_LOGIC;; 这这个个数数组组类类型型的的名名称称是是STBSTB,,它它有有八八个个元元素素,,它它的的下下标标排排序序是是7 7,,6 6,,5 5,,4 4,,3 3,,2 2,,1 1,,0 0,,各各元元素素的的排排序序是是STB(7)STB(7),,STB(6)STB(6),,……,,STB(1)STB(1),,STB(0)STB(0)例例】】 TYPE X IS (LOW TYPE X IS (LOW,,HIGH)HIGH);; TYPE DATA_BUS IS ARRAY (0 TO 7TYPE DATA_BUS IS ARRAY (0 TO 7,,X) OF BITX) OF BIT;; 首先定义首先定义X X为两元素的枚举数据类型,然后将为两元素的枚举数据类型,然后将DATA_BUSDATA_BUS定义为一个数组类型,其中每一元素的数据定义为一个数组类型,其中每一元素的数据类型是类型是BITBIT。

      第第4 4章章 VHDLVHDL基础基础 非限制性数组的定义语句格式如下:非限制性数组的定义语句格式如下: TYPE TYPE 数组名数组名 IS ARRAY (IS ARRAY (数组下标名数组下标名 RANGE<>) OF RANGE<>) OF 数据类型数据类型;; 其其中中,,数数组组名名是是定定义义的的非非限限制制性性数数组组类类型型的的取取名名;;数数组组下下标标名名是是以以整整数数类类型型设设定定的的一一个个数数组组下下标标名名称称;;符符号号““< < > >””是是下下标标范范围围待待定定符符号号,,用用到到该该数数组组类类型型时时,,再再填填入入具具体体的的数数值值范范围围;;数数据据类类型型是是数数组组中中每每一一元元素素的数据类型的数据类型 第第4 4章章 VHDLVHDL基础基础 【【例例】】TYPE BIT_VECTOR IS ARRAY(NATURA RANGE<>) OF BITTYPE BIT_VECTOR IS ARRAY(NATURA RANGE<>) OF BIT;;VARIABLE VAVARIABLE VA::BIT_VECTOR(1 TO 6)BIT_VECTOR(1 TO 6);;----将数组取值范围定在将数组取值范围定在1 1~~6 6【【例例】】TYPE REAL_MATRIX IS ARRAY (POSITIVE RANGE<>) OF REALTYPE REAL_MATRIX IS ARRAY (POSITIVE RANGE<>) OF REAL;;VARIABLE REAL_MATRIX_OBJECTVARIABLE REAL_MATRIX_OBJECT::REAL_MATRIX(1 TO 8)REAL_MATRIX(1 TO 8);;----限定范围限定范围【【例例】】 TYPE LOGIC_VECTOR IS ARRAY(NATURA RANGE<>TYPE LOGIC_VECTOR IS ARRAY(NATURA RANGE<>,,POSITIVE RANGE<>) POSITIVE RANGE<>) OF LOGICOF LOGIC;; VARIABLE L16_OBJECTVARIABLE L16_OBJECT::LOGIC_VECTOR(0 TO 7LOGIC_VECTOR(0 TO 7,,1 TO 2)1 TO 2);; ----限限定范围定范围 第第4 4章章 VHDLVHDL基础基础 4 4.记录类型.记录类型 由由已已定定义义的的、、数数据据类类型型不不同同的的对对象象元元素素构构成成的的数数组组称为记录类型的对象。

      定义记录类型的语句格式如下:称为记录类型的对象定义记录类型的语句格式如下: TYPE TYPE 记录类型名记录类型名 IS RECORD IS RECORD 元素名元素名 :: 元素数据类型;元素数据类型; 元素名元素名 :: 元素数据类型;元素数据类型; …… END RECORD [ END RECORD [记录类型名记录类型名] ];; 第第4 4章章 VHDLVHDL基础基础 【【例例】】•TYPE RECDATA IS RECORD --TYPE RECDATA IS RECORD --将将RECDATARECDATA定义为三元素记录类型定义为三元素记录类型• ELEMENT1 ﹕TIMEELEMENT1 ﹕TIME;; ----将元素将元素ELEMENT1ELEMENT1定义为时间类型定义为时间类型• ELEMENT2 ﹕TIMEELEMENT2 ﹕TIME;; ----将元素将元素ELEMENT2ELEMENT2定义为时间类型定义为时间类型• ELEMENT3 ﹕STD_LOGICELEMENT3 ﹕STD_LOGIC;;----将元素将元素ELEMENT3ELEMENT3定义为标准位类型定义为标准位类型•END RECORD RECDATAEND RECORD RECDATA;; 第第4 4章章 VHDLVHDL基础基础 【【例例】】 利用记录类型定义的一个微处理器命令信息表。

      利用记录类型定义的一个微处理器命令信息表•TYPE REGNAME IS (AXTYPE REGNAME IS (AX,,BXBX,,CXCX,,DX)DX);;•TYPE OPERATION IS RECORDTYPE OPERATION IS RECORD• OPSTR﹕STRING(1 TO 10) OPSTR﹕STRING(1 TO 10);;• OPCODE﹕BIT_VECTOR(3 DOWNTO 0)OPCODE﹕BIT_VECTOR(3 DOWNTO 0);;• OP1OP1,,OP2OP2,,RESRES::REGNAMEREGNAME;;•END RECORD OPERATIONEND RECORD OPERATION;; 第第4 4章章 VHDLVHDL基础基础 •VARIABLE INSTR1VARIABLE INSTR1,,INSTR2INSTR2::OPERATIONOPERATION;;•……•INSTR1:=("ADD AXINSTR1:=("ADD AX,,BX"BX",,"0001""0001",,AXAX,,BXBX,,AX)AX);;•INSTR2:=("ADD AXINSTR2:=("ADD AX,,BX"BX",,““0010"0010",,OTHERS=>BX)OTHERS=>BX);;•VARIABLE INSTR3﹕OPERATIONVARIABLE INSTR3﹕OPERATION;;•……•INSTR3.OPSTR:="MU AXINSTR3.OPSTR:="MU AX,,BX"BX";;•INSTR3.OP1:=AXINSTR3.OP1:=AX;; 第第4 4章章 VHDLVHDL基础基础 4.3.4VHDL4.3.4VHDL数据类型转换数据类型转换 由由于于VHDLVHDL是是一一种种强强类类型型语语言言,,这这就就意意味味着着即即使使对对于于非非常常接接近近的的数数据据类类型型的的数数据据对对象象,,在在相相互互操操作作时时,,也需要进行数据类型转换。

      也需要进行数据类型转换 1) 1) 类型转换函数方式类型转换函数方式 类类型型转转换换函函数数的的作作用用就就是是将将一一种种属属于于某某种种数数据据类类型的数据对象转换成属于另一种数据类型的数据对象型的数据对象转换成属于另一种数据类型的数据对象 第第4 4章章 VHDLVHDL基础基础 •【【例例】】•LIBRARY IEEELIBRARY IEEE;;•USE IEEE.STD_LOGIC_1164.ALLUSE IEEE.STD_LOGIC_1164.ALL;;•ENTITY CNT4 ISENTITY CNT4 IS•PORT(CLK﹕IN STD_LOGICPORT(CLK﹕IN STD_LOGIC;;• P﹕INOUT STD_LOGIC_VECTOR(3 DOWNTO 0))P﹕INOUT STD_LOGIC_VECTOR(3 DOWNTO 0));;•END ENTITY CNT4END ENTITY CNT4;; 第第4 4章章 VHDLVHDL基础基础 •LIBRARY DATAIOLIBRARY DATAIO;;•USE DATAIO.STD_LOGIC_OPS.ALLUSE DATAIO.STD_LOGIC_OPS.ALL•ARCHITECTURE ART OF CNT4 ISARCHITECTURE ART OF CNT4 IS•BEGINBEGIN•PROCESS(CLK)PROCESS(CLK)•BEGINBEGIN•IF CLK=IF CLK=‘‘1 1’’AND CLK'EVENT THENAND CLK'EVENT THEN•P<=TO_VECTOR(2P<=TO_VECTOR(2,,TO_INTEGER(P)+1)TO_INTEGER(P)+1);;•END IFEND IF;;•END PROCESSEND PROCESS;;•END ARCHITECTURE ARTEND ARCHITECTURE ART;; 第第4 4章章 VHDLVHDL基础基础 • 此此例例中中利利用用了了DATAIODATAIO库库中中的的程程序序包包STD_LOGIC_OPSSTD_LOGIC_OPS中中的的两两个个数数据据类类型型转转换换函函数数:: TO_VECTORTO_VECTOR和和TO_INTEGER(TO_INTEGER(前前者者 将将 INTEGER INTEGER 转转 换换 成成 STD_LOGIC_VECTORSTD_LOGIC_VECTOR,, 后后 者者 将将STD_LOGIC_VECTORSTD_LOGIC_VECTOR转换成转换成INTEGER)INTEGER)。

      第第4 4章章 VHDLVHDL基础基础 【【例例】】•FUCTION TO_BIT (S﹕STD_ULOGICFUCTION TO_BIT (S﹕STD_ULOGIC;;XMAP﹕BIT:=XMAP﹕BIT:=‘‘0 0’’)RETURN BIT)RETURN BIT;;•FUNCTION TO_BITVECTOR(S﹕STD_LOGIC_VECTORFUNCTION TO_BITVECTOR(S﹕STD_LOGIC_VECTOR;; XMAP﹕BIT:=XMAP﹕BIT:=‘‘0 0’’)RETURN BIT_VECTOR)RETURN BIT_VECTOR;;•FUNCTION TO_BITVECTOR(S﹕STD_ULOGIC_VECTORFUNCTION TO_BITVECTOR(S﹕STD_ULOGIC_VECTOR;; XMAP﹕BIT:=XMAP﹕BIT:=‘‘0 0’’)RETURN BIT_VECTOR)RETURN BIT_VECTOR;; 第第4 4章章 VHDLVHDL基础基础 下面是转换函数下面是转换函数TO_BITVECTORTO_BITVECTOR的函数体:的函数体:•FUNCTION TO_BITVECTOR(S﹕STD_LOGIC_VECTORFUNCTION TO_BITVECTOR(S﹕STD_LOGIC_VECTOR;; XMAP﹕BIT:=XMAP﹕BIT:=‘‘0 0’’)RETURN BIT_VECTOR IS )RETURN BIT_VECTOR IS •ALIAS SV﹕STD_LOGIC_VECTOR(S'LENGTH-1 DOWNTO 0) IS SALIAS SV﹕STD_LOGIC_VECTOR(S'LENGTH-1 DOWNTO 0) IS S;;•VARIABLE RESULT﹕BIT_VECTOR(S'LENGTH-1 DOWNTO 0)VARIABLE RESULT﹕BIT_VECTOR(S'LENGTH-1 DOWNTO 0);;•BEGINBEGIN•FOR I IN RESULT'RANGE LOOPFOR I IN RESULT'RANGE LOOP• CASE SV(I) IS CASE SV(I) IS• WHEN '0'|'L'=>RESULT(I):='0' WHEN '0'|'L'=>RESULT(I):='0';;• WHEN '1'|'H' =>RESULT(I):='1'WHEN '1'|'H' =>RESULT(I):='1';;• WHEN OTHERS=>RESULT(I)WHEN OTHERS=>RESULT(I)::=XMAP=XMAP;;• END CASEEND CASE;;•END LOOPEND LOOP;;•RETURN RESULTRETURN RESULT;;•END FUNCTION TO_BITVECTOREND FUNCTION TO_BITVECTOR;; 第第4 4章章 VHDLVHDL基础基础 2) 2) 直接类型转换方式直接类型转换方式 直接类型转换的一般语句格式是:直接类型转换的一般语句格式是: 数据类型标识符数据类型标识符( (表达式表达式) );;•一般情况下,直接类型转换仅限于非常关联一般情况下,直接类型转换仅限于非常关联( (数据类型数据类型相互间的关联性非常大相互间的关联性非常大) )的数据类型之间,必须遵循以的数据类型之间,必须遵循以下规则:下规则:• (1) (1) 所所有有的的抽抽象象数数字字类类型型是是非非常常关关联联的的类类型型( (如如整整型型、、浮浮点点型型) ),,如如果果浮浮点点数数转转换换为为整整数数,,则则转转换换结结果果是是最接近的一个整型数。

      最接近的一个整型数 第第4 4章章 VHDLVHDL基础基础 • (2) (2) 如如果果两两个个数数组组有有相相同同的的维维数数,,且且两两个个数数组组的的元元素素是是同同一一类类型型,,并并且且在在各各处处的的下下标标范范围围内内索索引引是是同同一一类类型或非常接近的类型,那么这两个数组是非常关联类型型或非常接近的类型,那么这两个数组是非常关联类型• (3) (3) 枚举型不能被转换枚举型不能被转换 如果类型标识符所指的是非限定数组,则结果会将如果类型标识符所指的是非限定数组,则结果会将被转换的数组的下标范围去掉,即成为非限定数组被转换的数组的下标范围去掉,即成为非限定数组 第第4 4章章 VHDLVHDL基础基础 •【【例例】】• VARIABLE DATAC VARIABLE DATAC,,PARAMCPARAMC::INTEGERINTEGER;;• ……• DATAC:=INTEGER(74.94*REAL(PARAMC)) DATAC:=INTEGER(74.94*REAL(PARAMC));;•【【例例】】• •VARIABLE aVARIABLE aVARIABLE aVARIABLE a::::INTEGERINTEGERINTEGERINTEGER;;;;• •VARIABLE bVARIABLE bVARIABLE bVARIABLE b::::REALREALREALREAL;;;;• •a a a a::::= = = = INTEGER(bINTEGER(bINTEGER(bINTEGER(b) ) ) );;;;• •b b b b::::= = = = REAL(aREAL(aREAL(aREAL(a) ) ) );;;; • •--------注意:实数转换成整数时会发生舍入误差注意:实数转换成整数时会发生舍入误差• 在在类类型型与与其其子子类类型型之之间间无无需需类类型型转转换换。

      即即使使两两个个数数组组的的下下标标索索引引方方向向不不同同,,这这两两个个数数组组仍仍有有可可能能是是非非常关联类型的常关联类型的 第第4 4章章 VHDLVHDL基础基础 4.4 VHDL4.4 VHDL操作符操作符• VHDLVHDL的的各各种种表表达达式式由由操操作作数数和和操操作作符符组组成成,,其其中中,,操操作作数数是是各各种种运运算算的的对对象象,,而而操操作作符符则则规规定定运运算算的的方方式• 1 1.操作符种类及对应的操作数类型.操作符种类及对应的操作数类型• 在在VHDLVHDL中,一般有四类操作符,即逻辑操作符中,一般有四类操作符,即逻辑操作符( (LogicaLogica Operator) Operator)、、关系操作符关系操作符( (RelationaRelationa Operator)Operator)、、算术操作符算术操作符(Arithmetic Operator)(Arithmetic Operator)和符和符号操作符号操作符(Sign Operator)(Sign Operator),,前三类操作符是完成逻辑前三类操作符是完成逻辑和算术运算的最基本的操作符的单元。

      和算术运算的最基本的操作符的单元 第第4 4章章 VHDLVHDL基础基础 • 此此外外还还有有重重载载操操作作符符(Overloading (Overloading Operator)Operator),,它它是是对对基基本本操操作作符符作作了了重重新新定定义义的的函函数数型型操操作作符符各各种种操操作作符符所所要要求求的的操操作作数数的的类类型型详详见见表表4.14.1,,操操作作符符之之间的优先级别见表间的优先级别见表4.24.2 第第4 4章章 VHDLVHDL基础基础 表4.1 VHDL操作符列表 第第4 4章章 VHDLVHDL基础基础 第第4 4章章 VHDLVHDL基础基础 表4.2 VHDL操作符优先级 第第4 4章章 VHDLVHDL基础基础 2 2.各种操作符的使用说明.各种操作符的使用说明•(1) (1) 严严格格遵遵循循在在基基本本操操作作符符间间操操作作数数是是同同数数据据类类型型的的规规则则;;严严格格遵遵循循操操作作数数的的数数据据类类型型必必须须与与操操作作符符所所要要求的数据类型完全一致的规则。

      求的数据类型完全一致的规则•(2) (2) 注注意意操操作作符符之之间间的的优优先先级级别别当当一一个个表表达达式式中中有有两个以上的运算符时,可使用括号将这些运算分组两个以上的运算符时,可使用括号将这些运算分组 第第4 4章章 VHDLVHDL基础基础 •(3) VHDL(3) VHDL共有七种基本逻辑操作符,对于数组型共有七种基本逻辑操作符,对于数组型( (如如STD_LOGIC_VECTOR)STD_LOGIC_VECTOR)数据对象的相互作用是按位进行的数据对象的相互作用是按位进行的 •(4) (4) 关系操作符的作用是将相同数据类型的数据对象进行关系操作符的作用是将相同数据类型的数据对象进行数值比较数值比较(=(=、、/=)/=)或关系排序判断或关系排序判断(<(<、、<=<=、、> > 、、>=)>=),并将,并将结果以布尔类型结果以布尔类型(BOOLEAN)(BOOLEAN)的数据表示出来,即的数据表示出来,即TRUETRUE或或FALSEFALSE两种 •(5) (5) 表表4.14.1中中所所列列的的1717种种算算术术操操作作符符可可以以分分为为求求和和操操作作符符、、求求积积操操作作符符、、符符号号操操作作符符、、混混合合操操作作符符、、移移位位操操作作符符等等五五类操作符。

      类操作符 第第4 4章章 VHDLVHDL基础基础 A.逻辑操作符逻辑操作符•通常在一个表达式中有两个以上的算符时,需要使用括号通常在一个表达式中有两个以上的算符时,需要使用括号将这些运算分组如果一串运算中的算符相同,且是将这些运算分组如果一串运算中的算符相同,且是AND、、OR、、XOR中的一种时,则不需使用括号,中的一种时,则不需使用括号,•例如:例如:•A AND B AND C AND D•(A OR B) XOR C 第第4 4章章 VHDLVHDL基础基础 •【【例例】】• SIGNAL a ,,b,,c : STD_LOGIC_VECTOR (3 DOWNTO 0) ;;• SIGNAL d,,e,,f,,g : STD_LOGIC_VECTOR (1 DOWNTO 0) ;;• SIGNAL h,,I,,j,,k : STD_LOGIC ;;• SIGNAL l,,m,,n,,o,,p : BOOLEAN ;;• ...• a<=b AND c; --b、、c 相与后向相与后向a赋值,赋值,a、、b、、c的数据类型同属的数据类型同属4位长的位矢量位长的位矢量• d<=e OR f OR g ; -- 两个操作符两个操作符OR相同,不需括号相同,不需括号• h<=(i NAND j)NAND k ;; -- NAND不属上述三种算符中的一种,必须加括号不属上述三种算符中的一种,必须加括号• l<=(m XOR n)AND(o XOR p); -- 操作符不同,必须加括号操作符不同,必须加括号• h<=i AND j AND k ; -- 两个操作符都是两个操作符都是AND,不必加括号,不必加括号• h<=i AND j OR k ; -- 两个操作符不同,未加括号,表达错误两个操作符不同,未加括号,表达错误• a<=b AND e ; -- 操作数操作数b 与与 e的位矢长度不一致,表达错误的位矢长度不一致,表达错误• h<=i OR l ; -- i 的数据类型是位的数据类型是位STD_LOGIC,而,而l的数据类型是布尔量的数据类型是布尔量 --因而不能相互作用,表达错误。

      因而不能相互作用,表达错误 第第4 4章章 VHDLVHDL基础基础 B.关系操作符关系操作符【【例例】】 ENTITY relational_ops_1 IS PORT ( a,,b : IN BIT__VECTOR (0 TO 3) ; m : OUT BOOLEAN) ; END relational_ops_1 ; ARCHITECTURE example OF relational_ops_1 IS BEGIN output <= (a = b) ; END example ; 【【例例】】 ENTITY relational_ops_2 IS PORT (a,,b : IN INTEGER RANGE 0 TO 3 ; m : OUT BOOLEAN) ; END relational_ops_2 ; ARCHITECTURE example OF relational_ops_2 IS BEGIN output <= (a >= b) ; END example ;六种关系运算操六种关系运算操作符:作符:“ = ”(等于等于)、、“/=”(不等于不等于)、、“ >”(大于大于)、、“< ”(小于小于)、、“>=”(大于等于大于等于)“<=”(小于等于小于等于) 第第4 4章章 VHDLVHDL基础基础 【【例例】】 PACKAGE example_arithmetic IS TYPE small_INt IS RANGE 0 TO 7 ; END example_arithmetic ; USE WORK.example_arithmetic.ALL ; ENTITY arithmetic IS PORT (a,,b : IN SMALL_INT ; c : OUT SMALL_INT) ; END arithmetic ; ARCHITECTURE example OF arithmetic IS BEGIN c <= a + b ; END example ; C1.C1.求和操作符(求和操作符(+ +、、- -、、& &)) 第第4 4章章 VHDLVHDL基础基础 并置运算符并置运算符&•并置运算符将普通操作数或数组组合起来形成新的数组。

      并置运算符将普通操作数或数组组合起来形成新的数组•例:例:Signal a1,a2:std_logic_vector(3 downto 0);Signal b,c:std_logic_vector(1 downto 0);……a1<=b&c;;A2<=“10”&b; 第第4 4章章 VHDLVHDL基础基础 C2. C2. 求积操作符求积操作符算术操作符算术操作符C3. C3. 符号操作符符号操作符求积操作符包括求积操作符包括 * * ( (乘乘) )、、 / (/ (除除) )、、MOD(MOD(取模取模) )和和RED(RED(取余取余) )四种操作符四种操作符符号操作符符号操作符““+”+”和和““--””的操作数只有的操作数只有一个一个 第第4 4章章 VHDLVHDL基础基础 算术操作符算术操作符C4. C4. 混合操作符混合操作符【【例例】】SIGNAL aSIGNAL a,,b : INTEGER RANGE b : INTEGER RANGE --8 to 7 ;8 to 7 ;SIGNAL c : INTEGER RANGE 0 to 15 ;SIGNAL c : INTEGER RANGE 0 to 15 ;SIGNAL d : INTEGER RANGE 0 to 3 ;SIGNAL d : INTEGER RANGE 0 to 3 ;a <= ABS(b) ;a <= ABS(b) ; c <= 2 ** d ; c <= 2 ** d ;混合操作符包括乘方混合操作符包括乘方“**”“**”操作符和取操作符和取绝对值绝对值““ABS”ABS”操作符两种操作符两种 第第4 4章章 VHDLVHDL基础基础 •移位操作符的语句格式是:移位操作符的语句格式是: 标识符号标识符号 移位操作符号移位操作符号 移位位数;移位位数;•例如:将例如:将““11011101””执行各种执行各种1 1位移位操作,其移位操作后的位移位操作,其移位操作后的结果如图结果如图4.14.1所示。

      所示•VARIABLE V1VARIABLE V1::STD_LOGIC_VECTOR(3 DOWNTO 0):=('1','1','0','1');STD_LOGIC_VECTOR(3 DOWNTO 0):=('1','1','0','1');• V1 SLL 1 V1 SLL 1;; --('1','0','1','0');--('1','0','1','0'); C5. C5. 移位操作符移位操作符 第第4 4章章 VHDLVHDL基础基础 图4.1 “1101”执行各种移位操作后的结果示意图 第第4 4章章 VHDLVHDL基础基础 3 3.重载操作符.重载操作符• 为为了了方方便便各各种种不不同同数数据据类类型型间间的的运运算算,,VHDLVHDL允允许许用用户户对对原原有有的的基基本本操操作作符符重重新新定定义义,,赋赋予予新新的的含含义义和和功功能能,,从从而而建建立立一一种种新新的的操操作作符符,,这这就就是是重重载载操操作作符符,,定定义义这这种种操操作作符符的的函函数数称称为为重重载载函函数数事事实实上上,,在在程程序序包包STD_LOGIC_UNSIGNEDSTD_LOGIC_UNSIGNED中中已已定定义义了了多多种种可可供供不不同同数数据类型间操作的算符重载函数。

      据类型间操作的算符重载函数 第第4 4章章 VHDLVHDL基础基础 SynopsysSynopsys的程序包的程序包 STD_LOGIC_ARITHSTD_LOGIC_ARITH、、STD_LOGIC_UNSIGNEDSTD_LOGIC_UNSIGNED和和STD_LOGIC_SIGNEDSTD_LOGIC_SIGNED中已经为许多类型的运算重载了算术中已经为许多类型的运算重载了算术运算符和关系运算符,因此只要引用这些程序包,运算符和关系运算符,因此只要引用这些程序包,SINGENDSINGEND、、UNSIGENDUNSIGEND、、STD_LOGIC STD_LOGIC 和和 INTEGERINTEGER之间即可混合运算,之间即可混合运算,INTEGERINTEGER、、STD_LOGICSTD_LOGIC和和 STD_LOGIC_VECTORSTD_LOGIC_VECTOR之间也可以混合运之间也可以混合运算。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.