国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種采用FPGA設(shè)計(jì)的SDRAM控制器

2011-01-18 05:46盧安軍王信杰譚大祝
關(guān)鍵詞:預(yù)充電狀態(tài)機(jī)命令

黃 勇,盧安軍,王信杰,譚大祝

(湖北民族學(xué)院 信息工程學(xué)院,湖北 恩施 445000)

隨著大規(guī)模集成電路的發(fā)展,F(xiàn)PGA芯片的性能得到了極大的提高,使得以FPGA來(lái)構(gòu)建一個(gè)片上系統(tǒng)成為一種比較好的選擇.在完成這樣一個(gè)系統(tǒng)開(kāi)發(fā)中,常常需要用到存儲(chǔ)容量大、速度快的存儲(chǔ)器,由于SDRAM的價(jià)格低、速度快、存儲(chǔ)容量大,從而成為比較理想的器件.但SDRAM存儲(chǔ)器存在控制邏輯復(fù)雜、接口方式與普通的存儲(chǔ)器有較大差異的問(wèn)題[1-2],因此需要設(shè)計(jì)專(zhuān)門(mén)的SDRAM控制器.本文提出了一種基于Xilinx公司Spartan-3系列的FPGA芯片K4S643232H的SDRAM控制器設(shè)計(jì)方案.

1 SDRAM簡(jiǎn)介

本文采用三星的K4S643232H[3]型號(hào)SDRAM進(jìn)行測(cè)試和仿真、調(diào)試.K4S643232H是容量為2Mbyte的動(dòng)態(tài)同步RAM,由位寬為32的4×512 Kbyte字節(jié)組成.其中列地址7位,塊地址2位,行地址11位,控制命令采用標(biāo)準(zhǔn)的SDRAM控制命令.

SDRAM的控制命令主要包括:模式寄存器設(shè)置命令、激活命令、預(yù)充命令、讀命令、寫(xiě)命令、帶預(yù)充的讀命令、帶預(yù)充的寫(xiě)命令、自動(dòng)刷新命令、自我刷新命令、突發(fā)停命令、空操作命令.SDRAM器件的管腳分為控制信號(hào)、地址和數(shù)據(jù)三類(lèi).控制信號(hào)傳遞讀寫(xiě)控制信息,地址和數(shù)據(jù)線分別傳輸讀寫(xiě)地址和數(shù)據(jù)信號(hào).所有的信號(hào)同步于SDRAM的控制時(shí)鐘,從而實(shí)現(xiàn)了數(shù)據(jù)的同步傳遞.

因?yàn)镾DRAM的結(jié)構(gòu)原因,每間隔一定的時(shí)間就必須對(duì)整個(gè)存儲(chǔ)空間進(jìn)行一次刷新,以保持存儲(chǔ)的數(shù)據(jù).此外,SDRAM尋址采用行激活的方式,首先在控制命令的指導(dǎo)下激活相應(yīng)的行,然后傳遞列地址,在操作完成以后還要關(guān)閉相應(yīng)的行.

根據(jù)輸入命令,SDRAM狀態(tài)在內(nèi)部狀態(tài)間轉(zhuǎn)移.內(nèi)部狀態(tài)包括模式寄存器設(shè)置狀態(tài)、激活狀態(tài)、預(yù)充狀態(tài)、寫(xiě)狀態(tài)、讀狀態(tài)、預(yù)充讀狀態(tài)、預(yù)充寫(xiě)狀態(tài)、自動(dòng)刷新?tīng)顟B(tài)及自我刷新?tīng)顟B(tài).

2 硬件設(shè)計(jì)

2.1 控制器整體結(jié)構(gòu)

為了提高控制的效率,本控制器采用簡(jiǎn)潔的接口時(shí)序、狀態(tài)機(jī).控制讀寫(xiě)外部接口僅僅包括write_req、write_en、read_req、read_en以及地址信號(hào)、數(shù)據(jù)信號(hào)、控制信號(hào)[4].當(dāng)外部需要寫(xiě)入數(shù)據(jù)時(shí),即將write_req拉高,SDRAM控制器調(diào)整狀態(tài)機(jī)進(jìn)入寫(xiě)狀態(tài),并將write_en拉高,外部檢測(cè)到write_en為高即傳遞需要寫(xiě)的地址和數(shù)據(jù).同理,完成讀操作.為了防止讀寫(xiě)操作的沖突,可以對(duì)讀寫(xiě)操作設(shè)置優(yōu)先級(jí).如果寫(xiě)優(yōu)先,當(dāng)write_req、read_req同時(shí)為高電平,首先進(jìn)行寫(xiě)操作,只有當(dāng)write_req為低、read_req為低時(shí)才進(jìn)行讀操作.

