FPGA设计及应用_第1页
FPGA设计及应用_第2页
FPGA设计及应用_第3页
FPGA设计及应用_第4页
FPGA设计及应用_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VHDL基本构成,VHDL设计,VHDL文件,库(Library)程序包(Packages)声明在设计或实体中将用到的常数,数据类型,元件及子程序等,实体(Entities)声明到其他实体及其他设计的接口,即定义本设计的输入/出端口,结构体(Architectures)定义了实体的实现。即电路的具体描述,程序包(Package)/库(Library),LIBRARYieee;USEieee.std_logic_1164.ALL;USEieee.std_logic_unsigned.ALL;,实体(Entity),entityisportend;,实体(Entity),ENTITYcntm16IS-实体PORT(ci:INstd_logic;nreset:INstd_logic;-每一句结尾均为;clk:INstd_logic;co:outstd_logic;qcnt:bufferstd_logic_vector(3downto0);ENDcntm16;,信号名,端口类型,端口模式,结构体(Architecture),architectureofis-结构体声明区域-声明结构体所用的内部信号及数据类型-如果使用元件例化,则在此声明所用的元件begin-以下开始结构体,用于描述设计的功能-concurrentsignalassignments并行语句信号赋值-processes进程(顺序语句描述设计)-componentinstantiations元件例化end;,结构体(Architecture),结构体(Architecture),声明区(Declarations)信号声明;声明用于该结构体的类型,常数,元件,子程序。,并行语句,信号赋值(SignalAssignments计算结果,并赋值给信号,元件例化(ComponentInstantiations)调用另一个实体所描述的电路。即元件调用,过程调用(ProcedureCalls调用一个预先定义好的一个算法。,进程(Processes)定义一个新算法实现电路功能。在过程中赋值顺序语句。语句按放置的顺序执行。,结构体(Architecture),ARCHITECTUREbehaveOFcntm16ISBEGINco=1when(qcnt=“1111”andci=1)else0;PROCESS(clk,nreset)-进程BEGINIF(nreset=0)THEN-顺序语句qcnt=0000;ELSIF(clkEVENTANDclk=1)THENif(ci=1)thenqcnt=qcnt+1;endif;ENDIF;-endif_resetENDPROCESS;ENDbehave;,数据对象:信号(Signal),用于声明内部信号,其在元件之间起互联作用,可以赋值给外部信号。信号定义格式:Signal信号名:数据类型:=初始值;信号赋值:目标信号名=表达式;,例:signalgnd1:bit:0;signalhalfsum:std_logic_vector(7downto0);,数据对象:变量(variable),变量只在给定的进程中用于声明局部值或用于子程序中。变量定义格式:variable变量名:数据类型:=初始值;变量赋值:目标变量名:=表达式;,例:variablea:integer:=0variablevabc:std_logic_vector(2downto0);,数据对象常量(constant),常量在设计描述中保持某一规定类型的特定值不变。常量定义格式:Constant常数名:数据类型:=初始值;常量在定义时赋初值,constantallis1:std_logic_vector(2downto0):=“111”;constantbuswidth:integer:=8;,信号与变量比较,数据对象:信号和变量的赋值,signalsig1:std_logic;beginprocess(d1,d2,d3)variablevar1:std_logic;beginsig1=d1;-ignoredres2=d3xorsig1;sig1=d2;-overwritevar1:=d1;res4=d3xorvar1;var1:=d2;endprocess;,进程(PROCESS),进程(PROCESS)用于描述顺序(sequential)事件并且包含在结构中。一个结构体可以包含多个进程语句。,进程在结构体的位置,结构体(Architecture),声明区(Declarations)信号声明;声明用于该结构体的类型,常数,元件,子程序。,并发语句,信号赋值(SignalAssignments计算结果,并赋值给信号,元件例化(ComponentInstantiations)调用另一个实体所描述的电路。即元件调用,过程调用(ProcedureCalls调用一个预先定义好的一个算法。,进程(Processes)定义一个新算法实现电路功能。在过程中赋值顺序语句。语句按放置的顺序执行。,进程(PROCESS),进程(Process),声明区(Declarations)声明内部变量;用于该进程的常数;元件;子程序。,顺序语句,信号赋值(=),过程调用,变量赋值(:=),if语句,case语句,loop语句(循环),next语句(跳过剩余循环),exit语句(退出循环),wait语句(等待时钟信号),null语句(空语句,值保持不变),进程PROCESS,标号:process()声明区;begin-进程开始顺序语句;endprocess标号;-进程结束敏感表(Sensitivitylist)包括进程的一些信号,当敏感表中的某个信号变化时进程才被激活。,进程的敏感信号表,PROCESS(clk,nreset)-进程(敏感表)BEGINIF(nreset=0)THEN-顺序语句异步清零qcnt=0000;ELSIF(clkEVENTANDclk=1)THENif(ci=1)thenqcnt=qcnt+1;endif;ENDIF;-endif_resetENDPROCESS;,进程的敏感信号表,PROCESS(clk)-进程(敏感表)BEGINIF(clkEVENTANDclk=1)THEN-顺序语句IF(nreset=0)THEN-同步清零qcnt=0000;elsif(ci=1)thenqcnt=qcnt+1;ENDIF;-endif_resetENDIF;ENDPROCESS;,对进程(PROCESS)的几点说明,进程语句是一个复合语句,有一段程序组成在进程内的所有语句都是顺序语句进程本身是并行语句一个结构体可以包含多个进程语句进程中的说明部分不允许定义信号进程必须由敏感信号的变化来启动不能将变量引入敏感表,因为进程只对信号敏感多进程间的通信依靠(SIGNAL)来传递,PROCESS中信号与变量的比较,process(d1)variablevar1:std_logic;beginsig1=d1;res1=sig1;var1:=d1;res2=var1;endprocess;,ARCHITECTUREbhvOFDFF3ISBEGINPROCESS(CLK)VARIABLEQQ:STD_LOGIC;BEGINIFCLKEVENTANDCLK=1THENQQ:=D1;ENDIF;Q1=QQ;-不能放到进程外ENDPROCESS;END;,进程中的信号与变量比较,ARCHITECTUREbhvOFDFF3ISSIGNALQQ:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLKEVENTANDCLK=1THENQQ=D1;ENDIF;Q1=QQ;-可以放到进程外ENDPROCESS;END;,PROCESS中信号与变量的比较,process(clk,d1)variablevar1:std_logic;beginif(clkeventandclk=1)thensig1=d1;res1=sig1;var1:=d1;res2qqqqnull;endcase;endprocess;ENDbody_mux4;,RTL电路(Synplify综合),RTL电路(Synplify综合),错误的工作时序,正确的工作时序,VHDL常用语句,并行语句(Concurrent):并行语句总是处于进程(PROCESS)的外部。所有并行语句都是并行执行的,即与它们出现的先后次序无关。顺序语句(Sequential):顺序语句总是处于进程(PROCESS)的内部,并且从仿真的角度来看是顺序执行的。,并行语句,并行(Concurrent)语句并行语句之间值的更新是同时进行的,与语句所在的顺序无关。进程语句并行信号赋值语句元件例化语句生成语句并行过程调用语句,并行信号赋值:WHEN-ELSE语句,赋值目标=表达式WHEN赋值条件ELSE=表达式WHEN赋值条件ELSE表达式;,architecturearchmuxofmux4isbeginy=a0whens=00elsea1whens=“01”elsea2whens=10elsea3;endarchmux;,并行信号赋值:WITH-SELECT-WHEN语句,WITH选择信号SELECT赋值目标信号=表达式WHEN选择信号值1,表达式WHEN选择信号值2,表达式WHEN选择值N;,architecturearchmuxofmux4isbeginwithsselecty=a0when00,a1when“01”,a2when10,a3whenothers;endarchmux;,顺序(Sequential)语句,顺序语句总是处于进程(PROCESS)的内部,并且从仿真的角度来看是顺序执行的顺序赋值语句;IF语句;CASE语句;过程调用语句;此外还有“for-loop”语句,以及WAIT、NEXT、EXIT、RETURN、NULL语句等。,IF语句,(1)IF条件句Then顺序语句ENDIF;,(2)IF条件句Then顺序语句ELSE顺序语句ENDIF;,(3)IF条件句Then顺序语句ELSIF条件句Then顺序语句.ELSE顺序语句ENDIF,Process(clk)Beginif(clkeventandclk=1)thenq=d;Endif;Endprocess;,Process(a,b,s)Beginif(s=1)thenc=a;Elsec=b;Endif;Endprocess;,process(s,a0,a1,a2,a3)beginifs=00theny=a0;elsifs=01theny=a1;elsifs=10theny=a2;elsey=a3;endif;endprocess;,PROCESS(clk,nreset)60进制计数器BEGINIF(clkEVENTANDclk=1)THENif(ci=1)thenif(ql=9)thenql=0000;if(qh=5)thenqh=0000;elseqh顺序语句;ENDCASE,CASE语句,process(s,a0,a1,a2,a3)begincasesiswhen00=yyyy=a3;endcase;endprocess;,for-loop语句,标号:FOR循环变量IN循环次数范围LOOP顺序语句ENDLOOP标号;,process(databus)variabletmp:std_logic;begintmp:=0;foriin0to7looptmp:=tmpxordatabus(i);endloop;odd_num=tmp;even_num=nottmp;endprocess;endbehave;,常见错误:隐含触发器,entityand2isport(a,b:instd_logic;c:outstd_logic);endand2;architecturebehaveofand2isbeginprocess(a,b)beginif(a=1andb=1)thenc=1;endif;endprocess;endbehave;,?此代码能否生成一个二输入的与门?即:,常见错误:隐含触发器,process(a,b)beginif(a=1andb=1)thenc=1;endif;,改正后:process(a,b)beginif(a=1andb=1)thenc=1;elsec=0;endif;,常见错误:时钟处理,IF(clkEVENTANDclk=1)THENqcnt=qcnt+1;elseqcnt=datain;ENDIF;,有的综合器综合时会出现如下类似错误信息:“ElseClausefollowingaClockedgemustholdthestateofsignal”,VHDLD属性,属性指的是关于实体、结构体、类型、信号的一些特征。有些属性对综合(设计)非常有用,如:值类属性范围类属性信号类属性,值类、范围类属性,值类属性分为left,right,low,high,length。,sdown:instd_logic_vector(8downto0);sup:instd_logic_vector(0to8);则这两个信号的各属性值如下:sdownleft=8;sdownright=0;sdownlow=0;sdownhigh=8;sdownlength=9;supleft=0;supright=8;suplow=0;suphigh=8;suplength=9;,range属性,其生成一个限制性数据对象的范围。signaldata_bus:std_logic_vector(15downto0);data_busrange=15downto0;,信号类属性,event,它的值为布尔型,信号有变,则其取值为Ture,否则为False。,signalclk:instd_logic;clkeventandclk=1:时钟的上升沿clkeventandclk=0:时钟的下降沿,可利用预定义好的两个函数来表示时钟的边沿。risin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论