国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種適用于TSN 端系統(tǒng)的DMA 控制器的設(shè)計與仿真分析*

2021-10-03 04:13喬廬峰陳慶華王雷淘
通信技術(shù) 2021年9期
關(guān)鍵詞:描述符緩沖區(qū)指針

杜 婧,喬廬峰,陳慶華,王雷淘

(陸軍工程大學(xué),江蘇 南京 210001)

0 引言

時間敏感型網(wǎng)絡(luò)(Time Sensitive Network,TSN)是目前國際上正在積極推動的全新網(wǎng)絡(luò)技術(shù)。TSN允許周期性與非周期性數(shù)據(jù)在同一網(wǎng)絡(luò)中傳輸,使得標(biāo)準(zhǔn)以太網(wǎng)具有確定性傳輸?shù)膬?yōu)勢[1]。典型TSN網(wǎng)絡(luò)如圖1 所示,該網(wǎng)絡(luò)由TSN 端系統(tǒng)、物理傳輸鏈路和TSN 交換機組成。TSN 端系統(tǒng)是產(chǎn)生各類網(wǎng)絡(luò)數(shù)據(jù)和對接收數(shù)據(jù)進行處理的終端設(shè)備。TSN網(wǎng)絡(luò)中的時間敏感業(yè)務(wù)以全局高精度時間同步為基礎(chǔ),對端到端時延有確定性要求[2]。TSN 端系統(tǒng)可以根據(jù)網(wǎng)絡(luò)配置對時間敏感業(yè)務(wù)按照確定的時延進行收發(fā)調(diào)度和處理[3],對于非時間敏感業(yè)務(wù),可以根據(jù)業(yè)務(wù)類別提供差異化的收發(fā)調(diào)度和處理。當(dāng)不同類別的業(yè)務(wù)在端系統(tǒng)中進行混合處理和傳輸時,端系統(tǒng)可以針對不同類別的業(yè)務(wù)流建立不同的邏輯隊列,進行差異化處理。

圖1 TSN 網(wǎng)絡(luò)結(jié)構(gòu)

TSN 網(wǎng)絡(luò)把業(yè)務(wù)分成8 個基本類別[2],其中時間敏感業(yè)務(wù)流有音頻流、視頻流、網(wǎng)絡(luò)控制流和內(nèi)部網(wǎng)絡(luò)控制流。除了時間敏感業(yè)務(wù)流之外還有最大努力流、卓越努力流、嚴(yán)苛應(yīng)用流和基礎(chǔ)數(shù)據(jù)流。時間敏感業(yè)務(wù)流在交換節(jié)點和端系統(tǒng)中收發(fā)處理優(yōu)先級最高,其他業(yè)務(wù)流收發(fā)處理優(yōu)先級 較低。

在TSN 端系統(tǒng)中,直接內(nèi)存存取(Direct Memory Access,DMA)控制器通過處理器總線在網(wǎng)絡(luò)接口和處理器內(nèi)存之間進行高速數(shù)據(jù)收發(fā)。根據(jù)處理器總線技術(shù)體制的不同,DMA 控制器的設(shè)計有很大差異,賽靈思(Xilinx)的Zynq7000 系列現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)采用片上系統(tǒng)(System on Chip)架構(gòu)設(shè)計,是實現(xiàn)TSN端系統(tǒng)較為理想的平臺。Zynq7000 系列FPGA 提供了完整易用的開發(fā)環(huán)境[4],包括高效的DMA 控制器內(nèi)核,但是所提供的DMA 控制器采用單一的循環(huán)隊列結(jié)構(gòu),無法對不同類型的業(yè)務(wù)在收發(fā)方向上進行區(qū)分調(diào)度,無法滿足對TSN 端系統(tǒng)的要求。本文設(shè)計了一種在收發(fā)方向上各支持8 個邏輯隊列并支持緩沖區(qū)共享的DMA 控制器,在保持高效數(shù)據(jù)收發(fā)的同時可支持差異化的業(yè)務(wù)調(diào)度和處理。

1 端系統(tǒng)電路結(jié)構(gòu)設(shè)計

本文所實現(xiàn)的端系統(tǒng)電路結(jié)構(gòu)如圖2 所示。端系統(tǒng)電路主要分為5 個部分,包括PL 端的接收控制電路、發(fā)送控制電路、DMA 控制器以及PS 端內(nèi)存中的接收數(shù)據(jù)隊列和緩沖區(qū)、發(fā)送數(shù)據(jù)隊列和緩沖區(qū)。

