VHDL数据类型(vhdl语法)PPT课件_第1页
VHDL数据类型(vhdl语法)PPT课件_第2页
VHDL数据类型(vhdl语法)PPT课件_第3页
VHDL数据类型(vhdl语法)PPT课件_第4页
VHDL数据类型(vhdl语法)PPT课件_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、teger)实数实数 (Real)二、二、VHDL数据类型与数据对象数据类型与数据对象n 逻辑数据逻辑数据类型类型 (1)布尔代数()布尔代数(Boolean)型)型 ; (2)位()位(Bit);); (3)标准逻辑()标准逻辑(Std_logic););type BIT is (0, 1); type BOOLEAN is (FALSE, TRUE) ;二、二、VHDL数据类型与数据对象数据类型与数据对象 标准逻辑类型标准逻辑类型Type Std_Logic Is ( U, -Undefined(未初始化) X , -Forcing Unknown(强未知) 0 , -Forcing 0(

3、强0) 1 , -Forcing 1(强1) Z , -Hign Impedance(高阻) W, -Weak Unknown(弱未知) L , -Weak 0(弱0) H , -Weak 1(弱1)- , -Dont Care(忽略))二、二、VHDL数据类型与数据对象数据类型与数据对象 标准逻辑类型对数字逻辑电路的逻辑特性描述更加完整,真实,因此在VHDL程序中,对逻辑信号的定义通常采用标准逻辑类型l 逻辑序列逻辑序列位序列位序列 (Bit_Vector)标准逻辑序列标准逻辑序列 (Std_Logic_Vector)二、二、VHDL数据类型与数据对象数据类型与数据对象Signal data

4、: Std_Logic_Vector( 7 downto 0);Signal addr: Bit_Vector ( 0 to 3);序列的范围大小声明方式:序列的范围大小声明方式:To, Downtol 序列的使用序列的使用二、二、VHDL数据类型与数据对象数据类型与数据对象l 序列的分解与合成序列的分解与合成Signal A: Std_Logic_Vector( 3 downto 0);Signal B: Std_Logic_Vector( 0 to 3);Signal C: Std_Logic_Vector( 0 to 1);Signal D: Std_Logic_Vector( 1 do

5、wnto 0);C= A( 2 downto 1);B= A(3) & D & 1;二、二、VHDL数据类型与数据对象数据类型与数据对象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数据类型与数据对象数据类型与数据对象l 无符号数无符号数 Unsigned与标准逻辑序列相似,声明时必须指明其与标准逻辑序列相似,

6、声明时必须指明其位数。位数。Signal A : Unsigned(3 downto 0);Signal B : Unsigned( 7 downto 0);注意注意: 必须使用必须使用downto形式。形式。二、二、VHDL数据类型与数据对象数据类型与数据对象(2)实数)实数 Type Real Is Range -1.7E38 to 1.7E38; 实数类型的表示可用科学计数形式或者带小实数类型的表示可用科学计数形式或者带小数点的形式。数点的形式。二、二、VHDL数据类型与数据对象数据类型与数据对象l VHDL中的运算符中的运算符二、二、VHDL数据类型与数据对象数据类型与数据对象 算术运

7、算符:算术运算符: +加加-减减*乘乘/除除*乘方乘方mod 求模求模 rem 求余求余 abs求绝对值求绝对值 逻辑运算:逻辑运算: and 逻辑与逻辑与or逻辑或逻辑或nand与非与非nor 或非或非xor 异或异或xnor同或同或not 逻辑非逻辑非关系运算符:关系运算符: = 等于等于/= 不等于不等于小于小于大于大于= 大于或等于大于或等于注:其中注:其中=操作符也操作符也用于表示信号的赋值用于表示信号的赋值操作。操作。 &连接符连接符,将两个数将两个数据对象或矢量连接成维据对象或矢量连接成维数更大的矢量,它可给数更大的矢量,它可给代码书写带来方便。代码书写带来方便。 例如:例如:

8、vabc=a & b & c;如果如果a=1 , b=0 , c=1 ,则则 vabc=“101” 。二、二、VHDL数据类型与数据对象数据类型与数据对象u 用户自定义数据类型:用户自定义数据类型:(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

9、(7 downto 0) of Bit; Signal sdo: Byte;二、二、VHDL数据类型与数据对象数据类型与数据对象u 数据类型的转换数据类型的转换 在在VHDL语言里,语言里,不同类型的数据信号之间不同类型的数据信号之间不能互相赋值不能互相赋值。当需要不同类型数据之间。当需要不同类型数据之间传递信息时,就需要传递信息时,就需要类型转换函数类型转换函数将其中将其中的一种类型数据转换为另一中数据类型后,的一种类型数据转换为另一中数据类型后,再进行信号的传递。再进行信号的传递。二、二、VHDL数据类型与数据对象数据类型与数据对象例如:例如:Signal Y : Std_logic_ve

10、ctor(7 downto 0);Signal X : Integer range 0 to 255;Y= CONV_STD_LOGIC_VECTOR(X,8);二、二、VHDL数据类型与数据对象数据类型与数据对象CONV_INTEGER 将数据类型将数据类型 UNSIGNED, SIGNED转换为转换为INTEGER 类型类型. CONV_UNSIGNED 将数据类型将数据类型INTEGER, SIGNED转换为转换为UNSIGNED 类型类型.CONV_SIGNED 将数据类型将数据类型INTEGER, UNSIGNED转换为转换为SIGNED类型类型.CONV_STD_LOGIC_VEC

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

12、、结构体描述中使用。常数可以在实体说明、结构体描述中使用。二、二、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 :=

13、 6;beginop = ip + num;end m1; 二、二、VHDL数据类型与数据对象数据类型与数据对象(2) 信号信号定义格式定义格式Signal 信号名称信号名称: 数据类型数据类型 :=初始值初始值;信号相当于电路内部元件之间的物理连线信号相当于电路内部元件之间的物理连线, ,因因此信号的赋值有一定的延迟时间此信号的赋值有一定的延迟时间. .二、二、VHDL数据类型与数据对象数据类型与数据对象l “信号信号”数据对象,代表电路内部信号或连接线路,数据对象,代表电路内部信号或连接线路,其在元件之间起互连作用。其在元件之间起互连作用。注意!信号定义的时候尽管可以直接赋初值,但系统往往

14、忽略。注意!信号定义的时候尽管可以直接赋初值,但系统往往忽略。建议信号对象定义后再进行赋值。建议信号对象定义后再进行赋值。l信号为全局量。信号为全局量。l在实体说明、结构体描述和程序包说明中使用。在实体说明、结构体描述和程序包说明中使用。l信号赋值的语法格式为:信号赋值的语法格式为:信号名信号名 = 表达式;表达式;如:如:Signal S1 : Std_logic_vector(3 Downto 0); S1 = “0000”;二、二、VHDL数据类型与数据对象数据类型与数据对象(3)变量)变量定义格式定义格式Variable 变量名称变量名称: 数据类型数据类型 :=初始值初始值;变量只能

15、用于变量只能用于“进程进程” 之中之中,变量的赋值是变量的赋值是立即生效的立即生效的,常用于高层次抽象的算法描述常用于高层次抽象的算法描述 当中。当中。二、二、VHDL数据类型与数据对象数据类型与数据对象 “ “变量变量”数据对象,它用于对中间数据的临时存数据对象,它用于对中间数据的临时存储,并不一定代表电路的某一组件。储,并不一定代表电路的某一组件。 注意!变量定义的时候尽管可以直接赋初值,但系统往往忽略。注意!变量定义的时候尽管可以直接赋初值,但系统往往忽略。建议变量对象定义后再进行赋值。建议变量对象定义后再进行赋值。变量为局部量。变量为局部量。仅限于进程仅限于进程(Process)或子程

16、序中使用。或子程序中使用。 变量赋值的语法格式为:变量赋值的语法格式为:目标变量目标变量:=表达式;表达式;如:如:Variable S1 : Std_logic_vector(3 Downto 0); S1 := “0000”;二、二、VHDL数据类型与数据对象数据类型与数据对象信号和变量的比较信号和变量的比较 (1)信号和变量的对应关系不同信号和变量的对应关系不同:信号代表电路内部信号或连:信号代表电路内部信号或连接线路;而变量则不是。接线路;而变量则不是。 (2)信号和变量声明的位置不同信号和变量声明的位置不同:信号声明在子程序、进程的外:信号声明在子程序、进程的外部;而变量声明在子程序

17、、进程的内部。部;而变量声明在子程序、进程的内部。 (3)信号为全局量,而变量只在定义它的域中才可见信号为全局量,而变量只在定义它的域中才可见。因此,。因此,变量不能在两个进程之间传递信息。变量不能在两个进程之间传递信息。 (4)在一个进程中多次为一个信号赋值时,只有最后一个值会起)在一个进程中多次为一个信号赋值时,只有最后一个值会起作用;而变量则不同,每次赋值都会改变它的值。作用;而变量则不同,每次赋值都会改变它的值。(5)赋值不同。赋值不同。在进程中,信号赋值只有在进程结束时起作用,在进程中,信号赋值只有在进程结束时起作用,而变量赋值是立即进行的。而且赋值符号不同:信号赋值为而变量赋值是立

18、即进行的。而且赋值符号不同:信号赋值为“=”,变量赋值为,变量赋值为“:=”。数据对象属性数据对象属性(1)数值类属性:)数值类属性: (数组类型的数据对象)(数组类型的数据对象)数值类属性有数值类属性有 left, right, low, high, length。其中用符号其中用符号 隔开对象名及其属性。隔开对象名及其属性。 left表示数组的左边界;表示数组的左边界; right表示数组的右边界;表示数组的右边界; low表示数组的下边界;表示数组的下边界; high表示数组的上边界;表示数组的上边界; length表示数组的长度。表示数组的长度。如:如:Signal A : std_l

19、ogic_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属性,它的属性,它的值为布尔型值为布尔型,如果刚好有事,如果刚好有事件发生在该属性所附着的信号上(即信号有变件发生在该属性所附着的信号上(即信号有变化),则其取值为化),则

20、其取值为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。数据对象属性数据对

21、象属性例例2 2: :设计组合逻辑电路设计组合逻辑电路设计一个设计一个1bit全加器。全加器。输入输入 X,Y,CI 输出输出 Z,COlibrary ieee;use ieee.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) 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 1000-111D触发器触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论