《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > ADSP-21535 Blackfin的Mem DMA高速通信

ADSP-21535 Blackfin的Mem DMA高速通信

2008-08-27
作者:楊 波 邢克飛 楊 俊 王

  摘? 要: 針對ADSP-21535 Blackfin 的Mem DMA 高速通信" title="高速通信">高速通信中的關(guān)鍵技術(shù)進(jìn)行了討論,分析了系統(tǒng)的內(nèi)存管理" title="內(nèi)存管理">內(nèi)存管理,對DMA的相關(guān)寄存器的配置進(jìn)行了詳細(xì)講解,并給出了具體實(shí)例。對多種內(nèi)存之間的DMA列出了實(shí)際的指標(biāo)評測,為該系列DSP工程應(yīng)用的高速通信設(shè)計(jì)提供了重要參考。

  關(guān)鍵詞: ADSP-21535 Blackfin? Mem DMA 

?

  ADSP-21535 Blackfin 是美國AD公司和Intel 公司于2001年底聯(lián)合推出的一款定點(diǎn)DSP, RISC指令結(jié)構(gòu),運(yùn)作高效,具有十分優(yōu)異的性能,。該DSP具有300MHz的主頻,2個(gè)40bit的MAC(乘加器)和2個(gè)32bit的ALU(算術(shù)邏輯單元),4個(gè)8bit的視頻處理單元,16個(gè)地址尋址單元。該DSP內(nèi)部集成了308KB的RAM,并具有豐富的外部接口,如PCI,、USB,、SPI、同步和異步串口等,。同時(shí),芯片內(nèi)部設(shè)計(jì)了看門狗和多種定時(shí)器,充分滿足軟件工程穩(wěn)定性的設(shè)計(jì)要求。值得一提的是,21535可以動(dòng)態(tài)地控制電壓輸入,調(diào)整運(yùn)行頻率,減少芯片功耗,十分適用于移動(dòng)產(chǎn)品的設(shè)計(jì),。

  2002年底,AD公司在中國開始大規(guī)模推廣Blackfin系列的DSP,21535成為該系列的旗艦產(chǎn)品,。由于該DSP推出時(shí)間不長,相關(guān)文獻(xiàn)幾乎沒有報(bào)道;而且,在許多接口性能方面,AD公司也沒有對其給出準(zhǔn)確的指標(biāo),。根據(jù)通常的設(shè)計(jì)經(jīng)驗(yàn)可知,新產(chǎn)品通常在某些方面沒有達(dá)到設(shè)計(jì)要求,。筆者所設(shè)計(jì)的高速通信板數(shù)據(jù)交換速度必須達(dá)20M Word/s以上,因此對該DSP的高速通信必須進(jìn)行準(zhǔn)確仔細(xì)的評估和設(shè)計(jì)。

  ADSP-21535的內(nèi)存訪問支持I/O方式,、內(nèi)存映射和多種DMA方式,其中Mem DMA(Memory to memory DMA)方式是最快的一種并行通信方式,。因此,筆者在設(shè)計(jì)時(shí)選擇了Mem DMA作為高速通信方式。由于21535支持多種內(nèi)存,因此在設(shè)計(jì)Mem DMA時(shí),必須對21535的內(nèi)存管理有一個(gè)詳細(xì)的了解,。

1 ADSP-21535的內(nèi)存管理

  21535的內(nèi)存管理十分強(qiáng)大,。它把存儲器視為一個(gè)統(tǒng)一的4GB的地址空間,使用32位地址。所有的資源,包括內(nèi)部存儲器,、外部存儲器,、PCI地址空間和I/O控制寄存器,都具有獨(dú)立的地址空間。此地址空間的各部分存儲器按照分級結(jié)構(gòu)排列,以提供較高的性能價(jià)格比,。一些快速,、低延遲的存儲器(如L1)的位置接近處理器核心,而低成本低性能的存儲器遠(yuǎn)離核心。 芯片內(nèi)部的308KB RAM中,其中L1(一級緩存)52KB,L2(二級緩存)256KB,;外部地址訪問空間可以高達(dá)768MB,通過EBIU(External Bus Interface Unit,外部總線接口單元)進(jìn)行管理,。EBIU支持多種內(nèi)存,如SDRAM、SRAM,、ROM,、EPROM、FLASH,、FIFO等,。內(nèi)存地址的具體配置空間如圖1所示。

?

  L1作為DSP的一級緩存,可以與DSP的內(nèi)核一樣,運(yùn)行在300Mbps的高速上,。它分為三部分:16KB的Instruction Ram(指令存儲器),、,兩塊16KB的Data Ram(數(shù)據(jù)存儲器)、4KB的Scratchpad Ram(中間結(jié)果緩存),。指令存儲器既可以作為SRAM,也可以配置為4路聯(lián)合設(shè)置的Cache,。數(shù)據(jù)存儲器能夠配置成雙路聯(lián)合設(shè)置的Cache或者SRAM;中間結(jié)果緩存只能作為SRAM使用。指令緩存和數(shù)據(jù)緩存都可以通過DMA方式灌入數(shù)據(jù),但是對于中間結(jié)果緩存這種方式不能使用,。

  L2作為DSP的二級緩存,是一個(gè)統(tǒng)一的指令和數(shù)據(jù)存儲器,能夠根據(jù)系統(tǒng)設(shè)計(jì)要求同時(shí)存放代碼和數(shù)據(jù),。L2具有DSP核心同樣的帶寬,但是延遲時(shí)間較長,訪問L2單個(gè)獨(dú)立的地址時(shí)系統(tǒng)需要經(jīng)過7個(gè)周期的延時(shí),這時(shí)它的訪問速度在42.8Mbps左右。所以如果程序比較大,必須在L2中編寫程序時(shí),通常將L1配置為L2的Cache,這樣,速度可以大大加快,。

  21535支持的片外存儲器種類很多,值得一提的是它的SDRAM控制器,。21535集成的SDRAM控制器能夠以fSCLK(系統(tǒng)時(shí)鐘,為核心時(shí)鐘的若干分頻)的速度,與多達(dá)4個(gè)Bank的工業(yè)標(biāo)準(zhǔn)SDRAM或者DIMM接口。每個(gè)Bank可以配置為16MB~128MB的存儲器,符合PC133 SDRAM的標(biāo)準(zhǔn),。

  存儲器的DMA控制器提供高帶寬的數(shù)據(jù)傳輸能力,它能夠在內(nèi)部L1/L2存儲器和外部存儲器(包括PCI存儲空間)之間執(zhí)行代碼或者數(shù)據(jù)的塊傳輸,。

2 DMA寄存器的配置

  為了描述Mem DMA序列,DMA控制器使用一套名為描述子塊" title="子塊">子塊(Descriptor)的參數(shù)。當(dāng)需要后繼的DMA序列時(shí),這些描述子塊被鏈接起來,。這樣,一個(gè)DMA序列完成時(shí)能夠自動(dòng)初始化下一個(gè)序列,并將其啟動(dòng),。如果不需啟動(dòng)下一個(gè)序列,只要將其指向一個(gè)內(nèi)容為0的地址空間即可。如果下一次鏈接指向原描述子塊,則DMA完成后暫停,。為訪問整個(gè)ADSP-21535的地址空間,源地址和目的地址描述子塊采用了全32位地址的基指針,。兩個(gè)描述子塊均為5個(gè)字的連續(xù)空間,需要注意的是該連續(xù)空間必須定義在L2范圍內(nèi)。描述子塊內(nèi)包含的內(nèi)容如圖2所示,。

?

  Mem DMA規(guī)定,描述子塊所在的首地址必須傳入相關(guān)的寄存器,。描述子塊首地址的高16位裝入DMA_DBP寄存器(DMA Descriptor Base Pointer Register,DMA描述子塊基地址寄存器)內(nèi)。由于該寄存器嚴(yán)格限定必須在0xF000~0xF003,這就限定了源和目的地址描述子塊只能定義在L2存儲器內(nèi),并且高16位地址相同,。

  描述子塊首地址的低16位放在兩個(gè)寄存器中,源地址描述子塊低16位裝入MDS_DND寄存器(Source Memory DMA Next Descriptor Pointer Register,DMA源地址下一個(gè)描述子塊寄存器),而目的地址描述子塊低16位裝入MDD_DND寄存器(Destination Memory DMA Next Descriptor Pointer Register,DMA目的地址下一個(gè)描述子塊寄存器),。其說明如圖3所示。

在描述子塊的地址傳入相應(yīng)寄存器后,后面的四項(xiàng)先配置,然后設(shè)置第一項(xiàng),。也就是對管理DMA啟動(dòng)參數(shù)的寄存器進(jìn)行參數(shù)配置,。兩個(gè)配置寄存器" title="配置寄存器">配置寄存器的詳細(xì)內(nèi)容如圖4所示。例如當(dāng)目的地址寄存器為0x8003,源地址寄存器為0x8001時(shí),傳輸?shù)臄?shù)據(jù)總長=DMA傳輸?shù)拈L度×字,。需要注意的是,雖然此時(shí)傳輸以16位(字長)傳輸,但DMA的帶寬是32位,剩下的帶寬資源將被浪費(fèi),。8位傳輸時(shí),帶寬資源利用率更低。

?

?

  下面,以一個(gè)具體的32位DMA例子說明上面的描述子塊和多個(gè)寄存器的使用方法,。

3 32位DMA的例程

  R0.H = 0x8009,;??     //DMA源配置字,設(shè)置為32位傳輸

  R0.L = 0x800;????     //DMA長度

  R1.L = 0x2000,; ?     //DMA源地址低16位

  R1.H = 0xf000,; ?     //DMA源地址高16位,這里指向L2

  R2.L = RAM_READ;??    //DMA源描述子塊首地址低十六位,DMA讀

  R2.H = 0x800b,;??     //DMA目的配置字,設(shè)置為32位傳輸

  R3.L =0x0000,;???     //DMA目的地址低16位

  R3.H =0xff90; ??     //DMA目的地址高16位,這里指向L1數(shù)據(jù)存儲器-Bank B

  R4.L = RAM_WRITE,;     //DMA目的描述子塊首地址低十六位,DMA寫

  P0.L = RAM_READ,;??    //將32位的源描述子塊的地址載入P0

????P0.H = RAM_READ;

  P1.L = RAM_WRITE;?????? //將32位的目的描述子塊的地址載入P1

??? P1.H = RAM_WRITE,;

  W[P0+0x2] = R0,;???????? //將DMA長度寫入源描述塊第二個(gè)字中

  [P0+0x4] = R1; ???????? //將DMA的32位源起始地址寫入源描述塊第三第四個(gè)字中

  W[P0+0x8] = R2.L,;?????? //將下一個(gè)源描述子塊的地址寫入源描述塊第五個(gè)字中

  W[P1+0x2] = R0,;???????? //將DMA長度寫入目的描述塊第二個(gè)字中

  [P1+0x4] = R3; ???????? //將DMA的32位目的起始地址寫入目的描述塊第三第四個(gè)字中

  W[P1+0x8] = R4,;???????? //將下一個(gè)目的描述子塊的地址寫入目的描述塊第五個(gè)字中

  W[P0] = R0.H,; ????????? //將DMA源配置字寫入源描述塊第一個(gè)" title="第一個(gè)">第一個(gè)字中

  W[P1] = R2.H; ????????? //將DMA目的配置字寫入目的描述塊第一個(gè)字中

  R6 = P0,;????????????????//將P0的值同時(shí)存在R6內(nèi)

  P2.L = 0x390A; ???????? //將DMA源描述子塊配置寄存器的地址傳給P2

  P2.H = 0xFFC0,;

  W[P2] = R6.L,; ???????? //將DMA源描述子塊所在地址的低16位傳給P2指向的地方

  P3.L = 0x4880;?????????//將描述子塊基地址寄存器的地址傳給P3

  P3.H = 0xFFC0,;????????????????????????????????????

  W[P3] = R6.H,;?????????? //將DMA源描述子塊所在地址的高16位傳給基地址寄存器

  P4.L = 0x380A;????????????????

  P4.H = 0xFFC0,;? ??????? //將DMA目的描述子塊配置寄存器的地址傳給P4

  R6 = P1,;????????????????//將P1的值轉(zhuǎn)存到R6

  W[P4] = R6.L; ????????? //將目的描述子塊所在地址的低16位傳給配置目的地址寄存器

  P5.L = 0x3902

  P5.H = 0xFFC0,;? ?????? //將DMA源地址配置寄存器所在地址傳給P5

  R6 = W[P5],;

  BITSET(R6,0),;??????? ?//設(shè)置R6的最低位為1,表示準(zhǔn)備啟動(dòng)讀DMA

  I0.L = 0x3802,;

  I0.H = 0xFFC0;?? ???? ?//將DMA目的地址配置寄存器的地址傳給I0

  R7.L = W[I0],;

  BITSET(R7,,0);??????? ?//設(shè)置R7的最低位為1,表示準(zhǔn)備啟動(dòng)寫DMA

