0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RapidIO核的仿真以及包時序的分析

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-12-19 10:33 ? 次閱讀

一、軟件平臺與硬件平臺

軟件平臺:

操作系統(tǒng):Windows 8.1 64-bit

開發(fā)套件:Vivado2015.4.2

硬件平臺:

評估板:ZYNQ-7 ZC706 Evaluation Board

二、介紹

上篇文章的最后一小節(jié)已經(jīng)對例子工程進行仿真并通過命令 log_wave –r /* 記錄了所有信號的波形,這篇文章主要介紹RapidIO核的仿真以及包時序的分析。

調(diào)試SRIO核時必須對包在不同接口的傳輸過程有一個清晰的了解,能夠識別出不同接口上包的類型并正確的解析出包的內(nèi)容。

本文詳細(xì)的介紹了SRIO包(控制符號與數(shù)據(jù)字符)在不同接口上的組成與傳輸過程,并深入到邏輯層、傳輸層以及物理層來觀察RapidIO串行物理層包的傳輸細(xì)節(jié)。整個包與信號分析的過程完全基于RapidIO提供的例子工程,例子工程的產(chǎn)生與源代碼的分析已經(jīng)在上一篇文章《Xilinx RapidIO核例子工程源碼分析》(鏈接:https://www.cnblogs.com/liujinggang/p/10091216.html)提到過,這里不再贅述。最后,本文會利用RapidIO核做一個回環(huán)測試(Loopback Test)的工程在ZC706上運行,由于RapidIO是一個付費的IP核,所以生成bit文件需要License,沒有License的可以在官網(wǎng)(https://www.xilinx.com/products/intellectual-property/ef-di-srio-gen2.html#overview)申請一個30天的評估版License試用,評估版的License生成的bit文件運行一段時間以后會自動失效,要想永久使用必須購買官方的License。

三、例子工程結(jié)構(gòu)

下圖整個例子工程的結(jié)構(gòu)層次

6aeb0020-7f43-11ed-8abf-dac502259ad0.jpg

它由一個仿真頂層的testbench和兩個SRIO核頂層組成。其中頂層的testbench文件srio_sim.v連接了兩個srio例子設(shè)計頂層,其中一個例子設(shè)計頂層叫做srio_example_top_primary,它代表請求方的RapidIO設(shè)備;另一個例子設(shè)計頂層叫做srio_example_top_mirror,它代表響應(yīng)方的RapidIO設(shè)備。

SRIO例子工程頂層文件srio_example_top.v例化了SRIO核的所有組件以及需要在硬件上執(zhí)行的必要模塊。這些模塊包括:

1、時鐘域復(fù)位模塊(srio_clk.v和srio_rst.v)

2、配置結(jié)構(gòu)(cfg_fabric.v)

3、請求事務(wù)與響應(yīng)事務(wù)生成模塊(srio_resquest_gen.v和srio_response_gen.v)

4、維護事務(wù)生成模塊(srio_quick_start.v)

頂層模塊srio_example_top中例化了srio_quick_start模塊,它與SRIO的維護端口相連,用來生成維護事務(wù)(Maintenance Transactions)。這個模塊用來向本地(Local)或遠(yuǎn)程(Remote)的配置寄存器空間發(fā)送一組固定的指令集,用戶可以編輯maintenance_list.v來添加、修改或移除維護事務(wù)。

srio_request_gen在頂層模塊srio_example_top進行例化,它用來產(chǎn)生I/O事務(wù)或消息(MESSAGE)事務(wù),但僅僅SRIO核支持的事務(wù)類型能被產(chǎn)生,這個模塊也存儲了期望的響應(yīng)事務(wù)并與實際接收到的響應(yīng)事務(wù)進行對比用來確定整個事務(wù)交互過程的正確性。

srio_response_gen也在頂層模塊srio_example_top進行例化,它用來產(chǎn)生請求事務(wù)對應(yīng)的響應(yīng)事務(wù)。

整個例子工程結(jié)構(gòu)層次的軟件框架如下圖所示,其中左邊的srio_example_top模塊表示請求方的RapidIO設(shè)備,而右邊的DUT Mirror表示響應(yīng)方的RapidIO設(shè)備,它們的內(nèi)部結(jié)構(gòu)完全相同,區(qū)別僅僅在于一個作為請求方而另一個為響應(yīng)方。

6b073cea-7f43-11ed-8abf-dac502259ad0.jpg

SRIO核的原理框圖以及接口如下圖所示

6b67b160-7f43-11ed-8abf-dac502259ad0.jpg

為了方便說明,上圖每一個接口都用相應(yīng)的數(shù)字標(biāo)注出來。它們分別為

Initiator/Target IO Port(接口1)

例子工程中SRIO核全部為默認(rèn)參數(shù),所以端口類型默認(rèn)被配置為Initiator/Target,在Initiator/Target接口類型中請求事務(wù)與響應(yīng)事務(wù)在不同的AXI4-Stream通道上進行傳輸。SRIO核的端口類型也能被配置為Condensed I/O類型,在Condensed I/O接口類型中請求事務(wù)與響應(yīng)事務(wù)在同一AXI4-Stream通道上進行傳輸,所以Condensed I/O相比于Initiator/Target類型來說接口更加精簡。本文仍然采用默認(rèn)的Initiator/Target接口類型來分析每個包的傳輸過程。

接口1的數(shù)據(jù)傳輸協(xié)議為AXI4-Stream協(xié)議,它的接口定義如下:

s_axis_ireq_* 表示Initiator請求事務(wù)的傳輸通道(i = initiator ,req = request)

m_axis_iresp_* 表示Initiator響應(yīng)事務(wù)的傳輸通道(i = initiator ,resp = response)

m_axis_treq_* 表示Target請求事務(wù)的傳輸通道(t = target ,req = request)

s_axis_iresp_* 表示Target響應(yīng)事務(wù)的傳輸通道(t = target , resp = response)

Maintenance Port(接口2)

接口2的數(shù)據(jù)傳輸協(xié)議為AXI4-Lite協(xié)議,用來傳輸維護事務(wù)。它的接口定義如下:

s_axi_maintr_* 表示維護事務(wù)的傳輸端口(maintr = maintenance)

LOG Configuration Fabric(接口3)

接口3的數(shù)據(jù)傳輸協(xié)議為AXI4-Lite協(xié)議,它是邏輯層的配置結(jié)構(gòu)端口,包括本地(Local)配置端口和遠(yuǎn)程(Remote)配置端口。它的接口定義如下:

s_axi_cfgl_* 表示本地配置端口(cfg = configuration,l = local)

m_axi_cfgr_* 表示遠(yuǎn)程配置端口(cfg = configuration,r = remote)

LOG Transport Interface(接口4)

接口4的數(shù)據(jù)傳輸協(xié)議為AXI4-Stream協(xié)議,它是邏輯層與Buffer的數(shù)據(jù)傳輸接口,包括發(fā)送和接收兩個通道。它的接口定義如下:

m_axis_buft_* 表示發(fā)送端口(buf = buffer,t = transmit)

s_axis_ bufr_* 表示接收端口(buf = buffer,r = receive)

BUF Link Interface(接口5)

接口5的數(shù)據(jù)傳輸協(xié)議為AXI4-Stream協(xié)議,它是Buffer層與物理層的數(shù)據(jù)傳輸接口,包括發(fā)送和接收兩個通道。它的接口定義如下:

m_axis_phyt_* 表示發(fā)送端口(phy= physical,t = transmit)

s_axis_ phyr_* 表示接收端口(phy = physical,r = receive)

BUF Configuration Fabric(接口6)

接口6的數(shù)據(jù)傳輸協(xié)議為AXI4-Lite協(xié)議,它是Buffer層的配置端口。它的接口定義如下:

s_axi_bcfg_* 表示Buffer層配置端口(b = buffer,cfg = configuration)

PHY Serial Interface(接口7)

接口7為物理層串行鏈路接口,它是物理層數(shù)據(jù)與串行收發(fā)器(Serial Transceivers)數(shù)據(jù)交換通道,它的接口定義如下所示:

信號

方向

功能

gttx_data[32*LW-1 : 0]

Output

發(fā)送給串行收發(fā)器(Serial Transceivers)的數(shù)據(jù)

gttx_charisk[4*LW-1 : 0]

Output

gttx_data信號中有效字節(jié)指示信號。當(dāng)這個信號某一位為0時,gttx_data中對應(yīng)的字節(jié)為包的有效字節(jié)。

gttx_inhibit[LW-1:0]

Output

串行收發(fā)器的通道使能位。如果最低位(bit-0)為1,表示發(fā)送通道0(Lane0)不使能,其余依次類推

gtrx_data[32*LW-1:0]

Input

從串行收發(fā)器(Serial Transceivers)接收的數(shù)據(jù)

gtrx_charisk[4*LW-1:0]

Input

gtrx_data信號中有效字節(jié)指示信號。當(dāng)這個信號某一位為0時,gttx_data中對應(yīng)的字節(jié)為包的有效字節(jié)。

gtrx_chariscomma[4*LW-1:0]

Input

gtrx_data信號中comma指示信號。如果最低位(bit-0)為1,表示gtrx_data[7:0]是包含comma的字符,其余依次類推

gtrx_disperr[4*LW-1:0]

Input

gtrx_data信號中不一致錯誤(Disparity Error)指示信號。如果最低位(bit-0)為1,表示gtrx_data[7:0]中存在不一致錯誤,其余依次類推

gtrx_notintable[4*LW-1:0]

Input

gtrx_data信號中not-in-table錯誤指示信號。Table指的是8b/10b編碼解碼表。如果最低位(bit-0)為1,表示gtrx_data[7:0]中8b/10b解碼錯誤,其余依次類推

gtrx_chanbondseq[LW-1:0]

Input

串行收發(fā)器每個鏈路的通道綁定序列(Channel Bonding Sequence)指示信號,如果最低位(bit-0)為1,表示鏈路0(Lane0)收到了一串通道綁定序列,其余依次類推

gtrx_chanisaligned[LW-1:0]

Input

串行收發(fā)器每個鏈路的通道對齊(Channel Alignment)指示信號,如果最低位(bit-0)為1,表示鏈路0(Lane0)已經(jīng)實現(xiàn)了通道對齊,其余依次類推

gtrx_chanbonden

Output

串行收發(fā)器通道綁定使能信號

gtrx_reset_req

Input

串行請求復(fù)位信號。例如,由于串行收發(fā)器接收通路彈性FIFO的上溢(overflow)或下溢(underflow),

gtrx_reset

Output

串行收發(fā)器的復(fù)位信號

gtrx_reset_done[LW-1:0]

Input

串行收發(fā)器每個鏈路的復(fù)位完成指示信號,如果最低位(bit-0)為1,表示鏈路0(Lane0)已經(jīng)復(fù)位完成,其余依次類推

PHY Configuration Fabric(接口8)

接口8的數(shù)據(jù)傳輸協(xié)議為AXI4-Lite協(xié)議,它是物理層(Physical)的配置端口。它的接口定義如下:

s_axi_cfgp_* 表示物理層配置端口(cfg = configuration,p = physical)

Transceiver Interface(接口9)

接口9為串行收發(fā)器高速數(shù)據(jù)傳輸接口,每條串行數(shù)據(jù)傳輸線均為一對差分信號。它的接口定義如下:

srio_rxpN ,srio_rxnN:N為通道號,接收鏈路差分對,N的值為1、2或4。

srio_txpN ,srio_txnN:N為通道號,發(fā)送鏈路差分對,N的值為1、2或4。

四、SRIO核包時序分析

上篇文章《Xilinx RapidIO核例子工程源碼分析》(鏈接:https://www.cnblogs.com/liujinggang/p/10091216.html)的最后一小節(jié)已經(jīng)詳細(xì)介紹了仿真的全部流程以及利用log_wave –r /*命令記錄所有信號波形的方法,這里不再贅述。這一節(jié)默認(rèn)大家已經(jīng)仿真完畢(仿真結(jié)束大約需要20min左右時間,仿真完畢記得保存波形),并得到了仿真的波形,下面就對其中重要的波形進行分析。

在分析之前,在重新回顧一下RapidIO串行物理層的包與控制符號的格式

串行物理層的包:

6b85922a-7f43-11ed-8abf-dac502259ad0.jpg

控制符號:

6baa1b90-7f43-11ed-8abf-dac502259ad0.jpg

4.1 鏈路初始化與控制符號

調(diào)試SRIO的第一步是去檢測SRIO頂層模塊(srio_example_top_primary)中的各個關(guān)鍵的控制信號是否正確切換。這些信號包括:復(fù)位信號、時鐘鎖定信號(clk_lock)、端口初始化信號(port_initialized)、鏈路初始化信號(link_initialized),端口錯誤信號(port_error),mode_1x信號(在2x和4x模式下,這個信號為高表示SRIO核已經(jīng)被訓(xùn)練為1x模式,在1x模式下,這個信號一直為高,當(dāng)port_initialized為高時,這個信號才有效)與端口解碼錯誤信號(port_decode_error)等(除了這幾個信號以外,其他信號也可以觀察一下)。

Step1、把srio_example_top_primary中的所有信號全部選中,然后直接拖到右邊的波形窗口

6bd561c4-7f43-11ed-8abf-dac502259ad0.jpg

Step2、找到上面提到的幾個關(guān)鍵控制信號,觀察它們的波形

6c04cb62-7f43-11ed-8abf-dac502259ad0.jpg

由上圖可以看出,控制信號的波形均切換正確,其中最關(guān)鍵的兩個信號是port_initialized信號與link_initialized信號,當(dāng)它們?yōu)楦邥r,分別表示端口和鏈路被成功初始化。

下圖是時鐘信號和復(fù)位信號的時序細(xì)節(jié),顯然,時鐘信號與復(fù)位信號的時序均正確。

6c21a890-7f43-11ed-8abf-dac502259ad0.jpg

Step3、pg007_srio_gen2.pdf第119頁提到,當(dāng)7個連續(xù)的error free控制符號被接收,并且15個連續(xù)的符號被發(fā)送的時候,link_initialized信號才被拉高,所以接下來看看link_initialized信號拉高之前物理層是否接收了7個控制符號并發(fā)送了15個控制符號。

首先選中最左邊的srio_gen2_0_block_inst,然后把中間列出的以gt開頭的接口7的所有信號拖到最右邊的波形窗口中,如下圖所示

6c410082-7f43-11ed-8abf-dac502259ad0.jpg

在link_initialized拉高之前,觀察gttx_data,gttx_charisk與gtrx_data,gtrx_charisk總線上的數(shù)據(jù),建議把gttx_charisk與gtrx_charisk用二進制顯示,當(dāng)gttx_charisk與gtrx_charisk對應(yīng)的位為0時,表明gttx_data與gtrx_data上的數(shù)據(jù)為有效數(shù)據(jù)(控制符號與包屬于有效數(shù)據(jù))。當(dāng)gttx_charisk與gtrx_charisk對應(yīng)的位為1時,gttx_data與gtrx_data上的數(shù)據(jù)為空閑序列。如下圖所示,當(dāng)link_initialized拉高之前gttx_data上發(fā)送了15個連續(xù)的控制符號,gtrx_data上接收了7個連續(xù)的控制符號。

6c77c6c6-7f43-11ed-8abf-dac502259ad0.jpg

下面把控制符號波形放大觀察控制符號各個字段的細(xì)節(jié),發(fā)送與接收總線上的控制符號分別如下圖所示(gttx_charisk與gtrx_charisk對應(yīng)的位為0時, gttx_data與gtrx_data上的數(shù)據(jù)為控制符號)

6c99e3fa-7f43-11ed-8abf-dac502259ad0.png

上圖表明在link_initialized拉高之前,發(fā)送與接收的控制符號為80f713,控制符號80f713前面的1c是/K28.0/,表示控制符號的起始位置。由于SRIO核默認(rèn)使用的是短控制符號,所以這里控制符號為24-bit。

把80f713轉(zhuǎn)化為二進制:80f713 = 1000_0000_1111_0111_0001_0011,各個字段的對應(yīng)關(guān)系如下圖所示

6cbe4538-7f43-11ed-8abf-dac502259ad0.jpg

當(dāng)gttx_charisk與gtrx_charisk對應(yīng)的位為1時,gttx_data與gtrx_data上的數(shù)據(jù)為/K/,/R/,/A/組成的空閑隨機序列(前面幾篇文章解釋過這個知識點),它們分別為特殊字符/K28.5/,/K29.7/,/K27.7/,轉(zhuǎn)化為16進制為bc,fd,fb,下圖是它們的波形

6ce07716-7f43-11ed-8abf-dac502259ad0.png

整個初始化的過程著重需要關(guān)注的兩個信號就是port_initialized和link_initialized,如果初始化失?。╬ort_initialized和link_initialized沒有被拉高),那么首先必須檢查gttx_data與gtrx_data上是否收到了空閑序列/K28.5/,/K29.7/,/K27.7/,同時需要檢查是否存在編解碼錯誤,編解碼錯誤的判斷標(biāo)志是gtrx_notintable信號,當(dāng)它為1時表明存在編解碼錯誤。

4.2 SWRITE事務(wù)

上篇文章已經(jīng)分析過,例子工程會把instruction_list.vh中定義的事務(wù)按順序依次發(fā)出去。其中最先發(fā)送的是37個SWRITE事務(wù),然后是19個NWRITE_R事務(wù)、 19個NWRITE事務(wù)、26個NREAD事務(wù),2個DOORBELL事務(wù),最后是17個MESSAGE事務(wù)。其中第一個發(fā)送的事務(wù)是instruction_list.vh中第50行定義的SWRITE事務(wù)。如下圖所示

6cfc2e5c-7f43-11ed-8abf-dac502259ad0.png

下面以上圖第50行的SWRITE事務(wù)為例來說明整個SWRITE事務(wù)的傳輸過程。這個事務(wù)表示的是利用SWRITE事務(wù)往地址36’hCD0000600發(fā)送16個字節(jié)的數(shù)據(jù)。

Step1、選中srio_example_top_primary,把中間列出的所有信號全部拖到波形窗口中(拖到波形窗口前可以把之前波形窗口中的信號全部刪掉)

6d1c3efe-7f43-11ed-8abf-dac502259ad0.jpg

Step2、找到請求事務(wù)的傳輸通道ireq,并抓出事務(wù)的波形如下圖所示

6d4713b8-7f43-11ed-8abf-dac502259ad0.png

由于僅當(dāng)tvalid和tready同時為高時,tdata上的數(shù)據(jù)才為有效數(shù)據(jù),所以這個SWRITE一共消耗了三個有效時鐘周期,其中第一個時鐘周期發(fā)送的是HELLO包頭,后面兩個時鐘周期分別發(fā)送8個字節(jié)的數(shù)據(jù)(第一個時鐘發(fā)送的數(shù)據(jù)是0000000000000000,第二個時鐘發(fā)送的數(shù)據(jù)是0101010101010101),一共16個字節(jié)的數(shù)據(jù),和instruction_list.vh中第50行定義完全一致,整個時序也與HELLO格式的時序完全吻合。

Step3、對照HELLO格式解析包頭。包頭為006020fcd0000600,轉(zhuǎn)化為二進制后與HELLO格式各個字段對應(yīng)關(guān)系如下所示:

6d6b40c6-7f43-11ed-8abf-dac502259ad0.jpg

由上圖可知FTYPE字段的值為6,表明確實是一個SWRITE事務(wù)

Step4、SWRITE事務(wù)通道ireq通道(接口1)傳輸給SRIO核以后進入SRIO的邏輯層,邏輯層會給包添加傳輸層的信息發(fā)送給Buffer(接口3),然后Buffer會把數(shù)據(jù)發(fā)送給物理層(接口5)。

選中srio_gen2_0_block_inst,把中間的buft_*通道、phyt_*通道與gttx_*通道的信號拖到右邊的波形窗口中,如下圖所示

6d9705e4-7f43-11ed-8abf-dac502259ad0.jpg

整個從邏輯層到傳輸層到物理層到吉比特收發(fā)器(Gigabit Transceiver)的波形如下圖所示,波形的細(xì)節(jié)這里不再展開,大家可以自己抓出來觀察。

6de45a1a-7f43-11ed-8abf-dac502259ad0.jpg

Step5、ireq通道的SWRITE請求事務(wù)經(jīng)過邏輯層,傳輸層和物理層到達吉比特收發(fā)器(Gigabit Transceiver),吉比特收發(fā)器的數(shù)據(jù)通道gttx_data[31:0](接口7)波形如下圖所示

6e13ccf0-7f43-11ed-8abf-dac502259ad0.jpg

由上圖可知,整個串行物理層的包為:7c96f004_b04600ad_d0000600_00000000_00000000_01010101_01010101_e8d30000_7c96f203。(00000000和01010101的寬度為兩個有效時鐘)這個包的含義如下:

7c96f004中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),96f004轉(zhuǎn)化為二進制為:

96f004 = 1001_0110_1111_0000_0000_0100

它是一個包起始控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

6e2f6654-7f43-11ed-8abf-dac502259ad0.jpg

b04600ad_d0000600_00000000_00000000_01010101_01010101_e8d30000是SWRITE事務(wù)串行物理層的包,把它轉(zhuǎn)化為二進制后各個字段的對應(yīng)關(guān)系如下圖所示

6e6d6738-7f43-11ed-8abf-dac502259ad0.jpg

上圖中data字段是傳輸?shù)?0000000_00000000_01010101_01010101這16個字節(jié)數(shù)據(jù)的二進制碼,因為它的二進制碼太長了所以我直接用data替代。由于本次傳輸?shù)淖止?jié)小于80個字節(jié),所以SWRITE事務(wù)的最后面的三個字段不存在,大家可以抓一下數(shù)據(jù)量為256個字節(jié)的SWRITE包,當(dāng)數(shù)據(jù)量大于了80字節(jié),后面的三個字段也會有數(shù)據(jù)。

包最后面的7c96f203中7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),96f203轉(zhuǎn)化為二進制為:

96f203= 1001_0110_1111_0010_0000_0011

它是一個包結(jié)束控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

6e99ffbe-7f43-11ed-8abf-dac502259ad0.jpg

至此,SWRITE事務(wù)全部分析完畢。

4.3 NWRITE_R事務(wù)

本小節(jié)以instruction_list.vh中第72行定義的NWRITE_R事務(wù)為例來說明整個NWRITE_R事務(wù)的傳輸過程。如下圖所示,這個事務(wù)表示的是利用NWRITE_R事務(wù)往地址36’ h004550002發(fā)送6(size+1)個字節(jié)的數(shù)據(jù)。

6ec9447c-7f43-11ed-8abf-dac502259ad0.jpg

Step1、為了方便快速的找到上圖的NWRITE_R事務(wù),建議選中srio_request_gen模塊,并把request_address變量拖到波形窗口中,并把這個變量用Unsigned Decimal(無符號10進制)格式顯示??催^上篇《Xilinx RapidIO核例子工程源碼分析》文章的應(yīng)該知道這個變量是instruction的索引值,當(dāng)這個變量為37的時候就表示37(0~36)個SWRITE事務(wù)全部發(fā)送完畢,下個事務(wù)就是instruction_list.vh中第72行定義的NWRITE_R事務(wù)。

6ef68c2a-7f43-11ed-8abf-dac502259ad0.jpg

Step2、鎖定request_address為37的位置,找到請求事務(wù)的傳輸通道ireq,并觀察事務(wù)的波形如下圖所示

6f2020f8-7f43-11ed-8abf-dac502259ad0.png

由上圖可知第一個有效時鐘傳輸?shù)腍ELLO格式包頭數(shù)據(jù)為:2555205004550002。發(fā)送的數(shù)據(jù)是afafafafafafafaf。包頭與HELLO包格式的對應(yīng)關(guān)系如下圖所示

6f45218c-7f43-11ed-8abf-dac502259ad0.jpg

由上圖可知FTYPE = 5,TTYPE = 5,這兩個字段唯一的確定了這是一個NWRITE_R事務(wù)。

Step3、ireq通道的NWRITE_R請求事務(wù)經(jīng)過邏輯層,傳輸層和物理層到達吉比特收發(fā)器(Gigabit Transceiver),吉比特收發(fā)器的數(shù)據(jù)通道gttx_data[31:0](接口7)波形如下圖所示

6f70fd8e-7f43-11ed-8abf-dac502259ad0.jpg

由上圖可知,整個串行物理層的包為:7c98f009_d84500ad_59250455_0000afaf_afafafaf_afafad15_7c17f21e。這個包的含義如下:

7c98f009中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),98f009轉(zhuǎn)化為二進制為:

98f009= 1001_1000_1111_0000_0000_1001

它是一個包起始控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

6f8cc2e4-7f43-11ed-8abf-dac502259ad0.jpg

d84500ad_59250455_0000afaf_afafafaf_afafad15是NWRITE_R事務(wù)串行物理層的包,把它轉(zhuǎn)化為二進制后各個字段的對應(yīng)關(guān)系如下圖所示

6fb6d444-7f43-11ed-8abf-dac502259ad0.jpg

上圖中data字段是傳輸?shù)腶fafafaf_afafafaf這16個字節(jié)數(shù)據(jù)的二進制碼,因為它的二進制碼太長了所以我直接用data替代。由于本次傳輸?shù)目傋止?jié)數(shù)為8字節(jié)的整數(shù)倍,所以NWRITE_R事務(wù)的后面可選的logical 0 pad(opt)沒有數(shù)據(jù)。

細(xì)心的人在這里可能發(fā)現(xiàn)了一個奇怪的現(xiàn)象:在HELLO格式中,address字段為36’ h004550002,其中高兩位為保留位,所以address一共只有34-bit有效位,size字段為5,表示往36’ h004550002地址中寫6(size+1)個字節(jié)的數(shù)據(jù)。但是上面串行物理層的包中address字段的值為0000_0100_0101_0101_0000_0000_0000_0,發(fā)送的數(shù)據(jù)個數(shù)為8個字節(jié)(afafafaf_afafafaf)。出現(xiàn)這種現(xiàn)象的原因為:

HELLO格式address字段指向的存儲空間的最小單元是1個字節(jié),而串行物理層中的address字段指向的存儲空間最小單元實際上是8個字節(jié),address后面的xambsb字段是串行物理層的最高兩位地址擴展字段,所以串行物理層的包可訪問的存儲空間大小為2^34=16G,這也是HELLO格式中address字段位寬為34-bit的原因(關(guān)于這部分的內(nèi)容我在《RapidIO協(xié)議概述》也提到過)。正因為HELLO格式address字段與串行物理層address字段所指向的存儲空間最小單元不同,所以pg007_srio_gen2.pdf中第78頁才給出了一個HELLO格式size,addr與有效字節(jié)的對應(yīng)關(guān)系表,如下所示

6fdd0c72-7f43-11ed-8abf-dac502259ad0.png

本例中size=5,addr[2:0] = 2,對應(yīng)于上圖中紅框圈出來的情況。所以往36’ h004550002地址中寫6(size+1)個字節(jié)的數(shù)據(jù)對串行物理層來說就是往36’ h004550000地址中寫8個字節(jié)的數(shù)據(jù),高6個字節(jié)(上圖中灰色區(qū)域)為有效數(shù)據(jù)。

包最后面的7c17f21e中7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),17f21e轉(zhuǎn)化為二進制為:

17f21e = 0001_0111_1111_0010_0001_1110

它是一個包結(jié)束控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

70048568-7f43-11ed-8abf-dac502259ad0.jpg

Step4、例子工程中例化了srio_example_top_primary與srio_example_top_mirror兩個實體,srio_example_top_primary實體的srio_txp0和srio_txn0連接到srio_example_top_mirror實體的srio_rxp0和srio_rxn0。因此,srio_example_top_mirror的gtrx_data上的數(shù)據(jù)應(yīng)該和上一步分析的srio_example_top_primary實體的gttx_data完全相同。

選中srio_example_top_mirror的srio_gen2_0_block_inst,把gtrx_data與gtrx_charisk兩個信號拖到右邊的窗口中,如下圖所示

703c73a6-7f43-11ed-8abf-dac502259ad0.jpg

觀察srio_example_top_primary的gttx_data與srio_example_top_mirror的gtrx_data,如下圖所示,可以看到兩者完全相同,僅僅存在一個延時。

705c838a-7f43-11ed-8abf-dac502259ad0.png

Step5、srio_example_top_mirror模塊的grrx_data接收到數(shù)據(jù)以后,將會把grrx_data的數(shù)據(jù)按照與發(fā)送過程完全相反的操作傳到邏輯層,最終邏輯層的數(shù)據(jù)將會通過srio_example_top_mirror模塊的treq接口輸出。

選中srio_example_top_mirror,把treq通道的所有信號拖到右邊的波形窗口中

7083b2c0-7f43-11ed-8abf-dac502259ad0.jpg

下圖是srio_example_top_mirror模塊treq通道的波形

70a132c8-7f43-11ed-8abf-dac502259ad0.png

可知treq通道的包頭數(shù)據(jù)為2555205004550002,與srio_example_top_primary模塊ireq通道發(fā)送的包頭數(shù)據(jù)完全一樣。這也證明整個鏈路工作正常。

4.4 NWRITE_R的響應(yīng)事務(wù)

由于NWRITE_R事務(wù)是一個有響應(yīng)的寫事務(wù),所以當(dāng)發(fā)起方(Initiator)往目標(biāo)方(Target)發(fā)送一個NWRITE_R事務(wù)以后,發(fā)起方(Initiator)還要接收目標(biāo)方(Target)的發(fā)回響應(yīng)事務(wù)。響應(yīng)包的數(shù)據(jù)會出現(xiàn)在srio_example_top_primary模塊的tresp通道,下圖是srio_example_top_primary模塊的tresp通道的時序圖

70c5b210-7f43-11ed-8abf-dac502259ad0.png

由上圖可知iresp_tdata的數(shù)據(jù)為:25d0400000000000。與HELLO包格式的對應(yīng)關(guān)系如下圖所示

70e062b8-7f43-11ed-8abf-dac502259ad0.jpg

由上圖可知FTYPE = 13,所以這是一個響應(yīng)事務(wù),prio字段變成了2,而NWRITE_R字段的prio字段為1,這是因為響應(yīng)事務(wù)的prio為請求事務(wù)的prio+1,(這個知識點前兩篇文章都提到過)

事實上,響應(yīng)事務(wù)的一整套傳輸流程為:目標(biāo)方(Target)發(fā)回的響應(yīng)事務(wù)被srio_example_top_primary模塊的串行差分信號線接收到達Serial Transceivers,Serial Transceivers在把接收的數(shù)據(jù)通過gtrx_data通道(接口7)傳到物理層,物理層把接收的包經(jīng)過處理以后通過phyr_*通道(接口5)把數(shù)據(jù)發(fā)給Buffer層,Buffer層對數(shù)據(jù)進行二次處理以后把數(shù)據(jù)通過bufr_*通道(接口4)傳給邏輯層,邏輯層再把數(shù)據(jù)傳輸給I/O端口(接口1),這樣就得到了上圖HELLO格式的響應(yīng)包。大家可以把gtrx_data、phyr_*通道、bufr_*通道和I/O端口的波形全部抓出來觀察一下,方法和上節(jié)介紹發(fā)送流程的抓取過程完全一樣。這里我只抓一下gtrx_data通道的數(shù)據(jù),并分析響應(yīng)事務(wù)串行物理層包格式各個字段的含義。

gtrx_data通道的數(shù)據(jù)如下圖所示

71010612-7f43-11ed-8abf-dac502259ad0.png

由上圖可知,整個響應(yīng)事務(wù)串行物理層的包為:7c83f00f_388dadad_00255540_7c83f208

7c83f00f中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),83f00f轉(zhuǎn)化為二進制為:

83f00f = 1000_0011_1111_0000_0000_1111

它是一個包起始控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

71208bc2-7f43-11ed-8abf-dac502259ad0.jpg

388dadad_00255540是NWRITE_R響應(yīng)事務(wù)串行物理層的包,把它轉(zhuǎn)化為二進制后各個字段的對應(yīng)關(guān)系如下圖所示

7168597a-7f43-11ed-8abf-dac502259ad0.jpg

由于NWRITE_R的響應(yīng)事務(wù)不帶數(shù)據(jù),所以沒有data字段。target TID字段的值為16進制的25,也就是10進制的37,與發(fā)送的NWRITE_R請求事務(wù)target TID值完全相同。FTPYE字段的值為13,說明這是一個響應(yīng)事務(wù),整個響應(yīng)事務(wù)的包正是NWRITE_R事務(wù)的響應(yīng)包。

7c83f208中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),83f208轉(zhuǎn)化為二進制為:

83f208= 1000_0011_1111_0010_0000_1000

它是一個包結(jié)束控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

71975248-7f43-11ed-8abf-dac502259ad0.jpg

4.5 NWRITE事務(wù)

本小節(jié)以instruction_list.vh中第94行定義的NWRITE事務(wù)為例來說明整個NWRITE事務(wù)的傳輸過程。如下圖所示,這個事務(wù)表示的是利用NWRITE事務(wù)往地址36’ hDE0000600發(fā)送16(size+1)個字節(jié)的數(shù)據(jù)。

71bf7bf6-7f43-11ed-8abf-dac502259ad0.jpg

Step1、為了方便快速的找到上圖的NWRITE事務(wù),建議選中srio_request_gen模塊,并把request_address變量拖到波形窗口中,并把這個變量用Unsigned Decimal(無符號10進制)格式顯示??催^上篇《Xilinx RapidIO核例子工程源碼分析》文章的應(yīng)該知道這個變量是instruction的索引值,當(dāng)這個變量為56的時候就表示37(0~36)個SWRITE事務(wù)全部發(fā)送完畢,19個NWRITE_R事務(wù)也全部發(fā)送完畢,下個事務(wù)就是instruction_list.vh中第94行定義的NWRITE事務(wù)。鎖定request_address為56的位置,找到請求事務(wù)的傳輸通道ireq,并觀察事務(wù)的波形如下圖所示

71efcd74-7f43-11ed-8abf-dac502259ad0.png

由上圖可知第一個有效時鐘傳輸?shù)腍ELLO格式包頭數(shù)據(jù)為:385420fde0000600。后兩個有效時鐘發(fā)送的數(shù)據(jù)分別是c2c2c2c2c2c2c2c2和c3c3c3c3c3c3c3c3。包頭與HELLO包格式的對應(yīng)關(guān)系如下圖所示

72091c34-7f43-11ed-8abf-dac502259ad0.jpg

由上圖可知FTYPE = 5,TTYPE = 4,這兩個字段唯一的確定了這是一個NWRITE_R事務(wù)。srcTID的值為16進制的38,也就是10進制的56,與request_address的值相等,因為代碼里面就是直接把request_address的值賦給了srcTID。

Step2、ireq通道的NWRITE請求事務(wù)經(jīng)過邏輯層,傳輸層和物理層到達吉比特收發(fā)器(Gigabit Transceiver),吉比特收發(fā)器的數(shù)據(jù)通道gttx_data[31:0](接口7)波形如下圖所示

72225492-7f43-11ed-8abf-dac502259ad0.png

由上圖可知,NWRITE串行物理層包的數(shù)據(jù)為:

7c93f010_c84500ad_4b38e000_0605c2c2_c2c2c2c2_c2c2c3c3_c3c3c3c3_c3c362a2_7c13f20e。包的各個字段解釋如下:

7c93f010中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),93f010轉(zhuǎn)化為二進制為:

93f010= 1001_0011_1111_0000_0001_0000

它是一個包起始控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

7237b6fc-7f43-11ed-8abf-dac502259ad0.jpg

c84500ad_4b38e000_0605c2c2_c2c2c2c2_c2c2c3c3_c3c3c3c3_c3c362a2是NWRITE事務(wù)串行物理層的包,把它轉(zhuǎn)化為二進制后各個字段的對應(yīng)關(guān)系如下圖所示

725c857c-7f43-11ed-8abf-dac502259ad0.jpg

細(xì)心的同學(xué)馬上會發(fā)現(xiàn)wrsize字段的值居然為11(2進制1011,16進制b),address字段的值為e000_0600。而instruction_list.vh中第94行定義的size字段的值為15,address字段的值為36’hDE0000600。似乎邏輯層的包到達物理層以后size字段和address兩個字段都出現(xiàn)了錯誤。出現(xiàn)這種現(xiàn)象的原因如下:

前面幾篇文章也多次提到過,address后面的兩個字段wdptr和xamsbs兩個字段是有作用的,xamsbs字段是地址字段的高兩位擴展位。由于HELLO格式address字段的有效位數(shù)是34-bit,所以在當(dāng)address字段的值為36’hDE0000600,有效的address字段的值為34’h 1E0000600,當(dāng)我們把串行物理層xamsbs字段的01拼接在串行物理層address字段前面得到的地址就和先前定義的地址是一致的了。

至于wrsize字段的值為11,這是因為后面的wdptr字段的值變成了1,RapidIO_Rev_2.2_Specification的第35頁表4-4已經(jīng)列出了所有wrsize與wdptr字段的組合,當(dāng)wdptr=1,wrsize=11是,字節(jié)的總個數(shù)是16,這也和我們之前在instruction_list.vh中的定義是一致的。

7279b692-7f43-11ed-8abf-dac502259ad0.png

7c13f201中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),13f201轉(zhuǎn)化為二進制為:

13f201= 0001_0011_1111_0010_0000_0001

它是一個包結(jié)束控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

72a02156-7f43-11ed-8abf-dac502259ad0.jpg

4.6 NREAD事務(wù)

本小節(jié)以instruction_list.vh中第120行定義的NREAD事務(wù)為例來說明整個NREAD事務(wù)的傳輸過程。如下圖所示,這個事務(wù)表示的是利用NREAD事務(wù)往地址36’ h0000023F0發(fā)送8(size+1)個字節(jié)的數(shù)據(jù)。

72c13efe-7f43-11ed-8abf-dac502259ad0.jpg

Step1、為了方便快速的找到上圖的NREAD事務(wù),建議選中srio_request_gen模塊,并把request_address變量拖到波形窗口中,并把這個變量用Unsigned Decimal(無符號10進制)格式顯示??催^上篇《Xilinx RapidIO核例子工程源碼分析》文章的應(yīng)該知道這個變量是instruction的索引值,當(dāng)這個變量為78(37+19+19+3=78)的時候就表示發(fā)送的是上圖第120行的NREAD事務(wù)(之所以不選擇第123行的讀事務(wù)是因為它讀的數(shù)據(jù)量太大了,截圖的時候不方便)。鎖定request_address為78的位置,找到請求事務(wù)的傳輸通道ireq,并觀察事務(wù)的波形如下圖所示

73003e88-7f43-11ed-8abf-dac502259ad0.png

NREAD請求事務(wù)不帶任何數(shù)據(jù),只包含一個HELLO格式的包頭,包頭的數(shù)據(jù)為:4e242070000023f0。各個字段的對應(yīng)關(guān)系如下圖所示

73229ab4-7f43-11ed-8abf-dac502259ad0.jpg

FTYPE=2,TTYPE=4,這兩個字段唯一的確定了這是一個NREAD事務(wù)包。其他字段也與之前在instruction_list.vh中第120行定義的完全相同。

Step2、接下來再看看NREAD事務(wù)串行物理層的包格式,這個包在155610ns的位置,下圖是NREAD事務(wù)串行物理層包格式的時序圖

733b4960-7f43-11ed-8abf-dac502259ad0.png

由上圖可知,整個串行物理層的包為:7c92f014_b84200ad_4b4e0000_23f09c5a_7c92f213。這個包的含義如下:

7c92f014中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),92f014轉(zhuǎn)化為二進制為:

92f014= 1001_0010_1111_0000_0001_0100

它是一個包起始控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

735cb2f8-7f43-11ed-8abf-dac502259ad0.jpg

b84200ad_4b4e0000_23f09c5a是NREAD事務(wù)串行物理層的包,把它轉(zhuǎn)化為二進制后各個字段的對應(yīng)關(guān)系如下圖所示

73995fdc-7f43-11ed-8abf-dac502259ad0.jpg

FTYPE = 2,TTYPE = 4,這兩個值確定了這個包是一個NREAD事務(wù)包。rdsize=11(二進制的1011),wdptr=0,通過查RapidIO_Rev_2.2_Specification第34頁的表可知數(shù)據(jù)量為8個字節(jié),與instruction_list.vh中第120行定義的完全相同。wdptr與rdsize的對應(yīng)關(guān)系表如下所示

7402b4e6-7f43-11ed-8abf-dac502259ad0.jpg

7c92f213中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),92f213轉(zhuǎn)化為二進制為:

92f213= 1001_0010_1111_0010_0001_0011

它是一個包結(jié)束控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

741da242-7f43-11ed-8abf-dac502259ad0.jpg

4.7 NREAD響應(yīng)事務(wù)

由于NREAD事務(wù)是一個有響應(yīng)的事務(wù),且響應(yīng)事務(wù)中攜帶讀到的數(shù)據(jù)。所以當(dāng)發(fā)起方(Initiator)往目標(biāo)方(Target)發(fā)送一個NREAD事務(wù)以后,發(fā)起方(Initiator)還要接收目標(biāo)方(Target)的發(fā)回響應(yīng)事務(wù)。響應(yīng)事務(wù)通過gtrx_data通道接收。響應(yīng)事務(wù)串行物理層包時序如下圖所示,這個響應(yīng)包在157370ns的位置

7452864c-7f43-11ed-8abf-dac502259ad0.png

由上圖可知,00000000這個數(shù)據(jù)傳輸了2個時鐘周期,所以整個響應(yīng)事務(wù)串行物理層的包為:7c8af01e_708dadad_804e0000_00000000_0000469c_7c8af219

7c83f00f中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),83f00f轉(zhuǎn)化為二進制為:

83f00f = 1000_0011_1111_0000_0000_1111

它是一個包起始控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

746b0d84-7f43-11ed-8abf-dac502259ad0.jpg

708dadad_804e0000_00000000_0000469c是NREAD響應(yīng)事務(wù)串行物理層的包,把它轉(zhuǎn)化為二進制后各個字段的對應(yīng)關(guān)系如下圖所示

74927270-7f43-11ed-8abf-dac502259ad0.jpg

FTYPE=13表示這是一個響應(yīng)事務(wù),TTYPE=8表示這個響應(yīng)事務(wù)攜帶數(shù)據(jù),target TID的值為16進制的4e(10進制的78),與請求事務(wù)剛好對應(yīng)上,data字段是8個字節(jié)的00,由于并沒有存儲器,所以讀出來的數(shù)據(jù)全部是0。

7c8af219中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),8af219轉(zhuǎn)化為二進制為:

8af219= 1000_1001_1111_0010_0001_1001

它是一個包結(jié)束控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

74aeaaee-7f43-11ed-8abf-dac502259ad0.jpg

響應(yīng)事務(wù)串行物理層的包經(jīng)過物理層、傳輸層和邏輯層到達iresp通道,iresp通道的時序如下圖所示

74d8656e-7f43-11ed-8abf-dac502259ad0.png

iresp通道一共有兩個有效數(shù)據(jù),分別為HELLO格式包頭4ed8400000000000和0000000000000000。HELLO格式包頭4ed8400000000000各個字段的對應(yīng)關(guān)系如下圖所示

74f03284-7f43-11ed-8abf-dac502259ad0.jpg

FTYPE = 13,TTYPE = 8表示這是一個攜帶數(shù)據(jù)的響應(yīng)事務(wù),響應(yīng)事務(wù)的prio字段的值為請求事務(wù)prio字段的值加1。

4.8 MAINTENANCE事務(wù)

頂層模塊srio_example_top.v中例化的srio_quick_start模塊與SRIO IP核的維護端口相連用來產(chǎn)生維護事務(wù)。維護事務(wù)在maintenance_list.vh頭文件中定義,用戶可以通過編輯maintenance_list.vh頭文件來添加、修改或移除維護事務(wù)。下圖是例子工程中定義的所有維護事務(wù)

751a0276-7f43-11ed-8abf-dac502259ad0.jpg

維護事務(wù)有本地(Local)和遠(yuǎn)程(Remote)兩種類型,區(qū)分這兩種維護事務(wù)是通過maintr_araddr信號的高八位的值來確定的。如下圖所示

758c9408-7f43-11ed-8abf-dac502259ad0.jpg

由上圖可知,maintr_araddr的[31:24]位用來區(qū)分本地維護事務(wù)和遠(yuǎn)程維護事務(wù),

當(dāng) maintr_araddr=01xxxxxx,表示的是遠(yuǎn)程(Remote)維護事務(wù)。

當(dāng) maintr_araddr=00xxxxxx,表示的是本地(Local)維護事務(wù)。

maintr_araddr的[23:0]位是讀操作的偏移地址。

下圖是一個維護事務(wù)的時序圖

75b7bb92-7f43-11ed-8abf-dac502259ad0.png

由上圖可知,紅色框出來的部分是一個讀維護事務(wù),由于maintr_araddr的高8位[31:24]為8’h00,所以這是一個本地(Local)讀維護事務(wù)。maintr_araddr的[23:0]位為24’h000000,所以這個本地(Local)讀維護事務(wù)訪問的是邏輯層的能力寄存器(Capability Register Space)空間,且寄存器的偏移地址為24’h000000。

SRIO核寄存器空間的分布如下圖所示

75d8a8c0-7f43-11ed-8abf-dac502259ad0.jpg

下圖是維護端口(接口2)和邏輯層配置端口(接口3)的時序圖

75fceec4-7f43-11ed-8abf-dac502259ad0.jpg

當(dāng) maintr_araddr=01000000,表示的是邏輯層的遠(yuǎn)程(Remote)維護事務(wù)。邏輯層I/O端口發(fā)起的維護事務(wù)會通過邏輯層、傳輸層到物理層轉(zhuǎn)化為串行物理層的包通過高速串行收發(fā)器(Serial Transceiver)發(fā)出去。下圖是一個遠(yuǎn)程維護事務(wù)串行物理層包的時序,這個包在96680ns的位置

76434b30-7f43-11ed-8abf-dac502259ad0.png

由上圖可知,維護事務(wù)串行物理層的包為:7c82f00b_104800ff_18010000_0060dead_beefdead_beefbe6e_7c82f20c

7c82f00b中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),82f00b轉(zhuǎn)化為二進制為:

82f00b = 1000_0010_1111_0000_0000_1011

它是一個包起始控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

7668c31a-7f43-11ed-8abf-dac502259ad0.jpg

104800ff_18010000_0060dead_beefdead_beefbe6e是維護事務(wù)串行物理層的包,把它轉(zhuǎn)化為二進制后各個字段的對應(yīng)關(guān)系如下圖所示

76826b3a-7f43-11ed-8abf-dac502259ad0.jpg

FTYPE = 8,TTYPE = 1,表明這是一個寫請求的維護事務(wù)。上圖中data字段表示的是dead_beefdead_beef這8個字節(jié)的數(shù)據(jù)。

7c82f20c中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),82f20c轉(zhuǎn)化為二進制為:

82f20c = 1000_0010_1111_0010_0000_1100

它是一個包結(jié)束控制符號,各個字段的對應(yīng)關(guān)系如下圖所示

769c1a4e-7f43-11ed-8abf-dac502259ad0.jpg

4.9 DOORBELL事務(wù)與MESSAGE事務(wù)

門鈴(DOORBELL)事務(wù)與消息(MESSAGE)事務(wù)的分析方法與之前幾種方法完全一樣,大家可以自己按照上面的流程先找到HELLO格式的包,對照HELLO格式各個字段的定義進行分析,然后找到串行物理層的包對照串行物理層的包格式再次分析就能明白整個事務(wù)的交互過程了。其實對于用戶來說,串行物理層是SRIO IP核幫我們設(shè)計好的,所以在實際項目中使用的時候只需要關(guān)注HELLO格式的包與時序就可以了。

五、(選讀)SRIO核在ZC706上回環(huán)(Loopback)測試

通過Vivado仿真以后大家應(yīng)該對使用SRIO核有了一個基本了解。如果你手頭有自己做的開發(fā)板并且有SRIO的License的話你可以利用SRIO在硬件上做一個回環(huán)測試。

所謂SRIO的回環(huán)測試就是把SRIO的srio_txp0和srio_rxp0在硬件上連接起來,把srio_txn0和srio_rxn0在硬件上連接起來,讓SRIO的包自發(fā)自收。如下圖所示

76b698d8-7f43-11ed-8abf-dac502259ad0.jpg

由于我手頭有一塊Xilinx的ZC706評估板,所以這個回環(huán)測試我會在ZC706上完成。

ZC706上的FPGA型號為XC7Z045,它的上面BANK109、BANK110、BANK111和BANK112為MGT BANK,如下圖所示

76dab894-7f43-11ed-8abf-dac502259ad0.jpg

其中BANK112與PCIe接口相連(后面有空會寫PCIe接口),所以RapidIO不能使用這個BANK。BANK109與BANK110與FMC接口相連,無法使用同軸線或光纖環(huán)回,所以這兩個BANK也不能使用。因此RapidIO只剩下BANK111可用,而且BANK111有一個通道已經(jīng)通過C653和C652環(huán)回上了,這樣就省去了自己用光纖或同軸線去環(huán)回。接下來最重要的就是給BANK111輸入一個125MHz的參考時鐘。

這個125MHz的時鐘可以從臨近的BANK“借”一個,比如可以通過軟件配置SI5324產(chǎn)生一個125MHz時鐘,盡管SI5324輸出的時鐘并不在BANK111上,但是這個125MHz仍然可以被BANK111“借”用。但是這種方法需要寫軟件配置SI5324,比較麻煩,所以不推薦。

下面介紹另外一種得到這個125MHz時鐘的方法:由于BANK111上有一路時鐘是連接到SMA接口上的,所以這個125MHz時鐘可以用外部的信號源接入,但是如果你沒有信號源的話也沒事,這個125MHz時鐘可以通過FPGA內(nèi)部的Clocking Wizard產(chǎn)生。

ZC706評估板的結(jié)構(gòu)圖如下圖所示

770b2c5e-7f43-11ed-8abf-dac502259ad0.jpg

可以看到上圖用紅色橢圓圈出來的9號和10號兩個SMA接口對,10號SMA接口就是連接到BANK111上的一個參考時鐘,所以我們只需要用FPGA中的Clocking Wizard IP核用ZC706的200MHz系統(tǒng)時鐘得到125MHz的時鐘輸出到9號SMA接口對,然后用同軸線把9號SMA接口對和10號接口對相連就可以了。由于Clocking Wizard IP核輸出的時鐘是單端時鐘,所以還必須用OBUFDS原語把這個125MHz單端時鐘變成差分時鐘輸出到9號SMA接口對。

有了125MHz的參考時鐘以后,接下來就只需要修改例子工程的頂層srio_example_top_srio_gen2_0代碼,添加9號SMA接口對的引腳定義,修改例子工程的物理約束就可以了。還有一個信號就是srio_example_top_srio_gen2_0頂層代碼中的sim_train_en在硬件上執(zhí)行時必須置0。修改完成以后就可以生成bit文件下載到ZC706上觀察現(xiàn)象了,還可以用ILA抓一下I/O通道的波形,沒有問題的話抓出來的波形和之前仿真的波形是完全一樣的。

六、總結(jié)

整個RapidIO系列博客到此就全部寫完了,最后提供兩個仿真的建議:

1、上文我抓的包傳輸數(shù)據(jù)量都比較少,主要是方便我截圖,傳輸?shù)臄?shù)據(jù)量比較大的時候,整個包的總字節(jié)數(shù)會超過80個字節(jié),在數(shù)據(jù)量超過80字節(jié)的情況下包中會出來兩個循環(huán)冗余校驗碼(CRC碼),這個在《RapidIO串行物理層的包與控制符號》提到過,大家可以自己把包的數(shù)據(jù)量改的大一點觀察一下數(shù)據(jù)量大于80字節(jié)的情況。

2、由于例子工程中測試的比較全面,所以一共發(fā)了很多包,這樣導(dǎo)致找包的時候非常難找,這里提供一個小技巧,你只需要把srio_request_gen_srio_gen2_0.v模塊中的第359行instruction的索引值request_address改成一個固定的數(shù),那么就只會連續(xù)不斷的發(fā)一種包,看波形的時候就會非常方便,缺點是每修改一次就需要重新仿真,所以比較耗費時間。

773c33bc-7f43-11ed-8abf-dac502259ad0.jpg

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2173

    瀏覽量

    122887
  • 仿真
    +關(guān)注

    關(guān)注

    50

    文章

    4160

    瀏覽量

    134519
  • sRIO
    +關(guān)注

    關(guān)注

    1

    文章

    31

    瀏覽量

    21124

原文標(biāo)題:【高速接口-RapidIO】6、Xilinx RapidIO核仿真與包時序分析

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    集成電路設(shè)計中靜態(tài)時序分析介紹

    Analysis,STA)是集成電路設(shè)計中的一項關(guān)鍵技術(shù),它通過分析電路中的時序關(guān)系來驗證電路是否滿足設(shè)計的時序要求。與動態(tài)仿真不同,STA不需要模擬電路的實際運行過程,而是通過
    的頭像 發(fā)表于 02-19 09:46 ?199次閱讀

    TMS320C645x DSP串行RapidIO用戶指南

    電子發(fā)燒友網(wǎng)站提供《TMS320C645x DSP串行RapidIO用戶指南.pdf》資料免費下載
    發(fā)表于 12-16 10:16 ?0次下載
    TMS320C645x DSP串行<b class='flag-5'>RapidIO</b>用戶指南

    TPS65950實時時鐘時序補償分析

    電子發(fā)燒友網(wǎng)站提供《TPS65950實時時鐘時序補償分析.pdf》資料免費下載
    發(fā)表于 10-29 10:01 ?0次下載
    TPS65950實時時鐘<b class='flag-5'>時序</b>補償<b class='flag-5'>分析</b>

    芯片后仿真要點

    sign-off,寫出SDF3.0用以后仿真,搭建后仿真的驗證環(huán)境,添加sc/io/macro的verilog model,仿真輸出VCD給Redhawk/Voltus做功耗/IR Drop
    的頭像 發(fā)表于 10-23 09:50 ?1021次閱讀
    芯片后<b class='flag-5'>仿真</b>要點

    使用IBIS模型進行時序分析

    電子發(fā)燒友網(wǎng)站提供《使用IBIS模型進行時序分析.pdf》資料免費下載
    發(fā)表于 10-21 10:00 ?1次下載
    使用IBIS模型進行<b class='flag-5'>時序</b><b class='flag-5'>分析</b>

    電源時序器跳閘的原因和解決方法

    電源時序器跳閘是一個常見的電氣問題,它可能由多種因素引起,包括電源電壓不穩(wěn)定、電路短路、過載電流以及時序器本身的故障等。下面將詳細(xì)分析電源時序器跳閘的原因及相應(yīng)的解決方法。
    的頭像 發(fā)表于 09-29 16:28 ?1737次閱讀

    hspice共源放大電路仿真分析

    HSPICE共源放大電路仿真分析涉及多個方面,包括電路的設(shè)計、仿真設(shè)置、仿真結(jié)果解讀等。以下是一個基于HSPICE進行共源放大電路仿真
    的頭像 發(fā)表于 09-27 09:36 ?863次閱讀

    時序邏輯電路故障分析

    時序邏輯電路的主要故障分析是一個復(fù)雜而重要的課題,它涉及電路的穩(wěn)定性、可靠性以及整體性能。以下是對時序邏輯電路主要故障的全面分析,旨在幫助理
    的頭像 發(fā)表于 08-29 11:13 ?1327次閱讀

    深度解析FPGA中的時序約束

    建立時間和保持時間是FPGA時序約束中兩個最基本的概念,同樣在芯片電路時序分析中也存在。
    的頭像 發(fā)表于 08-06 11:40 ?973次閱讀
    深度解析FPGA中的<b class='flag-5'>時序</b>約束

    電源時序器的電壓顯示功能

    是其核心功能之一,它可以幫助用戶了解當(dāng)前電源的狀態(tài),以及各個設(shè)備的工作狀態(tài)。以下是對電源時序器電壓顯示的詳細(xì)分析: 電源時序器的工作原理 電源時序
    的頭像 發(fā)表于 07-08 14:11 ?1077次閱讀

    FPGA 高級設(shè)計:時序分析和收斂

    今天給大俠帶來FPGA 高級設(shè)計:時序分析和收斂,話不多說,上貨。 這里超鏈接一篇之前的STA的文章,僅供各位大俠參考。 FPGA STA(靜態(tài)時序分析) 什么是靜態(tài)
    發(fā)表于 06-17 17:07

    FPGA的IP軟使用技巧

    仿真,需要經(jīng)過綜合以及布局布線才能使用。 IP軟的優(yōu)點在于其靈活性高、可移植性強,允許用戶自配置。然而,其缺點在于對模塊的預(yù)測性較低,在后續(xù)設(shè)計中存在發(fā)生錯誤的可能性,有一定的設(shè)計風(fēng)險。 選擇合適
    發(fā)表于 05-27 16:13

    便攜式手提設(shè)備設(shè)計方案:475-便攜式手提RapidIO協(xié)議光纖發(fā)包測試儀

    便攜式手提RapidIO 協(xié)議光纖發(fā)包儀,以RapidIO收發(fā)卡和X86主板為基礎(chǔ),構(gòu)建便攜式的手提設(shè)備。
    的頭像 發(fā)表于 05-20 15:33 ?509次閱讀
    便攜式手提設(shè)備設(shè)計方案:475-便攜式手提<b class='flag-5'>RapidIO</b>協(xié)議光纖發(fā)包測試儀

    rapidio交換芯片是什么

    RapidIO交換芯片是一種基于RapidIO協(xié)議的專用交換芯片,它能夠?qū)崿F(xiàn)高速、低延遲的數(shù)據(jù)傳輸和交換,廣泛應(yīng)用于嵌入式系統(tǒng)、數(shù)據(jù)中心、網(wǎng)絡(luò)通信等領(lǐng)域。RapidIO協(xié)議本身是一種基于
    的頭像 發(fā)表于 03-16 16:40 ?2645次閱讀

    fpga時序仿真和功能仿真的區(qū)別

    FPGA時序仿真和功能仿真在芯片設(shè)計和驗證過程中各自扮演著不可或缺的角色,它們之間存在明顯的區(qū)別。
    的頭像 發(fā)表于 03-15 15:28 ?2559次閱讀