电子设计自动化技术课件.ppt

上传人:牧羊曲112 文档编号:3754604 上传时间:2023-03-19 格式:PPT 页数:38 大小:443KB
返回 下载 相关 举报
电子设计自动化技术课件.ppt_第1页
第1页 / 共38页
电子设计自动化技术课件.ppt_第2页
第2页 / 共38页
电子设计自动化技术课件.ppt_第3页
第3页 / 共38页
电子设计自动化技术课件.ppt_第4页
第4页 / 共38页
电子设计自动化技术课件.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《电子设计自动化技术课件.ppt》由会员分享,可在线阅读,更多相关《电子设计自动化技术课件.ppt(38页珍藏版)》请在三一办公上搜索。

1、1,5.2 VHDL语言要素,5.2.1 VHDL的文字规则,与其他计算机高级语言一样,VHDL也有自己的文字规则 VHDL文字主要包括数字和标识符。,1.标识符,标识符主要用来为端口、信号、变量、子程序、常数和参数等命名。,有效的字符:包括26个大小写英文字母,数字包括09 以及下划线“_”任何标识符必须以英文字母开头 下划线“_”的前后必须有英文字母或数字 标识符中的英语字母不分大小写 标识符的命名不能与保留字相同,例:_Decoder_1,2FFT,sig_#n,return,其规则如下:,Decoder_1,FFT,sig_n,Not_ACK,2,2.数字,(1)整数:整数都是十进制的

2、数,如:5,678,0,156E2(=15600),45_234_287(=45234287),(2)实数:实数也都是十进制的数,但必须带有小数点,如:1.335,88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499),(3)以数值基数表示的数:用这种方式表示的数由五部分组成:基#整数#指数 第一部分:用十进制数标明数值进位的基数;第二部分:数值隔离符“#”;第三部分:表达的数值;第四部分:指数隔离符“#”;第五部分:用十进制数表示的指数部分,若为0可省略不写。,3,例如:10#170#;-(表示第三部分为十进制数,等于 170)1

3、6#FE#;-(表示第三部分十六进制数,等于 254)2#1111_1110#;-(表示第三部分为二进制数,等于 254)8#376#;-(表示第三部分为八进制数,等于 254)16#E#1;-(表示十六进制数,等于14161,等于224),3.字符和字符串,(1)字符是用单引号括起来的ASC码 一般情况下VHDL对字母的大小写不敏感,但对字符的大小写是敏感的,例:A 和 a 是不同的。(2)字符串是用双引号括起来的字符序列 在VHDL中字符串常用来作为说明文字出现。例:“it is time out”,“ERROR”,“Both S and Q equal to 1”注意:“a”和 a是不同

4、的,4,B:二进制基数符号,可以省略O:八进制基数符号X:十六进制基数符号(0F)采用位串的优点是为了增加源代码的可读性。,例:B1_1101_1110-二进制数数组,位矢数组长度是9O15-八进制数数组,位矢数组长度是6XAD0-十六进制数数组,位矢数组长度是12101_010_101_010-二进制数数组,位矢数组长度是120AD0-表达错误,缺X,4.位串,位串是用双引号括起来的数字序列,数字序列前面加上一个基数说明符:,5,5.2.2 数据对象(DATA OBJECTS),VHDL是一种硬件描述语言,硬件电路的工作过程实际上是信号的传输和存储的过程,所以VHDL最基本的描述对象是信号。

5、为了便于描述,还定义了另外三类数据对象:变量、常量和文件。,1.常量(CONSTANT),常量是指在设计实体中不会发生变化的值 常量定义的一般表述:constant 常量名:数据类型:=表达式;,例如:constant a,b:integer:=2;constant VCC:real:3.3;,常量可以在程序包、实体说明、结构体和进程的说明区域进行说明常量一旦被赋值就不能再改变常量所赋的值应与其所定义的数据类型一致,否则出错,注意:,6,2.变量(VARIABLE),变量主要用于对暂时数据进行存储,它不能将信息带出对它作出定义的当前单元。定义变量的一般表述:VARIABLE 变量名:数据类型:

