名稱:堆棧寄存器設(shè)計Verilog代碼Quartus仿真
軟件:Quartus
語言:Verilog
代碼功能:
堆棧寄存器設(shè)計
內(nèi)容及要求:
模擬堆棧寄存器電路。
(1)深度12,數(shù)據(jù)寬度8比特。
(2)堆棧、彈棧有指示信號。
(3)使用實驗室的開發(fā)箱或自備開發(fā)板完成設(shè)計。
(4)完成全部流程:設(shè)計規(guī)范文檔、模塊設(shè)計、代碼輸入、功能仿真、結(jié)果與綜合、時序傷真、下載驗證等。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. Testbench
6. 仿真圖
部分代碼展示:
//堆棧寄存器 module?stack(datain,?push,?pop,?reset,?clk,?stackfull,?dataout); ???input?[7:0]??datain;//堆棧輸入數(shù)據(jù) ???input????????push;//堆棧信號 ???input????????pop;//彈棧信號 ???input????????reset;//復(fù)位 ???input????????clk;//時鐘 ???output???????stackfull;//堆棧滿指示信號 ???output?[7:0]?dataout;//堆棧讀出數(shù)據(jù) ??? ???reg?[7:0]????dataout; ???integer??????i; ???reg?[7:0]????data[11:0];//深度12.數(shù)據(jù)位寬為8 ???reg?[11:0]???stackflag; ???assign?stackfull?=?stackflag[0];//堆棧滿指示信號 ???wire?[1:0]????selfunction; ???assign?selfunction?=?{push,?pop};//將堆棧信號彈棧信號組成2bit信號 ??? ???always?@(posedge?clk?or?posedge?reset) ???begin if?(reset?==?1'b1)//復(fù)位 ??????begin ?????????stackflag?<=?{12{1'b0}}; ?????????dataout?<=?{8{1'b0}}; ?????????for?(i?=?0;?i?<=?11;?i?=?i?+?1) ????????????data[i]?<=?8'b00000000;////復(fù)位清零 ??????end ??????else? ?????????case?(selfunction) ????????????2'b10?://入棧信號 ???????????????if?(stackflag[0]?==?1'b0) ???????????????begin ??????????????????data[11]?<=?datain;//堆棧輸入數(shù)據(jù) ??????????????????stackflag?<=?{1'b1,?stackflag[11:1]};//右移,高位移入1 ??????????????????for?(i?=?0;?i?<=?10;?i?=?i?+?1) ?????????????????????data[i]?<=?data[i?+?1];//數(shù)據(jù)移位 ???????????????end ????????????2'b01?://出棧信號 ???????????????begin dataout?<=?data[11];//讀出最外部數(shù)據(jù) ??????????????????stackflag?<=?{stackflag[10:0],?1'b0};//左移,低位移入0 ??????????????????for?(i?=?11;?i?>=?1;?i?=?i?-?1) ?????????????????????data[i]?<=?data[i?-?1];////數(shù)據(jù)移位 ???????????????end ????????????default?: ???????????????; ?????????endcase ???end ??? endmodule
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=589
閱讀全文