999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于FPGA 的PCIe 3.0 高速DMA 控制器實現

2022-07-14 11:26:32毋高峰
科技與創新 2022年13期

毋高峰

(焦作師范高等專科學校,河南 焦作 454000)

1 PCI Express 總線概述

PCI Express 總線(以下簡稱“PCIe”)總線采用點對點串行連接方式,使用高速差分信號線傳輸數據,提高了抗干擾能力,保障了數據傳輸的完整性和可靠性,同時也可以根據設計性能需求,將一個PCIe 物理鏈接靈活地配置成x1、x2、x4、x8、x16 及x32 多種鏈路模式,以及PCIe 1.0、PCIe 2.0、PCIe 3.0、PCIe 4.0和PCIe 5.0 不同的比特率[1]。其層次結構分明,從上到下分為事務傳輸層(Transaction Layer)、數據鏈路層(Data Link Layer)和物理層(Physical Layer),PCIe層次結構如圖1 所示。事務傳輸層將設備核心層的數據和請求封裝成TLP(Transaction Layer packet)數據包發送給數據鏈路層,并解析出來自數據鏈路層的TLP 數據包上報給設備核心層;數據鏈路層通過發送和接收DLLP(Data Link Layer packet)實現Ack/Nak應答處理機制,實現數據包的鏈路層校驗和流控管理,同時將來自事務傳輸層的TLP 添加前綴和后綴發送到物理層,將來自物理層的數據包刪除前綴和后綴上報給事務傳輸層;物理層完成數據流的加解擾、編解碼和串并轉換,實現將數據鏈路層的數據包以比特流的形式通過物理鏈路發送到對端物理層,并將來自對端物理層的比特流轉換成數據包上報給數據鏈路層,同時物理層還要負責鏈路的協商。

圖1 PCIe 層次結構圖

2 事務傳輸層協議

PCIe 總線是基于請求和響應的通信機制,設備A要訪問設備B 的內存,則設備A 要向設備B 發送一個請求,而設備B 需要一個完成向設備A 反饋請求結果。作為PCIe總線結構最高層的事務傳輸層則是負責請求和響應TLP 的生成,一個完整的TLP 由1 個或者多個TLP Prefix、TLP 頭(Header)、1 個可選數據負載(Payload)以及1 個可選的端到端CRC(ECRC)組成[2]。Header 指定事務類型、優先級、路由信息及其它數據包特征,TLP Header 如圖2 所示,數據負載是TLP 要傳輸的數據,長度最小為0,最大為1 024 DW,而ECRC 是對TLP 傳輸正確性的校驗。

圖2 TLP Header 數據格式

3 循環隊列

為了充分利用PC 內存,減少數據傳輸延時,PC軟件程序采用循環隊列緩存DMA 讀寫的關鍵信息,DMA 控制器讀取循環隊列,開啟DMA 的讀寫操作,進行數據傳輸。循環隊列是由多個元素組成的一個首尾相連圓環,如圖3 所示,在循環隊列結構中,當隊列的最后一個存儲單元已被使用,想要再插入新的元素時,只有當隊列的第一個存儲單元空閑時,才可將新元素插入到第一個存儲單元,即將隊列的第一個存儲作為隊尾。循環隊列是通過2 個指針front 和rear 判斷隊列的空滿防止隊列溢出的。

圖3 循環隊列示意圖

4 DMA 控制器設計

DAM 控制器是基于PCIe IP 硬核,添加對事物傳輸層數據包TLP 的收發控制,來實現FPGA 和PC 之間的數據高速傳輸。本設計是由PC 申請2 個獨立的內存空間,搭建出DMA 的讀寫循環隊列,循環隊列的front 和rear 指針分別由FPGA 和PC 控制。在進行數據傳輸時,PC 在循環隊列中插入DMA 讀寫的描述符,并更新循環隊列指針,FPGA 通過存儲器讀TLP 獲取描述符,發起DMA 讀寫操作實現數據從PC 到FPGA之間的數據傳輸,數據傳輸完成后,FPGA 更新循環隊列指針,結束此次DMA 讀寫操作。

4.1 DMA 讀操作實現數據從PC 到FPGA 的傳輸

PC 申請一段物理地址連續的內存空間[3],填充需要發送的數據,將數據長度和內存地址封裝成DMA讀描述符插入到DMA 讀隊列中,DMA 讀描述符如圖4 所示[4],更新DMA 讀隊列front 指針,并發送存儲器寫請求TLP 將front 指針發送給FPGA;FPGA 接收到DMA 讀隊列的front 指針,封裝存儲器讀請求TLP,將DMA 讀描述符從PC 中讀出,然后解析出DMA 讀描述符中的內存地址和數據長度,按照PCIe 總線協商的最大讀取長度,向PCIe 總線發起一個或多個存儲器讀請求TLP,接收讀完成TLP 將數據從內存中搬移到FPGA;數據搬移完成后,FPGA 更新DMA 讀隊列rear指針,發起DMA 寫請求,TLP 將rear 指針發送給PC,完成了一次PC 到FPGA 的數據傳輸。

