版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 單口RAM計數(shù)器</b></p><p><b> 設(shè)計題目</b></p><p> 用一個8×256的單口RAM完成256個8位計數(shù)器,計數(shù)器的初值分別為0-255,時鐘頻率為10MHz,計數(shù)器計數(shù)頻率為5/256MHz。</p><p><b> 設(shè)計規(guī)范<
2、;/b></p><p> 1、功能:完成一個模為256的計數(shù)器。</p><p><b> 2、輸入輸出變量:</b></p><p> Clk(輸入時鐘)、rst_n(復(fù)位信號)、outdata(輸出信號)</p><p> Clk:時鐘信號,10MHZ</p><p> rs
3、t_n:復(fù)位信號,低電平有效,當復(fù)位信號有效時,對存儲單元進行復(fù)位,具體設(shè)計:</p><p> if(!rst_n)</p><p><b> begin</b></p><p> for(i=0;i<256;i=i+1)</p><p> RAM[i]<=i; </p><p&
4、gt;<b> end </b></p><p> outdata: 輸出變量,對存儲單元的計數(shù)情況進行檢驗,方便檢查。</p><p><b> 3、實現(xiàn)方案</b></p><p> 首先對整個系統(tǒng)的功能進行研究,將整個系統(tǒng)進行模塊劃分:</p><p><b> 模塊劃分說
5、明:</b></p><p> 二分頻功能塊:對系統(tǒng)時鐘進行而分頻,形成5MHZ的時鐘;</p><p> 輸入變量clk(10MHZ),輸出變量為clk1(5MHZ)。</p><p> 一個地址自加模塊:當一個時鐘上升沿來時,觸發(fā)地址器加一,從而對ram單元進行選擇,也就是實現(xiàn)了對5MHZ的256分頻,所以通過以上兩個模塊,共同完成了頻率為5/
6、256MHZ的時鐘。輸入信號為clk1(5MHZ),輸出變量為8位寬的地址信號。</p><p> 存儲單元:存儲功能,存放每個計數(shù)器的值。</p><p> 存儲容量:256*8,</p><p> 輸入變量:地址信號、時鐘信號clk1</p><p> 輸出變量:outdata(檢驗結(jié)果正確性,可有可無)</p>&
7、lt;p><b> 總體實現(xiàn)方式</b></p><p><b> 最終模塊</b></p><p><b> 模塊劃分</b></p><p><b> 模塊功能</b></p><p> 二分頻:對時鐘頻率進行分頻,得到5MHZ的頻率信
8、號clk1</p><p> 8bit地址:由每個時鐘信號clk1進行觸發(fā),將地址信號addr進行加一,并將結(jié)果送至存儲單元進行單元選擇。</p><p> 256*8的RAM:實現(xiàn)8個模為256的計數(shù)器,并有地址線進行選擇輸出。</p><p><b> 模塊源代碼</b></p><p><b>
9、1、二分頻</b></p><p> module diff_f(clk,out);//分頻器</p><p> input clk;</p><p> output out;</p><p><b> reg out;</b></p><p><b> initi
10、al</b></p><p><b> out=0;</b></p><p> always @(posedge clk) //分頻</p><p> out = out+1;</p><p><b> endmodule</b></p><p><
11、b> 2、地址自加</b></p><p> module address(clk1,addr1);</p><p> input clk1; //輸入時鐘</p><p> output [7:0]addr1;//輸出地址</p><p> reg [7:0]addr1;</p><p>
12、 always@(negedge clk1 or negedge rst_n)</p><p> if(!rst_n)</p><p> addr1<=8'b0000_0000;</p><p> else //if(clk1)</p><p> addr1<=addr1+1; //地址加</p>
13、<p> endmodule </p><p><b> 3、RAM存儲單元</b></p><p> module ram256_8(clk2,addr2,rst_n,outdata);</p><p> input clk2; //輸入時鐘</p><p> inpu
14、t rst_n; //復(fù)位信號</p><p> input [7:0]addr2; //地址信號</p><p> output [7:0]outdata; //輸出驗證</p><p> reg [7:0] outdata;</p><p> reg [7:0] RAM [255:0];</
15、p><p> integer i;</p><p> always @(negedge clk2 or posedge rst_n ) </p><p> if(!rst_n) //系統(tǒng)復(fù)位</p><p><b> begin</b></p><p>
16、; for(i=0;i<256;i=i+1)</p><p> RAM[i]<=i; </p><p><b> end </b></p><p><b> else</b></p><p><b> begin</b></p><p&
17、gt; RAM[addr2] = RAM[addr2]+1; //計數(shù)器值加一 </p><p><b> end </b></p><p> always @(negedge clk2 ) </p><p> outdata <= RAM[addr2];</p><p> /* always @
18、(posedge clk2)</p><p> outdata <=RAM[addr2-1]; */ </p><p> endmodule4、頂層模塊</p><p> module top(clk0,rst_n0,outdata0);</p><p><b> //輸入信號說明</b></p
19、><p> input clk0;</p><p> input rst_n0;</p><p><b> //輸出信號</b></p><p> input clk0;</p><p> input rst_n0;</p><p> output [7:0]out
20、data0;</p><p> wire clk_t;</p><p> wire [7:0]addr_t;</p><p> wire[7:0] outdata0;</p><p> diff_f duv1(.clk(clk0),.out(clk_t));//模塊實例化</p><p> address
21、 duv2(.clk1(clk_t),.addr1(addr_t),.rst_n(rst_n0));</p><p> ram256_8 duv3(.clk2(clk_t),.addr2(addr_t),.rst_n(rst_n0),.outdata(outdata0)); </p><p><b> endmodule</b></p>&l
22、t;p><b> 5、驗證模塊</b></p><p> `timescale 1ns/100ps //時間精度</p><p> module test;</p><p><b> reg CLK;</b></p><p> reg RST_N;</p><p
23、> wire [7:0]OUT;</p><p> top cc(.clk0(CLK),.rst_n0(RST_N),.outdata0(OUT)); //頂層模塊實例化 </p><p><b> initial</b></p><p><b> begin</b></p><p>
24、; RST_N=0; //對系統(tǒng)進行清零</p><p> #3 RST_N=1; //復(fù)位信號無效</p><p><b> end</b></p><p><b> initial </b></p><p><b> begin </b></p>
25、<p><b> CLK=1;</b></p><p> forever #1 CLK=~CLK;</p><p><b> end</b></p><p> endmodule </p><p><b> 設(shè)計驗證</b></p>
26、<p> 通過對設(shè)計的模塊進行仿真,得到計數(shù)器的功能正確,其輸出波形如下:</p><p><b> 經(jīng)驗證結(jié)果正確。</b></p><p> 綜合布線所得圖形如下:</p><p><b> 后仿波形</b></p><p><b> 試驗心得</b>&
27、lt;/p><p> 通過本段時間的學(xué)習(xí),最大的感觸便是能學(xué)到新的知識,能將學(xué)到的知識學(xué)以致用,更深的體會了Verilog、fpge的實際應(yīng)用。</p><p> 首先在實驗設(shè)計開始,一定要明白整個系統(tǒng)的功能以及工作原理,也就是進行系統(tǒng)分析,然后可采用自頂向下進行各個子模塊的具體分析,進行相應(yīng)的設(shè)計,并且對每個模塊進行分別得設(shè)計與驗證,然后再進行整體綜合與驗證,檢驗設(shè)計的設(shè)計完整與正確性。
28、</p><p> 在實驗中遇到的問題是:對于變量的設(shè)計以及定義線網(wǎng)(wire)、還是寄存器(reg)類型至關(guān)重要,比如說在模塊與模塊之間連線時,上一級的輸出作為下一級的輸入時,應(yīng)該定義成wire類型,但作為輸入時,應(yīng)定義成reg類型。</p><p> 其次是,在時鐘的設(shè)計方面,盡量避免時鐘延遲,因為一級延遲可能導(dǎo)致后面模塊出現(xiàn)以外而不可避免的錯誤,所以在設(shè)計時,要細致認真的設(shè)計時鐘
29、信號。且,在每個使用的if語句過程中,要盡量與else進行匹配,以免產(chǎn)生鎖存。</p><p> 再次是,在試驗中,應(yīng)學(xué)習(xí)模塊設(shè)計過程中的分析問題的方法,比如采用自頂向下還是采用自底向上的思路,要將每個模塊劃分清楚,明白每個模塊的具體內(nèi)容與功能,且明白每個模塊所需的端口以及變量定義。先寫好可行性報告,分析方案的可行性,然后再書寫電路,進行設(shè)計。我想,在模塊設(shè)計中,一定要先驗證可行性,為后面工作做好鋪墊,且此工作
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- fpga課程設(shè)計---基于ram的十口8位計數(shù)器
- fpga課程設(shè)計---基于ram的十口8位計數(shù)器
- fpga課程設(shè)計報告---采用ram實現(xiàn)計數(shù)器及fpga功能驗證
- 光控計數(shù)器課程設(shè)計
- 6進制計數(shù)器課程設(shè)計
- 里程計數(shù)器課程設(shè)計
- 微機課程設(shè)計之計數(shù)器
- 光電計數(shù)器課程設(shè)計報告
- 電子計數(shù)器課程設(shè)計報告
- 里程計數(shù)器課程設(shè)計
- 24進制計數(shù)器課程設(shè)計
- 頻率計數(shù)器課程設(shè)計
- 可控計數(shù)器的設(shè)計eda課程設(shè)計
- 課程設(shè)計---多進制計數(shù)器的設(shè)計
- 課程設(shè)計--簡易的倒數(shù)計數(shù)器
- 電子課程設(shè)計-雙通道計數(shù)器
- 雙通道計數(shù)器的電子課程設(shè)計
- 10進制加法計數(shù)器課程設(shè)計
- 電路課程設(shè)計---自動循環(huán)計數(shù)器
- 數(shù)電課程設(shè)計--藥片計數(shù)器
評論
0/150
提交評論