張鋒印,高 博,冀亞瑋
(戰(zhàn)略支援部隊(duì)信息工程大學(xué) 信息系統(tǒng)工程學(xué)院,河南 鄭州 450000)
隨著無線通信技術(shù)的高速發(fā)展,數(shù)據(jù)量也呈指數(shù)級(jí)增長(zhǎng),對(duì)信號(hào)處理平臺(tái)計(jì)算處理能力以及數(shù)據(jù)傳輸能力的要求也越來越高,單一的信號(hào)處理平臺(tái)已無法滿足海量數(shù)據(jù)的處理需求,異構(gòu)信號(hào)處理平臺(tái)已成為一種趨勢(shì)[1-3]。FPGA(Field Programmable Gate Array)靈活性強(qiáng)、體積小,能夠并發(fā)協(xié)調(diào)多任務(wù)處理,進(jìn)而完成大數(shù)據(jù)量交互,在異構(gòu)信號(hào)處理平臺(tái)中占據(jù)重要的位置[4-7]。平臺(tái)中的部分策略處理、數(shù)據(jù)包的解析封包以及信號(hào)的處理分發(fā)等過程都逐漸轉(zhuǎn)移至FPGA進(jìn)行執(zhí)行[8-10]。在多應(yīng)用任務(wù)場(chǎng)景下,大量數(shù)據(jù)突發(fā)會(huì)導(dǎo)致?lián)砣麃G包,該問題的存在也對(duì)通信傳輸質(zhì)量提出了更高的要求[11-12]。在對(duì)幾種經(jīng)典流量管理算法分析的基礎(chǔ)上,本文結(jié)合FPGA多應(yīng)用任務(wù)場(chǎng)景的工作需求,提出了一種適用于FPGA流量管理的RFCF(Reputation Flow Control based on FPGA)算法。此外,結(jié)合FPGA的靈活性、并行性和集成性等[13-14]特點(diǎn),本文將典型應(yīng)用任務(wù)進(jìn)行抽象,構(gòu)建FPGA多應(yīng)用任務(wù)數(shù)據(jù)傳輸系統(tǒng),并在FPGA上對(duì)RFCF算法進(jìn)行硬件化實(shí)現(xiàn)。
經(jīng)典的流量管理算法主要有基于以太網(wǎng)暫停幀的流量管理、基于速率的流量管理以及基于滑窗的流量管理等[15-18]。文獻(xiàn)[15]采用以太網(wǎng)暫停幀的流量管理,通過發(fā)送暫停幀來告知發(fā)送端停止發(fā)送數(shù)據(jù),暫停發(fā)送的時(shí)長(zhǎng)由堵塞狀態(tài)決定,傳輸效率較低。文獻(xiàn)[16]采用基于速率的流量管理,通過改變發(fā)送端的發(fā)送速率來提高數(shù)據(jù)傳輸效率,當(dāng)發(fā)送端收到包拒絕或者超時(shí)信號(hào)時(shí)降低發(fā)送速率;收到包接收確認(rèn)信號(hào)時(shí)提高發(fā)送速率。該方法中,接收端只向發(fā)送端反饋確認(rèn)或拒絕字符來響應(yīng)發(fā)送端的數(shù)據(jù)傳輸,沒有向發(fā)送端提供有關(guān)緩沖區(qū)數(shù)量的信息,因此盡管此算法易于實(shí)現(xiàn),但傳輸速率波動(dòng)較大。文獻(xiàn)[17]采用自適應(yīng)流量管理算法,采用變常數(shù)加減改變發(fā)送速率,緩解接收端數(shù)據(jù)處理的壓力。但當(dāng)面對(duì)突發(fā)數(shù)據(jù)流時(shí),該方法會(huì)降低整個(gè)系統(tǒng)的傳輸效率。文獻(xiàn)[18]采用基于滑窗的流量管理,通過窗口的大小來決定發(fā)送數(shù)據(jù)的數(shù)據(jù)量,即在大窗口下可以連續(xù)發(fā)送接收多個(gè)數(shù)據(jù)包,在小窗口下只能發(fā)送接收少量數(shù)據(jù)包。此算法實(shí)現(xiàn)簡(jiǎn)單,但其沒有考慮各個(gè)數(shù)據(jù)包的優(yōu)先級(jí)屬性。
針對(duì)FPGA多應(yīng)用任務(wù)需求,本文提出RFCF算法對(duì)經(jīng)典的速率流量管理算法進(jìn)行優(yōu)化:將接收端反饋的確認(rèn)或拒絕信號(hào)進(jìn)行具體化,然后將接收端的剩余緩沖空間值反饋至發(fā)送端,實(shí)時(shí)調(diào)整發(fā)送端發(fā)送數(shù)據(jù)。針對(duì)多應(yīng)用場(chǎng)景,RFCF算法可將不同的應(yīng)用任務(wù)劃分為不同的優(yōu)先級(jí)來進(jìn)行仲裁傳輸。
RFCF流量管理算法的核心思想是將接收端的剩余緩沖空間值反饋到發(fā)送端,而發(fā)送端利用反饋信息來調(diào)整數(shù)據(jù)的發(fā)送策略。當(dāng)剩余緩沖空間值較大時(shí),接收端接收所有的數(shù)據(jù)。隨著數(shù)據(jù)量的增大,當(dāng)剩余緩沖空間值低于不同閾值時(shí),將選擇不同的發(fā)送策略,例如隨著剩余緩沖空間值不斷變化,數(shù)據(jù)包被分為若干優(yōu)先級(jí)區(qū)間,處于最高優(yōu)先級(jí)區(qū)間內(nèi)的所有數(shù)據(jù)包都可以發(fā)送接收,而低優(yōu)先級(jí)區(qū)間內(nèi)的數(shù)據(jù)會(huì)被拒絕發(fā)送接收,從而避免中斷高優(yōu)先級(jí)應(yīng)用。
在異構(gòu)信號(hào)處理平臺(tái)中,F(xiàn)PGA通常會(huì)部署多個(gè)應(yīng)用任務(wù)。本文將典型應(yīng)用任務(wù)進(jìn)行抽象,構(gòu)建了FPGA多應(yīng)用任務(wù)數(shù)據(jù)傳輸系統(tǒng),其總體框架如圖1所示。該結(jié)構(gòu)主要包括:(1)高速串行收發(fā)器。其接收端與發(fā)送端均由高速以太網(wǎng)PCS(Physical Coding Sublayer)、PMA(Physical Media Additional)組成。PCS提供豐富的物理編碼層特性,PMA部分為模擬電路,提供高性能的串行接口特性,例如預(yù)加載與均衡;(2)ARP(Address Resolution Protocol)模塊即地址解析協(xié)議,其通過目標(biāo)設(shè)備的IP地址查詢目標(biāo)設(shè)備的MAC地址以保證通信順利進(jìn)行;(3)IP(Internet Protocol)模塊。IP模塊是TCP/IP協(xié)議簇中最為核心的協(xié)議,所有的TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)、ICMP(Internet Control Message Protocol)等協(xié)議都是以IP數(shù)據(jù)報(bào)格式傳輸。文獻(xiàn)[9]是TCP/IP協(xié)議卸載引擎的硬件設(shè)計(jì)與實(shí)現(xiàn)。相比于TCP協(xié)議,UDP協(xié)議復(fù)雜度較低,傳輸延遲小,傳輸效率高。本文采用UDP協(xié)議進(jìn)行數(shù)據(jù)傳輸。RFCF算法模塊對(duì)接收到的數(shù)據(jù)先進(jìn)行組包,然后根據(jù)應(yīng)用任務(wù)的不同分配不同的優(yōu)先級(jí),并結(jié)合接收端反饋的有效信息對(duì)數(shù)據(jù)發(fā)送進(jìn)行仲裁。
圖1 數(shù)據(jù)傳輸系統(tǒng)總體框架
RFCF算法將接收端的剩余緩沖空間值反饋至發(fā)送端,通過反饋的有效信息來實(shí)時(shí)調(diào)整發(fā)送端發(fā)送數(shù)據(jù)。該算法設(shè)定了基于緩存空間大小的多級(jí)閾值,根據(jù)剩余緩沖空間值選擇不同的優(yōu)先級(jí)發(fā)送策略。根據(jù)算法基本原理,對(duì)RFCF算法模塊進(jìn)行設(shè)計(jì)實(shí)現(xiàn)。算法模塊主要包括組包、輸出仲裁、發(fā)送管理和接收管理,其基本結(jié)構(gòu)如圖2所示。
圖2 RFCF算法模塊結(jié)構(gòu)示意圖
組包模塊接收到數(shù)據(jù)時(shí)會(huì)先進(jìn)行字段添加。RFCF算法模塊包結(jié)構(gòu)字段如圖3所示,其中可選添加項(xiàng)(op)為44 bit,字段信息的優(yōu)先級(jí)(prio)為4 bit,playload長(zhǎng)度為16 bit。可選添加項(xiàng)是為協(xié)議拓展預(yù)留的字段空間。字段信息的優(yōu)先級(jí)根據(jù)接收端反饋的剩余緩沖空間值(free_buf_cnt)區(qū)間范圍實(shí)時(shí)變化。playload為數(shù)據(jù)部分,最小為64 Byte,最大為1 500 Byte,組成一個(gè)新的包fifo_0_rx_tdata_in,發(fā)送給下一模塊管理。組包邏輯實(shí)現(xiàn)如下:
圖3 RFCF算法模塊包結(jié)構(gòu)字段
(1)復(fù)位信號(hào)到來時(shí),當(dāng)前狀態(tài)(state_c)為STATE_IDLE,等待包首部有效信號(hào)(header_vaild)到來,否則一直處于等待狀態(tài);
(2)當(dāng)header_vaild信號(hào)到來,state_c狀態(tài)跳轉(zhuǎn)至STATE_STORE_HEADER,添加包首部指示信號(hào)(store_header)拉高,state_c狀態(tài)跳轉(zhuǎn)至STATE_STORE_PAYLOAD;
(3)當(dāng)store_header為高時(shí),開始添加包首部信息,包括優(yōu)先級(jí)和數(shù)據(jù)長(zhǎng)度;
(4)在首部添加完成后,等待添加數(shù)據(jù)指示信號(hào)(store_payload),隨即進(jìn)行數(shù)據(jù)填充;
(5)等待數(shù)據(jù)最后一個(gè)字節(jié)的指示信號(hào)(axis_tlast)為高電平時(shí),數(shù)據(jù)填充完成,組包部分完成,state_c狀態(tài)跳轉(zhuǎn)至STATE_STORE_FINISH。
當(dāng)發(fā)送管理接收到新的數(shù)據(jù)包fifo_0_rx_tdata_in后,讀取包首部信息,并根據(jù)包首部信息進(jìn)行判斷。本文設(shè)置了4個(gè)參數(shù)來定義傳輸?shù)膬?yōu)先級(jí)區(qū)間,即P0、P1、P2、P3,且P0>P1>P2>P3>0。當(dāng)信號(hào)fifo_tready的位寬為4 bit時(shí),每個(gè)bit代表一個(gè)任務(wù)數(shù)據(jù)請(qǐng)求使能,當(dāng)為高電平時(shí)代表允許此任務(wù)優(yōu)先級(jí)數(shù)據(jù)輸出的請(qǐng)求;為低電平時(shí)表示禁止請(qǐng)求輸出。圖4為流控狀態(tài)轉(zhuǎn)移流程,其中free_buf_cnt是實(shí)時(shí)變化的,會(huì)根據(jù)所在區(qū)間轉(zhuǎn)移到相應(yīng)的狀態(tài),其狀態(tài)轉(zhuǎn)移步驟如下:
圖4 流控狀態(tài)轉(zhuǎn)移圖
步驟1當(dāng)復(fù)位信號(hào)到來,當(dāng)前狀態(tài)(state_c)為P0,此時(shí)對(duì)剩余緩沖空間值進(jìn)行判斷,若free_buf_cnt≥P0,則可以傳輸所有的優(yōu)先級(jí)事務(wù)流包fifo_tready≤4′b1111;
步驟2state_c狀態(tài)為P1,判斷剩余緩沖空間值,若P0>free_buf_cnt≥P1,state_c狀態(tài)轉(zhuǎn)移為P1,則可以傳輸優(yōu)先級(jí)為1、2、3的事務(wù)流包fifo_tready≤4′b0111;
步驟3state_c狀態(tài)為P2,判斷剩余緩沖空間值,若P1>free_buf_cnt≥P2,state_c狀態(tài)轉(zhuǎn)移為P2,則可以傳輸優(yōu)先級(jí)為2、3的事務(wù)流包fifo_tready≤ 4′b0011;
步驟4state_c狀態(tài)為P3,判斷剩余緩沖空間值,若P2>free_buf_cnt≥P3,state_c狀態(tài)轉(zhuǎn)移為P3,則只可以傳輸優(yōu)先級(jí)為3的事務(wù)流包fifo_tready≤4′b0001;
步驟5state_c狀態(tài)為P3,判斷剩余緩沖空間值,若P3>free_buf_cnt>0,則只可以傳輸最高優(yōu)先級(jí)數(shù)據(jù)fifo_tready ≤ 4′d0。
將發(fā)送管理模塊中的fifo_tready信號(hào)送入輸出仲裁模塊,包括信號(hào)線request(判決單元模塊內(nèi)的請(qǐng)求信號(hào))、acknowledge(確認(rèn)指示信號(hào))、grant(輸出信號(hào),為高電平時(shí)即可以輸出數(shù)據(jù))、grant_vaild(grant輸出的有效指示信號(hào))。通過對(duì)數(shù)據(jù)輸出請(qǐng)求信號(hào)fifo_tready進(jìn)行仲裁判斷,實(shí)時(shí)調(diào)整發(fā)送數(shù)據(jù)。通過輸出grant和acknowledge信號(hào)進(jìn)行回復(fù)確認(rèn)。邏輯實(shí)現(xiàn)順序如下:
(1)復(fù)位信號(hào)到來,當(dāng)前狀態(tài)(state_c)為IDLE,當(dāng)請(qǐng)求信號(hào)(request)為高時(shí),state_c狀態(tài)跳轉(zhuǎn)至REQUEST,將fifo_tready信號(hào)分別壓縮為單個(gè)有效位和編碼位輸出mask_next= {PORTS{1′b1}}<< (fifo_tready_index + 1);
(2)當(dāng)收到仲裁響應(yīng)1信號(hào)(acknowledge_1)時(shí),表示當(dāng)前任務(wù)已經(jīng)輸出完成,此時(shí)state_c狀態(tài)跳轉(zhuǎn)至ACKNOWLEDGE_1,進(jìn)行下一任務(wù)輸出請(qǐng)求;
(3)當(dāng)收到仲裁響應(yīng)2信號(hào)(acknowledge_2)時(shí),表示當(dāng)前任務(wù)已經(jīng)輸出完成,則state_c狀態(tài)跳轉(zhuǎn)至ACKNOWLEDGE_2,進(jìn)行下一任務(wù)輸出請(qǐng)求;
(4)當(dāng)收到仲裁響應(yīng)3信號(hào)(acknowledge_3)時(shí),表示當(dāng)前任務(wù)已經(jīng)輸出完成,則state_c狀態(tài)跳轉(zhuǎn)至ACKNOWLEDGE_3,進(jìn)行下一任務(wù)輸出請(qǐng)求;
(5)當(dāng)收到確認(rèn)指示信號(hào)(acknowledge),state_c狀態(tài)跳轉(zhuǎn)至FINISH。
在接收管理模塊中,當(dāng)發(fā)送端發(fā)出數(shù)據(jù)后,接收端會(huì)反饋給發(fā)送端一個(gè)有關(guān)緩沖區(qū)現(xiàn)狀的信息,通過free_buf_cnt進(jìn)行傳遞,代表當(dāng)前可用于接收的事務(wù)流包的最大長(zhǎng)度。如果一個(gè)端口的可用緩沖區(qū)的大小超過了free_buf_cnt的最大值,則重置free_buf_cnt值。緩沖區(qū)大小不能大于實(shí)際可利用的區(qū)域大小,以避免數(shù)據(jù)溢出或數(shù)據(jù)接收錯(cuò)誤。
在接收管理模塊中,以控制字符的方式將剩余緩沖空間值反饋給發(fā)送端,然后發(fā)送端根據(jù)剩余緩沖空間值調(diào)整,選擇不同的發(fā)送策略。發(fā)送端將剩余緩沖空間值作為參數(shù)之一,對(duì)發(fā)送數(shù)據(jù)進(jìn)行調(diào)整,優(yōu)先發(fā)送高優(yōu)先級(jí)的事務(wù)。如果發(fā)送數(shù)據(jù)是響應(yīng)信號(hào),則優(yōu)先級(jí)在原有的基礎(chǔ)上加1,以保證發(fā)送端發(fā)出的數(shù)據(jù)不會(huì)因?yàn)榻邮斩司彌_區(qū)不足等因素導(dǎo)致傳輸失敗,并且保證了高優(yōu)先級(jí)數(shù)據(jù)能夠得到實(shí)時(shí)處理,避免了丟包重傳,提高了傳輸效率。
本文的結(jié)果對(duì)比分析主要分為兩部分:(1)丟包率檢測(cè)。將RFCF算法和基于速率的流量管理算法在FPGA上進(jìn)行實(shí)現(xiàn),通過在相同時(shí)間內(nèi)不間斷發(fā)送相同數(shù)量的數(shù)據(jù)包進(jìn)行丟包率測(cè)試;(2)RFCF算法和同類型算法在FPGA上進(jìn)行實(shí)現(xiàn)的資源占用對(duì)比。
RFCF算法模塊測(cè)試環(huán)境為一臺(tái)PC機(jī)、VIVADO 2017.4開發(fā)環(huán)境。系統(tǒng)的工作頻率為156.25 MHz,數(shù)據(jù)位寬64 bit。通過在一定時(shí)間內(nèi)不間斷的發(fā)送4類數(shù)據(jù)包(100 μs內(nèi)突發(fā)數(shù)據(jù)包1 331個(gè),其中b包333個(gè),c包333個(gè),d包333個(gè),e包332個(gè))來仿真測(cè)試多應(yīng)用任務(wù)的發(fā)送情況。包首部為十六進(jìn)制0x10028,其中0x0001代表優(yōu)先級(jí),0x0028代表數(shù)據(jù)長(zhǎng)度。當(dāng)信號(hào)線s_axis_tvaild和s_axis_tready均為高電平時(shí),傳輸數(shù)據(jù)有效;當(dāng)信號(hào)線s_axis_tlast為高電平時(shí),代表傳輸最后一個(gè)字節(jié)的數(shù)據(jù)。
基于速率的流量管理算法仿真時(shí)序如圖5所示,當(dāng)傳輸完d數(shù)據(jù)包后,e數(shù)據(jù)包丟失,在實(shí)際傳輸過程中不僅會(huì)丟失e包,其他包也有丟失的可能。
圖5 基于速率的流量管理算法仿真時(shí)序圖
RFCF算法仿真時(shí)序如圖6所示,隨著free_buf_cnt不斷變化,prio分為4個(gè)區(qū)間,當(dāng)prio=4時(shí),m_tready_1、m_tready_2、m_tready_3和m_tready_4都為高電平,即允許所有的優(yōu)先級(jí)數(shù)據(jù)發(fā)送;當(dāng)prio=3時(shí),m_tready_1、m_tready_2和m_tready_3都為高電平,m_tready_4為低電平,即允許1、2、3優(yōu)先級(jí)數(shù)據(jù)發(fā)送;當(dāng)prio=2時(shí),m_tready_1和m_tready_2都為高電平,m_tready_3和m_tready_4為低電平,即允許1、2優(yōu)先級(jí)數(shù)據(jù)發(fā)送;當(dāng)prio=1時(shí),m_tready_1都為高電平,m_tready_2、m_tready_3和m_tready_4為低電平,即允許1優(yōu)先級(jí)數(shù)據(jù)發(fā)送。
圖6 RFCF算法仿真時(shí)序圖
本文在100 μs內(nèi)不間斷發(fā)送1 331個(gè)數(shù)據(jù)包,b、c、d、e數(shù)據(jù)包優(yōu)先級(jí)遞減?;谒俾实牧髁抗芾硭惴ê突诒疚牡腞FCF算法的每種數(shù)據(jù)包的丟包率如圖7所示。由圖7可知,在相同的測(cè)試條件下,同基于速率的流量管理算法相比,采用RFCF算法后,b丟包減少4個(gè),c丟包減少6個(gè),d丟包減少1個(gè),而e丟包增加4個(gè)。該結(jié)果表明本文算法通過犧牲低優(yōu)先級(jí)數(shù)據(jù)的發(fā)送,來保證對(duì)高優(yōu)先級(jí)數(shù)據(jù)的及時(shí)處理,避免高優(yōu)先級(jí)應(yīng)用被中斷。測(cè)試結(jié)果中,采用本文算法后,總的丟包數(shù)減少7個(gè),即RFCF算法丟包率比基于速率的流量管理算法丟包率降低了14.9%。
圖7 兩種算法各應(yīng)用丟包比例
本文將提出的算法在Xilinx的UltraScale+系列板卡上進(jìn)行硬件實(shí)現(xiàn),芯片型號(hào)為XCZU9EG- 2FFVB1156E,整塊板卡有查找表599 550個(gè),可編程邏輯觸發(fā)器548 160個(gè),DSP Slices為2 520個(gè)。表1給出了在相同的板卡資源下,基于速率的流量管理算法、文獻(xiàn)[9]算法以及RFCF算法在FPGA上實(shí)現(xiàn)時(shí)的資源占用對(duì)比情況。如表1所示,相比于文獻(xiàn)[9]算法,RFCF算法占用了更少的邏輯單元,優(yōu)化了14%的面積;相比于基于速率的流量管理算法,RFCF算法的資源占用雖然有所增加,但在面積和時(shí)序滿足工程需求的基礎(chǔ)上,丟包率降低了14%。通過綜合、布局布線等,本文所構(gòu)建整個(gè)系統(tǒng)的最差負(fù)時(shí)序裕量WNS為1.919 ns,最差保持時(shí)序裕量WHS為0.015 ns,沒有出現(xiàn)時(shí)序違例現(xiàn)象,觸發(fā)器保持時(shí)間以及建立時(shí)間的最差值也在可容納的范圍之內(nèi),從整體性能來考慮,改進(jìn)后系統(tǒng)的整體性能得到了進(jìn)一步提高。
表1 FPGA資源占用分布情況對(duì)比
針對(duì)FPGA多應(yīng)用任務(wù)數(shù)據(jù)突發(fā)傳輸?shù)膩G包問題,本文設(shè)計(jì)并實(shí)現(xiàn)了基于FPGA的多應(yīng)用任務(wù)流量管理RFCF算法。實(shí)現(xiàn)過程包含處理多應(yīng)用任務(wù)的邏輯仲裁、解包封包、解幀封幀等功能。通過功能仿真、綜合、布局布線以及生成比特流下載至FPGA進(jìn)行實(shí)際運(yùn)行等測(cè)試,驗(yàn)證了本文所構(gòu)建系統(tǒng)的可行性。未來的改進(jìn)目標(biāo)是在數(shù)據(jù)傳輸系統(tǒng)的高吞吐量和低丟包率的基礎(chǔ)上,降低系統(tǒng)對(duì)硬件資源的占用情況,并優(yōu)化資源面積。