系統(tǒng)初始化時,先需要在內(nèi)存中設(shè)置多塊固定大小的接收和發(fā)送緩沖區(qū),針對每一塊收發(fā)數(shù)據(jù)緩沖區(qū)建立數(shù)據(jù)描述符[1]。數(shù)據(jù)描述符中包括對應(yīng)數(shù)據(jù)緩沖區(qū)的起始地址。在接收方向上,每個接收描述符對應(yīng)的指針被寫入接收自由指針隊列,供DMA 控制器接收使用;在發(fā)送方向上,每個發(fā)送描述符對應(yīng)的指針被寫入發(fā)送自由指針隊列,供 CPU 使用。

如圖2 所示為接收數(shù)據(jù)的流程,具體如下文 所述。

圖2 端系統(tǒng)電路結(jié)構(gòu)

(1)接收MAC 控制器先判斷到達(dá)數(shù)據(jù)幀是否為時間敏感數(shù)據(jù)幀,然后讀取數(shù)據(jù)幀的流類型、字節(jié)數(shù)等字段,并標(biāo)記數(shù)據(jù)幀的到達(dá)時間,生成指針存入接收接口隊列的指針先入先出隊列(First Input First Output)中等待DMA 控制器讀取。

(2)數(shù)據(jù)幀存入接收FIFO 后,接收MAC 控制器發(fā)送信號給DMA 控制器,表示數(shù)據(jù)幀準(zhǔn)備好被讀取。

(3)DMA 控制器中的寫內(nèi)存控制電路檢測到接收接口隊列有完整數(shù)據(jù)幀時,從接收FIFO 中讀取一個預(yù)先存儲的自由指針和對應(yīng)的接收描述符,從而獲取接收數(shù)據(jù)幀在內(nèi)存中的具體存儲位置。然后將接收數(shù)據(jù)幀以突發(fā)方式通過總線接口高效寫入內(nèi)存,并根據(jù)接收數(shù)據(jù)幀的長度更新位于內(nèi)存中的描述符信息,最后將該描述符的指針根據(jù)流類型寫入相應(yīng)的接收完成指針隊列。

(4)CPU 檢測到內(nèi)存中相應(yīng)接收指針隊列非空后,讀取完成隊列指針及其指向的描述符,根據(jù)描述符提供的起始地址和有效長度,進行數(shù)據(jù)處理。由于存在多個接收完成指針隊列,因此處理器可以對接收指針業(yè)務(wù)進行差異化處理。

圖2 為發(fā)送數(shù)據(jù)的流程,具體流程如下文所述。

(1)CPU 先把準(zhǔn)備好的數(shù)據(jù)幀存入內(nèi)存,按照流類型把發(fā)送數(shù)據(jù)幀的完成指針存入對應(yīng)的完成隊列,等待DMA 讀取,CPU 修改PL 端DMA 控制器內(nèi)的完成指針隊列狀態(tài)寄存器,DMA 控制器獲取到內(nèi)存中的完成指針隊列狀態(tài)。。

(2)DMA 控制器中的讀內(nèi)存控制電路檢測到相應(yīng)隊列中有待發(fā)送數(shù)據(jù)幀,優(yōu)先讀取高優(yōu)先級完成指針隊列。讀內(nèi)存控制電路通過總線讀取內(nèi)存中的完成指針及其對應(yīng)的描述符,得到待發(fā)送數(shù)據(jù)幀的起始地址和有效長度。

(3)DMA 控制器以突發(fā)的方式從內(nèi)存中讀取待發(fā)送數(shù)據(jù)幀。DMA 控制器把待發(fā)送數(shù)據(jù)幀寫入發(fā)送接口隊列的發(fā)送數(shù)據(jù)FIFO 中并生成相應(yīng)的指針,發(fā)送MAC 控制電路從FIFO 中讀出數(shù)據(jù)幀后發(fā)出。內(nèi)存中的FQ—PTR 為存放自由指針的隊列,PQ0—PTR 到PQ7—PTR 為存放完成指針的 隊列。

