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

基于FPGA的實時多通道DMA系統設計

2015-08-01 10:07:02蘇永海
成都大學學報(自然科學版) 2015年3期
關鍵詞:用戶設備設計

賀 孟,蘇永海

(中國電子科技集團公司 第三十研究所,四川 成都 610041)

0 引 言

隨著SoC 芯片性能的提高,處理器系統模塊間的數據傳輸能力是提升系統性能的關鍵.在數據傳輸系統中通常采用直接存儲器存取,即DMA 傳送方式,可以最大限度提高數據傳輸的效率[1].一般的DMA 控制器結構專用性強而擴展性不足,面對系統規模的不斷擴大和系統業務的多樣化,需要一種多通道DMA 控制器結構以使系統設計能夠適應各種帶寬需求的業務.隨著可編程邏輯技術的發展,基于IP 核復用技術的IP 核設計成了提高可編程邏輯設計效率的重要組成部分[2].本研究針對工作中的實際應用,結合IP 核復用技術,重點介紹了一種基于FPGA 的自動仲裁多通道無緩存結構DMA 控制器IP 核的設計方法,并給出了Linux 下該IP 核驅動的設計,從而完整地實現了一個多通道無延遲DMA 系統.

1 DMA 控制器總體結構設計

1.1 總體結構

DMA 控制器是為使用32 位PCI 總線的SoC 項目設計的,在設計中考慮到對不同系統的移植,并采用了IP 復用的設計思想.該控制器向處理器單元申請總線控制權,用DMA 方式完成存儲器和外設之間的數據傳輸.DMA 控制器最多8 個獨立通道,每個通道獨立編程,通道之間支持用戶定義優先級和round robin 仲裁,通道與總線間無緩存無延遲傳輸,每個通道支持收發數據包完整性檢查和包計數.

DMA 控制器的總體結構如圖1 所示.

圖1 DMA 控制器總體框圖

各功能模塊說明如下:

1)DMA 通道模塊.完成通道內的DMA 傳輸請求和判斷以及與用戶邏輯和接口.

2)DMA 仲裁模塊.對所有DMA 通道模塊發送的DMA 請求進行仲裁,根據仲裁結果選擇哪個通道占用總線.

1.2 工作原理

DMA 控制器從總線的占用角度分2 種工作狀態:空閑狀態和工作狀態.當無通道發出數據傳輸請求時,就處于空閑狀態,此時由處理器占用總線對DMA 控制器內部寄存器進行讀寫操作.當通道發出數據傳輸請求后,就處于工作狀態,此時DMA 控制器占用總線直接對內存進行數據操作.

DMA 控制器的工作機制采用消息循環隊列機制,即DMA 控制器每個通道按操作內存的方向設置讀寫2 個消息隊列,隊列元素為描述數據緩存區信息的描述符(Buffer Descriptor,BD),隊列元素存儲在內存中,BD 信息符由數據地址、數據長度、標志位組成.通常,每個隊列定義以下寄存器由處理器在空閑狀態時操作:隊列長度寄存器(BDL),讀寫緩存區信息基地址寄存器(BDA),緩存區信息隊列頭部位置寄存器(BDH),緩存區信息隊列尾部位置寄存器(BDT).

1)DMA 控制器寫內存時,首先處理器初始化配置BDA 寄存器和BDL 寄存器,此時BDH 和BDT 初始值都為0,表示內存無空余緩存區.當處理器增加一個空余緩存區時將該緩存區在內存中的地址轉換為總線地址寫入BD 中,然后更新BDT 的值,此時DMA 控制器檢測到BDH 不等于BDT,即知道已有空閑緩存區,這時DMA 控制器檢測用戶邏輯有無DMA 傳輸請求,有則向DMA 仲裁器發出總線占用請求,DMA 仲裁器響應后,該DMA 控制器首先按BDA 加偏移量定義的地址讀取內存中的BD 信息符,然后將用戶數據寫入該BD 信息符定義的數據地址對應的數據塊中,最后將用戶數據長度寫到BD的數據長度部分,同時更新標志位中的完成以及狀態標志,然后將BDH 值加1.整個流程如圖2(A)所示.

2)DMA 控制器讀內存時,首先處理器初始化配置BDA 寄存器和BDL 寄存器,此時BDH 和BDT 初始值都為0,表示內存無待讀緩存區.當處理器增加一個待讀緩存區時,將該緩存區在內存中的地址轉換為總線地址和數據長度寫入BD 中,然后更新BDT 的值,此時DMA 控制器檢測到BDH 不等于BDT,即知道已有待讀數據在緩存區,這時DMA 控制器檢測用戶邏輯是否允許DMA 傳輸請求,有則向DMA 仲裁器發出總線占用請求,DMA 仲裁器響應后,該DMA 控制器首先按BDA 加偏移量定義的地址讀取內存中的BD 信息符,然后到按照BD 信息符中的數據長度將該BD 信息符定義的數據區地址將待讀數據傳輸給用戶邏輯中,最后更新標志位中的傳輸完成標志同時將BDH 值加1.整個流程如圖2(B)所示.

1.3 功能模塊詳述

1.3.1 DMA 通道模塊.

DMA 通道模塊設計如圖3,分為配置管理單元、用戶接口單元、總線處理單元、監控統計單元.

1)配置寄存器單元.在空閑狀態接收處理器初始化指令,讀寫BDL/BDA/BDH/BDT 寄存器,并將寄存器信息傳遞給總線處理單元.

2)總線處理單元.接收配置寄存器單元BDH 和BDT 信息,以及用戶邏輯處理單元的空滿標志信息,決定是否向仲裁模塊發起DMA 讀寫請求并決定DMA 操作的順序,核心如圖4 所示狀態機.

圖2 DMA 控制器工作流程圖

圖3 DMA 控制器通道模塊原理框圖

3)狀態說明.Idle 為初始態,Request 為請求態,Rbd-r0 為寫內存讀BD 信息符態,Rbd-w1 為寫內存寫BD 信息符態,Rbd-wd 為寫內存數據態,Tbd-r0 為讀內存讀BD 信息符態;Tbd-w1 為讀內存寫BD 信息符態;Tbd-rd 為讀內存數據態.

4)用戶邏輯處理單元.設計供用戶使用的標準接口,該單元不帶任何緩存結構,在讀寫內存數據態時直接將總線接口時序匹配為帶數據起始標志的異步FIFO 接口和帶讀寫使能,讀寫地址的異步雙口RAM 接口,數據起始標志同時作為數據幀完整性校驗的指示.用戶邏輯接口時序圖如圖5.

圖4 總線處理狀態機

圖5 用戶邏輯接口時序圖

5)監控統計單元.監測總線端和用戶端的數據收發,對兩側的數據包數進行統計.

1.3.2 DMA 仲裁模塊.

仲裁模塊對所有通道的占用總線請求進行排隊仲裁,根據策略決定通道的響應順序以及和總線接口的匹配,在這里指PCI32 接口的匹配.圖6 為round robin 的設計原理圖.

該設計的特點為通道切換無延遲,在傳輸一個通道數據時已經解算出下一個將要占用總線的通道,不浪費總線帶寬,并與通道模塊的無緩存結構結合,該IP 核在總線到用戶數據傳輸上無延遲,保證了實時性.

2 DMA控制器的IP化

圖6 仲裁單元round robin 設計原理圖

設計IP 化的關鍵點是在硬件上對用戶和總線接口提供標準統一的接口,在設計流程上對設計進行參數化和腳本化,這樣就只需使用邏輯綜合腳本改變參數就可綜合得出適應不同的使用場景的網表文件.

2.1 接口的標準化設計

接口的標準化在用戶端提供帶數據幀起始標志和數據有效指示的FIFO 接口,也提供帶地址信息的雙口RAM 接口,這樣用戶既可只用簡單的FIFO接口緩存數據,也可按需求直接按地址直接處理數據.

在總線端直接根據腳本指定使用標準的總線類型,本研究中使用的是PCI32 位總線.

2.2 參數化設計

參數化設計是設計IP 化的必要點,將設計中的功能點和性能點提出并參數化,用戶只需按照自己的需求使用腳本改變這些參數,即可綜合出適應不同場景的IP 核.下面是一部分描述參數的VHDL 代碼及其說明,描述參數的代碼全部在一個庫文件中編寫,以利于邏輯綜合腳本調用修改.

constant c-family:string:=spartan6;

指定使用FPGA 型號為Spartan-6

constant bus-type:string:=pci;

前些日子,老伴突然暈倒,住院不到一個月就去世了。聽醫生說,老伴早就有發病的征兆,只是誰都沒在意,耽誤了治療。三個女兒為她們疏忽老爸的生活愧疚不已,也對我平時對老伴的不管不問很是生氣。

