VHDL数据类型(vhdl语法).ppt

上传人:小飞机 文档编号:5452188 上传时间:2023-07-08 格式:PPT 页数:41 大小:307.49KB
返回 下载 相关 举报
VHDL数据类型(vhdl语法).ppt_第1页
第1页 / 共41页
VHDL数据类型(vhdl语法).ppt_第2页
第2页 / 共41页
VHDL数据类型(vhdl语法).ppt_第3页
第3页 / 共41页
VHDL数据类型(vhdl语法).ppt_第4页
第4页 / 共41页
VHDL数据类型(vhdl语法).ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《VHDL数据类型(vhdl语法).ppt》由会员分享,可在线阅读,更多相关《VHDL数据类型(vhdl语法).ppt(41页珍藏版)》请在三一办公上搜索。

1、VHDL数据类型,FPGA应用技术,二、VHDL数据类型与数据对象,在VHDL程序中,我们经常会遇到这样的语句:Signal A:std_logic;Variable B:std_logic_vector(7 downto 0);Constant C:integer;,数据对象类型,数据类型,数据对象名,VHDL语言中的基本数据类型,逻辑类型,数值类型,布尔代数(Boolean),位(Bit),标准逻辑(Std_Logic),整数(Integer),实数(Real),二、VHDL数据类型与数据对象,逻辑数据类型,(1)布尔代数(Boolean)型;(2)位(Bit);(3)标准逻辑(Std_l

2、ogic);,type BIT is(0,1);,type BOOLEAN is(FALSE,TRUE);,二、VHDL数据类型与数据对象,标准逻辑类型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数据类型与数据对象,标准逻辑类型对数字逻辑电路的逻辑特性描述更加完整,真实,因此在V

3、HDL程序中,对逻辑信号的定义通常采用标准逻辑类型,逻辑序列,位序列(Bit_Vector),标准逻辑序列(Std_Logic_Vector),二、VHDL数据类型与数据对象,Signal data:Std_Logic_Vector(7 downto 0);Signal addr:Bit_Vector(0 to 3);,序列的范围大小声明方式:To,Downto,序列的使用,二、VHDL数据类型与数据对象,序列的分解与合成Signal A:Std_Logic_Vector(3 downto 0);Signal B:Std_Logic_Vector(0 to 3);Signal C:Std_Lo

4、gic_Vector(0 to 1);Signal D:Std_Logic_Vector(1 downto 0);C=A(2 downto 1);B=A(3),二、VHDL数据类型与数据对象,数值类型(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数据类型与数据对象,无符号数 Unsigned与标准逻辑序列相似,声明时必须指明其位数。Signal A:Unsigned(3 dow

5、nto 0);Signal B:Unsigned(7 downto 0);注意:必须使用downto形式。,二、VHDL数据类型与数据对象,(2)实数 Type Real Is Range-1.7E38 to 1.7E38;实数类型的表示可用科学计数形式或者带小数点的形式。,二、VHDL数据类型与数据对象,VHDL中的运算符,二、VHDL数据类型与数据对象,算术运算符:+加-减*乘/除*乘方mod求模 rem求余 abs求绝对值,逻辑运算:and 逻辑与or逻辑或nand与非nor 或非xor 异或xnor同或not 逻辑非,关系运算符:=等于/=不等于大于=大于或等于注:其中=操作符也用于表

6、示信号的赋值操作。,&连接符,将两个数据对象或矢量连接成维数更大的矢量,它可给代码书写带来方便。例如:vabc=a&b&c;如果a=1,b=0,c=1,则 vabc=“101”。,二、VHDL数据类型与数据对象,用户自定义数据类型:(1)列举数据类型Type 列举名称 is(元素1,元素2,)例子:Type state is(S0,S1,S2,S3);Signal A:state;,二、VHDL数据类型与数据对象,(2)数组类型Type 数组名称 is Array(范围)of 数据类型;例子:Type Byte is Array(7 downto 0)of Bit;Signal sdo:Byt

7、e;,二、VHDL数据类型与数据对象,数据类型的转换 在VHDL语言里,不同类型的数据信号之间不能互相赋值。当需要不同类型数据之间传递信息时,就需要类型转换函数将其中的一种类型数据转换为另一中数据类型后,再进行信号的传递。,二、VHDL数据类型与数据对象,例如:Signal Y:Std_logic_vector(7 downto 0);Signal X:Integer range 0 to 255;Y=CONV_STD_LOGIC_VECTOR(X,8);,二、VHDL数据类型与数据对象,CONV_INTEGER 将数据类型 UNSIGNED,SIGNED转换为INTEGER 类型.CONV_

8、UNSIGNED 将数据类型INTEGER,SIGNED转换为UNSIGNED 类型.CONV_SIGNED 将数据类型INTEGER,UNSIGNED转换为SIGNED类型.CONV_STD_LOGIC_VECTOR 将数据类型INTEGER,UNSIGNED,SIGNED,STD_LOGIC转换为STD_LOGIC_VECTOR 类型.,二、VHDL数据类型与数据对象,数据对象,常 量,信 号,变 量,(Data Objects),二、VHDL数据类型与数据对象,(1)常量定义格式:Constant 常量名称:数据类型:=给定值;常量通常来来定义延迟和功耗等参数。注意!常数定义的同时进行赋

9、初值。常数可以在实体说明、结构体描述中使用。,二、VHDL数据类型与数据对象,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:out std_logic_vector(3 downto 0);end exam1;architecture m1 of exam1 isconstant num:integer:=6;beginop=ip+num;end m1;,二、VHDL

10、数据类型与数据对象,(2)信号定义格式Signal 信号名称:数据类型:=初始值;信号相当于电路内部元件之间的物理连线,因此信号的赋值有一定的延迟时间.,二、VHDL数据类型与数据对象,“信号”数据对象,代表电路内部信号或连接线路,其在元件之间起互连作用。,注意!信号定义的时候尽管可以直接赋初值,但系统往往忽略。建议信号对象定义后再进行赋值。,信号为全局量。,在实体说明、结构体描述和程序包说明中使用。,信号赋值的语法格式为:信号名=表达式;如:Signal S1:Std_logic_vector(3 Downto 0);S1=“0000”;,二、VHDL数据类型与数据对象,(3)变量定义格式V

11、ariable 变量名称:数据类型:=初始值;变量只能用于“进程”之中,变量的赋值是立即生效的,常用于高层次抽象的算法描述 当中。,二、VHDL数据类型与数据对象,“变量”数据对象,它用于对中间数据的临时存储,并不一定代表电路的某一组件。,注意!变量定义的时候尽管可以直接赋初值,但系统往往忽略。建议变量对象定义后再进行赋值。,变量为局部量。,仅限于进程(Process)或子程序中使用。,变量赋值的语法格式为:目标变量:=表达式;如:Variable S1:Std_logic_vector(3 Downto 0);S1:=“0000”;,二、VHDL数据类型与数据对象,信号和变量的比较,(1)信

12、号和变量的对应关系不同:信号代表电路内部信号或连接线路;而变量则不是。,(2)信号和变量声明的位置不同:信号声明在子程序、进程的外部;而变量声明在子程序、进程的内部。,(3)信号为全局量,而变量只在定义它的域中才可见。因此,变量不能在两个进程之间传递信息。,(4)在一个进程中多次为一个信号赋值时,只有最后一个值会起作用;而变量则不同,每次赋值都会改变它的值。,(5)赋值不同。在进程中,信号赋值只有在进程结束时起作用,而变量赋值是立即进行的。而且赋值符号不同:信号赋值为“=”,变量赋值为“:=”。,数据对象属性,(1)数值类属性:(数组类型的数据对象)数值类属性有 left,right,low,

13、high,length。其中用符号 隔开对象名及其属性。left表示数组的左边界;right表示数组的右边界;low表示数组的下边界;high表示数组的上边界;length表示数组的长度。,如:Signal 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;,数据对象属性,(2)event属性:event属性,它的值为布尔

14、型,如果刚好有事件发生在该属性所附着的信号上(即信号有变化),则其取值为True,否则为False。利用此属性可识别时钟信号的变化情况,即时钟是否发生。,数据对象属性,例如:时钟边沿表示:signal clk:in std_logic;If(clkevent and clk=1)then Q=Q+1;则clkevent and clk=1表示时钟的上升沿。即时钟变化了,且其值为1。clkevent and clk=0表示时钟的下降沿。即时钟变化了,且其值为0。,数据对象属性,例2:设计组合逻辑电路,设计一个1bit全加器。输入 X,Y,CI 输出 Z,CO,library ieee;use i

15、eee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity full_bit_adder isport(a,b,ci:in std_logic;y,cout:out std_logic);end full_bit_adder;,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

16、)and(b)and(ci);cout=(b and ci)or(a and ci)or(a and b);end bh1;,architecture bh2 of full_bit_adder isbegin y=a xor b xor ci;cout=(a and b)or(a and ci)or(b and ci);end bh2;configuration con1 of full_bit_adder isfor bh2end for;end con1;,(1)触发器设计,D QCP,D触发器,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTIT

17、Y dff ISPORT(cp,d:IN STD_LOGIC;q:OUT STD_LOGIC);END dff;,ARCHITECTURE a OF dff ISBEGINprocess(cp)beginif cpevent and cp=1 thenq=d;end if;end process;END a;,(3)计数器设计,计数器,CLK,Q,LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.ALL;ENTITY counter ISPORT(c

18、lk:in STD_LOGIC;q:buffer STD_LOGIC_vector(3 downto 0);END counter;,ARCHITECTURE a OF counter ISBEGIN process(clk)begin if(clkevent and clk=1)then q=q+1;end if;end process;END a;,无控制端四位加计数器,ARCHITECTURE a OF counter ISBEGIN process(clk)begin if(clkevent and clk=1)then if(q0);end if;end if;end process;END a;,无控制端10进制计数器,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号