DSP片外高速海量SDRAM存儲系統設計
在數字圖像處理、航空航天等高速信號處理應用場(chǎng)合,需要有高速大容量存儲空間的強力支持,來(lái)滿(mǎn)足系統對海量數據吞吐的要求,通過(guò)使用大容量同步動(dòng)態(tài)ram(sdram)來(lái)擴展嵌入式dsp系統存儲空間的方法,選用issi公司的is42s16400高速sdram芯片,詳細論述在基于tms320c6201(簡(jiǎn)稱(chēng)c6201)的數字信號處理系統中此設計方法的具體實(shí)現。
1 is42s16400芯片簡(jiǎn)介
is42s16400是issi公司推出的一種單片存儲容量高達64mb(即8mb)的16位字寬高速sdram芯片。sdram的主要特點(diǎn)是:①同步訪(fǎng)問(wèn),讀寫(xiě)操作需要時(shí)鐘;②動(dòng)態(tài)存儲,芯片需要定時(shí)刷新。is42s16400采用cmos工藝,它的同步接口和完全流水線(xiàn)的內部結構使其擁有極大的數據傳輸速率,可以工作在高達133mhz時(shí)鐘頻率下,刷新頻率每64ms為4096次。該sdram芯片內部有4個(gè)存儲體(bank),通過(guò)行、列地址分時(shí)復用系統地址總線(xiàn),對不同存儲體內不同頁(yè)面的具體存儲單元進(jìn)行讀寫(xiě)訪(fǎng)問(wèn)尋址。在進(jìn)行讀操作之間,必須預先激活sdram內對應的存儲體,并選擇存儲器的某一行,然后送入列地址讀取需要的數據。從輸出列地址到sdram返回相應數據之間存在一個(gè)存取延遲。如果訪(fǎng)問(wèn)新的頁(yè)面,則先需要關(guān)閉所有的存儲體,否則已打開(kāi)的頁(yè)面將一直有效。在寫(xiě)操作之前,由于已經(jīng)預先激活了有關(guān)的行地址,因此可以在輸出列地址的同時(shí)輸出數據,沒(méi)有延遲。is42s16400提供自刷新模式的設置,可以使芯片運行在低功耗的狀態(tài)下,從而大大減少嵌入式系統的功率消耗。
2 c6201與sdram的外部存儲器接口
dsp芯片訪(fǎng)問(wèn)片外存儲器時(shí)必須通過(guò)外部存儲器接口emif(external memory interface)。c6000系列dsps的emif具有很強的接口能力,不僅具有很高的數據吞吐率(最高達1200mb/s),而且可以與目前幾乎所有類(lèi)型的存儲器直接接口。在c6201系統中,提供了4個(gè)彼此獨立的外存接口(cex)。除ce1空間只支持異步接口外,所有的外部cex空間都支持對sdram的直接接口。表1總結了c620x dsps的emif所兼容的sdram配置。表2給出了c6000系列dsps的emif所支持的sdram控制命令。