指定總線類型為PCI 總線.

constant bus-datawid-bits:integer:=32;

指定總線寬度為32 bit.

constant dmacfg-addrwid-bits:integer:=6;

指定配置寄存器地址寬度為6 bit.

constant transfer-lengthwid-bits:integer:=9;

指定配置寄存器地址寬度為6 bit.

constant dmastate-datawid-bits:integer:=16;

constant dma-channel-number:integer:=4;

指定通道數為4 個.

圖7 為dma 通 道數dma-channel-number =4時匹配PCI32 的synplify 綜合視圖.

圖7 DMA 控制器IP 核綜合視圖

3 Linux下DMA驅動的實現

3.1 Linux設備驅動程序概述

在Linux 系統中,針對不同的外部設備,其驅動程序的框架結構是一致的.通常,Linux 系統分為內核空間與用戶空間,設備驅動程序是工作在內核空間的,它通過特定的方式與用戶空間交換數據.Linux 系統的設備可分為字符設備、塊設備和網絡設備3 種類型.所有的設備驅動程序都支持文件操作接口.因此,每個設備都可以當作是文件系統中的一個文件來進行訪問[3].Linux 系統分為3 層:應用層、內核層和物理層.應用層主要運行與應用相關的應用程序,內核層主要是Linux 操作系統運行的空間,包括驅動程序也運行在該層,物理層就是各種物理外設,應用程序要訪問外部的設備必須通過驅動程序來實現.

Linux 操作系統中,所有的外圍設備都是通過文件節點來進行訪問的.Linux 的虛擬文件系統為各種不同文件系統提高了統一的訪問接口,包括PCI 外圍設備.通過這些接口,應用程序可以直接使用open、close、read、write 和ioctl 等系統調用來對各種設備進行訪問和控制,而為一個外圍設備提供這些系統調用的響應函數正是該設備驅動程序的責任.

Linux 將所有外部設備看成是一類特殊文件,稱之為“設備文件”,設備驅動程序則可以看成是Linux 內核與外部設備之間的接口.在Linux 操作系統下,有3 類主要的設備文件類型:字符設備、塊設備和網絡設備.對于設備文件和普通文件的訪問都是通過其I/O 子系統向內核中的其他部分提供統一的標準設備接口,包含在include/linux/fs.h 中的數據結構file-oPerations 來完成的[4].

3.2 與硬件設備的接口

Linux 為設備驅動程序訪問I/O 端口、硬件中斷、DMA 提供了簡便方法.Linux 提供的I/O 端口訪問方法主要有inb()、inw()、outb()、outw()等.需注意的是設備驅動程序在使用端口前,應該先用check-region()檢查端口的占用情況,如果指定的端口可用,再用request-region()向系統登記.

3.3 內存分配

設備驅動程序作為內核的一部分,不能使用虛擬內存,利用內核提供的kmalloc()和kfree()來申請和釋放內核存儲空間.kmalloc 帶2 個參數.第1個參數是要申請內存的數量,要求這個數量是2 的整數冪,如128、256;第2 個參數是優先權,最常用的優先權是GFP-KERNEL,它的意思是該內存分配是由運行在內核模式的進程調用的[5].

3.4 DMA 驅動程序概述

DMA 控制器可控制多個DMA 傳輸通道,并且可以實現總線和存儲器總線之間的相互傳輸,其實現步驟如下:

1)在系統內存中分配大塊的存儲區用于DMA傳輸必須確保屬于低端內存得到用于DMA 傳輸的總線地址,且不能換入換出,通常會用到GFP-KERNEL GFP-DMA 等標志.

2)在內核中調用request_dma 函數請求并注冊一個DMA 通道并為該通道注冊一個DMA 傳輸完成中斷并實現其中斷服務程序與驅動程序的其他中斷注冊方法相同,不再描述.

3)通過內核函數獲得總線地址對于PCI 設備其中一個存儲器資源的實現如下其余段的存儲器資源處理相同.

4)當數據準備就緒,通過中斷或者命令通知CPU 初始化DMA 通道的各個參數,如DMA 的源總線地址寄存器、目的總線地址寄存器以及傳輸數據長度寄存器等,并啟動DMA 傳輸后CPU 就不再參與數據的傳輸.在DMA 傳輸完成后,在其DMA 傳輸完成中斷服務程序中,CPU 只需要清理中斷現場就結束數據傳輸.

