課程設(shè)計基于RAM的十口8位計數(shù)器_第1頁
課程設(shè)計基于RAM的十口8位計數(shù)器_第2頁
課程設(shè)計基于RAM的十口8位計數(shù)器_第3頁
課程設(shè)計基于RAM的十口8位計數(shù)器_第4頁
課程設(shè)計基于RAM的十口8位計數(shù)器_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、西安郵電學院FPGA課程設(shè)計報告題目:基于RAM的十口8位計數(shù)器院系:通信與信息工程學院專業(yè)班級:電科0902班學生姓名:趙荷導師姓名:劉正濤起止時間:2012-9-10至2012-9-21年月日FPGA課程設(shè)計報告提綱1 任務(wù)用一個10×8的雙口RAM完成10個8位計數(shù)器,計數(shù)器的初值分別為110,時鐘頻率為1MHz,計數(shù)器計數(shù)頻率為1Hz。 用FPGA開發(fā)板上的按鍵作為計數(shù)器計數(shù)值的輸出選擇控制,數(shù)碼管 (或led)作為選擇計數(shù)器的計數(shù)值輸出。2 目的采用RAM實現(xiàn)計數(shù)器及FPGA功能驗證3 使用環(huán)境 (軟件/硬件環(huán)境,設(shè)備等)前仿 modelsim 6.1f后仿  Q

2、uartus II 10.14 FPGA課程設(shè)計詳細內(nèi)容4.1技術(shù)規(guī)范功能:1 先由復位鍵從選定的RAM地址中讀出預置的8位初值存入計數(shù)模塊。2. 由開始鍵開始計數(shù),暫停鍵暫停計數(shù)并同時存入RAM中以選定的存儲單元。 3. 雙端口RAM為10×8RAM由一個地址切換鍵按順序切換110個地址端口。 4.系統(tǒng)工作流程:切換端口讀出數(shù)據(jù)開始計數(shù) 暫停計數(shù) 存入數(shù)據(jù)計數(shù)流程 5切換端口讀出數(shù) 七段顯示譯碼器譯碼 輸出到數(shù)碼管顯示 讀取結(jié)果輸出流程6 分頻:1Hz的秒計時頻率,用來進行秒計時;4.2設(shè)計方案信號定義:分頻模塊Clk_50MHzclk_1Hzreset clk_1MHz

3、分頻:1Hz的秒計時頻率,用來進行秒計時分頻:時鐘信號clk_50MHz; 分頻信號 clk_1Hz; 分頻信號 clk_1MHz;計數(shù)模塊由RAM讀出初值doutclkclk_1hzdout 7:0din7:0startstartreset切換端口 讀出數(shù)據(jù) 開始計數(shù)暫停計數(shù) 存入數(shù)據(jù)計數(shù):開始計數(shù) start計數(shù)器復位 reset; 計數(shù)輸出 din7:0; 計數(shù)置數(shù) add;七段顯示譯碼器數(shù)碼管dout顯示模塊wr7:0dinclk_50MHz10×8RAM計數(shù)器dout7:03:0wr_addressrd3:0rd_adddressreseteetetstartaddRAM:

4、10×8的RAM存儲陣列10個字每個子8位輸入端 輸入地址wr_address3:0; 輸入數(shù)據(jù) din7:0; 上升沿有效寫入信號 wr; 輸出端 輸出地址rd_address3:0; 輸出數(shù)據(jù) dout7:0; 上升沿有效讀信號 rd;端口I/O功能rd I讀使能,高電平有效;系統(tǒng)使能工作,將din數(shù)據(jù)寫入ram的存儲單元中wr O寫使能,高電平有效;將ram存儲單元中的數(shù)據(jù)讀出dout.Wr_address3:0I寫地址din7:0 I數(shù)據(jù)輸入口,內(nèi)部接口dout7:0 O數(shù)據(jù)輸出,內(nèi)部數(shù)據(jù)傳送reset I復位端,時鐘下降沿有效add I計數(shù)器置數(shù)端startI開始/暫停鍵,

5、高電平開始,低電平暫停Rd_address3:0I讀地址rd_clkI讀時鐘,下降沿觸發(fā)wr_clkI寫時鐘,上升沿觸發(fā)地址劃分:ain3:0Ram存儲單元00010000_000100100000_001000110000_001101000000_010001010000_010101100000_011001110000_011110000000_100010010000_100110100000_1010En數(shù)碼管(或led)顯示模塊startRAM輸入/輸出 110clk_1hzclk計數(shù)模塊置數(shù)控制分頻模塊控制模塊:開始、暫停、返回初值,計數(shù)器顯示切換4.3功能驗證方案(1)驗證對

6、象及目的本驗證方案將描述對雙端口RAM計數(shù)器的驗證。在本文中驗證指使用軟件工具對其功能進行驗證。雙端口RAM計數(shù)器功能和指標的詳細描述請參見雙端口RAM計數(shù)器技術(shù)規(guī)范.doc在本文所描述的驗證過程中側(cè)重對RAM數(shù)據(jù)的讀取進行驗證,指標主要在硬件驗證和測試過程中完成。在本驗證過程中將驗證以下內(nèi)容:(2)驗證環(huán)境及工具根據(jù)情況驗證過程將使用以下的環(huán)境和工具進行:a)windows環(huán)境下使用ModelSim仿真工具;b)windows環(huán)境下使用QuartusII工具。 為進行驗證還應當建立仿真激勵模塊(3)預確認a.系統(tǒng)主要技術(shù)參數(shù); 經(jīng)分析,系統(tǒng)的的主要參數(shù)包括:引腳數(shù)目,引腳工作電壓,電源電壓,

7、系統(tǒng)的工作頻率。b.系統(tǒng)的模塊數(shù)目及各模塊實現(xiàn)的功能及如何知道模塊工作正常;c.總模塊驗證,看總系統(tǒng)是否正常工作。( 4)仿真確認:a.目的初步確認系統(tǒng)是否完成預期設(shè)計的功能;先分析芯片所有模塊連接關(guān)系,如下圖時鐘分頻模塊計數(shù)模塊,實現(xiàn)計數(shù),暫停,和與RAM之間的數(shù)據(jù)存取clk(50M)en clk_1Hz顯示模塊led顯示clk (50M)地址控制10×8RAMenb.逐個完成各個模塊的驗證分頻模塊:由于系統(tǒng)提供的頻率為50MHz而計數(shù)時需要的是每秒那樣計數(shù),故需要將50MHz分頻為1Hz.可為該程序編寫激勵,得到輸出,用輸出的頻率與想要得到的1Hz的信號進行比較,即可驗證。計數(shù)模

8、塊:編寫完成后可通過查看仿真圖形確認計數(shù)范圍,位寬等功能的正確。RAM存取模塊:需在仿真中編寫測試激勵對RAM進行存取驗證,在仿真圖形中確認RAM的存取功能的正確性。顯示模塊:把計數(shù)的結(jié)果通過七段顯示譯碼器顯示在數(shù)碼管上,觀察數(shù)碼管上的數(shù)字變化規(guī)律即可驗證顯示模塊是否正確。c.驗證空標志產(chǎn)生邏輯:先將復位信號置0(有效),在一定時間內(nèi)看系統(tǒng)是否產(chǎn)生空標志;d.驗證正常情況下的信號:系統(tǒng)運行時,讓復位信號為1(即復位無效),根據(jù)輸入信號得出輸出信號,與想要得到的信號進行比較。4.4 電路設(shè)計源代碼,功能仿真激勵源代碼及功能仿真結(jié)果報告分頻器模塊:module FPQ (clk_50MHz,clk

9、_1MHz,reset,clk_1Hz); input clk_50MHz,reset; output clk_1MHz,clk_1Hz; reg clk_1Hz=0; reg clk_1MHz=0; reg 31:0 cnt1=32'd0; reg 31:0 cnt2=32'd0; always(posedge clk_50MHz or negedge reset) begin if(!reset) clk_1Hz<=32'd0; else begin if(cnt1=32'd100) begin cnt1<=32'd0;clk_1Hz&l

10、t;=clk_1Hz; end else cnt1<=cnt1+32'd1; end end always(posedge clk_50MHz or negedge reset) begin if(!reset) clk_1MHz<=32'd0; else begin if(cnt2=32'd255) begin cnt2<=32'd0; clk_1MHz<=clk_1MHz; end else cnt2<=cnt2+32'd1; end end endmodule分頻器模塊激勵:module FPQ_test; reg c

11、lk_50MHz,reset; wire clk_1MHz;wire clk_1Hz; always # 2 clk_50MHz=clk_50MHz; FPQ fpq(.reset(reset),.clk_50MHz(clk_50MHz),.clk_1MHz(clk_1MHz),.clk_1Hz(clk_1Hz); initial begin reset<=0; clk_50MHz<=0; #100 reset<=1; endendmodule計數(shù)器模塊:module JSQ(start,data,clk_1Hz,add,c_out); input clk_1Hz,add;i

12、nput start;input 7:0data; output c_out; reg 7:0 c_out; always(posedge clk_1Hz or negedge add ) begin if(!add) begin c_out<=data; end else begin if(start) begin c_out<=c_out+8'd1; if(c_out=8'd255) begin c_out<=0; end else c_out<=c_out+8'd1; end else c_out<=c_out; end end en

