引言
SDRAM 具有存儲容量大、速度快、成本低的特點,因此廣泛應(yīng)用于雷達(dá)信號處理等需 要海量高速存儲的場合,但是SDRAM 的操作相對復(fù)雜,需要有專門的控制器配合處理器 工作完成數(shù)據(jù)的存取操作。隨著FPGA 技術(shù)的快速發(fā)展及其應(yīng)用的普及,用FPGA 實現(xiàn) SDRAM 控制器是目前最流行的技術(shù)手段。雖然現(xiàn)在FPGA 的生產(chǎn)商提供了一些通用的 SDRAM 控制器,但是在雷達(dá)信號處理等一些專用領(lǐng)域內(nèi)這些通用的SDRAM 控制器難以滿 足需要,需要開發(fā)適合的專用的SDRAM 控制器。
本文以一個典型的雷達(dá)信號存儲與預(yù)處理系統(tǒng)為應(yīng)用背景,用 Altera 公司的Stratix 系 列FPGA 實現(xiàn)了一個三端口非透明型的SDRAM 控制器,該控制器內(nèi)部具有靈活準(zhǔn)確的優(yōu) 先級仲裁功能,在保證多個端口平均分配SDRAM 帶寬的同時不影響數(shù)據(jù)傳輸?shù)膸?,?用乒乓的DMA 傳輸機(jī)制大大提高了數(shù)據(jù)傳輸?shù)膸捄托省?/p>
2 SDRAM 的特點及其基本操作
SDRAM 是在現(xiàn)有的標(biāo)準(zhǔn)動態(tài)存儲器中加入同步控制邏輯(一個狀態(tài)機(jī)),利用一個單一的系統(tǒng)時鐘同步所有的地址數(shù)據(jù)和控制信號,它具有如下一些特點:
結(jié)構(gòu)特點:存儲容量大,受輸出管腳數(shù)量限制,其存儲單元設(shè)計成矩陣形存儲結(jié)構(gòu),因此地址分為行地址和列地址,首先給出行地址選通一行(或一頁),然后給出列地址選中要訪問的地址單元;
同步訪問:所有信號都在時鐘上升沿采樣有效才認(rèn)為有效;
基于猝發(fā)(Burst)方式訪問:在發(fā)出一次讀寫命令之后,SDRAM 自動訪問長度為猝發(fā) 長度的地址空間,非Burst 訪問的效率很低;
速度快:只要 SDRAM 控制器合理設(shè)計時序,可以實現(xiàn)單周期訪問一個地址單元。 SDRAM 的基本操作包括:初始化、激活、預(yù)充電、刷新等等。
初始化:SDRAM 上電之后必須按照確定的程式進(jìn)行初始化之后才能正常工作,最主要 的操作是模式寄存器的設(shè)置;
激活:選中所要訪問的行列地址單元;
刷新:SDRAM 存儲單元載體為容量很小的電容并存在漏電流。需要定時讀取回填各 個單元才能保證數(shù)據(jù)不丟。在片內(nèi)有自動刷新控制器,記錄了刷新行地址,每執(zhí)行一次自 動刷新命令,刷新一行;
預(yù)充電:每次讀寫操作是通過傳感放大器對存儲單元電容的充放電過程,在讀操作時對 選中整行單元的原始數(shù)據(jù)可能產(chǎn)生破壞。這就需要在每次讀取操作后立即對該行原內(nèi)容 與閾值比較再回寫,并且對傳感放大器參考閾值電壓復(fù)位準(zhǔn)備下一次做讀寫操作。所以 總是在執(zhí)行換行讀寫或刷新之前執(zhí)行預(yù)充電操作。
3 SDRAM 控制器的基本功能
三端口非透明型 SDRAM 控制器是指控制器面向用戶端有三個端口而不是通常情況下 的一個端口,三個端口的功能完全一致,依靠仲裁控制切換端口與SDRAM 之間交換數(shù)據(jù), 數(shù)據(jù)交換采用DMA 的方式,流經(jīng)SDRAM 的數(shù)據(jù)流如圖1 所示。數(shù)據(jù)由C 端口輸入,A 端 口輸出,B 端口作為與DSP 的數(shù)傳通道。
圖 1 三端口SDRAM 控制器的數(shù)據(jù)流向
這里透明型是指外部設(shè)備訪問 SDRAM 時,只需簡單讀寫而不需要進(jìn)行其它復(fù)雜的管 理操作,外部設(shè)備可以通過SDRAM 控制器將SDRAM 空間視為一個普通的同步三口RAM 操作。但是這種結(jié)構(gòu)不能靈活的實現(xiàn)地址跳變的訪問,隨機(jī)訪問的帶寬很低,三個端口再次 平均分配SDRAM 的帶寬會進(jìn)一步降低吞吐性能。所以,系統(tǒng)設(shè)計中采用了非透明型的設(shè) 計,非透明的意思是指:外部設(shè)備為了訪問SDRAM 的數(shù)據(jù),不但要進(jìn)行數(shù)據(jù)的讀寫操作,而且需要進(jìn)行寄存器設(shè)置、控制信號調(diào)整等其它操作。非透明型設(shè)計的靈活性較差,但是可 以根據(jù)具體的使用環(huán)境對功能進(jìn)行簡化,并且將一部分控制操作轉(zhuǎn)交給軟件完成,所以實現(xiàn) 相對比較簡單,而且更加穩(wěn)定可靠。
4 SDRAM 控制器的基本結(jié)構(gòu)及工作原理
三端口非透明型 SDRAM 控制器的結(jié)構(gòu)框圖如圖2 所示。A、B、C 三個端口的內(nèi)部結(jié) 構(gòu)完全相同,都包含一個雙口RAM(作為數(shù)據(jù)乒乓緩存),一個DMA 控制器。外部設(shè)備可以 通過端口讀寫DPRAM 中的數(shù)據(jù),也可以寫DMA 控制寄存器。DMA 控制器的功能是根據(jù) DMA 控制寄存器內(nèi)的設(shè)置在DPRAM 和SDRAM 之間交換數(shù)據(jù),當(dāng)DSP 或者其它外部設(shè)備 設(shè)置了寄存器后,DMA 控制器向仲裁和數(shù)據(jù)分配器發(fā)出訪問SDRAM 的請求,然后開始一 次DMA 操作。仲裁和數(shù)據(jù)分配器的功能是決定當(dāng)前哪一個端口具有訪問SDRAM 的權(quán)利。 SDRAM 時序控制器則負(fù)責(zé)產(chǎn)生操作SDRAM 必須的命令碼,并且傳遞數(shù)據(jù)。
圖 2 三端口非透明型SDRAM 控制器的結(jié)構(gòu)
外部設(shè)備與 SDRAM 之間通過一個雙口RAM(DPRAM)進(jìn)行隔離。外部設(shè)備可以直 接讀寫DPRAM 的右側(cè)端口,也可以通過設(shè)置DMA 寄存器來啟動DPRAM 左側(cè)端口與 SDRAM 之間的DMA 操作。SDRAM 控制器的基本工作原理如下:
(1)寫操作:當(dāng)外部設(shè)備需要向SDRAM 寫數(shù)據(jù)時,首先將數(shù)據(jù)存入DPRAM,然后 啟動一個從DPRAM 到SDRAM 的DMA。
(2)讀操作:當(dāng)外部設(shè)備需要讀SDRAM 時,首先啟動一個從SDRAM 到DPRAM 的 DMA,等DMA 結(jié)束以后再從DPRAM 讀取數(shù)據(jù)。
(3)基于扇區(qū)的長度和地址控制:為了簡化DMA 控制器以及其它的控制邏輯,DPRAM 和SDRAM 之間的DMA 傳輸不是任意長度任意地址的DMA 傳輸,而是以扇區(qū)為基本數(shù)傳 單位。這里定義一個扇區(qū)的長度為SDRAM 中的一行(或者叫一個page)。每個DPRAM 則 順序劃分為2 個扇區(qū)。每次DMA 操作完成一個完整扇區(qū)數(shù)據(jù)的搬移。
(4)仲裁控制:當(dāng)兩個或是三個DMA 控制器同時請求訪問SDRAM 時,由仲裁控制 器根據(jù)優(yōu)先級規(guī)則進(jìn)行控制。設(shè)計中采用了輪換優(yōu)先級的方式,即:剛剛完成了一次DMA 操作的端口具有比較低的優(yōu)先級,當(dāng)前具有最高優(yōu)先級的端口有權(quán)占用SDRAM 直至本次 DMA 結(jié)束,這樣,就可以三個端口分時占用DMA 通道,保證三個端口之間平均的分配 SDRAM 的帶寬。
5 仲裁器的設(shè)計
仲裁及數(shù)據(jù)分配器的設(shè)計的核心問題是輪換優(yōu)先級的設(shè)計。必須保證三個端口分時占用 DMA 通道,保證平均分配帶寬。采用有限狀態(tài)機(jī)作為仲裁器的控制邏輯,這樣既可以保證 優(yōu)先級設(shè)計的穩(wěn)定性,又可以確保仲裁器判決的實時性,有限狀態(tài)機(jī)的設(shè)計如圖3 所示。
圖 3 仲裁器的有限狀態(tài)機(jī)設(shè)計
設(shè)計中最復(fù)雜的情況是:一個通道訪問SDRAM 的同時(如A 通道),另外兩個通道同時 申請下一次訪問SDRAM(如B、C 通道),這樣就需要有一個標(biāo)志位,用它來記錄上一次訪 問過SDRAM 的通道,在下一次仲裁時把它排除在外,直到再下一次仲裁時才予以考慮。
每次DMA 結(jié)束后,都自動返回到IDLE 的狀態(tài),通過request 標(biāo)志位,上次DMA 通道記錄 位來判斷此次訪問SDRAM 的通道。具體設(shè)計如下:
設(shè)初始狀態(tài)下,默認(rèn)A 端口具有最高優(yōu)先級,然后A、B、C 三個端口具有輪換優(yōu)先級;
設(shè)置一個標(biāo)志位 old_request,表示上一次響應(yīng)的端口,“100”A 端口響應(yīng),“010”B 端 口響應(yīng),“001”C 端口響應(yīng);
利用一個標(biāo)志位 request[2:0]作為狀態(tài)翻轉(zhuǎn)的標(biāo)志;
利用標(biāo)志位 two_request,three_request 作為進(jìn)入兩個或三個端口同時請求狀態(tài)的標(biāo)志, two_request = ABC + ABC + ABC,three_request = ABC。
6 結(jié)論
本文利用 FPGA 設(shè)計并實現(xiàn)了一個相對專用的三端口非透明型SDRAM 控制器。本文 作者創(chuàng)新點在于:通過設(shè)計一個帶輪換優(yōu)先級設(shè)置的多端口SDRAM 控制器,采用乒乓的 DMA 傳輸機(jī)制,將復(fù)雜的SDRAM 訪問虛擬成一個簡單的三口RAM 的訪問,具有訪問簡 單、控制靈活、傳輸帶寬大等特點。已在某雷達(dá)信號存儲與預(yù)處理系統(tǒng)中成功應(yīng)用。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21736瀏覽量
603421 -
控制器
+關(guān)注
關(guān)注
112文章
16361瀏覽量
178072 -
雷達(dá)
+關(guān)注
關(guān)注
50文章
2936瀏覽量
117533
發(fā)布評論請先 登錄
相關(guān)推薦
評論