標(biāo)題: Verilog HDL同步FIFO的設(shè)計(jì)報(bào)告 [打印本頁(yè)]
作者: YUQIAN123 時(shí)間: 2018-4-2 13:08
標(biāo)題: Verilog HDL同步FIFO的設(shè)計(jì)報(bào)告
分享一個(gè)fifo設(shè)計(jì),基于V語(yǔ)言
大學(xué)物聯(lián)網(wǎng)工程學(xué)院
Verilog HDL項(xiàng)目設(shè)計(jì)報(bào)告
題目同步FIFO的設(shè)計(jì)
專業(yè)、學(xué)號(hào)電科1362910201 13629102225
授課班號(hào)6292758
摘要
FIFO【1】是First Input First Output的縮寫,先進(jìn)先出隊(duì)列,這是一種傳統(tǒng)的按序執(zhí)行方法,也是一種先進(jìn)先出的數(shù)據(jù)緩存器。它與普通存儲(chǔ)器的區(qū)別是沒(méi)有外部讀寫地址線,這樣使用起來(lái)非常簡(jiǎn)單,但缺點(diǎn)就是只能順序?qū)懭霐?shù)據(jù),順序讀出數(shù)據(jù),其數(shù)據(jù)地址由內(nèi)部讀寫指針自動(dòng)加1完成,不能像普通存儲(chǔ)器那樣,可以由地址線決定讀取或?qū)懭肽硞(gè)指定的地址。為了提高效率和降低系統(tǒng)設(shè)計(jì)的難度,本文使用Verilog HDL【 2 】描述語(yǔ)言,通過(guò)Xilinx公司的ISE 【3】軟件進(jìn)行程序編寫以及仿真,再將程序燒寫進(jìn)Basys2開(kāi)發(fā)板,設(shè)計(jì)實(shí)現(xiàn)了一種4bit-256深的同步FIFO,提供數(shù)據(jù)緩沖。
關(guān)鍵詞:同步FIFO Verilog HDL Basys
Abstract
FIFO is a acronym of First Input First Output, FIFO queue, which is a traditional sequential execution method, but also a FIFO data register. It differs from the ordinary that there is no external memory write address lines, so very simple to use, but the disadvantage is that the only sequential write data sequentially read out, the data read by the internal address pointer is automatically incremented by 1 to complete, not like generic memory that can be determined by the address line read from or written to a specified address. In order to improve efficiency and reduce the difficulty of system design, we use Verilog HDL description language, take advantage of Xilinx's ISE software programming and simulation, and then burn program written Basys2 development board, designed and implemented a 4bit-256 deep synchronous FIFO, provide data buffering.
Keywords: synchronous FIFO Verilog HDL Basys2
目錄
一、系統(tǒng)設(shè)計(jì)
1.1 設(shè)計(jì)目的
1.2 方案的對(duì)比分析與確定
1.2.1 初始方案
1.2.2 改進(jìn)方案
1.3 電路方框圖及說(shuō)明
1.4 電路設(shè)計(jì)及說(shuō)明
1.4.1 頂層模塊
1.4.2 時(shí)鐘分頻模塊
1.4.3 數(shù)據(jù)輸入輸出模塊
1.4.4 譯碼模塊
二、結(jié)果與討論
2.1 調(diào)試步驟與現(xiàn)象
2.1.1 調(diào)試程序
2.1.2 仿真
2.1.3 燒寫程序到Basys2開(kāi)發(fā)板
2.2 出現(xiàn)的問(wèn)題與分析
2.3 對(duì)相關(guān)數(shù)據(jù)的分析與討論
三、心得體會(huì)
3.1 設(shè)計(jì)特點(diǎn)
3.2 評(píng)估結(jié)果
3.3 改善建議
3.4 自我體會(huì)
五、參考文獻(xiàn)
六、附錄
附錄一 RTL原理圖
附錄二 作品圖片
一、系統(tǒng)設(shè)計(jì)
1.1 設(shè)計(jì)目的
為了鞏固和加深對(duì)“VerilogHDL數(shù)字設(shè)計(jì)與綜合”與“數(shù)字電子技術(shù)”兩門課程的理論知識(shí)及應(yīng)用,了解如何使用VerilogHDL語(yǔ)言進(jìn)行電路設(shè)計(jì)的步驟與方法,掌握ISE軟件編程以及仿真的使用方法,初步了解Basys2開(kāi)發(fā)板的使用方法,同時(shí)讓我們對(duì)電子電路設(shè)計(jì)有進(jìn)一步的認(rèn)識(shí),為我們后期對(duì)設(shè)計(jì)與制作的學(xué)習(xí)奠定了基礎(chǔ)。
1.2 方案的對(duì)比分析與確定
1.2.1 初始方案
使用100kHz作為工作時(shí)鐘。當(dāng)寫入信號(hào)有效時(shí),每個(gè)時(shí)鐘上升沿來(lái)臨,寫入一個(gè)數(shù)據(jù),同時(shí)寄存器指針指向寄存器下一位;當(dāng)讀取信號(hào)有效時(shí),每個(gè)始終上升沿來(lái)臨,讀出一個(gè)數(shù)據(jù)。數(shù)據(jù)存滿,滿信號(hào)燈亮;無(wú)數(shù)據(jù)時(shí),空信號(hào)燈亮。
缺點(diǎn):該方案的程序燒錄進(jìn)Basys2開(kāi)發(fā)板后,對(duì)輸入數(shù)據(jù)有很高的要求,首先速度必須很快,因?yàn)槊恳粋(gè)上升沿來(lái)臨就會(huì)寫入一個(gè)數(shù)據(jù),如果數(shù)據(jù)輸入不及時(shí),同一個(gè)數(shù)據(jù)將被輸入兩遍,讀出速度太快,丟包率高。
優(yōu)點(diǎn):該方案適合于仿真,可以快速實(shí)現(xiàn)功能仿真。
1.2.2 改進(jìn)方案
同樣使用100kHz作為工作時(shí)鐘。先使用開(kāi)關(guān)設(shè)置好4位要寫入的數(shù)據(jù),按下寫入按鍵后該數(shù)據(jù)寫入寄存器;隨時(shí)可按下讀取按鍵,讀出一個(gè)數(shù)據(jù)并顯示在數(shù)碼管上。數(shù)據(jù)存滿,滿信號(hào)燈亮;無(wú)數(shù)據(jù)時(shí),空信號(hào)燈亮。
缺點(diǎn):該方案仿真時(shí)間相對(duì)較長(zhǎng)。
優(yōu)點(diǎn):該方案的程序燒錄進(jìn)Basys2開(kāi)發(fā)板后,隨時(shí)可以寫入數(shù)據(jù),同時(shí)可以隨時(shí)讀出數(shù)據(jù),速度自由,目前測(cè)試丟包率為零。
1.3 電路方框圖及說(shuō)明
1.4 電路設(shè)計(jì)及說(shuō)明
1.4.1 頂層模塊
連接控制時(shí)鐘分頻模塊div、數(shù)據(jù)輸入輸出模塊fifo、譯碼模塊transcoder
1.4.2 時(shí)鐘分頻模塊
將Basys2開(kāi)發(fā)板上的50MHz時(shí)鐘輸入分頻為100kHz作為其他模塊的工作時(shí)鐘。
1.4.3 數(shù)據(jù)輸入輸出模塊
通過(guò)4個(gè)開(kāi)關(guān)實(shí)現(xiàn)4bit數(shù)據(jù)的輸入,當(dāng)寫入按鍵按下時(shí),數(shù)據(jù)被寫入且寄存器指針指向下一位。當(dāng)讀取按鍵按下時(shí),讀出最先輸入的一個(gè)數(shù)據(jù)。寫入、讀取時(shí)間自由。
1.4.4 譯碼模塊
將4位輸入的BCD碼【4】譯為8位二進(jìn)制代碼用于數(shù)碼管顯示。
二、結(jié)果與討論
2.1 調(diào)試步驟與現(xiàn)象
2.1.1 調(diào)試程序
最初采用通過(guò)判斷寫入信號(hào)與讀取信號(hào)的高低電平來(lái)控制數(shù)據(jù)的輸入與輸出,時(shí)鐘信號(hào)的上升沿直接控制指針+1。無(wú)法做到隨時(shí)的輸入與輸出,且對(duì)數(shù)據(jù)輸入方式要求極高,丟包率高。
之后修改程序,通過(guò)判斷寫入信號(hào)與讀取信號(hào)的上升沿來(lái)控制數(shù)據(jù)的輸入與輸出,并同時(shí)控制指針+1。測(cè)試可以做到隨時(shí)的輸入與輸出,目前丟包率為零。
2.1.2 仿真
初始方案:在仿真程序中輸入18位數(shù)據(jù),寫入信號(hào)保持高電平時(shí)數(shù)據(jù)按一定速度輸入,讀取信號(hào)保持高電平時(shí),數(shù)據(jù)可正常讀出。
改進(jìn)方案:在仿真程序中嘗試輸入兩個(gè)數(shù)據(jù),并讀出數(shù)據(jù)。測(cè)試可行。
2.1.3 燒寫程序到Basys2開(kāi)發(fā)板
初始方案無(wú)法正常讀出。改進(jìn)方案測(cè)試可行。
2.2 出現(xiàn)的問(wèn)題與分析
問(wèn)題一:仿真時(shí)數(shù)據(jù)讀不出來(lái),但燒寫進(jìn)開(kāi)發(fā)板時(shí)測(cè)試正常。
分析:仿真時(shí)時(shí)間設(shè)置不對(duì),設(shè)置為每100個(gè)時(shí)間單位輸入一個(gè)數(shù)據(jù),但是此時(shí)100KHz的時(shí)鐘信號(hào)還未出現(xiàn)過(guò)一個(gè)上升沿,所以數(shù)據(jù)無(wú)法寫入。
問(wèn)題二:仿真時(shí)能無(wú)限寫入數(shù)據(jù),但只能讀取最后一個(gè)數(shù)據(jù)。
分析:每次數(shù)據(jù)寫入時(shí)指針沒(méi)有指向下一位,數(shù)據(jù)輸入后一直覆蓋之前的數(shù)據(jù),所以時(shí)鐘只能讀取最后一個(gè)數(shù)據(jù)。
問(wèn)題三:程序編寫為16深,但只能存儲(chǔ)15個(gè)數(shù)據(jù)。
分析:數(shù)據(jù)從第0位寄存器開(kāi)始儲(chǔ)存數(shù)據(jù),由于寫入信號(hào)同時(shí)控制著數(shù)據(jù)的寫入與指針的指向,但當(dāng)?shù)竭_(dá)第15位時(shí),指針不再能指向下一位,數(shù)據(jù)也就不再能寫入,即數(shù)據(jù)寄存在0-14位寄存器。
2.3 對(duì)相關(guān)數(shù)據(jù)的分析與討論
FIFO的幾個(gè)重要參數(shù):
1、寬度:寬度即4bit,每個(gè)數(shù)據(jù)為四位。在該程序中可自由修改寬度。
2、深度:深度指能夠儲(chǔ)存的數(shù)據(jù)個(gè)數(shù)。在該程序中可自由修改深度,方便擴(kuò)展。
3、滿標(biāo)志:滿標(biāo)志用于阻止數(shù)據(jù)寫入而造成的溢出。判斷FIFO是否已滿十分重要。
4、空標(biāo)志:空標(biāo)志用于阻止數(shù)據(jù)讀取而造成的無(wú)效數(shù)據(jù)讀出。
5、寫入指針:指向下一個(gè)要寫入的地址,寫入時(shí)同時(shí)加1。
6、讀取指針:指向下一個(gè)要讀取的地址,讀取時(shí)同時(shí)加1。
三、心得體會(huì)
3.1 設(shè)計(jì)特點(diǎn)
本課程設(shè)計(jì)運(yùn)用Verilog HDL硬件描述語(yǔ)言,通過(guò)Xilinx公司的ISE軟件進(jìn)行程序編寫以及仿真,將程序燒寫至Basys2開(kāi)發(fā)板,設(shè)計(jì)實(shí)現(xiàn)了一種4bit-256深的同步FIFO,提供數(shù)據(jù)緩沖。不同于之前硬件電路課程設(shè)計(jì)和C語(yǔ)言課程設(shè)計(jì),此課程設(shè)計(jì)需要結(jié)合硬件和軟件知識(shí),需要掌握Verilog HDL硬件描述語(yǔ)言,熟悉Basys2開(kāi)發(fā)板的硬件電路及板上各模塊的使用方法。
設(shè)計(jì)的同步FIFO寬度為4bit,深度為256,參數(shù)可以在程序中修改,方便擴(kuò)展。通過(guò)4位開(kāi)關(guān)輸入數(shù)據(jù),寫入按鍵確認(rèn)輸入的數(shù)據(jù),讀取按鍵讀取一條數(shù)據(jù),這樣設(shè)計(jì)便于手動(dòng)輸入數(shù)據(jù)。滿標(biāo)志LED亮表示隊(duì)列已滿,空標(biāo)志LED亮表示隊(duì)列是空狀態(tài),方便觀察。使用數(shù)碼管顯示4位2進(jìn)制數(shù),充分利用板上模塊資源,完成整個(gè)設(shè)計(jì)。
3.2 評(píng)估結(jié)果
利用Basys2開(kāi)發(fā)板基本實(shí)現(xiàn)了FIFO隊(duì)列所有要求。但是通過(guò)手動(dòng)輸入數(shù)據(jù)模擬不同工作頻率模塊間通信,還不能實(shí)際運(yùn)用。
并且存在程序編寫為16深,但只能存儲(chǔ)15個(gè)數(shù)據(jù)的問(wèn)題,原因是數(shù)據(jù)從第0位寄存器開(kāi)始儲(chǔ)存數(shù)據(jù),由于寫入信號(hào)同時(shí)控制著數(shù)據(jù)的寫入與指針的指向,但當(dāng)?shù)竭_(dá)第15位時(shí),指針不再能指向下一位,數(shù)據(jù)也就不再能寫入,即數(shù)據(jù)寄存在0-14位寄存器。
3.3 改善建議
(1)通過(guò)矩陣鍵盤輸入數(shù)據(jù)和控制輸入和讀。
(2)使用液晶屏幕顯示參數(shù),標(biāo)志滿、空狀態(tài),美化交互界面;
(3)可以手動(dòng)輸入位寬和深度參數(shù)。
3.4 自我體會(huì)
通過(guò)本次課程設(shè)計(jì),我們鞏固和加深了“VerilogHDL數(shù)字設(shè)計(jì)與綜合”與“數(shù)字電子技術(shù)”兩門課程的理論知識(shí)及應(yīng)用,認(rèn)識(shí)到了基礎(chǔ)知識(shí)是一切實(shí)踐的基礎(chǔ),只有掌握好了理論知識(shí),才能更好地使用工具去做設(shè)計(jì)與創(chuàng)新。
相比于在紙上寫代碼,使用軟件編寫代碼,可以及時(shí)仿真驗(yàn)證效果,通過(guò)實(shí)踐加深所學(xué)知識(shí),熟悉使用VerilogHDL語(yǔ)言進(jìn)行電路設(shè)計(jì)的步驟與方法。學(xué)習(xí)ISE軟件編程以及仿真,方便之后將此軟件作為一個(gè)優(yōu)秀的工具,為我們?cè)O(shè)計(jì)更復(fù)雜的項(xiàng)目服務(wù)。在實(shí)際使用Basys2開(kāi)發(fā)板,燒寫程序到芯片中時(shí),出現(xiàn)了各種問(wèn)題,我們通過(guò)查閱網(wǎng)絡(luò)資料、詢問(wèn)老師、同學(xué)交流等多種方式,將問(wèn)題一一解決,在解決問(wèn)題的過(guò)程中我們加深了對(duì)軟件的使用和對(duì)知識(shí)點(diǎn)的學(xué)習(xí)。
我們認(rèn)識(shí)到動(dòng)手實(shí)踐會(huì)遇到書中未提出的許多問(wèn)題,而找出問(wèn)題原因并將其解決鍛煉了我們查閱資料、獨(dú)立思考的能力,豐富了我們的實(shí)踐經(jīng)驗(yàn),使我們對(duì)電子電路設(shè)計(jì)有進(jìn)一步的認(rèn)識(shí),為我們后期對(duì)設(shè)計(jì)與制作的學(xué)習(xí)奠定了基礎(chǔ)。
五、參考文獻(xiàn)
1、Szwagrzyk J, Whitt J K. FIFO peek access: US, US7773453[P]. 2010.
2、袁本榮, 劉萬(wàn)春, 賈云得,等. 用Verilog HDL進(jìn)行FPGA設(shè)計(jì)的一些基本方法[J]. 微計(jì)算機(jī)信息:測(cè)控儀表自動(dòng)化, 2004, 20(6):93-94.
3.田耘 胡彬 徐文波. XILINX ISE DESIGN SUITE 10.X FPGA開(kāi)發(fā)指南(邏輯設(shè)計(jì)篇)[M]. 人民郵電, 2008.
4.陳安時(shí). 小數(shù)二進(jìn)制碼對(duì)BCD碼的轉(zhuǎn)換[J]. 電子技術(shù)應(yīng)用, 1982(6).
六、附錄
附錄一RTL原理圖
附錄二作品圖片
圖 1 初始狀態(tài),F(xiàn)IFO中為空
圖 2 設(shè)置好輸入數(shù)據(jù),按下寫入鍵
圖 3 寫入數(shù)據(jù)中途讀取數(shù)據(jù)
圖 4 寫入數(shù)據(jù)完畢,滿信號(hào)燈亮
圖 5 讀取數(shù)據(jù)完畢,空信號(hào)燈亮
完整的Word格式文檔51黑下載地址(內(nèi)含清晰圖片):
Verilog課設(shè)報(bào)告.docx
(916.49 KB, 下載次數(shù): 28)
2018-4-2 13:08 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |