1、軟件平臺與硬件平臺
軟件平臺:
操做系統:Windows 8.1 64-bit
開發套件:Vivado2015.4.2
硬件平臺:
評估板:ZYNQ-7 ZC706 Evaluation Board
2、介紹
上篇文章的最後一小節已經對例子工程進行仿真並經過命令 log_wave –r /* 記錄了全部信號的波形,這篇文章主要介紹RapidIO核的仿真以及包時序的分析。
調試SRIO核時必須對包在不一樣接口的傳輸過程有一個清晰的瞭解,可以識別出不一樣接口上包的類型並正確的解析出包的內容。
本文詳細的介紹了SRIO包(控制符號與數據字符)在不一樣接口上的組成與傳輸過程,並深刻到邏輯層、傳輸層以及物理層來觀察RapidIO串行物理層包的傳輸細節。整個包與信號分析的過程徹底基於RapidIO提供的例子工程,例子工程的產生與源代碼的分析已經在上一篇文章《Xilinx RapidIO核例子工程源碼分析》(連接:https://www.cnblogs.com/liujinggang/p/10091216.html)提到過,這裏再也不贅述。最後,本文會利用RapidIO核作一個迴環測試(Loopback Test)的工程在ZC706上運行,因爲RapidIO是一個付費的IP核,因此生成bit文件須要License,沒有License的能夠在官網(https://www.xilinx.com/products/intellectual-property/ef-di-srio-gen2.html#overview)申請一個30天的評估版License試用,評估版的License生成的bit文件運行一段時間之後會自動失效,要想永久使用必須購買官方的License。
3、例子工程結構
下圖整個例子工程的結構層次
它由一個仿真頂層的testbench和兩個SRIO核頂層組成。其中頂層的testbench文件srio_sim.v鏈接了兩個srio例子設計頂層,其中一個例子設計頂層叫作srio_example_top_primary,它表明請求方的RapidIO設備;另外一個例子設計頂層叫作srio_example_top_mirror,它表明響應方的RapidIO設備。
SRIO例子工程頂層文件srio_example_top.v例化了SRIO核的全部組件以及須要在硬件上執行的必要模塊。這些模塊包括:
一、時鐘域復位模塊(srio_clk.v和srio_rst.v)
二、配置結構(cfg_fabric.v)
三、請求事務與響應事務生成模塊(srio_resquest_gen.v和srio_response_gen.v)
四、維護事務生成模塊(srio_quick_start.v)
頂層模塊srio_example_top中例化了srio_quick_start模塊,它與SRIO的維護端口相連,用來生成維護事務(Maintenance Transactions)。這個模塊用來向本地(Local)或遠程(Remote)的配置寄存器空間發送一組固定的指令集,用戶能夠編輯maintenance_list.v來添加、修改或移除維護事務。
srio_request_gen在頂層模塊srio_example_top進行例化,它用來產生I/O事務或消息(MESSAGE)事務,但僅僅SRIO核支持的事務類型能被產生,這個模塊也存儲了指望的響應事務並與實際接收到的響應事務進行對比用來肯定整個事務交互過程的正確性。
srio_response_gen也在頂層模塊srio_example_top進行例化,它用來產生請求事務對應的響應事務。
整個例子工程結構層次的軟件框架以下圖所示,其中左邊的srio_example_top模塊表示請求方的RapidIO設備,而右邊的DUT Mirror表示響應方的RapidIO設備,它們的內部結構徹底相同,區別僅僅在於一個做爲請求方而另外一個爲響應方。
SRIO核的原理框圖以及接口以下圖所示
爲了方便說明,上圖每個接口都用相應的數字標註出來。它們分別爲
Initiator/Target IO Port(接口1)
例子工程中SRIO核所有爲默認參數,因此端口類型默認被配置爲Initiator/Target,在Initiator/Target接口類型中請求事務與響應事務在不一樣的AXI4-Stream通道上進行傳輸。SRIO核的端口類型也能被配置爲Condensed I/O類型,在Condensed I/O接口類型中請求事務與響應事務在同一AXI4-Stream通道上進行傳輸,因此Condensed I/O相比於Initiator/Target類型來講接口更加精簡。本文仍然採用默認的Initiator/Target接口類型來分析每一個包的傳輸過程。
接口1的數據傳輸協議爲AXI4-Stream協議,它的接口定義以下:
s_axis_ireq_* 表示Initiator請求事務的傳輸通道(i = initiator ,req = request)
m_axis_iresp_* 表示Initiator響應事務的傳輸通道(i = initiator ,resp = response)
m_axis_treq_* 表示Target請求事務的傳輸通道(t = target ,req = request)
s_axis_iresp_* 表示Target響應事務的傳輸通道(t = target , resp = response)
Maintenance Port(接口2)
接口2的數據傳輸協議爲AXI4-Lite協議,用來傳輸維護事務。它的接口定義以下:
s_axi_maintr_* 表示維護事務的傳輸端口(maintr = maintenance)
LOG Configuration Fabric(接口3)
接口3的數據傳輸協議爲AXI4-Lite協議,它是邏輯層的配置結構端口,包括本地(Local)配置端口和遠程(Remote)配置端口。它的接口定義以下:
s_axi_cfgl_* 表示本地配置端口(cfg = configuration,l = local)
m_axi_cfgr_* 表示遠程配置端口(cfg = configuration,r = remote)
LOG Transport Interface(接口4)
接口4的數據傳輸協議爲AXI4-Stream協議,它是邏輯層與Buffer的數據傳輸接口,包括髮送和接收兩個通道。它的接口定義以下:
m_axis_buft_* 表示發送端口(buf = buffer,t = transmit)
s_axis_ bufr_* 表示接收端口(buf = buffer,r = receive)
BUF Link Interface(接口5)
接口5的數據傳輸協議爲AXI4-Stream協議,它是Buffer層與物理層的數據傳輸接口,包括髮送和接收兩個通道。它的接口定義以下:
m_axis_phyt_* 表示發送端口(phy= physical,t = transmit)
s_axis_ phyr_* 表示接收端口(phy = physical,r = receive)
BUF Configuration Fabric(接口6)
接口6的數據傳輸協議爲AXI4-Lite協議,它是Buffer層的配置端口。它的接口定義以下:
s_axi_bcfg_* 表示Buffer層配置端口(b = buffer,cfg = configuration)
PHY Serial Interface(接口7)
接口7爲物理層串行鏈路接口,它是物理層數據與串行收發器(Serial Transceivers)數據交換通道,它的接口定義以下所示:
信號
方向
功能
gttx_data[32*LW-1 : 0]
Output
發送給串行收發器(Serial Transceivers)的數據
gttx_charisk[4*LW-1 : 0]
Output
gttx_data信號中有效字節指示信號。當這個信號某一位爲0時,gttx_data中對應的字節爲包的有效字節。
gttx_inhibit[LW-1:0]
Output
串行收發器的通道使能位。若是最低位(bit-0)爲1,表示發送通道0(Lane0)不使能,其他依次類推
gtrx_data[32*LW-1:0]
Input
從串行收發器(Serial Transceivers)接收的數據
gtrx_charisk[4*LW-1:0]
Input
gtrx_data信號中有效字節指示信號。當這個信號某一位爲0時,gttx_data中對應的字節爲包的有效字節。
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-www.mcyllpt.com 】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
串行收發器每一個鏈路的通道綁定序列(Channel Bonding Sequence)指示信號,若是最低位(bit-0)爲1,表示鏈路0(Lane0)收到了一串通道綁定序列,其他依次類推
gtrx_chanisaligned[LW-1:0]
Input
串行收發器每一個鏈路的通道對齊(Channel Alignment)指示信號,若是最低位(bit-0)爲1,表示鏈路0(Lane0)已經實現了通道對齊,其他依次類推
gtrx_chanbonden
Output
串行收發器通道綁定使能信號
gtrx_reset_req
Input
串行請求復位信號。例如,因爲串行收發器接收通路彈性FIFO的上溢(overflow)或下溢(underflow),
gtrx_reset
Output
串行收發器的復位信號
gtrx_reset_done[LW-1:0]
Input
串行收發器每一個鏈路的復位完成指示信號,若是最低位(bit-0)爲1,表示鏈路0(Lane0)已經復位完成,其他依次類推
PHY Configuration Fabric(接口8)
接口8的數據傳輸協議爲AXI4-Lite協議,它是物理層(Physical)的配置端口。它的接口定義以下:
s_axi_cfgp_* 表示物理層配置端口(cfg = configuration,p = physical)
Transceiver Interface(接口9)
接口9爲串行收發器高速數據傳輸接口,每條串行數據傳輸線均爲一對差分信號。它的接口定義以下:
srio_rxpN ,srio_rxnN:N爲通道號,接收鏈路差分對,N的值爲一、2或4。
srio_txpN ,srio_txnN:N爲通道號,發送鏈路差分對,N的值爲一、2或4。
4、SRIO核包時序分析
上篇文章《Xilinx RapidIO核例子工程源碼分析》(連接:https://www.cnblogs.com/liujinggang/p/10091216.html)的最後一小節已經詳細介紹了仿真的所有流程以及利用log_wave –r /*命令記錄全部信號波形的方法,這裏再也不贅述。這一節默認你們已經仿真完畢(仿真結束大約須要20min左右時間,仿真完畢記得保存波形),並獲得了仿真的波形,下面就對其中重要的波形進行分析。
在分析以前,在從新回顧一下RapidIO串行物理層的包與控制符號的格式
串行物理層的包:
控制符號:
4.1 鏈路初始化與控制符號
調試SRIO的第一步是去檢測SRIO頂層模塊(srio_example_top_primary)中的各個關鍵的控制信號是否正確切換。這些信號包括:復位信號、時鐘鎖定信號(clk_lock)、端口初始化信號(port_initialized)、鏈路初始化信號(link_initialized),端口錯誤信號(port_error),mode_1x信號(在2x和4x模式下,這個信號爲高表示SRIO核已經被訓練爲1x模式,在1x模式下,這個信號一直爲高,當port_initialized爲高時,這個信號纔有效)與端口解碼錯誤信號(port_decode_error)等(除了這幾個信號之外,其餘信號也能夠觀察一下)。
Step一、把srio_example_top_primary中的全部信號所有選中,而後直接拖到右邊的波形窗口
Step二、找到上面提到的幾個關鍵控制信號,觀察它們的波形
由上圖能夠看出,控制信號的波形均切換正確,其中最關鍵的兩個信號是port_initialized信號與link_initialized信號,當它們爲高時,分別表示端口和鏈路被成功初始化。
下圖是時鐘信號和復位信號的時序細節,顯然,時鐘信號與復位信號的時序均正確。
Step三、pg007_srio_gen2.pdf第119頁提到,當7個連續的error free控制符號被接收,而且15個連續的符號被髮送的時候,link_initialized信號才被拉高,因此接下來看看link_initialized信號拉高以前物理層是否接收了7個控制符號併發送了15個控制符號。
首先選中最左邊的srio_gen2_0_block_inst,而後把中間列出的以gt開頭的接口7的全部信號拖到最右邊的波形窗口中,以下圖所示
在link_initialized拉高以前,觀察gttx_data,gttx_charisk與gtrx_data,gtrx_charisk總線上的數據,建議把gttx_charisk與gtrx_charisk用二進制顯示,當gttx_charisk與gtrx_charisk對應的位爲0時,代表gttx_data與gtrx_data上的數據爲有效數據(控制符號與包屬於有效數據)。當gttx_charisk與gtrx_charisk對應的位爲1時,gttx_data與gtrx_data上的數據爲空閒序列。以下圖所示,當link_initialized拉高以前gttx_data上發送了15個連續的控制符號,gtrx_data上接收了7個連續的控制符號。
下面把控制符號波形放大觀察控制符號各個字段的細節,發送與接收總線上的控制符號分別以下圖所示(gttx_charisk與gtrx_charisk對應的位爲0時, gttx_data與gtrx_data上的數據爲控制符號)
上圖代表在link_initialized拉高以前,發送與接收的控制符號爲80f713,控制符號80f713前面的1c是/K28.0/,表示控制符號的起始位置。因爲SRIO核默認使用的是短控制符號,因此這裏控制符號爲24-bit。
把80f713轉化爲二進制:80f713 = 1000_0000_1111_0111_0001_0011,各個字段的對應關係以下圖所示
當gttx_charisk與gtrx_charisk對應的位爲1時,gttx_data與gtrx_data上的數據爲/K/,/R/,/A/組成的空閒隨機序列(前面幾篇文章解釋過這個知識點),它們分別爲特殊字符/K28.5/,/K29.7/,/K27.7/,轉化爲16進製爲bc,fd,fb,下圖是它們的波形
整個初始化的過程着重須要關注的兩個信號就是port_initialized和link_initialized,若是初始化失敗(port_initialized和link_initialized沒有被拉高),那麼首先必須檢查gttx_data與gtrx_data上是否收到了空閒序列/K28.5/,/K29.7/,/K27.7/,同時須要檢查是否存在編解碼錯誤,編解碼錯誤的判斷標誌是gtrx_notintable信號,當它爲1時代表存在編解碼錯誤。
4.2 SWRITE事務
上篇文章已經分析過,例子工程會把instruction_list.vh中定義的事務按順序依次發出去。其中最早發送的是37個SWRITE事務,而後是19個NWRITE_R事務、 19個NWRITE事務、26個NREAD事務,2個DOORBELL事務,最後是17個MESSAGE事務。其中第一個發送的事務是instruction_list.vh中第50行定義的SWRITE事務。以下圖所示
下面以上圖第50行的SWRITE事務爲例來講明整個SWRITE事務的傳輸過程。這個事務表示的是利用SWRITE事務往地址36’hCD0000600發送16個字節的數據。
Step一、選中srio_example_top_primary,把中間列出的全部信號所有拖到波形窗口中(拖到波形窗口前能夠把以前波形窗口中的信號所有刪掉)
Step二、找到請求事務的傳輸通道ireq,並抓出事務的波形以下圖所示
因爲僅當tvalid和tready同時爲高時,tdata上的數據才爲有效數據,因此這個SWRITE一共消耗了三個有效時鐘週期,其中第一個時鐘週期發送的是HELLO包頭,後面兩個時鐘週期分別發送8個字節的數據(第一個時鐘發送的數據是0000000000000000,第二個時鐘發送的數據是0101010101010101),一共16個字節的數據,和instruction_list.vh中第50行定義徹底一致,整個時序也與HELLO格式的時序徹底吻合。
Step三、對照HELLO格式解析包頭。包頭爲006020fcd0000600,轉化爲二進制後與HELLO格式各個字段對應關係以下所示:
由上圖可知FTYPE字段的值爲6,代表確實是一個SWRITE事務
Step四、SWRITE事務通道ireq通道(接口1)傳輸給SRIO核之後進入SRIO的邏輯層,邏輯層會給包添加傳輸層的信息發送給Buffer(接口3),而後Buffer會把數據發送給物理層(接口5)。
選中srio_gen2_0_block_inst,把中間的buft_*通道、phyt_*通道與gttx_*通道的信號拖到右邊的波形窗口中,以下圖所示
整個從邏輯層到傳輸層到物理層到吉比特收發器(Gigabit Transceiver)的波形以下圖所示,波形的細節這裏再也不展開,你們能夠本身抓出來觀察。
Step五、ireq通道的SWRITE請求事務通過邏輯層,傳輸層和物理層到達吉比特收發器(Gigabit Transceiver),吉比特收發器的數據通道gttx_data[31:0](接口7)波形以下圖所示
由上圖可知,整個串行物理層的包爲:7c96f004_b04600ad_d0000600_00000000_00000000_01010101_01010101_e8d30000_7c96f203。(00000000和01010101的寬度爲兩個有效時鐘)這個包的含義以下:
7c96f004中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),96f004轉化爲二進制爲:
96f004 = 1001_0110_1111_0000_0000_0100
它是一個包起始控制符號,各個字段的對應關係以下圖所示
b04600ad_d0000600_00000000_00000000_01010101_01010101_e8d30000是SWRITE事務串行物理層的包,把它轉化爲二進制後各個字段的對應關係以下圖所示
上圖中data字段是傳輸的00000000_00000000_01010101_01010101這16個字節數據的二進制碼,由於它的二進制碼太長了因此我直接用data替代。因爲本次傳輸的字節小於80個字節,因此SWRITE事務的最後面的三個字段不存在,你們能夠抓一下數據量爲256個字節的SWRITE包,當數據量大於了80字節,後面的三個字段也會有數據。
包最後面的7c96f203中7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),96f203轉化爲二進制爲:
96f203= 1001_0110_1111_0010_0000_0011
它是一個包結束控制符號,各個字段的對應關係以下圖所示
至此,SWRITE事務所有分析完畢。
4.3 NWRITE_R事務
本小節以instruction_list.vh中第72行定義的NWRITE_R事務爲例來講明整個NWRITE_R事務的傳輸過程。以下圖所示,這個事務表示的是利用NWRITE_R事務往地址36’ h004550002發送6(size+1)個字節的數據。
Step一、爲了方便快速的找到上圖的NWRITE_R事務,建議選中srio_request_gen模塊,並把request_address變量拖到波形窗口中,並把這個變量用Unsigned Decimal(無符號10進制)格式顯示。看過上篇《Xilinx RapidIO核例子工程源碼分析》文章的應該知道這個變量是instruction的索引值,當這個變量爲37的時候就表示37(0~36)個SWRITE事務所有發送完畢,下個事務就是instruction_list.vh中第72行定義的NWRITE_R事務。
Step二、鎖定request_address爲37的位置,找到請求事務的傳輸通道ireq,並觀察事務的波形以下圖所示
由上圖可知第一個有效時鐘傳輸的HELLO格式包頭數據爲:2555205004550002。發送的數據是afafafafafafafaf。包頭與HELLO包格式的對應關係以下圖所示
由上圖可知FTYPE = 5,TTYPE = 5,這兩個字段惟一的肯定了這是一個NWRITE_R事務。
Step三、ireq通道的NWRITE_R請求事務通過邏輯層,傳輸層和物理層到達吉比特收發器(Gigabit Transceiver),吉比特收發器的數據通道gttx_data[31:0](接口7)波形以下圖所示
由上圖可知,整個串行物理層的包爲:7c98f009_d84500ad_59250455_0000afaf_afafafaf_afafad15_7c17f21e。這個包的含義以下:
7c98f009中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),98f009轉化爲二進制爲:
98f009= 1001_1000_1111_0000_0000_1001
它是一個包起始控制符號,各個字段的對應關係以下圖所示
d84500ad_59250455_0000afaf_afafafaf_afafad15是NWRITE_R事務串行物理層的包,把它轉化爲二進制後各個字段的對應關係以下圖所示
上圖中data字段是傳輸的afafafaf_afafafaf這16個字節數據的二進制碼,由於它的二進制碼太長了因此我直接用data替代。因爲本次傳輸的總字節數爲8字節的整數倍,因此NWRITE_R事務的後面可選的logical 0 pad(opt)沒有數據。
細心的人在這裏可能發現了一個奇怪的現象:在HELLO格式中,address字段爲36’ h004550002,其中高兩位爲保留位,因此address一共只有34-bit有效位,size字段爲5,表示往36’ h004550002地址中寫6(size+1)個字節的數據。可是上面串行物理層的包中address字段的值爲0000_0100_0101_0101_0000_0000_0000_0,發送的數據個數爲8個字節(afafafaf_afafafaf)。出現這種現象的緣由爲:
HELLO格式address字段指向的存儲空間的最小單元是1個字節,而串行物理層中的address字段指向的存儲空間最小單元其實是8個字節,address後面的xambsb字段是串行物理層的最高兩位地址擴展字段,因此串行物理層的包可訪問的存儲空間大小爲2^34=16G,這也是HELLO格式中address字段位寬爲34-bit的緣由(關於這部分的內容我在《RapidIO協議概述》也提到過)。正由於HELLO格式address字段與串行物理層address字段所指向的存儲空間最小單元不一樣,因此pg007_srio_gen2.pdf中第78頁纔給出了一個HELLO格式size,addr與有效字節的對應關係表,以下所示
本例中size=5,addr[2:0] = 2,對應於上圖中紅框圈出來的狀況。因此往36’ h004550002地址中寫6(size+1)個字節的數據對串行物理層來講就是往36’ h004550000地址中寫8個字節的數據,高6個字節(上圖中灰色區域)爲有效數據。
包最後面的7c17f21e中7c是特殊字符/K28.3/,它是一個包界定符(Packet www.yongshiyule178.com Deliminator Control Symbol),17f21e轉化爲二進制爲:
17f21e = 0001_0111_1111_0010_0001_1110
它是一個包結束控制符號,各個字段的對應關係以下圖所示
Step四、例子工程中例化了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上的數據應該和上一步分析的srio_example_top_primary實體的gttx_data徹底相同。
選中srio_example_top_mirror的srio_gen2_0_block_inst,把gtrx_data與gtrx_charisk兩個信號拖到右邊的窗口中,以下圖所示
觀察srio_example_top_primary的gttx_data與srio_example_top_mirror的gtrx_data,以下圖所示,能夠看到二者徹底相同,僅僅存在一個延時。
Step五、srio_example_top_mirror模塊的grrx_data接收到數據之後,將會把grrx_data的數據按照與發送過程徹底相反的操做傳到邏輯層,最終邏輯層的數據將會經過srio_example_top_mirror模塊的treq接口輸出。
選中srio_example_top_mirror,把treq通道的全部信號拖到右邊的波形窗口中
下圖是srio_example_top_www.michenggw.com mirror模塊treq通道的波形
可知treq通道的包頭數據爲2555205004550002,與srio_example_top_primary模塊ireq通道發送的包頭數據徹底同樣。這也證實整個鏈路工做正常。
4.4 NWRITE_R的響應事務
因爲NWRITE_R事務是一個有響應的寫事務,因此當發起方(Initiator)往目標方(Target)發送一個NWRITE_R事務之後,發起方(Initiator)還要接收目標方(Target)的發回響應事務。響應包的數據會出如今srio_example_top_primary模塊的tresp通道,下圖是srio_example_top_primary模塊的tresp通道的時序圖
由上圖可知iresp_tdata的數據爲:25d0400000000000。與HELLO包格式的對應關係以下圖所示
由上圖可知FTYPE = 13,因此這是一個響應事務,prio字段變成了2,而NWRITE_R字段的prio字段爲1,這是由於響應事務的prio爲請求事務的prio+1,(這個知識點前兩篇文章都提到過)
事實上,響應事務的一整套傳輸流程爲:目標方(Target)發回的響應事務被srio_example_top_primary模塊的串行差分信號線接收到達Serial Transceivers,Serial Transceivers在把接收的數據經過gtrx_data通道(接口7)傳到物理層,物理層把接收的包通過處理之後經過phyr_*通道(接口5)把數據發給Buffer層,Buffer層對數據進行二次處理之後把數據經過bufr_*通道(接口4)傳給邏輯層,邏輯層再把數據傳輸給I/O端口(接口1),這樣就獲得了上圖HELLO格式的響應包。你們能夠把gtrx_data、phyr_*通道、bufr_*通道和I/O端口的波形所有抓出來觀察一下,方法和上節介紹發送流程的抓取過程徹底同樣。這裏我只抓一下gtrx_data通道的數據,並分析響應事務串行物理層包格式各個字段的含義。
gtrx_data通道的數據以下圖所示
由上圖可知,整個響應事務串行物理層的包爲:7c83f00f_388dadad_00255540_7c83f208
7c83f00f中的7c是特殊字符/K28.3/,它是一個包界定符(Packet Deliminator Control Symbol),83f00f轉化爲二進制爲:
83f00f = 1000_0011_1111_0000_0000_1111
它是一個包起始控制符號,各個字段的對應關係以下圖所示
388dadad_00255540是NWRITE_R響應事務串行物理層的包,把它轉化爲二進制後各個字段的對應關係以下圖所示
因爲NWRITE_R的響應事務不帶數據,因此沒有data字段。target TID字段的值爲16進制的25,也就是10進制的37,與發送的NWRITE_R請求事務target TID值徹底相同。FTPYE字段的值爲13,說明這是一個響應事務,整個響應事務的包正是NWRITE_R事務的響應包。
7c83f208中的7c是特殊字符/K28.3/,它是一個包界定符(Packet www.wanmeiyuele.cn Deliminator Control Symbol),83f208轉化爲二進制爲:
83f208= 1000_0011_1111_0010_0000_1000
它是一個包結束控制符號,各個字段的對應關係以下圖所示html