2.1 sdram的刷新
為了提高存儲容量,sdram采用硅片電容來(lái)存儲信息。隨著(zhù)時(shí)間的推移,必須給電容重新充電才能保持電容里的數據信息,這就是所謂的“刷新”,它的存在也使得sdram的應用變的略顯復雜,帶來(lái)了一定的應用難度。
c6000系列dsps有專(zhuān)門(mén)的sdram控制寄存器(sdtcl)和sdram時(shí)序控制寄存器(sdtim),用來(lái)進(jìn)行sdram的各種時(shí)序控制,大大減輕了設計人員的開(kāi)發(fā)難度,sdctl寄存器中的rfen位控制是否由emif完成對sdram的刷新。如果rfen=1,emif會(huì )控制向所有的sdram空間發(fā)出刷新命令(refr);而sdtim寄存器中的period位段則控制具體的刷新周期。
在refr命令之前,會(huì )自動(dòng)插入一個(gè)dcab命令,以保證刷新過(guò)程中所有的sdram都處于未激活狀態(tài)。dcab命令之后,emif開(kāi)始按照sdtim寄存器中perd字段設置的值進(jìn)行定時(shí)刷新。刷新前后,頁(yè)面信息會(huì )變?yōu)闊o(wú)效。
對于c620x,emif sdram控制模塊內部有一個(gè)2位的計數器,用來(lái)監測提交的刷新申請的次數。每提交一個(gè)申請,計數器加1;每次刷新周期之后,計數器減1。復位時(shí),計數器自動(dòng)置為11b,以保證在存取訪(fǎng)問(wèn)之前先進(jìn)行若干次刷新。計數器自動(dòng)置為11b,代表緊急刷新?tīng)顟B(tài),此時(shí)頁(yè)面信息寄存器變無(wú)效,迫使控制器關(guān)閉當前的sdram頁(yè)面。然后,emif sdram控制器在dcab命令后執行3次refr命令,使計數器的值減為0,再繼續完成余下的存取操作。
2.2 sdram的初始化
當某個(gè)ce空間配置為sdram空間后,必須首先進(jìn)行初始化。用戶(hù)不需要控制初始化的每一個(gè)步驟,只需要向emif sdctl寄存器的init位寫(xiě)1,申請對sdram作初始化。然后,emif就會(huì )自動(dòng)完成所需要的各步操作。初始化操作不能在進(jìn)行sdram存取過(guò)程中進(jìn)行。整個(gè)初始化過(guò)程包括下面幾個(gè)步驟:
①對所有的sdram空間發(fā)出dcab命令;
②執行3個(gè)refr命令;
③對所有的sdram空間發(fā)出mrs命令。
2.3 頁(yè)面邊界控制
sdram屬于分頁(yè)存儲器,emif的sdram控制器會(huì )監測訪(fǎng)問(wèn)sdram時(shí)行地址的情況,避免訪(fǎng)問(wèn)時(shí)發(fā)生行越界。為了完成這一任務(wù),emif在內部有四個(gè)頁(yè)面寄存器,自動(dòng)保存當前打開(kāi)的行地址,然后與后續存取訪(fǎng)問(wèn)的地址進(jìn)行比較。需要說(shuō)明的是,當前存取操作結束并不會(huì )引起sdram中已經(jīng)激活的行被立即關(guān)閉,emif的控制原則是維持當前的打開(kāi)狀態(tài),除非必須關(guān)閉。這樣做的好處是可以減少關(guān)閉/重新打開(kāi)之間的命令切換時(shí)間,使接口在存儲器訪(fǎng)問(wèn)的控制過(guò)程中充分利用地址信息。
對于c620x,每個(gè)ce空間包含1個(gè)頁(yè)面寄存器(只對配置為sdram空間有效),因此c620x每個(gè)ce空間1次只能激活1頁(yè)。進(jìn)行比較的地址位數取決于sdctl寄存器中sdwid位的值。如果sdwid=0,該ce空間構成頁(yè)面的大小為512,比較的邏輯地址是位23~11;如果sdwid=1,該ce空間sdram構成頁(yè)面的大小為256,比較的邏輯地址是位23~10。一旦發(fā)現存取訪(fǎng)問(wèn)發(fā)生了頁(yè)面越界,emif會(huì )自動(dòng)執行dcab操作,然后再開(kāi)始新的行訪(fǎng)問(wèn)。
2.4 訪(fǎng)問(wèn)地址的移位
由于sdram行邏輯地址與列邏輯地址復用相同的emif引腳,所以emif接口需要對行地址與列地址進(jìn)行相應的移位處理。地址的移位處理由sdcrl寄存器中的sdwid位控制。
另外,對于sdram,因為輸入地址也是控制信號,因此需要說(shuō)明以下幾點(diǎn):
①ras有效期間的高位地址信號會(huì )被emif內部sdram控制器鎖存,以保證執行read和wrt命令時(shí)選通正確的bank;
②read/wrt操作期間,emif會(huì )保持pre-charge信號為低(c620x是sda10),以防止read/wrt命令執行后發(fā)生auto-pre-charge操作。
2.5 接口時(shí)序的設計
對于c620x,emif與sdram的接口時(shí)序由sdctl寄存器控制。emif提供了5個(gè)時(shí)序參數,其中3個(gè)在sdctl寄存器中設置,另外2個(gè)為固定值,如表3所列。在分析接口時(shí)序的配合情況時(shí),需要計算“富裕時(shí)間”tmargin的大小,這是在考慮了sdram芯片的器件手冊提供的最壞情況之后,得到的時(shí)序上的一個(gè)裕量,至于tmargin值的大小,是系統設計層需要考慮的問(wèn)題,具體要求隨不同的系統而異,而且與印制板的實(shí)際布線(xiàn)情況以及負載的情況密切相關(guān)。

3 系統設計中is42s16400芯片的應用
3.1 c6201與is42s16400的接口實(shí)現
由于is42s16400屬于16位字寬的64mb sdram芯片,而c6201的emif只提供32位字寬的同步外存儲接口,為了使整個(gè)系統的存儲空間保持連續,使用2片sdram與dsp芯片組成實(shí)際大小為16mb的外部存儲系統,如圖1所示。圖1中is42s16400芯片各引腳含義如下:cs,片選;clk,系統同步時(shí)鐘;ras,行地址選擇;cas,列地址選擇;we,讀/寫(xiě)使能;cke,時(shí)鐘使能,dqmu、dqml,高低字節使能;a[13:12],bank地址選擇線(xiàn);a[11:0]行、列地址先;dq[15:0],雙向數據端口。