為了滿足TSN 端系統(tǒng)對不同類型業(yè)務(wù)的差異化處理和調(diào)度需求,本文設(shè)計了一種支持多個邏輯隊列且支持發(fā)送和接收緩沖區(qū)共享的多通道DMA 控制器。在接收方向上,接收管理電路將收到的混合業(yè)務(wù)流分類,DMA 控制器首先給每個數(shù)據(jù)幀分配1 個描述符,描述符中包含數(shù)據(jù)幀基本信息,并且DMA 控制器給不同類型的數(shù)據(jù)幀提供差異化服務(wù),如DMA 控制器內(nèi)部有8 個隊列,分別對應(yīng)8 個不同的流類型,其中優(yōu)先級最高的是時間敏感型數(shù)據(jù)幀。DMA 控制器把不同類型的數(shù)據(jù)幀存入內(nèi)存后,把其對應(yīng)的完成指針存入完成指針隊列[5],CPU 根據(jù)需要從完成隊列中讀取指針,再根據(jù)指針指向的內(nèi)存塊讀取數(shù)據(jù)。時間敏感數(shù)據(jù)幀和非時間敏感數(shù)據(jù)幀在DMA 控制器內(nèi)部獨立排隊,保證時間敏感數(shù)據(jù)幀能夠被處理。在發(fā)送方向上,CPU 準(zhǔn)備好待發(fā)送的數(shù)據(jù)幀,時間敏感型和非時間敏感型待發(fā)送數(shù)據(jù)幀在內(nèi)存中獨立排隊,內(nèi)存中也有8 個完成指針隊列。DMA 控制器優(yōu)先從內(nèi)存中讀取高優(yōu)先級隊列的完成指針,傳送給下級電路,保證時間敏感數(shù)據(jù)幀能優(yōu)先發(fā)送。在內(nèi)存和DMA 控制器中,根據(jù)流類型把完成指針存放在不同的完成隊列,在接收方向或者發(fā)送方向上,不同業(yè)務(wù)流的描述符和內(nèi)存塊是共享的[5],滿足混合業(yè)務(wù)流的傳輸需求的同時提高了資源利用率。

多通道DMA 控制器可以完成包括時間敏感型數(shù)據(jù)流在內(nèi)8 個混合業(yè)務(wù)流的收發(fā)操作,接收緩沖區(qū)和發(fā)送緩沖區(qū)被8 類業(yè)務(wù)共享,緩沖區(qū)中存儲業(yè)務(wù)類別由緩沖區(qū)對應(yīng)指針的隊列決定,有效提高緩沖區(qū)利用率,降低CPU 負(fù)荷。

2 多隊列DMA 控制器的數(shù)據(jù)結(jié)構(gòu)設(shè)計

在TSN 端系統(tǒng)中,DMA 控制器[3]通過高級可擴展接口(Advanced eXtensible Interface,AXI)[2]在內(nèi)存和本地緩沖區(qū)之間高速收發(fā)數(shù)據(jù),其支持的隊列結(jié)構(gòu)如圖3 所示。

圖3 DMA 控制器內(nèi)部結(jié)構(gòu)

2.1 DMA 控制器接收數(shù)據(jù)處理流程

DMA 控制器數(shù)據(jù)接收處理流程如圖6 所示,在接收方向上的處理流程具體如下文所述。

圖6 接收數(shù)據(jù)流程

