時(shí)間:2008-12-08 11:06:46來(lái)源:ronggang
 圖1 系統(tǒng)設(shè)計(jì)框圖[/align]
  如圖1,兩片W982516并成32位數(shù)據(jù)總線的SDRAM。外部數(shù)據(jù)總線為32位,F(xiàn)IFO1為外部數(shù)據(jù)的一級(jí)緩沖,當(dāng)FIFO1中的數(shù)據(jù)超過(guò)512時(shí)(SDRAM中一頁(yè)的數(shù)據(jù)量),SDRAM控制器將數(shù)據(jù)從FIFO1中讀出寫(xiě)入W982516暫存,當(dāng)FIFO2中的數(shù)據(jù)剩余空間大于512時(shí),SDRMA控制器從W982516讀入一頁(yè)數(shù)據(jù)寫(xiě)入FIFO2,硬盤(pán)控制器再將FIFO2中的數(shù)據(jù)寫(xiě)入硬盤(pán)。
  3.2 SDRAM控制器設(shè)計(jì)
  3.2.1 復(fù)位初始化
[align=center]
圖1 系統(tǒng)設(shè)計(jì)框圖[/align]
  如圖1,兩片W982516并成32位數(shù)據(jù)總線的SDRAM。外部數(shù)據(jù)總線為32位,F(xiàn)IFO1為外部數(shù)據(jù)的一級(jí)緩沖,當(dāng)FIFO1中的數(shù)據(jù)超過(guò)512時(shí)(SDRAM中一頁(yè)的數(shù)據(jù)量),SDRAM控制器將數(shù)據(jù)從FIFO1中讀出寫(xiě)入W982516暫存,當(dāng)FIFO2中的數(shù)據(jù)剩余空間大于512時(shí),SDRMA控制器從W982516讀入一頁(yè)數(shù)據(jù)寫(xiě)入FIFO2,硬盤(pán)控制器再將FIFO2中的數(shù)據(jù)寫(xiě)入硬盤(pán)。
  3.2 SDRAM控制器設(shè)計(jì)
  3.2.1 復(fù)位初始化
[align=center] 圖2 SDRAM控制器設(shè)計(jì)框圖[/align]
  如圖2,虛框內(nèi)為初始化進(jìn)程,SDRAM在上電后200us,由一個(gè)初始化操作來(lái)配置SDRAM的工作模式。在200us之內(nèi)只能給SDRAM發(fā)NOP命令。初始化過(guò)程由啟動(dòng)以下指令流完成:首先由一個(gè)預(yù)充所有BANK指令完成對(duì)所有BANK的預(yù)充,然后是八個(gè)周期的自動(dòng)刷新指令,最后在模式配置指令下完成SDRAM內(nèi)部模式設(shè)置寄存器的配置。模式寄存器指定了突發(fā)長(zhǎng)度、突發(fā)類(lèi)型、CAS延時(shí)等詳細(xì)的信息。為了方便靈活的應(yīng)用,本設(shè)計(jì)中將SDRAM模式寄存器設(shè)置為0x027(突發(fā)長(zhǎng)度為整頁(yè),CAS Latency為2)。只有成功的完成初始化過(guò)程,SDRAM才可以正常工作。
  3.3.2 刷新計(jì)數(shù)模塊
  SDRAM要求在64ms之內(nèi)對(duì)4096行進(jìn)行刷新,也就是每15.6us刷新一行,由于系統(tǒng)時(shí)鐘周期為13ns,所以刷新計(jì)數(shù)模塊計(jì)數(shù)達(dá)到1170,就需要對(duì)SDRAM發(fā)出刷新命令。如圖3,刷新計(jì)數(shù)模塊計(jì)數(shù)到大于等于1170時(shí),比較器輸出上升沿到D觸發(fā)器,D觸發(fā)器輸出高電平發(fā)出刷新請(qǐng)求,SDRAM控制器收到刷新請(qǐng)求后執(zhí)行刷新命令。SDRAM控制器完成刷新命令后發(fā)出刷新應(yīng)答信號(hào)將D觸發(fā)器的輸出端清零,同時(shí)將刷新計(jì)數(shù)器清零并重新計(jì)數(shù)。
[align=center]
圖2 SDRAM控制器設(shè)計(jì)框圖[/align]
  如圖2,虛框內(nèi)為初始化進(jìn)程,SDRAM在上電后200us,由一個(gè)初始化操作來(lái)配置SDRAM的工作模式。在200us之內(nèi)只能給SDRAM發(fā)NOP命令。初始化過(guò)程由啟動(dòng)以下指令流完成:首先由一個(gè)預(yù)充所有BANK指令完成對(duì)所有BANK的預(yù)充,然后是八個(gè)周期的自動(dòng)刷新指令,最后在模式配置指令下完成SDRAM內(nèi)部模式設(shè)置寄存器的配置。模式寄存器指定了突發(fā)長(zhǎng)度、突發(fā)類(lèi)型、CAS延時(shí)等詳細(xì)的信息。為了方便靈活的應(yīng)用,本設(shè)計(jì)中將SDRAM模式寄存器設(shè)置為0x027(突發(fā)長(zhǎng)度為整頁(yè),CAS Latency為2)。只有成功的完成初始化過(guò)程,SDRAM才可以正常工作。
  3.3.2 刷新計(jì)數(shù)模塊
  SDRAM要求在64ms之內(nèi)對(duì)4096行進(jìn)行刷新,也就是每15.6us刷新一行,由于系統(tǒng)時(shí)鐘周期為13ns,所以刷新計(jì)數(shù)模塊計(jì)數(shù)達(dá)到1170,就需要對(duì)SDRAM發(fā)出刷新命令。如圖3,刷新計(jì)數(shù)模塊計(jì)數(shù)到大于等于1170時(shí),比較器輸出上升沿到D觸發(fā)器,D觸發(fā)器輸出高電平發(fā)出刷新請(qǐng)求,SDRAM控制器收到刷新請(qǐng)求后執(zhí)行刷新命令。SDRAM控制器完成刷新命令后發(fā)出刷新應(yīng)答信號(hào)將D觸發(fā)器的輸出端清零,同時(shí)將刷新計(jì)數(shù)器清零并重新計(jì)數(shù)。
[align=center] 圖3 刷新模塊[/align]
  3.3.3 工作過(guò)程
  FPGA完成對(duì)SDRAM芯片的初始化后,進(jìn)入空閑狀態(tài),然后根據(jù)外部信號(hào)做出相應(yīng)的動(dòng)作,如自動(dòng)刷新、讀和寫(xiě)數(shù)據(jù)。如果收到自動(dòng)刷新請(qǐng)求,則控制器向SDRAM發(fā)出自動(dòng)刷新命令,自動(dòng)刷新的優(yōu)先級(jí)最高;如果FIFO1中的數(shù)據(jù)超過(guò)512個(gè)(如圖1),則首先激活要寫(xiě)的行,然后再將數(shù)據(jù)寫(xiě)入SDRAM,最后經(jīng)過(guò)預(yù)充電關(guān)閉這一行回到空閑狀態(tài),用一個(gè)寄存器記錄SDRAM里有效數(shù)據(jù)的行數(shù),此時(shí)有效數(shù)據(jù)的行數(shù)加1,行地址加1,寫(xiě)操作的優(yōu)先級(jí)第二;如果FIFO2中的剩余空間超過(guò)512個(gè)并且有效數(shù)據(jù)的行數(shù)大于0時(shí)則可執(zhí)行讀操作,同寫(xiě)操作一樣也需要首先激活要讀的行,然后再將數(shù)據(jù)從SDRAM里讀出寫(xiě)入到FIFO2,并經(jīng)過(guò)預(yù)充電關(guān)閉這一行回到空閑狀態(tài),同時(shí)有效數(shù)據(jù)的行數(shù)減1, 行地址加1,讀操作的優(yōu)先級(jí)最低。這樣就設(shè)計(jì)成一個(gè)64Mbytes的大容量循環(huán)緩沖。狀態(tài)機(jī)在空閑時(shí)的狀態(tài)轉(zhuǎn)移代碼如下:
  work_idle:
      begin
          if(refresh)//收到刷新請(qǐng)求,優(yōu)先級(jí)最高
              work_state <= work_refresh;
                  else if(ff_halffull)//FIFO1緩沖半滿,先寫(xiě)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 總結(jié)
  本設(shè)計(jì)已經(jīng)成功運(yùn)用于某型雷達(dá),可記錄大于40Mbytes/s的實(shí)時(shí)雷達(dá)信號(hào)。SDRAM控制器工作穩(wěn)定,從而實(shí)現(xiàn)了低成本、大容量、高速度的設(shè)計(jì)目標(biāo)。