因?yàn)镾DARM控制器不能自由的換行換塊,在換行讀寫(xiě)、換塊讀寫(xiě)之前必須對(duì)新的行或者塊進(jìn)行激活.如果讓外部模塊調(diào)整不同行、塊地址之間的間隔,會(huì)使控制顯得復(fù)雜繁瑣,為此在SDRAM控制器中加入了特有的地址檢測(cè)模塊.

當(dāng)?shù)刂窓z測(cè)模塊檢測(cè)到讀寫(xiě)地址換行或者換塊時(shí),會(huì)通知狀態(tài)機(jī)停止當(dāng)前的讀寫(xiě)操作,關(guān)閉當(dāng)前的行或者塊,然后激活新的行或者塊.然后進(jìn)入讀寫(xiě)操作.

對(duì)于外部模塊,SDRAM控制器的上述操作是屏蔽的,外部模塊只需要關(guān)心write_en,read_en即可.整體的接口圖如圖1所示.

參照通用的SDRAM控制器,將SDRAM分為時(shí)序狀態(tài)機(jī)、數(shù)據(jù)通道、地址通道、控制命令、接口電路等幾個(gè)部分.以狀態(tài)機(jī)為核心,其他模塊依照不同的狀態(tài)產(chǎn)生相應(yīng)的操作,構(gòu)建SDRAM的模塊,各個(gè)模塊之間的接口如圖2所示.

圖1 整體接口圖 圖2 SDRAM的模塊結(jié)構(gòu)圖Fig.1 The overall interface diagram Fig.2 SDRAM module structure diagram

2.2 控制器的模塊

SDRAM控制器由七個(gè)模塊構(gòu)成[5-6],分別包括100 us的延時(shí)模塊delay_100 us、刷新模塊ref_req、地址控制模addr_channel、命令控制模塊command_output、讀寫(xiě)數(shù)據(jù)控制模塊data_channel、狀態(tài)機(jī)模塊state_machine、接口模塊.如圖3所示.

100 us的延時(shí)模塊delay_100 us完成正常工作之前的100 us的延時(shí)操作,初始狀態(tài)的dly_100 us信號(hào)線為低電平,100 us后置高電平完成100 us的延時(shí).接口模塊如圖3(a)所示.

刷新模塊ref_req為狀態(tài)機(jī)提供必要的刷新信號(hào),每個(gè)65ms/4096的時(shí)間單位,rsf_req信號(hào)線置高電平,狀態(tài)機(jī)檢測(cè)到這個(gè)高電平后進(jìn)入刷新操作狀態(tài),完成刷新操作.刷新模塊如圖3(b)所示.

地址控制模塊addr_channel是SDRAM控制器與SDRAM進(jìn)行地址傳遞的通道,讀狀態(tài)輸出讀地址,寫(xiě)狀態(tài)輸出寫(xiě)地址,地址控制模塊如圖3(c)所示.

命令控制模塊command_output是SDRAM控制器的命令輸出接口,按照不同的狀態(tài),該模塊輸出相應(yīng)的控制命令,控制SDRAM完成不同的操作,命令控制模塊如圖3(d)所示.

讀寫(xiě)數(shù)據(jù)控制模塊data_channel是SDRAM控制器與SDRAM進(jìn)行數(shù)據(jù)交換的通道,ram_data為輸入輸出端口,寫(xiě)狀態(tài)時(shí)向SDRAM輸出數(shù)據(jù),讀狀態(tài)時(shí)從SDRAM中讀取數(shù)據(jù),讀寫(xiě)數(shù)據(jù)控制模塊如圖3(e)所示.

狀態(tài)機(jī)模塊state_machine控制SDRAM工作的狀態(tài),是SDRAM控制器的核心,其他各個(gè)模塊按照狀態(tài)機(jī)模塊state_machine提供的狀態(tài)工作,狀態(tài)模塊如圖3(f)所示.

