资源预览内容
第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 is0,10或者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(时间) 时时间间类类型型值值的的范范围围是是整整数数所所定定义义的的范范围围,(231(2311)1)到到(231(2311) 1) 。 时时间间类类型型的的完完好好书书写写格格式式应应包包含含整整数数和和单单位位两两部部分分。如如16 ns16 ns 时间类时间类型普通用于仿真,而不用型普通用于仿真,而不用逻辑综逻辑综合。合。 时间单时间单位的描画位的描画规规范范阐阐明如下:明如下: TYPE_TIME IS RANGE -2147483647 to 2147483647TYPE_TIME IS RANGE -2147483647 to 2147483647 UNITS FSUNITS FS; PS = 1000 fsPS = 1000 fs; Ns = 1000 ps Ns = 1000 ps; Us = 1000 NsUs = 1000 Ns; Ms = 1000 us Ms = 1000 us; Sec = 1000 msSec = 1000 ms; Min = 60 sec Min = 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 isporta : 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) b2ElseEnd 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号