由圖1可以看出,雖然c6201提供32位地址尋址能力,但是經(jīng)emif直接輸出的地址信號只有ea[21:2]。一般情況下,ea2信號對應邏輯地址a2,但這并不意味著(zhù)dsp芯片訪(fǎng)問(wèn)外存時(shí)只能進(jìn)行word(32位)的存取,實(shí)際內部32位地址的最低2~3位經(jīng)譯碼后由bex輸出,是能夠控制字節訪(fǎng)問(wèn)的。更高位邏輯地址經(jīng)譯碼后輸出ce[3:0]。
在實(shí)際的系統實(shí)現中,c6201的clkout1時(shí)鐘頻率為200mhz,故而sdram的實(shí)際工作頻率為100mhz,(sdclk=clkout2=clkout1 frequency/2),即tcyc=10ns。sdram被配置在ce2空間(起始邏輯地址為0x02000000)。
3.2 c6201 emif sdram寄存器設置
表4列出了配置sdram需要設置的emif寄存器名稱(chēng)及相應的位或位段。

emif全局控制寄存器中的sdcen位,(位6)設置為1,用來(lái)使能sdram同步時(shí)鐘sdclk的輸出。emifec2空間控制寄存器中的mtype位段(位6~4)設置為011b,用來(lái)配置ce2為32位寬的sdram空間。由is42s16400數據手冊可查得trc=70ns、trp=18ns,trcd=18ns,故而emif sdram控制寄存器中的trc位段(位15~12)應設置為0110b,trp位段(位19~16)應設置為0001b,trcd位段(位23~20)應設置為0001b。init位(位24)置1,用來(lái)強制對sdram進(jìn)行上電初始化。rfen位(位25)置1,用來(lái)使能emif對sdram的刷新。sdwid位(位26)置1,用來(lái)向emif表明所使用的sdram芯片的字寬為16位,由于is42s16400的刷新頻率為每64ms4096次,故根據公式period=trefresh/tcyc,emif sdram時(shí)序控制寄存器中的period位段(位11~0)被設置為0x61a。
3.3 ccs開(kāi)發(fā)環(huán)境中sdram配置程序源代碼
ti公司的集成開(kāi)發(fā)環(huán)境ccs(code composer studio)中,is42s16400sdram芯片的配置程序c代碼如下:
#include<emif.h> … /*其他用戶(hù)程序*/ /*讀出emif控制寄存器的默認設置*/
unsigned int g_ctrl=get_reg(emif_gctrl);
unsigned int ce0_ctrl=get_reg(emif_ce0_ctrl);
unsigned int ce1_ctrl=get_reg(emif_ce1_ctrl);
unsigned int ce2_ctrl=get_reg(emif_ce2_ctrl);
unsigned int ce3_ctrl=get_reg(emif_ce3_ctrl);
unsigned int sdram_ctrl=get_reg(emif_sdram_ctrl);
unsigned int sdram_ref=get_reg(emif_sdram_ref);
/*emif全局控制寄存器-使能sdclk*/
set_bit(&g_ctrl,sdcen);
/*設置ce2為sdram空間*/
load_field(&ce2_ctrl,mtype_23sdram,mtype,mtype_sz);
/*設置sdram控制寄存器*/
load_field(&sdram_ctrl,6,trc,trc_sz);
load_field(&sdram_ctrl,1,trp,trp_sz);
load_field(&sdram_ctrl,1,trcd,trcd_sz);
set_bit(&sdrrm_ctrl,sdwid);
set_bit(&sdrrm_ctrl,init);
set_bit(&sdrrm_ctrl,rfen);
/*設置sdram的刷新周期*/
load_field(&sdram_ref,0x61a,period,period_sz);
/*重配制emif控制寄存器*/
emif_inif(g_ctrl,ce0_ctrl,cel_ctrl,ce2_ctrl,ce3_ctrl,
sdram_ctrl,sdram_ref);
…/*其他用戶(hù)程序*/
結語(yǔ)
以上介紹了tms320c6201 dsp芯片與sdram(is42s16400)的具體硬件接口實(shí)現。由于sdram具有的大容量、高速度和低價(jià)格的優(yōu)勢,使用sdram構建嵌入式應用海量存儲系統會(huì )成為一種行之有效的方法。目前該系統已調試完畢。使用sdram作為dsp系統外接高速、大容量主存儲器具有非常明顯的優(yōu)勢,充分顯示了sdram在嵌入式系統中的良好應用前景。
評論