接口模塊是SDRAM控制與外部進(jìn)行通訊的接口,該模塊將外部的請(qǐng)求和使能信號(hào)轉(zhuǎn)化為SDRAM可執(zhí)行的操作信號(hào),從而實(shí)現(xiàn)SDRAM控制器與外部的信息交流,接口模塊如圖3(g)所示.

(a)100 us的延時(shí)模塊;(b)刷新模塊;(c)地址控制模塊;(d)命令控制模塊;(e)讀寫(xiě)數(shù)據(jù)控制模塊;(f)狀態(tài)機(jī)模塊;(g)接口模塊 圖3 SDRAM控制器各模塊結(jié)構(gòu)圖Fig.3 SDRAM controller every module structure diagram

3 軟件設(shè)計(jì)

3.1 控制器的工作狀態(tài)機(jī)

控制器的狀態(tài)機(jī)包括:初始化狀態(tài)機(jī)、工作狀態(tài)機(jī)[7].初始化狀態(tài)機(jī)由i_start、i_pall、i_aref0、i_aref1、i_aref2、i_mrs組成,分別完成延時(shí)、預(yù)充電、刷新、模式寄存器編輯操作.工作狀態(tài)機(jī)由c_aref、c_end、c_pall、c_idle、c_ract、c_read、c_wact、c_write組成,分別完成自我刷新、預(yù)充電、激活、讀、寫(xiě)操作,其中c_end、c_idle是用來(lái)調(diào)整時(shí)序的中間狀態(tài).

SDRAM在啟動(dòng)之前存在100 us的等待時(shí)間,以保持電壓的穩(wěn)定.當(dāng)電壓穩(wěn)定以后進(jìn)入初始化狀態(tài)機(jī),初始化包括預(yù)充電和若干次的刷新、模式寄存器的設(shè)置.整個(gè)工作流程如圖4所示.

SDRAM初始化完成以后即進(jìn)入空閑狀態(tài),等待外部的寫(xiě)請(qǐng)求或者讀請(qǐng)求、刷新請(qǐng)求.其中刷新請(qǐng)求的優(yōu)先級(jí)最高,寫(xiě)請(qǐng)求次之,讀請(qǐng)求最后.當(dāng)然,各種請(qǐng)求的優(yōu)先級(jí)可以按照要求靈活的改變.整個(gè)工作的時(shí)序狀態(tài)機(jī)如圖5所示.

圖4 工作流程圖 圖5 SDRAM控制器狀態(tài)機(jī) Fig.4 Work flowchart Fig.5 SDRAM controller state machine

每次完成讀寫(xiě)操作之后,SDRAM自動(dòng)進(jìn)入預(yù)充電狀態(tài),關(guān)閉當(dāng)前的行或者塊,再次進(jìn)入空閑狀態(tài),等待下一次請(qǐng)求的到來(lái).

3.2 各模塊的控制機(jī)

3.2.1 數(shù)據(jù)通道模塊 當(dāng)狀態(tài)機(jī)進(jìn)入c_write狀態(tài)時(shí),輸入輸出的端口線導(dǎo)通,即:assign ram_data = ram_data_selct ? output_ram_data:52'bz;中的ram_data_selct拉高,為寫(xiě)數(shù)據(jù)做好準(zhǔn)備;當(dāng)狀態(tài)機(jī)進(jìn)入c_read狀態(tài)時(shí),輸入輸出雙端口線高阻,為接受讀數(shù)據(jù)做準(zhǔn)備,即:assign ram_data=ram_data_selct?output_ram_data:52'bz;中的ram_data_selct拉低,為讀數(shù)據(jù)做好準(zhǔn)備.

3.2.2 地址通道模塊 地址通道不僅傳輸讀寫(xiě)數(shù)據(jù)的地址,而且傳輸控制命令,模式寄存器的數(shù)據(jù).在i_mrs狀態(tài),數(shù)據(jù)通道傳遞模式寄存器的相關(guān)參數(shù),在c_ract狀態(tài)傳遞讀操作的行地址,在c_read狀態(tài)傳遞讀操作的列地址,在w_ract狀態(tài)傳遞寫(xiě)操作的行地址,在w_read狀態(tài)傳遞寫(xiě)操作的列地址.

