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差分訊號。