6、=初始值;,例:VARIABLE a:std_logic;VARIABLE b,c:integer:=2;VARIABLE count1,count2,count3:integer range 0 to 255:=0;例中定义a为标准逻辑位变量,b,c为整数型变量,初始值为2等。变量也可以被连续地进行赋值,变量的赋值采用的符号是“:=”,上例2,3中的变量已赋给了初始值。,7,注意:(1)赋值语句右边的表达式必须是一个与目标变量具有相同数据类型的数值。(2)变量是一个局部量,只能在进程和子程序中使用。(3)变量的赋值是一种理想化的数据传输,是立即发生的,不存在任何延时的行为。,变量赋值格式:变

7、量名:=表达式;例:a:=“1010101”;-位矢量赋值 b:=0;-位赋值 x:=100.0;-实数赋值,8,3.信号(SIGNAL),信号是描述硬件系统的基本数据对象,它是设计实体中并行语句模块间动态交换数据的手段。在物理上信号对应着硬件设计中的一条连接线。信号定义语句格式:SIGNAL 信号名:数据类型:=初始值;,例:SIGNAL clk:std_logic:=0;SIGNAL a:integer range 0 to 15;SIGNAL data:std_logic_vector(15 downto 0);信号的初始值不是必须的,而且仅在VHDL的行为仿真中有效;信号的使用和定义范

8、围是实体、结构体和程序包。,9,信号赋值采用如下格式:信号名=表达式;例:x=9;y=x;,SIGNAL a,b,c,y,z:integer;PROCESS(a,b,c)BEGIN y=a*b;-不对y进行赋值 z=c-y;y=b;-y的最后赋值END PROCESS;,说明:同一信号不能在两个进程中赋值。在同一进程中,可以允许多次对同一信号赋值。即在同一进程中存在多个同名的信号被赋值。但是因为信号的赋值是有延时的,其结果只是最后的赋值语句被启动。,10,信号SIGNAL 基本用法:在电路中作为信号连线使用 适用范围:在整个结构体内的任何地方都能适用 行为特性:赋值具有一定的延迟 在进程中,只

9、在进程的的最后才对信号赋值,信号与变量赋值语句功能的比较,变量VARIABLE 基本用法:在进程中作为局部数据存储单元使用 适用范围:只能在所定义的进程中使用 行为特性:赋值是没有延迟的 在进程中是立即赋值,11,label1:processvariable a,b:integer;begin wait until clk=1;a:=10;b:=20;a:=b;b:=a;end process;,signal a,b:integer;label2:process(a,b)begin a=10;b=20;wait for 10ns a=b;b=a;wait for 10nsend process

10、;,分析下面两个程序中a,b的结果,结果:a=b=20,结果:a=20,b=10,12,5.2.3 数据类型,前面介绍了VHDL的数据对象,对于每一个对象来说,都要指定其数据类型,因此,VHDL需要提供用来指定对象的数据类型。VHDL的强类型特性,使得VHDL在进行硬件描述时具有很高的灵活性。,每一对象只能具有一个数据类型且只能具有那个数据类型的值。对某对象进行操作的类型必须与该对象的类型相匹配。不同类型之间的数据不能直接带入,即使数据类型相同,而位长不同也不能进行带入。,VHDL的强类型特性主要体现在以下几个方面:,13,标量类型:是最基本的数据类型,通常用于描述一个单值数据对象。标量类型包

11、括:实数类型、整数类型、枚举类型和时间类型。复合类型:由细小的数据类型复合而成,如可由标量类型复合而成。复合类型主要有数组型和记录型。子类型:是上述基本类型的子集,是对已有的数据类型加以限制。文件类型:不同类型的数据和数据名组织在一起形成新的数据对象。存取类型:为数据对象提供存取方式。,上述五大类数据类型又可分成在现成程序包中可以随时获得的预定义数据类型和用户自定义数据类型两类。预定义数据类型是VHDL中最常用、最基本的数据类型,这些数据类型都已在VHDL的标准程序包Standard和std_logic_1164及其它的标准程序包中作了定义,可在设计中随时调用。,VHDL中的数据类型可分为五大

