电子大神的日记本,供应链专家的功夫茶盘,在这里记录、分享与共鸣。

登录以开始

高级篇:第2章 altera器件高级特性与应用

主要内容:

. 时钟管理;

. 片内存储器;

. 数字信号处理;

. 片外高速存储器;

. 高速差分接口和DPA;

. 高速串行收发器。

2.1 时钟管理

      分析设计中经常遇到的时序问题,介绍如何利用altera的时钟资源和PLL来有效地管理时钟,解决设计中的时序问题。

时序问题:

时钟偏斜(skew)和抖动(jitter)

时钟偏斜skew是指在时钟分配系统中各个时钟末端(器件内部触发器的时钟输入端)的时钟相位不一致的现象,是同一时钟源分不到不同时钟目的端的延时差。主要由两个原因造成:一是时钟源之间的偏差,例如同一个PLL所输出的不同的时钟信号之间的偏斜;另一个是时钟分配网络的偏斜。时钟偏斜是永远存在的,但是其大到一定程度,就会严重影响设计的时序,因此需在设计中尽量减小其影响。

时钟抖动是指时钟边沿的输出位置和理想情况存在一定的误差, 理想的时钟周期与实际的时钟周期的差别。抖动一般可以分为确定性抖动和随机抖动,确定性抖动一般比较大,而且可以追踪到特定的来源,如信号噪声、串扰、电源系统和其他类似的来源;随机抖动一般是由环境内的因素造成的,如热干扰和辐射等,往往难以追踪。实际环境中任何时钟都存在一定的抖动,而当时钟的抖动大到影响设计时序时就不可接受,应予以减弱。

时序余量(Timing Margin):

在一个同步设计中,可以说时序决定一切。

在设计内部的时序余量时,工程师通常会考虑的一些延时因素是:源触发器的时钟到输出延时MicroTco,触发器到触发器的走线延时Tlogic,目的触发器的建立时间MicroTsu和保持时间MicroTh。假设设计规格需要跑的时钟周期为T,因此需要满足时钟建立的要求:

                                          MicroTco + Tlogic +MicroTsu <= T

同时也需要满足目的端触发器的保持时间MicroTh要求。

在同步接口的设计中,另一需要重点考虑的就是FPGA和周围(上游和下游)器件的接口时序。由于芯片I/O管脚的输入输出存在相对较大的延时,同时还涉及到和时钟信号之间的相位关系,所以接口电路的时序往往称为设计中的难点。如考虑到时钟偏斜skew、抖动Tjitter在内(任何芯片内部的时钟和单板系统的时钟都不是完美时钟),时序余量就要满足:

                                          MicrTco + Tlogic +MicroTsu <= T+ Tskew -Tjitter

在I/O设计中除了传统的系统同步方案以外,也有源同步方案,如动态相位调整(DPA),数据与时钟之间的相位关系不用很严格;CDR(时钟数据恢复)电路,数据串行方式传送。

使用全局时钟网络和锁相环改善时钟:

全局时钟网络可以驱动全片的所有触发器和时序电路,包括LE、IOE、RAM和DSP等资源中的触发器。全局时钟网络的特点:为保证到芯片的各个角落的延时尽量相等,时钟分配树首先是走到芯片的中间,再向芯片的四周分布,所以从时钟的源端到所驱动的触发器走过的路径比较长,延时比较大,但是到各个时序元件(触发器)时钟输入端等长,保证时钟偏斜skew很小。同时全局时钟网络具有很强的驱动能力,而且在芯片设计的时候对时钟网络作了保护,尽量防止芯片内部的信号对时钟信号质量优影响,这样可以保证时钟信号引入的抖动非常小。

全局时钟的设置:在Quartus II软件中,有全局的设置选项“auto global clock”,可以使得工具在实现的时候自动把一些高扇出的时钟信号走到全局网络上去,与此类似,“auto global register control signals”选项同样可以自动把一些高扇出的触发器控制信号(如复位和时钟使能信号)走到全局网路上去。【setting】——【analysis & synthesis settings】——【more settings】——【existing options settings】

         如果用户不希望某个节点(管脚或内部信号)被选择使用全局时钟网络,可以再assignment Editor中单独对该信号设置开关(assignment name--auto global clock);当然,用同样的方法也可以约束某个管脚和内部节点自动使用全局时钟网络。

        FPGA器件中的锁相环PLL可以用来对设计中的时钟进行管理,可以通过锁相和移相来达到调整时钟偏差的目的。altera器件内部的模拟PLL还可以滤除输入时钟信号的抖动,提供高质量的内部和输出时钟。

