第三章-VHDL语言要素.ppt_第1页
第三章-VHDL语言要素.ppt_第2页
第三章-VHDL语言要素.ppt_第3页
第三章-VHDL语言要素.ppt_第4页
第三章-VHDL语言要素.ppt_第5页
免费预览已结束,剩余75页可下载查看

下载本文档

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

文档简介

1、,第 三 章,3.3 VHDL语言要素,VHDL四类语言要素,数据对象 数据类型 运算操作数 运算操作符,3.3 VHDL语言要素,3.3.1. VHDL文字规则 1、数字型文字 1)整数文字:十进制整数 如:5,678,156E2(=15600), 45_234_287 (=45234287) 2)实数文字:带小数的十进制数 如:23.34,2.0,44.99E-2(=0.4499) 8_867_551.23_909(8867551.23909),3.3 VHDL语言要素,3)以数字基数表示法 格式: 基数数字文字E指数 如: 10#170# (=170) 2#1111_1110# (=25

2、4) 16#E# E1 (=2 #1110_0000# 224) 或 (=14*16= 224) 16#F.01# E+2 (=(15+1/(16*16)*16*16=3841.00),3.3 VHDL语言要素,4)物理量文字 称为物理类型(PHYSICAL TYPES)。 书写格式应包含整数和单位两部分。 如 16 ns 、100m、 177 mA 时间类型一般用于仿真,不用逻辑综合。 注:整数可综合实现; 实数一般不可综合实现; 物理量不可综合实现;,3.3 VHDL语言要素,2、字符串型文字 字符: 用单引号括起来数值,字母,空格及一些特殊字符。 VHDL语言对大小写英文字母不敏感,但区

3、分 字符中的大小写。 1,2 是符号 A,a,B,b 都认为是不同的字符,如: variable character_var:character; . character_var:=A;,3.3 VHDL语言要素,字符串(STRING) 字符串:是字符类型的一个非限定数组 由双引号括起来的字符序列。 varible string_var: string(1 to 7); . string_var:=Rosebud; 文字字符串:“文字” 如:“ERROR”, “ZZZZ”,“XXXX” ,“BOTHS AND QEAN”,3.3 VHDL语言要素, 数位字符串:称为位矢量,代表二进制、八进制、

4、十六进制的数组。其位矢量的长度为等值的二进制位数。 格式: 基数符号“数值” 其中基数符号有三种: B:二进制基数符号。 O:八进制基数符号,每一个八进制数 代表一个3位的二进制数。 X:十六进制基数符号,每一个十六进制数代表一 个4位的二进制数。 如: B1011_1111, O152,3.3 VHDL语言要素,3.标识符:定义常数、变量、信号、 端口、子程序或参数的名字,VHDL87版: 短标识符 VHDL93版: 短标识符和扩展标识符,VHDL语言有两个标准版:,3.3 VHDL语言要素,VHDL短标识符(基本标识符)遵守以下规则: (1) 必须以英文字母打头。 (2) 字符可以大小写的

5、字母、数字和下划线“_”。 (3) 下划线前后都必须有英文字母或数字。 (4) 英文字母不区分大小写 (5)不能连续使用下划线“_”,最后一个符号也 不能用下划线 (6) 不允许包含图形符号、空格符,3.3 VHDL语言要素,注意: EDA工具综合、仿真时,不区分大小写。 对VHDL的保留字(关键字)不能做标识符: ENTITY,ARCHITECTURE,END,BUS,USE,WHEN,WAIT,IS 在程序书写时,一般要求大写或黑体,使得程序易于阅读,易于检查错误。,3.3 VHDL语言要素,以下标识符哪些是合法的?,multi_78screens 、 Multi_、 Multi_Scre

