硬件描述语言及器件3(侯伯亨版)_第1页
硬件描述语言及器件3(侯伯亨版)_第2页
硬件描述语言及器件3(侯伯亨版)_第3页
硬件描述语言及器件3(侯伯亨版)_第4页
硬件描述语言及器件3(侯伯亨版)_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、适合班级:11060441 11060442 教学东区11306H第三课VHDL语言数据类型及运算操作符数据对象/客体 在VHDL中把保存数据的单元称为数据对象。 客体(Object):凡是可以赋予一个值的对象成为客体。 VHDL中的四种客体:信号(Signal)变量(Variable)常量(Constant)文件(File)四类客体含义及说明场合客体类型含义说明场合信号信号是全局变量ARCHITECTURE,PACKAGE,ENTITY变量共享变量是全局变量,局部变量是局部量PROCESS,FUNCTION,PROCEDURE常数常数是全局量上面两种场合下均可存在文件文件是全局量ARCHIT

2、ECTURE,PACKAGE,ENTITY常数(常数(constant) 语法格式如下:constant 常数名:数据类型名:= 表达式; 例:constant VCC :real := 5.0; constant daly : time := 100 ns;constant fbus : bit_vector := “0101”; 常数一旦设定后,在整个程序中将不再改变。 常数名称的命名规则:第一个字符是英文字母。最后一个字符不能是下划线,中间也不能有两个连续的下划线。常数名称不能是VHDL的保留字。 常数所赋的值应与定义的数据类型一致。例如:constant VCC :real := “0

3、101”;变量(Variable) 临时数据,没有物理意义 只能在Process、Function和Procedure中定义,并只在其内部有效 语法格式:variable 变量名 :数据类型 约束条件 := 表达式; 例: variable x,y : integer;variable count : integer range 0 to 255 :=10; 用 := 进行赋值共享变量 实际使用过程中,有时希望进程或子程序的结果以变量形式进行数据传递。 不能在Process、Function和Procedure中定义 语法格式: shared variable 变量名 :数据类型 约束条件 :

4、= 初始值; 慎用。共享变量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 architect

5、ure sample;信号信号 (signal) 信号是逻辑电路内部硬件连接(节点)的抽象,它除了没有数据流动方向的说明外,其它性质几乎和“端口”一样。信号通常在结构体、程序包集合和实体中说明。信号A 信号说明语句的格式为:signal 信号名:数据类型 约束条件:= 设置值;例如:signal sys_clk: bit := 0;signal ground : bit := 0;使用信号(signal)的VHDL程序有关信号的使用规则说明如下: “:”表示对信号直接赋值,表示信号初始值不产生延时。 “”表示代入赋值,是变量之间信号的传递,代入赋值法允许产生延时。例如:T1 T2; 在仿真中,

6、初始化能保证信号设定在指定值上。对于存储元件的加电初始状态,应该设计复位或予置位机构,而不是通过信号指定初始化值来实现。 在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

7、 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程序中都要指定数据类型。数据

8、类型用来指定工程可以采用的数据集合或数值的范围,并且也有与给定类型相关联的一套操作(如或、与,等等)。 VHDL是强类型语言,强类型是指数据类型的定义相当严格,不同类型之间的数据不能直接代入,而且,即使数据类型相同,而位长不同时也不能直接代入。这意味着编译器不允许给类型不同的信号赋值。VHDL的数据类型bit(位) 信号定义:Type bit is(0,1) 0或者1表示在数字电路中一个位的两种取值: 0可与数字电路里的低电平对应,1可与数字电路里的高电平对应。 bit_vector(位向量)(位向量) signal a: bit_vector (0 to 7);signal b: bit_v

9、ector (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_v

10、ector相似,只是数据内容多了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,。 在电子系统中,整数可

11、以用进制来表示。 整数不能看作矢量,不能单独对某一位操作。 整数不能用于逻辑运算,只能用于算术运算。 对象的数据类型定义为整数时,范围应有约束。例如: 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(无符

12、号整数)(无符号整数) 和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(字符) 字符在VH

13、DL语言中编程时用单引号括起来。A,a,B,b,都认为是不同的字符。 VHDL语言对大小写英文字母不敏感,但区分字符量中的大小写。字符1,2仅是符号。 字符包括AZ,az,09,空格及一些特殊字符。 STRING(字符串) 字符串是由双引号括起来的一个字符序列。 例 如 “ V H D L ” , “ S T R I N G ” ,“MULTI_SCREEN COMPUTER”等。 字符串在其他文献中也称为字符矢量或字符串数组。 字符串一般用于程序的提示、结果的说明等场合TIME(时间)(2311)到(2311)SEVRITY LEVEL(错误等级) 错误等级这个数据类型用于表示电子系统工作状

14、态。 错误等级分为:NOTE,WARAING,ERROR,FALILURE,即注意、警告、错误、失败4个等级。 错误等级常用来在仿真时给设计者提供电子系统的工作情况。枚举、数组用户自定义的类型 枚举式数据类型是混合不同数据类型的元素,组合出特殊的数据类型,也可将相同类型元素以枚举方式组成一种新的数据类型。 定义格式为: type 名称 is(元素1,元素2) 例:type states is (state0,state1,state2,state3);枚举、数组用户自定义的类型 数组是相同类型元素的集合。数组可以是一维的或多维的。 数组定义格式如下:type 数组名 is array 范围 o

15、f 数组元素类型; 例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_arithco

16、nv_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

17、(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)运算符可以完成数据赋值操作; 连接(assoc

18、iation)运算符(&)可用来连接两种数据类型。 并置操作符“&” 并置操作符“&”用于位、位向量和标准逻辑向量的连接。例如 architecture behave of connect is signal 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或非

19、 (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程序设计中有如下规则: 两个对象进行比较时,数据类型一定要相同。 (等于)和/(不等于)适用于所有数据类型的对象之间的比较。 大于、

温馨提示

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

评论

0/150

提交评论