12、类:,14,1.VHDL的预定义数据类型,(1)整数(INTEGER)数据类型:正整数、负整数和零。可以使用预定义的运算操作符,但不能按位访问,也不能进行逻辑操作。在VHDL中,整数的取值范围是21474836472147483647 仿真时:将其作为有符号数处理。综合时:作为无符号数处理。例:SIGNAL a:INTEGER RANGE 0 TO 9;(2)实数(REAL)数据类型:类似于数学中的实数,或称为浮点数,通常情况下实数类型仅 能用于VHDL的仿真,综合器一般不支持实数。(3)位(BIT)数据类型:属于枚举型,取值只能是1和0。(4)位矢量(BIT_VECTOR)数据类型:是BIT

13、的数组,使用位矢量必须注明位宽。例:signal a:bit_vector(7 downto 0);,VHDL的预定义数据类型都是在VHDL标准程序包STANDARD中定义的。,15,(5)布尔(BOOLEAN)数据类型:属于枚举型,取值为false和true。(6)字符(CHARACTER)数据类型:字符类型通常用单引号引起来。如:a。字符类型区分大小写,这一点和标识符的大小写是不同的。(7)字符串(STRING)数据类型:字符串必须用双引号标明。例:VARIABLE str:STRING(1 TO 7);str:=a b c d;(8)时间(TIME)数据类型 VHDL中唯一的预定义物理类

14、型是时间。完整的时间类型包括整 数和物理量单位两部分,整数和单位之间至少留一个空格,例:55 ms,20 ns等。(9)错误等级(severity level)错误等级类型数据用来表征系统的状态共有4种:NOTE(注意)WARNING(警告)ERROR(出错)FAILURE(失败)。(10)自然数(natural),正整数(positive),16,2.IEEE预定义标准逻辑位与矢量,(1)标准逻辑位STD_LOGIC数据类型(2)标准逻辑矢量(STD_LOGIC_VECTOR)数据类型 std_logic_vector是std_logic的数组形式。,因为是ieee的预定义数据类型,使用时必

15、须先打开ieee库。即:library ieee;use ieee.std_logic_1164.all;,std_logic是一个9值的逻辑。其取值为:U 未初始化状态;X 不定态;O 逻辑0;1 逻辑1;Z 高阻态;W 弱不定态;L 弱0;H 弱1;-无关态;,17,3.其他预定义标准数据类型,Synopsys公司在IEEE库中加入的程序包STD_LOGIC_ARITH中定义了3种数据类型,下面是其中常用的2种:,(1)无符号数据类型(UNSIGNED TYPE)UNSIGNED数据类型代表一个无符号的数值,综合器将其解释为二进制数,二进制数的最左边的位为最高位。,(2)有符号数据类型(S

16、IGNED TYPE)SIGNED数据类型代表一个有符号的数值,综合器将其解释为补码,最高位为符号位。,18,例如:VARIABLE var1:UNSIGNED(0 TO 10);VARIABLE var2:SIGNED(0 TO 10);其中的var1和var2分别定义为UNSIGNED和SIGNED数据类型,则数值意义是不一样的。,使用上述数据类型时,应作如下声明:library ieee;use ieee.std_logic_arith.all;,19,(1)TYPE语句用法:TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型;上述格式中的数据类型名由设计者自定;数据类型定义部

17、分用来描述所定义元素的表达方式和表达内容;基本数据类型是指数据类型定义中所定义的基本数据类型,一般都是取已有的预定义数据类型。,4.用户自定义数据类型,除标准的预定义数据类型外,VHDL还允许用户自行定义新的数据类型,由用户定义的数据类型可以有多种,如枚举类型、整数类型、实数类型、数组类型、记录类型和时间类型等。用户自定义数据类型是用类型定义语句实现的,格式如下:,例:type st1 is array(0 to 15)of std_logic;type week is(sun,mon,tue,wed,thu,fri,sat);,20,(2)SUBTYPE语句用法:SUBTYPE是TYPE所定