6、ens、 MULTI_SCRE_ENS illegal%name _illegalname 9illegal entity data_ _BUS Not-Ack,3.3 VHDL语言要素,4、下标名及下标段名,下标名: 用于指示数组型变量或信号的某一元素. 格式: 标识符(表达式) 下标段名: 用于指示数组型变量或信号的某一段元素 格式: 标识符(表达式to/downto表达式) 如: a:std_logic_vector(7 downto 0) a(7), a(6).a(0) a(7 downto 0) ,a(7 downto 4), a(5 downto 3),3.3 VHDL语言要素,对

7、象(object): 可赋予一个值的客体 VHDL对象的3种基本数据类型: 常量 (CONSTANT) 变量 (VARIABLE) 信号 (SIGNAL),3.3.2 数据对象,3.3 VHDL语言要素,对象的物理含义: 常量:数电中电源、地等常数 变量:暂存某些值的载体 信号:物理设计中的某一条硬件连线, 包括输入、输出端口,3.3 VHDL语言要素,变量:局部量,仅用于process语句、 子程序(function 、procedure) 信号:全局量, 用于entity, architecture、package 常量: 全局量,可用于上面两种场合,对象的特点及使用场合:,3.3 VHD

8、L语言要素,1.常量(constant) 常量说明: 对某一常量名赋予的一个固定值。 格式如下: CONSTANT 常数名:数据类型 :表达式; 例: CONSTANT width:integer:8; CONSTANT data:bit_vector(3 downto 0):1010; CONSTANT x:new_bit:x;,常量数据类型与表达式的数据类型一致,3.3 VHDL语言要素,用在进程语句、子程序中,变量是一个局部量,其作用范围仅限在定义了变量的进程和子程序中。 书写格式: VARIABLE 变量名:数据类型 约束条件 :表达式; 举例如下: VARIABLE result:

9、std_logic:0 ; VARIABLE x,y: integer; VARIABLE a:integer range 0 to 255 :0 ;,2.变量(variable),变量的初值可用于仿真,但综合时被忽略,3.3 VHDL语言要素,常量的可视性(作用范围),库、程序包,实 体,结 构 体1,进程1,结 构 体2,进程2,常量是全局量,其作用范围取决于被定义的位置,3.3 VHDL语言要素,电子硬件系统运行的基本特性: 各部分电路工作的并行特性; 信号传输过程中的延时特性; 多驱动源的总线特性; 时序电路中触发器的记忆特性等,3.信号(signal),信号是电子系统内部硬件连接和硬

10、件特性表示。 用来描述硬件系统的基本特性,3.3 VHDL语言要素,电子电路内部硬件实体相互连接的抽象表示 (通常 在结构体、包集合和实体说明中使用) 一般书写格式为: SIGNAL 信号名:数据类型 约束类型:表达式; 举例如下: SIGNAL a, b:BIT :0; SIGNAL count:bit_vector(7 downto 0); SIGNAL init:integer :-1; SIGNAL count:std_logic:= 0 ;,3.3 VHDL语言要素,注:1)信号初始值仿真时有用,综合被忽略 2)信号是全局量,可在结构体、实体、块中说明和使用信号。 3)在进程和子程序

11、中只能使用信号,不能说明信号。 4)变量赋值用“:=” , 信号赋值用“=” 5)变量执行后,立即被赋值;信号实际代入过程和代入语句的处理是分开的,3.3 VHDL语言要素,4、信号与变量赋值语句功能的比较,3.3 VHDL语言要素,进程中信号与变量的使用,ENTITY ex IS port(.); END ex; ARCHITECTURE arch_ex OF ex IS signal a,b: std_logic; begin process(a,b) variable c,d:std_logic; begin c:=a+b; d:=a-b; . ENDprocess; END arch

12、ex;,3.3 VHDL语言要素,信号与端口的区别:,除没有方向说明外,信号与实体的端口PORT概念相似.端口是一种隐形的信号. ENTITY exam IS PORT(SIGNAL a,b: in std_logic; SIGNAL c: out std_logic); END exam; 端口是一种有方向的信号.即输出端口不能读 出数据,只能写入数据;输入端口不能写入数据, 只能读出数据. 信号本身无方向,可读可写.,3.3 VHDL语言要素,关于VHDL中的数字,请找出以下数字中最大的一个:_。 2#1111_1110# 8#276# 10#170# 16#E#E1,A,3.3 VHDL

