1、数据对象(Data Objects):,凡是可以被赋予一个值的对象称为数据对象,,数据对象用于传递信号。,例 :,数据对象名,数据对象类型,数据对象值的类型,执行结果为:,x=c xor b, y=c xor b,执行结果为:,x=c xor a, y=c xor b,本讲导航:,VHDL语言像其它高级语言一样,具有多种数据类型,正是由于这些数据类型的存在,才使得VHDL语言在描述硬件电路时具有较好的灵活性。一般来说,VHDL语言中的数据类型按照其产生的来源可以分为两大类:标准定义的数据类型和用户定义的数据类型。下面将对这两类数据类型进行讨论。,2.2 VHDL语言数据类型,标准数据类型,*,
2、*,*,用户定义的数据类型,TYPE 数据类型名 ,数据类型名 数据类型定义;,枚举(Enumerated)类型; 数组(Array)类型; 记录(Recode)类型; 时间(Time)类型(物理类型); 用户定义的子类型。,枚举(Enumerated) 类型TYPE 数据类型名 IS (元素,元素, );例: TYPE month IS (January February March April May June July August September October November December),数组(Array) 类型TYPE 数据类型名 IS ARRAY 范围 OF 原数据
3、类型名;例: TYPE word IS ARRAY (15 DOWNTO 0) OF BIT;TYPE doubleword IS ARRAY (natural RANGE) OF STD_LOGIC;SIGNAL a: doubleword (3 DOWNTO 0);,默认为整数类型,时间(Time) 类型(物理类型)TYPE 数据类型名 IS 范围;UNITS 基本单位;单位;END UNITS; 例: TYPE time IS RANGE 1E18 TO 1E18;UNITSfs;ps=1000fs;ns=1000ps;us=1000ns;ms=1000 s;sec=1000ms;min
4、=60sec;hr=60min;END UNITS;,记录 (Record) 类型TYPE 数据类型名 IS RECORD ;元素名:数据类型名;元素名:数据类型名;END RECORD; 例: TYPE bank IS RECORD ;addr0: STD_LOGIC_VECTOR(7 DOWNTO 0);addr1: STD_LOGIC_VECTOR(7 DOWNTO 0);r0: INTEGER;inst: instruction;END RECORD;SIGNAL addbus1, addbus2:STD_LOGIC_VECTOR(7 DOWNTO 0)SIGNAL result: I
5、NTEGER;SIGNAL alu_code: instruction;SIGNAL r_bank: bank :=(“0000000”, “0000001”, 0, ADD);addbus1=r_rank.addr1;r_bank.inst= SUB;,TYPE instruction IS (ADD, SUB, INC, SRL, SPF,LDA,LDB,XFR);,用户定义的子类型,SUBTYPE 子类型名 IS 数据类型名范围:,例: SUBTYPE abus IS STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL aio: STD_LOGIC_VECTOR(7
6、DOWNTO 0);SIGNAL bio: STD_LOGIC_VECTOR(15 DOWNTO 0);SIGNAL cio: abus;aio=cio; bio=cio;,right,wrong,子类型可以是原数据类型的一部分,也可以完全 和原数据类型范围一致。,数据类型的转换,两种IEEE标准数据类型,std_logic * std_logic_vector *“std_logic”型数据可以具有如下9种不同的值:U-初始值;X-不定;0 -0;1 -1; 注意:当使用这两种数据类型Z -高阻; 时,在程序中必须写出库W-弱信号不定; 和包集合的说明语句。L -弱信号0; H -弱信号1;
7、-不可能情况。,定义位置:在IEEE库的std_logic_1164程序包中进行定义,可以看出,这个“标准逻辑”信号定义,比“位即bit”信号对于数字逻辑电路的逻辑特性描述更完整、更真实。所以在VHDL的程序里,对于逻辑信号的定义,通常都是采用这个“标准逻辑”信号形式。,使用这类数据信号,必须包含下面两条声明语句:,Library IEEE;Use IEEE.std_logic_1164.all;,标准逻辑数组类型(Std_Logic_vector),定义位置:在ieee库的std_logic_1164程序包中进行定义。,Bit_Vector与Std_Logic_vector的区别在于数组的每
8、一位前者为BIT型(0,1)后者为Std_Logic型,小结:,在VHDL语言中信号、变量、常数都要指定数据类型。为此,VHDL提供了多种标准的数据类型。在VHDL 语言中,使用户最感兴趣的一个特点是,可以由用户自己来定义数据类型。由用户自己定义的数据类型的书写格式为:TYPE 数据类型名 ,数据类型名 数据类型定义;,练习:,1定义信号 A1,A2,A3,A4,A5,A6,A7,A8,其中每一位信号均为STD_LOGIC型,2. 定义信号B,其数据类型为STD_LOGIC。,3.定义信号C,数据类型为整数型。,4. 给A、B赋值,其中A的值为11001101;B的值为0。,下面数据类型定义和
9、操作是否正确?signal atmp:STD_LOGIC_VECTOR(7 DOWNTO 0); signal btmp:STD_LOGIC_VECTOR(0 TO 7); signal cint: INTEGER; signal dtmp:STD_LOGIC_VECTOR(15 DOWNTO 0); atmp=cint; atmp=btmp; btmp=dtmp;,Library IEEE,Use ieee.std_logic_1164.all,Signal A: std_logic_vector(1 to 8);,Signal B: std_logic;,Signal C: integer;,A=“11001101”;,B=0;,作业:,P275: 9,