我一直沒搞明白BUFIO是干嘛用的。
官方解釋有這么一段話,如下:(virtex的)
“BUFIO是用來驅動I/O列內的專用時鐘網絡,這個專用的時鐘網絡獨立于全局時鐘資源,適合采集源同步數據。BUFIO只能由位于同一時鐘區域的Clock-Capable I/O驅動。一個時鐘區域有4個BURIO,其中的2個可以驅動相鄰區域的I/O時鐘網絡。BUFIO不能驅動邏輯資源(CLB、BRAM等),因為I/O時鐘網絡只存在于I/O列中。”
就是如果BUFIO只能驅動IO,到達不了CLB和RAM,可是數據最終是要進邏輯的啊,為什么呢?
首先、需要明確BUFIO是輸入用的。BUFIO是用來驅動輸入時鐘的,將外部時鐘引入FPGA的!與IOBUF不同啊,但與IBUFG類似,時鐘信號進FPGA也可以經過IBUFG。
其次、再來看BUFIO的輸入和輸出:SPARTAN6 的UG382手冊里這么寫的,如下:
BUFIO2 can drive ISERDES2 and OSERDES2 for either SDR or DDR clocking. BUFIO2 can
also route clock inputs from either a GCLK or a GTP_DUAL tile to a BUFG, DCM, or PLL
clock input. BUFIO2_2CLK can be used to replace one of the BUFIO2s required for DDR
clocking of the ISERDES2 and OSERDES2
(SDR:單邊沿,DDR:雙邊沿)
就是說BUFIO2輸入可以是GCLK(全局時鐘)和GTP_DUAL。然后輸出到BUFG或者,DCM ,PLL的時鐘輸入。
也就是說數據流順序 PAD-->BUFIO-->BUFG或者PAD-->BUFIO-->DCM(PLL)--->BUFG不知道有這樣用的嗎。
但實際應用可以這樣,BUFIO配和ISERDES2使用,ISERDES2是將串行數據轉成并行數據,相當于分頻了。而BUFIO具有分頻的功能。
舉例串行數據轉成4bit并行數據:串行數據相當4分頻,同樣將隨路時鐘clk_in(就是和串行數據同步進來的時鐘,,作為串行數據的采集時鐘)同步BUFIO接進FPGA,
BUFIO可以將輸入的隨路時鐘clk_in進行4分頻為clk_in4。這樣把clk_in4給BUFG,然后就可以同步將4bit的數據輸入采集到邏輯FIFO中去了。
配個圖,看看BUFIO的輸入輸出可以接什么:
輸出鏈接示意圖,如下:可以看到PN-->BUFIO-->BUFG(DCM)或者PN-->BUFIO-->IO,驅動IO(PN只差分對的P和N)
結合一下BUFIO的原語結構:
可以看出:
- IOCLK就去驅動IO了或者IOSERDES2的CLK0,1;IODDR2等
- DIVCLK可以去接BUFG或者PLL。
- SERDESSTROB可以去驅動IOSERDES2的IOCE使能腳了。
以上是對SP6講的,在virtex里面,有文章開頭那句話:BUFIO是用來驅動I/O列內的專用時鐘網絡,這個專用的時鐘網絡獨立于全局時鐘資源,適合采集源同步數據。BUFIO只能由位于同一時鐘區域的Clock-Capable I/O驅動。一個時鐘區域有4個BURIO,其中的2個可以驅動相鄰區域的I/O時鐘網絡。BUFIO不能驅動邏輯資源(CLB、BRAM等),因為I/O時鐘網絡只存在于I/O列中。”
就是說virtex里面BUFIO好像只能由Clock-Capable I/O驅動了。
-
時鐘
+關注
關注
10文章
1733瀏覽量
131451 -
CLB
+關注
關注
0文章
29瀏覽量
5950 -
i/o
+關注
關注
0文章
33瀏覽量
4589
發布評論請先 登錄
相關推薦
評論