13、dmodule計數(shù)器激勵:module JSQ_test; reg start,add; reg clk_1Hz; reg 7:0data; wire 7:0 c_out; always #1 clk_1Hz=clk_1Hz; JSQ jsq(.start(start),.add(add),.clk_1Hz(clk_1Hz),.data(data),.c_out(c_out); initial begin clk_1Hz=0; add=0; start=0; data=8'd1; #15 add=1; #15 start=1; #600 start=0; end endmodule 數(shù)

14、碼管顯示模塊:module SMG (clk_1MHz,data,data_g,data_s,data_b); input7:0 data; input clk_1MHz; output data_b; output data_s;output data_g; reg6:0data_b; reg6:0data_s;reg6:0data_g; reg 7:0mid_b; reg 7:0mid_s; reg 7:0mid_g; always(posedge clk_1MHz) begin mid_b<=data/100; mid_s<=data%100/10; mid_g<=da

15、ta%10; end always(mid_b) begin case(mid_b) 7'd0:data_b<=7'hC0; 7'd1:data_b<=7'hF9; 7'd2:data_b<=7'hA4; 7'd3:data_b<=7'hB0; 7'd4:data_b<=7'h99; 7'd5:data_b<=7'h92; 7'd6:data_b<=7'h82; 7'd7:data_b<=7'hf8; 7'd8:

16、data_b<=7'h80; 7'd9:data_b<=7'h90; default:data_b<=7'hC0; endcase end always(mid_s) begin case(mid_s) 7'd0:data_s<=7'hC0; 7'd1:data_s<=7'hF9; 7'd2:data_s<=7'hA4; 7'd3:data_s<=7'hB0; 7'd4:data_s<=7'h99; 7'd5:data_s<

17、;=7'h92; 7'd6:data_s<=7'h82; 7'd7:data_s<=7'hf8; 7'd8:data_s<=7'h80; 7'd9:data_s<=7'h90; default:data_s<=7'hC0; endcase end always(mid_g) begin case(mid_g) 7'd0:data_g<=7'hC0; 7'd1:data_g<=7'hF9; 7'd2:data_g<=7'h

18、A4; 7'd3:data_g<=7'hB0; 7'd4:data_g<=7'h99; 7'd5:data_g<=7'h92; 7'd6:data_g<=7'h82; 7'd7:data_g<=7'hf8; 7'd8:data_g<=7'h80; 7'd9:data_g<=7'h90; default:data_g<=7'hC0; endcase end endmodule數(shù)碼管顯示模塊激勵:module SMG_test; r

19、eg7:0 data; reg clk_1MHz; wire 6:0data_g; wire 6:0data_s; wire 6:0data_b;SMG smg(.data(data),.clk_1MHz(clk_1MHz),.data_g(data_g),.data_s(data_s),.data_b(data_b);always # 10 clk_1MHz=clk_1MHz;initial begin data=0;clk_1MHz=0; #25 data=35; #25 data=15; #25 data=93 end endmoduleRAM模塊:module RAM(reset,wr

20、,wr_clk,wr_address,din,rd,rd_clk,rd_address,dout); input wr,wr_clk,reset; input 3:0wr_address; input 7:0din; input rd,rd_clk; input 3:0rd_address; output 7:0dout; reg 7:0dout=0; reg7:0 mem 1:10; always(posedge wr_clk or negedge reset)begin if(!reset) begin mem1<=8'd1; mem2<=8'd2; mem3&