13、语言要素,上一次课的内容 程序包、库和配置 VHDL四类语言要素:数据对象、词法规则与标识符 本次课程内容: 数据类型、 运算操作符,3.3 VHDL语言要素,实数(REAL) 必须带有小数点。如12.0 仅用于仿真器,综合器不支持 有些数可用实数表示,也可用整数表示。例如99.0是实数,99是整数,两数具有相同的值;但两者具有不同的类型。 在有关文献中,实数类型也称为浮点类型(FLOATING TYPE)。但大多数EDA工具不支持浮点运算。,3.3 VHDL语言要素,3.3.3 VHDL语言数据类型,VHDL语言程序是强数据类型, 要求每一个常量、变 量、信号、函数以及各种参数学要有明确的数

14、据类 型,并且不同的数据类型不能直接代入,相同的类 型,位长不同也不能代入。 EDA工具在编译会报告类型错。,10种标准的预定义数据类型,用户自定义数据类型,按照 定义 的方式,3.3 VHDL语言要素,数据类型根据使用目的分为: 用于EDA工具对电子系统进行综合的数据类型。如标量类型(SCALAR TYPE),复合类型(COMPOSITE TYPE)。 用于EDA工具对电子系统进行仿真的数据类型,如存取类型(ACCESS TYPE)。 预定义数据类型在VHDL标准程序包STANDARD中定义的,已经包含进VHDL的源文件中,因而不必通过USE语句也可以显式使用.,3.3 VHDL语言要素,扩

15、展标识符是VHDL93版增加的标识符书写规则: (1)用反斜杠来定界,免去了87标准基本标识符的一些限制。 (2) 可以数字打头,允许包含图形符号、空格符。 例如:mode A, $100, p%name等。 (3)反斜杠之间的字符可以用关健字。 如:buffer, entity, end等。 (4) 标识符的界定符两个斜杠之间可用数字打头。 如: 100$,2chip,4screens等。 (5) 允许多个下划线相连。例:TWO_Computer_sh等。 (6) 扩展标识符区分大小写。例如: EDA 与eda不同。 (7) 扩展标识符与短标识符不同。 如:COMPUTER 与Compute

16、r不同。,扩展标识符,3.3 VHDL语言要素,VHDL语言标准所定义的预定义数据类型 (1) 整数类型 (INTEGER TYPE) (2) 实数类型或浮点类型 (REAL TYPE FLOATING TYPE) (3) 位类型 (BIT TYPE) (4) 位矢量类型 (BIT_VECTOR TYPE) (5) 布尔类型 (BOOLEAN TYPE) (6) 字符类型 (CHARACTER TYPE) (7) 时间类型或物理类型 (Time type physical type) (8) 错误类型 (NOTE,WARNIING,ERROR, FAILURE TYPE) (9) 自然数、整数

17、类型 (NATURAL TYPE) (10) 字符串类型 (TRING TYPE),3.3 VHDL语言要素,用户在做电子系统设计时,自行定义的数据类型: (1) 枚举类型 (ENUMERATED TYPE) (2) 数组类型 (ARRAY TYPE) (3)文件类型 (FILES TYPE) (4)记录类型 (RECODE TYPE) (5) 时间类型 (TIME TYPE),3.3 VHDL语言要素,预定义数据类型,3.3 VHDL语言要素,1)、布尔 (BOOLEAN),有两种状态:false或true。 只能进行关系运算。 如: 相等=,比较等作比较。 如: BIT值转化成BOOLEA