18、义的数据类型的一个子集,它满足原数据类型的所有约束条件,原数据类型称为基本数据类型,SUBTYPE 格式如下:SUBTYPE 子类型名 IS 基本数据类型 range 约束范围;上述格式中的子类型名由设计者自定;基本数据类型必须是前面已有过type定义的类型。例:subtype dig is integer range 0 to 9;其中,integer是标准程序包中已定义过的数据类型,子类型只是把integer约束到只含10个值的数据类型。,21,常用的自定义数据类型,枚举数据类型:,在综合过程中,枚举类型文字元素的编码通常是自动的,编码顺序是默认的,一般将第一个枚举量(最左边的量)编码为0

19、,以后的依次加1。前例中的默认编码值如下:state1 000;state2 001;state3 010;state4 011;state5 100;,type week is(sun,mon,tue,wed,thu,fri,sat);,VHDL中的枚举数据类型是一种特殊的数据类型,是用文字符号来表示一组实际的二进制数。,例如:type m_state is(state1,state2,state3,state4,state5);signal p_state,n_state:m_state;,“000”“001”“010”“011”“100”“101”“110”,22,数组类型:,语句格式如

20、下:TYPE 数组名 IS ARRAY(数组范围)OF 数据类型;,例:type stb is array(7 downto 0)of std_logic;该数组有8个元素,其下标排列是7、6、1、0。type data_bus is array(0 to 7)of bit;该数组有8个元素,其下标排列是0、1、6、7。,数组类型属复合类型,是将一组具有相同数据类型的元素集合在一起,作为一个数据对象来处理的数据类型。数组可以是一维数组或多维数组。,23,对数组的赋值有两种方法:一是对整个数组进行一次赋值;二是按照下标对每一个数组元素进行赋值。例:type data_bus is array(0

21、 to 7)of bit;signal a:data_bus;整体赋值:a=“01000111”;分别赋值:a(0)=0;a(1)=1;a(2)=0;a(3)=0;a(4)=0;a(5)=1;a(6)=1;a(7)=1;,24,记录类型:将不同类型的数据和数据名组织在一起,而形成新的对象。语句格式如下:,TYPE 记录类型名 IS RECORD 记录元素名1:数据类型名;记录元素名2:数据类型名;END RECORD;,25,下面是记录类型定义的一个例子:type c_time is record year:integer range 0 to 3000;month:integer range

22、 1 to 12;date:integer range 1 to 31;enable:bit;data:std_logic_vector(15 downto 0);end record;记录类型的对象的说明:signal number:c_time;,26,一个记录的每一个元素要由它的记录元素名来进行访问。对于记录类型的对象的赋值和数组类似,可以对其进行整体赋值,也可分别赋值,从记录类型的对象中提取记录元素时应使用“.”。对记录元素分别赋值:number.year=2005;number.mouth=9;number.date=22;number.enable=1;number.data=da

23、ta_in;对记录元素整体赋值:number=(2005,9,22,1,data_in);,27,5、数据类型的转换,在VHDL语言中,数据类型的定义是相当严格的,不同的数据类型之间不能进行运算和直接代入。为了实现正确的赋值操作,必须要将带入的数据进行类型转换。数据类型转换函数通常有程序包来提供。,28,【程序5.2.2】LIBRARY IEEE;USE IEEE std_logic_1164.ALL;USE IEEE std_logic_UNSIGNED.ALL;ENTITY add5 IS PORT(num:IN std_logic_vector(2 DOWNto 0);.);END ad

24、d5;ARCHITECTURE rt1 of add5 issignal in_num:integer range 0 to 5;.BEGIN in_num=CONV_INTEGER(num);变换式.END rtl;,29,5.2.4 运算符,操作符和操作数间的运算应注意:,VHDL中共有四类操作符:逻辑操作符、关系操作符、算术操作符和连接操作符,基本操作符间操作数是同数据类型 操作数的数据类型必须与操作符所要求的数据类型一致 注意操作符之间的优先级 通常在一个表达式中有两个以上的算符时,需要使用括号将这些运算分组,若其中的算符相同且为AND、OR、XOR 中的一种则不需使用括号。,30,1

