资源预览内容
第1页 / 共44页
第2页 / 共44页
第3页 / 共44页
第4页 / 共44页
第5页 / 共44页
第6页 / 共44页
第7页 / 共44页
第8页 / 共44页
第9页 / 共44页
第10页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
适合班级:09060241 09060242 教学东区01107H第三课VHDL语言数据类型及运算操作符数据对象/客体在VHDL中把保存数据的单元称为数据对象。客体(Object):凡是可以赋予一个值的对象成为客体。VHDL中的四种客体:信号(Signal)变量(Variable)常量(Constant)文件(File)四类客体含义及说明场合客体类型含义说明场合信号信号是全局变量ARCHITECTURE,PACKAGE,ENTITY变量共享变量是全局变量,局部变量是局部量PROCESS,FUNCTION,PROCEDURE常数常数是全局量上面两种场合下均可存在文件文件是全局量ARCHITECTURE,PACKAGE,ENTITY常数(常数(constant) 语法格式如下:constant 常数名:数据类型名:= 表达式;例:constant VCC :real := 5.0; constant daly : time := 100 ns;constant fbus : bit_vector := “0101”;常数一旦设定后,在整个程序中将不再改变。常数名称的命名规则:第一个字符是英文字母。最后一个字符不能是下划线,中间也不能有两个连续的下划线。常数名称不能是VHDL的保留字。常数所赋的值应与定义的数据类型一致。例如:constant VCC :real := “0101”;变量(Variable)临时数据,没有物理意义只能在Process、Function和Procedure中定义,并只在其内部有效语法格式:variable 变量名 :数据类型 约束条件 := 表达式;例: variable x,y : integer;variable count : integer range 0 to 255 :=10;用 := 进行赋值共享变量实际使用过程中,有时希望进程或子程序的结果以变量形式进行数据传递。不能在Process、Function和Procedure中定义语法格式: shared variable 变量名 :数据类型 约束条件 := 初始值;慎用。共享变量Architecture sample of test isshared variable notclk: std_logic;signal clk : std_logic;Begin p1: process(clk) isbegin if (clkevent and clk = 1) thennotclk := 0;end if; end process p1;p2: process(clk) isbegin if (clkevent and clk = 0) thennotclk := 1;end if; end process p2;End architecture sample;信号信号 (signal) 信号是逻辑电路内部硬件连接(节点)的抽象,它除了没有数据流动方向的说明外,其它性质几乎和“端口”一样。信号通常在结构体、程序包集合和实体中说明。信号A信号说明语句的格式为:signal 信号名:数据类型 约束条件:= 设置值;例如:signal sys_clk: bit := 0;signal ground : bit := 0;使用信号(signal)的VHDL程序有关信号的使用规则说明如下:“:”表示对信号直接赋值,表示信号初始值不产生延时。“”表示代入赋值,是变量之间信号的传递,代入赋值法允许产生延时。例如:T1 T2; 在仿真中,初始化能保证信号设定在指定值上。对于存储元件的加电初始状态,应该设计复位或予置位机构,而不是通过信号指定初始化值来实现。在EDA工具综合时,信号应在结构体中描述清楚。信号与变量的区别architecture rtl of start is signal count : integer range 0 to 7; begin process(clk) begin if (clkevent and clk=1) then count = count + 1; if(count=0) then carryout = 1; else carryout = 0; end if; end if; end process; end rtl;-信号延时赋值architecture rtl of start is begin process(clk)variable count : integer range 0 to 7;begin if (clkevent and clk=1) then count := count + 1; if(count=0) then carryout = 1; else carryout = 0; end if; end if; end process; end rtl;-变量实时赋值VHDL的数据类型所有的信号、变量和常量,在VHDL程序中都要指定数据类型。数据类型用来指定工程可以采用的数据集合或数值的范围,并且也有与给定类型相关联的一套操作(如或、与,等等)。 VHDL是强类型语言,强类型是指数据类型的定义相当严格,不同类型之间的数据不能直接代入,而且,即使数据类型相同,而位长不同时也不能直接代入。这意味着编译器不允许给类型不同的信号赋值。VHDL的数据类型bit(位)信号定义:Type bit is(0,1)0或者1表示在数字电路中一个位的两种取值: 0可与数字电路里的低电平对应,1可与数字电路里的高电平对应。 bit_vector(位向量)(位向量) signal a: bit_vector (0 to 7);signal b: bit_vector (7 downto 0);signal c: bit_vector (0 to 3) := “0110”;可按位来表示,如:c(0)= 0,c(1)= 1,c(2)= 1,c(3)= 0 递增 递减单个位用单引号向量用双引号“ ”std_logic(标准逻辑)(标准逻辑) 在VHDL程序里,对逻辑信号的定义,通常都是采用这个std_logic信号形式 。 std_logic_vector (标准逻辑向量标准逻辑向量) 将几个信号合成一组来代表特定功能的逻辑信号,例如:数据总线(date bus)、地址总线(address bus)等 。std_logic_vector与bit_vector相似,只是数据内容多了Z与_两种。Z表示电路的高阻状态,仅能指定给最外层电路输出,并且必须对应到IC的实际引脚上。例:signal bus: std_logic_vector (7 downto 0);beginbus = “ZZZZZZZZ”;使用标准逻辑向量将两个信号相加 boolean(布尔量)(布尔量) 定义是:type boolean is ( false, true );布尔量只有两种状态:false 和true,默认为false。 integer(整数)(整数) 在VHDL语言中,整数范围从(2311)到(2311),例如: 128,5,12,。在电子系统中,整数可以用进制来表示。整数不能看作矢量,不能单独对某一位操作。整数不能用于逻辑运算,只能用于算术运算。对象的数据类型定义为整数时,范围应有约束。例如:VARIABLE A: INTEGER RANGE 128 TO 128;Positive(正整数)和(正整数)和natural(自然数)(自然数)subtype positive is range 0 to integer high subtype natural is range 1 to integer high 正整数和自然数是整数的子集。正整数是0和0以上的整数。自然数是大于零的整数。两者的范围是不同的。 unsigned(无符号整数)(无符号整数) 和std_logic_vector相似,并且可以相互转换。必须指明这个无符号整数的位数序列编号是从高到低,一定要使用downto的序列。具有与“标准逻辑”向量信号相似的逻辑运算特性 real(实数)定义为: typereal isrange -1.7E38 to1.7E38实数类型的信号必须表示成带小数点或科学计数的表示方式。architecture a of test is signal A, B, C, D: REAL;begin A = 2.6;B = 5.0;C = 3.14E8;D = -7.2E-9;End a;CHARACTER(字符)字符在VHDL语言中编程时用单引号括起来。A,a,B,b,都认为是不同的字符。VHDL语言对大小写英文字母不敏感,但区分字符量中的大小写。字符1,2仅是符号。字符包括AZ,az,09,空格及一些特殊字符。 STRING(字符串)字符串是由双引号括起来的一个字符序列。例如“VHDL”,“STRING”,“MULTI_SCREEN COMPUTER”等。字符串在其他文献中也称为字符矢量或字符串数组。字符串一般用于程序的提示、结果的说明等场合TIME(时间) 时时间间类类型型值值的的范范围围是是整整数数所所定定义义的的范范围围,(2311)到(2311) 。 时时间间类类型型的的完完整整书书写写格格式式应应包包含含整整数数和和单单位位两两部部分分。如如16 ns16 ns 时间类型一般用于仿真,而不用逻辑综合。时间类型一般用于仿真,而不用逻辑综合。 时间单位的描述规范说明如下:时间单位的描述规范说明如下: TYPE_TIME IS RANGE -2147483647 to 2147483647TYPE_TIME IS RANGE -2147483647 to 2147483647 UNITS FSUNITS FS; PS = 1000 PS = 1000 fsfs; Ns = 1000 Ns = 1000 psps; Us = 1000 NsUs = 1000 Ns; Ms = 1000 usMs = 1000 us; Sec = 1000 msSec = 1000 ms; Min = 60 secMin = 60 sec; Hr = 60 minHr = 60 min; End unitsEnd units; SEVRITY LEVEL(错误等级)错误等级这个数据类型用于表示电子系统工作状态。错 误 等 级 分 为 : NOTE, WARAING,ERROR,FALILURE,即注意、警告、错误、失败4个等级。错误等级常用来在仿真时给设计者提供电子系统的工作情况。枚举、数组用户自定义的类型枚举式数据类型是混合不同数据类型的元素,组合出特殊的数据类型,也可将相同类型元素以枚举方式组成一种新的数据类型。 定义格式为: type 名称 is(元素1,元素2)例:type states is (state0,state1,state2,state3);枚举、数组用户自定义的类型数组是相同类型元素的集合。数组可以是一维的或多维的。数组定义格式如下:type 数组名 is array 范围 of 数组元素类型;例1: type bits is array (7 downto 0) of bit ;例2:type matrix_type is array ( 0 to 15, 0 to 31) of std_logic;数据类型转换函数名功能Std_logic_1164to_stdlogicvector(a)由bit_vector转化为std_logic_vectorto_bitvector由std_logic_vector转化为bit_vectorto_stdlogic由bit转化为std_logicto_bit由std_logic转化为bitStd_logic_arithconv_std_logic_vector(a,位长)由integer、unsigned、signed转化为std_logic_vectorConv_integer(a)unsigned、signed转化为integerStd_logic_unsignedConv_integer(a)由std_logic_vector转化为integer使用转换函数进行算术运算Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity conv isport(a : in unsigned(3 downto 0);b: in std_logic_vector(3 downto 0);sum : out std_logic_vector(7 downto 0);end conv;Architecture a of conv isBeginsum = conv_std_logic_vector(a,4) + b;End a;运算操作符 VHDL运算符的种类包含数值运算、赋值(assignment)与连接运算。数值运算以运算优先权的低高分为逻辑、关系、加法、乘法及其它运算符;赋值(assignment)运算符可以完成数据赋值操作;连接(association)运算符(&)可用来连接两种数据类型。 并置操作符“&”并置操作符“&”用于位、位向量和标准逻辑向量的连接。例如architecture behave of connect issignal q: std_logic_vector(2 downto 0);signal a,b,c: std_logic;beginq= a & b & c; -直接连接-q a, 1= b, 0= c); -聚合连接end behave;其中,聚合连接采用指定位的脚标来进行位的连接。逻辑运算符 (1) NOT取反(2) AND与(3) OR或(4) NAND与非(5) NOR或非(6) XOR异或;逻辑运算符只能用于bit,std_logic,boolean三种类型的数据。其中not 的优先级最高,其他5个逻辑运算符的优先级相同 a=b and c or d; -是不合法的a=(b and c) or d -是正确的向量信号进行逻辑运算逻辑运算符必须是一个位执行逻辑与、或等运算,如果多个位数做运算,必须先将其分解成一个个独立的位运算,最后再用连接符号“&”将独立的位合并成一组输出信号,得到最后的结果。 a(3) = b(3) and c(3);a(2) = b(2) and c(2);a(1) = b(1) and c(1);a(0) = b(0 )and c(0);BCDout = a(3) & a(2) & a(1) &a(0);关系运算符关系运算符是两个对象在比较运算时,将两个操作数比较的结果表示出来所使用的符号,列表如下: 等于/ 不等于 小于 小于等于 大于 大于等于关系运算符关于运算符,在VHDL程序设计中有如下规则:两个对象进行比较时,数据类型一定要相同。(等于)和/(不等于)适用于所有数据类型的对象之间的比较。大于、小于、大于等于、小于等于适用于整数、实数位、位矢量及数组类型的比较。符号有两种含义:赋值符和小于等于符,要根据上下文判断。两个位矢量类型的对象比较时,自左至右,按位比较。如: Signal a : std_logic_vector(3 donwto 0);Signal b : std_logic_vector(2 donwto 0);a = “1010”;-10b b) then - a(2) b(2)ElseEnd if;(使用ieee.std_logic_usigned.all程序包,保证按位比较不会出错)算术运算符VHDL算术运算符的例表如下:(1) -加运算(2) - -减运算(3) * -乘运算(4) / -除运算(5) MOD -求模运算(6) REM -取余运算(7) -正(8) -负(9) * -指数运算(10)ABS -取绝对值使用逻辑运算符和和关系运算符的VHDL程序 architecture a of luoji isbeginprocess(a,b)beginif a = b then-关系运算符d=a and c; -赋值运算符elsif a b then -关系运算符d = a or c; -赋值运算符else d=a and not c; -逻辑运算符,not优先级高end if;end process;end a; 作业1什么叫对象?对象有哪几个类型?2.信号与变量有何区别?3VHDL语言操作符有哪几类,哪几种,简述其优先级。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号