因此,在數據傳輸的過程中,只需要占用極少的CPU 時間初始化DMA 寄存器及DMA 中斷管理,有利于優化整個系統的性能.

4 結 語

本研究討論了一種實時多通道DMA 控制器IP核的實現,結合該設計,探討了基于IP 復用技術的IP 核實現方法,并給出了Linux 下驅動的實現方法.FPGA 使用Xilinx Spartan-6,最終適配PCI32 總線4通道IP 核的邏輯資源消耗只有648 個slice,整個設計相當精簡可靠.最后,本研究在PCI 機箱使用該FPGA 硬件板卡進行了實驗測試,對全部四通道進行并行收發數據測試,測得數據收發達到55 MB/s(兆字節/秒),且對優先級設定反應靈敏.

[1]史昕蕾,楊軍,陸生禮.嵌入式SoC 中的DMA 控制器的設計與優化[J].電子工程師,2004,30(1):5-7.

[2]朱運航,李雪東.基于IP 核復用的SoC 設計技術探討[J].微計算機信息,2006,22(3-2):47-48.

[3]Corbet J,Rubini A,Kroah-Hartman G.LINUX 設備驅動程序[M].第2 版.魏永明,耿岳,鐘書毅譯.北京:中國電力出版社,2002.

[4]Matthew N,Stones R.Linux 程序設計[M].第2 版.楊曉云,譯.北京:機械工業出版社,2002.

[5]李遠征,任傳倫,楊義先.PCI 設備的DMA 驅動程序設計[J].計算機工程與應用,2003,39(14):135-138.

猜你喜歡
用戶設備設計
諧響應分析在設備減振中的應用
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
如何獲取一億海外用戶
創業家(2015年5期)2015-02-27 07:53:25
主站蜘蛛池模板: 精品自窥自偷在线看| 欧洲熟妇精品视频| 国产一级做美女做受视频| 亚洲免费福利视频| 日韩在线欧美在线| 亚洲日本中文字幕天堂网| 欧美a网站| 亚洲成a人片在线观看88| 亚洲日本一本dvd高清| 欧美日本在线| 亚洲成肉网| 色综合中文| 亚洲中文字幕久久无码精品A| 久久黄色小视频| 色婷婷综合激情视频免费看| 国产一区二区精品福利| 久久综合丝袜长腿丝袜| 尤物特级无码毛片免费| 欧美不卡视频在线| 毛片基地视频| 久久久精品国产SM调教网站| 国产免费观看av大片的网站| 一级香蕉视频在线观看| 亚洲国产成熟视频在线多多| 久久国产精品影院| 亚洲水蜜桃久久综合网站| a级毛片免费看| a色毛片免费视频| 高清乱码精品福利在线视频| 四虎国产精品永久在线网址| 中国精品久久| 四虎影视无码永久免费观看| 40岁成熟女人牲交片免费| 精品国产www| 成人久久精品一区二区三区 | www.91中文字幕| 亚洲精选高清无码| 亚洲精品动漫| 九九九久久国产精品| 黄色在线网| 久草中文网| jizz国产视频| 丁香婷婷综合激情| 992tv国产人成在线观看| 国产尤物在线播放| 亚洲乱码在线播放| 久久久久亚洲精品成人网| 久久久久久高潮白浆| 国产中文在线亚洲精品官网| 天堂成人在线| 一级毛片在线播放免费| 在线综合亚洲欧美网站| 国产又色又刺激高潮免费看| 欧美精品成人一区二区在线观看| 国产精品无码久久久久AV| 中文字幕波多野不卡一区| 久久久久国产精品免费免费不卡| 国内精品久久久久久久久久影视 | 黄色网站不卡无码| 欧美色香蕉| 国产女人在线| 91在线视频福利| 五月天久久婷婷| 国产无遮挡猛进猛出免费软件| 国产精品人人做人人爽人人添| 美女一区二区在线观看| 国产毛片基地| 亚洲不卡影院| 91色在线观看| 亚洲国产欧美自拍| 欧美三级自拍| 4虎影视国产在线观看精品| 国产精品免费p区| 黄色三级网站免费| 国产精品.com| 免费AV在线播放观看18禁强制| 精品国产网站| 精品自窥自偷在线看| 无码专区国产精品第一页| 欧美精品v日韩精品v国产精品| 老司机午夜精品视频你懂的| 小说 亚洲 无码 精品|