圖3 刷新模塊[/align]
  3.3.3 工作過(guò)程
  FPGA完成對(duì)SDRAM芯片的初始化后,進(jìn)入空閑狀態(tài),然后根據(jù)外部信號(hào)做出相應(yīng)的動(dòng)作,如自動(dòng)刷新、讀和寫(xiě)數(shù)據(jù)。如果收到自動(dòng)刷新請(qǐng)求,則控制器向SDRAM發(fā)出自動(dòng)刷新命令,自動(dòng)刷新的優(yōu)先級(jí)最高;如果FIFO1中的數(shù)據(jù)超過(guò)512個(gè)(如圖1),則首先激活要寫(xiě)的行,然后再將數(shù)據(jù)寫(xiě)入SDRAM,最后經(jīng)過(guò)預(yù)充電關(guān)閉這一行回到空閑狀態(tài),用一個(gè)寄存器記錄SDRAM里有效數(shù)據(jù)的行數(shù),此時(shí)有效數(shù)據(jù)的行數(shù)加1,行地址加1,寫(xiě)操作的優(yōu)先級(jí)第二;如果FIFO2中的剩余空間超過(guò)512個(gè)并且有效數(shù)據(jù)的行數(shù)大于0時(shí)則可執(zhí)行讀操作,同寫(xiě)操作一樣也需要首先激活要讀的行,然后再將數(shù)據(jù)從SDRAM里讀出寫(xiě)入到FIFO2,并經(jīng)過(guò)預(yù)充電關(guān)閉這一行回到空閑狀態(tài),同時(shí)有效數(shù)據(jù)的行數(shù)減1, 行地址加1,讀操作的優(yōu)先級(jí)最低。這樣就設(shè)計(jì)成一個(gè)64Mbytes的大容量循環(huán)緩沖。狀態(tài)機(jī)在空閑時(shí)的狀態(tài)轉(zhuǎn)移代碼如下:
  work_idle:
      begin
          if(refresh)//收到刷新請(qǐng)求,優(yōu)先級(jí)最高
              work_state <= work_refresh;
                  else if(ff_halffull)//FIFO1緩沖半滿,先寫(xiě)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 總結(jié)
  本設(shè)計(jì)已經(jīng)成功運(yùn)用于某型雷達(dá),可記錄大于40Mbytes/s的實(shí)時(shí)雷達(dá)信號(hào)。SDRAM控制器工作穩(wěn)定,從而實(shí)現(xiàn)了低成本、大容量、高速度的設(shè)計(jì)目標(biāo)。
標(biāo)簽:
                                 
                            
傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為傳動(dòng)網(wǎng)(www.surachana.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>2025-10-31
勇梅機(jī)械液壓閘門(mén)給煤機(jī)的優(yōu)點(diǎn)
2025-10-22
2025-10-17
2025-10-11
「一體機(jī)性價(jià)比王者」NK290M普及型數(shù)控...
2025-10-09
耐磨管道機(jī)器人檢測(cè)電纜CCTV,水下管道...
2025-09-23
推薦專(zhuān)題
更多>