x i l i n x -selectio和clocking学习笔记

最近做高速视频图像采集相关的工作,需要对FPGA的selectio以及clocking资源有足够的了解,于是把xilinx的ug381,ug382, xapp1064文档阅读了一遍, 结合实际调试中遇到的问题,总结了如下要点。

1, selectio

spartan6具有可以配置的高性能selectio的驱动器和接收器,这些特性使之具有输出电平,抖动以及终端电阻的可配置特性。每个IO tiles 包含两个IOBs, 两个ILOGICs, 两个OLOGICs和 两个IODELAYs. 其中ILOGICs和OLOGICs都可以配置成4bit的ISERDES和4bit的OSERDES,即可以用两个4bit的ISERDES串联成8bit,spartan6 的串化因子是2-8,最大是8。xinlinx的FAE说好像不能比8大,直接调用原语修改行不通。7系列的FPGA串化因子可以到14.

从language template 直接copy的IBUFDS原语如下, 其中.DIFF_TERM("FALSE"),默认是false, 但是根据ug381文档中的介绍,对于高速的io接口,为保证信号的完整性,需要将false改为true。 当没有加终端电阻并且时钟速度过高的时候,从IBUFDS出来的时钟会出现抖动的情况,影响采集的数据的准确性。

时钟信号进入到IBUFG或者IBUFGDS后,clk就不能再去驱动其他的模块。

    之前遇到了一下两个问题

 a , 进到pll中的信号clk,clk再去驱动其他的信号

 b,从管脚进来的同一个差分时钟信号进到两个selectio中。

对于spartan6x45一个bank分成了两个半区,差分时钟和数据驱动selectio,当串化因子是8时,由于使用到了bufio,bufio只能驱动跟它同个半区的信号,所以时钟和数据信号必须位于spartan 6 的同个bank的同个半区;对于7系列的FPGA就没有这样的限制了。

   ug612中介绍说对于源同步双边沿采样最有效的一种约束方式是

   OFFSET = IN value VALID value BEFORE clock RISING;
   OFFSET = IN value VALID value BEFORE clock FALLING;

都说好的时序是写出来的,不是约束出来的,加这条语句作用好像并不大;在selectio里有调节时钟和数据延迟的界面,在那里调delay的值,应该效果会好一些,等周四改版后的板子回来了验证一下,

2.  clocking

   每个spartan6提供了16个高速低抖动的全局时钟资源l来提高性能,40个高速低抖动的区域时钟资源(32个BUFIO以及8个BUFPLLs)供应给本地的I/O serilizer和de-serilizer使用。

Clock Management Tiles(CMT),每个CMT块包含2个DCMs和一个PLL

DCM_SP, DCM_CLKGEN和PLL的具体使用在UG382中有详细介绍

fpga输出单端时钟 BUFG+ODDR2+(OBUF),xilinx芯片输出的单端和差分时钟都能达到几百M,之前做过用lattice芯片用逻辑搭建输出单端时钟,几十M还总是不稳定,(同样的板子有时候通了,有时候没通,应该是lattice芯片没有selectio资源导致输出的时钟性能受到了限制)。

FPGA输出差分时钟 BUFG+ODDR2+OBUFDS, 其中需要注意的是spartan6只有bank0和bank2能输出lvds差分信号。

猜你喜欢

转载自blog.csdn.net/walkmaner/article/details/84697420