薛 培,官 劍,邵春偉,張?chǎng)蝿?,鄭思?/p>
(1.無(wú)錫華普微電子有限公司,江蘇 無(wú)錫 214000;2.中國(guó)電子科技集團(tuán)公司第五十八研究所,江蘇 無(wú)錫 214000)
隨著嵌入式系統(tǒng)性能的快速提升,板間互連、板內(nèi)芯片互連對(duì)數(shù)據(jù)帶寬、可靠性、靈活性要求逐步提升,傳統(tǒng)的并行傳輸方式已經(jīng)很難滿足實(shí)際的需求。Serial RapidIO(SRIO)高速串行總線協(xié)議,成為一種使用范圍極廣的高速協(xié)議[1]。SRIO 是一種基于數(shù)據(jù)包交換的互聯(lián)體系結(jié)構(gòu),在芯片互聯(lián)、實(shí)時(shí)視頻傳輸、小型化系統(tǒng)等場(chǎng)合得到了廣泛的使用[2]。
在國(guó)內(nèi)外有關(guān)SRIO 文獻(xiàn)的研究中,研究較多的有SRIO 和FPGA 之間通信[3]、FPGA 實(shí)現(xiàn)多協(xié)議轉(zhuǎn)換SRIO設(shè)計(jì)[4],本文即為研究多協(xié)議接口和SRIO 之間的轉(zhuǎn)換。
本文以XILINX 公司FPGA 提供的SRIO IP 為基礎(chǔ),設(shè)計(jì)了多通道發(fā)送和接收控制系統(tǒng)的設(shè)計(jì)方法,其中發(fā)送通道采用了一種Round-Robin 數(shù)據(jù)處理方法,有效控制多通道數(shù)據(jù)同時(shí)發(fā)送時(shí)可能造成的數(shù)據(jù)擁塞。基于該設(shè)計(jì)方法而開發(fā)的SRIO 多通道控制系統(tǒng),經(jīng)過(guò)仿真與調(diào)試,已用于某型號(hào)項(xiàng)目通信系統(tǒng),達(dá)到了高帶寬、低延時(shí)的效果,具有很好的通道擴(kuò)展性。
本系統(tǒng)采用MSG 消息方式,利用MSG 接口中的mail‐box 空間作為通道ID 區(qū)分,采用該方法,相較于其他多接口SRIO 設(shè)計(jì)中采用Nwrite/Nread 的方法。具有以下優(yōu)點(diǎn):
(1)無(wú)需占用SRIO paylod 區(qū)域,提高了單個(gè)包的帶寬。
(2)最大支持64 個(gè)通道的輸入輸出,具備良好的擴(kuò)展性。
(3)發(fā)送端采用Round-Robin 機(jī)制,多協(xié)議接口具備優(yōu)先級(jí)控制,相較于其他方法,在不同優(yōu)先級(jí)通道同時(shí)發(fā)送數(shù)據(jù)時(shí),可實(shí)現(xiàn)通道差異化。
SRIO 采用三層分級(jí)體系結(jié)構(gòu),該結(jié)構(gòu)如圖1 所示。
圖1 SRIO 三層分級(jí)體系
其中邏輯層位于最高層,定義了包的格式,包為端點(diǎn)發(fā)起和完成事務(wù)提供必要的信息;傳輸層位于中間層定義了SRIO 地址空間和在端點(diǎn)器件間傳輸包所需要的路由信息;物理層在整個(gè)分級(jí)結(jié)構(gòu)的最底部,主要規(guī)定了物理層方式[5]。
SRIO 數(shù)據(jù)包由包頭、有效的數(shù)據(jù)載荷和16 位CRC校驗(yàn)組成[6]。包頭的長(zhǎng)度最大的有效載荷長(zhǎng)度為256 B。由于包長(zhǎng)度短,因此傳輸延時(shí)較小,硬件上也易于實(shí)現(xiàn),適合數(shù)字信號(hào)處理場(chǎng)合對(duì)傳輸延時(shí)要求較高的應(yīng)用[7]。XILINX 的部分FPGA 中[4]已經(jīng)集成了GTP、GTX或GTH 等高速串行收發(fā)電路,這些是FPGA 實(shí)現(xiàn)SRIO高速傳輸?shù)奈锢韺踊A(chǔ)。
在XILINX 的開發(fā)環(huán)境下,可直接調(diào)用Serial Rapi‐dIO gen2 IP 來(lái)實(shí)現(xiàn)SRIO 的LOG、BUF 及PHY 三層結(jié)構(gòu)[8]。在本文所述的系統(tǒng)中,IP 設(shè)置為Condensed I/O 模式,Messaging 接口設(shè)置為Separate Messaging Port。
完成如上的設(shè)置,生成IP 后,開放的主要接口為四組:MSGIREQ、MSGIRESP、MSGTREQ、MSGTRESP,這些接口間的信號(hào)流向和功能分別如圖2 和表1 所示。
表1 SRIO 接口功能表
本系統(tǒng)的包頭使用HELLO 包[9]中的MSG 和RESP包。包頭格式見圖3。
圖3 HELLO 幀頭格式
在該系統(tǒng)中,為了適應(yīng)任意數(shù)量的發(fā)送通道和接收通道,需要將通道ID 加入到SRIO 包中。本系統(tǒng)采用了MSG 包的mailbox 參數(shù)和RESP 包中特有的TargetTID 參數(shù)來(lái)表示當(dāng)前發(fā)送通道和接收通道的通道數(shù)信息。
SRIO IP 開放的接口均為AXI4-stream 接口[10]。其中MSGIREQ 和MSGIRESP 為發(fā)送控制處理邏輯模塊所連接的接口,本地SRIO 節(jié)點(diǎn)所有發(fā)送通道的數(shù)據(jù)均需要轉(zhuǎn)換為這兩組接口的HELLO 包。MSGTREQ 和MSGTRESP 接口為從對(duì)端SRIO 接收到的接口,經(jīng)過(guò)接收控制處理邏輯模塊對(duì)HELLO 包進(jìn)行處理,轉(zhuǎn)化為接收通道輸出的數(shù)據(jù)。
系統(tǒng)整體框架如圖4 所示。
圖4 系統(tǒng)整體框架
在發(fā)送控制處理邏輯,根據(jù)待發(fā)送的發(fā)送通道數(shù)信息(假設(shè)為M通道),將M填充到MSGIREQ 包的mailbox參數(shù)中,實(shí)現(xiàn)本地SRIO 的數(shù)據(jù)發(fā)送;發(fā)送完成后,發(fā)送通道(M)進(jìn)入到等待ACK 的狀態(tài)。發(fā)送控制處理邏輯仍然可繼續(xù)其他發(fā)送通道的數(shù)據(jù)發(fā)送。
當(dāng)MSGIRESP 收到RESP 包(TargetTID 信息等于M)時(shí),發(fā)送通道M從等待ACK 狀態(tài)進(jìn)入到收到ACK 狀態(tài)。此時(shí)發(fā)送通道M認(rèn)為對(duì)端SRIO 已正確接收上一次的發(fā)送數(shù)據(jù)。
在接收控制處理邏輯中,其起始狀態(tài)為接收到MSGTREQ 接口的MSG 包頭。根據(jù)mailbox 參數(shù)(假設(shè)為N,最大可支持到64),則該MSG 包的接收通道為N,同時(shí)提取payload 數(shù)據(jù)轉(zhuǎn)換為接收通道N的輸出時(shí)序,完成后,向MSGTRESP 接口發(fā)送RESP 包,其TargetTID參數(shù)填充為N,實(shí)現(xiàn)對(duì)端SRIO 包的響應(yīng)反饋。
基于以上架構(gòu),可實(shí)現(xiàn)多路不同時(shí)域、不同速度的數(shù)據(jù)在SRIO 鏈路之間的傳輸。
本系統(tǒng)采用一種通用的發(fā)送通道和接收通道時(shí)序,如圖5 所示。
圖5 通道接口時(shí)序
接口由6 個(gè)信號(hào)組成,分別是時(shí)鐘CLK、復(fù)位RST_N、數(shù)據(jù)有效標(biāo)志ENABLE、地址ADDR、數(shù)據(jù)DATA、準(zhǔn)備標(biāo)志READY,數(shù)據(jù)位寬為16 bit。
所有的信號(hào)均為CLK 時(shí)鐘下的同步信號(hào),RST_N 低電平復(fù)位,ENABLE、ADDR、DATA 必須在READY 為高時(shí)有效;ENABLE 為高時(shí),地址ADDR=0 時(shí) 的DATA 值為CTRL 值,CTRL 值內(nèi)含一次SRIO 包的數(shù)據(jù)長(zhǎng)度等信息,其中最高bit 為1 時(shí)意味著SRIO 傳輸包有效,低位bit 代表著包的包長(zhǎng);ADDR=1 到ADDR=N 范圍內(nèi)的DATA 值為一次SRIO 傳輸包的有效數(shù)據(jù)。由于一個(gè)SRIO 包最大支持256 B,則該地址位N最大為128。
當(dāng)有多個(gè)不同時(shí)鐘域、不同收發(fā)速度的數(shù)據(jù)接口接入到SRIO 系統(tǒng)時(shí),均可通過(guò)極簡(jiǎn)單的控制邏輯轉(zhuǎn)換為該接口的時(shí)序,實(shí)現(xiàn)SRIO 的快速應(yīng)用。
發(fā)送控制模塊主要由雙口RAM、Round-Robin 模塊和發(fā)送控制狀態(tài)機(jī)三部分組成。發(fā)送接口數(shù)據(jù)首先按接口時(shí)序中的地址信號(hào)存入到發(fā)送雙口RAM 模塊,等待后續(xù)模塊讀取。Round-Robin 模塊用于實(shí)現(xiàn)所有通道發(fā)送的優(yōu)先級(jí)順序處理;發(fā)送控制模塊則完成發(fā)送雙口RAM 通道和SRIO IP 接口(MSGIREQ 和MSGIRESP)的轉(zhuǎn)換。發(fā)送模塊整體框架如圖6 所示。
圖6 發(fā)送模塊整體框架
2.2.1 發(fā)送雙口RAM
發(fā)送雙口RAM 模塊核心為簡(jiǎn)單雙口RAM,其中A口為16 bit 數(shù)據(jù);B 口為64 bit 數(shù)據(jù)。
寫入部分將多通道接口時(shí)序發(fā)送部分的數(shù)據(jù)寫入到雙口RAM 的A 口中,當(dāng)I_srio_tx_enable 為高時(shí)I_srio_tx_addr[15:0]/I_srio_tx_datain[15:0]信號(hào)分別寫入雙口RAM 的地址和數(shù)據(jù)部分。其中地址0 存入的數(shù)據(jù),最高位為狀態(tài)位,低位為word 個(gè)數(shù)。
讀出部分為發(fā)送控制狀態(tài)機(jī)控制。
2.2.2 Round-Robin 優(yōu)先級(jí)控制模塊
Round-Robin(輪詢調(diào)度算法)優(yōu)先級(jí)控制模塊根據(jù)不同輸入通道的優(yōu)先級(jí)順序,實(shí)現(xiàn)不同重要性通道的數(shù)據(jù)發(fā)送SRIO 包的先后順序處理。
Round-Robin 的原理是每一次將來(lái)自輸入接口的請(qǐng)求輪流分配給內(nèi)部中的發(fā)送處理邏輯,從優(yōu)先級(jí)1(優(yōu)先級(jí)最高)開始,直到優(yōu)先級(jí)N(優(yōu)先級(jí)最低),然后重新開始循環(huán),來(lái)實(shí)現(xiàn)各個(gè)任務(wù)的順序執(zhí)行。同時(shí),每個(gè)輸入接口有一個(gè)Aging(變化值),保證了等待過(guò)久的任務(wù)也依然能被執(zhí)行到。
每個(gè)通道都被分配了一個(gè)優(yōu)先級(jí)號(hào)碼,作為Aging CountDown(遞減計(jì)數(shù))的起始值。也就是說(shuō),優(yōu)先級(jí)越高的進(jìn)程,會(huì)更早地CountDown to 0,即最高優(yōu)先級(jí),從而更早地被執(zhí)行。
本模塊所用的狀態(tài)機(jī)如圖7 所示。
圖7 Round-Robin 狀態(tài)機(jī)圖
每個(gè)通道均具有一個(gè)優(yōu)先級(jí),舉例通道1 為X1 優(yōu)先級(jí);通道2 為X2 優(yōu)先級(jí)…通道N為Xn優(yōu)先級(jí)。
在完成SRIO 鏈路初始化后(port_initialized 和link_initialized 均為1),首先進(jìn)入查詢空閑的狀態(tài),接著進(jìn)入到讀取通道X 的模式。其中查詢空閑和讀取通道X 兩個(gè)狀態(tài)互相循環(huán),即完成讀取完某一個(gè)通道的數(shù)據(jù)后,先返回到查詢空閑狀態(tài),再進(jìn)入讀取通道X 狀態(tài)。
首先讀取最高優(yōu)先級(jí)Xmax 的通道MAX,同時(shí)Ag‐ing 計(jì)數(shù)Aging(max)-1,查詢狀態(tài)(通過(guò)讀取地址I_srio_tx_addr 為0 時(shí)的I_srio_tx_datain 最高位)是否為1,如果為1,則開始通道MAX 的數(shù)據(jù)讀取,如果等于0,則進(jìn)入查詢其他通道X 的狀態(tài)。讀取完通道MAX 的數(shù)據(jù)后,進(jìn)入到查詢空閑狀態(tài)。
依此方式循環(huán),即可以兼顧優(yōu)先級(jí)的次序,又可以實(shí)現(xiàn)低優(yōu)先級(jí)長(zhǎng)時(shí)間輪詢失敗的問(wèn)題。
2.2.3 發(fā)送控制狀態(tài)機(jī)
發(fā)送控制狀態(tài)機(jī)實(shí)現(xiàn)從優(yōu)先級(jí)控制模塊輸出的對(duì)應(yīng)RAM 讀出數(shù)據(jù),轉(zhuǎn)換為MSGIREQ 和MSGIRESP 兩個(gè)接口時(shí)序的模塊。狀態(tài)機(jī)如圖8 所示。
圖8 發(fā)送控制狀態(tài)機(jī)圖
如圖8 所示:上電后C_idle 狀態(tài)下,在完成SRIO 鏈路初始化后(port_initialized 和link_initialized 均為1),發(fā)送狀態(tài)機(jī)進(jìn)入到C_tx_idle 狀態(tài)。
C_tx_idle 狀態(tài)下,直接進(jìn)入C_tx_read_ram0 狀態(tài)。
C_tx_read_ram0 狀態(tài)下,讀通道0 的發(fā)送雙口RAM-0 中地址0 的數(shù)據(jù)。如果地址0 數(shù)據(jù)的最高位為1,代表該通道有待發(fā)送的數(shù)據(jù),則進(jìn)入C_tx_send_
start0 狀態(tài)下,如果最高位為0,則進(jìn)入到C_tx_read_ramn 狀態(tài)。
C_tx_send_start0 狀態(tài)下,進(jìn)入C_tx_send_header狀態(tài)。
C_tx_read_ramn 狀態(tài)下,按Round-Robin 模塊輸出的讀通道順序讀取該通道的RAM 地址0 中的數(shù)據(jù)。如果數(shù)據(jù)的最高位為1,代表該通道有待發(fā)送的數(shù)據(jù),則進(jìn)入C_tx_send_header 狀態(tài);如果最高位為0,則重新到C_tx_read_ram0 狀態(tài),回到讀RAM-0 狀態(tài)。
C_tx_send_header 狀態(tài)下,判斷MSGIREQ 接口的msgireq_tready 值,如果等于1,即可認(rèn)為MSGIREQ 接口可以發(fā)數(shù)據(jù),此時(shí)進(jìn)入到C_tx_send_ready 狀態(tài)。
C_tx_send_ready 狀態(tài),輸出msgireq_tvalid 和ms‐gireq_tdata[63:0]=MSG 包頭的數(shù)據(jù)。接著進(jìn)入到C_tx_send_data0_idle 狀態(tài)。
C_tx_send_data0_idle 狀態(tài)下,需要判斷待發(fā)送的數(shù)據(jù)包長(zhǎng)度是否為8 字節(jié),如果小于或等于8 字節(jié),直接進(jìn)入到C_tx_send_last 狀態(tài);如果大于8 字節(jié),則進(jìn)入到C_tx_send_data 狀態(tài)。
C_tx_send_data 狀態(tài)下,輸出msgireq_tvalid=1 和ms‐gireq_tdata[63:0]=payload 數(shù)據(jù)給到MSGIREQ 接口。
C_tx_send_last 狀態(tài)下,輸出msgireq_tvalid=1、ms‐gireq_tvalid=1、msgireq_tdata[63: 0]=payload 數(shù)據(jù)到MSGIREQ 接口。此狀態(tài)下,即完成一整個(gè)SRIO 包的通道數(shù)據(jù)發(fā)送。完成后進(jìn)入到C_tx_send_end 狀態(tài)。
C_tx_send_end 狀態(tài)下,重新回到C_tx_idle 狀態(tài)。同時(shí)相應(yīng)通道的接收響應(yīng)狀態(tài)機(jī)會(huì)啟動(dòng),等待對(duì)端SRIO 的響應(yīng)包,使用此方式,不影響通道數(shù)據(jù)的繼續(xù)發(fā)送。
如當(dāng)前發(fā)送的為第Y 個(gè)通道,則通道Y 的接收響應(yīng)狀態(tài)機(jī)會(huì)進(jìn)入到C_tx_receive_header 狀態(tài),此刻此通道需要等待MSGIRESP 回應(yīng)對(duì)應(yīng)通道的響應(yīng)包,如果接收到 MSGIRESP 接口的 msgiresp_tvalid=1,同時(shí) ms‐giresp_tdata[63:54]值即TargetTID 值等于Y,即接收到Y(jié)通道發(fā)送數(shù)據(jù)的響應(yīng)。此時(shí)完成Y 通道的所有發(fā)送流程。
基于以上方式,可實(shí)現(xiàn)N個(gè)通道接口的數(shù)據(jù)流水式發(fā)送,在完成一個(gè)通道的發(fā)送后,可以繼續(xù)其他通道的數(shù)據(jù)發(fā)送。同時(shí)能收到RESP 包,確保每個(gè)發(fā)送通道發(fā)送數(shù)據(jù)的可靠性。
接收控制模塊主要由接收雙口RAM 和接收控制狀態(tài)機(jī)兩部分組成。通過(guò)SRIO 接口MSGTREQ 和MSGTRESP 的數(shù)據(jù),首先進(jìn)入到接收控制狀態(tài)機(jī),經(jīng)過(guò)對(duì)MSG 包的解析,分析確定mailbox 位通道數(shù),寫入到對(duì)應(yīng)的接收雙口 RAM。最后發(fā)出 RESP 包到MSGTRESP 接口。完成該操作后,即可完成SRIO 多通道數(shù)據(jù)的接收。接收模塊整體框架如圖9 所示。
圖9 接收模塊整體框架
2.3.1 接收控制狀態(tài)機(jī)
接收控制狀態(tài)機(jī)實(shí)現(xiàn)SRIO IP 的MSGTREQ 和MSGTRESP 兩個(gè)接口處理的邏輯。該模塊接收MSGTREQ 接口的數(shù)據(jù),解析MSG 包中幀頭部分的mailbox 值,確定接收到的SRIO 包對(duì)應(yīng)的接收通道,同時(shí)完成該SRIO 包的payload 部分接收并寫入到后續(xù)的接收雙口RAM 模塊,完成該操作后,再發(fā)送RESP 包給MSGTRESP 接口。整個(gè)接收控制狀態(tài)機(jī)流程如圖10所示。
圖10 接收控制狀態(tài)機(jī)
如圖10 所示,上電后接收狀態(tài)機(jī)進(jìn)入到C_idle 狀態(tài)。完成SRIO 鏈路初始化后,發(fā)送狀態(tài)機(jī)進(jìn)入到C_rx_idle 狀態(tài)。
C_rx_idle 狀態(tài)下,判斷是否接收msgtreq_tvalid=1,如果接收到,直接進(jìn)入C_rx_treq_header 狀態(tài)。
C_rx_treq_header 狀態(tài)下,如果接收到msgtreq_tvalid=1,則認(rèn)為接收到MSG 包的幀頭,此時(shí)進(jìn)入到C_rx_treq_data 狀態(tài);如果接收到msgtreq_tlast=1,則認(rèn)為接收到MSG 的最后一個(gè)64 bit payload 數(shù)據(jù),此時(shí)進(jìn)入到C_rx_treq_data 狀態(tài);如果未接收到以上兩種狀態(tài),則進(jìn)入到C_rx_treq_idle 狀態(tài)。
C_rx_treq_data 狀態(tài)下,如果接收到msgtreq_tlast=1,則接收到MSG 的最后一個(gè)64 bit payload 數(shù)據(jù),此時(shí)進(jìn)入到C_rx_treq_last 狀態(tài);如果未接收到,則進(jìn)入到C_rx_treq_idle 狀態(tài)。
C_rx_treq_idle 狀態(tài)下,如果接收到msgtreq_tvalid=1,則認(rèn)為接收到MSG 包的payload 數(shù)據(jù),此時(shí)進(jìn)入到C_rx_treq_data 狀態(tài);如果接收到msgtreq_tlast=1,則認(rèn)為接收到MSG 的最后一個(gè)64 bit payload 數(shù)據(jù),此時(shí)進(jìn)入到C_rx_treq_last 狀態(tài);如果未接收到以上兩種狀態(tài),則繼續(xù)保持本狀態(tài)。
C_rx_treq_last 狀態(tài)下,則認(rèn)為完成一個(gè)SRIO 的接收處理,SRIO payload 中的數(shù)據(jù)需要存入到接收RAM模塊中。狀態(tài)進(jìn)入到C_rx_treq_end 狀態(tài)。
C_rx_treq_end 狀態(tài)下,進(jìn)入C_rx_resp_valid 狀態(tài),后續(xù)為MSGTRESP 接口的處理。
C_rx_resp_valid 狀態(tài)下,判斷msgtresp_tready,如果為1,則進(jìn)入到C_rx_resp_ready 狀態(tài);如果為0,則繼續(xù)保持本狀態(tài)。
C_rx_resp_ready 狀態(tài)完成響應(yīng)包RESP 的發(fā)送。
2.3.2 接收控制狀態(tài)機(jī)
在C_rx_treq_header 狀態(tài)時(shí),從接收到的SRIO 包頭TargetTID 位,確定收到的包的SRIO 通道。同時(shí)根據(jù)C_rx_treq_data 和 C_rx_treq_last 狀態(tài)下收到的msg_treq_data,解析出payload 部分,寫入到雙口RAM 的A 口。
B 口實(shí)時(shí)監(jiān)測(cè)地址0 的標(biāo)志位,當(dāng)標(biāo)志位=1 時(shí),讀取存入到B 口的數(shù)據(jù),并轉(zhuǎn)換為通道通用時(shí)序。
如圖11 所示,為SRIO 3 通道系統(tǒng)的發(fā)送時(shí)序仿真。
圖11 發(fā)送接口時(shí)序仿真圖
該仿真設(shè)置的優(yōu)先級(jí)順序?yàn)椋和ǖ?>通道1>通道3。
在I_sys_clk 時(shí)鐘下I_srio_tx_enable[0]/I_srio_tx_addr[15:0]/ I_srio_tx_datain[15:0]為第一通道,前4 個(gè)時(shí)鐘下,分別向地址1、2、3、4 寫入了16′h1234、16′h5678、16′h9ABC、16′hDEF0 數(shù)據(jù);第5 個(gè)時(shí)鐘下,向地址0 寫入了控制數(shù)據(jù)16′h8004,最高bit 位為1 代表著標(biāo)志位,4 代表著存有4 個(gè)word。
I_srio_tx_enable[1]/ I_srio_tx_addr[31:16]/I_srio_tx_datain[31:16]為第二通道,前4 個(gè)時(shí)鐘下,分別向地址1、2、3、4 寫入了 16′h2345、16′h6789、16′hABCD、16′hEF10 數(shù)據(jù);第5 個(gè)時(shí)鐘下,向地址0 寫入了控制數(shù)據(jù)16′h8004,最高bit 位為1 代表著標(biāo)志位,4 代表著存有4 個(gè)word。
發(fā)送通道轉(zhuǎn)換為MSGIREQ 接口的仿真時(shí)序如圖12所示。從圖中可以看出,幀頭數(shù)據(jù)為64′h00B020700000 0012,發(fā)送的數(shù)據(jù)為64′hEF10ABCD67892345。mailbox位為1,代表著通道2??梢钥闯鐾ǖ? 最先發(fā)出,實(shí)現(xiàn)了優(yōu)先級(jí)的發(fā)送順序控制。
圖12 MSGIREQ 仿真圖
發(fā)送通道接收到對(duì)端SRIO 的響應(yīng)包的時(shí)序如圖13所示。
圖13 MSGIRESP 接口仿真圖
在圖13 中,212 600 ns 時(shí)刻左右,MSGIRESP 接口接收到RESP 包,其包頭為64′h01D1400000000000。RESP包的TargetTID=1,即為MSG 通道2 的響應(yīng)包。與發(fā)送通道MSGIREQ 接口比較,其延時(shí)為212600-208475=4 125 ns,即4.125 μs(SRIO 線速率為2.5 Gb/s)。
接收通道接收到數(shù)據(jù)的時(shí)序仿真如圖14 所示。
圖14 MSGTREQ 和MSGTRESP 接口仿真
從圖14 中可見,接收通道的MSGTREQ 接收到64’h00B0207000000002,從包頭可以分析MSG 包為通道1。接收通道輸出接口同樣為通道1 有效(O_srio_rx_enable[0]=1),接收時(shí)序與設(shè)計(jì)一致。
本文設(shè)計(jì)了一種SRIO 應(yīng)用于多通道發(fā)送和接收的控制系統(tǒng),可降低SRIO IP 使用的復(fù)雜度,同時(shí)兼容最大64 個(gè)發(fā)送接收通道的直接擴(kuò)展。通過(guò)代碼實(shí)現(xiàn)與仿真,同一通道發(fā)包到確認(rèn)收包,實(shí)際延時(shí)可到4 μs 左右(2.5 Gb/s 線速率),具有較好的可靠性。
該系統(tǒng)已經(jīng)應(yīng)用到某型號(hào)項(xiàng)目通信系統(tǒng),可大幅節(jié)約通訊線纜。系統(tǒng)運(yùn)行穩(wěn)定可靠,同時(shí)對(duì)用戶來(lái)說(shuō),接口使用方便,可極大地加速了SRIO 的應(yīng)用開發(fā)。后續(xù)可以通過(guò)改進(jìn)優(yōu)化,移植到Nwrite/Swrite/Nread 包[11]方式,實(shí)現(xiàn)更多的SRIO 通信應(yīng)用。