3.2.3 命令模塊 在不同的狀態(tài),控制命令不同,也使命令模塊的輸出不同.在i_start、c_end、c_idle時(shí)輸出NOP命令,在i_aref0、i_aref1、i_aref2、c_pall狀態(tài)時(shí)輸出自刷新命令,在c_ract、c_read、c_wact、c_write狀態(tài)分別輸出激活、讀命令、激活、寫(xiě)命令.

3.3 SDRAM仿真模型

采用三星SDRAM的verilog模型[8]進(jìn)行功能仿真、時(shí)序仿真,仿真模型的部分程序如下:

ifdef CS2_CKE2

ifdef DPD_PIN

module sdram(clk, cs0b, cs1b, cke0, cke1, ba, ad, rasb, casb, web, dqm, dqi, dpdb);

else

module sdram(clk, cs0b, cs1b, cke0, cke1, ba, ad, rasb, casb, web, dqm, dqi);

endif

采用sdram(clk, cs0b, cs1b, cke0, cke1, ba, ad, rasb, casb, web, dqm, dqi);因?yàn)樵陔娐钒迳弦呀?jīng)將dpdb全部拉低.

4 仿真結(jié)果

經(jīng)過(guò)modelsim功能仿真[9-10]后的結(jié)果完全正確,仿真波形圖如圖6所示.

(a)SDRAM控制器初始化;(b)SDRAM控制器換行;(c)寫(xiě)操作的數(shù)據(jù);(d)讀操作的數(shù)據(jù);(e)讀寫(xiě)之間的切換 圖6 仿真波形圖Fig.6 The Simulation waveform

SDRAM能順利的完成讀寫(xiě)、刷新和預(yù)充電,行與行、塊與塊之間的交換平穩(wěn)迅速,無(wú)論是連續(xù)讀寫(xiě)還是單個(gè)的操作都非常的順暢.如果讀寫(xiě)請(qǐng)求的時(shí)序安排合理,按照SDRAM讀寫(xiě)的效率計(jì)算公式:

其中有256個(gè)時(shí)鐘周期,則連續(xù)讀寫(xiě)時(shí)間為256;換行時(shí)間包括:c_end、c_pall、c_idle、c_wact/c_ract,總共需要10個(gè)時(shí)鐘周期;SDRAM每個(gè)64ms刷新一次,采用的時(shí)鐘為125 MHZ,SDRAM行地址為4096,則總的刷新時(shí)鐘數(shù)為:64 ms/(8 ns*4096)= 1930,所以刷新間隔為1930;刷新操作包括:c_end、c_pall、c_idle、c_ref、c_wact/c_ract,總共需要18個(gè)周期,即刷新操作時(shí)間為18.從仿真結(jié)果可知本SDRAM的最高效率可以達(dá)到90%以上.先將連續(xù)增加的數(shù)據(jù)寫(xiě)到SDRAM的儲(chǔ)存空間,然后從相應(yīng)的存儲(chǔ)空間讀取數(shù)據(jù),輸入數(shù)據(jù)與輸出數(shù)據(jù)應(yīng)當(dāng)相等,實(shí)際的仿真結(jié)果如所圖6(b)所示.

下面是三段modelsim時(shí)序仿真的結(jié)果:

第一段:讀寫(xiě)之間的切換

# >> write (D Bank) at 351430.0 ns

# >> precharge (A,B,C, and D bank) at 351486.0 ns

# >> active (A Bank) at 351518.0 ns

# >> write (A Bank) at 351542.0 ns

當(dāng)寫(xiě)地址要換塊時(shí),先停止當(dāng)前的寫(xiě)狀態(tài),然后進(jìn)入預(yù)充電狀態(tài)(precharge),關(guān)閉所有的塊(A,B,C, and D bank),最后再次激活新的塊(active (A Bank)),并再次進(jìn)入寫(xiě)狀態(tài),重新寫(xiě)下一個(gè)塊的數(shù)據(jù).

第二段:讀過(guò)程中換塊

# >> read (B Bank) at 311190.0 ns

# >> precharge (A,B,C, and D bank) at 311246.0 ns

# >> active (C Bank) at 311278.0 ns

# >> read (C Bank) at 311302.0 ns

當(dāng)讀地址要換塊時(shí),先停止當(dāng)前的讀狀態(tài),然后進(jìn)入預(yù)充電狀態(tài)(precharge),關(guān)閉所有的塊(A,B,C, and D bank),最后再次激活新的塊(active (A Bank)),并再次進(jìn)入讀狀態(tài),重新讀下一個(gè)塊的數(shù)據(jù).

