解放軍92785部隊 劉宗福
?
片上FLASH存儲器接口的設計
解放軍92785部隊 劉宗福
【摘要】DSP片內有限的存儲容量限制了其信息處理能力,針對這一特點,本文設計了外部存儲器接口,使DSP具有了和FLASH等異步存儲器的無縫接口,用戶可以方便的外接存儲器芯片來擴展存儲空間。文章中給出了設計思路與實現,并進行了RTL級驗證,設計的外部存儲器接口在功能和時序上符合各種存儲器技術規范,達到了預定目標。
【關鍵詞】數字信號處理器;FLASH存儲器;外部存儲器接口;有限狀態機
基于DSP的末制導雷達信息處理對存儲空間的要求較高,以滿足雷達數據實時回傳與存儲的要求。尤其在做導引頭飛行試驗或防空反導訓練時,需要外接存儲器來擴展DSP的存儲空間,用于記錄試驗訓練數據。目前用于DSP的存儲器芯片有ROM、Flash、SBSRAM、SDRAM等。然而,該類存儲器件的對外接口復雜,無法與DSP芯片進行無縫對接,給基于DSP的雷達信號處理分機設計帶來很多不便之處。因而本文設計的DSP中,片上集成了外部存儲器接口(EMIF),支持Flash等多種存儲器,可以使DSP芯片實現和FLASH存儲器芯片的無縫連接。
在系統的設計中,在DSP片上集成了外部存儲器接口EMIF。圖1是EMIF部件的框圖。CPU經由程序總線(P總線)讀取片外存儲器中的程序,經由數據總線讀寫外存中的數據, DMA總線用來進行片內和片外之間的大量數據傳輸。所有的讀寫外存的請求按優先級進行仲裁,每次選擇一個送到存儲器控制模塊,譯碼后送給相應的控制器:FLASH存儲控制器、SBSRAM控制器、SDRAM控制器,本文主要介紹FLASH存儲控制器的設計。

圖1 EMIF的框圖
Flash存儲器接口也支持ROM、異步SRAM存儲器等,這類存儲器讀寫不需要時鐘。設計該類接口主要有兩個作用,一是為了加載程序,在DSP加電后,引導加載器可通過FLASH控制器接口將片外程序加載到DSP片上存儲器,另外,FLASH存儲器可以永久保存末制導雷達的部分數據,供飛行試驗或訓練結束后進行事后數據分析。

圖2 FLASH存儲控制器的讀狀態機
讀時序的過程如下所示(寫操作流程類似):
(1)建立時間期間
首先,給出片選信號,選中指定的FLASH存儲器開始工作;其次,輸出使能信號有效,允許指定的FLASH存儲芯片根據要求對外輸出數據;第三,給出字節使能信號,標明要訪問的字節的數量與位置;建立時間的最后,給出地址信號,發送要訪問的地址信號到FLASH存儲芯片。
(2)選通時間期間
首先,給出讀選通信號,開始進入讀選通時間;其次,在CPU的時鐘上升沿采樣數據,該操作恰好領先于讀選通信號的上升;最后,進入讀選通信號上升沿,讀選通時間終止。
(3)保持時間的停止
字節使能線變為無效;地址線變為無效;輸出使能信號上升,釋放芯片的輸出使能信號。
(4)擴展保持時間期間
在保持時間結束后,需要插入擴展保持周期,使FLASH存儲控制器發出的輸出使能信號和片選信號無效。加入擴展保持時間,主要是考慮到在下一次訪問外部存儲空間時,FLASH存儲控制器可能會在不同的片選(CE)空間之間進行切換,或者改變數據的傳輸方向。
3.1 FLASH讀寫控制器的構成
FLASH存儲控制器由計數器、有限狀態機FSM與數據通路三個功能模塊構成。其中,整體的結構設計思想為FSM-D組合,以有限狀態機模塊為核心。FSM模塊控制狀態機的翻轉,同時輸出FLASH存儲控制器的狀態信號,控制進行指令譯碼與數據裝配。計數器模塊保存FLASH存儲器的讀寫時序參數,根據FSM模塊的命令開始減1計數過程,計數結束后向FSM發出定時中斷,數據通路模塊根據FSM的當前狀態,定時輸出數據信號、地址,同時負責讀寫數據內容的裝配。
3.2 計數器模塊
該模塊實現若干個計數器,記錄FLASH存儲器所有的讀寫時序參數,與讀操作有關的計數器變量如表1所示。FSM模塊給出讀寫控制信號,在進入對應狀態的同時,啟動計數器從規定的初始數值開始遞減,當計數結束后,告知狀態機進行翻轉。

