




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、EDA/SOPC課程設(shè)計(jì)報(bào)告題目:同異步FIFO模塊的設(shè)計(jì)與驗(yàn)證姓名:xxx學(xué)號(hào):120260320同組人:xxx指導(dǎo)教師:xxx成績(jī):目錄目錄II第1章課程設(shè)計(jì)的要求11.1 課程設(shè)計(jì)的目的11.2 課程設(shè)計(jì)的條件11.3 課程設(shè)計(jì)的要求1第2章課程設(shè)計(jì)的內(nèi)容22.1 設(shè)計(jì)思路22.2 軟件流程圖32.3 HDL代碼闡述72.4 ModelSim驗(yàn)證13第3章課程設(shè)計(jì)的心得21第1章課程設(shè)計(jì)的要求1.1 課程設(shè)計(jì)的目的掌握FIFO設(shè)計(jì)的基本原理與方法培養(yǎng)Verilog語(yǔ)言模塊化設(shè)計(jì)的思想意識(shí)完成一個(gè)FIFO的設(shè)計(jì)與驗(yàn)證掌握較大工程的基本開(kāi)發(fā)技能培養(yǎng)綜合運(yùn)用Modelsim工具進(jìn)行硬件開(kāi)發(fā)的能
2、力培養(yǎng)數(shù)字系統(tǒng)設(shè)計(jì)的基本能力加強(qiáng)對(duì)課堂Verilog語(yǔ)言學(xué)習(xí)的理解與升華1.2 課程設(shè)計(jì)的條件設(shè)計(jì)條件ISE、Modelsim等開(kāi)發(fā)軟件的使用1.3 課程設(shè)計(jì)的要求設(shè)計(jì)要求1設(shè)計(jì)同步FIFO并驗(yàn)證(包括仿真驗(yàn)證、FPGA驗(yàn)證)設(shè)計(jì)要求2設(shè)計(jì)異步FIFO并驗(yàn)證(包括仿真驗(yàn)證、FPGA驗(yàn)證)設(shè)計(jì)要求3采用DesignCompiler完成其邏輯綜合,評(píng)估其面積和時(shí)序設(shè)計(jì)要求4完成綜合后的SDF反標(biāo)仿真第2章課程設(shè)計(jì)的內(nèi)容2.1 設(shè)計(jì)思路FIFO(FirstInputFirstOutput),即先進(jìn)先出隊(duì)列。在計(jì)算機(jī)中,先入先出隊(duì)列是一種傳統(tǒng)的按序執(zhí)行方法,先進(jìn)入的指令先完成并引退,跟著才執(zhí)行第二條指
3、令(指令就是計(jì)算機(jī)在響應(yīng)用戶操作的程序代碼,對(duì)用戶而言是透明的)。如下圖所示,當(dāng)CPU在某一時(shí)段來(lái)不及響應(yīng)所有的指令時(shí),指令就會(huì)被安排在FIFO隊(duì)列中,比如0號(hào)指令先進(jìn)入隊(duì)列,接著是1號(hào)指令、2號(hào)指令當(dāng)CPU完成當(dāng)前指令以后就會(huì)從隊(duì)列中取出0號(hào)指令先行執(zhí)行,此時(shí)1號(hào)指令就會(huì)接替0號(hào)指令的位置,同樣,2號(hào)指令、3號(hào)指令都會(huì)向前挪一個(gè)位置,這樣解釋大家清楚了吧?在設(shè)計(jì)之初,我們只對(duì)FIFO有一個(gè)模糊的了解,只知道它是一個(gè)先入先出的隊(duì)列,但是對(duì)于它是如何組成和如何工作并不了解,于是我們?cè)O(shè)計(jì)的首要任務(wù)就是查閱資料,逐步完善我們對(duì)于同步FIFO和異步FIFO的了解。在前兩天的工作當(dāng)中,我們查閱了中外各類(lèi)
4、資料和文獻(xiàn),對(duì)FIFO的組成和工作原理有了深入的了解,最終決定以老師給的兩篇SimulationandSynthesisTechniquesforAsynchronousFIFODesign»和«SimulationandSynthesisTechniquesforAsynchronousFIFODesignwithAsynchronousPointerComparisons»為學(xué)習(xí)和參考的重要資料完成本次的課程設(shè)計(jì)。在兩天的研究中,我們敲定異步FIFO的整體設(shè)計(jì)原理圖如下:在懂得設(shè)計(jì)模塊之后,我們接下來(lái)就要逐步編寫(xiě)每個(gè)子模塊的程序。并且在寫(xiě)完每個(gè)子模塊的設(shè)計(jì)之后
5、,我們?yōu)榱蓑?yàn)證的方便起見(jiàn),要求驗(yàn)證FIFO在每個(gè)時(shí)鐘沿自動(dòng)完成數(shù)據(jù)從0到15的自增一,觀察當(dāng)數(shù)據(jù)寫(xiě)滿深度為15的FIFO之后能否自動(dòng)產(chǎn)生”寫(xiě)滿信號(hào)并且自動(dòng)開(kāi)始“讀模式;在讀的狀態(tài),關(guān)鍵步驟就是驗(yàn)證是否在讀空之后不再繼續(xù)讀。當(dāng)然,這也是FIFO設(shè)計(jì)的關(guān)鍵,如何在寫(xiě)滿的時(shí)候不讓外界繼續(xù)對(duì)FIFO繼續(xù)寫(xiě)入,在讀空的時(shí)候如何讓FIFO不再繼續(xù)讀,在這方面的程序設(shè)計(jì)中我們走了很多的彎路,最終在兩篇重要的論文中找到了解決問(wèn)題的方式,在寫(xiě)自己代碼的時(shí)候我們也參考了文章中的代碼,感到受益匪淺!2.2 軟件流程圖一:同步FIFO設(shè)計(jì)流程圖::異步FIFO設(shè)計(jì)流程圖1)FIFOMEMORY部分第一個(gè)always塊
6、中總是監(jiān)測(cè)rclk.和rrst_n端口I/O聲明及內(nèi)部變量定義和數(shù)據(jù)聲明等第二個(gè)always塊中總是監(jiān)測(cè)wclk2)sync_r2w部分否是wq2_rptr,wq1_rpt一r均清零wq2_rptr,wq1_rptr<=wq1_rptr,r-ptr;3)sync_w2r部分開(kāi)始4)wptr_full部分5)rptr_empty部分6)主模塊afifo部分因?yàn)檫@一部分就是將前幾部分聯(lián)系成一個(gè)整體,因此無(wú)需再畫(huà)這部分流程圖。2.3HDL代碼闡述1)同步FIFO設(shè)計(jì)代碼:'defineDEL1modulesynfifo(clock,reset_n,data_in,read_n,writ
7、e_n,data_out,full,empty);inputclock,reset_n,read_n,write_n;input0:7data_in;output0:7data_out;outputfull,empty;wireclock,reset_n,read_n,write_n;wire0:7data_in;reg0:7data_out;wirefull,empty;/?reg7:0fifo_mem14:0;reg3:0counter;reg3:0rd_pointer;reg3:0wr_pointer;assign#'DELfull=(counter=15)?1'b1:1
8、'b0;/當(dāng)計(jì)數(shù)值為15時(shí)代表已經(jīng)滿了assign#'DELempty=(counter=0)?1'b1:1'b0;/當(dāng)計(jì)數(shù)值為0的時(shí)候代表空了always(posedgeclockornegedgereset_n)beginif(reset_n)/復(fù)位狀態(tài)begin#'DEL;rd_pointer<=4'b0;wr_pointer<=4'b0;counter<=4'b0;data_out<=8'b0;endelseif(read_n)/讀信號(hào)有效beginif(counter=0)begin$di
9、splay("nERRORattime%0t:",$time);$display("FIFOUnderflown");$stop;endif(write_n)/只讀不寫(xiě)begincounter<=counter-1;enddata_out<=#'DELfifo_memrd_pointer;/數(shù)據(jù)讀出if(rd_pointer=14)rd_pointer<=#'DEL4'b0;elserd_pointer<=rd_pointer+1;endelseif(write_n)/寫(xiě)狀態(tài)有效beginif(counte
10、r=15)begin$display("nERRORattime%0t:",$time);$display("FIFOOverflown");$stop;endif(read_n)/只寫(xiě)不讀begincounter<=#'DELcounter+1;endfifo_memwr_pointer<=#'DELdata_in;/數(shù)據(jù)寫(xiě)入if(wr_pointer=14)wr_pointer<=#'DEL4'b0;elsewr_pointer<=#'DELwr_pointer+1;endendendm
11、odule2)異步FIFO設(shè)計(jì):1、FIFOmemory部分:modulefifomem(rdata,wdata,waddr,raddr,wclken,wfull,wclk,rrst_n,rinc,rempty,rclk);input7:0wdata;input3:0waddr,raddr;inputwclken,wfull,wclk,rrst_n,rinc,rempty,rclk;output7:0rdata;reg7:0rdata;reg7:0mem0:15;always(posedgerclkornegedgerrst_n)if(!rrst_n)rdata<=8'b0;el
12、seif(rinc&&!rempty)讀有效并且沒(méi)空rdata<=memraddr;/數(shù)據(jù)讀出always(posedgewclk)if(wclken&&!wfull)/寫(xiě)有效并且沒(méi)滿memwaddr<=wdata;endmodule3) sync_r2w部分:modulesync_r2w(wq2_rptr,rptr,wq1_rptr,wclk,wrst_n);input4:0rptr;inputwclk,wrst_n;output4:0wq1_rptr,wq2_rptr;reg4:0wq1_rptr,wq2_rptr;always(posedgew
13、clkornegedgewrst_n)/這部分進(jìn)行寫(xiě)地址到到讀地址的同步if(!wrst_n)wq2_rptr,wq1_rptr<=0;elsewq2_rptr,wq1_rptr<=wq1_rptr,rptr;endmodule4) sync_w2r部分:modulesync_w2r(rq2_wptr,wptr,rq1_wptr,rclk,rrst_n);input4:0wptr;inputrclk,rrst_n;output4:0rq1_wptr,rq2_wptr;reg4:0rq1_wptr,rq2_wptr;always(posedgerclkornegedgerrst_n)
14、/讀地址至1J寫(xiě)地址的同步if(!rrst_n)rq2_wptr,rq1_wptr<=0;elserq2_wptr,rq1_wptr<=rq1_wptr,wptr;Endmodule5) wptr_full部分:modulewptr_full(wfull,waddr,wbin,wptr,wq2_rptr,winc,wclk,wrst_n);inputwrst_n,wclk,winc;input4:0wq2_rptr;output3:0waddr;output4:0wptr;outputwfull;output4:0wbin;regwfull;reg4:0wptr;reg4:0wbi
15、n;wire4:0wgraynext,wbinnext;always(posedgewclkornegedgewrst_n)/轉(zhuǎn)化成格雷碼進(jìn)行比較if(!wrst_n)beginwbin<=5'b0;wptr<=5'b0;endelsebeginwbin<=wbinnext;wptr<=wgraynext;endassignwaddr=wbin3:0;assignwbinnext=wbin+(winc&!wfull);assignwgraynext=(wbinnext>>1)八wbinnext;assignwfull_val=(wgr
16、aynext=!wq2_rptr4:3,wq2_rptr2:0);/如果高兩位不同,低3位相同那么寫(xiě)滿標(biāo)志有效always(posedgewclkornegedgewrst_n)if(!wrst_n)wfull<=1'b0;elsewfull<=wfull_val;endmodule6) rptr_empty部分:modulerptr_empty(rempty,raddr,rbin,rptr,rq2_wptr,rinc,rclk,rrst_n);inputrrst_n,rclk,rinc;input4:0rq2_wptr;output3:0raddr;output4:0rp
17、tr;outputrempty;output4:0rbin;regrempty;reg4:0rptr;reg4:0rbin;wire4:0rgraynext,rbinnext;always(posedgerclkornegedgerrst_n)if(!rrst_n)beginrbin<=5'b0;rptr<=5'b0;endelsebeginrbin<=rbinnext;rptr<=rgraynext;endassignraddr=rbin3:0;assignrbinnext=rbin+(rinc&!rempty);assignrgraynext
18、=(rbinnext>>1)八rbinnext;assignrempty_val=(rgraynext=rq2_wptr)?1'b1:1'b0;/均相同時(shí)則為空有效always(posedgerclkornegedgerrst_n)if(!rrst_n)rempty<=1'b1;elserempty<=rempty_val;endmodule7) afifo部分:moduleafifo(output7:0rdata,outputwfull,outputrempty,input7:0wdata,inputwinc,wclk,wrst_n,input
19、rinc,rclk,rrst_n);wire3:0waddr,raddr;wire4:0wptr,rptr,wq2_rptr,rq2_wptr;/每個(gè)模塊的每個(gè)信號(hào)都需要例化sync_r2wsync_r2w(.wq2_rptr(wq2_rptr),.rptr(rptr),.wclk(wclk),.wrst_n(wrst_n);sync_w2rsync_w2r(.rq2_wptr(rq2_wptr),.wptr(wptr),.rclk(rclk),.rrst_n(rrst_n);fifomemfifomem(.rdata(rdata),.wdata(wdata),.waddr(waddr),.r
20、addr(raddr),.wclken(winc),.wfull(wfull),.wclk(wclk),.rrst_n(rrst_n),.rinc(rinc),.rempty(rempty),.rclk(rclk);rptr_emptyrptr_empty(.rempty(rempty),.raddr(raddr),.rbin(rbin),.rptr(rptr),.rq2_wptr(rq2_wptr),.rinc(rinc),.rclk(rclk),.rrst_n(rrst_n);wptr_fullwptr_full(.wfull(wfull),.waddr(waddr),.wbin(wbin
21、),.wptr(wptr),.wq2_rptr(wq2_rptr),.winc(winc),.wclk(wclk),.wrst_n(wrst_n);endmodule2.4ModelSim驗(yàn)證一、同步FIFO1、HDL驗(yàn)證語(yǔ)言:'defineDEL10modulesyn_tb;regclock,reset_n,read_n,write_n;reg7:0in_data;wire7:0out_data;wirefull,empty;integerfifo_count;reg7:0exp_data;regfast_read,fast_write;regfilled_flag;regcycle
22、_count;synfifosynfifo_tb(.clock(clock),.reset_n(reset_n),.data_in(in_data),.read_n(read_n),.write_n(write_n),.data_out(out_data),.full(full),.empty(empty);initialbeginin_data=0;exp_data=0;fifo_count=0;read_n=1;write_n=1;filled_flag=0;cycle_count=0;clock=1;fast_read=0;fast_write=1;reset_n=1;#20reset_
23、n=0;#20reset_n=1;if(empty!=1)begin$display("nerrorattime%0t:",$time);$display("afterreset,emptystatusnotassertedn");$stop;endif(full!=0)begin$display("nerrorattime%0t:",$time);$display("nerrorattime%0t:",$time);$stop;endendalways#100clock=clock;always(posedgec
24、lock)beginif(-write_n&&read_n)fifo_count=fifo_count+1;elseif(write_n&&-read_n)fifo_count=fifo_count-1;endalways(negedgeclock)beginif(-read_n&&(out_data!=exp_data)begin$display("nerrorattime%0t:",$time);$display("expecteddataut=%h",exp_data);$display("
25、actualdataut=%hn",out_data);$stop;endif(fast_write&&(cycle_count&1b1)&&full)?beginwrite_n=0;in_data=in_data+1;endelsewrite_n=1;if(fast_read&&(cycle_count&1b1)&&empty)/?beginread_n=0;exp_data=exp_data+1;endelseread_n=1;if(full)beginfast_read=1;fast_write=0
26、;filled_flag=1;endif(filled_flag&&empty)begin$display("nsimulationcomplete-noerrorsn");$finish;endcycle_count=cycle_count+1;endalways(fifo_count)begin# 'DEL;# 'DEL;# 'DEL;case(fifo_count)0:beginif(empty!=1)|(full!=0)begin$display("nerrorattime%0t:",$time);$dis
27、play("fifo_count=%h",fifo_count);$display("empty=%hn",empty);$display("full=%hn",full);$stop;endif(filled_flag=1)begin$display("nsimulationcomplete-noerrorn");$finish;endend15:beginif(empty!=0)|(full!=1)begin$display("nerrorattime%0t:",$time);$displa
28、y("fifo_count=%h",fifo_count);$display("empty=%hn",empty);$display("full=%hn",full);$stop;endfilled_flag=1;fast_write=0;fast_read=1;enddefault:beginif(empty!=0)|(full!=0)begin$display("nerrorattime%0t:",$time);$display("fifo_count=%h",fifo_count);$di
29、splay("empty=%hn",empty);$display("full=%hn",full);$stop;endendendcaseendinitialbegin$fsdbdumpfile("sfifo.fsdb");$fsdbdumpvars();endendmodule2、仿真波形:茸,也!乩it-:;flfl腰hjaanaD«<rurtI:卬h.5mdi$戶盧Hdjgnnftfcb3rMz3miqPnx一xALWAflSaiiS_tt>FfW電種.由PrecIW.WAT5MEq$iMeIS-Fsm.
30、iap*XrsCap-住WCQKl|JE如”3、說(shuō)明當(dāng)寫(xiě)FIFO的時(shí)候,一個(gè)上升的時(shí)鐘沿一來(lái),并且寫(xiě)信號(hào)有效,讀信號(hào)無(wú)效時(shí),數(shù)據(jù)逐個(gè)寫(xiě)入FIFO存儲(chǔ)器中。我們?cè)谶@里設(shè)置FIFO的寬度為4,深度為15。因此在寫(xiě)滿FIFO之后,我們讓存儲(chǔ)器自動(dòng)產(chǎn)生滿信號(hào),而經(jīng)過(guò)仿真波形可知道在滿信號(hào)有效的時(shí)候,讀信號(hào)有效而寫(xiě)信號(hào)無(wú)效,數(shù)據(jù)依次從FIFO中讀出,并且讀出的順序正好是寫(xiě)入的先后順序,實(shí)現(xiàn)了“先入先出”。而我們?cè)O(shè)置下面幾個(gè)信號(hào)的原因就是為了更好的確保FIFO存儲(chǔ)器在讀空之后不再讀,寫(xiě)滿之后不再寫(xiě)。需要特別白注意exp_data,對(duì)它可以對(duì)輸出的數(shù)據(jù)進(jìn)行對(duì)比,從而來(lái)看輸出的數(shù)據(jù)是否真的是我們所期待輸出的數(shù)
31、據(jù)。最終結(jié)果證明我們?cè)O(shè)計(jì)的同步FIFO是正確的。二、異步FIFO1、HDL代碼:'timescale1ns/1nsmoduleAfifotest();reg7:0wdata;regwinc;regwclk;regwrst_n;regrinc;regrclk;regrrst_n;wire7:0rdata;wirewfull;wirerempty;integeri;afifoafifo(.rdata(rdata),.wdata(wdata),.wclk(wclk),.rclk(rclk),.wrst_n(wrst_n),.rrst_n(rrst_n),.wfull(wfull),.rempty(rempty),.winc(winc),.rinc(rinc);alwaysbegin# 50wclk=1;# 50wclk=0;endalwaysbegin# 100rclk=1;# 100rclk=0;endinitialbeginwrst_n=0;rrst_n=0;rinc=0;winc=0;wclk=
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年故都秋一等獎(jiǎng)教案:探索教學(xué)的新境界
- 2025年紡織片梭織機(jī)合作協(xié)議書(shū)
- 《昆蟲(chóng)記》讀后感
- 演講稿題目新穎范文
- DB31∕T 680.8-2019 城市公共用水定額及其計(jì)算方法 第8部分:公共管理和社會(huì)組織機(jī)關(guān)單位
- 寵物急救知識(shí)培訓(xùn)班課件
- 慢性支氣管炎肺炎等修改課件
- 液壓知識(shí)培訓(xùn)課件下載
- 2023年北京卷高考真題數(shù)學(xué)試卷-解析
- 工程入股合作合同協(xié)議書(shū)
- 跟著名著《小王子》學(xué)高考英語(yǔ)讀后續(xù)寫(xiě)絕佳的續(xù)寫(xiě)清單-高中英語(yǔ)作文復(fù)習(xí)專(zhuān)項(xiàng)
- 產(chǎn)教融合大學(xué)科技園建設(shè)項(xiàng)目實(shí)施方案
- 交通法律與交通事故處理培訓(xùn)課程與法律解析
- 廣西版四年級(jí)下冊(cè)美術(shù)教案
- 《換熱器及換熱原理》課件
- 兒童權(quán)利公約演示文稿課件
- UPVC排水管技術(shù)標(biāo)準(zhǔn)
- MSA-測(cè)量系統(tǒng)分析模板
- 血透室公休座談水腫的護(hù)理
- 急診預(yù)檢分診專(zhuān)家共識(shí)課件
- 廣州市海珠區(qū)事業(yè)單位考試歷年真題
評(píng)論
0/150
提交評(píng)論