XILINX 7系列FPGA_SelectIO篇

0.轉載說明

FPGA適合數據的併發性處理,但是數據從何而來,這就是本文所要說的SelectIO——數據傳輸的先鋒部隊

Ultrascale+系列與7系列FPGA的SelectIO結構差別還是非常大的,後面有機會會總結出來。

原文鏈接
xilinx 7系列FPGA之SelectIO 篇(1)_IO接口簡介
xilinx7系列FPGASelectIO篇(2)_IO邏輯資源簡介
xilinx 7系列FPGA之SelectIO(3)_高級IO邏輯資源簡介
xilinx7系列FPGA之IO_FIFO篇簡介
原文圖片均參考自
7 Series FPGAs SelectIO Resources User Guide

1.IO接口簡介

從本篇開始的接下來共三篇,咱們聊一聊xilinx 7系列FPGA的SelectIO。所謂SelectIO,就是I/O接口以及I/O邏輯的總稱。SelectIO 篇可以分成3部分:第1部分介紹I/O的電氣特性,第2部分介紹I/O邏輯資源,第3部分介紹高級的I/O邏輯資源(serializer/deserializer)。本篇咱們來說說xilinx 7系列FPGA的I/O的電氣特性。

說到I/O,咱們必須先提到FPGA的BANK。在7系列的FPGA中,BANK分爲HR(High-range)BANK和HP(High-performance) BANK。HP BANK只能支持小於等於1.8V電平標準的I/O信號,HR BANK則支持小於等於3.3V電平標準的I/O信號。HP BANK專爲高速I/O信號設計,支持DCI(數控阻抗),而HR BANK則適合更大衆化的所有I/O信號設計。下表列出了HP BANK 和HR BANK的特性。

在這裏插入圖片描述
無論是HR或者HP BNANK,每個BANK都包含50個I/O管腳,每個I/O管腳都可配置成輸入、輸出。每個BANK的首尾管腳只能作爲單端I/O,其餘48個I/O則可配置成24對差分I/O。

單端的I/O管腳支持LVTTL、LVCMOS、HSTL、PCI等等常用的電平標準。差分的I/O管腳則支持LVDS、差分HSTL等差分信號。但在其官方文檔中,竟然沒有描述支持很常用的LVPECL差分信號,甚是奇怪。如下圖所示爲1個I/O接口示意圖(IOB):
在這裏插入圖片描述
總的來說,7系列FPGA同前幾代相比,最大的區別就是:

  • 多了專用於高速接口信號的HP BANK,該BANK最高只能支持1.8V電平。
  • 每個BANK多達50個I/O。

其它電氣性能基本保持一致,對咱們的使用不造成影響。

2.IO邏輯資源簡介

上篇咱們簡單的說了I/O的電氣特性,本篇咱們接着介紹I/O邏輯資源,先貼上兩張圖。圖1爲HPBANK的I/O模塊,圖2爲HRBANK的I/O模塊,兩者區別在於後者無ODELAYE模塊。
在這裏插入圖片描述
在這裏插入圖片描述
I/O邏輯資源主要包含5部分:

1, ILOGIC

ILOGIC即輸入信號處理邏輯,緊挨着IOB,外界的輸入信號最先經過的就是ILOGIC。ILOGIC是由許多的數據選擇器和一個IDDR(input

Double data rate)觸發器構成。該觸發器既可以雙沿捕獲輸入數據也可以拆分成普通單沿觸發器。在HP BANK中,ILOGIC被稱爲ILOGICE2,在HR BANK中,ILOGIC被稱爲ILOGICE3。下圖給出了ILOGICE3的示意圖:
在這裏插入圖片描述
2, IDELAY

IDELAY被稱爲信號延遲模塊,它的作用就是把信號延遲一段時間。對於一些需要對齊的輸入信號來說,這至關重要。在7系列FPGA中,它被稱爲IDELAYE2。IDELAYE2可以將信號延遲0~31節,在這區間任意可調,並且每節的延遲精度約爲78ps(1/(32×2×FREF),FREF爲IDELAYCTRL的參考時鐘)。下圖爲IDELAYE2例化框圖。
在這裏插入圖片描述
3, IDELAYCTRL

