背景
《ug471_7Series_SelectIO.pdf》介紹了Xilinx 7 系列 SelectIO 的輸入/輸出特性及邏輯資源的相關內容。
第 1 章《SelectIO Resources》介紹了輸出驅動器和輸入接收器的電氣特性,并通過大量實例解析了各類標準接口的實現。
第 2 章《SelectIO Logic Resources》介紹了輸入輸出數據寄存器及其雙倍數據速率(DDR)操作,以及可編程輸入延(IDELAY)和可編程輸出延遲(ODELAY)。
第 3 章《Advanced SelectIO Logic Resources》介紹了ISERDESE2 、OSERDESE2與IO_FIFO。
了解了這個手冊充分介紹的SelectIO架構和資源,以及所支持的電平標準。就可以利用相應的架構和資源實現與不同電平標準、通信速率間的外設建立起聯系。
系列目錄與傳送門
- 基于Xilinx的7系列,
- 筆者學習、研究FPGA的過程、筆記,記錄為:《凡人修FPGA傳》。
說明1:本系列基于文檔文檔《ug471_7Series_SelectIO.pdf》而寫,翻譯和感悟,會出現中英文混合的情況。
說明2:雖然文中會出現一些原文的部分截圖,非常支持并推薦大家去看原汁原味的官方文檔
說明3:在查閱相關資料過程中,發現一些關于相關知識點的介紹零零散散,本系列會對其進行整合,力求詳盡。
說明4:本博客是筆者用來記錄學習過程的一個形式,并非專業論文。因此,在本博客中不會太注重圖文格式的規范。
說明5:如果文章有誤,歡迎諸位道友指出、討論,筆者也會積極改正,希望大家一起進步!
文章目錄
- 背景
- 系列目錄與傳送門
- 前言
- 1、OSERDESE2 總述
- 1.1、數據并串轉換器(Data Parallel-to-Serial Converter)
- 1.2、三態并串轉換器(3-State Parallel-to-Serial Conversion)
- 2 ··· OSERDESE2 原語
- 3 ··· OSERDESE2 端口
- 4 ··· OSERDESE2 屬性
- 5、OSERDESE2 時鐘配置方法
- 6、OSERDESE2 位寬擴展
- 7、輸出反饋(Output Feedback)
- 8、OSERDESE2 延遲
- 9、Timing Characteristics
- 10、OSERDESE2 原語例化
- 11、參考文獻
前言
輸入串并轉換器 (Input serial-to-parallel converters,ISERDESE2) ,
輸出并串轉換器(output parallel-to-serial converters ,OSERDESE2),
支持極高的 I/O 數據速率,使內部邏輯的運行速度可以到 I/O 速率的1/8。
1、OSERDESE2 總述
-
OSERDESE2是7系列FPGA中專用的并串轉換器,集成特定的時鐘與邏輯資源,專為高速源同步接口設計。
-
每個 OSERDESE2 模塊都包含:
一個專用的數據串行器(a dedicated serializer for data)
和 一個三態控制串行器(3-state control),
可以被配置成SDR和DDR模式。
如圖 3-3 所示,OSERDESE2 的輸入比特順序與 ISERDESE2 的輸出順序互為鏡像。例如:
OSERDESE2的輸入:字 FEDCBA 的最低有效位(LSB) A 輸入至 D1 端口。
ISERDESE2 的輸出:同一比特 A 從 Q8 端口輸出。
如果,CLK頻率為200 MHz:
?SDR模式(8-bit)?:并串轉換速率為 200 MHz × 8 = 1.6 Gbps?。
?DDR模式(8-bit)?:并串轉換速率為 200 MHz × 8 × 2 = 3.2 Gbps
-
數據串行器:串行化比最高8:1(若使用OSERDESE2位寬擴展,則可達10:1和14:1)。
-
三態控制串行器:支持最高14:1串行化比。
-
OSERDESE2 模塊有一個DDR3專用模式,針對高速存儲器應用。
1.1、數據并串轉換器(Data Parallel-to-Serial Converter)
OSERDESE2模塊內的數據并串轉換器接收來自FPGA邏輯的2至8位并行數據(若啟用OSERDESE2位寬擴展,可支持14位),將數據串行化后通過OQ引腳輸出至IOB。并行數據從最低位輸入引腳(D1)開始串行傳輸(即D1引腳數據最先從OQ引腳輸出)。該轉換器支持兩種工作模式:single-data rate (SDR) and double-data rate (DDR)。
OSERDESE2 使用 CLK 和 CLKDIV 這兩個時鐘信號來進行數據速率轉換。CLK 是高速串行時鐘,CLKDIV 是分頻后的并行時鐘。CLK 和 CLKDIV 必須相位對齊。
使用前,必須對OSERDESE2施加復位信號。 OSERDESE2 包含一個控制數據流的內部計數器。 如果未將復位信號的釋放與 CLKDIV 同步,可能會產生意外輸出。
此外OSERDESE2內部還有一個計數器,用來計數當前dout輸出的是輸入信號的第幾位數據了,所以在使用OSERDESE2前,必須對OSERDESE2進行復位,復位信號可以是同步復位,也可以是異步復位,但是復位信號無效邊沿必須與CLKDIV同步(即使用異步復位時,要考慮同步釋放復位)。(《xilinx原語詳解及仿真之OSERDESE2》)
1.2、三態并串轉換器(3-State Parallel-to-Serial Conversion)
OSERDESE2模塊除了具有數據并串轉換功能外,還包括三態控制并串轉換器,用于IOB的三態信號控制。最大支持4位并行三態信號串行化,不可級聯。
2 ··· OSERDESE2 原語
3 ··· OSERDESE2 端口
- 1、Data Path Output - OQ
OQ 是 OSERDESE2 模塊的數據輸出端口。輸入端口 D1 的數據將首先出現在 OQ。此端口將數據并串轉換器的輸出連接至 IOB 的數據輸入端口。OQ 不能直接驅動 ODELAYE2,必須通過 OFB 引腳實現延遲控制。
- 2、Output Feedback from OSERDESE2 - OFB
OFB 是 OSERDESE2 的串行(高速)數據反饋端口,用途包括:連接至 ODELAYE2 原語實現輸出延遲,或者將串行數據回傳至 ISERDESE2。
- 3、3-state Control Output - TQ
TQ 是 OSERDESE2 的三態控制輸出端口,用于將三態并串轉換器的輸出連接至 IOB 的三態控制輸入。
- 4、3-state Control Output - TFB
TFB 是 OSERDESE2 的三態狀態反饋端口,可向 FPGA 邏輯端反饋當前三態狀態(當 IOB 處于高阻態時有效)。
- 5、High-Speed Clock Input - CLK
CLK 是驅動并串轉換器串行端的高速時鐘信號。
- 6、Divided Clock Input - CLKDIV
CLKDIV 是驅動并串轉換器并行端的分頻時鐘信號,為 CLK 的分頻信號且與CLK相位對齊。
- 7、Parallel Data Inputs - D1 to D8
所有并行數據通過 D1-D8 端口輸入 OSERDESE2,支持配置為 2 至 8 位(即 8:1 串行化)。通過從模式 OSERDESE2 級聯可擴展至 10 或 14 位。
- 8、Reset Input - RST
復位生效(高電平):使 CLK/CLKDIV 域所有數據觸發器異步輸出低電平。
復位釋放(同步要求):需與 CLKDIV 同步釋放,內部邏輯在 CLK 第一次上升沿重新同步。
在多比特輸出結構中的每個 OSERDESE2 應由相同的復位信號驅動,該信號異步斷言,并與 CLKDIV 同步去斷言,以確保所有 OSERDESE2 元素同步退出復位。
復位釋放時,需確保 CLK/CLKDIV 已穩定。
- 9、Output Data Clock Enable - OCE
OCE 為數據路徑的高電平有效時鐘使能信號。
- 10、3-state Signal Clock Enable - TCE
TCE 為三態控制路徑的高電平有效時鐘使能信號。
- 11、Parallel 3-state Inputs - T1 to T4
所有并行三態信號通過 T1 至 T4 端口進入 OSERDESE2 模塊。這些端口連接到 FPGA 內部結構。它們可配置為一位、兩位或四位,或者直通。DATA_RATE_TQ 和 TRISTATE_WIDTH 屬性控制這些端口的行為。
- 在博客《xilinx原語詳解及仿真之OSERDESE2》中,看到如下一段話。
4 ··· OSERDESE2 屬性
- 1、DATA_RATE_OQ
此屬性定義數據以單數據速率(SDR)或雙數據速率(DDR)處理。允許值為 SDR 或 DDR,默認值為 DDR。
- 2、DATA_RATE_TQ
此屬性定義三態控制以單數據速率(SDR)、雙數據速率(DDR)或直通模式(BUF)處理。允許值為 SDR、DDR 或 BUF,默認值為 DDR。
SDR/DDR 模式下:使用全部四個三態輸入(T1-T4),其行為由 TRISTATE_WIDTH 屬性配置。
BUF 模式下:
旁路 SDR/DDR 模式寄存器,因此應使用 T1 輸入。T1 輸入信號與所有其他信號異步,因為它僅通過 OSERDESE2 傳遞。
- 3、DATA_WIDTH
DATA_WIDTH 屬性定義并行轉串行轉換器的并行數據輸入位寬。
當 DATA_RATE_OQ 設置為 SDR 時,DATA_WIDTH 屬性的可能取值為 2、3、4、5、6、7 和 8。當 DATA_RATE_OQ 設置為 DDR 時,DATA_WIDTH 屬性的可能取值為 4、6、8、10 和 14。
當 DATA_WIDTH 設置為大于 8 的位寬時,必須將一對 OSERDESE2 配置為主從模式。
- 4、SERDES_MODE
此屬性定義位寬擴展時 OSERDESE2 的主從模式,允許值為 MASTER(主)或 SLAVE(從),默認值為 MASTER。
- 5、TRISTATE_WIDTH
此屬性定義三態并串轉換器的并行輸入位寬,其取值范圍取決于 DATA_RATE_TQ:
DATA_RATE_TQ=SDR 或 BUF,TRISTATE_WIDTH=1;
DATA_RATE_TQ=DDR,TRISTATE_WIDTH=1或4;
5、OSERDESE2 時鐘配置方法
理想情況下,CLK與CLKDIV需保持相位對齊(允許一定容差)?。
OSERDESE2模塊的有效時鐘配置方案僅包含以下兩種:
1、由 BUFIO 驅動 CLK , 由 BUFR 驅動 CLKDIV 。
2、CLK和CLKDIV由同一MMCM或PLL的CLKOUT[0:6]驅動。
若使用MMCM驅動OSERDESE2的CLK和CLKDIV,則供給OSERDESE2的緩沖類型不能混用。例如,若CLK由BUFG驅動,則CLKDIV也必須由BUFG驅動。
6、OSERDESE2 位寬擴展
每個I/O單元(I/O tile)有兩個OSERDESE2模塊:一個主模塊和一個從模塊。
將主OSERDESE2的SHIFTIN端口連接到從OSERDESE2的SHIFTOUT端口,可以把并串轉換器擴展到10:1和14:1(僅限DDR模式)。
對于差分輸出,主OSERDESE2必須位于差分輸出對的正端(_P引腳)。
非差分輸出時,與從OSERDESE2相關的輸出緩沖區不可用,位寬擴展也無法使用。
使用互補單端標準(例如DIFF_HSTL和DIFF_SSTL)時,可能無法使用位寬擴展。這是因為互補單端標準會使用 I/O單元 內中的兩個OLOGICE2/3模塊(OLOGICE2/3 blocks)來傳輸兩個互補信號,從而沒有可用的OLOGICE2/3模塊用于位寬擴展。
- 位寬擴展指南:
-
- 1、兩個 OSERDESE2 模塊必須是相鄰的主從對。
-
- 2、將主 OSERDESE2 的 SERDES_MODE 屬性設置為 MASTER,
從 OSERDESE2 的 SERDES_MODE 屬性設置為 SLAVE。
- 2、將主 OSERDESE2 的 SERDES_MODE 屬性設置為 MASTER,
-
- 3、用戶必須將從模塊的 SHIFTIN 引腳連接到主模塊的 SHIFTOUT 引腳。
-
- 4、從模塊使用 Q3 到 Q8 引腳作為輸出。
-
- 5、主模塊和從模塊的DATA_WIDTH相等。
-
- 6、屬性INTERFACE_TYPE設置為DEFAULT。
7、輸出反饋(Output Feedback)
OSERDESE2引腳OFB具有以下兩種功能:
? 作為反饋路徑至ISERDESE2的OFB引腳。。
? 與ODELAYE2連接。OSERDESE2的輸出可以通過OFB引腳路由至ODELAYE2模塊,然后通過ODELAYE2進行延遲。
8、OSERDESE2 延遲
- DEFAULT Interface Type Latencies(默認接口類型延遲)
OSERDESE2模塊的輸入到輸出延遲取決于DATA_RATE和DATA_WIDTH屬性。
延遲被定義為以下兩個事件之間的時間間隔:
事件(a):CLKDIV的上升沿將數據從輸入端D1-D8時鐘輸入到OSERDESE2。
事件(b):串行流的第一位出現在OQ。
表3-11總結了各種OSERDESE2延遲值。
當CLK和CLKDIV的相位對齊時,延遲可能相差一個CLK周期,如果CLK和CLKDIV的相位沒有對齊時,延遲的值取決于DATA_RATE和DATA_WIDTH的值。
9、Timing Characteristics
- 2:1 SDR Serialization
- 8:1 DDR Serialization
- 4:1 DDR 3-State Controller Serialization
時鐘事件1:
T1、T2和T4被置0以解除三態條件。
T1-T4和D1-D4在OSERDESE2中的串行化路徑相同(包括延遲),因此在時鐘事件1期間,EFGH位始終與T1-T4引腳上呈現的0010對齊。
時鐘事件2:
在EFGH被采入OSERDESE2后的一個時鐘周期,數據位E出現在OQ。
此延遲與表3-11中列出的4:1 DDR模式OSERDESE2延遲一個時鐘周期一致。
在時鐘事件1期間,T1上的三態位0在0010被采入OSERDESE2三態塊后的一個時鐘周期出現在TQ。此延遲與表3-11中列出的 4:1 DDR模式OSERDESE2延遲一個時鐘周期一致。
10、OSERDESE2 原語例化
// OSERDESE2: Output SERial/DESerializer with bitslip
// 7 Series
// Xilinx HDL Libraries Guide, version 13.4
OSERDESE2 #(.DATA_RATE_OQ("DDR"), // DDR, SDR.DATA_RATE_TQ("DDR"), // DDR, BUF, SDR.DATA_WIDTH(4), // Parallel data width (2-8,10,14).INIT_OQ(1'b0), // Initial value of OQ output (1'b0,1'b1).INIT_TQ(1'b0), // Initial value of TQ output (1'b0,1'b1).SERDES_MODE("MASTER"), // MASTER, SLAVE.SRVAL_OQ(1'b0), // OQ output value when SR is used (1'b0,1'b1).SRVAL_TQ(1'b0), // TQ output value when SR is used (1'b0,1'b1).TBYTE_CTL("FALSE"), // Enable tristate byte operation (FALSE, TRUE).TBYTE_SRC("FALSE"), // Tristate byte source (FALSE, TRUE).TRISTATE_WIDTH(4) // 3-state converter width (1,4)
)OSERDESE2_inst (.OFB(OFB), // 1-bit output: Feedback path for data.OQ(OQ), // 1-bit output: Data path output// SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each).SHIFTOUT1(SHIFTOUT1),.SHIFTOUT2(SHIFTOUT2),.TBYTEOUT(TBYTEOUT), // 1-bit output: Byte group tristate.TFB(TFB), // 1-bit output: 3-state control.TQ(TQ), // 1-bit output: 3-state control.CLK(CLK), // 1-bit input: High speed clock.CLKDIV(CLKDIV), // 1-bit input: Divided clock// D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each).D1(D1),.D2(D2),.D3(D3),.D4(D4),.D5(D5),.D6(D6),.D7(D7),.D8(D8),.OCE(OCE), // 1-bit input: Output data clock enable.RST(RST), // 1-bit input: Reset// SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each).SHIFTIN1(SHIFTIN1),.SHIFTIN2(SHIFTIN2),// T1 - T4: 1-bit (each) input: Parallel 3-state inputs.T1(T1),.T2(T2),.T3(T3),.T4(T4),.TBYTEIN(TBYTEIN), // 1-bit input: Byte group tristate.TCE(TCE) // 1-bit input: 3-state clock enable
);
// End of OSERDESE2_inst instantiation
11、參考文獻
1、《ug471_7Series_SelectIO.pdf》
2、《xilinx原語詳解及仿真之OSERDESE2》