????W[P5] = R6,;??????????? //將R6和R7的低16位寫入兩個(gè)配置寄存器中,真正啟動(dòng)DMA

????W[I0] = R7.L,;???????????????????????????????????????

  DMA_WAIT:????????????? //等待DMA結(jié)束

  R6 = W[P1];??????????? //根據(jù)寫描述子塊第一個(gè)字的最高位判斷描述子塊的所有權(quán)

????cc = bittst(R6,,15),;???

  IF cc JUMP DMA_WAIT;?? //如果為1,表示還在DMA狀態(tài),繼續(xù)判斷,等待

????????????????????????????????????????????????

  RTS,;

  .align 4,;?????????????? //在L2空間范圍內(nèi)定義兩個(gè)描述子塊,要求4個(gè)字節(jié)對齊

????.BYTE2 RAM_READ[5];????????????????????????

  .align 4;

  .BYTE2 RAM_WRITE[5],;

????值得注意的是,在上述DMA例程中,筆者使用了查詢等待方式,但中間完全可以插入其他指令,例如DSP還可以同時(shí)作雙乘加和兩次32位取數(shù),。只要不訪問正在DMA讀寫的地址區(qū)域,沒有任何影響。這意味著,在系統(tǒng)DMA的同時(shí),DSP可以同時(shí)進(jìn)行其他操作,這一點(diǎn)對于提高DSP的效率至關(guān)重要,。

4 各種內(nèi)存空間的DMA訪問指標(biāo)測試及分析

? 根據(jù)以上配置,筆者對ADSP-21535的DMA性能進(jìn)行了比較詳盡的測試,。測試數(shù)據(jù)如表1所示。

?

?

? 從表1中的實(shí)測數(shù)據(jù)可以看出,DMA的速度均在18.7M雙字/秒以上,最高速度達(dá)46.9M雙字/秒,可以滿足工程中高速采集的需要,。從表中數(shù)據(jù)可以得出以下結(jié)論:

  (1)DMA雙向速度不對稱,將源地址和目的地址交換后,速度會發(fā)生變化,;

  (2)低速向高速區(qū)域傳輸時(shí),要比反向傳輸快;

  (3)同類區(qū)域DMA一般比區(qū)域之間DMA要慢,。如L1 DMA到L1,比L1 DMA到L2和SDRAM都要慢一些,。其它區(qū)域也有類似現(xiàn)象。

  (4)高速區(qū)域DMA速度并不一定快,如L1區(qū)域DMA速度總體表現(xiàn)反而最低,。

?

參考文獻(xiàn)

1 AD公司. ADSP-21535 Blackfin DSP Hardware Reference. 2002

2 AD公司. Blackfin DSP Instruction Set Reference.? 2002
本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章,、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]