《VHDL数据类型vhdl语法.pptx》由会员分享,可在线阅读,更多相关《VHDL数据类型vhdl语法.pptx(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、二、VHDL数据类型与数据对象在VHDL程序中,我们经常会遇到这样的语句:Signal A :std_logic;Variable B :std_logic_vector(7 downto 0);Constant C :integer;数据对象类型数据类型数据对象名第1页/共41页u VHDL语言中的基本数据类型逻辑类型数值类型布尔代数(Boolean)位(Bit)标准逻辑(Std_Logic)整数(Integer)实数(Real)二、VHDL数据类型与数据对象第2页/共41页n 逻辑数据类型(1)布尔代数(Boolean)型;(2)位(Bit);(3)标准逻辑(Std_logic);type
2、 BIT is(0,1);type BOOLEAN is(FALSE,TRUE);二、VHDL数据类型与数据对象第3页/共41页标准逻辑类型Type Std_Logic Is(U,-Undefined(未初始化)X,-Forcing Unknown(强未知)0,-Forcing 0(强0)1,-Forcing 1(强1)Z,-Hign Impedance(高阻)W,-Weak Unknown(弱未知)L,-Weak 0(弱0)H,-Weak 1(弱1)-,-Dont Care(忽略))二、VHDL数据类型与数据对象 标准逻辑类型对数字逻辑电路的逻辑特性描述更加完整,真实,因此在VHDL程序中,
3、对逻辑信号的定义通常采用标准逻辑类型第4页/共41页l 逻辑序列位序列(Bit_Vector)标准逻辑序列(Std_Logic_Vector)二、VHDL数据类型与数据对象第5页/共41页Signal data:Std_Logic_Vector(7 downto 0);Signal addr:Bit_Vector(0 to 3);序列的范围大小声明方式:To,Downtol 序列的使用二、VHDL数据类型与数据对象第6页/共41页l 序列的分解与合成Signal A:Std_Logic_Vector(3 downto 0);Signal B:Std_Logic_Vector(0 to 3);S
4、ignal C:Std_Logic_Vector(0 to 1);Signal D:Std_Logic_Vector(1 downto 0);C=A(2 downto 1);B=A(3)&D&1;二、VHDL数据类型与数据对象第7页/共41页n 数值类型(1)整数 Type Integer Is Range -231 231-1限定整数取值范围的方法:Signal A:Integer;Signal B:Integer Range 0 to 7;Signal C:Integer Range-1 to 1;二、VHDL数据类型与数据对象第8页/共41页l 无符号数 Unsigned与标准逻辑序列相
5、似,声明时必须指明其位数。Signal A:Unsigned(3 downto 0);Signal B:Unsigned(7 downto 0);注意:必须使用downto形式。二、VHDL数据类型与数据对象第9页/共41页(2)实数 Type Real Is Range-1.7E38 to 1.7E38;实数类型的表示可用科学计数形式或者带小数点的形式。二、VHDL数据类型与数据对象第10页/共41页l VHDL中的运算符二、VHDL数据类型与数据对象 算术运算符:+加-减*乘除*乘方mod 求模 rem 求余 abs求绝对值 逻辑运算:and 逻辑与or逻辑或nand与非nor 或非xor
6、 异或xnor同或not 逻辑非第11页/共41页关系运算符:=等于/=不等于小于大于=大于或等于注:其中=操作符也用于表示信号的赋值操作。&连接符,将两个数据对象或矢量连接成维数更大的矢量,它可给代码书写带来方便。例如:vabc=a&b&c;如果a=1,b=0,c=1,则 vabc=“101”。二、VHDL数据类型与数据对象第12页/共41页u 用户自定义数据类型:(1)列举数据类型Type 列举名称 is(元素1,元素2,)例子:Type state is(S0,S1,S2,S3);Signal A:state;二、VHDL数据类型与数据对象第13页/共41页(2)数组类型Type 数组名
7、称 is Array(范围)of 数据类型;例子:Type Byte is Array(7 downto 0)of Bit;Signal sdo:Byte;二、VHDL数据类型与数据对象第14页/共41页u 数据类型的转换 在VHDL语言里,不同类型的数据信号之间不能互相赋值。当需要不同类型数据之间传递信息时,就需要类型转换函数将其中的一种类型数据转换为另一中数据类型后,再进行信号的传递。二、VHDL数据类型与数据对象第15页/共41页例如:Signal Y:Std_logic_vector(7 downto 0);Signal X:Integer range 0 to 255;Y=CONV_
8、STD_LOGIC_VECTOR(X,8);二、VHDL数据类型与数据对象第16页/共41页CONV_INTEGER 将数据类型 UNSIGNED,SIGNED转换为INTEGER 类型.CONV_UNSIGNED 将数据类型INTEGER,SIGNED转换为UNSIGNED 类型.CONV_SIGNED 将数据类型INTEGER,UNSIGNED转换为SIGNED类型.CONV_STD_LOGIC_VECTOR 将数据类型INTEGER,UNSIGNED,SIGNED,STD_LOGIC转换为STD_LOGIC_VECTOR 类型.二、VHDL数据类型与数据对象第17页/共41页u 数据对象
9、常常 量量信信 号号变变 量量(Data Objects)二、VHDL数据类型与数据对象第18页/共41页(1)常量定义格式:Constant 常量名称:数据类型:=给定值;常量通常来来定义延迟和功耗等参数。注意!常数定义的同时进行赋初值。常数可以在实体说明、结构体描述中使用。二、VHDL数据类型与数据对象第19页/共41页library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;-必需定义+entity exam1 is port(ip:in std_logic_vector(3 downto 0);op
10、:out std_logic_vector(3 downto 0);end exam1;architecture m1 of exam1 isconstant num:integer:=6;beginop=ip+num;end m1;二、VHDL数据类型与数据对象第20页/共41页(2)信号定义格式Signal 信号名称:数据类型:=初始值;信号相当于电路内部元件之间的物理连线信号相当于电路内部元件之间的物理连线,因因此信号的赋值有一定的延迟时间此信号的赋值有一定的延迟时间.二、VHDL数据类型与数据对象第21页/共41页l“信号”数据对象,代表电路内部信号或连接线路,其在元件之间起互连作用。
11、注意!信号定义的时候尽管可以直接赋初值,但系统往往忽略。建议信号对象定义后再进行赋值。l信号为全局量。l在实体说明、结构体描述和程序包说明中使用。l信号赋值的语法格式为:信号名=表达式;如:Signal S1:Std_logic_vector(3 Downto 0);S1=“0000”;二、VHDL数据类型与数据对象第22页/共41页(3)变量定义格式Variable 变量名称:数据类型:=初始值;变量只能用于“进程”之中,变量的赋值是立即生效的,常用于高层次抽象的算法描述 当中。二、VHDL数据类型与数据对象第23页/共41页 “变量”数据对象,它用于对中间数据的临时存储,并不一定代表电路的
12、某一组件。注意!变量定义的时候尽管可以直接赋初值,但系统往往忽略。建议变量对象定义后再进行赋值。变量为局部量。仅限于进程(Process)或子程序中使用。变量赋值的语法格式为:目标变量:=表达式;如:Variable S1:Std_logic_vector(3 Downto 0);S1:=“0000”;二、VHDL数据类型与数据对象第24页/共41页信号和变量的比较 (1)信号和变量的对应关系不同:信号代表电路内部信号或连接线路;而变量则不是。(2)信号和变量声明的位置不同:信号声明在子程序、进程的外部;而变量声明在子程序、进程的内部。(3)信号为全局量,而变量只在定义它的域中才可见。因此,变
13、量不能在两个进程之间传递信息。(4)在一个进程中多次为一个信号赋值时,只有最后一个值会起作用;而变量则不同,每次赋值都会改变它的值。(5)赋值不同。在进程中,信号赋值只有在进程结束时起作用,而变量赋值是立即进行的。而且赋值符号不同:信号赋值为“=”,变量赋值为“:=”。第25页/共41页数据对象属性(1)数值类属性:(数组类型的数据对象)数值类属性有 left,right,low,high,length。其中用符号 隔开对象名及其属性。left表示数组的左边界;right表示数组的右边界;low表示数组的下边界;high表示数组的上边界;length表示数组的长度。第26页/共41页如:Sig
14、nal A:std_logic_vector(7 downto 0);Signal B:std_logic_vector(0 to 3);则这两个信号的属性值分别为:Aleft=7;Aright=0;Alow=0;Ahigh=7;Alength=8;Bleft=0;Bright=3;Blow=0;Bhigh=3;Blength=4;数据对象属性第27页/共41页(2)event属性:event属性,它的值为布尔型,如果刚好有事件发生在该属性所附着的信号上(即信号有变化),则其取值为True,否则为False。利用此属性可识别时钟信号的变化情况,即时钟是否发生。数据对象属性第28页/共41页例如
15、:时钟边沿表示:signal clk:in std_logic;If(clkevent and clk=1)then Q=Q+1;则clkevent and clk=1表示时钟的上升沿。即时钟变化了,且其值为1。clkevent and clk=0表示时钟的下降沿。即时钟变化了,且其值为0。数据对象属性第29页/共41页例例2 2:设计组合逻辑电路设计组合逻辑电路设计一个设计一个1bit全加器。全加器。输入输入 X,Y,CI 输出输出 Z,CO第30页/共41页library ieee;use ieee.std_logic_1164.all;use;use;entity full_bit_ad
16、der isport(a,b,ci:in std_logic;y,cout:out std_logic);end full_bit_adder;第31页/共41页architecture bh1 of full_bit_adder isbegin y=(not a)and(not b)and ci)or (not a)and(b)and(not ci)or (a)and(not b)and(not ci)or (a)and(b)and(ci);cout=(b and ci)or(a and ci)or(a and b);end bh1;第32页/共41页architecture bh2 of
17、full_bit_adder isbegin y=a xor b xor ci;cout 1000-111D触发器第34页/共41页LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff ISPORT(cp,d:IN STD_LOGIC;q:OUT STD_LOGIC);END dff;第35页/共41页ARCHITECTURE a OF dff ISBEGINprocess(cp)beginif cpevent and cp=1 thenq=d;end if;end process;END a;第36页/共41页(3)计数器设计计数器CLKQ第
18、37页/共41页LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE;USE;ENTITY counter ISPORT(clk:in STD_LOGIC;q:buffer STD_LOGIC_vector(3 downto 0);END counter;第38页/共41页ARCHITECTURE a OF counter ISBEGIN process(clk)begin if(clkevent and clk=1)then q=q+1;end if;end process;END a;无控制端四位加计数器第39页/共41页ARCHITECTURE a OF counter ISBEGIN process(clk)begin if(clkevent and clk=1)then if(q9)then q=q+1;else q=0000;-q0);end if;end if;end process;END a;无控制端10进制计数器第40页/共41页感谢您的观看!第41页/共41页