18、N类型 BOOLEAN_var:=(bit_var=1);,3.3 VHDL语言要素,2)、位(BIT),位通常用来表示一位的信号值。 位的值通常用单引号来括住。 如: TYPE BIT IS (0,1); 位的值0,1表示信号的状态; 布尔量的值0,1表示假,真。,3.3 VHDL语言要素,用双引号括起来的一组位数据 注意:注明位宽(元素个数和排列) 如 SIGNAL a:BIT_VECTOR(7 TO 0) B0000_1111 XFBC -B1111_1011_1100 O371 -B011_111_001,3)、位矢量(bit_vector),3.3 VHDL语言要素,4)、字符(CH

19、ARACTER) 用单引号括起来数值,字母,空格及一些特殊字符。 VHDL语言对大小写英文字母不敏感,但区分 字符中的大小写。 1,2 是符号 A,a,B,b 都认为是不同的字符,如: variable character_var:character; . character_var:=A;,3.3 VHDL语言要素,5)、整数(INTEGER) 包括正整数与负整数和零,硬件电路实现时, 利用32位的位矢量来表示整数范围-(231-1)到(231-1) 。 VHDL综合器要求对具体的整数做出范围约束。否则无法综合成硬件电路. 如: signal s: INTEGER RANGE 0 TO 15

20、; 信号s的取值范围是015,可用4位二进制数表示,因此s将被综合成由四条信号线构成的信号.,3.3 VHDL语言要素,6)、自然数(NATURAL)和正整数(POSITIVE) 自然数包括正整数和零,natural是integer的子类型,表示非负整数。 positive是integer的子类型,表示正整数。 定义如下: subtype natural is integer range 0 to integerhigh; subtype positive is integer range 1 to integerhigh;,3.3 VHDL语言要素,7)、实数(REAL) 范围:1.0E38

21、到1.0E38。 仅用于仿真器,综合器不支持 有些数可用实数表示,也可用整数表示。例如99.0是实数,99是整数,两数具有相同的值;但两者具有不同的类型。 在有关文献中,实数类型也称为浮点类型(FLOATING TYPE)。但大多数EDA工具不支持浮点运算。,3.3 VHDL语言要素,8)、字符串(STRING),字符串:是字符类型的一个非限定数组 由双引号括起来的字符序列。 varible string_var: string(1 to 7); . string_var:=Rosebud;,3.3 VHDL语言要素,9)、时间(TIME) 称为物理类型(PHYSICAL TYPES)。 时间

22、类型值的范围是整数所定义的范围,从(2311)到(2311)。 书写格式应包含整数和单位两部分。 如16 ns 时间类型一般用于仿真,不用逻辑综合。,3.3 VHDL语言要素,10)、错误等级(SEVRITY LEVEL) 用于表示电子系统工作状态。 错误等级分为:NOTE,WARAING,ERROR,FALILURE,即注意、警告、错误、失败4个等级。 错误等级常用来在仿真时给设计者提供电子系统的工作情况。,3.3 VHDL语言要素,2、IEEE预定义标准逻辑位与矢量 1)标准逻辑位std_logic数据类型 由 ieee 库中的std_logic_1164 程序包定义,为九值逻辑系统,如下

23、: (U,X,0,1,Z,W, L,H,-),U:未初始化的, X:强未知的, 0:强0, 1:强1, Z:高阻态, W:弱未知的 L:弱0, H:弱1, -:忽略,3.3 VHDL语言要素,由 std_logic 类型代替 bit 类型可以完成电 子系统的精确模拟,并可实现常见的三态总线电路。 2)标准逻辑矢量std_logic_vector 由 std_logic 构成的数组。定义如下: type std_logic_vector is array(natural range) of std_logic; 赋值的原则:相同位宽,相同数据类型。,3.3 VHDL语言要素,3、其他预定义标准数

