(LVDS差分信號簡單處理)5. 使用OSERDES發送高速串行數據

這一篇繼續講解OSERDES相關內容;OSERDES實現並串轉換,只需要管發送並不需要管接收到的數據如何,所以它的操作相對於ISERDES來說簡單;

本文將介紹OSERDES的IP核生成,OSERDES原語介紹,OSERDES級聯使用以及ISERDES,Idelay接收串行數據的幾種方法。


與上一篇文章的結構對應,這篇也將從可視化的SelectIO的設置講起,從簡單到複雜;

在IP Catalog裡面找到"SelectIO",接下來跟著這般操作:

(LVDS差分信號簡單處理)5. 使用OSERDES發送高速串行數據

數據總線設置

參數的意義如下:

  • Interface Template: 接口模板,本次數據傳輸並不符合預設的協議,所以選擇Custom
  • Data BUS Direction:這一次需要發送數據,選擇Output
  • Data Rate: 數據總線是SDR還是DDR,DDR內容可以看(LVDS差分信號簡單處理)2. DDR信號的處理
  • Serialization Factor: 串化因子,也就是IP核的輸入並行數據位寬;SDR Rate:可設為2,3,4,5,6,7,8;DDR Rate:可設為4,6,8,10,14;
  • External Data Width: 外部輸出數據的位寬,默認設1
  • I/O signaling:設置差分還是單端以及IO電壓標準
(LVDS差分信號簡單處理)5. 使用OSERDES發送高速串行數據

時鐘設置

這一部分的內容可以參考使用ISERDES接收高速串行數據,內容一樣;

(LVDS差分信號簡單處理)5. 使用OSERDES發送高速串行數據

數據和延時設置

這個地方不做設置的原因是因為,我們在測試ISERDES和OSERDES,需要排除使用Idelay的影響,因此這個地方不做任何延時;


最後一鍵OK,OSERDES的相關IP核就生成好了。從IP核最底層的verilog文件可以看到,它的實現跟OSERDES2原語有關,從UG471我們可以知道OSERDES2的相關內容;

首先關注OSEDES2的屬性內容,它的重要屬性決定的因素如下:

  • DATA_RATE_OQ:決定OQ端口輸出的數據速率,可選SDR或DDR;
  • DATA_RATE_TQ:決定TQ端口輸出的數據速率,可選BUF, SDR或DDR;
  • DATA_WIDTH: 根據"DATA_RATE_OQ"確定具體數值;SDR Rate:可設為2,3,4,5,6,7,8;DDR Rate:可設為4,6,8,10,14;
  • SERDES_MODE:確定OSERDES是主模塊還是從模塊,這跟OSERDES級聯使用有關,具體內容請看下面的內容;
  • TRISTATE_WIDTH:這跟"DATA_RATE_TQ"有關,大多情況都設為1,它的具體設置關係如下:
(LVDS差分信號簡單處理)5. 使用OSERDES發送高速串行數據

TRISTATE_WIDTH設置參數表 UG471 Table 3-8


(LVDS差分信號簡單處理)5. 使用OSERDES發送高速串行數據

OSERDES原語圖 UG471 Figure 3-14

OSERDES原語的端口定義如上圖所示,其中重要的端口設置如下:

  • OQ:串行數據輸出,直接到IOB,也就是直接連接到IOBUF,ODELAY等特殊結構
  • SHIFTOUT1/2:級聯時使用,詳見下文
  • CLK:高速時鐘,串行數據時鐘輸入
  • CLKDIV:慢速時鐘,並行數據時鐘輸入
  • D1 to D8:並行數據輸入,當並行數據多於8bit不超過14bit,可以使用OSERDES級聯,級聯的使用方法詳見下文
  • OCE: 串行數據時鐘使能信號輸出
  • RST: 高復位信號輸入
  • SHIFTIN1/2: 級聯時使用,詳見下文

其他沒有提到的輸入信號可以設為0,輸出信號可以不用連接;


CLKDIV與CLK的聯繫:

假設接收的串行數據時鐘為256MHz,串化因子為8,則CLKDIV為32MHz;

SDR:CLKDIV = CLK/DATA_WIDTH

DDR: CLKDIV = 2 * CLK/DATA_WIDTH

注意CLK和CLKDIV不一定是相位對齊的;


OSERDES2數據時延:

雖然與ISERDES2相比,沒有"Mode"屬性設置,但CLK和CLKDIV不一定是相位對齊的,它的輸出數據相對於輸入數據也有相應的時延,具體的延時與DATA_WIDTH,DATA_RATE_OQ,DATA_RATE_TQ有關;關係如下:

(LVDS差分信號簡單處理)5. 使用OSERDES發送高速串行數據

OSERDES時延參數對照表 UG471 Table 3-11


以最簡單的2:1 SDR串化為例:

(LVDS差分信號簡單處理)5. 使用OSERDES發送高速串行數據

2:1 SDR UG471 Figure 3-16

  1. Event1時,數據從FPGA其他部分邏輯傳到OSERDES2的D1-2端口
  2. Event2時,數據在CLKDIV上升沿被OSERDES2採樣
  3. Event3時,OQ端口產生相應的輸出串行數據

所以,是不是也可以推出下圖Event所發生的事情呢?條件為8:1 DDR。

(LVDS差分信號簡單處理)5. 使用OSERDES發送高速串行數據

8:1 DDR UG471 Figure 3-17


OSERDES級聯使用:

當並行數據多於8bit不超過14bit時,可以採用兩個OSERDES2級聯的使用方法,示意圖如下,

(LVDS差分信號簡單處理)5. 使用OSERDES發送高速串行數據

擴展並行輸入數據位寬 UG471 Figure 3-15

上圖已經示意的比較清楚,操作步驟可分為三步。

  1. 兩個OSERDES2的"SERDES_MODE"設置,一個需要設為"MASTER",另一個設為"SLAVE";
  2. 將"SLAVE"的"SHIFTOUT1/2"連接至"MASTER"的"SHIFTIN1/2";
  3. "MASTER"的D1-D8輸入並行數據的低8位,"SLAVE"的D3-D8可以連接輸入並行數據的高6位;


我在調試一款AD的過程中接觸到了SelectIO中的相關知識,由表及裡,看過一些I/OSERDES接收數據的調節方法:

  1. 首先讓發送方發送特殊字符,接收方接收數據轉為並行數據,調節Idelay的參數,直到出現穩定的結果(不一定是發送的特殊字符),Idelay參數記為C1;
  2. 繼續調節Idelay的參數,直到結果不再穩定,Idelay參數記為C2;
  3. Idelay參數設為(C1+C2)/2 ,此時接收的並行數據穩定為一個定值;
  4. 如果穩定的輸出結果不是約定的特殊字符,調節Bitslip移動字符的邊界,直至輸出結果為約定的特殊字符;
  5. 利用其他的通信方式或方法,告知發送方可以正常發送數據


更有甚者直接使用ISERDES,Idelay調節CLK,

  1. 將CLK作為串行數據,使用ISERDES轉為並行數據後,調節Idelay;
  2. 記錄最後一次並行數據全為0的時候的Idelay參數C1;
  3. 繼續調節,記錄第一次並行數據全為1的時候的Idelay參數C2;
  4. Idelay參數設為(C1+C2)/2 ,此時CLK的時鐘對應數據的位置裕量充足;


仿真結果可以參看使用ISERDES接收高速串行數據,結果一樣


總結:

  1. OSERDES2可以使用SelectIO IP核設置簡化原語設置流程;但OSERDES2原語設置會更加精細。
  2. OSERDES的數據時延以及級聯使用方面見上面的內容。
  3. 補充了ISERDES,Idelay調節接收的串行數據的方法,詳細內容以後有機會再展開。

如果您想獲取本文的Vivado工程及VCS相關仿真文件,歡迎留言

如果有更好的方法方案可以留言一起談論,歡迎大家點贊收藏留言討論交流。


分享到:


相關文章: