黃世中 , 金志剛
(1.天津大學(xué) 天津 300072;2.河北省科學(xué)院 應(yīng)用數(shù)學(xué)研究所,河北 石家莊 050081;3.河北省信息安全認(rèn)證工程技術(shù)研究中心 河北 石家莊 050081)
利用WinDriver實(shí)現(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ù)浜?jiǎn)單等特點(diǎn)被廣泛用于各種領(lǐng)域。Altera公司的Arria II GX FPGA內(nèi)集成了支持鏈?zhǔn)紻MA傳輸功能的PCI Express硬核,適應(yīng)了PCI Express總線高速度的要求。文中利用Jungo公司的WinDriver軟件實(shí)現(xiàn)了鏈?zhǔn)紻MA的上層應(yīng)用設(shè)計(jì)。首先給出了鏈?zhǔn)紻MA實(shí)現(xiàn)的基本過(guò)程,接著分析了鏈?zhǔn)紻MA數(shù)據(jù)傳輸需要處理的幾個(gè)問(wèn)題,給出了相應(yīng)的解決辦法和策略。采用這些方法,保證了DAM數(shù)據(jù)傳輸?shù)恼_性,簡(jiǎn)化了底層FPGA應(yīng)用邏輯的設(shè)計(jì)。
鏈?zhǔn)紻MA;WinDriver;PCI Express;端點(diǎn)存儲(chǔ)器
在計(jì)算機(jī)與外設(shè)的通訊過(guò)程中,DMA方式,即Direct Memory access(直接內(nèi)存訪問(wèn)),由于無(wú)需計(jì)算機(jī)CPU的干預(yù)就可以在內(nèi)存和外設(shè)之間傳輸數(shù)據(jù),是一種高效的數(shù)據(jù)交換方式。因?yàn)閷?duì)于高速的設(shè)備,如PCI Express接口的板卡設(shè)備,如果采用普通方式在存儲(chǔ)器和外設(shè)之間傳輸大量的數(shù)據(jù)將占用太多的CPU時(shí)間,嚴(yán)重影響系統(tǒng)的性能。而使用DMA方式則使傳輸數(shù)據(jù)的操作中CPU的涉及減小到最少。
要實(shí)現(xiàn)DMA的傳輸功能,在底層需要硬件本身具有這樣的功能模塊,即外設(shè)硬件可以主動(dòng)發(fā)起數(shù)據(jù)傳輸。在上層則需要驅(qū)動(dòng)與應(yīng)用接口的配合。
文中給出如下的一種DMA傳輸方式的實(shí)現(xiàn)。硬件外設(shè)是基于Altera公司PCI Express硬核的FPGA加密卡,其與主機(jī)的接口采用是PCI Express接口。上層則采用了Jungo公司的WinDriver軟件提供的驅(qū)動(dòng)和API接口。
PCI Express是用來(lái)互聯(lián)諸如計(jì)算機(jī)和通信平臺(tái)應(yīng)用中外圍設(shè)備的第三代高性能I/O總線[1]。與原有的PCI并行總線相比,它沒(méi)有大量的數(shù)據(jù)和控制線,對(duì)于硬件電路設(shè)計(jì)者來(lái)說(shuō),省去了很多硬件設(shè)計(jì)工作。PCI Express的傳輸速度遠(yuǎn)遠(yuǎn)大于PCI總線,PCI Express 1.1版本單個(gè)鏈路的單向吞吐量能達(dá)到250 MB/s。對(duì)于需要與主機(jī)進(jìn)行大容量傳輸?shù)南到y(tǒng)來(lái)說(shuō),該總線標(biāo)準(zhǔn)的優(yōu)勢(shì)是非常明顯的。Altera公司的Arria II GX系列器件內(nèi)建PCI Express硬核,無(wú)需PHY和IP核,有利于節(jié)約FPGA資源,簡(jiǎn)化了PCI Express的接口設(shè)計(jì)。同時(shí)在用Quartus II軟件生成的基于PCI Express硬核的樣本工程中,集成了對(duì)DMA的支持功能[2],為進(jìn)一步的硬件產(chǎn)品開(kāi)發(fā)提供了基礎(chǔ)。
實(shí)際應(yīng)用中,DMA的傳輸方式可分為兩種:簡(jiǎn)單DMA和鏈?zhǔn)紻MA。簡(jiǎn)單DMA只需要主機(jī)告訴設(shè)備要傳輸數(shù)據(jù)的主機(jī)地址、設(shè)備地址和傳輸數(shù)據(jù)的長(zhǎng)度,然后啟動(dòng)DMA傳輸即可。但簡(jiǎn)單DMA每進(jìn)行一次傳輸,都要進(jìn)行上面的設(shè)置,效率較低。
在用 Quartus II軟件的 MegaWizard Plug-In Manager工具生成的基于PCI Express硬核的樣本工程中,實(shí)現(xiàn)了一個(gè)32 KB的帶有字節(jié)寫使能控制的雙端口RAM的端點(diǎn)存儲(chǔ)器,其讀寫數(shù)據(jù)總線寬度均為128位;并且實(shí)現(xiàn)了鏈?zhǔn)紻MA的傳輸功能。這是一種效率遠(yuǎn)遠(yuǎn)高于簡(jiǎn)單DMA的傳輸方式,它只需要1次啟動(dòng)操作,就可以完成多次DMA傳輸。具體實(shí)現(xiàn)的方法是:在主機(jī)端,需要開(kāi)辟一塊內(nèi)存區(qū)域,用來(lái)存儲(chǔ)描述符表。所謂描述符表,是用來(lái)描述在主機(jī)與外設(shè)之間數(shù)據(jù)傳輸有關(guān)的地址與長(zhǎng)度信息的,它由一個(gè)表頭和多個(gè)描述符組成,其中每一個(gè)描述符對(duì)應(yīng)一次DMA操作。用戶根據(jù)自己的需求填寫該描述符表,如下表所示。
表1 鏈?zhǔn)紻MA描述符表Tab.1 Chaining DMA descriptor table
在上表中,偏移地址是指到描述符表內(nèi)存區(qū)域開(kāi)始處的字節(jié)偏移地址。DMA長(zhǎng)度用來(lái)設(shè)置本描述符對(duì)應(yīng)的DMA傳輸?shù)拈L(zhǎng)度,是以32位雙字為單位的。主機(jī)地址用來(lái)指示數(shù)據(jù)在主機(jī)端存放的位置。設(shè)備地址用來(lái)指示數(shù)據(jù)在設(shè)備的端點(diǎn)存儲(chǔ)器中存放的位置。控制域用來(lái)控制在該描述符傳輸完成時(shí)設(shè)備是否更新描述符頭的EPLAST域。
使用鏈?zhǔn)紻MA傳輸數(shù)據(jù)時(shí),主機(jī)首先通過(guò)設(shè)置DMA控制寄存器,告訴設(shè)備要傳輸數(shù)據(jù)的描述符表的起始地址和描述符的個(gè)數(shù),然后啟動(dòng)DMA傳輸。設(shè)備收到啟動(dòng)DMA傳輸?shù)拿詈?,首先根?jù)主機(jī)提供的描述符表信息,檢索相應(yīng)的描述符,并存儲(chǔ)到設(shè)備的FIFO中,然后根據(jù)每一個(gè)描述符中的地址和長(zhǎng)度信息,進(jìn)行相應(yīng)的DMA數(shù)據(jù)傳輸。所有的DMA描述符處理完成后,設(shè)備更新描述符頭的EPLAST域。主機(jī)便可通過(guò)查詢EPLAST域獲得鏈?zhǔn)紻MA傳輸完成的信息,從而可以啟動(dòng)下一次鏈?zhǔn)紻MA傳輸。
WinDriver是Jungo公司提供的一種通用的驅(qū)動(dòng)開(kāi)發(fā)支持軟件,它簡(jiǎn)化了用戶的上層驅(qū)動(dòng)開(kāi)發(fā)和應(yīng)用接口開(kāi)發(fā),而且易于再封裝,實(shí)現(xiàn)商業(yè)化應(yīng)用。該軟件提供了對(duì)PCI Express接口設(shè)備的驅(qū)動(dòng)支持,而且也提供了對(duì)DMA實(shí)現(xiàn)功能的支持[3]。
WinDriver提供了兩種DMA緩沖區(qū)的分配方式,即連續(xù)緩沖區(qū)和分散/聚合緩沖區(qū)。前者當(dāng)用戶申請(qǐng)緩沖區(qū)時(shí),分配的是一個(gè)物理地址連續(xù)的內(nèi)存塊;而后者分配的緩沖區(qū)在物理位置上可以是分段的,這些物理上不連續(xù)的內(nèi)存段通過(guò)虛擬地址空間映射給用戶的是一個(gè)在應(yīng)用層連續(xù)的緩沖區(qū)。
由于采用DMA傳輸數(shù)據(jù)時(shí),設(shè)備需要的主機(jī)地址是物理地址;而在主機(jī)端,申請(qǐng)大塊的物理地址連續(xù)的內(nèi)存區(qū)域往往是非常困難的。因此在使用DMA進(jìn)行大量數(shù)據(jù)傳輸時(shí),主機(jī)端使用分散/聚合緩沖區(qū)分配方式更方便和易于實(shí)現(xiàn)。此時(shí),主機(jī)可以將緩沖區(qū)的每個(gè)內(nèi)存段對(duì)應(yīng)一個(gè)描述符,這樣采用鏈?zhǔn)紻MA方式可以解決大的內(nèi)存區(qū)域物理地址不連續(xù)的問(wèn)題,方便了大存儲(chǔ)區(qū)域數(shù)據(jù)的傳輸。
在具體實(shí)現(xiàn)時(shí),主機(jī)是通過(guò)訪問(wèn)的設(shè)備的BAR2地址空間來(lái)設(shè)置DMA控制寄存器的。DMA控制寄存器分為DMA讀控制寄存器和DMA寫控制寄存器,它們均是由4個(gè)32位的雙字組成,依次表示的含義是:控制域和描述表中描述符的個(gè)數(shù)、描述符表的高32位地址、描述符表的低32位地址、最后一個(gè)描述符的索引,其中第一個(gè)雙字的控制域部分用來(lái)控制在每個(gè)描述符傳輸完成時(shí)設(shè)備是否更新主機(jī)描述符頭的EPLAST域。DMA寫(即數(shù)據(jù)由設(shè)備向主機(jī)傳送)控制寄存器的開(kāi)始地址位于BAR2地址空間的0字節(jié)偏移地址處,DMA讀(即數(shù)據(jù)由主機(jī)向設(shè)備傳送)控制寄存器的開(kāi)始地址位于BAR2地址空間的16字節(jié)偏移地址處。主機(jī)可以通過(guò)調(diào)用WinDriver提供的API函數(shù) WDC_WriteAddr32每次設(shè)置DMA讀/寫控制寄存器的一個(gè)雙字。
在每次DMA傳輸開(kāi)始時(shí),根據(jù)設(shè)備DMA的設(shè)計(jì)要求,必須先調(diào)用WDC_WriteAddr32函數(shù)向DMA讀/寫控制寄存器的第一個(gè)雙字寫入0xFFFF的內(nèi)容,以使設(shè)備DMA進(jìn)入到可以工作的狀態(tài)。這是因?yàn)樵O(shè)備每次執(zhí)行完DMA操作后,處于停止工作狀態(tài),只有通過(guò)對(duì)控制寄存器的第一個(gè)雙字寫0xFFFF才能使設(shè)備DMA模塊退出停止?fàn)顟B(tài),重新準(zhǔn)備檢索DMA描述符。詳見(jiàn)樣本工程的altpcierd_dma_descriptor模塊的狀態(tài)機(jī)部分。
需要注意的是,描述表的描述符中的主機(jī)低32位地址必須是16的倍數(shù),設(shè)備地址也必須是16的倍數(shù)。這是因?yàn)樵O(shè)備的端點(diǎn)存儲(chǔ)器是一個(gè)帶有字節(jié)寫使能控制的RAM,且其每個(gè)周期讀寫16個(gè)字節(jié)的數(shù)據(jù)。對(duì)于DMA讀操作來(lái)說(shuō),設(shè)備收到主機(jī)的帶數(shù)據(jù)的完成包后,是根據(jù)主機(jī)端的地址設(shè)置端點(diǎn)存儲(chǔ)器的字節(jié)寫使能控制信號(hào)的。如果主機(jī)端地址的低4位與設(shè)備端地址的低4位不一致,將導(dǎo)致數(shù)據(jù)起始存儲(chǔ)位置不正確。例如:如果主機(jī)端地址的低4位是8,設(shè)備端地址的低4位是0,端點(diǎn)存儲(chǔ)器寫的數(shù)據(jù)總線接收數(shù)據(jù)的第一有效時(shí)鐘周期內(nèi)接收的16字節(jié)數(shù)據(jù),低8字節(jié)對(duì)應(yīng)的字節(jié)使能位是0,高8個(gè)字節(jié)才是有效的數(shù)據(jù)。這些有效數(shù)據(jù)被寫入端點(diǎn)存儲(chǔ)器規(guī)定存儲(chǔ)位置向后偏移8個(gè)字節(jié)的地方,這顯然與設(shè)備要求的存儲(chǔ)位置不符。
對(duì)于DMA寫操作來(lái)說(shuō),設(shè)備從端點(diǎn)存儲(chǔ)器中讀取數(shù)據(jù)時(shí),直接將設(shè)備地址的低4位丟棄了,所以設(shè)備地址也應(yīng)為16的倍數(shù)。如果主機(jī)端地址低32位不是16的倍數(shù),根據(jù)設(shè)備的Descriptor/Data Interface處理規(guī)則和PCI Express規(guī)范中存儲(chǔ)器寫事務(wù)包的處理規(guī)則,將導(dǎo)致主機(jī)收到的數(shù)據(jù)包的有效數(shù)據(jù)位置向后偏移,部分有效數(shù)據(jù)丟失,例如:如果主機(jī)端低32位地址的低4位是8,那么將使得從端點(diǎn)存儲(chǔ)器讀取的數(shù)據(jù)的前8個(gè)字節(jié)丟失,主機(jī)端收到的數(shù)據(jù)的開(kāi)始位置比預(yù)期位置向后移了8個(gè)字節(jié)。
在設(shè)置主機(jī)的描述表時(shí),先調(diào)用WinDriver提供的API函數(shù)WDC_DMASGBufLock對(duì)申請(qǐng)的進(jìn)行DMA數(shù)據(jù)傳輸?shù)膬?nèi)存塊進(jìn)行鎖定,然后根據(jù)鎖定的頁(yè)數(shù),確定描述表中描述符的個(gè)數(shù),每個(gè)描述符對(duì)應(yīng)其中的1頁(yè)存儲(chǔ)區(qū)域。根據(jù)上面對(duì)主機(jī)低32位地址的要求,在申請(qǐng)進(jìn)行DMA傳輸?shù)膬?nèi)存區(qū)域時(shí),申請(qǐng)的空間大小可以比實(shí)際需要存儲(chǔ)區(qū)域多16個(gè)字節(jié)。這樣,在調(diào)用WDC_DMASGBufLock函數(shù)對(duì)申請(qǐng)的內(nèi)存塊進(jìn)行鎖定后,如果第一頁(yè)的物理地址不是16的倍數(shù)(在多頁(yè)的情況下,后面的頁(yè)的物理地址均為16的倍數(shù)),可以DMA傳輸?shù)膶?shí)際區(qū)域向后移動(dòng)相應(yīng)的位置,以使數(shù)據(jù)存儲(chǔ)的開(kāi)始位置的物理地址為16的倍數(shù)。例如,如果第1頁(yè)物理地址的低4位是4,那么可以向后移動(dòng)12個(gè)字節(jié)作為DMA傳輸?shù)拈_(kāi)始位置。如果申請(qǐng)的空間由多頁(yè)組成,應(yīng)注意第1頁(yè)對(duì)應(yīng)的描述符傳輸數(shù)據(jù)的長(zhǎng)度將減少,及對(duì)后面頁(yè)對(duì)應(yīng)描述符的設(shè)備地址的影響。
設(shè)置完成DMA傳輸?shù)拿枋龇砗?,需要通過(guò)設(shè)置DMA控制寄存器,告訴設(shè)備主機(jī)描述表的起始物理地址和描述符的個(gè)數(shù)。這里,也有上面類似的要求。即要求描述表的低32位地址為16的倍數(shù),否則將導(dǎo)致設(shè)備FIFO每個(gè)周期接收的描述符不是一個(gè)完整的描述符,即可能是由前一個(gè)描述符的后8字節(jié)和后一個(gè)描述符的前8字節(jié)組成。這將導(dǎo)致以后DMA數(shù)據(jù)傳輸?shù)幕靵y和錯(cuò)誤。為此,在調(diào)用WDC_DMASGBufLock函數(shù)對(duì)描述符表存儲(chǔ)區(qū)域進(jìn)行鎖定時(shí),可以進(jìn)行上面類似的地址對(duì)齊處理。
因?yàn)樵谡{(diào)用WDC_DMASGBufLock函數(shù)對(duì)一塊存儲(chǔ)區(qū)域進(jìn)行鎖定時(shí),中間頁(yè)的大小均是4 KB的倍數(shù)[4]。這樣就可以估算出一塊內(nèi)存區(qū)域大概可以分成幾頁(yè),從而估計(jì)出描述符表由幾個(gè)描述符組成。比如文中的設(shè)備存儲(chǔ)器是一個(gè)32 KB的端點(diǎn)存儲(chǔ)器,因此進(jìn)行一次DMA傳輸?shù)拿枋龇麄€(gè)數(shù)不超過(guò)9個(gè),描述符表占用的存儲(chǔ)空間為:16+9*16=160字節(jié)。對(duì)于這種描述表所需空間少于2 KB的情況下,可以采用如下策略使得描述表的數(shù)據(jù)集中到一個(gè)物理頁(yè)中,以便于對(duì)DMA控制寄存器的設(shè)置,即如果所需空間為x(x≤2032)字節(jié),那么申請(qǐng) 2(x+16)字節(jié) (≤4 KB)的空間,這樣在調(diào)用WDC_DMASGBufLock函數(shù)進(jìn)行存儲(chǔ)區(qū)域鎖定時(shí),得到的頁(yè)數(shù)最多為2頁(yè),且至少有一頁(yè)的大小不小于x+16字節(jié)。于是,便可用此頁(yè)作為描述符表的存儲(chǔ)區(qū)域,并使描述符表的起始地址滿足16的倍數(shù)的要求。
按照上面的策略,一次DMA傳輸至少可以處理含有(2032-16)/16=126個(gè)描述符的描述符表,至少可以傳輸124*4 KB=496 KB大小的數(shù)據(jù)。如果DAM傳輸?shù)臄?shù)據(jù)很多時(shí),可以分成多次DMA傳輸,這樣仍可使每次DMA傳輸時(shí),描述表的數(shù)據(jù)占用一個(gè)物理頁(yè)。
上面的策略,也可應(yīng)用于DMA數(shù)據(jù)存儲(chǔ)區(qū)的設(shè)置。例如在我們進(jìn)行的加密卡設(shè)計(jì)中,使用DMA寫模塊完成加密結(jié)果的輸出。對(duì)于公鑰算法,其加密結(jié)果的長(zhǎng)度往往是固定的,比如,對(duì)2 048位的RSA簽名運(yùn)算,其簽名結(jié)果長(zhǎng)度為256字節(jié)。此時(shí)采用上面的策略,我們就可以通過(guò)一次DMA傳輸讀到簽名結(jié)果,這樣就簡(jiǎn)化了底層設(shè)備對(duì)輸出接口的設(shè)計(jì)。
在設(shè)置完DMA控制寄存器后,設(shè)備開(kāi)始進(jìn)行MDA描述符檢索,然后開(kāi)始進(jìn)行數(shù)據(jù)傳輸,主機(jī)需要知道什么時(shí)候數(shù)據(jù)傳輸結(jié)束,以便進(jìn)行其他處理或讀取傳輸結(jié)果。有兩種處理方式:中斷方式和查詢方式。由于Windows XP操作系統(tǒng)不支持消息中斷請(qǐng)求(MSI),故采用查詢的方式處理。這就需要設(shè)置描述符的控制域和DMA控制寄存器的控制域部分,以使設(shè)備更新描述符表的EPLAST域。需要指出的是:在設(shè)備DMA處理模塊的實(shí)現(xiàn)中,描述表的描述符頭中,最后一個(gè)雙字的低16位是EPLAST域的實(shí)際值,即最后完成的描述符的索引號(hào),而高16位是其他的信息。因此可以用下面的DMAWaitForCompletion函數(shù)進(jìn)行查詢處理。
在上面的函數(shù)中hDev為設(shè)備句柄;DT_HEAD_EPLAST為描述表的描述符頭中,最后一個(gè)雙字的地址指針;eplast_num為DMA傳輸?shù)淖詈笠粋€(gè)描述符的索引號(hào),等于描述符表中描述符個(gè)數(shù)減1。函數(shù)的返回值為真,表示DMA傳輸正確完成。
為了使DMA緩沖區(qū)保持與CPU緩存、I/O緩存的同步,主機(jī)端應(yīng)在設(shè)置DMA控制寄存器之前,對(duì)DMA傳輸?shù)臄?shù)據(jù)存儲(chǔ)區(qū)和描述符表存儲(chǔ)區(qū)調(diào)用WDC_DMASyncCpu函數(shù)[5],在完成DMA的傳輸查詢之后,調(diào)用WDC_DMASyncIo函數(shù)和WDC_DMABufUnlock 函數(shù)[5]。
對(duì)基于Altera公司PCI Express硬核的鏈?zhǔn)紻MA應(yīng)用,Altera公司雖然提供了上層Demo示例程序[6],但其只進(jìn)行了MDA傳輸?shù)男阅軠y(cè)試。文中給出了處理DMA數(shù)據(jù)傳輸時(shí),主機(jī)端需要面對(duì)和解決的幾個(gè)問(wèn)題。通過(guò)這些處理方法和策略,保證了主機(jī)和設(shè)備之間DMA數(shù)據(jù)傳輸?shù)恼_性,簡(jiǎn)化了底層FPGA應(yīng)用的設(shè)計(jì),為利用DMA模塊進(jìn)行用戶的應(yīng)用邏輯設(shè)計(jì)提供了基礎(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ì)[J].國(guó)外電子測(cè)量技術(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]劉波,庫(kù)錫樹(shù),孫兆林.基于PCIE總線協(xié)議的數(shù)據(jù)采集設(shè)備驅(qū)動(dòng)程序?qū)崿F(xiàn)[J].工業(yè)控制計(jì)算機(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稿件編號(hào)201212088
河北省科技支撐計(jì)劃項(xiàng)目(12210720);河北省科學(xué)院重大攻關(guān)項(xiàng)目(12620,13605)
黃世中(1973—),男,河北南宮人,博士研究生,副研究員。研究方向:信息安全與密碼學(xué)。