




已阅读5页,还剩107页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,第二章VHDL语言的基本要素及基本结构,2020/4/29,.,2,第二章VHDL的语言要素及基本结构,要求:1掌握:VHDL的命名规则:基本标示符、下标名、段名及注释;VHDL对象(客体)分类定义及其性质;VHDL语言的数据类型:位、位矢量、整形数;枚举类型;IEEE标准的STD_LOGIC、STD_LOGIC_VECTOR;运算操作符;VHDL程序的组成VHDL语言设计的基本单元及其构成VHDL构造体描述的几种方法库及IEEE库中包集合的使用2熟悉:VHDL语言的其它数据类型、子程序、包集合及配置3了解:标示符:扩展标识符;数据类型转换,2020/4/29,.,3,VHDL语言程序通常包含5部分:,实体说明:entity:,描述所设计系统的外部接口信号,是可见的。,构造体:architecture,描述所设计系统的内部的结构和行为,是不可见的。,配置:configuration,选取所需单元组成系统的不同版本,包集合:package,存放各设计模块都能共享的数据类型、常数、子程序和函数。,库:library,存放已经编译好的实体、构造体、包集合和配置,VHDL语言程序最基本组成是实体说明和构造体,2020/4/29,.,4,VHDL的语言要素,VHDL的语言要素包含,客体(或对象),数据类型,操作数,运算操作符,VHDL规定:(1)不区分大小写(“”和内的字符除外);(2)每条语句以一个分号;结束;(3)不是所有语句前都可以加标号;(4)一条语句后可以加注释,在注释内容前加两个短划线。,2020/4/29,.,5,2.1VHDL语言的命名规则,2.1.1数字型文字(1)整数文字(2)实数文字(3)以数制基数表示的文字格式:数制#数值#指数值例如:10#170#E1-十进制170016#FE#-十进制2542#1101_0001#-十进制2098#376#-十进制25416#E#E1-(十六进制数表示,14*161等于224)(4)物理量文字(VHDL综合器不接受此类文字)。60s(60秒),100m(100米),k(千欧姆),177A(177安培),2020/4/29,.,6,2.1.2字符串型文字,字符串型文字包含文字字符串、数位字符串数位字符串:位矢量,由数据类型为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,2020/4/29,.,7,2.1.3标识符,用来定义实体、结构体、对象(常数、变量、信号)、端口、子程序、语句标号或参数的名字。VHDL的基本标识符书写遵循规则:由26个大小写英文字母、数字09以及下划线“_”组成;以英文字母开头;不连续使用下划线“_”,不以下划线“_”结尾的;标识符中的英语字母不分大小写;VHDL的保留字(或关键字)不能作为标识符使用。VHDL93标准还支持扩展标识符,但是目前仍有许多VHDL工具不支持扩展标识符。由一对反斜杠之间的任何字符序列组成,取消了标准标示符的所有限制。合法标示符:Decoder_1,FFT,Sig_N,Not_Ack,State0,Idle非法标识符:_Decoder_1,2FFT,Sig_#N,Not-Ack,RyY_RST_,data_BUS,return,2020/4/29,.,8,2.1.4下标名,下标名指的是数组型变量或信号的某一个元素。格式:标示符(表达式)标识符必须是数组型的变量或信号的名字,表达式所代表的值必须是数组下标范围中的一个值,这个值将对应数组中的一个元素。例如:SIGNALa,b:BIT_VECTOR(0TO3);SIGNALm:INTEGERRANGE0TO3;SIGNALy,z:BIT;y=a(m);-不可计算型下标表示z=b(3);-可计算型下标表示,2020/4/29,.,9,2.1.5段名,段名是多个下标名的组合,对应数组中某一段的元素格式:标示符(表达式方向表达式)方向:TO或DOWNTOSIGNALa,z:BIT_VECTOR(0TO7);Signalb:bit_vector(4downto0);z(0TO3)=a(4TO7);-z(0)=a(4)、z(1)=a(5),2020/4/29,.,10,2.2VHDL的数据类型及运算操作符,VHDL语言同其它语言一样有多种数据类型和运算符,且它们的定义也大多相同。VHDL语言的特点是用户可以自己定义数据类型。如:typecountisintegerRANGE0to10;,2020/4/29,.,11,2.2.1VHDL客体(对象)及其分类,客体(对象):可以赋予一个值的对象或者是数据类型所定义的对象。,客体主要包括3类,信号:,变量:,常数:,代表元件间的硬件连接线全局变量,代表暂存某一值的载体局部变量,数字电路中的电源和地等全局变量,物理意义,2020/4/29,.,12,1、VHDL语言对象(客体)常数,一般某一值在程序中多处用到,为了增加程序的可读性、可修改性,给该常数定义一个常数名,在书写程序时用定义的常数名代替该常数。可以在实体、结构体、程序包、块、进程和子程序中定义(说明)。在包集合中定义的常量可以暂不设具体数值,它可以在包体中设定。常量的使用范围取决于它被定义的位置,2020/4/29,.,13,1、VHDL语言对象(客体)常数,常数说明的一般格式:CONSTANT常量名:数据类型=表达式;如:CONSTANTFBUSBIT_VECTOR=“0101”;CONSTANTVCCREAL=5.0;CONSTANTDELYTIME=25ns;注意:常数被赋值的类型一定要和定义的数据类型一致,如第二条语句中的5.0若变为5则不正确。,2020/4/29,.,14,2、VHDL语言客体变量,是一个局部量,只能在进程和子程序(过程和函数)中定义和使用。变量不能将信息带出对它作出定义的当前设计单元。变量在硬件中没有明确的对应物,只是对数据暂存。变量的赋值是立即发生,不存在任何延时的行为。常用在实现某种算法的赋值语句中,赋值符号为“:=”变量说明语句格式:variable变量名1,变量名2,:数据类型约束条件:=表达式;注意:1、语句中用括起部分可有可无2、表达式:给变量赋初值3、变量赋值符号为“:=”4、变量赋值立即生效,因此变量赋值不能够加延时条件5、逻辑综合时初值无效6、多个变量具有相同的数据类型和约束条件时可以在同一条变量定义语句中定义,2020/4/29,.,15,变量定义赋值举例,Variablex,y:integer;,Variablex:integerrange0to255:=10;,Variabletemp1,temp2:integer;,变量赋值语句:,变量定义语句:,Temp1:=temp2;,Temp1:=temp2after10ns;此语句对吗?,2020/4/29,.,16,3、VHDL语言客体信号,信号可以作为模块间的信息交流通道,与硬件中互连元件端口的的连线相对应;信号及其相关的语句描述了硬件系统的基本特征;如硬件系统运行的并行性;信号传输过程中的惯性延时特性;多驱动源的总线行为等。信号赋值不立即生效信号的定义格式如下:SIGNAL信号名:数据类型约束条件=初始值;初始值仅在VHDL的行为仿真中有效,逻辑综合无效信号代入符号为“=”,但是赋初值符号为“:=”信号赋值不立即生效,因此信号代入能够加延时条件多个信号具有相同的数据类型和约束条件时可以在同一条信号定义语句中定义具有全局性特性,可以在以下区域定义和使用:实体:作用于该实体中所有的结构体结构体:作用于整个结构体包集合:作用于调用此包集合的所有实体除了没有方向说明以外,信号与实体的端口(PORT)概念是一致的。,2020/4/29,.,17,VHDL语言客体信号,SIGNALSys_clk:bit=0;-定义了一个位BIT的信号S1,初始值为低电平SIGNALground:BIT=0;-定义了一个位BIT的信号ground,初始值为低电平以上两条信号定义语句可以改写成一条信号定义语句:SignalSys_clk,ground:STD_LOGIC=0;SIGNALS4:STD_LOGIC_VECTOR(15DOWNTO0);-定义了一个标准逻辑位矢量(数组、总线)信号,共有16个元素SIGNALS5:integerrange0to9;;-定义了一整型数据类型的信号s5,其取值只能是0到9的整数信号赋值可以加延时条件:SIGNALS1bit;SIGNALs2:bit;S2=s1after10ns;,2020/4/29,.,18,4、信号、变量、常量的比较,从硬件电路系统来看常量相当于电路中的恒定电平,如GND或VCC接口变量和信号则相当于组合电路系统中门与门间的连接及其连线上的信号值。从行为仿真和VHDL语句功能上看信号可以设置延时量,而变量则不能;变量只能作为局部的信息载体,而信号则可作为模块间的信息载体。变量的设置有时只是一种过渡,最后的信息传输和界面间的通信都靠信号来完成。,2020/4/29,.,19,信号、变量、常量的比较,从综合后所对应的硬件电路结构来看信号将对应更多的硬件结构,变量在硬件上一般没有对应实物。VHDL综合器并不理会它们在接受赋值时存在的延时特性。VHDL仿真器允许变量和信号设置初始值,但在实际应用中,VHDL综合器并不会把这些信息综合进去。因为实际的FPGA/CPLD芯片在上电后,并不能确保其初始状态的取向。因此,对于时序仿真来说,设置的初始值在综合时是没有实际意义的。,2020/4/29,.,20,D触发器的四种不同描述,Entitydff1isport(clk,d:inbit;q:outbit);Enddff1;Architecturebhvofdff1isBeginD1:process(clk)variableqq:bit;Beginifclkeventandclk=1thenqq:=d;q=qq;endif;Endprocess;Endbhv;,Entitydff2isport(clk,d:inbit;q:outbit);Enddff2;Architecturebhvofdff2issignalqq:bit;BeginD1:process(clk)Beginifclkeventandclk=1thenqq=d;endif;Endprocess;q=qq;Endbhv;,dff1综合后的结果,dff2综合后的结果,2020/4/29,.,21,D触发器的四种不同描述,Entitydff3isport(clk,d:inbit;q:outbit);Enddff3;Architecturebhvofdff3isBeginD1:process(clk)variablea,b:bit;Beginifclkeventandclk=1thena=d;b:=a;q=b;endif;Endprocess;Endbhv;,Dff4,Entitydff4isport(clk,d:inbit;q:outbit);Enddff4;Architecturebhvofdff4issignala,b:bit;BeginD1:process(clk)Beginifclkeventandclk=1thena=d;b=a;q=b;endif;Endprocess;Endbhv;,Dff3综合后结果,Dff4综合后结果,2020/4/29,.,22,5、信号和变量使用的区别,赋值(代入)语句的符号不同:,:=变量赋值符号,=信号代入符号,操作过程不同:,变量在上一条语句赋值,下一条语句即可使用。变量不能列入进程语句的敏感表。,信号代入语句的处理和代入过程是分开进行的。信号语句即使被处理也不会立即发生代入,下一条语句用到该信号,仍使用原来的信号值。在进程语句中,当进程结束或遇到wait语句时,信号代入过程才被执行。信号可以列入进程的敏感表,2020/4/29,.,23,例2-5,Process(A,B,C,D)BeginD=A;X=B+D;D=C;Y=B+D;Endprocess;,Process(A,B,C)VariableD:std_logic_vector(3downto0);BeginD:=A;X=B+D;D:=C;YB)的结果是布尔量TRUE,反之为FALSE。综合器将其变为1或0信号值,对应于硬件系统中的一根线布尔类型的变量或信号只可以进行关系运算。例如:SIGNALflag:boolean;flagtodaytodaytodayeatableeatableeatable=egg;endcase;Endprocess;Endbehave;,2020/4/29,.,42,2)用户自定义类型整数类型和实数类型,目的:标准的程序包中的定义取值定义范围太大,综合器综合结果占有资源太多。用户根据实际的需要限定其取值范围,以便能使综合器更好的综合。定义格式:TYPE数据类型名IS数据类型定义约束范围;约束范围:range(数据范围)如:TYPEdigitISINTEGERRANGE0TO9;如:TYPEcurrentISREALRANGE-1E4TO1E4;,2020/4/29,.,43,3)用户自定义类型数组类型,数组:是将一组具有相同数据类型的元素集合在一起,作为一个数据对象来处理的数据类型。可以是一维(每个元素只有一个下标)或多维(每个元素有多个下标)。VHDL仿真器都支持,但VHDL综合器只支持一维数组。VHDL允许定义两种不同类型的数组:限定性数组和非限定性数组限定性数组:下标的取值范围在数组定义时就被确定;非限定性数组:下标的取值范围需留待随后根据具体数据对象再确定。,2020/4/29,.,44,限定性数组定义语句格式如下:,type数据类型名isarray范围of原数据类型;,如:TYPEwordISARRAY(1TO8)OFSTD_LOGIC;,数据类型名称是word,8个元素,下标排序是1,2,3,4,5,6,7,8,各元素的排序是word(1),word(2),word(7),word(8)。每个元素的数据类型为std_logic。,注意:,若范围一项的数据类型没有,则默认integer类型,若用其它数据类型指定范围,应在指定范围前加数据类型名,新定义的限定性数组类型的名称,可以是任何标识符;,指出数组元素数量和排序方式,一般用整数来表示其范围;,指数组各元素的数据类型,用户自定义类型数组类型:限定性数组,2020/4/29,.,45,用户自定义类型数组类型:限定性数组,用其它的数据类型指定范围举例:TYPEinstructionIS(ADD,SUB,INC,SRL,SRF,LDA,LDB,XFR);SUBTYPEdigitISINTEGERrange0TO9;TYPEinsflagISARRAY(instructionADDTOSRF)OFdigit;这数组有五个元素,元素的下标是ADD到SRF,每个元素数据类型是digit。数组常在总线、ROM和RAM中使用。例如:设计一个2568的ROM存储器,Subtypewordisstd_logic_vector(7dowmto0);Typememoryisarray(0to255)ofword;Varaiblerom:memory;,2020/4/29,.,46,用户自定义类型数组类型:非限制性数组,格式:TYPE数组名ISARRAY(数组下标类型RANGE)OF数据类型;TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE)OFSTD_LOGIC;VARABLEVA:STD_LOGIC_VECTOR(0TO6);(具体数据对象),2020/4/29,.,47,二维数组,定义格式:Type数据类型名isarray(行范围,列范围)of原数据类型;例如:TYPEmemoryISARRAY(0TO5,7DOWNTO0)OFSTD_LOGIC;CONSTANTromdata:memory:=(0,0,0,0,0,0,0,0),(0,1,1,1,0,0,0,1),(0,0,0,0,0,1,0,1),(1,0,1,0,1,0,1,0),(1,1,0,1,1,1,0,0)(1,1,1,1,1,1,1,1);Signaldata_bit:STD_LOGIC;Data_bit=romdata(3,7);,2020/4/29,.,48,4)用户自定义类型记录类型,由已定义的、数据类型不同的对象元素构成的数组语句格式:TYPE记录类型名ISRECORD元素名:元素数据类型;元素名:元素数据类型;ENDRECORD记录类型名;,2020/4/29,.,49,用户自定义类型记录类型举例,TYPEbankISRECORD-将bank定义为四元素记录类型addr0STD_LOGIC_VECTOR(7DOWNTO0);addr1STD_LOGIC_VECTOR(7DOWNTO0);r0INTEGER;instinstruction;(假设是以前定义好的枚举数据类型)ENDRECORD;SIGNALaddbus1,addbus2:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALresult:INTEGER;SIGNALalu_code:instruction;SIGNALr_bank:bank:=(“00000000”,”00000000”,0,ADD);addbus1=r_bank.addr1;r_bank.inst=alu_code;,2020/4/29,.,50,3、用户定义的子类型,子类型是由用户对已定义的原数据类型做一些范围限制而形成的一种新的数据类型。子类型SUBTYPE的语句格式如下:Subtype子类型名is基本数据类型名范围;例如:subtypeabusisstd_logic_vector(7downto0);signalaio:std_logic_vector(7downto0);signalbio:std_logic_vector(15downto0);signalcio:abus;aio=cio;bio=cio;对吗?,2020/4/29,.,51,5、数据类型的限定,数据类型可以根据所描述的文字的上下关系来判断SIGNALa:STD_LOGIC_VECTOR(7DOWNTO0);aYY=“10111111”;ENDCASE;限定方法SUBTYPESTD3BITISSTD_LOGIC_VECTOR(0TO2);CASESTD3BIT(aUseIEEE.std_logic_1164.all;,2020/4/29,.,54,4、数据类型的转换,VHDL是一种强类型语言即使对于数据类型非常接近的数据对象,在相互操作时,也需要进行数据类型转换。类型转换函数通常由VHDL语言包集合提供,2020/4/29,.,55,STD_LOGIC_1164包集合中定义的数据类型转换函数及对应的数据类型转换如下:,to_stdlogicvector(A)to_bitvector(A)to_stdlogic(A)to_bit(A),由bit_vector转换成std_logic_vector由std_logic_vector转换成bit_vector由bit转换成std_logic由std_logic转换成bit,变换函数通常由三个包集合提供:,在VHDL语言中,不同类型的数据是不能进行运算和代入的,要实现这些操作必须进行数据类型的转换。,4、数据类型的转换(续),2020/4/29,.,56,STD_LOGIC_ARITH包集合中定义的数据类型转换函数集对应的数据类型转换如下:,conv_std_logic_vector(A,位长)conv_integer(A),由integer,unsigned和signed转换成std_logic_vector由unsigned和signed转换成integer,STD_LOGIC_UNSIGNED包集合定义的数据类型转换函数集对应的数据类型转换如下:,conv_integer(A),由std_logic_vector转换成integer,4、数据类型的转换(续),2020/4/29,.,57,数据类型转换举例,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYadd5ISPORT(num:INSTD_LOGIC_VECTOR(2DOWNTO0);ENDadd5;ARCHITECTURErtlOFadd5ISSIGNALin_num:INTEGERRANGE0TO7;BEGINIn_num=,/=,=,并置运算符:,(4)如果一个逻辑表达式中只有AND,OR,XOR运算符,括号可省略。其他不行。例如:,A=(bnandc)nandd)nande;1011A=,=,en,0=en);,或tmp_c0,others=en);如果用此方法,others项必放最后。,或tmp_cen);,或tmp_cen);,2020/4/29,.,65,5、省略赋值操作符(聚合赋值符),格式:others=X例如:Signald1:STD_LOGIC_VECTOR(7DOWNTO0);d10);,一般用于较多位的位矢量赋值中有多位值相同时,做省略化的赋值。,2020/4/29,.,66,习题,1、定义一个常数,数据类型为实数,数值任意。2、定义一个变量,数据类型为16位标准逻辑位矢量,然后将二进制数1111101100110000对其赋值。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、signalA,B,C:BIT;signalD:bit_vector(0to2);signalE:bit_vector(0to5);,将A、B、C连接起来赋值给D;将A、B、C、D连接起来赋值给E;,2020/4/29,.,67,习题续,8、设计一个系统,它有3个输入端口,它们的数据类型为std_logic;一个输出端口,类型为std_logic_vector(0to3)。试写出该系统设计实体VHDL程序框架结构。要求结构体中说明信号A、B,它们为std_logic类型。功能描述用一个process语句,其中需说明变量c,为std_logic类型。所有信号均为process语句的敏感信号。,2020/4/29,.,68,VHDL语言程序通常包含5部分:,实体说明、构造体、配置、包集合、库,实体说明,构造体,配置,包集合和库,2020/4/29,.,69,2.3VHDL语言设计的基本单元及其构成,VHDL语言设计的基本单元就是一个设计实体。,注意:库、程序包调用说明语句不是必须的,需要则有;另外两部分是必须有的。,VHDL语言描述设计实体的一般格式:,2020/4/29,.,70,VHDL语言一般结构举例,Libraryieee;Useieee.std_logic_1164.all;EntityfredividerisPort(clock:instd_logic;clkout:outstd_logic);Endfredivider;Architecturebehavioroffredividerissignalclk:std_logic;BeginProcess(clock)Beginif(clockeventandclock=1)thenclk=notclk;endif;Endprocess;clkout=clk;Endbehavior;,2020/4/29,.,71,VHDL语言基本单元组成:实体说明+构造体说明,例2-11:二选一电路设计单元的VHDL描述:,ENTITYmuxISgeneric(m:time:=1ns);PORT(d0,d1,sel:inbit;q:outbit);ENDmux;,ArchitecturedataflowofmuxisBeginprocess(d0,d1,sel)variabletmp1,tmp2,tmp3:bit;begintmp1:=d0andsel;tmp2:=d1and(notsel);tmp3:=tmp1ortmp2;q=tmp3afterm;endprocess;Enddataflow;,实体说明,构造体说明,2020/4/29,.,72,2.3.1实体说明,实体说明是一个设计实体的表层设计单元,描述设计实体与外部电路的接口部分;规定设计单元的输入输出接口信号或引脚,是设计实体经封装后对外的一个通信界面。实体说明用于定义电路的输入输出引脚,但并不描述电路的具体构造和实现的功能。,ENTITYFredeviderisport(clock:instd_logic;clkout:outstd_logic);end;,2020/4/29,.,73,1、实体说明格式(语句结构),实体说明的常用语句结构如下:ENTITY实体名ISGENERIC(类属表);PORT(端口表);END【实体名】;,中间在方括号内的语句描述,在特定的情况下并非是必须的。例如:构建一个VHDL仿真测试基准等情况中可以省去方括号中的语句。,2020/4/29,.,74,实体声明格式具体说明(续),1)实体名实体名必须与文件名相同,否则编译时会出错。,2020/4/29,.,75,2)类属参数,可选项。类属(GENERIC)参数是一种端口界面常数,常以一种说明的形式放在实体说明部分。是一些信息,默认的参数值。如端口大小、总线宽度、时间等。,类属参数说明的一般书写格式如下:GENERIC(类属参数名1,(类属参数名2):数据类型:=设定值;常数名n:数据类型:设定值);,2020/4/29,.,76,2)类属参数(续),例如:ENTITYMCKISGENERIC(WIDTH:INTEGER:=16;RISEW:TIME:=1ns;FALLW:TIME:=1ns);PORT(ADD_BUS:OUTSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0);ENDMCK;,注意:(1)类属参数值可以为本实体所属的结构体使用。(2)类属参数作为常量使用,在定义它的实体内使用时不能修改。(3)该模块被调用时从外部传入参数值。,2020/4/29,.,77,3)端口说明,端口说明是对于一个设计实体与外部接口的描述。或者说:是CPLD/FPGA器件外部引脚信号的名称、数据类型和传输方向的描述。端口说明书写格式如下:,Port(端口名1:方向数据类型;-每个端口说明用分号隔开;端口名2,端口名3:方向数据类型;-每个端口说明可以-说明多个端口端口名n:方向数据类型);-最后一个端口说明不用分号,a)端口名:是设计者为实体的每一个对外通道所取的名字;即实现该设计程序的器件外部引脚的名称标示符,2020/4/29,.,78,b)端口方向(端口模式),端口模式:是指这些端口上的数据流动方式,如输入或输出等;省略为输入(IN)。注意:端口均为信号,不能作为变量和常量使用。端口模式符号及其含义如下表:,2020/4/29,.,79,c)端口数据类型,标准类型:BIT和BIT_VICTOR(integer不提倡用),扩展类型:STD_LOGIC和STD_LOGIC_VECTOR,扩展类型需要库和程序包的支持,并且需要在程序中指明:libararyieee;Useieee.std_logic_1164.all;,注意:端口信号与类属参数的数据类型不能在entity中定义,必须在程序包package中预先定义。,2020/4/29,.,80,4)实体声明格式注意事项,EntityfredividerisPort(clock:instd_logic;clkout:outstd_logic);Endfredivider;,实体名与保存的文件名必须相同,最后一个端口声明后无分号,端口名,端口模式(方向),端口数据类型,2020/4/29,.,81,5)实体说明举例,RS触发器VHDL描述中的实体说明部分说明如下:ENTITYrsffISPORT(set,reset:INBIT;q,qb:BUFFERBIT);ENDrsff;,练习:写出下面3-8译码器的实体说明部分。(En为一位控制端),RS触发器元件图,RS触发器结构图,2020/4/29,.,82,2.3.2构造体(结构体)ARCHITCTURE,构造体的描述方法:行为级描述、RTL(数据流)级描述、结构描述(逻辑元件连接),构造体是用于描述设计实体的实现方案描述,包括内部结构(元件内部的连接关系)以及实体端口间的逻辑关系(实体的行为)。注意:构造体一定要跟在实体说明的后面。,2020/4/29,.,83,1、构造体的特点,1个实体可对应若干个构造体,每个构造体分别代表该实体功能的不同实现方案或不同描述方式。同一时刻,只有一个构造体起作用,可以通过配置来决定使用哪一个构造体进行仿真或综合。同一构造体不能为不同的实体所拥有。,2020/4/29,.,84,2、构造体的语法格式,实体名必须是所在设计实体的名字,结构体名由设计者定义,但当一个实体具有多个结构体时,结构体的取名不可重复。,构造体的语句格式如下:ARCHITECTURE构造体名OF实体名IS定义语句;BEGIN并行处理语句;END构造体名;,注意:实体名必须是所在设计实体的名字,而构造体名可以由设计者自己选择,但当一个实体具有多个结构体时,构造体的取名不可重复。通常用Behavioral(行为)、dataflow(数据流描述)或structural(结构描述),对数据类型、常数、信号、子程序和元件等元素的说明。不是必须的。,以各种不同的描述风格描述实体逻辑行为的语句。,2020/4/29,.,85,2、构造体的语法格式说明,在一个构造体中说明和定义的数据类型、常数、元件、函数和过程只能用于这个构造体中;若希望其能用于其他的实体或构造体中,则需要将其作为程序包来处理。一个构造体内可以包含多条并行描述语句,它们不以书写的先后顺序为执行顺序。总是同时在执行。共有8条并发描述语句。,2020/4/29,.,86,3、构造体的语法格式总结,构造体,2020/4/29,.,87,2.4Vhdl构造体描述的几种方法,构造体的语句格式如下:ARCHITECTURE结构体名OF实体名IS定义语句;BEGIN并行处理语句;END构造体名;,对数据类型、常数、信号、子程序和元件等元素的说明。不是必须的。,以各种不同的描述风格描述实体逻辑行为的语句。,通常用Behavioral(行为)、dataflow(数据流描述)或structural(结构描述),2020/4/29,.,88,2.4.1行为级描述:,例2-15:二选一数据选择器,ENTITYmuxISPORT(d0,d1:INBIT;sel:INBIT;Q:OUTBIT);ENDmux;,ARCHITECTUREbehaveOFmuxISBEGINPROCESS(d0,d1,sel)BEGINIFsel=0THENq=d0;ELSEq=d1;ENDIF;ENDPROCESS;ENDbehave;,只表示输入和输出间转换的行为,它不包含任何结构的信息(硬件特性、连线方式、逻辑行为方式)。,2020/4/29,.,89,2.4.2RTL级描述(数据流描述方式):,例2-16二选一数据选择器,ENTITYmuxISPORT(d0,d1:INBIT;sel:INBIT;q:OUTBIT);ENDmux;,ARCHITECTUREbehaveOFmuxISSIGNALtmp1,tmp2,tmp3,nsel:BIT;BEGINcale:PROCESS(d0,d1,sel)BEGINNsel=NOTsel;tmp1=d0ANDsel;tmp2=d1ANDnsel;tmp3nsel);U2:and2PORTMAP(d0,sel,tmp1);U3:and2PORTMAP(d1,nsel,tmp2);U4:or2PORTMAP(tmp1,tmp2,tmp3);qb)THENtmp:=a;ELSEtmp:=b;ENDIF;RETURNtmp;ENDmax;ENDbpac;结束包体,2020/4/29,.,96,2.5.3配置,配置可以把特定的构造体关联到一个确定的实体描述层次化设计中连接关系层与层之间元件声明与被调用实体实体与结构体之间,For选配构造体名Endfor;,最简单的形式,配置指定语句格式:CONFIGURATION配置名OF实体名IS语句说明;END配置名;,2020/4/29,.,97,例2-22:,Libraryieee;Useieee.std_logic_1164.all;ENTITYnandISPORT(a,b:INstd_logic;c:outstd_logic);ENDnand;,ARCHITECTUREtwoOFnandISBEGINcqf,c=q);U2:nandportmap(a=q,b=r,c=qf);ENDrsf;,实体rs1使用WORK库中实体nand的构造体two,配置名为sel,2020/4/29,.,99,2.6子程序(subprogram)结构描述,子程序含义和其它高级语言中的子程序概念相当。在主程序调用后,能将处理结果返回主程序的程序模块。用来实现系统程序中多处需要使用的功能模块。可以反复调用,但只有子程序调用返回后,方可再次调用。,子程序有两种类型:,过程(procedure)函数(function),过程和函数语句通常组织在包集合中,一般情况下,多个过程和函数汇集在一起构成包集合;几个包集合汇集在一起就形成了一个库。子程序说明也可在构造体的定义语句中进行说明,然后在并行处理语句中进行调用。,2020/4/29,.,100,1、过程语句(procedure),过程语句的结构:Procedure过程名(形式参数1:方式数据类型;形式参数n:方式数据类型)is定义语句;-过程中用到的变量等定义Begin顺序描述语句;-过程的语句End过程名;,注意:,1)形式参数的方式可以是:in、out、inout,如果为in:无特殊指定,形式参数为常数。,out或inout:无特殊指定,形式参数为变量。此时调用时,将该形式参数传递给调用者的信号或变量。,2)过程的语句按书写顺序自上至下执行。,若调用者将传递值作为信号使用,则在该形参名前加signal定义。如:signalq:inoutinteger;,2020/4/29,.,101,例2-24将位矢量转换为整数,PROCEDUREvector_to_int(z:INSTD_LOGIC_VECTOR;x_flag:OUTBOOLEAN;q:INOUTINTEGER)ISBEGINq:=0;FORiINzRANGELOOPq:=q*2;IF(z(i)=1)THENq:=q+1;ELSIF(z(i)/=0)THENx_flag:=TRUE;ENDIF;ENDLOOP;ENDvector_to_int;,Z:常数,X_flag,q为变量,输入输出参数若作为信号使用,在过程参数定义时要指明。如:PROCEDUREshift(signaldin:INSTD_LOGIC;signaldout:OUTSTD_LOGIC_VECTOR);ENDshift;,先转换最左边的一位,所以Z若是一个具体的数时,位宽的表示方法应是小的下标在左。,2020/4/29,.,102,输入输出参数若作为信号使用,在过程参数定义时要指明。如:例2-25,PROCEDUREvector_to_int(signalz:INSTD_LOGIC_VECTOR;Signalx_flag:OUTBOOLEAN;Signalq:INOUTINTEGER)ISVariablez1:STD_LOGIC_VECTOR;Variablex_flag1:BOOLEAN;Variableq1:INOUTINTEGER;BEGIN,z1:=z;q1:=0;x_flag1:=FLASE;FORiINz1RANGELOOPq1:=q1*2;IF(z1(i)=1)THENq1:=q1+1;ELSIF(z1(i)/=0)THENx_flag1:=TRUE;ENDIF;ENDLOOP;x_flag=x_flag1;q=q1;ENDvector_to_i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度高性能陶瓷材料购销合同模板
- 2025年度电动摩托车零部件代理销售合同范本
- 2025保鲜库冷库设备租赁与维修服务合同
- 2025版核能设备安装与核安全监管合同范本
- 2025年度新能源项目场地开发获取合同
- 2025年建筑行业收款协议书范本
- 2025年节能环保型醇基燃料全国销售合作协议
- 2025年度二手电机转让与二次维修保障服务协议
- 2025年采摘果园果树病虫害防治药剂供应合同
- 2025年企事业单位食堂劳务合作服务合同范例
- 2025广东广州市天河区人民武装部招聘民兵教练员5人备考题库及答案解析
- 公共图书馆管理服务合同
- 【初三】【九年级】【物理】2025【秋】开学第一课主题班会(课件)
- 电子厂维护方案(3篇)
- 2024-2025学年广东省深圳高级中学高一(下)期末物理试题及答案
- 西藏公务员真题2025
- 电商退换货流程标准操作手册
- 冶金矿山采矿设计规范
- 2025年佛山转业士官考试题库
- 基孔肯雅热医疗机构发热-门诊应急处置演练脚本
- 2025年重庆对外建设集团招聘41人笔试参考题库附带答案详解(10套)
评论
0/150
提交评论