資源描述:
《特權(quán)同學(xué)sdram源程序分析》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、特權(quán)同學(xué)SDRAM-測試程序程序分析知識點:sdram控制器,時序約束,測試文件第一部分:基本模塊Sdram測試包括外部數(shù)據(jù)產(chǎn)生模塊,fifo模塊,sdram控制器,uart-RS232傳輸模塊。Sdram控制器模塊分塊三塊:控制模塊,命令模塊,數(shù)據(jù)傳輸模塊具體來說,1.為什么要用FIFO模塊呢?是因為外部數(shù)據(jù)與SDRAM控制器接收的速率不匹配,外部數(shù)據(jù)產(chǎn)生速率是FPGA系統(tǒng)時鐘(25MHz),而SDRAM是100MHz;同樣,把SDRAM中數(shù)據(jù)通過串口傳輸出到上位機(jī)時,也會有一個速率匹配問題,所以就有兩個FIFO,
2、其中一個寫FIFO,一個讀FIFO。2.Sdram控制器中控制模塊完成初始化,自刷新,讀寫控制。命令模塊有兩個狀態(tài)機(jī),一個是初始化狀態(tài),另一個是工作狀態(tài)。第二部分:各個部分詳解1.Sdram控制模塊輸入引腳有:讀、寫請求,輸出引腳有:寫應(yīng)答(表明正在寫),讀應(yīng)答,忙信號(表明正在工作),初始狀態(tài),工作狀態(tài),計數(shù)時鐘(用于定義時間段,與數(shù)據(jù)傳輸模塊緊密聯(lián)系)因為要用到好多時間參數(shù),就直接建立一個參數(shù)文件。這個參數(shù)文件不是一個模塊,所以不能用moduleendmodule來表示,里面所有參數(shù)有`define來開始,只是最
3、后命名為.v文件。要用這個文件參數(shù)必須要前面加個“`”。`defineend_trpcnt_clk_r==TRP_CLK,其中cnt_clk_r與控制模塊中cnt_clk_r一致。(這點是新學(xué)的)初始化過程分為200us等待,所有L-band預(yù)充電,8個預(yù)刷新,模式寄存器設(shè)置。//------------------------------------------------------------------------------//上電后200us計時,計時時間到,則done_200us=1//--------
4、---------------------------------------------------------------------reg[14:0]cnt_200us;always@(posedgeclkornegedgerst_n)if(!rst_n)cnt_200us<=15'd0;elseif(cnt_200us<15'd20_000)cnt_200us<=cnt_200us+1'b1;//計數(shù)assigndone_200us=(cnt_200us==15'd20_000);//條件滿足則done_20
5、0us=1,此后一直保持高電平,因為計數(shù)器保持不變,這不同于一個脈沖信號//------------------------------------------------------------------------------//SDRAM的初始化操作狀態(tài)機(jī)//------------------------------------------------------------------------------這個時間是怎么計算的?主要分析一個這個時間計算相當(dāng)于用一個計時開關(guān),這個開關(guān)就是cnt_rst_n
6、(低電平計數(shù)器復(fù)位)。在參數(shù)文件中,`defineend_trpcnt_clk_r==TRP_CLK。cnt_clk_r在啟動時就一直遞增,而達(dá)到TRP_CLK時,也就是end_trp成立,完成標(biāo)志,關(guān)閉開關(guān)cnt_rst_n.always@(posedgeclkornegedgerst_n)if(!rst_n)cnt_clk_r<=9'd0;//計數(shù)寄存器復(fù)位elseif(!cnt_rst_n)cnt_clk_r<=9'd0;//計數(shù)寄存器清零elsecnt_clk_r<=cnt_clk_r+1'b1;//啟動計數(shù)
7、延時//計數(shù)器控制邏輯always@(init_state_rorwork_state_rorcnt_clk_r)begincase(init_state_r)`I_NOP:cnt_rst_n<=1'b0;`I_PRE:cnt_rst_n<=(TRP_CLK!=0);//預(yù)充電延時計數(shù)啟動`I_TRP:cnt_rst_n<=(`end_trp)?1'b0:1'b1;//預(yù)充電計數(shù)正好是TRP_CLK,計數(shù)結(jié)束,清零計數(shù)器//-----------------------------------------------
8、-------------------------------//15us計時,產(chǎn)生自刷新請求。//每60ms全部4096行存儲區(qū)進(jìn)行一次自刷新,一行刷新時間是15us,這是一直在循環(huán)//(存儲體中電容的數(shù)據(jù)有效保存期上限是64ms)//------------------------------------------------------