第三段:寫(xiě)過(guò)程中自我刷新

# >> write (D Bank) at 349518.0 ns

# >> precharge (A,B,C, and D bank) at 349574.0 ns

# >> auto refresh at 349606.0 ns

# >> active (D Bank) at 349678.0 ns

# >> write (D Bank) at 349702.0 ns

當(dāng)SDRAM需要自我刷新時(shí),停止當(dāng)前的狀態(tài),然后進(jìn)入預(yù)充電狀態(tài)(precharge),關(guān)閉所有的塊(A,B,C, and D bank),最后進(jìn)入自我刷新?tīng)顟B(tài)(auto refresh),刷新完成以后再次回到以前的讀寫(xiě)狀態(tài).

可以發(fā)現(xiàn)SDRAM順利地完成了相應(yīng)的操作:如讀操作、寫(xiě)操作、自我刷新、換塊、讀寫(xiě)之間的切換、預(yù)充電、激活等.

5 結(jié)束語(yǔ)

本控制器采用簡(jiǎn)化的接口電路,讀寫(xiě)控制方便,為了配合本控制器的操作可以編寫(xiě)相應(yīng)的讀寫(xiě)地址模塊.從仿真結(jié)果可以看出,在讀寫(xiě)操作和換行換塊的過(guò)程中,有幾個(gè)時(shí)鐘周期的空白命令,

4 結(jié)論

在充分考慮螞蟻群算法計(jì)算代價(jià)大、容易早熟收斂的缺點(diǎn),利用非線性單純形算法局部搜索能力強(qiáng)的的特點(diǎn),將兩者合理融合,設(shè)計(jì)單純形蟻群算法,通過(guò)標(biāo)準(zhǔn)函數(shù)測(cè)試表明該算法較一般蟻群算法較好.并且應(yīng)用該算法解決了大規(guī)模垃圾站運(yùn)輸問(wèn)題.

[1] Dorigo M,Di Caro G,Gambardella L M.Ant algorithms for discrete optimization[J].Artificial Life,1999,5(2):137-172.

[2] Dorigo M.Optimization,learning and natural algorithms[D].Department of Electronics,Politecnico diMilano,Italy,1992.

[3] 吳啟迪,汪鐳.智能蟻群算法及應(yīng)用[M].上海:上??萍冀逃霭嫔纾?006.

[4] 段海濱,王道波,朱家強(qiáng),等.蟻群算法理論及應(yīng)用研究進(jìn)展[J].控制與決策,2004,19(12):1321-1326,1340.

[5] 段海濱,王道波,于秀芬.蟻群算法的研究現(xiàn)在及其展望[J].中國(guó)工程科學(xué),2007,9(2):99-101.

[6] 向長(zhǎng)城,黃席樾,楊祖元,等.小生境粒子群優(yōu)化算法[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(15):41-43.

[7] 劉云忠,宣慧玉.螞蟻算法在車(chē)輛路徑問(wèn)題中的應(yīng)用研究[J].信息與控制,2004,33(2):249-252.

[8] 崔雪麗,馬良,范炳全.車(chē)輛路徑問(wèn)題(VRP)的螞蟻搜索算法[J].系統(tǒng)工程學(xué),2004,19(4):418-422.

[9] 中南大學(xué)數(shù)學(xué)建模網(wǎng)站資料下載[EB/OL].(2009-08)[2011-07-26].http://mcm.csu.edu.cn/resource/show resouce.aspx?resouceid=105.

猜你喜歡
預(yù)充電狀態(tài)機(jī)命令
動(dòng)力電池預(yù)充設(shè)計(jì)及溫升特性研究
只聽(tīng)主人的命令
電動(dòng)汽車(chē)預(yù)充電保護(hù)設(shè)計(jì)
電動(dòng)汽車(chē)分級(jí)預(yù)充電回路及預(yù)充電阻選型匹配方法研究
基于有限狀態(tài)機(jī)的交會(huì)對(duì)接飛行任務(wù)規(guī)劃方法
移防命令下達(dá)后
這是人民的命令
基于變頻器的新型預(yù)充電電路的研究
FPGA設(shè)計(jì)中狀態(tài)機(jī)安全性研究
基于反熔絲FPGA的有限狀態(tài)機(jī)加固設(shè)計(jì)