圖4 DMA 讀描述符數據格式

4.2 DMA 寫操作實現數據從FPGA 到PC 的傳輸

PC 申請一段物理地址連續的內存空間,將內存地址封裝成DMA 寫描述符插入到DMA 寫隊列中,DMA寫描述符如圖5 所示,更新DMA 寫隊列front 指針,并發送存儲器寫請求TLP 將front 指針發送給FPGA;FPGA 接收到DMA 寫隊列的front 指針,封裝存儲器讀請求TLP,將DMA 寫描述符從PC 中讀出,緩存到FIFO 中;FPGA 需要發送數據時,將DMA 寫描述符從FIFO 中讀出并解析,按照PCIe 總線協商的最大負載能力,向PCIe 總線發起一個或多個存儲器寫請求TLP,將數據寫入到PC 申請好的內存中;在數據包完全發送后,FPGA 更新DMA 寫隊列rear 指針,并發起DMA 寫請求TLP 將rear 指針發送給PC,通知PC 數據傳輸完,完成了一次FPGA 到PC 的數據傳輸。

圖5 DMA 寫描述符數據格式

5 DMA 控制器硬件實現

根據上述的DMA 控制器的設計方案,硬件設計采用DMA 讀操作和DMA 寫操作2 個單獨的通道,如圖6 所示,來實現DMA 控制器,共分為TLP 接收模塊、TLP 發送模塊、存儲器讀控制模塊、存儲器寫控制模塊、DMA 讀隊列讀取模塊、DMA 讀數據模塊,DMA 寫隊列讀取模塊和DMA 寫數據模塊[5]。

圖6 DMA 控制器硬件實現框圖

TLP 接收模塊實現對來自PCIe IP 硬核事務傳輸層接口TLP 的接收控制,并對TLP 數據包進行解析。該模塊有2 個單獨的控制通道CQ 接口和RC 接口[6],CQ 接口通道接收PC 到FPGA 的存儲器寫TLP,實現對FPGA 內部的寄存器的配置;RC 接口通道接收PC到FPGA 的讀完成包TLP,并根據TLP 攜帶的tag 號,將讀完成包的數據發送給存儲器讀的請求者,實現將數據從內存到FPGA 的搬移。

TLP 發送模塊實現向PCIe IP 硬核事務傳輸層接口的TLP 發送控制。該模塊分別從存儲器讀控制模塊和存儲器寫控制模塊獲取已封裝完成的TLP 數據包,向PCIe 總線發送存儲器讀寫請求。

存儲器讀控制模塊實現存儲器讀請求TLP 的封裝和發送控制,該模塊輪詢讀取DMA 讀隊列模塊、DMA讀數據模塊和DMA 寫隊列模塊FIFO 中的數據,解析出存儲器讀請求TLP 所需的內存地址和數據長度,添加tag 號,封裝成存儲器讀請求TLP,傳輸給TLP 發送模塊,并將存儲器讀的請求者和對應的tag 號記錄下來,發送給TLP 接收模塊。

存儲器寫控制模塊實現存儲器寫請求TLP 的封裝和發送控制,該模塊獲取DMA 寫數據模塊FIFO 中的數據,獲取存儲器寫請求TLP 的內存地址和數據長度以及要發送的數據,封裝成存儲器寫請求TLP,發送給TLP 發送模塊。

DMA 讀隊列讀取模塊實現讀取DMA 讀隊列的信息生成,該模塊查詢DMA 讀隊列的空滿狀態,判斷是否需要發起DMA 讀操作,當DMA 讀隊列不空時,則可以生成存儲器讀信息,發起存儲器讀請求,獲取讀描述符,將描述符緩存到FIFO 中。

DMA 讀數據模塊實現DMA 讀數據信息的生成和DMA 讀隊列rear 指針的控制,該模塊讀取DMA 讀隊列讀取模塊中的描述符緩存FIFO,解析出描述符中的數據地址和長度,并對數據長度進行最大為512 字節分片處理,然后依次將數據地址和長度封裝成DMA讀的信息寫入FIFO 中,發送給存儲器讀控制模塊,其中每寫入一個DMA 讀信息,地址要遞增512,數據長度遞減512;當讀取的數據依次從TLP 接收模塊接收完成后,則將DMA 讀隊列rear 指針遞增1,并主動發起一次存儲器寫TLP 將rear 指針發送給PC。

DMA 寫隊列讀取模塊實現讀取DMA 寫隊列的信息生成,該模塊查詢DMA 寫隊列的空滿狀態,判斷是否需要發起DMA 寫操作,當DMA 寫隊列不空時,則可以生成存儲器讀信息,發起存儲器讀請求,獲取寫描述符,將描述符緩存到FIFO 中。

DMA 寫數據模塊實現DMA 寫數據信息的生成和DMA 寫隊列rear 指針的控制,該模塊讀取DMA 寫隊列讀取模塊中的描述符緩存FIFO,解析出描述符中的數據地址,并對要發送的數據長度進行最大為256 字節分片處理,然后依次將數據地址、長度和數據封裝成DMA 寫的信息寫入FIFO 中,發送給存儲器寫控制模塊,其中每寫入一個DMA 寫信息,地址要遞增256,數據長度遞減256;當待發送數據完整發送后,DMA寫隊列rear 指針遞增1,并主動發起一次存儲器寫TLP將rear 指針發送給PC。

6 DMA 控制器驗證

控制器的驗證采用的是Xilinx XCKU040 FPGA,PC 采用DELL 7050 臺式主機,其中FPGA 開發環境為Vivado 2018.3,本設計采用PCIe 3.0x4 IP 硬核,用戶時鐘為250 MHz,用戶數據位寬為128 bit,理論上最大速率為32 Gbps。本設計采用LINUX 系統,搭建PCIe 測試的上位機程序,經大量的測試表明,DMA控制器的穩定性得以驗證;性能測試采用的是2 KB 大小的隨機數據,通過計算固定時間內傳輸的數據包個數計算出該控制器的DMA 讀操作帶寬為23.8 Gbps,DMA 寫操作帶寬為25.2 Gbps。

7 總結

本文闡述了DMA 控制器的設計和實現方法,提出了一種基于PCIe 3.0 IP 硬核的DMA 高速傳輸方案,通過對DMA 讀寫操作的控制的實現,完成了FPGA和PC 之間數據的高速傳輸,本設計可為數據存儲、高清視頻傳輸和信息安全等采用CPU+FPGA 架構方案的產品提供良好的參考。

主站蜘蛛池模板: 久久香蕉国产线看观看亚洲片| 国产日本欧美在线观看| AV片亚洲国产男人的天堂| 爱色欧美亚洲综合图区| 欧美成人第一页| 国产性生交xxxxx免费| 久久久亚洲色| 亚洲精品动漫| 久久国产精品国产自线拍| 亚洲一区二区三区国产精华液| 91福利免费| 欧美成人国产| 呦系列视频一区二区三区| 又粗又大又爽又紧免费视频| 国产人成午夜免费看| 久久激情影院| 高清无码不卡视频| 国产精品无码AV中文| 久久www视频| 日本午夜精品一本在线观看| 亚洲国产综合第一精品小说| 日韩视频福利| 日韩一区精品视频一区二区| 欧美精品高清| 国产精品自在在线午夜区app| 天天色综网| 欧美一区二区福利视频| 国产95在线 | 91麻豆精品国产91久久久久| 尤物特级无码毛片免费| 精品国产免费观看| 91黄视频在线观看| 日韩中文无码av超清| 亚洲妓女综合网995久久| JIZZ亚洲国产| 亚洲日韩AV无码精品| 色婷婷亚洲综合五月| 99精品在线看| 亚洲无码精品在线播放| 婷婷丁香在线观看| 国产精品自在线拍国产电影| 色首页AV在线| 久久久久亚洲AV成人人电影软件| 国产精品香蕉在线观看不卡| 国产在线视频自拍| aaa国产一级毛片| 日本免费a视频| 亚洲国产理论片在线播放| 色精品视频| 亚洲男女天堂| 992tv国产人成在线观看| 1024你懂的国产精品| 亚洲精品成人片在线播放| 亚洲成A人V欧美综合| 国产精品午夜福利麻豆| 久久久久国产精品免费免费不卡| 国产日韩精品欧美一区灰| 91精品伊人久久大香线蕉| 欧美午夜在线视频| 亚洲手机在线| 国产日韩欧美中文| 人妻精品久久久无码区色视| 日韩无码白| 久久精品无码国产一区二区三区| 一区二区三区高清视频国产女人| 永久天堂网Av| 久久一色本道亚洲| 国产99视频精品免费视频7| 国产午夜福利片在线观看| 亚洲欧美不卡| 亚洲Va中文字幕久久一区 | 91精品啪在线观看国产91九色| 日韩最新中文字幕| 毛片国产精品完整版| 国产成人亚洲综合A∨在线播放| 亚洲国产精品成人久久综合影院| 五月婷婷激情四射| 另类重口100页在线播放| 亚洲欧州色色免费AV| 亚洲一级毛片免费观看| 日韩精品一区二区三区免费在线观看| 国产乱人伦AV在线A|