25、、逻辑运算符:逻辑运算符共有7种,分别是:操作符 功能 操作数类型 AND 与 std_logic、bit、boolean OR 或 std_logic、bit、boolean NOT 取反 std_logic、bit、boolean NAND 与非 std_logic、bit、boolean NOR 或非 std_logic、bit、boolean XOR 异或 std_logic、bit、boolean XNOR 同或 std_logic、bit、boolean,31,下面是逻辑操作符运算的几个例子:,SIGNAL a,b,c:STD_LOGIC_VECTOR(3 DOWNTO 0);SI

26、GNAL d,e,f,g:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL h,i,j,k:STD_LOGIC;SIGNAL l,m,n,o,p:BOOLEAN;.a=b AND c;-b、c 相与后向a赋值,a、b、c的数据类型同属4位长的位矢量 d=e OR f OR g;-两个操作符OR相同,不需括号 h=(i NAND j)NAND k;-NAND不属and、or、xor三种算符,必须加括号 l=(m XOR n)AND(o XOR p);-操作符不同,必须加括号 h=i AND j AND k;-两个操作符都是AND,不必加括号 h=i AND j OR k;-

27、两个操作符不同,未加括号,表达错误 a=b AND e;-操作数b 与 e的位矢长度不一致,表达错误 h=i OR l;-i 的数据类型是位STD_LOGIC,而l的数据类型是.-布尔量BOOLEAN,因而不能相互作用,表达错误。,32,2、算术运算符 VHDL的算术运算符共有十几种,其中常用的有如下几种:操作符 功能 操作数类型 加法 整数 减法 整数*乘法 整数和实数 SLL等 移位 bit或布尔类型的一维数组(SLL SLR SLA SRA ROL ROR)在运用算术运算符对如下的数据类型进行运算时,应注意:(1)unsigned,signed:需打开std_logic_arith程序包

28、;(2)std_logic:需打开std_logic_unsigned 或 std_logic_signed 程序包;,33,3、关系运算符:操作符 功能 操作数类型 等于 任何数据类型/=不等于 任何数据类型 大于 integer、real、bit、std_logic等及其一维向量=大于等于 integer、real、bit、std_logic等及其一维向量注(1)关系运算符运算的最后结果总是布尔类型(2)关系运算符两边的数据类型必须相同,但是位的长度不一定相同。(3)对位矢量数据进行比较时,比较从最左边的位开始,自左至右进 行比较的。,34,例:比较下面3组二进制数的大小:“1011”和“

29、101011”;“1”和“011”;“101”和“110”下面是VHDL关系运算的结果:“1011”“101011”“1”“011”“101”“110”上例中的前两个是明显的判断错误,为了能使其正确地进行关系运算,在包集合“std_logic_unsigned”和“std_logic_signed”中对关系运算符重新做了定义,使用时必须要调用这些程序包。,35,【程序】ENTITY rel_1 IS PORT(a,b:IN BITVECTOR(0 TO 3);m:OUT BOOLEAN);END rel_1;ARCHITECTURE example OF rel_1 IS BEGIN m=(a=b);END example;,36,4、并置运算符(连接运算符)并置运算符又称连接运算符,其符号为:注意:操作数必须有相同的类型。,37,VHDL运算符的优先级,运算符 优先级not 高*+(正号)-(负号)+(加号)(减号)&SLL SRL SLA SRA ROL ROR=/=and or nand nor xor xnor 低,38,VHDL语言要素小结,1、文字规则,2、数据对象,3、数据类型,4、运算符,标识符、数字、字符和字符串、位串、注释,常量、变量、信号、文件,VHDL预定义、IEEE预定义、用户自定义(枚举类型),逻辑运算符、算数运算符、关系运算符、并置运算符,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号