OSERDES實現并串轉換,只需要管發送并不需要管接收到的數據如何,所以它的操作相對于ISERDES來說簡單;
本文將介紹OSERDES的IP核生成,OSERDES原語介紹,OSERDES級聯使用以及ISERDES,Idelay接收串行數據的幾種方法。
與上一篇文章的結構對應,這篇也將從可視化的SelectIO的設置講起,從簡單到復雜;
在IP Catalog里面找到"SelectIO",接下來跟著這般操作:
數據總線設置
參數的意義如下:
- 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電壓標準
時鐘設置
這一部分的內容可以參考使用ISERDES接收高速串行數據,內容一樣;
數據和延時設置
這個地方不做設置的原因是因為,我們在測試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,它的具體設置關系如下:
TRISTATE_WIDTH設置參數表 UG471 Table 3-8
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有關;關系如下:
OSERDES時延參數對照表 UG471 Table 3-11
以最簡單的2:1 SDR串化為例:
2:1 SDR UG471 Figure 3-16
- Event1時,數據從FPGA其他部分邏輯傳到OSERDES2的D1-2端口
- Event2時,數據在CLKDIV上升沿被OSERDES2采樣
- Event3時,OQ端口產生相應的輸出串行數據
所以,是不是也可以推出下圖Event所發生的事情呢?條件為8:1 DDR。
8:1 DDR UG471 Figure 3-17
OSERDES級聯使用:
當并行數據多于8bit不超過14bit時,可以采用兩個OSERDES2級聯的使用方法,示意圖如下,
擴展并行輸入數據位寬 UG471 Figure 3-15
上圖已經示意的比較清楚,操作步驟可分為三步。
- 兩個OSERDES2的"SERDES_MODE"設置,一個需要設為"MASTER",另一個設為"SLAVE";
- 將"SLAVE"的"SHIFTOUT1/2"連接至"MASTER"的"SHIFTIN1/2";
- "MASTER"的D1-D8輸入并行數據的低8位,"SLAVE"的D3-D8可以連接輸入并行數據的高6位;
我在調試一款AD的過程中接觸到了SelectIO中的相關知識,由表及里,看過一些I/OSERDES接收數據的調節方法:
- 首先讓發送方發送特殊字符,接收方接收數據轉為并行數據,調節Idelay的參數,直到出現穩定的結果(不一定是發送的特殊字符),Idelay參數記為C1;
- 繼續調節Idelay的參數,直到結果不再穩定,Idelay參數記為C2;
- Idelay參數設為(C1+C2)/2 ,此時接收的并行數據穩定為一個定值;
- 如果穩定的輸出結果不是約定的特殊字符,調節Bitslip移動字符的邊界,直至輸出結果為約定的特殊字符;
- 利用其他的通信方式或方法,告知發送方可以正常發送數據;
更有甚者直接使用ISERDES,Idelay調節CLK,
- 將CLK作為串行數據,使用ISERDES轉為并行數據后,調節Idelay;
- 記錄最后一次并行數據全為0的時候的Idelay參數C1;
- 繼續調節,記錄第一次并行數據全為1的時候的Idelay參數C2;
- Idelay參數設為(C1+C2)/2 ,此時CLK的時鐘對應數據的位置裕量充足;
仿真結果可以參看使用ISERDES接收高速串行數據
總結:
- OSERDES2可以使用SelectIO IP核設置簡化原語設置流程;但OSERDES2原語設置會更加精細。
- OSERDES的數據時延以及級聯使用方面見上面的內容。
-
FPGA設計
+關注
關注
9文章
428瀏覽量
26523 -
DDR
+關注
關注
11文章
712瀏覽量
65362 -
SDR
+關注
關注
7文章
233瀏覽量
50491 -
RST
+關注
關注
0文章
31瀏覽量
7400 -
CLK
+關注
關注
0文章
127瀏覽量
17175
發布評論請先 登錄
相關推薦
評論