局部走线:到不同目的节点的延时可能相差较大,即偏斜skew较大,可能会带来时序麻烦。布局布线中有对设计中的保持时间进行优化的选项,可以选择是仅优化I/O管脚还是优化所有的路径的保持时间。【setting】——【analysis & synthesis settings】——【more settings】——【existing options settings】——【ignor LCELL Buffers】,LCELL延时原语,用以认为地增加一些延时电路以满足保持时间的要求。

锁相环应用:

PLL、DLL:时钟管理元件,altera FPGA内嵌模拟锁相环,而xilinx FPGA内嵌纯数字的演示锁定环,都可以通过反馈路径来消除时钟分布路径的延时,可以做频率综合(如分频和倍频),也可以用来去抖动、修正占空比移相等。

模拟锁相环的特点:

PLL工作原理:压控振荡器VCO通过自振输出一个时钟,同时反馈给输入端的频率相位检测器PFD,PFD根据比较输入时钟和反馈时钟的相位来判断VCO输出的快慢,同时输出pump-up和pump-down信号给环路低通滤波器LPF,LPF把这些信号转换成电压信号,再用来控制VCO的输出频率,当PFD检测到输入时钟和反馈时钟边沿对齐时,锁相环就锁定了。

.  输出时钟是内部VCO自阵产生,把输入参考时钟和反馈时钟的变化转换为电压信号间接地控制VCO的评论。

.  VCO输出频率有一定范围,如果输入时钟频率超过这个频率,则锁相环不能锁定。

. LPF(频率相位检测器)部件可以过滤输入时钟的高频抖动,其输出时钟的抖动主要来自VCO本身以及电源噪声,而不是输入时钟代入的抖动。

. 由于是模拟电路,所以对电源噪声敏感,在设计PCB时,一般需要单独模拟电源和模拟地。

锁相环PLL的反馈模式:

Normal:时钟输入管脚与时钟网络的末端(驱动端)同相位。反馈路径补偿了时钟输入延时和时钟网络延时,使得FPGA输入时钟与内部使用时钟同相位。

zero delay buffer:时钟输入管脚与时钟输出管脚同相位。反馈路径补偿了时钟输入延时和时钟输出延时,使得时钟输入管脚与时钟输出管脚同相,这时锁相环就相当于一个零延时的时钟驱动器,可以用来产生镜像时钟输出。

external feedback:外部反馈模式,时钟输入管脚与时钟反馈输入管脚同相位。反馈回路是由时钟输出管脚通过PCB板上走线从反馈输入管脚输入,由于时钟延时和反馈输入延时相等,所以可以保证时钟输入管脚和反馈输入管脚锁定成同相位,如果在PCB布线时保证时钟输出PCB走线和外部反馈PCB走线两者等长,这就保证了下游芯片的时钟输入端和FPGA的反馈输入端同相位,这样,FPGA和下游器件就构成了一个同步系统,而不需要一个外部时钟驱动器。

no compensation:PLL的时钟输入端与PLL的时钟输出端同相位。锁相环的反馈路径中没有任何延时单元,不补偿任何的路径延时,所以时钟输出具有最好的抖动性能

source synchromous:管脚上的时钟输入和数据输入的相位关系在到达IOE触发器输入端上保持一致(仅在stratix II上支持)

锁相环在跟踪参考时钟的过程中,锁定locked信号会出现一段时间的上下翻转,等到锁相环完全锁定,锁定信号才固定输出高电平,为了使锁定信号有稳定的输出,在stratix II的PLL中,用户可以指定一个最大20bit计数器的值,等到参考时钟计数到该值后,才把锁定信号放出来,保证这个时候锁相环已经完全锁定。而这个参考时钟可以使用直接从管脚进来的时钟。

片内存储器:

用途:. 单端口RAM:一个端口进行读或写操作;

              . 简单双端口RAM:两个端口,一个只写,另一个只读;

              . 真正双端口RAM:两个均可以读写;

              . 多端口RAM:如一个端口写,两个端口读的三端口RAM;

              . FIFO:先进先出的存储器;

              . ROM:只读存储器。

           altera FPGA 的三种RAM块都可以支持单端口RAM方式和简单双端口方式。M4K和M-RAM可以支持真正双端口模式,而M512块不支持真正双端口模式;如果要实现三端口RAM,一口只写,另外两口只读,就必须用冗余的方法实现:用一个写端口把数据同时写到两个物理的RAM块中,同时也就支持两个读端口;在M512和M4K中都支持初始化文件,使RAM内部在FPGA加载完毕后就有初始值,所以支持只读存储器ROM方式,但M-RAM不支持初始化文件和ROM方式。

altera FPGA内嵌RAM内部的RAM都是纯同步RAM,也就是说其读和写操作都是由时钟沿触发。在RAM块的输入地址、数据和读写使能信号均有一级寄存器输入级,中间可以看做是一个纯异步读写的RAM内核,而输出数据也有一级寄存器输入级,但该寄存器是用户可选的,如果选上,输出数据会多延时一拍。

读写冲突:在双端口RAM方式下,无论是读或者是写都是针对同一个物理RAM块进行的。这样,在同一个时钟上升沿,当一个端口在写RAM,另一个端口在对同一地址读操作时就发生了读写冲突。一般来说,发生读写冲突时,写入的数据有效,读出的数据位未知。M512和M4K内部的一种机制可以由用户选择发生读写冲突时,希望读出的输出值:该次写操作之前的旧值old还是未知值unknown,如果选旧值,那么读操作将立即在本次时钟上升沿完成,读出旧值,而写操作将在紧跟其后的时钟下降沿完成,把新值写入RAM中,同时又避免了同一时钟的读写冲突。M512,M4K,当两个端口的时钟不同时,那么在发生读写冲突时,读出值也只能是未知值;但是M-RAM不具有这样特性,在读写冲突时,读出值只能是未知值。

        在实现单端口RAM或ROM时,如果两个RAM所占用的存储器的比特数都分别小于半个M4K的大小,而同时如果M4K资源紧张,Quartus II工具将会在实现的时候自动将这两个RAM合并到一个M4K块中实现,以节省RAM的占用。

       xilinx FPGA只有一种RAM块。逻辑单元中一个4输入LUT可以用来做一个16bit RAM,多个LUT组合在一起就可以做成较大的RAM,这种RAM为分布式RAM,用来实现一些小FIFO。但会浪费许多逻辑资源,同时性能较差,会占用器件内部的大量布线资源,降低设计的可布线性。分布式RAM的写操作是同步的,而读是完全异步的,用户需自己在外面增加寄存器来满足同步RAM的读时序。

RAM用作移位寄存器

M512和M4K可以支持移位寄存器模式,可用来实现移位寄存器以节省触发器资源,同时节省布线资源;但M-RAM不支持移位寄存器模式。使用RAM来实现移位寄存器,需要在MegaWizard中调用ALTSHIFT_TAPS。

RAM实现固定系数乘法

在DSP应用中,很多情况下需要将不同的数据与同一个系数相乘。这时,乘积由输入数据来决定,像一个ROM,不同的输入数据就是ROM地址,而乘积就是ROM中查找出来的内容。假设输入变换的数据是D,所要与之相乘的固定系数是C。如果D是8 bit宽,而C是10 bit 宽,那么,就把C鱼每个可能的D值相乘的结果预先存在M4K实现的ROM中,一次为0、C、2*C、3*C……,这样就可以实现固定其中一个操作数的乘法。

如果D是16 bit,相乘的结果无法放在一个M4K中,可把D分为MSB(高比特字节)和LSB(低比特字节),各8 bit,分别使用一个M4K存放相乘结果,最后需要把MSB相乘的结果左移8 bit 再与LSB相乘的结果相加,得到最终相乘的结果;当然也可以将MSB和LSB分两拍输入到同一个M4K中,然后通过外部的累加器将两拍RAM输出相加得到最后的乘积,以节省RAM资源,但需更多时钟周期。

数字信号处理

DSP块资源:在一些复杂系统中,如IP上的语音voice over IP、cdma2000以及高清电视HDTV 通常都需要带宽很高的DSP功能(主要是乘加运算)来处理高速数据。

DSP资源:LPM_MULT————选择专用的乘法器电路(如DSP块)或者用LE来实现乘法功能。

                    ALTMULT_ADD——用来实现乘加功能。

                   ALTMULT_ACCUM—用来实现乘累加功能。

                  ALTFP_MULT——       用来实现浮点乘法功能。

 

片外高速存储器

存储器介绍:传统的存储器主要可以分为静态存储器SRAM和动态存储器DRAM两种。目前业界比较流行的SRAM存储单元一般都是采用六晶体管的结构,而DRAM的存储单元则一般采用单晶体管加上一个无源电容构成。SRAM与DRAM相比,优缺点:SRAM访问时间短,总线利用率高,静态功耗相对较低,但占用硅片面积较大,容量小,价格较贵,适用于存储容量不大,性能要求较高的领域;DRAM读写访问过程比较复杂,访问时间较长,总线利用率相对较低,而且由于电容器会不断漏电,需要周期性去刷新,所以静态功耗大,但DRAM存储容量可以做到很大,价格便宜,被大量用于计算机和服务器市场。

随着存储器的进化,SRAM发展成SSRAM到QDR SRAM 和QDR II SRAM,使得SRAM容量和总线带宽逐步扩大,性能也得到提升。DRAM分为普通DRAM和专用DRAM两类,普通DRAM分为SDRAM、DDR SDRAM和DDR2 SDRAM,被大量用于PC和服务器中;专用DRAM主要是为满足一些特殊应用而设计的,包括:

  .  reduced Latency DRAM(RLDRAM):主要应用在网络设备中,实现高速路由查找表和数据包缓存,性能介于SRAM和普通DRAM之间;

.  Fast Cycle DRAM(FCRAM):应用于多媒体以及网络设备中,性能介于SRAM和普通DRAM之间。

. Mobile DRAM:静态功耗低,主要应用于手持设备中。

. graphics DRAM:主要应用于高速图像处理中。

通常,从单位比特的成本来说,SRAM最高,RLDRAM次之,DDR/DDR2 SDRAM 最低;从访问延时上来说,SRAM最小,RLDRAM次之,DDRAM延时最大。

        处于介绍期和成长期的器件,使用的批量较小,价格偏贵,适用于早期的新产品开发阶段;在成熟期的器件,批量非常大,价格最低;而在衰落期的器件,需求逐渐转移,批量减少,供货比较紧张,价格上涨。

 

DSP块资源

一个DSP块包括输入级寄存器(input register)、乘法器、流水线级寄存器(pipeline register)、加/减/累加(add/Sub/Acc)单元、求和单元(summation)、输出多路器(output mux)和输出级寄存器(output register)。在DSP块中的输入级、流水级和输出级寄存器都是可以旁路掉的,可以根据自己的需要选择使用。

DSP块的乘法器部分是由4个18 x 18的乘法器构成,可以支持有符号数和无符号数操作。乘法器部分可以用作4个18 x 18的乘法器,或者拆分成8个9 x 9的乘法器。如果用上DSP块中的2个加法单元和1个求综合单元,可以实现成一个36 x 36的乘法器。

 

ZBT SRAM接口设计(zero bus turn around SRAM):

传统的同步静态RAM在由读到写操作的过程中需要几个空操作,所以在读写操作切换比较频繁的应用中,就存在总线利用率不高的问题;ZBT SRAM是一种新的SRAM结构,好处是,其在读写操作转变时不需要任何的等待周期,可以直接切换,使得在任何操作模式下总线利用率保证100%,最大限度地利用了总线带宽。

但ZBT SRAM存在总线冲突问题。由于读写操作之间的连续性,数据总线上的数据不断出现,增加了数据总线上冲突发生的可能性。在数据总线的驱动源由控制芯片(如FPGA)转到RAM或由RAM转到控制芯片时,由其中一方关闭不及时或者另一方打开太早,都会造成两者的数据总线在某一时间同时为输出的情况出现,而这时,如果一方输出为低电平,另一方输出高电平,就会在两个输出驱动器之间形成一个电源VCC到地GND的直通路径,造成一个大电流,就是所谓的总线冲突现象。

一般来说,短时间的冲突可能引发器件变热,长时间的冲突会导致器件加热烧毁。

