在系统可编程技术:第10讲 VHDL语言的数据类型_第1页
在系统可编程技术:第10讲 VHDL语言的数据类型_第2页
在系统可编程技术:第10讲 VHDL语言的数据类型_第3页
在系统可编程技术:第10讲 VHDL语言的数据类型_第4页
在系统可编程技术:第10讲 VHDL语言的数据类型_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、在系统可编程技术第10讲 VHDL语言的数据类型VHDL数据对象(Data Objects)Constant width: integer := 7;Constant Vcc: REAL:=5.0; Constant D2:Std_Logic_Vector(width Downto 0):= ”0000”;不能在程序中改变;增强程序的可读性,便于修改程序;常量的使用范围取决于其定义位置,可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应限定。1、常数(Constant)定义格式为:Constant 常数名:数据类型 :=表达式; 2、信号 信

2、号数据对象,代表电路内部线路,其在元件之间起互连作用,没有方向性,可给它赋值,也可当作输入。定义格式为: Signal 信号名:数据类型:=设定值; 如: Signal A : Std_logic_vector(3 Down to 0) := “0000”; 注意:设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。信号赋值语句的语法格式为: 目标信号名=表达式(设定值);A = “1010”VHDL数据对象(Data Objects)3、 变量 变量是一个局部量,用于对中间数据的临时存储,并不一定代表电路的某一硬件,没有物理意义。定义格式为:Variable 变量名:数据类型:=设

3、定值; 如:Variable a: integer := 0;变量赋值语句的语法格式为:目标变量名 := 表达式(设定值); 如: a := b and c;VHDL数据对象(Data Objects)信号、变量、常数对比一、定义Signal clk: std_logic; Variable data: std_logic_vector(7 downto 0);Constant width: integer :=7 ;二、赋值方式clk = 1; (非立即)data := “1010”; (立即)三、定义区域信号:实体、结构体、程序包变量:进程、子程序常数:实体、结构体、程序包、块、进程、子程

4、序四、适用范围信号:实体、结构体、程序包变量:定义了变量的进程、子程序的顺序语句中常数:视其定义的位置而定若常数定义在实体中,适用范围是实体所对应的所有结构体。若常数定义在结构体中,适用范围就是本结构体。信号、变量、常数对比信号赋值(非立即)信号和变量赋值区别举例Architecture abc of example is signal tmp:std_logic;Begin process(a,b,c) begin tmp=a; x=c and tmp; tmp=b; y=c and tmp; end process;End abc;变量赋值(立即)Architecture abc of e

5、xample isBegin process(a,b,c) variable tmp:std_logic; begin tmp:=a; x=c and tmp; tmp:=b; y=c and tmp; end process;End abc;执行结果:x=c and b y=c and b 执行结果:x=c and a y=c and b VHDL数据类型 1、逻辑数据类型 (1)布尔代数(Boolean)型 定义位置:在std库的standard程序包中进行定义。 取值:FALSE,TRUE (2)位(Bit) 定义位置:在std库的standard程序包中进行定义。 取值:0,1 (低电

6、平,高电平 )(3)位矢量(Bit_Vector) 定义位置:在std库的standard程序包中进行定义。 Signal A: bit_vector(0 to 7);Signal B: bit_vector(7 downto 0); A=“00001010”;B=“00001010”;VHDL数据类型 位矢量是基于“位”数据类型的数组A(7)=0 A(6)=1 A(5)=0 A(4)=1 A(3)=0 A(2)=0 A(1)=0 A(0)=0B(7)=0 B(6)=0 B(5)=0 B(4)=0 B(3)=1 B(2)=0 B(1)=1 B(0)=0(4)标准逻辑型(Std_Logic )

7、定义位置:在IEEE库的std_logic_1164程序包中进行定义 VHDL数据类型 使用这类数据信号,必须包含下面两条声明语句: Library IEEE;Use IEEE.std_logic_1164.all; “U”初始值“X”不定“0”0“1”1Z高阻“W”弱不定“L”弱0“H”弱1“-”忽略VHDL数据类型 该类型能比较全面地包括数字电路中信号的几种状态,比位“bit”信号对于数字逻辑电路的逻辑特性描述更完整、更真实。所以在VHDL的程序里,对于逻辑信号的定义,通常都是采用这个“标准逻辑”信号形式,不再使用“BIT”。(5)标准逻辑数组类型(Std_Logic_vector) 定义

8、位置:在ieee库的std_logic_1164程序包中进行定义。 Bit_Vector与Std_Logic_vector的区别在于数组的每一位前者为BIT型(0,1)后者为Std_Logic型Signal A: STD_LOGIC_VECTOR(0 to 7);Signal B: STD_LOGIC_VECTOR (7 downto 0); A=“10100000”;B=“00001010”;A(7)=? B(7)=?VHDL数据类型 逻辑数据类型赋值举例Variable a , b : std_logic;Signal data : std_logic_vector(0 to 3);a:

9、= 1;b: = 0;data=“1100”;一位值用单引号多位值用双引号1、直接整体赋值2. 段赋值Signal data : std_logic_vector(0 to 3);data(1 to 2) =“10”;data(0) =1;3. 块赋值Signal a,b,c,d : std_logic;Signal data : std_logic_vector(3 downto 0);data= “0100” ;(a,b,c,d) = bus ;位置关联逻辑数据类型赋值举例数值数据类型(1)整数(Integer) 定义位置:在std库的standard程序包中进行定义。即数值范围为-231

10、231。 整数不能用于逻辑运算,只能用于算术运算。 VHDL数据类型 Signal day: integer range 0 to 31;Variable a,b,c: interger;C=a+b;有符号类型数据代表有符号数值,即可以是正数,0,负数;编 译器将有符号数类型作为一个补码的二进制数,最左边的位为 符号位。无符号类型数据代表无符号数值,即代表0或正数;最左边的位为最高位。如:Unsigned(“0110”)代表 ;+6+ 10Unsigned(“1010”)代表如:signed(“0110”)代表+6;signed(“1010”)代表-2。VHDL数据类型 (2)无符号(Unsi

11、gned)和有符号(Signed)类型定义位置:有符号(Signed)和无符号(Unsigned)逻辑信号定义在库IEEE的程序包std_logic_arith中。字符串(STRING)数据类型双引号引起来字符串数组,一般用于程序的提示和结果说明,VARIABLE string_yin : STRING (1 TO 7 ) ;string_yin := a b c d ;字符(CHARACTER)数据类型单引号引起来,如:A a字符分大小写。A不等于aVHDL数据类型 时间(TIME)数据类型(仿真使用,不能综合)TYPE time IS RANGE 2147483647 TO 2147483

12、647 units fs ; - 飞秒,VHDL中的最小时间单位 ps = 1000 fs ; - 皮秒 ns = 1000 ps ; - 纳秒 us = 1000 ns ; - 微秒 ms = 1000 us ; - 毫秒 sec = 1000 ms ; - 秒 min = 60 sec ; - 分 hr = 60 min ; - 时end units ;VHDL数据类型 Q=a and b or c AFTER 10ns;用户定义的数据类型格式:TYPE 数据类型名 数据类型定义1、枚举类型格式:TYPE 数据类型名 IS(元素1,元素2,);例:TYPE week IS (sun,mon

13、,tue,wed,thu,fri,sat);2、数组类型格式: TYPE 数据类型名 IS ARRAY 范围 OF 原数据类型例:TYPE word IS ARRAY (0 TO 7) OF STD_LOGIC;3、记录Record Types相同或不同类型的元素组成,类似C中的结构描述总线或功能块 Type iocell is record Enable :bit; Data :bit_vector(7 downto 0); end record; singal bus : iocell; bus.Enable = 1; bus.Data = “00110110”;用户定义的数据类型用户定义

14、的子类型用户对已定义的数据类型,作一些范围限制而形成新的数据类型格式: SUBTYPE 子类型名 IS 数据类型名 范围例:SUBTYPE data IS STD_LOGIC_VECTOR(7 DOWNTO 0); SUBTYPE digit IS INTEGER RANGE 0 TO 9;能进行逻辑运算的数据类型:bit、bit_vector、boolean、 std_logic、std_logic_vectorVHDL语言的操作符(operator)一、逻辑操作符 signal d1,d2,s : integer; SIGNAL a ,b,c : STD_LOGIC_VECTOR (3 D

15、OWNTO 0) ; SIGNAL d,e,f,g : STD_LOGIC_VECTOR (1 DOWNTO 0) ; SIGNAL h,I,j,k : STD_LOGIC ; SIGNAL l,m,n,o,p : BOOLEAN ; . s=a and b; - integer 不能进行逻辑运算 a=b AND c; - a、b、c的数据类型同属4位长的位矢量 d=e OR f OR g ; - 两个操作符OR相同,不需括号 h=(i NAND j)NAND k ; - NAND必须加括号 l=(m XOR n)AND(o XOR p); - 操作符不同,必须加括号 h=i AND j AND k ; - 两个操作符都是AND,不必加括号 h=i AND j OR k ; - 两个操作符不同,未加括号,表达错误 a=b AND e ; - 操作数b与e的位矢长度不一致,表达错误 h=i OR l ; - 数据类型不同,表达错误。数据类型必须一致表达式中有多个运算符时一般要加括号,但and、or、xnor除外VHDL语言的操作符(operator)二、关系运算符 和/的操作对象可以是任何数据类型构成的操作数。 其它关系运算符对数据类型有一定的限制。(整数、实数、枚举型、位矢量

温馨提示

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

评论

0/150

提交评论