1、LOGO.1第二章 VHDL语言的基本要素及基本结构LOGO2022-12-9.2第二章 VHDL的语言要素及基本结构v 要求:v 1掌握:VHDL的命名规则:基本标示符、下标名、段名及注释;VHDL对象(客体)分类定义及其性质;VHDL语言的数据类型:位、位矢量、整形数;枚举类型;IEEE标准的STD_LOGIC、STD_LOGIC_VECTOR;运算操作符;VHDL程序的组成 VHDL语言设计的基本单元及其构成 VHDL构造体描述的几种方法 库及IEEE库中包集合的使用v 2熟悉:VHDL语言的其它数据类型、子程序、包集合及配置 v 3了解:标示符:扩展标识符;数据类型转换 LOGO202
2、2-12-9.3实体说明:entity:描述所设计系统的外部接口信号,是可见的。构造体:architecture描述所设计系统的内部的结构和行为,是不可见的。配置:configuration选取所需单元组成系统的不同版本包集合:package存放各设计模块都能共享的数据类型、常数、子程序和函数。库:library存放已经编译好的实体、构造体、包集合和配置VHDL语言程序最基本组成是实体说明和构造体LOGO2022-12-9.4VHDL的语言要素VHDL的语言要素包含客体(或对象)数据类型操作数运算操作符VHDL规定:(1)不区分大小写(“”和内的字符除外);(2)每条语句以一个分号;结束;(3
3、 3)不是所有语句前都可以加标号;(4 4)一条语句后可以加注释,在注释内容前加两个短划线。LOGO2022-12-9.52.1 VHDL语言的命名规则v 2.1.1 数字型文字v(1)整数文字v(2)实数文字v(3)以数制基数表示的文字v格式:数制#数值#指数值v例如:10#170#E1-十进制1700v16#FE#-十进制254v2#1101_0001#-十进制209v8#376#-十进制254v 16#E#E1-(十六进制数表示,14*161等于224)v(4)物理量文字(VHDL综合器不接受此类文字)。60 s(60秒),100 m(100米),k(千欧姆),177 A(177安培)L
4、OGO2022-12-9.62.1.2 字符串型文字v 字符串型文字包含文字字符串、数位字符串v 数位字符串:位矢量,由数据类型为BIT的元素组成的一维数组 书写格式:基数符“数值”基数符:B二进制数;O八进制数;X十六进制数 例如:data1=B“1_1101_1110”;data2=O“15”;data3=X“AD0”;data4=B“101_010_101_010”;data5=“101_010_101_010”;-表达错误,缺B;data5=“101010101010”;-表达正确,没有“_”默 认为二进制数;data6=“0AD0”;-表达错误,缺X LOGO2022-12-9.72
5、.1.3 标识符v 用来定义实体、结构体、对象(常数、变量、信号)、端口、子程序、语句标号或参数的名字。v VHDL的基本标识符书写遵循规则:由26个大小写英文字母、数字09以及下划线“_”组成;以英文字母开头;不连续使用下划线“_”,不以下划线“_”结尾的;标识符中的英语字母不分大小写;VHDL的保留字(或关键字)不能作为标识符使用。v VHDL 93标准还支持扩展标识符,但是目前仍有许多VHDL工具不支持扩展标识符。由一对反斜杠之间的任何字符序列组成,取消了标准标示符的所有限制。v 合法标示符:Decoder_1,FFT,Sig_N,Not_Ack,State0,Idlev 非法标识符:_
6、Decoder_1,2FFT ,Sig_#N,Not-Ack,v RyY_RST_,data_ _BUS,returnLOGO2022-12-9.82.1.4 下标名v下标名指的是数组型变量或信号的某一个元素。格式:标示符(表达式)v标识符必须是数组型的变量或信号的名字,表达式所代表的值必须是数组下标范围中的一个值,这个值将对应数组中的一个元素。v例如:SIGNALa,b:BIT_VECTOR(0 TO 3);SIGNAL m :INTEGER RANGE 0 TO 3;SIGNAL y,z:BIT;y=a(m);-不可计算型下标表示 z=b(3);-可计算型下标表示LOGO2022-12-9
7、.92.1.5 段名v段名是多个下标名的组合,对应数组中某一段的元素格式:标示符(表达式 方向 表达式)方向:TO 或 DOWNTOSIGNAL a,z:BIT_VECTOR(0 TO 7);Signal b:bit_vector(4 downto 0);z(0 TO 3)=a(4 TO 7);-z(0)(0)=a(4)(4)、z(1)(1)=a(5)LOGO2022-12-9.102.2 VHDL的数据类型及运算操作符v VHDL语言同其它语言一样有多种数据类型和运算符,且它们的定义也大多相同。VHDL语言的特点是用户可以自己定义数据类型。如:type count is integer RA
8、NGE 0 to 10;LOGO2022-12-9.112.2.1 VHDL客体(对象)及其分类客体(对象):可以赋予一个值的对象或者是数据类型所定义的对象。客体主要包括3类信号:变量:常数:代表元件间的硬件连接线全局变量代表暂存某一值的载体局部变量数字电路中的电源和地等全局变量物理意义LOGO2022-12-9.121、VHDL语言对象(客体)常数v 一般某一值在程序中多处用到,为了增加程序的可读性、可修改性,给该常数定义一个常数名,在书写程序时用定义的常数名代替该常数。v 可以在实体、结构体、程序包、块、进程和子程序中定义(说明)。v 在包集合中定义的常量可以暂不设具体数值,它可以在包体中
9、设定。v 常量的使用范围取决于它被定义的位置程序包:实体:构造体:块:由调用该程序包中的任何实体、构造体引用仅作用于该实体仅作用于该构造体仅作用于该块进程:仅作用于该进程子程序:仅作用于该子程序LOGO2022-12-9.131、VHDL语言对象(客体)常数v常数说明的一般格式:CONSTANT 常量名:数据类型=表达式;如:CONSTANT FBUSBIT_VECTOR=“0101”;CONSTANT VCCREAL=5.0;CONSTANT DELYTIME=25 ns;v注意:常数被赋值的类型一定要和定义的数据类型一致,如第二条语句中的5.0若变为5则不正确。LOGO2022-12-9.
10、142、VHDL语言客体变量v 是一个局部量,只能在进程和子程序(过程和函数)中定义和使用。v 变量不能将信息带出对它作出定义的当前设计单元。v 变量在硬件中没有明确的对应物,只是对数据暂存。v 变量的赋值是立即发生,不存在任何延时的行为。v 常用在实现某种算法的赋值语句中,赋值符号为“:=”v 变量说明语句格式:variable 变量名1,变量名2,:数据类型 约束条件:=表达式;v 注意:n 1、语句中用 括起部分可有可无n 2、表达式:给变量赋初值n 3、变量赋值符号为“:=”n 4、变量赋值立即生效,因此变量赋值不能够加延时条件n 5、逻辑综合时初值无效n 6、多个变量具有相同的数据类
11、型和约束条件时可以在同一条变量定义语句中定义LOGO2022-12-9.15变量定义赋值举例Variable x,y:integer;Variable x:integer range 0 to 255:=10;Variable temp1,temp2:integer;变量赋值语句:变量定义语句:Temp1:=temp2;Temp1:=temp2 after 10ns ;此语句对吗?LOGO2022-12-9.163、VHDL语言客体信号v 信号可以作为模块间的信息交流通道,与硬件中互连元件端口的的连线相对应;v 信号及其相关的语句描述了硬件系统的基本特征;如硬件系统运行的并行性;信号传输过程中
12、的惯性延时特性;多驱动源的总线行为等。信号赋值不立即生效v 信号的定义格式如下:SIGNAL 信号名:数据类型 约束条件=初始值;初始值仅在VHDL的行为仿真中有效,逻辑综合无效 信号代入符号为“=”,但是赋初值符号为“:=”信号赋值不立即生效,因此信号代入能够加延时条件n 多个信号具有相同的数据类型和约束条件时可以在同一条信号定义语句中定义v 具有全局性特性,可以在以下区域定义和使用:实体:作用于该实体中所有的结构体 结构体:作用于整个结构体 包集合:作用于调用此包集合的所有实体v 除了没有方向说明以外,信号与实体的端口(PORT)概念是一致的。LOGO2022-12-9.17VHDL语言客
13、体信号v SIGNAL Sys_clk:bit=0;-定义了一个位BIT的信号S1,初始值为低电平v SIGNAL ground:BIT=0;-定义了一个位BIT的信号ground,初始值为低电平 以上两条信号定义语句可以改写成一条信号定义语句:Signal Sys_clk,ground:STD_LOGIC=0;v SIGNAL S4:STD_LOGIC_VECTOR(15 DOWNTO 0);-定义了一个标准逻辑位矢量(数组、总线)信号,共有16个元素v SIGNAL S5:integer range 0 to 9;;-定义了一整型数据类型的信号s5,其取值只能是0到9的整数v 信号赋值可以
14、加延时条件:SIGNAL S1bit;SIGNAL s2:bit;S2=s1 after 10 ns;LOGO2022-12-9.184、信号、变量、常量的比较v从硬件电路系统来看 常量相当于电路中的恒定电平,如GND或VCC接口 变量和信号则相当于组合电路系统中门与门间的连接及其连线上的信号值。v从行为仿真和VHDL语句功能上看 信号可以设置延时量,而变量则不能;变量只能作为局部的信息载体,而信号则可作为模块间的信息载体。变量的设置有时只是一种过渡,最后的信息传输和界面间的通信都靠信号来完成。LOGO2022-12-9.19信号、变量、常量的比较v从综合后所对应的硬件电路结构来看 信号将对应
15、更多的硬件结构,变量在硬件上一般没有对应实物。VHDL综合器并不理会它们在接受赋值时存在的延时特性。vVHDL仿真器允许变量和信号设置初始值,但在实际应用中,VHDL综合器并不会把这些信息综合进去。因为实际的FPGA/CPLD芯片在上电后,并不能确保其初始状态的取向。因此,对于时序仿真来说,设置的初始值在综合时是没有实际意义的。LOGO2022-12-9.20D触发器的四种不同描述v Entity dff1 isv port(clk,d:in bit;v q:out bit);v End dff1;v Architecture bhv of dff1 isv Beginv D1:process
16、(clk)v variable qq:bit;v Beginv if clkevent and clk=1 thenv qq:=d;v q=qq;v end if;v End process;v End bhv;v Entity dff2 isv port(clk,d:in bit;v q:out bit);v End dff2;v Architecture bhv of dff2 isv signal qq:bit;v Beginv D1:process(clk)v Beginv if clkevent and clk=1 thenv qq=d;v end if;v End process;
17、v q=qq;v End bhv;dclkqDff1dclkqDff2dff1综合后的结果dff2综合后的结果LOGO2022-12-9.21D触发器的四种不同描述v Entity dff3 isv port(clk,d:in bit;v q:out bit);v End dff3;v Architecture bhv of dff3 isv Beginv D1:process(clk)v variable a,b:bit;v Beginv if clkevent and clk=1 thenv a=d;v b:=a;v q=b;v end if;v End process;v End bhv
18、;dclkqDff3Dff4v Entity dff4 isv port(clk,d:in bit;v q:out bit);v End dff4;v Architecture bhv of dff4 isv signal a,b:bit;v Beginv D1:process(clk)v Beginv if clkevent and clk=1 thenv a=d;v b=a;v q=b;v end if;v End process;v End bhv;dclkqdclkqdclkqabDff3综合后结果Dff4综合后结果LOGO2022-12-9.225、信号和变量使用的区别赋值(代入)语
19、句的符号不同:=变量赋值符号=信号代入符号操作过程不同:变量在上一条语句赋值,下一条语句即可使用。变量不能列入进程语句的敏感表。信号代入语句的处理和代入过程是分开进行的。信号语句即使被处理也不会立即发生代入,下一条语句用到该信号,仍使用原来的信号值。在进程语句中,当进程结束或遇到wait语句时,信号代入过程才被执行。信号可以列入进程的敏感表LOGO2022-12-9.23例2-5 Process(A,B,C,D)BeginD=A;X=B+D;D=C;Y=B+D;End process;Process(A,B,C)Variable D:std_logic_vector(3 downto 0);B
20、eginD:=A;X=B+D;D:=C;Y=B+DEnd process;例1结果:X=B+C;Y=B+C;例2结果:X=B+A;Y=B+C;WAIT FOR 10nsWAIT FOR 10ns注意:在同一个进程中,同一信号赋值目标有多个赋值源时,只获得最后一个赋值源的赋值。加入WAIT语句后,信号赋值立即生效。结果同例2结果。LOGO2022-12-9.242.2.2 VHDL中的数据类型1、VHDL语言的数据类型的载体:常数、变量、信号VHDL是一种强类型语言,要求设计实体中的每一个常数、信号、变量等都必须具有确定的数据类型,并且相同数据类型及量才能互相传递和作用。VHDL作为强类型语言的
21、好处是使VHDL编译或综合工具很容易地找出设计中的各种常见错误。VHDL中的数据类型可以分成三大类。(不同书分类方法不完全一致)三类标准数据类型:10种用户自定义数据类型:8种IEEE预定义标准逻辑位与矢量LOGO2022-12-9.251、标准数据类型v标准数据类型是最基本的数据类型,包括:实数类型、整数类型、位类型、字符类型和时间类型等,共10种。重点:整数类型和位类型v这些数据类型都已在VHDL的标准程序包standard和std_logic_1164及其他的标准程序包中作了定义,并可在设计中随时调用。LOGO2022-12-9.261)标准数据类型整数(INTEGER)型v 取值范围是
22、-21 473 647+21 473 647范围:(231 1)(231 1)32位v 对于VHDL仿真器,整数作为有符号数;v 对于VHDL综合器,整数作为无符号数处理;要求用RANGE子句为所定义的数限定范围,然后据此决定表示此信号或变量的二进制数的位数。如语句“SIGNAL A INTEGER RANGE 0 TO 15;”规定信号A的取值范围是015共16个整数值,可用4位二进制数来表示,因此A将被综合成由四条信号线构成的信号。v 整数常量的书写方式:2 -十进制整数 10E4 -十进制整数 16#D2#-十六进制整数 2#11011010#-二进制整数LOGO2022-12-9.27
23、2)标准数据类型实数(REAL)型v类似于数学上的实数,或称浮点数。取值范围为-1.0E38+1.0E38。通常情况下,仅能在VHDL仿真器中使用 VHDL综合器不支持实数,因为实数类型的实现相当复杂,目前在电路规模上难以承受。v实数常量的书写方式举例如下:65971.333333 -十进制浮点数 43.6E-4 -十进制浮点数LOGO2022-12-9.283)标准数据类型位(BIT)型v取值只能是1或0;位值的表示方法是:0或1;v位数据类型的数据对象,如变量、信号等,可以参与逻辑运算,运算结果仍是位的数据类型。vVHDL综合器用一个二进制位表示BIT。LOGO2022-12-9.294)
24、标准数据类型位矢量(BIT_VECTOR)型v 位矢量是基于BIT数据类型的数组 STANDARD 程序包中BIT _VETOR类型定义如下:TYPE BIT _VETOR IS ARRAY(NATURAL RANGE)OF BIT;v 使用位矢量必须注明位宽-数组中的元素个数和排列方向;例如:SIGNAL ABIT_VECTOR(7 DOWNTO 0);信号A被定义为一个具有8位位宽的矢量,它的最左位是A(7),最右位是A(0)。例如:SIGNAL ABIT_VECTOR(0 TO 7);信号A被定义为一个具有8位位宽的矢量,它的最左位是A(0),最右位是A(7)。v 位矢量的表示方法是:双
25、引号括起来的一组位数据,如:“01100”或x“00bb”十六进制表示前加x。LOGO2022-12-9.305)标准数据类型布尔(BOOLEAN)型v定义布尔数据类型的源代码如下:vTYPE BOOLEAN IS(FALSE,TRUE);v取值有FALSE和TRUE两种。v综合器将用一个二进制位表示BOOLEAN型变量或信号。例如,当A大于B时,在IF语句中的关系运算表达式(AB)的结果是布尔量TRUE,反之为FALSE。综合器将其变为1或0信号值,对应于硬件系统中的一根线v布尔类型的变量或信号只可以进行关系运算。v例如:SIGNAL flag:boolean;flagtodaytodayt
26、odayeatable eatable eatable=egg;end case;End process;End behave;LOGO2022-12-9.422)用户自定义类型整数类型和实数类型v目的:标准的程序包中的定义取值定义范围太大,综合器综合结果占有资源太多。用户根据实际的需要限定其取值范围,以便能使综合器更好的综合。v定义格式:TYPE 数据类型名 IS 数据类型定义 约束范围;约束范围:range(数据范围)如:TYPE digit IS INTEGER RANGE 0 TO 9;如:TYPE current IS REAL RANGE-1E4 TO 1E4;LOGO2022-1
27、2-9.433)用户自定义类型数组类型v 数组:是将一组具有相同数据类型的元素集合在一起,作为一个数据对象来处理的数据类型。可以是一维(每个元素只有一个下标)或多维(每个元素有多个下标)。VHDL仿真器都支持,但VHDL综合器只支持一维数组。v VHDL允许定义两种不同类型的数组:限定性数组和非限定性数组 限定性数组:下标的取值范围在数组定义时就被确定;非限定性数组:下标的取值范围需留待随后根据具体数据对象再确定。LOGO2022-12-9.44限定性数组定义语句格式如下:type 数据类型名 is array 范围 of 原数据类型;如:TYPE word IS ARRAY(1 TO 8)O
28、F STD_LOGIC;数据类型名称是word,8个元素,下标排序是1,2,3,4,5,6,7,8,各元素的排序是word(1),word(2),word(7),word(8)。每个元素的数据类型为std_logic。注意:若范围一项的数据类型没有,则默认integer类型若用其它数据类型指定范围,应在指定范围前加数据类型名新定义的限定性数组类型的名称,可以是任何标识符;指出数组元素数量和排序方式,一般用整数来表示其范围;指数组各元素的数据类型用户自定义类型数组类型:限定性数组LOGO2022-12-9.45用户自定义类型数组类型:限定性数组v 用其它的数据类型指定范围举例:v TYPE in
29、struction IS(ADD,SUB,INC,SRL,SRF,LDA,LDB,XFR);v SUBTYPE digit IS INTEGER range 0 TO 9;v TYPE insflag IS ARRAY(instruction ADD TO SRF)OF digit;v 这数组有五个元素,元素的下标是ADD到SRF,每个元素数据类型是digit。v 数组常在总线、ROM和RAM中使用。v 例如:设计一个2568的ROM存储器Subtype word is std_logic_vector(7 dowmto 0);Type memory is array(0 to 255)of
30、word;Varaible rom:memory;LOGO2022-12-9.46用户自定义类型数组类型:非限制性数组v 格式:TYPE 数组名 IS ARRAY(数组下标类型 RANGE)OF 数据类型;TYPE STD_LOGIC_VECTOR IS ARRAY(NATURAL RANGE)OF STD_LOGIC;VARABLE VA:STD_LOGIC _VECTOR(0 TO 6);(具体数据对象)LOGO2022-12-9.47二维数组v 定义格式:v Type 数据类型名 is array(行范围,列范围)of 原数据类型;v 例如:v TYPE memory IS ARRAY(
31、0 TO 5,7 DOWNTO 0)OF STD_LOGIC;v CONSTANT romdata:memory:=v (0,0,0,0,0,0,0,0),v (0,1,1,1,0,0,0,1),v (0,0,0,0,0,1,0,1),v (1,0,1,0,1,0,1,0),v (1,1,0,1,1,1,0,0)v (1,1,1,1,1,1,1,1);v Signal data_bit:STD_LOGIC;v Data_bit=romdata(3,7);LOGO2022-12-9.484)用户自定义类型记录类型v 由已定义的、数据类型不同的对象元素构成的数组v语句格式:TYPE 记录类型名 I
32、S RECORD 元素名 :元素数据类型;元素名 :元素数据类型;END RECORD 记录类型名;LOGO2022-12-9.49用户自定义类型记录类型举例v TYPE bank IS RECORD -将bank定义为四元素记录类型v addr0STD_LOGIC_VECTOR(7 DOWNTO 0);v addr1STD_LOGIC_VECTOR(7 DOWNTO 0);v r0INTEGER;v instinstruction;(假设是以前定义好的枚举数据类型)v END RECORD;v SIGNAL addbus1,addbus2:STD_LOGIC_VECTOR(7 DOWNTO
33、0);v SIGNAL result:INTEGER;v SIGNAL alu_code:instruction;v SIGNAL r_bank:bank:=(“00000000”,”00000000”,0,ADD);v v addbus1=r_bank.addr1;v r_bank.inst=alu_code;LOGO2022-12-9.503、用户定义的子类型v 子类型是由用户对已定义的原数据类型做一些范围限制而形成的一种新的数据类型。v 子类型SUBTYPE的语句格式如下:Subtype 子类型名 is 基本数据类型名范围;v 例如:subtype abus is std_logic_v
34、ector(7 downto 0);v signal aio:std_logic_vector(7 downto 0);v signal bio:std_logic_vector(15 downto 0);v signal cio:abus;v v aio=cio;v bio=cio;对吗?LOGO2022-12-9.515、数据类型的限定v 数据类型可以根据所描述的文字的上下关系来判断 SIGNAL a:STD_LOGIC_VECTOR(7 DOWNTO 0);a Y Y=“10111111”;END CASE;v 限定方法 SUBTYPE STD3BIT IS STD_LOGIC_VECT
35、OR(0 TO 2);CASE STD3BIT(a&b&c)IS -限定(a&b&c)的类型为STD3BIT -限定方法:数据类型名对象名LOGO2022-12-9.526、IEEE标准STD_LOGIC和STD_LOGIC_VECTORv 在IEEE库的程序包STD_LOGIC_1164中,定义了两个非常重要的数据类型,即标准逻辑位STD_LOGIC 和标准逻辑矢量STD_LOGIC_VECTOR。v 它们是对bit和bit_vector两种数据类型的补充。v Bit 只有0和1两种状态。v标准逻辑位STD_LOGIC 在STD_LOGIC_1164包集合中的定义的语句如下:TYPE STD
36、_LOGIC IS(U,X,0,1,Z,W,L,H,-);U-未初始化的,X-强不定态,0-强0,1-强1,Z-高阻态,W-弱不定态,L-弱0,H-弱1,-忽略v标准逻辑矢量STD_LOGIC_VECTOR(二进制)他是由一组STD_LOGIC元素组成的一维数组;在STD_LOGIC_1164包集合中的定义的语句如下:TYPE STD_LOGIC_VECTOR IS ARRAY(NATURAL RANGE)OF STD_LOGIC;LOGO2022-12-9.53注意:(1)Bit_vector:可以是二进制数,也可以是十六进制数或八进制;还可使用“_”将二进制数隔开。v(2)Std_logi
37、c_vector:只能是二进制数。v(3)在使用时,必须在程序的开头说明包含着两种数据类型的包集合和包集合所在的库。Library ieee;Use IEEE.std_logic_1164.all;LOGO2022-12-9.544、数据类型的转换vVHDL是一种强类型语言 即使对于数据类型非常接近的数据对象,在相互操作时,也需要进行数据类型转换。v类型转换函数 通常由VHDL语言包集合提供LOGO2022-12-9.55STD_LOGIC_1164STD_LOGIC_1164包集合 中定义的数据类型转换函数及对应的数据类型转换如下:to_stdlogicvector(A)to_bitvect
38、or(A)to_stdlogic(A)to_bit(A)to_bit(A)由bit_vector转换成std_logic_vector由std_logic_vector转换成bit_vector由bit转换成std_logic由std_logic转换成bitbit 变换函数通常由三个包集合提供:在VHDL语言中,不同类型的数据是不能进行运算和代入的,要实现这些操作必须进行数据类型的转换。4、数据类型的转换(续)LOGO2022-12-9.56STD_LOGIC_ARITHSTD_LOGIC_ARITH包集合中定义的数据类型转换函数集对应的数据类型转换如下:conv_std_logic_vect
39、or(A,位长)conv_integer(A)conv_integer(A)由integerinteger,unsigned和signed转换成std_logic_vector由unsigned和signed转换成integerinteger STD_LOGIC_UNSIGNEDSTD_LOGIC_UNSIGNED包 集合定义的数据类型转换函数集对应的数据类型转换如下:conv_integer(A)conv_integer(A)由std_logic_vectorstd_logic_vector转换成integerinteger4、数据类型的转换(续)LOGO2022-12-9.57数据类型转换
40、举例LIBRARYIEEE;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 add5;ARCHITECTURE rtl OF add5 ISSIGNAL in_num:INTEGER RANGE 0 TO 7;BEGIN In_num=,/=,=并置运算符:&六种移位操作符号SLL、SRL、SLA、SRA、ROL和ROR是VHDL93标准新增的运算符。省略赋值操作符:(OTHERS=X)LOGO2022-
41、12-9.59运算符的优先级书P43 页 表2-5中运算符一项中每一行的优先级相同。六种移位操作符号SLL、SRL、SLA、SRA、ROL和ROR优先级高于一般的关系运算符。LOGO2022-12-9.601、逻辑运算符注意:(1)只可以对std_logic,std_logic_vector,bit,bit_vector,boolean型数据进行逻辑运算。(2)运算符的左右及代入的信号数据类型必须相同。(3)在一个语句中,若有两个以上的逻辑表达式时,有时需在相应的表达式中加括号。例如:X=(a and b)or(not c and d);(4)如果一个逻辑表达式中只有AND,OR,XOR运算符
42、,括号可省略。其他不行。例如:A=(b nand c)nand d)nand e;1011A=,=,:整数、实数、std_logic、bit及,bit_vector,std_logic_vectorv 注意:(1)操作数的数据类型必须一致 (2)位长可以不同。但可能出错。(3)位矢量数据比较从左到右按位比较,当比较其中一位不等,则给 出结果,不再继续下一位的比较。例如:Signal a:std_logic_vector(3 downto 0);Signal b:std_logic_vector(2 downto 0);v 若要进行位长不同的位矢量的关系运算必须加入语句Library ieee;
43、use ieee.std_logic_unsigned.all例如:a=”1010”;bb)thenLOGO2022-12-9.634、并置(连接)运算符&u并置运算符&完成一维数组的连接;u其操作过程是将右操作数连接在左操作数的后边,形成一个新的一维数组;常用于位或位矢量类型对象的连接。图2-3所示:y(0)=b(0)and en y(1)=b(1)and en y(2)=b(2)and en y(3)=b(3)and en y(4)=a(0)y(5)=a(1)y(6)=a(2)y(7)=a(3)y(7)=a(3)从左边可以看出a,b是四位长度的矢量,而y的位长是8位,上述情况可以表示成:t
44、mp_b=b AND(en&en&en&en);y=a&tmp_b;y=a&tmp_b;注意:(1)位连接也可以用集合体的方法,将并置符“&”换成“,”即可(2)集合体的方法,不适应于有位矢量的连接。LOGO2022-12-9.64并置(连接)运算符举例例如:tmp_b=b AND(en,en,en,en);tmp_b=b AND(en,en,en,en);y=(ay=(a,tmp_btmp_b);对吗?集合体可以用指定位的脚标表示:signal tmp_c:std_logic_vector(3 downto 0);tmp_cen,2=en,1=en,0=en);tmp_cen,2=en,1=
45、en,0=en);或 tmp_ctmp_c0 0,others=en);,others=en);如果用此方法,othersothers项必放最后。或 tmp_cen);tmp_cen);或 tmp_cen);tmp_cen);LOGO2022-12-9.655、省略赋值操作符(聚合赋值符)v格式:others=Xv例如:Signal d1:STD_LOGIC_VECTOR(7 DOWNTO 0);d10);一般用于较多位的位矢量赋值中有多位值相同时,做省略化的赋值。LOGO2022-12-9.66习题1、定义一个常数,数据类型为实数,数值任意。2、定义一个变量,数据类型为16位标准逻辑位矢量,
46、然后将二进制数1111 1011 0011 0000对其赋值。3、定义一个变量,数据类型为位类型且给初始值0。4、定义一个信号,数据类型为0到255的所有整数。5、定义枚举类型,类型名为state,包含元素为S1,S2,S3,S4,S5五个元素,然后用该数据类型定义信号now_state和next_state。6、改正下面标示符中错误:#state,temp-1,signal,2apple,state_ _1,*Vcc,GND_7、signal A,B,C:BIT;signal D:bit_vector(0 to 2);signal E:bit_vector(0 to 5);将A、B、C连接起
47、来赋值给D;将A、B、C、D连接起来赋值给E;LOGO2022-12-9.67习题续8、设计一个系统,它有3个输入端口,它们的数据类型为std_logic;一个输出端口,类型为std_logic_vector(0 to 3)。试写出该系统设计实体VHDL程序框架结构。要求结构体中说明信号A、B,它们为std_logic类型。功能描述用一个process语句,其中需说明变量c,为std_logic类型。所有信号均为process语句的敏感信号。LOGO2022-12-9.68实体说明、构造体、配置、包集合、库ENTITY ENTITY ent1 ISent1 IS.BEGINBEGIN.END
48、ENTITY ent1;END ENTITY ent1;CONFIGURATION CONFIGURATION cfg1 OF ent1 IScfg1 OF ent1 IS.END CONFIGURATION cfg1;END CONFIGURATION cfg1;PACKAGEPACKAGE pkg1 IS pkg1 IS.NED PACKAGE pkg1NED PACKAGE pkg1PACKAGE BODPACKAGE BODY Y pkg1 IS pkg1 IS.END PACKAGE BODY pkg1;END PACKAGE BODY pkg1;ARCHITCTURARCHITCT
49、URE E arch3 OF ent1 IS arch3 OF ent1 IS.ARCHITCTURARCHITCTURE E arch3 OF ent1 IS arch3 OF ent1 IS.ARCHITECTURE arch2 OF ent1 ISARCHITECTURE arch2 OF ent1 IS.ARCHITECTURE arch1 OF ent1 ISARCHITECTURE arch1 OF ent1 IS.BEGINBEGIN.END ARCHITECTURE arch1;END ARCHITECTURE arch1;公用设计数据公用设计数据初级设计单元初级设计单元次级设
50、计单元次级设计单元VHDL的设计单元实体说明构造体配置包集合和库LOGO2022-12-9.692.3 VHDL语言设计的基本单元及其构成VHDL语言设计的基本单元就是一个设计实体。库、程序包调用说明ENTITY(实体)说明ARCHITECTURE(结构体)说明注意:库、程序包调用说明语句不是必须的,需要则有;另外两部分是必须有的。VHDL语言描述设计实体的一般格式:LOGO2022-12-9.70VHDL语言一般结构举例Library ieee;Use ieee.std_logic_1164.all;Entity fredivider isPort(clock:in std_logic;cl
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。