《VHDL的数据对象和数据类型(精品).ppt》由会员分享,可在线阅读,更多相关《VHDL的数据对象和数据类型(精品).ppt(15页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、VHDL的数据对象和数据类型 类型用于三种数据对象:信号、变量和常量。信号对象是连接实体的主要机制,用信号信号在在实体之间实体之间传送信息传送信息。变量对象位于进程和子程序中,主要用于局部计算用于局部计算结结果的果的暂存暂存。常量对象命名数据类型的一种特殊值。整数类型的行为和算术中整数相似,而实型类型行为和算术中的实数类似。可枚举类型是抽象数据类型,它描述用户定义的操作并使模块更可读。物理类型表示如距离、电流和时间一类的物理量。复合类型由数组和记录组成,数组是相同类型元素的分组,而记录是不同类型元素的分组。寻址类型象一般编程语言中的指针。文件类型是从模块中能读和能写特定类型的线性数据流。子类型
2、能对基本类型加限制。VHDL的数据对象和数据类型(1)VHDL的数据对象和数据类型(2)数据对象的分类:1 信号:它表示把元件的装配端口连在一起的互连线。2 变量:用于对暂时数据的局部贮存,变量只在进程内部是可视的。3 常量:顾名思义是规定的值。信号数据对象:把实体连在一起形成模块,信号是实体间动态数据交换的手段,信号说明如下:SIGNAL signal_name:signal_type :=initial_value ;即在关键词SIGNAL后跟一个或者多个信号名,每个信号名将建一个新信号,用冒号:把信号名和信号的数据类型分隔开,信号数据类型规定信号包含的数据类型信息,最后信号还包含初始化信
3、号指定的初值。实体说明部分、结构体说明和程序包说明都能说明信号,全局信号在程序包中说明,它们被所属的实体分享。USE WORK.std_logic_1164.ALL;PACKAGE sigdecl IS TYPE bus_type IS ARRAY(0 to 7)OF std_logic;SIGNAL vcc :std_logic:=1;SIGNAL ground :std_logic:=0;FUNCTION magic_function(a:IN bus_type)RETURN bus_type;END sigdecl;USE WORK.sigdecl.ALL;USE WORK.std_lo
4、gic_1164.ALL;ENTITY board_design is PORT(data_in:IN bus_type;data_out:OUT bus_type);SIGNAL sys_clk:std_logic:=1;END board_design;ARCHITECTURE data_flow OF board_design IS SIGNAL int_bus:bus_type;CONSTANT disconnect_value:bus type :=(X,X,X,X,X,X,X,X);BEGIN int_bus=data_in WHEN sys_clk=1 ELSE int_bus;
5、data_out=magic_function(int_bus)WHEN sys_clk=0 ELSE disconnect_value;sys_clk=NOT(sys_clk)after 50 ns;END data_flow;在程序包中说明的全局信号在实体中说明的sys_clk在结构体中说明的int_bus不能在主动进程中说明信号!board_design的实体VHDL的数据对象和数据类型(3)在程序包sigdecl中说明的全局信号Vec和ground可被多个实体引用,为引用程序包,用VHDL的USE付句。USE work.sigdecl;USE work.sigdecl.ground;或
6、USE work.sigdecl.ALLsys_clk信号能被board_design实体内和board_design实体的任何结构体所引用,sys_clk信号对其实体全局化int_bus信号是结构体局部信号,故它只能在data_flow结构体中,或在结构体的任何进程语句中被引用。变量变量在进程和子程序中做局部的数据存储,处理信号值要花时间,而变量的赋值都是立即发生的:VARIABLE variable_name,variable_name:variable_type:=value;关键词VARIABLE后跟着一个或多个变量名,每个名字建立一个新变量,结构variable_type定义变量的数
7、据类型,并且还可以指定一个可选的初值,只可可以以在在进程说明部分进程说明部分和和子程序说明部分说明变量子程序说明部分说明变量:VHDL的数据对象和数据类型(4)USE WORK.std_logic_1164.ALL;ENTITY and5 IS PORT(a,b,c,d,e:IN std_logic;q:OUT std_logic);END and5;ARCHITECTURE and5 OF and5 ISBEGIN PROCESS(a,b,c,d,e)VARIABLE state:std_logic;VARIABLE delay:time;BEGIN state:=a AND b AND c
8、 AND d AND e;IF state=1 THEN delay:=4.5 ns;ELSIF state=0 THEN delay:=3 ns;ELSE delay:=4 ns;END IF;q=state AFTER delay;END PROCESS;END and5;变量处理起来更快些,因为变量赋值是立即发生的,而信号却必须为此事件作一个安排处置。变量用很少的存储器,相反为了做一个调度安排和处理信号属性,需要存储更多的信号信息。信号可能需要用一个WAIT语句,以便为相同执行迭代做信号赋值的同步处理。用此两个变量使程序的可读性更好VHDL的数据对象和数据类型(5)常量常量对象是为特定的
9、数据类型值所赋予的名称,用常量的文件模块容易更新。模块需要在多个具体元件中放一个固定值就用常量。CONSTANT PI:REAL:=3.1414;这种模块的表示方式也变得更可读。常量描述:CONSTANT constant_name,constant_name:type_name:=value;VHDL也支持延迟常数,常在程序包说明中说明常量,将在程序包体中指定常量的值。常量有和信号一样的可视性规则:1.在程序包中说明的常量被全局化。2.在实体说明部分的常量被那个实体中任何结构体引用3.在结构体中的常量能被其结构体内部任何语句采用,包括为进程语句采用。4.在进程说明中说明的常量只能在进程中使用
10、。5.在数组和一些线性运算中经常用常量表常量表,VHDL的设计描述用常量表特别适于实现ROM网络的电路与函数设计VHDL的数据对象和数据类型(6)数据类型数据类型规定数据对象的特征和取值的范围,VHDL含有很宽范围的数据类型,用它们可建立简单的或者复杂的对象。一个新的数据类型必须先建立一个类型说明类型说明。类型说明规定类型名和类型的范围,在在程序程序包包说明部分说明部分、实实体说明部分体说明部分、结构体、结构体说明部分说明部分、子程序说明部分子程序说明部分和和进进程说明部分程说明部分中都中都允许允许有有类型说明类型说明。TYPE type_name IS type_mark;类型标志type_
11、mark包容了规定类型的很广泛的方法。VHDL数据类型图示四大类是标量类型、复合类型、寻址类型和文件类型。标量类型包括所有简单的类型,如象整数和实数;复合类型包括数组和记录;寻址类型在一般编辑语言中等价为指针;最后,文件类型用设计者定义的文件类型为设计者提供所说明的文件对象。VHDL的数据对象和数据类型(7)标量类型标量类型描述一次持有一个值的对象,说明为标量类型的对象在任何时间最多能持一种标量值,整个对象范围都可引用标量类型,它包括四类类型:整数类型实数类型可枚举数类型物理类型整数整数类型类型严格地与算术整数相似,所有预定的算术函数,像加、减、乘和除都适于整数类型,VHDL标准程序包规定整数
12、的最小范围:从-2,147,483,647到+2,147,483,6472的补码表示方式规定整数的范围 从-2,147,483,648到+2,147,483,647 VHDL整数定义的范围是对0值对称的。ARCHITECTURE test OF test ISBEGIN PROCESS(X)VARIABLE a:INTEGER;VARIABLE b:int_type;BEGIN a:=1;-ok 1 a:=-1;-ok 2 a:=1.0;-error 3 END PROCESS;END test;VHDL很强的数据类型为赋值提供了一种校验操作VHDL的数据对象和数据类型(8)实数类型实数类型模
13、仿描述数学上实数对象,它们表示整数值和分数值范围的数。标准库中标准程序包指定实数的最小范围从-1.0E+38到+1.0E+38。ARCHITECTURE test OF test IS signal a:REAL;BEGIN a=1.0;-ok 1 a=1;-error 2 a=-1.0E10;-ok 3 a=1.5E-20;-ok 4 a=5.3 ns;-error 5NED test;可可枚举数据类型枚举数据类型是非常强的抽象建模工具,可用它严格表式一个特定操作所需的值,由于可枚举类型的所有字面值都由用户定义,如字母的字面值、标识符字符串abc,a和black和用引号括起来的单个字符字面值
14、(X,1和0)。对四态仿真值系统典型的可枚举类型表示如下:TYPE fourval IS(X,0,1,Z);。X不定态值 。0逻辑值0或值为假 。1逻辑值1或值为真 。Z三态值或收集被开路的值把逻辑值1和0与整数值的1和0的字面值分开,在可枚举类型中用1和0将是一个错误,因为这些是整形值并行语句 BlockENTITY CH3_3_1 isPORT(A,B:INStd_Logic;Carry,Sum,Borrow,Difference:OUT Std_Logic);END CH3_3_1;ARCHITECTURE a OF CH3_3_1 ISBEGINHalf_Adder:Block-Hal
15、f AdderBeginSum=A Xor B;Carry=A and B;End Block Half_Adder;Half_Subtractor:Block-Half SubtractorBeginDifference=A Xor B;Borrow=Not A and B;End Block Half_Subtractor;END a;ENTITY FullAdder isPort(A:INStd_Logic;B:INStd_Logic;C:INStd_Logic;Carry:OUT Std_Logic;Sum:OUT Std_Logic);END FullAdder;ARCHITECTU
16、RE a OF FullAdder IS sum=A Xor B Xor C;Carry=(A And B)or(A And C)or(B And C);End a;ENTITY Ch3_3_2 isPORT(A,B:INStd_Logic_Vector(3 Downto 0);S:OUTStd_Logic_Vector(3 Downto 0);C:INOUTStd_Logic_Vector(4 Downto 0);END Ch3_3_2;ARCHITECTURE a OF Ch3_3_2 IS Component FullAdder Port(A:INStd_Logic;B:INStd_Lo
17、gic;C:INStd_Logic;Carry:OUT Std_Logic;Sum:OUT Std_Logic);End Component;并行语句 component mapBEGINU0:Fulladder Port Map(A(0),B(0),C(0),C(1),S(0);U1:Fulladder Port Map(A(1),B(1),C(1),C(2),S(1);U2:Fulladder Port Map(A(2),B(2),C(2),C(3),S(2);U3:Fulladder Port Map(A(3),B(3),C(3),C(4),S(3);C(0)=0;END a;ENTITY CH3_4_1 isPORT(Din,Clk,Clrn,Prn:IN Std_Logic;Q1,Q2,Q3,Q4:OUT Std_Logic);END CH3_4_1;ARCHITECTURE a OF CH3_4_1 ISSignal Di:Std_Logic_Vector(0 To 4);BEGINDi(0)Di(I),CLK=CLK,clrn=Clrn,prn=Prn,q=Di(I+1);End Generate;Q1=Di(1);Q2=Di(2);Q3=Di(3);Q4=Di(4);END a;并行语句 for-generate