IDELAYCTRL其實是個輔助模塊,這麼說吧,只要咱們使用了IDELAY或者ODELAY,IDELAYCTRL必須被使用,要不然就無法正常工作。因爲IDELAY或者ODELAY的延遲精度是由IDELAYCTRL的輸入時鐘決定的,一般爲200MHz。下圖爲IDELAYCTRL例化框圖。

在這裏插入圖片描述

4, ODELAY

ODELAY和IDEALY的使用方式差不多,只不過ODELAY是用作輸出信號的延遲。另外,HR BANK內沒有ODELAY,HP BANK纔有,被稱爲ODELAYE2。使用ODELAYE2時同樣需要例化IDELAYCTRL。下圖爲ODELAYE2例化框圖:

在這裏插入圖片描述
5, OLOGIC

LOGIC包括2個部分:一個用於配置輸出路徑。另外一個用於配置三態控制路徑。輸出路徑和三態控制路徑都可以獨立配置成沿觸發器、ODDR以及組合邏輯輸出。

在這裏插入圖片描述

總得來說,I/O邏輯資源就是用來獲取或者輸出信號。對面一般的低速信號而言,I/O邏輯資源體現不出優勢,用不用都不影響最終結果,但是對於高速信號而言,就必須使用I/O邏輯資源了,不能夠正確使用它,整個FPGA邏輯代碼完全無用。但是FPGA不就是用來處理高速信號的麼?所以I/O這一塊應該是整個FPGA的精華之處,當然也是使用最難的部分了。。。。。。

爲了方便咱們使用I/O邏輯資源,xilinx公司專門將本篇介紹的幾種模塊集中起來,構成了功能強大的源語ISERDESE2和OSERDESE2,咱們只需要調用源語,正確使用源語就能夠完成高級的I/O邏輯設計了,下篇咱們就聊聊高級邏輯資源ISERDESE2和OSERDESE2吧!

3.高級IO邏輯資源簡介

上一篇咱們介紹了IO邏輯資源,本篇咱們來聊一聊高級的IO邏輯資源,即ISERDESE2模塊和OSERDESE2模塊。

所謂ISERDESE2模塊,即Input serial-to-parallel converters。該模塊的作用就是實現高速源同步輸入數據的串並轉換。

所謂OSERDESE2模塊,即output parallel-to-serial converters。該模塊的作用就是實現高速源同步輸出數據的並串轉換。

先說ISERDESE2。該模塊接收外部輸入FPGA的高速源同步串行信號,在FPGA內部將其轉換爲用戶需要的並行數據信號。如圖1所示爲ISERDESE2的功能框圖,咱們可以將按照功能分成5個部分:
在這裏插入圖片描述
1, 外部串行數據輸入端

該部分接收外部輸入的高速源同步數據,數據可以爲SDR或者DDR。在SDR模式時,數據轉換的位寬可以爲2、3、4、5、6、7、8bit。在DDR模式時,數據轉換位寬爲4、6、8bit,當然如果是2個ISERDESE2級聯使用,DDR模式可以支持10、14bit。

2, 時鐘接口

該部分提供ISERDESE2工作的高速源同步串行時鐘、並行數據獲取時鐘以及控制時鐘。如圖2所示爲源同步時鐘接入ISERDESE2的用法。

圖2:時鐘接法

3, 並行數據輸出端

該接口就不用多說了,就是最終咱們需要的並行數據。SDR模式下爲2、3、4、5、6、7、8bit,DDR模式下爲4、6、8、10、14bit。

4, 級聯接口

該接口是實現DDR模式下10bit、14bit位寬的關鍵接口,通過該接口與另外一個ISERDESE2級聯,兩者共同完成10bit、14bit數據的串並轉換。如圖3即爲2個ISERDESE2的級聯使用。

圖3:ISERDESE2級聯

5, 數據對齊模塊

該模塊又稱作Bitslip模塊,用來實現並行數據的邊界對齊。比如咱們外界串行輸入的8bit的數據,經過串並轉換後,能獲取8bit的並行數據,但這並行數據可能存在前後8bit數據之間的錯位,這是串並轉換無法識別的,因此Bitslip就專門用來找到用戶需要的並行數據邊界。