21、lt;=8'd3; mem4<=8'd4; mem5<=8'd5; mem6<=8'd6; mem7<=8'd7; mem8<=8'd8; mem9<=8'd9; mem10<=8'd10; end else begin if(wr) begin if(wr_address<=4'd10) memwr_address<=din; end endend always( posedge rd_clk or negedge reset)begin if(!reset) dou

22、t<=8'd0; else begin if(rd) begin dout<=memrd_address; end end end endmoduleRAM模塊激勵:module RAM_test; reg reset,wr,rd; reg wr_clk,rd_clk; reg 3:0wr_address,rd_address; reg 7:0 din; wire 7:0 mem 1:10; wire 7:0 dout;RAMram(.reset(reset),.wrn(wr),.wr_clk(wr_clk),.wr_address(wr_address),.rd(rd),

23、.rd_clk(rd_clk),.rd_address(rd_address),.din(din),.dout(dout); always #1 wr_clk=wr_clk; always #1 rd_clk=rd_clk; initial begin wr_clk<=0; rd_clk<=0; reset=0; wr<=0; rd<=0; wr_address<=4'd0; rd_address<=4'd0; din<=8'd0; #15 reset<=1 #15 rd<=1; #25 rd_address<

24、=4'd4;wr<=1; #35 din<=8'd5;wr_address<=4'd1;rd_address<=4'd1; #15 din<=8'd8;wr_address<=4'd6;rd_address<=4'd6; #15 reset<=0;rd_address<=4'd4; end endmodule頂層模塊:module RAM_count (reset,add,start,clk_50MHz,wr,wr_address,din,rd,rd_address,data_

25、g,data_s,data_b); input reset,add,start,wr,rd,clk_50MHz; input 3:0wr_address,rd_address; input7:0 din; output 6:0data_g,data_s,data_b; wire 6:0 data_g,data_s,data_b; wire 7:0 dout; wire 7:0 mid_data; wire mid_clk_1Hz; wire mid_clk_1MHz; FPQ fpq(.reset(reset),.clk_50MHz(clk_50MHz),.clk_1MHz(mid_clk_1

26、MHz),.clk_1Hz(mid_clk_1Hz); RAM ram(.reset(reset),.wr(wr),.wr_clk(mid_clk_1MHz),.wr_address(wr_address),.din(din),.rd(rd),.rd_clk(mid_clk_1MHz),.rd_address(rd_address),.dout(mid_data); JSQ jsq(.add(add),.data(mid_data),.clk_1Hz(mid_clk_1Hz),.start(start),.c_out(dout); SMG smg(.clk_1MHz(mid_clk_1Hz),

27、.data(dout),.data_g(data_g),.data_s(data_s),.data_b(data_b);Endmodule頂層模塊激勵:module RAM_count_test; reg reset,add,start,wr,rd; reg clk_50MHz; reg 3:0wr_address,rd_address; reg 7:0 din; wire 6:0 data_g,data_s,data_b; RAM_count ram( .reset(reset),.add(add),.start(start),.wr(wr),.rd(rd),.clk_50MHz(clk_5

28、0MHz), .wr_address(wr_address), .rd_address(rd_address),.din(din),.data_g(data_g),.data_s(data_s),.data_b(data_b); always #1 clk_50MHz=clk_50MHz; initial begin reset=1;start=1;din=1;wr=0;rd=1; wr_address=4'd1;rd_address=4'd1;clk_50MHz=0; add=1; # 125 reset=0; # 250 reset=1; #250 add=0; # 250

29、 add=1; # 250 wr=0;rd=1; # 10000 start=0; # 250 wr=1;rd=0; end endmodule4.5 綜合及布局布線報告和引腳分布報告綜合圖:管腳分配圖:時鐘分配圖:4.6 后仿真結(jié)果報告4.7 硬件測試結(jié)果報告測試結(jié)果符合設(shè)計初衷,實現(xiàn)了將一個10×8的RAM變成十個8位的加法器,設(shè)置初始值為110,可以寫入和讀出數(shù)據(jù)進行加法操作。4.8 對結(jié)果和結(jié)論的問題討論實驗結(jié)果基本上符合設(shè)計要求和初衷,主體功能可以很好的實現(xiàn),但是在一些細節(jié)上沒有做到很好的規(guī)劃,比如在后仿真時出現(xiàn)了部分高阻狀態(tài),后檢查發(fā)現(xiàn)是由于在RAM模塊中的復位有問題。5.課程設(shè)計的心得體會經(jīng)過兩周的FPGA課程設(shè)計,使我對這門課程有了一個更加深刻地認識和感受,更加深入的了解了自己在課程學習上的不足以及理論學習和實踐相互結(jié)合的重要性。在電路的設(shè)計初始時刻,我沒有按照設(shè)計電路時從上到下的設(shè)計方法,而是盲目的對電路的模塊進行設(shè)計。結(jié)果在最后的設(shè)計綜合的時候,設(shè)計的各個模塊不能進行順

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論