硬件描述语言VHDL基础.ppt

上传人:zhu****ei 文档编号:3491211 上传时间:2019-12-16 格式:PPT 页数:72 大小:504KB
返回 下载 相关 举报
硬件描述语言VHDL基础.ppt_第1页
第1页 / 共72页
硬件描述语言VHDL基础.ppt_第2页
第2页 / 共72页
硬件描述语言VHDL基础.ppt_第3页
第3页 / 共72页
点击查看更多>>
资源描述
1,第三章硬件描述语言VHDL基础,3.1VHDL语言程序的基本结构3.2VHDL语言的数据类型及运算操作符3.3VHDL语言的主要描述语句3.4VHDL语言构造体的描述方式,2,3.1VHDL语言程序的基本结构实体(Entity),构造体(Architecture),配置(Configuration),包集合(Package),和库(Library),VHDL大小写不敏感,3,3.1.1VHDL语言设计的基本设计单元实体(Entity)描述此设计功能输入输出端口(Port);在层次化设计时,Port为模块之间的接口;在芯片级,则代表具体芯片的管脚。实体说明ENTITY实体名ISPORT(端口名(,端口名):方向数据类型名;:端口名(,端口名):方向数据类型名);END实体名;,Entityeqcomp4isport(a,b:instd_logic_vector(3downto0);equal:outstd_logic);endeqcomp4;,4,基本数据类型:BIT和BIT_VECTORSTD_LOGIC和STD_LOGIC_VECTOR端口模式,5,Out与Buffer的区别,Entitytest1isport(a:instd_logic;b,c:outstd_logic);endtest1;architectureaoftest1isbeginb=not(a);c=b;-Errorenda;,Entitytest2isport(a:instd_logic;b:bufferstd_logic;c:outstd_logic);endtest2;architectureaoftest2isbeginb=not(a);c=b;enda;,结论:均表示输出,但BUFFER声明的信号可以反馈到实体内部,而OUT声明的信号却不可以。,6,构造体描述设计单元具有的具体功能结构体有三种描述方式行为描述(behavioral)数据流描述(dataflow)结构化描述(structural)格式:ARCHITECTURE构造体名OF实体名IS定义语句内部信号,常数,数据类型,函数等的定义BEGIN并行处理语句END构造体名;,7,构造体中的描述语句并行语句:同时执行,在进程语句(PROCESS)的外部。顺序语句:按书写顺序执行,在进程语句(PROCESS)的内部。,例如:entitysampleisport(a,b:instd_logic;c:outstd_logic);endsample;architecturebehaofsampleissignald:std_logic;begind=aandb;C=not(d);endbeha;,8,3.1.2构造体的子结构描述3种形式的子结构描述:BLOCK描述(块描述)PROCESS描述(进程描述)SUBPROGRAMS描述(子程序描述)BLOCK语句描述格式:块标号:BLOCKBEGIN:ENDBLOCK块标号;BLOCK内的语句执行顺序:并行执行,9,例如:二选一电路ENTITYmuxISPORT(d0,d1,sel:INBIT;q:OUTBIT);ENDmux;ARCHITECTUREconnectOFmuxISSIGNALtmp1,tmp2,tmp3:BIT;BEGINcale:BLOCKBEGINtmp1=d1ANDsel;tmp2=d0AND(NOTsel);tmp3=tmp1ORtmp2;qqb,c=q)U2:nand2PORTMAP(a=reset,b=q,c=qb)ENDrsff1;ARCHITECTURErsff2OFrsISBEGINq=NOT(qbANDset);qb=NOT(qANDreset);ENDrsff2;CONFIGRATIONrsconOFrsIS-选择构造体rsff1FORrsff1ENDFOR;ENDrscon;,25,32VHDL语言的数据类型及运算操作符321VHDL语言的客体(数据对象)客体:在VHDL语言中,凡是可以赋予一个值的对象就称为客体。分类信号(signal):代表物理设计中的某一条硬件连接线。变量(variable):代表暂存某些值的载体。常数(constant):代表数字电路中的电源和地线。,26,常数意义:对某一常数名赋予一个固定的值;综合后,连接到电源和地。格式:CONSTANT常数名:数据类型:=表达式;例如:CONSTANTVcc:REAL:=5.0;变量格式:VARIABLE变量名:数据类型约束条件:=表达式;例如:VARIABLEcount:INTEGERRANGE0TO255:=10;特点:临时数据,没有物理意义;只能在进程、函数和过程中使用,一旦赋值立即生效;用:=进行赋值。信号格式:SIGNAL信号名:数据类型约束条件:=表达式;例如:SIGNALground:BIT:=0;,27,特点:没有方向性,可给它赋值,也可当作输入。例如:tmp3=tmp1ORtmp2;q=tmp3;设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。在MaxPlusII中被忽略。用=进行赋值信号与变量的区别信号赋值可以有附加延迟,变量赋值不可以有附加延迟;例如:s1=s2AFTER10ns信号可以看作硬件的一根连线,而变量存放临时数据,没有物理意义。作用范围不同:进程对信号敏感,对变量不敏感;信号可以是多个进程的全局信号,但变量只在定义它之后的顺序域可见。,28,architectureaofstartissignaltmp:std_logic;begins0:process(a_bus)begintmp=1;foriin3downto0looptmp=a_bus(i)andtmp;endloop;carryout=tmp;endprocesss0;s1:process(tmp)beginendprocesss1;enda;,architectureaofstartisbegins0:process(a_bus)variabletmp:std_logic;begintmp:=1;foriin3downto0looptmp:=a_bus(i)andtmp;endloop;carryout=tmp;endprocesss0;s1:process(tmp)-errorbeginendprocesss1;enda;,29,代入方式不同:信号的代入过程和代入语句的处理是分开进行的,而变量赋值语句一旦执行,其值立即被赋予变量。,process(a,b,c,d)begind=a;x=b+d;d=c;y=b+d;endprocess;运行结果:x=b+c;y=b+c;,process(a,b,c)variabled:std_logic_vector(3downto0);begind:=a;x=b+d;d:=c;y=b+d;endprocess;运行结果:x=b+a;y=b+c;,30,VHDL标识符(Identifiers)基本标识符由字母、数字和下划线组成第一个字符必须是字母最后一个字符不能是下划线不允许连续2个下划线保留字(关键字)不能用于标识符大小写是等效的,31,322数据类型标准数据类型:实数、整数、位、位矢量、布尔量、字符、字符串、时间、正整数、错误等级。整数、浮点数方便用于数值方面的运算:加减乘除整数:integer,经常用于计数器实数:real,MaxPLusII不支持例如:Variablea:integerrange255to+255;位:表示位信号,位的值用带单引号的1或0来表示。例如:signala:bit:=0;或a=0;位矢量:表示多位组成的信号,位矢量的值用双引号括起来。例如:signala:bit_vector(3downto0):=“0011”;或a=“0011”;,32,用户定义的数据类型格式:TYPE数据类型名,数据类型名数据类型定义不完整的数据类型格式:TYPE数据类型名,数据类型名;-假定义可由用户定义的数据类型包括:枚举(ENUMERATED)、整数(INTEGER)、实数(REAL)、数组(ARRAY)、时间(TIME)、记录(RECODE)枚举(ENUMERATED):格式:TYPE数据类型名IS(元素、元素、);作用:列举数据对象可能存在的值例如:用于定义状态机的状态Typestatesis(idle,start,running,pause,stop)Signalcurrent_state:states;,33,例如:IEEE1076标准中预定义了两个枚举类型Typebooleanis(False,True);Typebitis(0,1);Signala:bit;例如:IEEE1164标准中预定义了一个枚举类型Typestd_logicis(U,X,0,1,Z,W,L,H,-);该类型能比较全面地包括数字电路中信号会出现的几种状态,因此一般情况把这种类型代替bitU初始值;X不定;00;11;Z高阻;W弱信号不定;L弱信号0;H弱信号1;-不可能情况。Signala:std_logic;注意:这里的大小写是敏感的,34,数组(ARRAY)格式:TYPE数据类型名ISARRAY范围OF原数据类型名;多个相同类型成员组成的队列,一般用于定义数据总线、地址总线等。例如:Signala:std_logic_vector(7downto0);a=B“00111010”;a=X“3A”;可自定义复合类型Typewordisarray(15downto0)ofbit;Signalb:word;Typetable8x4isarray(0to7,0to3)ofbit;,35,记录(RECODE)格式:TYPE数组类型名ISRECORD元素名:数据类型名;元素名:数据类型名;:ENDRECORD;相同或不同类型的元素组成,类似C中的结构具有模型抽象能力,用于描述一个功能模块。例如:TypeiocellisrecordEnable:bit;DataBus:bit_vector(7downto0);endrecord;singalbus:iocell;bus.Enable=1;bus.DataBus=“00110110”;,36,数据类型的转换:VHDL是强类型语言,必须用类型转换函数才能进行不同类型之间的转换。,37,例如:由STD_BIT_VECTOR转换成INTEGERLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYadd5ISPORT(num:INSTD_LOGIC_VECTOR(2DOWNTO0);:);ENDadd5;ARCHITECTURErtlOFadd5ISSIGNALin_num:INTEGERRANGE0TO5;:BEGINIn_num=CONV_INTEGER(num);ENDrtl;,38,属性(Attributes)提供Entity、Architecture、Type和Signals的信息有许多预定义的值、信号和范围的属性一个最常用的属性:eventifclkeventandclk=1thenleft,right,high,low,length例如:typecountisintegerrange0to127countleft=0;countright=127;counthigh=127;countlow=0;countlength=128;,39,323运算操作符逻辑运算符AND、OR、NAND、NOR、XOR、NOT关系运算符=、/=、=算术运算符+、-、*、/并置(连接)运算符,41,33VHDL语言的主要描述语句331顺序描述语句只能用在进程或子程序中,按照语句的出现的顺序加以执行的。WAIT语句WAIT无限等待WAITON敏感信号变化此时,与process等价,例如:,PROCESS(a,b)BEGINy=aANDb;ENDPROCESS;,PROCESSBEGINy=aANDb;WAITONa,b;ENDPROCESS;,42,WAITUNTIL直到条件满足WAITFOR等到时间到多条件WAIT语句超时等待,Architecturebehaofwait_examplesignalsendB,sendA:std_logic;BeginsendA=0;a:processbeginwaituntilsendB=1;sendA=1after10ns;waituntilsendB=0;sendA=0after10ns;endprocessa;b:processbeginwaituntilsendA=0;sendB=0after10ns;waituntilsendA=1;sendB=1after10ns;endprocessa;endbeha;,43,信号代入语句格式:目的信号量=信号量表达式例如:a=b;变量赋值语句格式:目的变量:=表达式例如:c:=a+d;IF语句IF的门闩控制格式:IF条件THEN顺序执行语句ENDIF;例如:锁存器IF(en=1)THENq=d;ENDIF;,44,IF语句的二选择控制格式:IF条件THEN顺序执行语句ELSE顺序执行语句ENDIF;IF语句的多选择控制格式:IF条件THEN顺序执行语句ELSIF条件THEN顺序执行语句:ELSIF条件THEN顺序执行语句ENDIF;,Entitymux2isport(a,b,sel:inbit;c:outbit);Endmux2;Architecturertlofmux2isBeginprocess(a,b,sel)beginif(sel=1)thenc顺序处理语句;WHEN值|值|值|值=顺序处理语句;WHEN值TO值=顺序处理语句;WHENOTHERS=顺序处理语句;,47,例如:83编码器libraryieee;useieee.std_logic_1164.all;entityencoderisport(input:instd_logic_vector(7downto0);y:outstd_logic_vector(2downto0);endencoder;,architecturebehaofencoderisbeginprocess(input)begincaseinputiswhen01111111=yyyyyyyyy=XXX;endcase;endprocess;Endbeha;,If语句和case语句的区别,48,LOOP语句格式:标号:FOR循环变量IN离散范围LOOP顺序处理语句ENDLOOP标号;标号:WHILE条件LOOP顺序处理语句ENDLOOP标号;例如:sum:=0abcd:WHILE(I10)LOOPsum:=I+sum;I:=I+1;ENDLOOPabcd;,49,libraryieee;useieee.std_logic_1164.all;entitycheckisport(a:instd_logic_vector(7downto0);y:outstd_logic);endcheck;architecturebehaofcheckisbeginprocess(a)variabletemp:std_logic;begintemp:=0;foriin0to7looptemp:=tempxora(i);endloop;y=temp;endprocess;endbeha;,奇偶校验基本原理:奇数个“1”异或的结果为1,偶数个“1”异或的结果为0。例如:若采用奇校验,1101=110100011=00111,50,NEXT语句跳出本次循环格式:NEXT标号WHEN条件;与EXIT语句的区别例如:PROCESS(a,b)CONSTANTmax_limit:INTEGER:=255BEGINFORIIN0TOmax_limitLOOPIF(done(I)=TRUE)THENNEXT;ELSEdone(I):=TRUE;ENDIF;q(I)=a(I)ANDb(I);ENDLOOP;ENDPROCESS;,51,332并发描述语句可以直接在构造体中使用进程语句可以和其它进程语句同时执行,并可以存取构造体和实体中所定义的信号。进程结构中的所有语句都按照顺序执行。为启动进程,在进程中必须包含一个敏感信号表或WAIT语句。进程之间的通信是通过信号量来实现的。例如:,entitypros_comisport(event_a:inbit);endpros_com;architecturecatch_ballofpros_comissignalto_a,to_b:bit:=0;,52,begina:process(enent_a,to_a)beginif(event_aeventandevent_a=1)or(to_aeventandto_a=1)thento_b=1after20ns,0after30ns;endif;endprocessa;b:process(to_b)beginif(to_beventandto_b=1)thento_a=1after20ns,0after30ns;endif;endprocessb;endcatch_ball;,53,并发信号代入代入语句在进程中使用是顺序语句,但是在构造体的进程之外使用就是并发语句,相当于一个进程。例如:以下两种结构等价ARCHITECTUREbehaveOFa_varISBEGINOutput=a(I);ENDbehave;ARCHITECTUREbehaveOFa_varISBEGINss:PROCESS(a,I)BEGINOutput=a(I);ENDPROCESSss;ENDbehave;,54,条件信号代入将符合条件的表达式代入信号量格式目的信号量=表达式1WHEN条件1ELSE表达式2WHEN条件2ELSE表达式3WHEN条件3:ELSE表达式n;例如:四选一电路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux44ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux44;,55,ARCHITECTUREaaOFmux44ISSIGNALsel:STD_LOGIC_VECTOR(1DOWNTO0);BEGINsel=b,56,选择信号代入对表达式进行测试,当表达式取值不同时,将使不同的值代入目的信号量格式WITH表达式SELECT目的信号量=表达式1WHEN条件1表达式2WHEN条件2:表达式nWHEN条件n;例如:四选一电路,57,ARCHITECTUREbbOFmux45ISSIGNALsel:INTEGERrange0to3;BEGINWITHselSELECTq=i0WHEN0,i1WHEN1,i2WHEN2,i3WHEN3;sel=0WHENa=0ANDb=0ELSE1WHENa=1ANDb=0ELSE2WHENa=0ANDb=1ELSE3WHENa=1ANDb=1;ENDbb;,a,b,i0,q,i1,i2,i3,选择信号代入,条件信号代入,58,并发过程调用语句并发过程调用语句可以出现在构造体中,而且是一种可以在进程之外执行的过程调用语句。并发过程调用是一个完整的语句,在它之前可以加标号;并发过程调用语句应带有IN,OUT或INOUT的参数,它们应该列在过程名后的括号内;并发过程调用可以有多个返回值。,59,ARCHITECTURE.BEGINvector_to_int(z,x_flag,q);END;ARCHITECTURE.BEGINPROCESS(z,q)BEGINvector_to_int(z,x_flag,q);:ENDPROCESS;END;,60,几种语句的比较,61,34VHDL语言构造体的描述方式在VHDL结构体中,可以采用三种不同的描述方式行为描述RTL描述(寄存器传输描述)结构描述341行为描述高层次的功能描述,主要用于仿真和系统工作原理的研究。只表示输入与输出间转换的行为,它不包含任何结构信息,即不必考虑在电路中到底是怎样实现的。例如:比较器的行为描述。,62,Libraryieee;Useieee.std_logic_1164.all;ENTITYcompraISPORT(a,b:instd_logic;equal:outstd_logic);Endcompra;Architecturebehavioralofeqcomp4isbegincomp:process(a,b)beginifa=bthenequal=1;elseequaln2,c=m);,66,例如:architecturestructofeqcomp4isbeginU0:xnor2portmap(a(0),b(0),x(0);U1:xnor2portmap(a(1),b(1),x(1);U2:xnor2portmap(a(2),b(2),x(2);U3:xnor2portmap(a(3),b(3),x(3);U4:and4portmap(x(0),x(1),x(2),x(3),equal);endstruct;,67,例如:entitysampleisport(ina,inb,inc,ind:inbit;q:outbit);endsample;architecturebehaofsampleiscomponentand2port(a,b:inbit;c:outbit);endcomponent;signalu0_c,u1_c:bit;beginu0:and2portmap(ina,inb,u0_c);u1:and2portmap(inc,ind,u1_c);u2:and2portmap(u0_c,u1_c,q);endbeha;,68,69,例如:crc校验码生成系统的设计,70,71,architecturebehaofcrc_topiscomponentcrcshiftport();endcomponent;componentcrctableport();endcomponent;signaltemp_index:std_logic_vector(7downto0);signaltemp_table:std_logic_vector(15downto0);beginc1:crcshiftportmap();c2:crctableportmap();endbeha;,72,三种描述方式的比较,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!