减少、避免冲突:设计ZBT SRAM总线接口时,必须使输出数据满足SRAM建立保持时间Tsu和Th的同时,还要满足Txz和Tzx的要求,用户可以通过调整输出使能OE、输出以及输入寄存器的时钟相位(锁相环)来实现。

DDR SDRAM接口设计:基于altera DDR触发器的结构特点,在输出时,是高位数据先出,地位数据后出,而在输出时,必须要低位数据首先进来,然后才是高位数据,因此,在设计RAM数据接口时,必须注意在输出寄存器或输入寄存器处将数据高低位颠倒一下,保证数据的正确高低为顺序。

DDR SDRAM是目前业界主流DRAM,绝大部分应用在PC和服务器市场,集成度高、密度大、接口带宽高、价格便宜。DDR SDRAM采用双数据速率接口,也就是在时钟的正沿或负沿都需要对数据进行采样,因此,DDR SDRAM内部的数据总线是接口数据总线的两倍宽;主频很高,达到200MHz,数据速率可以达到400Mbit/s,如果采用传统系统同步方式,必然导致时序紧张,因此DDR SDRAM的数据与采样时钟之间采用了源同步关系,读写数据的采样均由依靠随路传送的时钟来进行,这个采样时钟DQS域数据线DQ一样,是双向信号,也并不是一个总是在翻转的有效时钟信号。在读的时候RAM在送出有效数据DQ的同时将有效的采样沿DQS送出;在写的时候,DQ也需要伴随输入的DQS信号进行采样。

DDR SDRAM和SDRAM在内部控制逻辑和存储单元上基本一致,主要区别在时钟系统以及数据信号的采样上,只要清楚DDR SDRAM的数据接口部分的原理,就可以轻松把SDRAM控制器的设计转为 DDR SDRAM的控制器。

 

高速差分接口和DPA(动态相位调整电路)

随着数据接口速度和带宽的不断提高,许多接口逐渐撇弃了传统的LVTTL/LVCMOS电平,转而采用一些速度更高、抗干扰性更好的差分接口电平,如LVDS、LVPECL和hyperTransport等,从而减少PCB走线,提高传输带宽。

接口时钟速率的提高,同样使得传统的系统同步方式的数据接口电路变得越来越难以实现,许多接口开始采用源同步方式,其时钟伴随数据传输。如目前业界比较流行的SPI4.2(系统信息包接口,level 4,phase 2)就是采用了一对LVDS时钟信号和十六对 LVDS数据信号传送,如果每对数据信号工作在1Gbit/s,那么整个接口带宽可以达到16Gbit/s;业界另外一些标准接口也采用了类似的接口信号方式,如SFI-4(SERDES到“成帧器”的接口,level 4)、Utopia-4等等。

但是即便是采用了源同步方式,在数据速率非常高时如1Gbit/s,由于数据与数据之间的偏斜,数据与时钟之间的偏斜,加上PCB的影响,尤其是信号连接器connector的容性阻抗的不一致性,都会加剧时钟与数据之间的偏差,导致有效采样窗口逐渐变小,以至于时钟信号在管脚处根本找不到一个有效的采样窗口把并行数据一次采样进来,这时就需要为每一个数据线找到一个合适的采样时钟相位,保证在接口处把所有的数据都正确的采样进来,用来完成这项工作的电路就叫做动态相位对准电路(dynamic phase alignment)。

 

器件专用资源:

我们假设需要实现一个数据速率为840Mbit/s,随路时钟为420MHz的接口电路(包括发送和接收部分),而且数据和时钟之间是对齐(edge aligned)的,介绍利用stratix II 器件中的专用电路来实现数据的发送和接收。

   发送接口:如果每根数据接口信号工作在840Mbit/s,FPGA内部的逻辑显然无法工作在这个频率,假定内部将要输出的数据是8位并行数据,工作时钟频率是105MHz。如果要传送16对840Mbit/s的LVDS数据,那么内部就是16 x 8位宽,105Mbit/s的数据总线。这时,接口处需要一个串行器,把8位并行数据线转为1位的串行信号。

    在普通的是stratix II器件的I/O管脚处,有一个IOE,可以支持DDR(双数据速率)、SDR(单数据速率)以及无触发器的数据通道,而在一些可以支持高速LVDS输出的管脚处,还有一个串行器serializer电路,用户可以选择使用IOE或者是serializer电路。