表1 FLASH存儲控制器中的讀時序計數器
3.3 FSM模塊
FSM模塊接收來自EMIF控制模塊的指令,若其他存儲控制器與外部Hold請求(外部設備發出申請EMIF放棄控制存儲器的請求)未占用總線,啟動計數器模塊開始計時,根據計數器模塊的定時結果,發出中斷信號改變FSM狀態。FSM不僅要輸出FLASH存儲控制器的狀態信號,而且要根據FSM的當前所在狀態,給出讀寫操作使能信號以及外部總線的輸出使能信號。本文以讀操作為例,設計了FSM的流程,如圖2所示。
(1)空閑狀態,當接收到讀FLASH存儲器的請求后,在等待其他存儲器(SDRAM等)空閑或外設HOLD請求結束后,立即進入讀操作建立時間狀態。
(2)讀操作建立時間狀態,開始計數,當該狀態結束后進入讀選通時間狀態。
(3)讀選通時間狀態,若不采樣FLASH存儲器的ARDY信號,則當讀選通時間狀態結束后,對FLASH存儲器數據采樣,然后跳轉到第6步判斷讀保持時間計數器,若采樣ARDY信號則進入下一步完成ARDY信號采樣。
(4)在讀操作選通時間結束前的第3個CPU時鐘上升沿采樣ARDY,若信號電平為低,進入讀選通操作的擴展等待時間,等到ARDY為高時進入下一步(讀數據采樣);若在讀操作選通時間結束前的第3個CPU時鐘上升沿采樣ARDY為高,直接進入下一步(讀數據采樣)。
(5)計數3個CPU時鐘周期,在讀操作選通時間的末尾(最后一個CPU時鐘上升沿)對數據采樣,進入下一步(讀保持狀態)。
(6)若讀保持時間計數器Rhold_Count為零,如有同一CE空間的讀請求,進入第1步(重新開始讀操作),若沒有進入第8步(讀擴展保持時間);如果Rhold_Count不為零,進入下一步(讀保持時間狀態)。
(7)讀保持時間狀態,Rhold_Count計數結束后,若有同一CE空間的讀請求,進入第1步(重新開始讀操作),若無進入下一步(讀擴展保持時間)。
(8)讀擴展保持時間狀態,若有同一CE空間的讀請求到來,進入讀建立時間狀態,若無同一CE空間的讀請求,繼續進行擴展保持狀態遞減計時,若擴展保持時間計數器結束,進入IDLE(空閑)狀態。
寫操作的流程和讀操作時類似的,將讀寫操作組合,構成FLASH存儲控制器的整個狀態機。
3.4 數據通路模塊
該模塊主要根據FLASH存儲器的位寬度與讀寫時序計數器的當前數值,對地址信號、字節使能信好和寫數據進行譯碼。在DSP讀FLASH存儲器的數據時,要根據存儲器的位寬度和讀寫時序計數器的數值,將要讀的數據組裝后發送給DSP。
本文采用Modelsim仿真工具(主要用于模塊級與部件級模擬)與Ncverilog(后期用于系統級模擬)仿真工具,外接FLASH存儲器的軟核,對FLASH存儲控制器進行功能驗證,以DMA總線訪存來測試,依次測試了8b、16b、32b的異步存儲器,給出的示例為不采樣ARDY,寫32b的數據F00FFF0F的情況,如圖3所示,其中EA為地址信號,BE為字節使能信號,CE位片選信號,AOE為FLASH存儲器的輸出使能信號,AWE為寫選通信號,ED_OUT為FLASH存儲控制器對外輸出的數據。

圖3 DMA向8位的FLASH存儲器寫32位的數據
本文設計的FLASH存儲器接口,在一定程度上解決了DSP片內存儲空間的不足,用戶可以借助于FLASH存儲器接口,構建高速度、大容量的片外存儲空間。在具體的結構設計方面,FLASH存儲器接口掛在總線上,盡量滿足IP核的可重用設計,即不需要對結構做大的改動,就可以重構一個滿足不同需求的片上外部存儲器接口,只需要替換總線接口模塊為其他類型的片上總線即可。
參考文獻
[1]彭啟琮等.TMS320VC55x系列DSP的CPU與外設[M].北京:清華大學出版社,2005.
[2]夏宇聞.Verilog 數字系統設計教程[M].北京:北京航空航天大學出版社,2008.
[3]劉宗福.FT-C55 LP外部存儲器接口的設計與實現[D].國防科技大學碩士論文,2009.
[4]顧菘,等.TMS320C67系列EMIF與異步FIFO存儲器的接口設計[J].電子工程師,2005,31(5):53-55.
[5]周順燕,吳丹.TMS320C6713 DSP的高速EMIF數據接口設計與實現[J].計算機測量與控制,2010,18(7):1654-1656.
劉宗福(1984—),山東高密人,碩士研究生,工程師,主要從事雷達信號處理工作。
作者簡介: