時間:2008-12-08 11:06:46來源:ronggang
圖1 系統設計框圖[/align]
如圖1,兩片W982516并成32位數據總線的SDRAM。外部數據總線為32位,FIFO1為外部數據的一級緩沖,當FIFO1中的數據超過512時(SDRAM中一頁的數據量),SDRAM控制器將數據從FIFO1中讀出寫入W982516暫存,當FIFO2中的數據剩余空間大于512時,SDRMA控制器從W982516讀入一頁數據寫入FIFO2,硬盤控制器再將FIFO2中的數據寫入硬盤。
3.2 SDRAM控制器設計
3.2.1 復位初始化
[align=center]
圖2 SDRAM控制器設計框圖[/align]
如圖2,虛框內為初始化進程,SDRAM在上電后200us,由一個初始化操作來配置SDRAM的工作模式。在200us之內只能給SDRAM發NOP命令。初始化過程由啟動以下指令流完成:首先由一個預充所有BANK指令完成對所有BANK的預充,然后是八個周期的自動刷新指令,最后在模式配置指令下完成SDRAM內部模式設置寄存器的配置。模式寄存器指定了突發長度、突發類型、CAS延時等詳細的信息。為了方便靈活的應用,本設計中將SDRAM模式寄存器設置為0x027(突發長度為整頁,CAS Latency為2)。只有成功的完成初始化過程,SDRAM才可以正常工作。
3.3.2 刷新計數模塊
SDRAM要求在64ms之內對4096行進行刷新,也就是每15.6us刷新一行,由于系統時鐘周期為13ns,所以刷新計數模塊計數達到1170,就需要對SDRAM發出刷新命令。如圖3,刷新計數模塊計數到大于等于1170時,比較器輸出上升沿到D觸發器,D觸發器輸出高電平發出刷新請求,SDRAM控制器收到刷新請求后執行刷新命令。SDRAM控制器完成刷新命令后發出刷新應答信號將D觸發器的輸出端清零,同時將刷新計數器清零并重新計數。
[align=center]
圖3 刷新模塊[/align]
3.3.3 工作過程
FPGA完成對SDRAM芯片的初始化后,進入空閑狀態,然后根據外部信號做出相應的動作,如自動刷新、讀和寫數據。如果收到自動刷新請求,則控制器向SDRAM發出自動刷新命令,自動刷新的優先級最高;如果FIFO1中的數據超過512個(如圖1),則首先激活要寫的行,然后再將數據寫入SDRAM,最后經過預充電關閉這一行回到空閑狀態,用一個寄存器記錄SDRAM里有效數據的行數,此時有效數據的行數加1,行地址加1,寫操作的優先級第二;如果FIFO2中的剩余空間超過512個并且有效數據的行數大于0時則可執行讀操作,同寫操作一樣也需要首先激活要讀的行,然后再將數據從SDRAM里讀出寫入到FIFO2,并經過預充電關閉這一行回到空閑狀態,同時有效數據的行數減1, 行地址加1,讀操作的優先級最低。這樣就設計成一個64Mbytes的大容量循環緩沖。狀態機在空閑時的狀態轉移代碼如下:
work_idle:
begin
if(refresh)//收到刷新請求,優先級最高
work_state <= work_refresh;
else if(ff_halffull)//FIFO1緩沖半滿,先寫SDRAM
work_state <= work_write;
else if((wr_counter>0)&ff_halfempt) //FIFO2緩沖半空,讀SDRAM
work_state <= work_read;
else
work_state <= work_idle;
end
4 總結
本設計已經成功運用于某型雷達,可記錄大于40Mbytes/s的實時雷達信號。SDRAM控制器工作穩定,從而實現了低成本、大容量、高速度的設計目標。
標簽:
傳動網版權與免責聲明:凡本網注明[來源:傳動網]的所有文字、圖片、音視和視頻文件,版權均為傳動網(www.cdcst56.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-12-10
2025-11-20
2025-11-10
2025-11-10
2025-11-07
2025-10-31