华为_VHDL设计风格和实现.ppt_第1页
华为_VHDL设计风格和实现.ppt_第2页
华为_VHDL设计风格和实现.ppt_第3页
华为_VHDL设计风格和实现.ppt_第4页
华为_VHDL设计风格和实现.ppt_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

VHDL设计风格和实现,内容概述,一、同步设计二、速度三、资源四、其他,一、同步设计,什么是同步设计?,同步设计:上游数据到下游逻辑单元的传递是通过时钟来同步的。-只要能满足时延要求,就可以确保下游逻辑单元能正确采样到上游数据。异步设计:上游数据发生变化的时机是不确定的,甚至会出现中间态。-下游逻辑对上游数据的采样是不确定的,会发生数据传递的错误。,为什么要做同步设计?,两年前我做的FPGA设计,现在却不能工作。FPGA本身有什么变化吗?-如果采用的是异步设计,能否工作有很多无法控制的随机因素。我的设计原来可以工作,但将FPGA重新布线后,就不行了。怎么回事?-异步设计也许在特定布线下能工作,但布线改变后就不行了。很危险吧?我的设计通过了时间仿真,但上板调试时不干活。时间仿真对不对?-对于异步设计,通过了时间仿真也不一定能正常工作。要小心,时钟信号可别产生毛刺啊。要小心,异步复位可别有毛刺啊。快速FPGA中的触发器会对非常窄的毛刺信号作出反应。-异步设计中,设计者老要想着去消除时钟、异步复位信号以及锁存器使能端的毛刺,但这一点在异步设计中很困难,甚至不可能。,异步设计可能会产生以下问题:,同步设计的一个简单原则:永远不要将组合逻辑产生的信号用作时钟、异步复位/置位。,门产生的时钟有问题,此例中,计数终点信号会产生毛刺,使用该信号作时钟会引起问题。-MSB布线更短,信号变化先到达与门。与门会“感知”到1111的中间态。由于与门为电平敏感,会输出高电平的毛刺,从而引起寄存器的误动作。,布线更短,此处会产生毛刺,并且与计数器的时钟无关,MSB,01111000计数器的操作为:,011111111000因为MSB更快,计数器,flop,MSB,此处的与门为电平敏感,相应的VHDL代码,signalCounter:std_logic_vector(3downto0);signalTC:std_logic;signalflop:std_logic;process(Clk)beginifrising_edge(Clk)thenCounter=Counter+1;endif;endprocess;TC=1whenCounter=“1111”else0;-TC为组合逻辑输出process(TC)beginifrising_edge(TC)then-使用组合逻辑输出作时钟,是异步设计,禁止!flop=endif;endprocess;,毛刺和同步设计,组合逻辑的毛刺通常总是存在,难于甚至无法消除毛刺只有在异步设计中(连接到时钟、异步复位、锁存器的使能端)才存在问题在同步设计中,由于寄存器在时钟沿才会动作,只要能满足时延要求,就能确保采样到稳定正确的结果毛刺无法消除,但其造成的问题却可以消除采用同步设计并达到时延要求,安全同步化异步输入一例去抖动逻辑,异步输入,系统时钟,同步输入,设备外围,D,Q,延迟一个周期后才复位,确保D端输入脉冲至少有一个周期的宽度,没有中间态,异步输入的信号变化时机和宽度不确定,有抖动(毛刺),不能直接被同步系统正确采样,该逻辑确保能正确得到异步输入的上升沿。一个时钟周期内的多次电平变化被认为是抖动(毛刺),最后只得到一个上升沿。,相应的VHDL代码,signalAsynInput:std_logic;signalInputReg:std_logic;signalDelay:std_logic;signalSynInput:std_logic;process(SynInput,AsynInput)beginifSynInput=1then-此置位为寄存器信号,为同步设计,可行InputReg=0;ifrising_edge(AsynInput)thenInputReg=1;endif;endprocess;process(Clk)beginifrising_edge(Clk)thenDelay=InputReg;SynInput=Delay;endif;,D,Q3,AsyncR,INPUT,CLOCK,Counter,Q2,Q1,Q0,D,Q,同步设计方法中TC的生成和使用,对照前面异步设计中TC生成和使用的例子,TC,相应的VHDL代码,signalCounter:std_logic_vector(3downto0);signalTC:std_logic;signalflop:std_logic;process(TC,Clk)beginifTC=1then-此复位为寄存器信号,为同步设计,可行Counter=“0000”;TC=-;elsifrising_edge(Clk)thenCounter=Counter+1;ifCounter=“1110”then-注意和异步设计中TC信号的比较-此处TC为寄存器输出TC=1;elseTC=0;endif;endif;endprocess;,同步设计的更多例子(可行),D,Q1,INPUT,CLOCK,Counter,Q0,INPUT,CLOCK,DATA,相应的VHDL代码,例2signalCounter:std_logic_vector(3downto0);signalTC:std_logic;signals:std_logic;process(Clk)beginifrising_edge(Clk)thenifINPUT=1thenCounter=Counter+1;endif;ifTC=1then-TC用在寄存器的CE端,为同步设计,可行s=DATA;endif;endif;endprocess;TC=1whenCounter=“1111”else0;-TC为组合逻辑输出,例1signalCounter:std_logic_vector(1downto0);process(Clk)beginifrising_edge(Clk)thenifINPUT=1andCounter/=“11”thenCounter=Counter+1;endif;-组合逻辑用在寄存器的D端,-为同步设计,可行endif;endprocess;,异步设计的更多例子(禁止),D,Q1,AsyncR,这些例子有什么问题?,INPUT,CLOCK,Counter,Q0,INPUT,CLOCK,DATA,相应的VHDL代码,例2signalCounter:std_logic_vector(3downto0);signalTC:std_logic;signals:std_logic;process(Clk)beginifrising_edge(Clk)thenifINPUT=1thenCounter=Counter+1;endif;endif;endprocess;TC=1whenCounter=“1111”else0;-TC为组合逻辑输出process(TC)beginifrising_edge(TC)=1then-TC用作寄存器的时钟,为异步设计,禁止!s=DATA;endif;endprocess;,例1signalCounter:std_logic_vector(1downto0);process(Counter,Clk)beginifCounter=“11”then-组合逻辑用作寄存器的异步复位,-为异步设计,禁止!Counter16个负载)难于布线,而且较慢考虑在示意图或VHDL中复制资源来改进布线和速度Foundation工具不会自动完成这种功能将复制寄存器命名为_a,_b,_c,不要用1,2,3.这样,Foundation映射(map)时会更有效.,计数终点信号提前译码以提高速度,对大的计数器而言,译码产生计数终点信号需要逻辑级数较多-提前一个时钟周期译码计数终点信号,寄存后使用,可以提高速度,并保持时序关系不变。,LD,Q0Q1Q2Q3CO,D0D1D2D3CEC,D,QCEC,DATA0DATA1DATA2DATA3ENABLECLOCK,复制组合逻辑以提高速度,如果LogicReplication选项被选中,Foundation会自动复制组合逻辑速度/面积的交易通过复制组合逻辑,将逻辑合并入一个Slice中,减少了逻辑级数你的逻辑表达会影响映射结果。扇出大于1的网络可能在Slice之外。留意速度关键路径的映射结果,O1,I1,O1,I1,N1,N1必须输出到两个地方,所以O1需要两级逻辑,复制第一个门,使得逻辑可以合并入一级逻辑中,N1A,N1B,速度关键输入应在逻辑最后一级提供,关键输入应该在逻辑最后一级提供关键输入为芯片、Slice、或者LUT提供的时延最大的输入在示意图中,将关键输入连接在逻辑最后一级在VHDL中,将关键输入放在ifelsif链的第一级,CLB,CLB,IN(Critical),OUT,使用进位逻辑提高速度和密度,使用Slice中的进位逻辑可提高算术运算速度XCV100-4的例子(具体数据有待验证)16-bit加法器(不使用进位)10Slices例如:XCV100有30 x20CLB,一条进位链最多可以实现40位的加法器,一个48位加法器需要两条链使用库中基于进位的宏(RPM)或者LogiBLOX许多库中的算术函数是RPMADDx加法器,ADSUx加法/减法器,CCx计数器COMPMCxmagnitude比较器RPM指相对定位宏通过RLOC属性指定布局相对位置。进位逻辑的相对布局需要使用垂直进位逻辑连接,了解进位链流向,XC4000E/L和Spartan/XL进位链流向为上下两个方向XC4000EX/XL/XV和Virtex器件的进位链流向只能向上,XC4000ESpartan/XL,XC4000EX/XL/XVVirtex,LSB,MSB,编码:只有在必要时才使用二进制序列,可以生成各种需要的序列,而不仅限于二进制使用预缩放(prescale)技术来提高速度低位(LSBs)翻转很快参见ApplicationNotesXAPP001andXAPP014如果要译码输出,使用格林(Gray)码计数器每次只翻转一位,可以避免译码产生毛刺如果只需要计数终点,考虑使用线性反馈移位寄存器(LFSR)提高速度。生成序列可以覆盖的地址空间为2n-1,全0不包含在序列中。n取不同值时,用来生成反馈位的两位不同,参见相关资料在可以采用任意规则序列的情况下,也可以使用LFSR(比如,FIFO),使用预缩放(Pre-scale)提高计数器速度,计数器的速度由从LSB到MSB的进位延迟决定预缩放技术对较大的计数器特别有益-低位翻转很快,用低位的TC作为高位的CE,可以降低高位的时钟频率-使用TimeSpecs进行约束预缩放技术限制了载入时间,故计数器不可加载参考XAPP014,I/O速度:FPGA的建立时间Tsu,FPGA的输入输出也有时延要求。满足时延要求的FPGA建立时间由:全局时钟时延Tbufg、板上时延Tbrd和上游器件的输出时间Tco(up)决定。FPGA建立时间(Tsu)的计算公式:Tsu-fpga=Tcyc-Tco(up)-Tbrd+Tbufg可以使用“OFFSETIN”对Tsu进行约束,D,CE,Q,上游器件,D,CE,Q,XCV400FPGA,Clock(Tcyc),Tco(up),Tbrd,Tbufg,Tsu,I/O速度:FPGA的输出时间Tco,FPGA输出时间的计算公式:Tco=Tcyc-Tsu(down)-Tbrd-Tbufg使用“OFFSETOUT”对Tco进行约束,D,CE,Q,XCV400FPGA,D,CE,Q,下游器件,Clock(Tcyc),Tco,Tbrd,Tbufg,Tsu(down),使用快歪斜率提高输出速度,歪斜率控制输出速度缺省使用“slow”歪斜率,以降低噪音当速度重要时,使用“fast”歪斜率FAST是输出逻辑元件(primitive)的一个参数可以通过加入FAST约束实现。,使用I/O寄存器提高输入和输出速度,使用IOB中的I/O寄存器,可以提高输入和输出速度-输入或输出可以去除从内部布线的时延,IOB中的时延也更小-还可以节约寄存器资源实现选项中,选择“PackI/ORegisters/LatchesintoIOBsforInputsandOutputs”-输入若未寄存,直接扇入到组合逻辑,则不能map到IO寄存器中-输出若为组合逻辑输出,或者需要反馈为输入,则不能map到IO寄存器中,D,CE,Q,D,CE,Q,I/Opad,From:FPGA,Into:FPGA,OFF,IFF,OutputClock,InputClock,使用I/O寄存器的例子(FPGA-FPGA),发送器(XCV100-4FPGA),接收器(XCV100-4FPGA),使用IOB中寄存器的时延Tiockp+PCB网络时延+Tiopick5.6491.962=7.611,不使用IOB中寄存器的时延(Tcko+Tnet+Tioop)+PCB网络时延+(Tiopi+Tnet+Tdick)(1.372+0.756+5.652)(0.989+1.930+0.728)7.7803.647=11.427,输入速度:可编程的输入时延,FPGA的输入通道上有一个可编程的时延可以用来在建立时间和保持时间之间达到妥协。可选择全部、部分或无时延缺省为全时延,以使保持时间的需求为0可在UCF中进行控制。,D,CE,Q,XC4000FPGA,输入时延,BUFG,XC4036XL-1的例子:时延情况建立时间保持时间全时延:Tsu=5.8nsTh=0ns部分时延:Tsu=4.8nsTh=1ns无时延:Tsu=0.9nsTh=4.1ns,I/O速度的其他提示,XC4000-13,36,62XL是turboboosted。使用BUFG,可提高pintopin时延,三、资源,资源使用量是指FPGA使用了的百分率在宏、库、以及XAPPapplicationnotes中找到可比较的函数来估计资源使用量或者,使用别的设计来估计器件使用率快速实现,然后查看MAP报告选择“Implementation/ViewReportFiles/Mapreport”Slices,IOBs,BlockRAMs,以及其他部件分别列出,并给出使用百分率。最后给出相当于ASIC的门数,资源估计,DesignSummary-Numberoferrors:0Numberofwarnings:644NumberofSlices:1,147outof1,20095%SliceFlipFlops:7354inputLUTs:1,046(1usedasaroute-thru)DualPortRAMs:312NumberofSlicescontainingunrelatedlogic:0outof1,1470%NumberofbondedIOBs:85outof9886%IOBFlipFlops:68NumberofBlockRAMs:10outof10100%NumberofGCLKs:2outof450%NumberofGCLKIOBs:2outof450%NumberofDLLs:1outof425%NumberofStartups:1outof1100%NumberofRPMmacros:9Totalequivalentgatecount

温馨提示

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

最新文档

评论

0/150

提交评论