• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      利用WinDriver實現(xiàn)鏈?zhǔn)紻MA

      2013-07-13 06:43:56黃世中金志剛
      電子設(shè)計工程 2013年8期
      關(guān)鍵詞:描述符鏈?zhǔn)?/a>存儲器

      黃世中 , 金志剛

      (1.天津大學(xué) 天津 300072;2.河北省科學(xué)院 應(yīng)用數(shù)學(xué)研究所,河北 石家莊 050081;3.河北省信息安全認(rèn)證工程技術(shù)研究中心 河北 石家莊 050081)

      利用WinDriver實現(xiàn)鏈?zhǔn)紻MA

      黃世中1,2,3, 金志剛1

      (1.天津大學(xué) 天津 300072;2.河北省科學(xué)院 應(yīng)用數(shù)學(xué)研究所,河北 石家莊 050081;3.河北省信息安全認(rèn)證工程技術(shù)研究中心 河北 石家莊 050081)

      PCI Express協(xié)議由于其高速串行、系統(tǒng)拓?fù)浜唵蔚忍攸c被廣泛用于各種領(lǐng)域。Altera公司的Arria II GX FPGA內(nèi)集成了支持鏈?zhǔn)紻MA傳輸功能的PCI Express硬核,適應(yīng)了PCI Express總線高速度的要求。文中利用Jungo公司的WinDriver軟件實現(xiàn)了鏈?zhǔn)紻MA的上層應(yīng)用設(shè)計。首先給出了鏈?zhǔn)紻MA實現(xiàn)的基本過程,接著分析了鏈?zhǔn)紻MA數(shù)據(jù)傳輸需要處理的幾個問題,給出了相應(yīng)的解決辦法和策略。采用這些方法,保證了DAM數(shù)據(jù)傳輸?shù)恼_性,簡化了底層FPGA應(yīng)用邏輯的設(shè)計。

      鏈?zhǔn)紻MA;WinDriver;PCI Express;端點存儲器

      在計算機(jī)與外設(shè)的通訊過程中,DMA方式,即Direct Memory access(直接內(nèi)存訪問),由于無需計算機(jī)CPU的干預(yù)就可以在內(nèi)存和外設(shè)之間傳輸數(shù)據(jù),是一種高效的數(shù)據(jù)交換方式。因為對于高速的設(shè)備,如PCI Express接口的板卡設(shè)備,如果采用普通方式在存儲器和外設(shè)之間傳輸大量的數(shù)據(jù)將占用太多的CPU時間,嚴(yán)重影響系統(tǒng)的性能。而使用DMA方式則使傳輸數(shù)據(jù)的操作中CPU的涉及減小到最少。

      要實現(xiàn)DMA的傳輸功能,在底層需要硬件本身具有這樣的功能模塊,即外設(shè)硬件可以主動發(fā)起數(shù)據(jù)傳輸。在上層則需要驅(qū)動與應(yīng)用接口的配合。

      文中給出如下的一種DMA傳輸方式的實現(xiàn)。硬件外設(shè)是基于Altera公司PCI Express硬核的FPGA加密卡,其與主機(jī)的接口采用是PCI Express接口。上層則采用了Jungo公司的WinDriver軟件提供的驅(qū)動和API接口。

      1 鏈?zhǔn)紻MA

      PCI Express是用來互聯(lián)諸如計算機(jī)和通信平臺應(yīng)用中外圍設(shè)備的第三代高性能I/O總線[1]。與原有的PCI并行總線相比,它沒有大量的數(shù)據(jù)和控制線,對于硬件電路設(shè)計者來說,省去了很多硬件設(shè)計工作。PCI Express的傳輸速度遠(yuǎn)遠(yuǎn)大于PCI總線,PCI Express 1.1版本單個鏈路的單向吞吐量能達(dá)到250 MB/s。對于需要與主機(jī)進(jìn)行大容量傳輸?shù)南到y(tǒng)來說,該總線標(biāo)準(zhǔn)的優(yōu)勢是非常明顯的。Altera公司的Arria II GX系列器件內(nèi)建PCI Express硬核,無需PHY和IP核,有利于節(jié)約FPGA資源,簡化了PCI Express的接口設(shè)計。同時在用Quartus II軟件生成的基于PCI Express硬核的樣本工程中,集成了對DMA的支持功能[2],為進(jìn)一步的硬件產(chǎn)品開發(fā)提供了基礎(chǔ)。

      實際應(yīng)用中,DMA的傳輸方式可分為兩種:簡單DMA和鏈?zhǔn)紻MA。簡單DMA只需要主機(jī)告訴設(shè)備要傳輸數(shù)據(jù)的主機(jī)地址、設(shè)備地址和傳輸數(shù)據(jù)的長度,然后啟動DMA傳輸即可。但簡單DMA每進(jìn)行一次傳輸,都要進(jìn)行上面的設(shè)置,效率較低。

      在用 Quartus II軟件的 MegaWizard Plug-In Manager工具生成的基于PCI Express硬核的樣本工程中,實現(xiàn)了一個32 KB的帶有字節(jié)寫使能控制的雙端口RAM的端點存儲器,其讀寫數(shù)據(jù)總線寬度均為128位;并且實現(xiàn)了鏈?zhǔn)紻MA的傳輸功能。這是一種效率遠(yuǎn)遠(yuǎn)高于簡單DMA的傳輸方式,它只需要1次啟動操作,就可以完成多次DMA傳輸。具體實現(xiàn)的方法是:在主機(jī)端,需要開辟一塊內(nèi)存區(qū)域,用來存儲描述符表。所謂描述符表,是用來描述在主機(jī)與外設(shè)之間數(shù)據(jù)傳輸有關(guān)的地址與長度信息的,它由一個表頭和多個描述符組成,其中每一個描述符對應(yīng)一次DMA操作。用戶根據(jù)自己的需求填寫該描述符表,如下表所示。

      表1 鏈?zhǔn)紻MA描述符表Tab.1 Chaining DMA descriptor table

      在上表中,偏移地址是指到描述符表內(nèi)存區(qū)域開始處的字節(jié)偏移地址。DMA長度用來設(shè)置本描述符對應(yīng)的DMA傳輸?shù)拈L度,是以32位雙字為單位的。主機(jī)地址用來指示數(shù)據(jù)在主機(jī)端存放的位置。設(shè)備地址用來指示數(shù)據(jù)在設(shè)備的端點存儲器中存放的位置??刂朴蛴脕砜刂圃谠撁枋龇麄鬏斖瓿蓵r設(shè)備是否更新描述符頭的EPLAST域。

      使用鏈?zhǔn)紻MA傳輸數(shù)據(jù)時,主機(jī)首先通過設(shè)置DMA控制寄存器,告訴設(shè)備要傳輸數(shù)據(jù)的描述符表的起始地址和描述符的個數(shù),然后啟動DMA傳輸。設(shè)備收到啟動DMA傳輸?shù)拿詈?,首先根?jù)主機(jī)提供的描述符表信息,檢索相應(yīng)的描述符,并存儲到設(shè)備的FIFO中,然后根據(jù)每一個描述符中的地址和長度信息,進(jìn)行相應(yīng)的DMA數(shù)據(jù)傳輸。所有的DMA描述符處理完成后,設(shè)備更新描述符頭的EPLAST域。主機(jī)便可通過查詢EPLAST域獲得鏈?zhǔn)紻MA傳輸完成的信息,從而可以啟動下一次鏈?zhǔn)紻MA傳輸。

      2 WinDriver中的DMA功能

      WinDriver是Jungo公司提供的一種通用的驅(qū)動開發(fā)支持軟件,它簡化了用戶的上層驅(qū)動開發(fā)和應(yīng)用接口開發(fā),而且易于再封裝,實現(xiàn)商業(yè)化應(yīng)用。該軟件提供了對PCI Express接口設(shè)備的驅(qū)動支持,而且也提供了對DMA實現(xiàn)功能的支持[3]。

      WinDriver提供了兩種DMA緩沖區(qū)的分配方式,即連續(xù)緩沖區(qū)和分散/聚合緩沖區(qū)。前者當(dāng)用戶申請緩沖區(qū)時,分配的是一個物理地址連續(xù)的內(nèi)存塊;而后者分配的緩沖區(qū)在物理位置上可以是分段的,這些物理上不連續(xù)的內(nèi)存段通過虛擬地址空間映射給用戶的是一個在應(yīng)用層連續(xù)的緩沖區(qū)。

      由于采用DMA傳輸數(shù)據(jù)時,設(shè)備需要的主機(jī)地址是物理地址;而在主機(jī)端,申請大塊的物理地址連續(xù)的內(nèi)存區(qū)域往往是非常困難的。因此在使用DMA進(jìn)行大量數(shù)據(jù)傳輸時,主機(jī)端使用分散/聚合緩沖區(qū)分配方式更方便和易于實現(xiàn)。此時,主機(jī)可以將緩沖區(qū)的每個內(nèi)存段對應(yīng)一個描述符,這樣采用鏈?zhǔn)紻MA方式可以解決大的內(nèi)存區(qū)域物理地址不連續(xù)的問題,方便了大存儲區(qū)域數(shù)據(jù)的傳輸。

      3 具體實現(xiàn)

      在具體實現(xiàn)時,主機(jī)是通過訪問的設(shè)備的BAR2地址空間來設(shè)置DMA控制寄存器的。DMA控制寄存器分為DMA讀控制寄存器和DMA寫控制寄存器,它們均是由4個32位的雙字組成,依次表示的含義是:控制域和描述表中描述符的個數(shù)、描述符表的高32位地址、描述符表的低32位地址、最后一個描述符的索引,其中第一個雙字的控制域部分用來控制在每個描述符傳輸完成時設(shè)備是否更新主機(jī)描述符頭的EPLAST域。DMA寫(即數(shù)據(jù)由設(shè)備向主機(jī)傳送)控制寄存器的開始地址位于BAR2地址空間的0字節(jié)偏移地址處,DMA讀(即數(shù)據(jù)由主機(jī)向設(shè)備傳送)控制寄存器的開始地址位于BAR2地址空間的16字節(jié)偏移地址處。主機(jī)可以通過調(diào)用WinDriver提供的API函數(shù) WDC_WriteAddr32每次設(shè)置DMA讀/寫控制寄存器的一個雙字。

      在每次DMA傳輸開始時,根據(jù)設(shè)備DMA的設(shè)計要求,必須先調(diào)用WDC_WriteAddr32函數(shù)向DMA讀/寫控制寄存器的第一個雙字寫入0xFFFF的內(nèi)容,以使設(shè)備DMA進(jìn)入到可以工作的狀態(tài)。這是因為設(shè)備每次執(zhí)行完DMA操作后,處于停止工作狀態(tài),只有通過對控制寄存器的第一個雙字寫0xFFFF才能使設(shè)備DMA模塊退出停止?fàn)顟B(tài),重新準(zhǔn)備檢索DMA描述符。詳見樣本工程的altpcierd_dma_descriptor模塊的狀態(tài)機(jī)部分。

      需要注意的是,描述表的描述符中的主機(jī)低32位地址必須是16的倍數(shù),設(shè)備地址也必須是16的倍數(shù)。這是因為設(shè)備的端點存儲器是一個帶有字節(jié)寫使能控制的RAM,且其每個周期讀寫16個字節(jié)的數(shù)據(jù)。對于DMA讀操作來說,設(shè)備收到主機(jī)的帶數(shù)據(jù)的完成包后,是根據(jù)主機(jī)端的地址設(shè)置端點存儲器的字節(jié)寫使能控制信號的。如果主機(jī)端地址的低4位與設(shè)備端地址的低4位不一致,將導(dǎo)致數(shù)據(jù)起始存儲位置不正確。例如:如果主機(jī)端地址的低4位是8,設(shè)備端地址的低4位是0,端點存儲器寫的數(shù)據(jù)總線接收數(shù)據(jù)的第一有效時鐘周期內(nèi)接收的16字節(jié)數(shù)據(jù),低8字節(jié)對應(yīng)的字節(jié)使能位是0,高8個字節(jié)才是有效的數(shù)據(jù)。這些有效數(shù)據(jù)被寫入端點存儲器規(guī)定存儲位置向后偏移8個字節(jié)的地方,這顯然與設(shè)備要求的存儲位置不符。

      對于DMA寫操作來說,設(shè)備從端點存儲器中讀取數(shù)據(jù)時,直接將設(shè)備地址的低4位丟棄了,所以設(shè)備地址也應(yīng)為16的倍數(shù)。如果主機(jī)端地址低32位不是16的倍數(shù),根據(jù)設(shè)備的Descriptor/Data Interface處理規(guī)則和PCI Express規(guī)范中存儲器寫事務(wù)包的處理規(guī)則,將導(dǎo)致主機(jī)收到的數(shù)據(jù)包的有效數(shù)據(jù)位置向后偏移,部分有效數(shù)據(jù)丟失,例如:如果主機(jī)端低32位地址的低4位是8,那么將使得從端點存儲器讀取的數(shù)據(jù)的前8個字節(jié)丟失,主機(jī)端收到的數(shù)據(jù)的開始位置比預(yù)期位置向后移了8個字節(jié)。

      在設(shè)置主機(jī)的描述表時,先調(diào)用WinDriver提供的API函數(shù)WDC_DMASGBufLock對申請的進(jìn)行DMA數(shù)據(jù)傳輸?shù)膬?nèi)存塊進(jìn)行鎖定,然后根據(jù)鎖定的頁數(shù),確定描述表中描述符的個數(shù),每個描述符對應(yīng)其中的1頁存儲區(qū)域。根據(jù)上面對主機(jī)低32位地址的要求,在申請進(jìn)行DMA傳輸?shù)膬?nèi)存區(qū)域時,申請的空間大小可以比實際需要存儲區(qū)域多16個字節(jié)。這樣,在調(diào)用WDC_DMASGBufLock函數(shù)對申請的內(nèi)存塊進(jìn)行鎖定后,如果第一頁的物理地址不是16的倍數(shù)(在多頁的情況下,后面的頁的物理地址均為16的倍數(shù)),可以DMA傳輸?shù)膶嶋H區(qū)域向后移動相應(yīng)的位置,以使數(shù)據(jù)存儲的開始位置的物理地址為16的倍數(shù)。例如,如果第1頁物理地址的低4位是4,那么可以向后移動12個字節(jié)作為DMA傳輸?shù)拈_始位置。如果申請的空間由多頁組成,應(yīng)注意第1頁對應(yīng)的描述符傳輸數(shù)據(jù)的長度將減少,及對后面頁對應(yīng)描述符的設(shè)備地址的影響。

      設(shè)置完成DMA傳輸?shù)拿枋龇砗?,需要通過設(shè)置DMA控制寄存器,告訴設(shè)備主機(jī)描述表的起始物理地址和描述符的個數(shù)。這里,也有上面類似的要求。即要求描述表的低32位地址為16的倍數(shù),否則將導(dǎo)致設(shè)備FIFO每個周期接收的描述符不是一個完整的描述符,即可能是由前一個描述符的后8字節(jié)和后一個描述符的前8字節(jié)組成。這將導(dǎo)致以后DMA數(shù)據(jù)傳輸?shù)幕靵y和錯誤。為此,在調(diào)用WDC_DMASGBufLock函數(shù)對描述符表存儲區(qū)域進(jìn)行鎖定時,可以進(jìn)行上面類似的地址對齊處理。

      因為在調(diào)用WDC_DMASGBufLock函數(shù)對一塊存儲區(qū)域進(jìn)行鎖定時,中間頁的大小均是4 KB的倍數(shù)[4]。這樣就可以估算出一塊內(nèi)存區(qū)域大概可以分成幾頁,從而估計出描述符表由幾個描述符組成。比如文中的設(shè)備存儲器是一個32 KB的端點存儲器,因此進(jìn)行一次DMA傳輸?shù)拿枋龇麄€數(shù)不超過9個,描述符表占用的存儲空間為:16+9*16=160字節(jié)。對于這種描述表所需空間少于2 KB的情況下,可以采用如下策略使得描述表的數(shù)據(jù)集中到一個物理頁中,以便于對DMA控制寄存器的設(shè)置,即如果所需空間為x(x≤2032)字節(jié),那么申請 2(x+16)字節(jié) (≤4 KB)的空間,這樣在調(diào)用WDC_DMASGBufLock函數(shù)進(jìn)行存儲區(qū)域鎖定時,得到的頁數(shù)最多為2頁,且至少有一頁的大小不小于x+16字節(jié)。于是,便可用此頁作為描述符表的存儲區(qū)域,并使描述符表的起始地址滿足16的倍數(shù)的要求。

      按照上面的策略,一次DMA傳輸至少可以處理含有(2032-16)/16=126個描述符的描述符表,至少可以傳輸124*4 KB=496 KB大小的數(shù)據(jù)。如果DAM傳輸?shù)臄?shù)據(jù)很多時,可以分成多次DMA傳輸,這樣仍可使每次DMA傳輸時,描述表的數(shù)據(jù)占用一個物理頁。

      上面的策略,也可應(yīng)用于DMA數(shù)據(jù)存儲區(qū)的設(shè)置。例如在我們進(jìn)行的加密卡設(shè)計中,使用DMA寫模塊完成加密結(jié)果的輸出。對于公鑰算法,其加密結(jié)果的長度往往是固定的,比如,對2 048位的RSA簽名運算,其簽名結(jié)果長度為256字節(jié)。此時采用上面的策略,我們就可以通過一次DMA傳輸讀到簽名結(jié)果,這樣就簡化了底層設(shè)備對輸出接口的設(shè)計。

      在設(shè)置完DMA控制寄存器后,設(shè)備開始進(jìn)行MDA描述符檢索,然后開始進(jìn)行數(shù)據(jù)傳輸,主機(jī)需要知道什么時候數(shù)據(jù)傳輸結(jié)束,以便進(jìn)行其他處理或讀取傳輸結(jié)果。有兩種處理方式:中斷方式和查詢方式。由于Windows XP操作系統(tǒng)不支持消息中斷請求(MSI),故采用查詢的方式處理。這就需要設(shè)置描述符的控制域和DMA控制寄存器的控制域部分,以使設(shè)備更新描述符表的EPLAST域。需要指出的是:在設(shè)備DMA處理模塊的實現(xiàn)中,描述表的描述符頭中,最后一個雙字的低16位是EPLAST域的實際值,即最后完成的描述符的索引號,而高16位是其他的信息。因此可以用下面的DMAWaitForCompletion函數(shù)進(jìn)行查詢處理。

      在上面的函數(shù)中hDev為設(shè)備句柄;DT_HEAD_EPLAST為描述表的描述符頭中,最后一個雙字的地址指針;eplast_num為DMA傳輸?shù)淖詈笠粋€描述符的索引號,等于描述符表中描述符個數(shù)減1。函數(shù)的返回值為真,表示DMA傳輸正確完成。

      為了使DMA緩沖區(qū)保持與CPU緩存、I/O緩存的同步,主機(jī)端應(yīng)在設(shè)置DMA控制寄存器之前,對DMA傳輸?shù)臄?shù)據(jù)存儲區(qū)和描述符表存儲區(qū)調(diào)用WDC_DMASyncCpu函數(shù)[5],在完成DMA的傳輸查詢之后,調(diào)用WDC_DMASyncIo函數(shù)和WDC_DMABufUnlock 函數(shù)[5]。

      4 結(jié)束語

      對基于Altera公司PCI Express硬核的鏈?zhǔn)紻MA應(yīng)用,Altera公司雖然提供了上層Demo示例程序[6],但其只進(jìn)行了MDA傳輸?shù)男阅軠y試。文中給出了處理DMA數(shù)據(jù)傳輸時,主機(jī)端需要面對和解決的幾個問題。通過這些處理方法和策略,保證了主機(jī)和設(shè)備之間DMA數(shù)據(jù)傳輸?shù)恼_性,簡化了底層FPGA應(yīng)用的設(shè)計,為利用DMA模塊進(jìn)行用戶的應(yīng)用邏輯設(shè)計提供了基礎(chǔ)。

      [1]馬鳴錦,朱劍冰,何紅旗,等.PCI、PCI-X和PCI Express的原理及體系結(jié)構(gòu)[M].北京:清華大學(xué)出版社,2007.

      [2]PCI Express Compiler User Guide[R].Altera Corporation,2010.

      [3]WinDriver PCI/ISA/CardBus User’s Manual[R].Jungo Corporation,2008.

      [4]徐洋,史學(xué)書,劉明波.基于PCI核的鏈?zhǔn)紻MA的設(shè)計[J].國外電子測量技術(shù),2008,27(6):42-45.

      XU Yang,SHI Xue-shu,LIU Ming-bo.Design of scattergather DMA based on PCI core [J].Foreign Electronic Measurement Technology,2008,27(6):42-45.

      [5]劉波,庫錫樹,孫兆林.基于PCIE總線協(xié)議的數(shù)據(jù)采集設(shè)備驅(qū)動程序?qū)崿F(xiàn)[J].工業(yè)控制計算機(jī),2007,20(7):28-29.

      LIU Bo,KU Xi-shu,SUN Zhao-lin.Driver develop of data gathering device based on PCIe[J].Industrial Control Computer,2007,20(7):28-29.

      [6]PCI Express High Performance Reference Design[R].Altera Corporation,2010.

      Chaining DMA implementation with WinDriver

      HUANG Shi-zhong1,2,3, JIN Zhi-gang1
      (1.Tianjin Unirersity, Tianjin 300072, China;2.Institute of Applied Mathematics, Hebei Academy of Sciences, Shijiazhuang 050081, China;3.Hebei Authentication Technology Engineering Research Center, Shijiazhuang 050081, China)

      The PCI Express protocol has been applied in more and more fields because of its serial high speed characteristic and simple system topology.The Arria II GX device, made by Altera Corporation, has integrated a PCI Express hard IP on itself,which supports chaining DMA transfers and meets the requirements of the high speed of the PCI Express bus.The chaining DMA implementation on the host side is designed using Jungo's WinDriver software.Firstly,the basic framework for the chaining DMA is presented.Then the problems need to be resolved for chaining DMA transfers are analyzed,and the corresponding solutions and strategies are given.By using these methods,not only the correctness of MDA transfers is guaranteed,and the underlying FPGA application logic design is simplified.

      chaining DMA; WinDriver; PCI Express; endpoint memory

      TP302

      A

      1674-6236(2013)08-0006-04

      2012-12-12稿件編號201212088

      河北省科技支撐計劃項目(12210720);河北省科學(xué)院重大攻關(guān)項目(12620,13605)

      黃世中(1973—),男,河北南宮人,博士研究生,副研究員。研究方向:信息安全與密碼學(xué)。

      猜你喜歡
      描述符鏈?zhǔn)?/a>存儲器
      基于結(jié)構(gòu)信息的異源遙感圖像局部特征描述符研究
      靜態(tài)隨機(jī)存儲器在軌自檢算法
      Linux單線程并發(fā)服務(wù)器探索
      鏈?zhǔn)絊TATCOM內(nèi)部H橋直流側(cè)電壓均衡控制策略
      黑龍江電力(2017年1期)2017-05-17 04:25:05
      利用CNN的無人機(jī)遙感影像特征描述符學(xué)習(xí)
      鏈?zhǔn)紻-STATCOM直流電壓分層協(xié)調(diào)控制策略
      電測與儀表(2015年4期)2015-04-12 00:43:08
      10kV鏈?zhǔn)絊TATCOM的研究與設(shè)計
      電測與儀表(2015年4期)2015-04-12 00:43:08
      中國工程咨詢(2015年10期)2015-02-14 05:57:18
      存儲器——安格爾(墨西哥)▲
      基于Nand Flash的高速存儲器結(jié)構(gòu)設(shè)計
      峨山| 始兴县| 东安县| 金塔县| 阿坝| 张家界市| 芦溪县| 通渭县| 安化县| 永德县| 清徐县| 佛坪县| 蒙山县| 梨树县| 渑池县| 什邡市| 怀柔区| 兰考县| 久治县| 石阡县| 株洲市| 西林县| 盐城市| 三都| 望谟县| 沭阳县| 浪卡子县| 东乡县| 渭源县| 邯郸市| 桂平市| 镇原县| 亚东县| 志丹县| 项城市| 县级市| 湟源县| 阳曲县| 荥经县| 尚志市| 张家港市|