已阅读5页,还剩85页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,第三章vhdl语法,3.1vhdl语言的基本结构3.2vhdl语言的基本结构3.3vhdl语言结构体的描述方法3.4vhdl语言语言顺序描述语句3.5vhdl语言并行描述语句,3.1.1vhdl数据对象(dataobjects),constantwidth:integer:=7;constantvcc:real:=5.0;constantd2:std_logic_vector(widthdownto0):=”0000”;不能在程序中改变;增强程序的可读性,便于修改程序;常量的使用范围取决于其定义位置,可在library、entity、architecture、process中进行定义,其有效范围也相应限定。,1、常数(constant),定义格式为:constant常数名:数据类型:=表达式;,3.1vhdl语言的基本结构,2、信号,信号数据对象,代表电路内部线路,其在元件之间起互连作用,没有方向性,可给它赋值,也可当作输入。,定义格式为:signal信号名:数据类型:=设定值;,如:signala:std_logic_vector(3downto0):=“0000”;,注意:设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。,信号赋值语句的语法格式为:目标信号名=表达式(设定值);,a=“1010”,3、变量,变量是一个局部量,用于对中间数据的临时存储,并不一定代表电路的某一硬件,没有物理意义。,定义格式为:variable变量名:数据类型:=设定值;,如:variablea:integer:=0;,变量赋值语句的语法格式为:目标变量名:=表达式(设定值);,如:a:=bandc;,信号、变量、常数对比,一、定义,signalclk:std_logic;,variabledata:std_logic_vector(7downto0);,constantwidth:integer:=7;,二、赋值方式,clk=1;(非立即),data:=“1010”;(立即),三、定义区域,信号:实体、结构体、程序包,变量:进程、子程序,常数:实体、结构体、程序包、块、进程、子程序,四、适用范围,信号:实体、结构体、程序包,变量:定义了变量的进程、子程序的顺序语句中,常数:视其定义的位置而定,若常数定义在实体中,适用范围是实体所对应的所有结构体。若常数定义在结构体中,适用范围就是本结构体。,信号、变量、常数对比,信号赋值(非立即),信号和变量赋值区别举例,architectureabcofexampleissignaltmp:std_logic;beginprocess(a,b,c)begintmp=a;x=candtmp;tmp=b;y=candtmp;endprocess;endabc;,变量赋值(立即),architectureabcofexampleisbeginprocess(a,b,c)variabletmp:std_logic;begintmp:=a;x=candtmp;tmp:=b;y=candtmp;endprocess;endabc;,执行结果:x=candby=candb,执行结果:x=canday=candb,3.1.2vhdl数据类型,1、逻辑数据类型,(1)布尔代数(boolean)型,定义位置:在std库的standard程序包中进行定义。,取值:false,true,(2)位(bit),定义位置:在std库的standard程序包中进行定义。,取值:0,1,(低电平,高电平),(3)位矢量(bit_vector),定义位置:在std库的standard程序包中进行定义。,signala:bit_vector(0to7);signalb:bit_vector(7downto0);a=“00001010”;b=“00001010”;,位矢量是基于“位”数据类型的数组,a(7)=0a(6)=1a(5)=0a(4)=1a(3)=0a(2)=0a(1)=0a(0)=0b(7)=0b(6)=0b(5)=0b(4)=0b(3)=1b(2)=0b(1)=1b(0)=0,(4)标准逻辑型(std_logic),定义位置:在ieee库的std_logic_1164程序包中进行定义,使用这类数据信号,必须包含下面两条声明语句:,libraryieee;useieee.std_logic_1164.all;,该类型能比较全面地包括数字电路中信号的几种状态,比位“bit”信号对于数字逻辑电路的逻辑特性描述更完整、更真实。所以在vhdl的程序里,对于逻辑信号的定义,通常都是采用这个“标准逻辑”信号形式,不再使用“bit”。,(5)标准逻辑数组类型(std_logic_vector),定义位置:在ieee库的std_logic_1164程序包中进行定义。,bit_vector与std_logic_vector的区别在于数组的每一位前者为bit型(0,1)后者为std_logic型,signala:std_logic_vector(0to7);signalb:std_logic_vector(7downto0);a=“10100000”;b=“00001010”;a(7)=?b(7)=?,逻辑数据类型赋值举例,variablea,b:std_logic;signaldata:std_logic_vector(0to3);a:=1;b:=0;data=“1100”;,一位值用单引号多位值用双引号,1、直接整体赋值,2.段赋值,signaldata:std_logic_vector(0to3);data(1to2)=“10”;data(0)=1;,3.块赋值,signala,b,c,d:std_logic;signaldata:std_logic_vector(3downto0);data=“0100”;(a,b,c,d)=bus;,位置关联,逻辑数据类型赋值举例,数值数据类型,(1)整数(integer)定义位置:在std库的standard程序包中进行定义。即数值范围为-231231。整数不能用于逻辑运算,只能用于算术运算。,signalday:integerrange0to31;variablea,b,c:interger;c=a+b;,有符号类型数据代表有符号数值,即可以是正数,0,负数;编译器将有符号数类型作为一个补码的二进制数,最左边的位为符号位。,无符号类型数据代表无符号数值,即代表0或正数;最左边的位为最高位。如:unsigned(“0110”)代表;,+6,+10,unsigned(“1010”)代表,如:signed(“0110”)代表+6;signed(“1010”)代表,-2。,(2)无符号(unsigned)和有符号(signed)类型,定义位置:有符号(signed)和无符号(unsigned)逻辑信号定义在库ieee的程序包std_logic_arith中。,字符串(string)数据类型,双引号引起来字符串数组,一般用于程序的提示和结果说明,variablestring_yin:string(1to7);string_yin:=abcd;,字符(character)数据类型,单引号引起来,如:aa字符分大小写。a不等于a,时间(time)数据类型(仿真使用,不能综合),typetimeisrange2147483647to2147483647unitsfs;-飞秒,vhdl中的最小时间单位ps=1000fs;-皮秒ns=1000ps;-纳秒us=1000ns;-微秒ms=1000us;-毫秒sec=1000ms;-秒min=60sec;-分hr=60min;-时endunits;,q=aandborcafter10ns;,用户定义的数据类型,格式:type数据类型名数据类型定义,1、枚举类型,格式:type数据类型名is(元素1,元素2,);,例:typeweekis(sun,mon,tue,wed,thu,fri,sat);,2、数组类型,格式:type数据类型名isarray范围of原数据类型,例:typewordisarray(0to7)ofstd_logic;,3、记录recordtypes相同或不同类型的元素组成,类似c中的结构描述总线或功能块typeiocellisrecordenable:bit;data:bit_vector(7downto0);endrecord;singalbus:iocell;bus.enable=1;bus.data=“00110110”;,用户定义的数据类型,用户定义的子类型,用户对已定义的数据类型,作一些范围限制而形成新的数据类型,格式:subtype子类型名is数据类型名范围,例:subtypedataisstd_logic_vector(7downto0);subtypedigitisintegerrange0to9;,能进行逻辑运算的数据类型:bit、bit_vector、boolean、std_logic、std_logic_vector,3.1.3vhdl语言的操作符(operator),一、逻辑操作符,signald1,d2,s:integer;signala,b,c:std_logic_vector(3downto0);signald,e,f,g:std_logic_vector(1downto0);signalh,i,j,k:std_logic;signall,m,n,o,p:boolean;.s=aandb;-integer不能进行逻辑运算a=bandc;-a、b、c的数据类型同属4位长的位矢量d=eorforg;-两个操作符or相同,不需括号h=(inandj)nandk;-nand必须加括号l=(mxorn)and(oxorp);-操作符不同,必须加括号h=iandjandk;-两个操作符都是and,不必加括号h=iandjork;-两个操作符不同,未加括号,表达错误a=bande;-操作数b与e的位矢长度不一致,表达错误h=iorl;-数据类型不同,表达错误。,数据类型必须一致表达式中有多个运算符时一般要加括号,但and、or、xnor除外,二、关系运算符,和/的操作对象可以是任何数据类型构成的操作数。其它关系运算符对数据类型有一定的限制。(整数、实数、枚举型、位矢量),三、算术运算符,variabedata:std_logic_vector(3donto0):=“1011”;datasll1;-”0110”datasrl3;-”0001”datarol1;-”0111”c=aa=d/4,+、*可以构成逻辑电路;/、mod、rem当分母的操作数是2的n次方时,才可过程逻辑电路。,实体语句结构如下:entity实体名isgeneric(类属表);port(端口表);endentity实体名;,例:entityor2isport(a,b:instd_logic;c:outstd_logic);endentityor2;,3.2vhdl语言结构体的描述方法,3.2.1设计实体,注意:实体应以语句“entity实体名is”开始,语句“endentity实体名;”结束。在层次化系统设计中,实体说明是整个模块或整个系统的输入输出(i/o)接口;在一个器件级的设计中,实体说明是一个芯片的输入输出(i/o)。类属参量(generic)类属参量是实体说明组织中的可选项,放在端口说明之前,其一般格式为:genericconstant名字表:in子类型标识:=静态表达式,,类属参量是一种端口界面常数,常用来规定端口的大小、实体中子元件的数目及实体的定时特性等。它和常数不同,常数只能从设计实体的内部得到赋值且不能改变,而类属参量的值可由设计实体的外部提供。因此设计者可以从外面通过类属参量的重新设定而容易的改变一个设计实体或一个元件的内部电路结构和规模。,例:generic(trise,tfall:time:=1ns;addrwidth:integer:=16);port(a0,a1:instd_logic;add_bus:outstd_logic_vector(addrwidth-1downto0);,这里类属参量中参数trise为上升沿宽度,tfall为下降沿宽度,用于仿真模块的设计;定义地址总线的宽度为addrwidth位,类属值addrwidth的改变将使结构体中所有相关的总线定义同时改变,由此使整个设计实体的硬件结构发生变化。,端口说明(port)端口为设计实体和其外部环境提供动态通信的通道,是对基本设计单元与外部接口的描述,其功能相当电路图符号的外部引脚。端口可以被赋值,也可以当做逻辑变量用在逻辑表达式中。其一般书写格式为:port(端口名:端口模式数据类型;端口名:端口模式数据类型;);,其中端口名是设计者为实体的每一个对外通道所取的名字,通常为英文字母加数字,名字的定义有一定的惯例,如clk表示时钟,d开头的端口名表示数据,a开头的端口名表示地址。端口模式是指这些通道上的数据流动的方式,如输入或输出等。端口模式有以下几种类型:1输入(in)允许信号进入实体,主要用于时钟输入、控制输入(如load、reset、enable、clk)和单向的数据输入(如地址数据信号address)等。,2输出(out)输出模式只允许信号离开实体,常用于计数输出、单向数据输出、被设计实体产生的控制其他实体的信号等。注意:输出模式不能用于被设计实体的内部反馈,因为输出端口在实体内不能看做是可读的。3双向模式(inout)双向模式允许信号双向传输(既可以进入实体,也可以离开实体),双向模式端口允许引入内部反馈。,4缓冲(buffer)缓冲模式允许信号输出到实体外部,但同时也可以在实体内部引用该端口的信号。缓冲端口既能用于输出也能用于反馈。缓冲模式用于在实体内部建立一个可读的输出端口,例如计数器输出、计数器的现态用来决定计数器的次态。端口模式可用图下说明,图中方框代表一个设计实体或模块。,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;,在vhdl设计中,通常将输入信号端口指定为输入模式,输出信号端口指定为输出模式,而双向数据通信信号,如计算机pci总线的地址/数据复用总线,dma控制器数据总线等纯双向的信号采用双向端口模式。从端口的名称、模式就能一目了然地指导信号的用途、性质、来源和去向。,3.2.2结构体的一般语言格式,architecture结构体名of实体名is说明语句begin功能描述语句end结构体名;,结构体三种描述方法,行为描述(behavioral)数据流描述(dataflow)结构化描述(structural),功能描述语句,进程语句,信号赋值语句,子程序调用语句,元件例化语句,结构体行为描述,行为描述是高层次描述方式,它只描述输入与输出之间的逻辑转换关系,而不涉及具体逻辑电路结构等信息。主要用于系统数学模型的仿真或系统工作原理的仿真。故其大量采用的算术运算、关系运算、惯性延时、传输延时等描述方式是难于或不能进行逻辑综合的。,行为描述:一般采用进程语句(process)描述,高层次的功能描述,不必考虑在具体电路是怎样实现的。,architecturebehavioralofeqcomp4isbegincomp:process(a,b)beginifa=bthenequal=1;elseequal=0;endif;endprocesscomp;endbehavioral;,结构体数据流描述,数据流描述:也称寄存器(rtl)描述方式,明确描述了数据信号的流动路径、流动方向和流动结果。它采用类似于布尔方程的并行信号赋值语句进行描述。可以描述时序电路,也可描述组合电路。是完全能够进行逻辑综合的描述方式。,当a和b的宽度发生变化时,需要修改设计,当宽度过大时,设计非常繁琐,布尔方程描述,architecturedataflow2ofeqcomp4isbeginequal信号b1,);,architecturestructofeqcomp4iscomponentxnor2port(a,b:instd_logic;c:outstd_logic);endcomponent;componentand4port(a,b,c,d:instd_logic;q:outstd_logic);endcomponent;signalx:std_logic_vector(0to3);beginu0:xnor2portmap(a=a(0),b=b(0),c=x(0);u1:xnor2portmap(b=b(1),a=a(1),c=x(1);u2:xnor2portmap(a=a(2),b=b(2),c=x(2);u3:xnor2portmap(a=a(3),b=b(3),c=x(3);u4:and4portap(a=x(0),b=x(1),c=x(2),d=x(3),q=equal);endstruct;,三种描述方式的比较,进程语句(process),process语句的格式为:,进程标号:process(敏感信号列表)变量声明,begin顺序语句;endprocess进程标号;,敏感表(sensitivitylist)包括进程的一些信号,当敏感表中的某个信号变化时进程才被激活,进程内的顺序语句被执行。当进程结束时,进程内的输出信号值被更新,进程进入等待(睡眠)状态,直到敏感表中的某一信号再次发生变化,进程被再次激活执行。,方案二,architecturem2ofexamleisbegina:process(a,b)beginc=aandb;endprocessa;b:process(a,b)begindbthenreturna;elsereturnb;endif;endfunctionmax;-结束function语句end;-结束packagebody语句,函数定义实例,libraryieee;useieee.std_logic_1164.all;usework.hanshu.all;entityaxampisport(dat1,dat2:instd_logic_vector(3downto0);dat3,dat4:instd_logic_vector(3downto0);out1,out2:outstd_logic_vector(3downto0);end;architecturebhvofaxampisbeginout1=max(dat1,dat2);-用在赋值语句中的并行函数调用语句process(dat3,dat4)beginout2=max(dat3,dat4);-顺序函数调用语句endprocess;end;,函数应用实例,过程(procedure),procedure过程名(参数表),procedure过程名(参数表)is说明部分begin顺序语句endprocedure过程名;,过程首在程序包标题中定义,过程体在程序包体中定义,libraryieee;useieee.std_logic_1164.all;packagehanshuis-定义程序包proceduremax(signala,b:instd_logic_vector;signalc:outstd_logic_vector);-定义过程首end;packagebodyhanshuisproceduremax(signala,b:instd_logic_vector)-定义过程体signalc:outstd_logic_vector)isbeginc=a;if(a=b)thenc=b;endif;endmax;end;-结束packagebody语句,过程定义实例,libraryieee;useieee.std_logic_1164.all;usework.hanshu.all;entityaxampisport(dat1,dat2:instd_logic_vector(3downto0);dat3,dat4:instd_logic_vector(3downto0);out1,out2:outstd_logic_vector(3downto0);end;architecturebhvofaxampisbeginmax(dat1,dat2,out1);max(dat3,dat4,out2);end;,过程应用实例,函数与过程对比,过程可以返回多值,函数只能返回一个值。过程的参数为in、out、inout函数的参数为in(默认)。函数和过程均能产生新的电路模块。,vhdl主要描述语句,并行处理语句顺序处理语句,在结构体(architecture)中执行的语句,在进程(process)函数(function)过程(procedure)中执行的语句,硬件描述的特点,高级语言的特点,3.3vhdl语言顺序、并行描述语句,3.3.1vhdl顺序语句,顺序语句只能出现在进程(process)、函数(function)和过程(procedure)中;顺序语句像高级计算机语言一样,按其出现的先后顺序依次执行;用来描述复杂的逻辑关系及逻辑运算。,常用的顺序处理语句有:信号代入语句变量赋值语句case语句if语句loop语句,vhdl顺序语句,1、信号代入语句格式:目的信号量=信号量表达式;目的信号量=信号量表达式afternns;,注意:信号代入语句和关系操作符相同“=”,但其使用位置不一样,应根据上下文加以判断;信号代入语句两边信号量的数据类型及位长度必须一致。延时只在仿真时起作用,逻辑综合时被忽略。信号赋值不是立即发生,而是在进程结束时。,vhdl顺序语句,例:architectureabcofexampleissignalc:std_logic;beginprocess(a,b)beginc=aandbafter10ns;a=1;b=1;b=0;out顺序处理语句;whenothers=顺序处理语句;endcase;,注意:case语句至少包含一个条件句;case语句中条件表达式的值必须列举穷尽,但不能重复;无法穷举,用others表达。,例:四选一数据选择器architectureabcofexampleissignalsel:std_logic_vector(1downto0);beginselffffnull;endcase;endprocess;endabc;,为什么还要others?,vhdl顺序语句,vhdl顺序语句,4、if语句格式1:if条件then顺序处理语句;endif;格式2:if条件then顺序处理语句;else顺序处理语句;endif;格式3:if条件1then顺序处理语句;elsif条件2then顺序处理语句;else顺序处理语句;endif;,注意:if语句隐含有优先级的关系,可用来设计具有优先权的电路。,例:四选一数据选择器architectureabcofexampleissignalsel:std_logic_vector(1downto0);beginsel=b,不需穷尽所有情况,vhdl顺序语句,vhdl顺序语句,5、loop语句for循环格式:标号:for循环变量in循环次数范围loop顺序处理语句;endloop;,注意:循环变量只是一个临时变量,由loop语句自动定义,不需预先定义;loop语句范围内不要再使用其它与该循环变量同名的标识符。循环次数完成后程序自动退出循环。,vhdl顺序语句,例:8位奇偶校验电路architectureabcofexampleisbeginprocess(a)variabletmp:std_logic;begintmp:=0;foriin0to7looptmp:=tmpxora(i);endloop;y=tmp;endprocess;endabc;,能否定义为信号?,vhdl顺序语句,5、loop语句while循环格式:标号:while循环控制条件loop顺序处理语句;endloop;,注意:循环控制条件没有直接给出循环次数,可以是任何条件表达式,条件为“真”,进行循环,条件为“假”,退出循环。条件表达式需初始化。,vhdl顺序语句,例:8位奇偶校验电路architectureabcofexampleisbeginprocess(a)variabletmp:std_logic;begintmp:=0;i:=0;while(i8)looptmp:=tmpxora(i);i:=i+1;endloop;y=tmp;endprocess;endabc;,注意变量i初始化和在循环中的加1处理,3.3.2vhdl并行语句,并行语句是在结构体中执行的语句;语句的执行与程序书写的顺序无关,故可以颠倒书写顺序,不影响程序设计功能;它体现了硬件电路的运行特点。,常用的并行处理语句有:进程语句并发信号代入语句条件信号代入语句选择信号代入语句block语句,vhdl并行语句,1、进程语句(process)语句格式:标号:process(信号1,信号2,)变量声明begin顺序语句;endprocess标号;,注意:进程语句本身是并行语句,进程的内部才是顺序执行;同一结构体中,可以有多个进程,它们之间是并行关系。进程之间通过信号传递信息。,vhdl并行语句,例:architectureabcofexampleissignalc:std_logic;beginjc1:process(a,b)beginc=aandbafter10ns;endprocessjc1;jc2:process(c)beginif(c=1)thend=1;elsed=0;endprocessjc2;endabc;,两进程通过信号c传递信息,请用进程语句描述下面电路:,方案一,libraryieee;useieee.std_logic_1164.all;entityexampleisport(a,b:instd_logicc,d:outstd_logic);endexample;architecturem2ofexamleisbeginprocess(a,b)beginc=aandb;d=aorb;endprocess;endm2;,方案二,architecturem2ofexamleisbegina:process(a,b)beginc=aandb;endprocessa;b:process(a,b)begind=aorb;endprocessb;endm2;,方案三,libraryieee;useieee.std_logic_1164.all;entityexampleisport(a,b:instd_logicc,d:outstd_logic);endexample;architecturem2ofexamleisbeginprocess(a,b)variabletmp1,tmp2:std_logic;begintmp1:=aandb;tmp2:=aorb;c=tmp1;d=tmp2;endprocess;endm2;,变量的结果必须由信号带出进程,process(sel,a,b)beginf=a;ifsel=1thenf=b;endif;endprocess;,process(sel,a,b)beginifsel=1thenf=b;endif;f=a;endprocess;,注意进程内的语句是顺序执行,结果f总是等于a,变量和信号的区别,例:8未奇偶校验电路,libraryieee;useieee.std_logic_1164.all;entityjojyisport(a:instd_logic_vector(0to7)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抗击疫情风控工作方案
- 规划违建实施方案
- 江浙避暑营地建设方案
- 远景人工智能+智能城市公共服务效率研究报告
- 人工智能+智能客服生产力变革与客户服务效率研究报告
- 岳麓山滑道建设方案
- 优化2026年制造业供应链的智能仓储方案
- 建设真人cs方案
- 地质灾害监测设施维护保养方案
- 煤矿安全管理人员资格证报考条件
- 【课件】历史的图谱(文化色彩)+课件高中美术人教版(2019)选择性必修1+绘画
- DB36-T 657-2023 棘胸蛙养殖技术规程
- 物料掩埋事故分析原因分析报告
- 某自来水厂施工组织设计完整方案
- 十年(14-23)高考物理真题分项汇编专题58 气体的等圧変化(含解析)
- 2023建筑结构弹塑性分析技术规程
- 110kv变电站设计外文翻译
- 2023年中考数学压轴题专题22 二次函数与新定义综合问题【含答案】
- 毛主席诗词(132首)
- SB-2100流量积算仪说明书
- 【毕业论文撰写】开题报告、文献综述、文献检索
评论
0/150
提交评论