一、關于 PRBS13、QPRBS13、PRBS13Q 和 QPRBS13-CEI 的定義。
1. PRBS13 的表達式為 x13 + x12 + x2 + x + 1。
2. 在 AR72117 中對 QPRBS13、PRBS13Q 和 QPRBS13-CEI 有以下定義:
PRBS13Q 按照 IEEE 802.3bs-2017 120.5.11.2.1 被定義為重復兩次以格雷編碼的 PRBS13
QPRBS13-CEI 與 PRBS13Q 相同
QPRBS13 是 PRBS13 和反轉的 PRBS13 組合
目前對于 Vivado 2023.1 版本的 IBERT GUI 界面暫時不支持 QPRBS13 的設置,需要通過 tcl 或者端口設置的方法來實現。
Tips:不建議同時用 IBERT GUI 和 Properties 窗口設置 GTM 的 Attributes,可能會導致寄存器值出錯。
3. PRBS13、QPRBS13、PRBS13Q 解析。
首先,根據 PRBS13 的表達式來構建一個數列表格, PRBS13 每 8191 個 bit 循環一次,此處選取前 64 位數據展示并且與仿真波形作對比:
PRBS13 仿真波形 (TXQPRBSEN = 0, TX_GRAY_BYP_EN = 1)
注意:按照 AM017 的描述,當 TX_GRAY_BYP_EN 為 1 時,關閉 GARY 編碼器。當 TX_GRAY_BYP_EN 為 0 時,使能 GARY 編碼器。
PRBS13Q 仿真波形 (TXQPRBSEN = 0, TX_GRAY_BYP_EN = 0)
QPRBS13 仿真波形 (TXQPRBSEN = 1, TX_GRAY_BYP_EN = 1)
當前輸入為反轉后的 PRBS13(連續12位“1”),因此按照 PRBS13 表達式產生的 64 位數據如下表所示:
在了解 QPRBS13 的編碼規則后,接下去搭建工程做實際的測試。
二、新建 Versal GTM 工程
對于 Versal GTM,IBERT 工具已經被集成到 GTM 內部。因此需要使用 Versal Transceivers Wizard 新建一個測試工程,本文的測試工程基于 VPK120 評估板設計。
在 Wizard 中主要更改兩個地方的設置:
Transceiver type:設置為 GTM
Preset:選擇 GTM(PAM4) Ethernet 51G
設置完成后打開 IP Example Design:
三、調整硬件設置
此處需要對 Example design 做四個調整:
1. 把 gpio_enable、gt_reset 和 rate_sel 三個信號連接到 VIO 的輸出。
2. 添加 Clocking wizard 模塊,設置 clk_out1 的頻率為 200MHz,并且提供給 gt_bridge 和 gt_quad 的 apb3_clk 作為時鐘。
3. 設置 TX 和 RX 的 Reference Clock 頻率為 156.25MHz。
4. 把 GT Quad 約束到 Quad 202,Reference clock 約束到管腳 V45。
修改完成后點擊 Generate Device Image 生成 PDI 文件,連接 JTAG 并且把 PDI 下載到 VPK120。
四、構建寄存器讀寫函數
控制 GTM 相關寄存器需要按位操作,因此首先需要設計一個能夠按位讀寫的函數,函數內部執行步驟如下:
1. 獲取對象名稱。
本文中的 IBERT 名稱為 IBERT_0,在后面的操作中都以 IBERT_0 作為操作的對象名稱。因為工程中用了 GT Quad202,所以 tcl 命令對于 Quad202 的 ch0 定義為:IBERT_0.Quad_202.CH_0 ,其他通道可參照這個命名類推。
2. 刷新全部寄存器。
這一步操作很重要,如果沒有刷新全部寄存器的步驟,將無法讀取到最新的寄存器數據,可能會讀出來上一次的數據或者全 0 的數據。
3. 數據格式轉換。
刷新寄存器后會發現在 GT Properties 窗口顯示的數據從 0xXXXXXXXX 變為了 0xXXXX_XXXX,然而在 tcl 的按位與和按位或的運算中無法識別下劃線,下劃線會導致數據運算出錯,這一步需要先從相應的寄存器把數據讀取出來,然后將下劃線移除。
這里的 channel 和 reg 是函數的參數,channel 代表 GT 的通道編號,reg 是需要操作的寄存器。
4. 判斷和位運算。
這里的 op 和 value 是函數的參數,op 代表運算操作是按位與還是按位或,value 是具體運算的值。
5. 將系數設回到相應的寄存器 。
6. 操作函數定義。
操作函數有4個傳遞參數 proc change_gtm_attributes { channel reg value op },具體作用在上文已經說明。例如對于下面這個函數,其對應的操作是向 Quad_202.CH_0 的 CH0_FABRIC_INTF_CFG0 寄存器按位與的方式寫入 0xFFFEFFDF,即將 CH0_FABRIC_INTF_CFG0 寄存器的 Bit5 和 Bit16 置為“0”,其余位保持不變。
五、配置 GTM 的相關寄存器產生 QPRBS13 序列
1. 打開 Attributes 控制使能,關閉端口控制。
2. 設置 TX PRBS 的 Pattern。
3. 設置 RX PRBS 的 Pattern。
4. 打開 TXQPRBS 使能。
5. 打開 RXQPRBS 使能。
6. 關閉 TX Gray Encoder 使能。
7. 關閉 TX Gray Decoder 使能。
8. 設置 LOOPBACK 為 Near end PCS。
六、實際運行結果
1. 將 PDI 文件下載到器件中,并且運行 tcl 命令,先不使能 QPRBS,設置為常規 PRBS13 輸出。
可以看到 NEAR-END PCS 回環已經建立,并且 RXPRBSLOCKED 也已經拉高。
2. 運行 TCL 命令,打開 TXQPRBS 使能,對于 RX 繼續輸出常規 PRBS,此時 Link status 顯示為 No Link 和實際速率之間翻轉,且 RXPRBSLOCKED 輸出狀態也呈現為周期性翻轉。
3. 再次運行 TCL 命令,打開 RXQPRBS 使能,此時的 Link status 再次恢復顯示為實際速率,RXPRBSLOCKED 輸出也再次呈現為高電平。
4. Versal GTM 除了不支持 QPRBS-7,其他的 Pattern 都是支持的。
5. 這個方法也可以用于產生其他 QPRBS Pattern。
審核編輯:湯梓紅
-
amd
+關注
關注
25文章
5475瀏覽量
134282 -
仿真
+關注
關注
50文章
4099瀏覽量
133720 -
命令
+關注
關注
5文章
688瀏覽量
22055 -
GUI
+關注
關注
3文章
662瀏覽量
39759 -
Versal
+關注
關注
1文章
159瀏覽量
7676
原文標題:開發者分享|Versal GTM 如何用 Tcl 命令在 IBERT 生成 QPRBS13 序列
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論