/***文库里有这篇文章,但是收费太贵了,本人在其他途径收集到,现在免费分享给大家^_***********************************/可编程逻辑器件设计技巧1.什么是.scf?答:SCF文件是MAXPLUSII的仿真文件,可以在MP2中新建.1.用Altera_Cpld作了一个186(主CPU)控制sdram的控制接口,发现问题:要使得sdram读写正确,必须把186(主CPU)的clk送给sdram,而不能把clk经cpld的延时送给sdram.两者相差仅仅4ns.而时序通过逻辑分析仪测试没有问题.此程序在xilinx器件上没有问题.这是怎么回事?答:建议将所有控制和时钟信号都从PLD输出,因为SDRAM对时钟偏移(clockskew)很敏感,而Altera的器件PLL允许对时钟频率和相位都进行完全控制.因此,对于所有使用SDRAM的设计,Altera的器件PLL必须生成SDRAM时钟信号.要利用SDRAM作为数据或程序存储地址来完成设计,是采用MegaWizard还是Plug-InManager来将一个PLL在采用QuartusII软件的设计中的顶层示例?可以选择创建一个新的megafuntion变量,然后在Plug-Inmanager中创建ALTCLKLOCK(I/P菜单)变量.可以将PLL设置成多个,或是将输入划分开来,以适应设计需求.一旦软件生成PLL,将其在设计中示例,并使用PLL的“Clock”输出以驱动CPU时钟输入和输出IP引脚.2.在max7000系列中,只允许有两个输出使能信号,可在设计中却存在三个,每次编译时出现“deviceneedtoomany[3/2]outputenablesignal”.如果不更换器件(使用的是max7064lc68).如何解决这个问题?答:Eachoftheseuniqueoutputenablesmaycontrolalargenumberoftri-statedsignals.Forexample,youmayhave16bidirectionalI/Opins.Eachofthesepinsrequireanoutputenablesignal.Ifyougroupthesignalsintoa16-bitbus,youcanuseoneoutputenabletocontrolallofthesignalsinsteadofanindividualoutputenableforeachsignal.(参考译文:这两个独特的输出使能中每个都可能控制大量三相信号.例如,可能有16个双向I/O引脚.每个引脚需要一个输出使能信号.如果将这些信号一起分组到一个16位总线,就可以使用一个输出使能控制所有信号,而不用每个信号一个输出使能.)3.关于vhdl的问题:process(a,b,c)begin…endprocess;如果a、b、c同时改变,该进程是否同时执行三次?答:PROCESSSTATEMENTS中的执行跟逻辑有关系,假如是同步逻辑,则在每次时钟的触发沿根据A,B,C的条件来执行一次;假如是异步逻辑,则根据判断A、B、C的条件来执行.一般我们都推荐使用同步逻辑设计4.在设计最初,由于没有将时钟信号定义在全局时钟引脚上,导致MAXPLUSII在时间分析时提示错误:(时钟偏斜加上信号延迟时间超过输入信号建立时间).全局时钟引脚的时钟信号到各个触发器的延时最小,有没有可能通过编译软件设置,将普通I/O脚上的时钟信号也经过芯片内部的快速通道以最小的延迟送到每个触发器时钟引脚?答:youcanregisterthatsignalandassignitastheglobalsignal,bythestepflow:assign-logicoption-Individuallogicoptions-Globalsignal.Butyou'dbetterinputtheclocksignalthroughthededicatedinputpin.(参考译文:可以寄存这个信号,并将它指定为全局信号,步骤如下:指定—逻辑选项—个别逻辑选项—全局信号.但是,最好通过专用输入引脚输入时钟信号.)5.用MaxplusII软件设计完后,用DelayMatrix查看延迟时间.由于内部触发器的时钟信号用了一个输出引脚的信号,譬如将一引脚ClkOut定义为Buffer,Clkout是一时钟信号,然后反馈到内部逻辑,内部逻辑用此信号作为时钟信号,但用DelayMatrix,却查看不到一些信号相应于ClkOut的延迟,因为ClkOut是一Output引脚,在DelayMatrixsource一栏中没有ClkOut信号,如何解决这个问题?答:这种做法在逻辑设计中称为GATECLOCK,所谓GATECLOCK就是将设计中的组合逻辑结果拿来做时钟信号,这是一种异步逻辑设计.现在都推荐使用同步逻辑设计方法.可以将该信号(CLKOUT)拿来作使能信号,即ENABLE信号,而时钟信号还是采用原来的统一时钟,使设计用尽量少的同步时钟,这样一来就还是用DELAYMATRIX来分析原有的时钟.6.我是一个epld的初学者,目前看到xilinx的Virtex-II中嵌入大量的资源如:powerpc、ram等,究竟如何在fpga中使用这些资源?答:XilinxVirtex-II中嵌入的资源非常丰富,如BlockRAM、DigitalClockManager、On-chiptermination等等.ISE4.2i软件完全支持这些资源.可以举出单元库中相应基本数据的实例.XilinxCoreGenerator中也还支持BlockRAM等特性.至于PowerPC和MGT设计,可以使用Virtex-IIPro开发者套件.7.在设计中,往往需要对某个信号做一定(任意长)的延时,有没有好的方法来实现?而不是采用类似移位寄存器的方法来延时.答:使用移位寄存器在FPGA中对信号进行延时是一种好方法.XilinxVirtex架构中每个对照表(LUT)都能够设置成为具有可编程深度(最多为16)的移位寄存器.这就提供了一种高效的途径来在FPGA中实现移位寄存器.无须使用触发器就可以实现一个16位寄存器.作为一个好的设计习惯,任何情况下都不要通过闸延迟来实现延迟逻辑.8.ISE中的PADTOPADCONSTRAINT是否是包括输入输出的pad时延之和再加上输入输出之间的组合逻辑的时延?还是只是输入输出之间的组合逻辑的时延?答:XilinxPAD-to-PADcontraint的确涉及到输入输出PAD时延.这从布局后时序报告中可以看出.9.由于现在的设计基本上都是同步设计,那么PADTOPADCONSTRAINT在什么情况下使用?答:虽然现今多数设计都是完全同步,但仍有一些情况需要从一个输入引脚到另一个输出引脚的纯粹组合路径.因此,仍然需要PAD-to-PADconstraint控制这些路径的时延.10.如何在ISE中看到PADTOPAD的布线情况?答:通常不必在意信号在FPGA内的路线,只要它涉及到时序问题.这种工具将对以优化的方式对设计进行路由.如果希望检查具体路由,可以使用XilinxFPGAEditor,它包含在ISE4.2i软件中.11.在XilinxFoundation3.1i下用JTAGPROGRAMER下载程序到芯片中,可是总是出现如下错误:Ifthesecurityflagisturnedoninthebitstream,programmingstatuscannotbeconfirmed;others,programmingterminatedduetoerror.测量电路信号,没有相应的波形,显然下载没有成功.所用的芯片是:XilinxSpartan2XC2S50TQ144.怎么解决?答:Thisisasecurityfeature.Bydisablingreadback,theconfigurationdatacannotbereadbackfromtheFPGA.Thispreventsothersfrompiratingyourintellectualproperties.Youcanenableordisablethisfeatureduringbitstreamgeneration.TheproperwaytodetermineiftheconfigurationisfinishedwithouterroristocheckthestatusoftheDONEpinontheFPGA.DONEpinshouldgoeshighifthebitstreamisreceivedcorrectly.Also,sinceyouareusingJTAGconfiguration,pleasemakesureyouhaveselectedJTAGclock(notCClk)asyourStartupclockduringbitstreamgeneration.(参考译文:这是保密功能.通过禁用回读,配置数据不能从FPGA回读.这可以防止其他人盗用你的成果.在生成位元流过程中,可以启用或禁用这个功能.确定配置是否准确无误地完成,适合的方法就是检查FPGA上DONE引脚的状态.如果正确地接收了位元流,则DONE引脚将会升高.而且,既然使用JFAG配置,就要确保在生成位元流过程中,已经将JGAG时钟(而不是CClk)选作了Startup时钟.)12.XilinxVirtex架构中每个对照表(LUT)都能够设置成为具有可编程深度(最多为16)的移位寄存器.可否理解为,在写设计的时候如果设计了一个深度不大于16位的移位寄存器,ISE综合时就会用一个LUT来替代它?答:Mostsynthesistools(e.g.SynplifyPro,XilinxXST)areabletoinferLUTbasedshiftregister(SRL16E)fromyoursourcecode.Evenfordepthgreaterthan16,thetoolissmartenoughtoinfermultipleSRL16Etorealizetheshiftregister.AnotherwaytoutilizethisfeatureistoinstantiateanSRL16Einthesourcecode.YoucanrefertotheLibraryGuideintheXilinxISEsoftwarepackageformoredetails.(参考译文:大多数综合工具,例如SynplifyPro和XilinxXST,都能根据源代码中的移位寄存器SRL16E来推断LUT.即使是深度大于16的情况,此类工具也能够推断出多SRL16E,从而实现移位寄存器.利用此功能的另一种途径是在原代码中例示一个SRL16E.详细说明可以参考XilinxISE软件包中的库指南.)13.LUT是实现组合逻辑的SRAM,怎样实现一个时序的移位寄存器,是不是必须加一个触发器来配合LUT?答:TheLUTsinXilinxVirtexarchitecturearenotsimplycombinationallogic.Whenitisconfiguredas16x1RAM,thewriteoperationissynchronous.Whenitisconfiguredasshiftregister,thereisnoneedtoconsumeanyflip-flopresource.InfacttheinternalcircuitryofaVirtexLUTismorecomplicatedthanwhatitlookslike.(参考译文:XilinxVirtex结构中的LUT不是简单的组合逻辑。当它被配置为16x1RAM时,写操作是同步的。当它被配置为移位寄存器时,则无需消耗任何flip-flop资源。事实上Virte