24、据类型,IEEE中std_logic_arith程序包定义了以下数据类型,1) 类型,) 类型,3.3 VHDL语言要素,3)SMALL-INT类型,用户自定义数据类型是VHDL语言的一大特色,可由用户定义的数据类型有: 枚举类型 整数与实数类型 数组类型 记录类型 子类型,3.3 VHDL语言要素,类型定义语句TYPE和子类型定义语句SUBTYPE实 现用户自定义数据类型.,1)TYPE 语句格式: type数据类型名 is数据类型定义 of 基本数据类型; type byte is array(7 downto 0)of bit; variable addend: byte; type w

25、eek is (sun,mon,tue,wed,thu,fri,sat);,4.用户定义的数据类型,3.3 VHDL语言要素,子类型定义语句SUBTYPE 2)SUBTYPE 语句格式: Subtype 子类型 is 基本数据 RANGE 约束; subtype digits is integer range 0 to 10; 由subtype语句定义的数据类型称为子类型,3.3 VHDL语言要素,5、枚举类型 (ENUMERATED TYPE),TYPE STD_LOGIC IS ( X ,-不定,未知; O ,-0 1 ,-1 Z ,-高阻 W,-弱信号不定,未知 L ,-弱信号0 H ,

26、-弱信号1 -不可能情况);,TYPE BOOLEAN IS ( FALSE , TRUE);,TYPE BIT IS ( 0 , 1);,枚举该类型的所有可能的值 书写格式:TYPE 数据类型名 IS (元素,元素.);,3.3 VHDL语言要素,例如: type color is (blue,green,yellow,red); type my_logic is (0,1,U,Z); variable hue: color; signal sig: my_logic; hue:=blue; sig=Z;,3.3 VHDL语言要素,6.整数类型 用户定义的整数类型是标准包中整数类型的子范围

27、格式: type 类型名称 is range 整数范围 例: type my_integer is integer range 0 to 9;,3.3 VHDL语言要素,7. 数组类型 (ARRAY TYPE) 数组类型: 同类型元素的集合。VHDL支持多维数组 二维数组声明: TYPE byte IS ARRAY (7 downto 0) OF bit; TYPE vector IS ARRAY (3 downto 0) OF byte; 限定数组, 非限定数组,属性:,3.3 VHDL语言要素,限定数组:其索引范围有一定的限制 格式: type 数组名 is array (数组范围) of

28、数据类型; 非限定数组: 数组的索引范围被定义成一个类型范围 格式: type 数组名 is array (类型名称range) of 数 据类型; 例: type bit_vector is array (integer range)of bit; varible my_vector: bit_vector(5 downto -5);,3.3 VHDL语言要素,属性: VHDL为多种类型定义了属性 语法如下: 对象属性 VHDL为数组预先定义的属性: left right high low length range reverse_range,3.3 VHDL语言要素,对应变量: varia

29、ble my_vector: bit_vector(5 downto -5); 各属性如下: my_vectorleft 5 my_vectorright - 5 my_vectorhigh 5 my_vectorlow - 5 my_vectorlength 11 my_vectorrange (5 downto -5) my_vectorreverse_range (-5 to 5),3.3 VHDL语言要素,8. 记录类型 (RECODE TYPE) 记录类型:不同类型的名称域的集合 TYPE 数据类型 IS RECODE 元素名A:数据类型 ; . 元素名B:数据类型 ; END RE

30、CODE,访问记录类型中的元素:记录体名.元素名,3.3 VHDL语言要素,constant len:integer=8; subtype byte_vec is bit_vector(len-1 downto 0); type byte_and_ix is record byte: byte_vect; ix: integer range 0 to len; end record; signal x,y,z:byte_and_ix; signal data: byte_vec; signal num:integer; . x.byte=11110000; x.ix=2; data=y.byt