圖4給出了Bitslip是如何確定並行數據的邊界:對於SDR模式,Bitslip使能1次,則數據會左移1次,對於8bit並行數據,移動8次完成一個循環,可以這樣無止境的循環,直到找到用戶定義的並行數據。對於DDR模式,Bitslip工作方式不同,Bitslip使能1次,數據會右移1次或者左移3次,兩者交替進行,同樣移動8次完成一個循環。
圖4:Bitslip工作原理

咱們再說OSERDESE2模塊。該模塊和ISERDESE2模塊不同,少了Bitslip模塊,多了一個三態控制模塊,可以實現三態控制並串轉換功能,數據的位寬和咱們介紹的ISERDESE2規則一樣。如圖5所示爲其功能框圖:

圖5:OSERDESE2功能模塊

如圖6所示爲OSERDESE2的級聯設計,實現10、14bit的並串轉換功能:
圖6:OSERDESE2級聯

OSERDESE2除了多出了一個三態控制模塊,其它和ISERDESE2基本一樣,只是數據流反相操作,因此咱們這裏主要看一下三態控制模塊,該模塊主要功能就是實現串行數據流的三態輸出,圖7給出了三態控制的詳細時序結構,從圖上我們可以看到,三態控制下,串行數據流有選擇性的輸出E、F、H,實現了輸出串行數據的三態控制。

圖7:三態控制串行輸出

本篇咱們很簡要的介紹完了ISERDESE2和OSERDESE2,大家瞭解了嗎?當然如果要實際使用的話,咱們還得看看具體數據手冊啦!在上篇咱們就說過了,IO部分是FPGA內最複雜的部分,也是設計起來最難的部分,要熟悉使用它,咱們還得下功夫鑽研!

4.IO_FIFO篇簡介

前3篇咱們介紹了 SelectIO 邏輯資源,本篇咱們就聊一聊與SelectIO 邏輯資源水乳交融、相得益彰的另一個概念——IO_FIFO。

1個IO_FIFO包括1個IN_FIFO 和1個OUT_FIFO,它是7系列FPGA新設計的IO專用FIFO,主要用於IOLOGIC(例如ISERDES、IDDR、OSERDES或ODDR)邏輯功能的擴展。

FPGA的每個BANK有4個IN_FIFO和4個OUT_FIFO,相當於每12個IO對應1個IN_FIFO和1個OUT_FIFO。

IN_FIFO從ILOGIC接收4bit位寬的輸入數據,但卻可以輸出4bit或者8bit位寬的數據到FPGA內部SLICE。OUT_FIFO正好相反,從OLOGIC接收4bit或者8bit位寬的輸入數據,但卻輸出4bit位寬數據。

每一個IO_FIFO的存儲大小爲768bit,可以配置成12組4X4位寬數據的FIFO,也可以配置成10組4X8bit位寬數據的FIFO。每個IO_FIFO的深度爲9。如圖1所示爲IO_FIFO的結構示意圖:
在這裏插入圖片描述
如圖2所示爲IN_FIFO的原語框圖:
圖2:IN_FIFO的原語框圖

正如前面所說,當配置成12組的4bit位寬輸入,4bit位寬輸出時,輸入D0[3:0]~ D9[3:0]對應輸出Q0[3:0]~ Q9[3:0];輸入D10[3:0]即爲輸入D5[7:4],對應輸出Q5[7:4];輸入D11[3:0]即爲輸入D6[7:4],對應輸出Q6[7:4]。

當配置成10組4bit位寬輸入,8bit位寬輸出時,D0[3:0] ~ D9[3:0]對應輸出Q0[7:0]~ Q9[7:0],此時寫時鐘頻率是讀時鐘頻率的2倍。OUT_FIFO和IN_FIFO操作過程正好相反,咱們這裏就不羅嗦了。

總的來說,IO_FIFO其實就是存儲深度比較小、位寬固定爲4/8bit的普通FIFO ,7系列FPGA單獨設計了這樣的FIFO,更適用於IO接口處的字節\半字節數據緩存。



在這裏插入圖片描述

歡迎大家關注我創建的微信公衆號——小白倉庫
原創經驗資料分享:包含但不僅限於FPGA、ARM、RISC-V、Linux、LabVIEW等軟硬件開發,另外分享生活中的趣事以及感悟。目的是建立一個平臺記錄學習過的知識,並分享出來自認爲有用的與感興趣的道友相互交流進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章