内部的串行器可以支持的串行化因子J可以为4、7、8、10等,也就是说串行器可以接收这几种位宽的数据输入,做并串转换,如果需要实现J为1(SDR)或者2(DDR),就需要使用IOE,而不是串行器。

在该例中,需要实现8位数据的输入,J就要选择8,同时需要输入一个840MHz的串行时钟供串行器电路使用,以及一个载入使能信号(每8个串行时钟周期有效一次)。

Stratix II中的快速锁相环Fast PLL就是为这种应用而设计的。

Stratix II fast PLL可以输出两个串行时钟(dffioclk0,dffioclk1),两个载入使能(loadena0,loadena1)。高倍串行时钟是从VCO直接输出的,没有经过输出分频计数器,而载入使能是由分频器产生的。Fast PLL本身可以由分频计数器(C0 ~ C3)来产生低速并行时钟,输出到全局时钟网络GCLK和区域网络RCLK,供内部使用。

Stratix II器件允许用户把输出的差分时钟放在任意一对LVDS输出上,完全像数据一样输出,而无需采用专用的时钟输出管脚,这样,时钟输出的位置可以由用户任意指定,可以使其靠近数据输出总线,减小时钟与数据之间的偏差,减小PCB设计难度。在输出时钟的时候,利用普通的LVDS数据输出口,在输入的并行接口输入固定的“10101010”,同时把一位寄存器的输出直接送到管脚,就可以产生一个固定频率并且数据总线边沿对齐的时钟信号。

 

接收接口:在一些可以支持高速LVDS输入的管脚处,同样有一个解串器deserializer电路实现串行转换。另外,在stratix II或stratix GX器件中,还有一个动态相位调整DPA电路,可以实现更高速的输入采样电路。

在一些应用中,数据字节在串行链路上是一位接一位传送过来的。在接收端,如何把这些数据字节的边界找到,是一个非常关键的工作,即字节边界对准。

输入使能的位置将直接影响恢复出来的数据的字节边界,故可通过调整输入使能的位置来调整字节边界。

 

如果不适用专用的串行器和解串器电路,仅使用IOE中的触发器和LE资源,同样可以实现并/串转换电路。这种实现方法由于受到DDR触发器和内部逻辑性能的限制,数据速率不可能做得高。

 

动态相位调整电路DPA

随着设计时钟速率越来越高,信号偏斜skew、抖动jitter和噪声noise都在吞噬着时序余量。在高速设计中,工程师不仅需要关注有源器件的特性,一些无源器件对信号的传输、时序余量起着非常大的影响,包括PCB走线、过孔via、接插件(连接器等),另外工艺、电压和温度对信号延时的影响也相当大。

在普通的源同步设计中,随路时钟相对数据总线的相位固定,同时保证数据和数据、数据和时钟之间的PCB走线偏斜尽量小。这样,数据总线和时钟在传输过程中的延时可以做到差别很小,同时他们受外部环境影响的效果差不多,各种影响可以基本抵消,而在内部依靠延时单元或PLL将数据和采样时钟对准,这种对准称为静态相位对准。

当静态相位对准方案在时钟频率很高时(如1Gbit/s),时序余量就不能满足要求。如果传送的数据和时钟穿过连接器,由于数据线所受的影响各不相同,情况会变得很糟,甚至根本无法找到一个合适的相位来对所有数据正确采样。

如果接受的时钟能够根据每个通道数据的相位自动为每个通道分别选择合适的采样时钟相位,那将使接口变得非常可靠,同时也免去了PCB设计时数据和时钟之间严格等长的要求,得到PCB设计更加容易。Altera器件中的动态相位对准电路DPA就是为了满足这种要求二设计的。

DPA电路的原理:先用fast PLL输出的8个不同相位的高速DPA时钟对输入的数据分别采样,由此可以判断出该数据线翻转的位置,这样就可以从这8个不同相位的始终内选出一个位于有效数据中部的时钟来采样该数据,从而可以保证采样的正确性。每一个数据都可以在着8个相位的时钟中选出一个合适的来采样。

博主
zxj410@sohu.com
fpgalearner's Blog
fpgalearner
点击跳转