(1)在TSN 端系統(tǒng)接收數(shù)據(jù)之前,先需要進行初始化操作。CPU 在內(nèi)存中設(shè)置數(shù)據(jù)緩沖區(qū),把數(shù)據(jù)緩沖區(qū)分成固定大小的內(nèi)存塊,每個內(nèi)存塊對應(yīng)1 個描述符,1 個描述符對應(yīng)1 個指針。指針和描述符在CPU 和DMA 控制器之間通信,用來指示數(shù)據(jù)幀在內(nèi)存中存放的位置和數(shù)據(jù)幀的基本信息。描述符數(shù)據(jù)結(jié)構(gòu)如圖4 所示,描述符中存放著對應(yīng)內(nèi)存塊在內(nèi)存中起始地址和有效位,以及對應(yīng)數(shù)據(jù)幀的流類型、字節(jié)數(shù)和到達(dá)時間等。指針有自由指針和完成指針兩種。自由指針和完成指針的數(shù)據(jù)結(jié)構(gòu)如圖5 所示,自由指針指向空白描述符和空白內(nèi)存塊在內(nèi)存中的起始地址,自由指針存放在自由指針隊列中。完成指針存放著完成描述符在內(nèi)存中的起始地址和該完成指針對應(yīng)數(shù)據(jù)幀的流類型。完成指針存放在完成隊列中,根據(jù)數(shù)據(jù)幀的流類型,劃分出8 個完成指針隊列,其中時間敏感型數(shù)據(jù)幀優(yōu)先級最高。自由指針隊列和完成指針隊列有首尾指針和讀寫指針,在內(nèi)存中構(gòu)成一個FIFO 隊列。自由指針或完成指針隊列首尾指針相同時,隊列為空;首尾指針不同時,隊列中存在可用的自由指針或完成指針。讀指針指向當(dāng)前隊列中即將被讀取的指針,寫指針指向該隊列即將被寫入指針的地址。DMA控制器內(nèi)部的隊列狀態(tài)寄存器存放著內(nèi)存中自由指針隊列和完成指針隊列的首尾和讀寫指針。初始化結(jié)束時,內(nèi)存中的自由指針隊列為滿,8 個完成指針隊列為空,同時CPU 修改DMA 控制器內(nèi)部的各指針隊列的指針寄存器。

圖4 描述符數(shù)據(jù)結(jié)構(gòu)

圖5 指針數(shù)據(jù)結(jié)構(gòu)

(2)DMA 控制器從內(nèi)存中讀取多個自由指針存入DMA 控制器內(nèi)部FIFO。接收控制電路準(zhǔn)備好數(shù)據(jù)幀后,DMA 控制器先把數(shù)據(jù)寫入自由指針指向的內(nèi)存塊,修改描述符,根據(jù)數(shù)據(jù)幀的流類型,把完成指針存入對應(yīng)的完成指針隊列,同時修改DMA 控制器中該隊列的寫指針,指向下一個完成指針的寫入位置。

(3)CPU 查詢DMA 控制器內(nèi)部的8 個完成指針隊列信息,判斷各個完成指針隊列中是否有待處理的數(shù)據(jù)幀。按照優(yōu)先級順序,先讀取高優(yōu)先級完成指針隊列中的指針,然后讀取相應(yīng)的描述符,處理用戶數(shù)據(jù)。

(4)數(shù)據(jù)處理完成后,CPU 將該指針寫入接收自由指針隊列,并同時修改內(nèi)存和DMA 控制器中自由指針隊列的寫指針,使得接收緩沖區(qū)可以循環(huán)利用。

2.2 DMA 控制器發(fā)送數(shù)據(jù)處理流程

DMA 控制器數(shù)據(jù)發(fā)送處理流程如圖7 所示,在發(fā)送方向的具體流程如下所述。

圖7 發(fā)送數(shù)據(jù)流程

(1)發(fā)送數(shù)據(jù)前端系統(tǒng)也需要進行初始化操作,具體操作方式與接收數(shù)據(jù)狀態(tài)初始化過程相似。CPU 在內(nèi)存中設(shè)置數(shù)據(jù)緩沖區(qū),給緩沖區(qū)分配描述符,給描述符建立指針,修改DMA 控制器內(nèi)部隊列狀態(tài)寄存器。

(2)初始化結(jié)束后,在發(fā)送方向上,CPU 需要發(fā)送數(shù)據(jù)時,從發(fā)送自由指針隊列讀取一個自由指針,然后讀出對應(yīng)的描述符。CPU 將待發(fā)送數(shù)據(jù)寫入描述符指向的緩沖區(qū),然后根據(jù)業(yè)務(wù)類型把完成指針寫入相應(yīng)的待發(fā)送指針隊列,修改該完成隊列的寫指針,同時修改DMA 控制器內(nèi)部的相應(yīng)完成指針隊列的寫指針。

(3)DMA 控制器查詢8 個完成指針隊列信息,檢測到內(nèi)存中某個完成指針隊列有待發(fā)送的數(shù)據(jù)幀,準(zhǔn)備發(fā)起對內(nèi)存的讀操作。DMA 控制器通過AXI 總線一次可以讀取多個完成指針,并讀取對應(yīng)的描述符;根據(jù)描述符信息讀取內(nèi)存塊中的數(shù)據(jù)幀,通過網(wǎng)絡(luò)端口發(fā)出。

(4)DMA 控制器把已發(fā)送數(shù)據(jù)對應(yīng)的指針以突發(fā)方式寫入內(nèi)存中的發(fā)送自由指針隊列,修改內(nèi)部發(fā)送自由指針隊列的寫指針寄存器,使發(fā)送數(shù)據(jù)緩沖區(qū)可以循環(huán)利用。

3 仿真分析

圖8、圖9 給出了DMA 控制器從內(nèi)存中讀取數(shù)據(jù)并進行發(fā)送的基本流程。仿真實驗中,在發(fā)送方向上,配置了128 個大小為512 bits 的內(nèi)存塊,相應(yīng)地,配置了128 個大小為128 bits 的描述符以及128 個對描述符對應(yīng)的自由指針。此外,完成隊列分成4 個子隊列,每個完成指針為32 bits,每個子隊列有32 個完成指針。

圖8 自由指針隊列的讀取和寫入

圖9 數(shù)據(jù)發(fā)送過程中完成指針隊列的寫入和讀出

發(fā)送數(shù)據(jù)時,發(fā)送過程對自由隊列的讀取和寫入過程如圖8 所示,CPU 對完成指針隊列的寫入操作和DMA 控制器對完成指針隊列的讀出操作如圖9 所示。其中,圖8 中①處是自由指針隊列初始化完成之后的指針值,自由指針中存儲著描述符和內(nèi)存塊的起始地址,自由指針隊列初始化之后,CPU先從自由指針隊列讀取一個自由指針。圖8 中②和圖9 中①、③是CPU 從自由指針隊列讀取自由指針的仿真波形。

CPU 寫入數(shù)據(jù)幀和描述符之后,根據(jù)待發(fā)送數(shù)據(jù)幀的優(yōu)先級把完成指針寫入對應(yīng)的完成指針子隊列,如圖9 中②所示,CPU 把一個數(shù)據(jù)幀寫入內(nèi)存后對應(yīng)的完成指針被寫入優(yōu)先級為4(最高優(yōu)先級)的完成指針子隊列中,等待被DMA 控制器讀取。DMA 控制器檢測到優(yōu)先級為4 的完成指針子隊列非空,如圖9 中④所示,DMA 控制器從該完成指針隊列讀取一個完成指針,然后獲取對應(yīng)描述符的起始地址,通過描述符獲得對應(yīng)內(nèi)存塊的起始地址,開始讀取并發(fā)送數(shù)據(jù)。數(shù)據(jù)讀取完成之后,DMA控制器把指針寫入自由指針隊列,如圖9 中⑤和圖8 中③所示。

4 結(jié)語

針對TSN 網(wǎng)絡(luò)端系統(tǒng)設(shè)計需求,基于Xilinx Zynq7000 系列FPGA,本文設(shè)計了支持多個邏輯隊列和共享緩沖區(qū)的DMA 控制器。在發(fā)送方向上,CPU 可以根據(jù)業(yè)務(wù)流類別在內(nèi)存中建立8 個指針隊列,DMA 控制器可以按優(yōu)先級進行業(yè)務(wù)發(fā)送;在接收方向上,DMA 控制器可以根據(jù)業(yè)務(wù)流類別將接收數(shù)據(jù)的指針寫入8 個邏輯隊列,供CPU 進行差異化處理。本方案可以支持時間敏感業(yè)務(wù)流和其他業(yè)務(wù)流混合傳輸并為不同業(yè)務(wù)流提供所需的服務(wù)質(zhì)量(Quality of Service,QoS)保證。

猜你喜歡
描述符緩沖區(qū)指針
垂懸指針檢測與防御方法*
基于AKAZE的BOLD掩碼描述符的匹配算法的研究
歐洲共同語言參考標(biāo)準(zhǔn)在中國高校學(xué)術(shù)英語寫作教學(xué)適用性的研究:可理解性,可行性和有用性
基于深度學(xué)習(xí)的局部描述符
串行連續(xù)生產(chǎn)線的可用度與緩沖庫存控制研究*
基于ARC的閃存數(shù)據(jù)庫緩沖區(qū)算法①
一種基于PCIE總線的改進分散集聚DMA的設(shè)計
為什么表的指針都按照順時針方向轉(zhuǎn)動
初涉緩沖區(qū)
淺析C語言指針