31、e; num=y.ix; y=x;,例如:,3.3 VHDL语言要素,子类型 子类型是已定义的类型或子类型的一个子集. 格式 subtype子类型名 is 数据类型名范围; 例: bit_vector类型定义如下: 如设计中只用16ns;可定义子类型如下: subtype my_vector is bit_vector(0 to 15);,3.3 VHDL语言要素,9.类型转换 在VHDL程序设计中,不同类型的对象必须进行数据类型转换,才能操作。 3种方法不同类型的数据变换:类型标记法、函数转换法和常数转换法。,3.3 VHDL语言要素,VHDL语言标准中的程序包提供的变换函数来完成这个工作。

32、这些程序包有3种:,1)、用函数法进行数据类型转换, STD_LOGIC_1164程序包定义的转换函数:,函数 TO_STD LOGICVECTOR(A) -由BIT_VECTOR转换为STD_LOGIC_VECTOR 函数 TO_BITVECTOR(A); -由STD_LOGIC_VECTO转换为BIT_VECTOR 函数 TO_STDLOGIC (A); -由BIT转换为STD_LOGIC 函数 TO_BIT(A); -由标准逻辑STD_LOGIC转换BIT,3.3 VHDL语言要素, std_logic_arith程序包定义的转换函数,函数:CONVINTEGER(A); -由signe

33、d,unsigned转换成std_logic_vector 函数:CONVINTEGER(A); -由signed,unsigned转换成integer, std_logic_unsigned程序包定义的转换函数,函数:CONVINTEGER(A); - 由STD_LOGIC_VECTOR转换成integer 函数:CONV_STD_LOGIC_VECTOR(A,位长); -由integer,singed,unsigned转换成标准逻辑矢量,3.3 VHDL语言要素,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSI

34、GNED.ALL;ENTITY add5 ISPORT (num:IN STD_LOGIC_VECTOR (2 DOWNTO 0) );END add5;ARCHITECTURE rtl OF add5 ISSIGNAL in_num:INTEGER RANGE 0 TO 5;BEGINin_num=CONV_INTEGER (num);位矢量转换成整数变换式END rtl;,3.3 VHDL语言要素,2)用类型标记法(直接类型)实现类型转换 用于关系密切的数据类型之间的类型转换,即整数和实数的类型转换。 格式: 数据类型标识符 (表达式) 若: variable a,b :integer;

35、variable c,d :real; 则有: a:integer(c); d:real(b);,3.3 VHDL语言要素,表达式: 由操作数和操作符构成 完成算术和逻辑运算,VHDL中的表达式,3.3 VHDL语言要素,(1) 逻辑操作符(LOGICAL) (2) 关系操作符(RELATIONAL) (3) 算术操作符(ARITHMETIC) (4) 并置操作(CONCATENATION),VHDL语言的操作符有4种:,3.3 VHDL语言要素,(1)NOT取反 (2)AND与 (3)OR或 (4)NAND与非 (5)NOR或非 (6)XOR异或;,在VHDL中,逻辑操作符有6种,列表如下:

36、,逻辑操作符(LOGICAL),3.3 VHDL语言要素,要求:操作数类型必须相同.可为如下类型: bit, bit_vector, std_logic, std_logic_vector, boolean 数组操作数的维数, 大小必须相同. 注:当有两个以上的逻辑表达式时,左右没有优先级的时,必须使用括号, 如: x=(a and b) and (not d or k) 当逻辑表达式中只有and or not 运算操作符时,可 以省略括号如: x=a and b and c,3.3 VHDL语言要素,VHDL算术运算符的例表如下:,3.3 VHDL语言要素,“1101”执行各种移位操作后的结果示意图,3.3 VHDL语言要素,用于整数类型: “+”, “-”, “*”, “/”, “MOD”, “REM”,“*”,“ABS” 综合的限制: /, MOD, REM三种操作符的右操作数必须是2的正整数次幂,即2n,实际电路用移位实现.,3.3 VHDL语言要素,两个对象在比较运算时,将两个操作数比较的结 果表示出来所使用的符号,列表如下: 等于 / 不等于 小于 小于等于 大于

温馨提示

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

评论

0/150

提交评论