《VHDL语言数据类型及相互转换.doc》由会员分享,可在线阅读,更多相关《VHDL语言数据类型及相互转换.doc(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、标准数据类型1,整数(INTEGER)范围:-2147483547-21474836462,实数(REAL)范围:-1.0E38-1.0E38 (综合器不支持)书写时一定要有小数.3,位(BIT)在数字系统中,信号经常用位的值表示,位的值用带单引号的1和0来表示标准数据类型4,位矢量(BIT_VECTOR)位矢量是用双引号括起来的一组位数据0101015,布尔量(BOOLEAN)只有真和假两个状态,可以进行关系运算6,字符(CHARACTER)字符量通常用单引号括起来,对大小写敏感明确说明1是字符时: CHARACTER(1) 标准数据类型7,字符串(STRING)字符串是双引号括起来的由字母
2、,数字或,%,$组成的一串字符.区分大小写laksdklakld 10101010108,时间(TIME)时间的单位:fs,ps,ns,ms,sec,min,hr例: 10 ns整数数值和单位之间应有空格标准数据类型9,错误等级(SEVERITY LEVEL)在VHDL仿真器中,错误等级用来表示系统的状态,它共有4种:NOTE(注意)WARNING(警告)ERROR(错误)FAILURE(失败)标准数据类型10,自然数(NATURAL) 正整数(POSITIVE)自然数是整数的一个子类型,包括0和正整数;正整数也是整数的一个子类型.只能是正整数数据除定义类型外,有时还需要定义约束范围.INTE
3、GER RANGE 100 DOWNTO 0BIT_ VECTOR (3 DOWNTO 0)REAL RANGE 2.0 TO 30.0IEEE定义的逻辑位与矢量在IEEE的程序包std_logic_1164中定义了两个非常重要的数据类型:1 ,std_logic 取值:0,1,Z,X,W,L,HZ:高阻 X:不定 W:弱信号不定 L:弱信号0 H:弱信号12,Std_logic_vector注 意1,在使用std_logic和std_logic_vector时,在程序中必须声明库及程序包说明语句,即LIBRARY ieee和std_logic_1164.ALL这两句在程序中必不可少.2, s
4、td_logic有多个取值,与BIT不同,在编程时应特别注意,需要考虑全所有情况.用户自定义的数据类型1,枚举类型格式:TYPE 数据类型名 IS(元素,元素,);TYPE STD_LOGIC IS(U,X,0,1,Z,W,L,H,-);TYPE week IS (Sun,Mon,Tue,wed,Thu,Fri,Sat);TYPE color IS (red,green,yellow,blue) TYPE lift_state IS(stopon1,doorpeen,doorclose, doorwait1, doorwait2, doorwait3, doorwait4, doorwait5
5、,up,down,stop) 枚举类型的声明TYPE color IS (red,green,yellow,blue);VARIABLE A:COLOR;SIGNAL B:COLOR;A:=RED;B=YELLOW;TYPE lever IS (0,1,z);SIGNAL V:lever;V=1;用户自定义的数据类型2,整数(INTEGER)格式:TYPE 数据类型名 IS 数据类型定义 约束范围例 TYPE digit IS INTEGER RANGE 0 TO 9 VARIABLE A:DIGIT;A:=5;A:=28;用户自定义的数据类型3,实数(REAL)格式:TYPE 数据类型名 I
6、S 数据类型定义 约束范围TYPE current IS REAL RANGE -1E4 TO 1E4 VARIABLE A:CURRENT;A:=1E3;A:=1E10;用户自定义的数据类型4,数组(ARRAY)格式:TYPE 数据类型名 IS ARRAY 范围 OF 原数据类型名;例:TYPE word IS ARRAY (1 TO 8) OF STD_LOGIC;TYPE word IS ARRAY (INTEGER 1 TO 8) OF STD_LOGIC;数组常在总线,ROM和RAM中使用. 用户自定义的数据类型5,记录(RECODE) 类型将不同的数据类型放在一块,就是记录类型数据
7、格式:TYPE 记录类型名 IS RECORD元素名:数据类型名;元素名:数据类型名;:END RECORD记录类型名; 记录(RECODE) 类型例:TYPE bank IS RECORDaddr0: STD_LOGIC_VECTOR(7 DOWNTO 0);addr1: STD_LOGIC_VECTOR(7 DOWNTO 0);r0: INTEGER;END RECORD; 记录(RECODE) 类型例:CONSTANT LEN:integer:=100;TYPE array logic IS ARRAY (99 downto 0)OF STD_LOGIC_VECTOR(7 DOWNTO
8、0)TYPE table IS RECORDa: array logic;b: STD_LOGIC_VECTOR(7 DOWNTO 0);c: integer RANGE 0 to len ;END RECORD; 数据类型的转换数据类型转换函数有VHDL语言的包提供例如:STD_LOGIC_1164,STD_LOGIC_ARITHSTD_LOGIC_UNSIGNED等等 函数说明1、STD_LOGIC_1164包TO_STDLOGIC_VECTOR(A)TO_BITVECTOR(A)TO_LOGIC(A)TO_BIT(A)由BIT_VECTOR转换成STD_LOGIC_VECTOR由STD_
9、LOGIC_VECTOR转换成BIT_VECTOR由BIT转换成STD_LOGIC由STD_LOGIC转换成BIT2、STD_LOGIC_ARITH包CONV_STD_LOGIC_VECTOR(A,位长)CONV_INTEGER(A)由INTEGER,UNSIGNED和SIGNED转换成STD_LOGIC_VECTOR由UNSIGNED和SIGNED转换成INTEGER3、STD_LOGIC_UNSIGNED包CONV_INTEGER(A)_STD_LOGIC_VECTOR转换成INTEGERVHDL属性VHDL没有一般程序语言中的那些运算类标准函数,取而代之的是多种能反映和影响硬件行为的属性
10、.属性在描述时序电路的VHDL设计文件中几乎处处可见,如检测上升沿,下降沿,知道前一次发生的事件.VHDL属性属性指的是关于实体,结构体,类型及信号的一些特征.有的属性对综合(设计)非常有用.VHDL的属性可分为数值类属性,函数类属性,范围类属性,信号类属性,类型类属性.其引用的一般形式为:对象属性.数值类属性数值类属性用于返回数组,块或一般数据的有关值,如边界,数组长度等信息.对一般的数据有4种数值类属性:对象类型的左边界,右边界,上边界,下边界,对应的关键字是:LEFT,RIGHT,HIGH,LOW.数组在加一个长度属性LENGTH.数值类属性sdown:IN std_logic_vect
11、or(8 DOWNTO 0);sup:IN std_logic-vector(0 to 8);这两个信号的各属性值如下:sdownleft=8; sdownright=0; sdownlow=0; sdownhigh=8; sdownlength=9;supleft=0; supright=8; suplow=0; suphigh=8; suplength=9;数值类属性TYPE bit32 IS ARRAY (63 DOWNTO 32)OF BITVARIABLE:left_range,right_range,up_range,low_range,len:INTEGER;BEGIN left
12、-range:=bit32LEFT; -return 63right-range:=bit32RIGHT; -return 32up-range:=bit32HIGH; -return 63low-range:=bit32LOW; -return 32len:=bit32LENGTH; -return 32函数类属性信号属性函数属于函数类属性,用来返回有关信号行为功能的信息.共有5种信号属性函数,分别是: EVENT(事件) ; ACTIVE(活跃); LAST_EVENT (最近一次事件到现在经过多少时间); LAST_ACTIVE (最近一次活跃到现在经过多少时间); LAST_VALUE
13、(信号变化前的取值是什么)EVENTEVENT:它的值为布尔型,取值为TRUE或FALSE;如果刚好有事件发生在该属性所附着的信号上(即信号有变化),取值为TRUE.利用此属性可决定时钟边沿是否有效,即时钟是否发生.EVENTSIGNAL clk: IN std_logic;clk EVENT AND clk=1 clk=1 AND clk EVENTclk EVENT AND clk=0clk=0 AND clk EVENTrising_edge(clk) falling_edge(clk)EVENT 和ACTIVEEVENT 要求信号值发生变化;1到0,0到1ACTIVE 信号值的任何变化
14、,1到1,1 到0,0到1,0到0;所有的事件都是活跃,但并非所有的活跃都是事件范围类属性RANGE属性,其生成一个限制性数据对象的范围.例 SIGNAL data_bus:std_logic_vector(15 DOWNTO 0);data_bus RANGE=15 downto 0用VHDL语言设计分频电路,把1KHZ的时钟分至约1HZ左右的时钟LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider ISPORT (Clkin:IN Std_Logic; Clkout:OUT Std_Logic);END;ARCHITECTUR
15、E Devider OF FreDevider ISCONSTANT N:Integer:=499;signal counter:Integer range 0 to N;signal Clk:Std_Logic;BEGIN PROCESS(Clkin) begin IF rising_edge(Clkin)THEN IF Counter=N then counter=0; Clk=not clk; else counter=counter+1; end if; end if; end process; clkout=clk;end; 14 ; ( ) : - = 00 ( ) - _- .
16、器 支 时 要 :数 : 在 中 信 常 位 )表 _位 带 号_ 准 _ ( 时 时 至 分 电计 语 矢 是 引 ; _ _ :_ 围象数制个,属 属是活所并跃件的;0到, ,何值 0到化发号 ) ( _ 0定. 0 ) 0 围义需有类除数整.一整是正数和型子数是然) (正 数, 类标)失 )( )告 )( 有它的示用等,仿 等错据格间和数0: , 单时 间 0 大区串成,字母来括引字) 字据标 :是明小大括单通字 字 关进态个真只 量, 数一起=0= = = ; _ : 生钟,有沿定可此. )变号上着所在件好如 取尔值它 么值的号 时过经到近最 )间经到事近( 跃 ) 别,属号有息功号关
17、回用数属函号性数 = - : - - : - , , , , ) 属值; = = ; = = 0 0 如性号两; ( - _ ; _ : 值 度一在 , , 字的应下界界右边类:属数据的.等组界边有的或,回性类类数属:形一引属类性类性围,类属数可的 常)合综的征一及,构实于性性 事发前,沿沿检见处乎计 的序描性性为硬映能是而数标类那语程有 转 _) 包 _ 、 换 成 , 由) 长, _ _ 转 _型; )0 ( _ :; : ) _ ) 0 : ) ( _ ( : :型) (录名 :;据素;类据素 名录 格据录是,在据的型) 录 类义自. 在组 _ ) :;类数 围 名据 : 组类义自用 : = : 范约定数 型据 式 (实数的用= :; : 0 例范 型据 型数 式 整数义户= : ) ; : : ; : ), 型枚) , , , , ) , ) , ,( _ ),元 型据 举枚型的自用情有要,特时编不 ,有 _ 少必程句这. 和 句包及声中在 用在 号:0弱定信 不阻 , ,值 :类数非了定 程 在与位 成数 类 成转 _ _ 换 ( ) _ _ _ _ 、说数等 _ _ _ _:供言 有转
限制150内