软件:Quartus
语言:Verilog
代码功能:
堆栈寄存器设计
内容及要求:
模拟堆栈寄存器电路。
(1)深度12,数据宽度8比特。
(2)堆栈、弹栈有指示信号。
(3)使用实验室的开发箱或自备开发板完成设计。
(4)完成全部流程:设计规范文档、模块设计、代码输入、功能仿真、结果与综合、时序伤真、下载验证等。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
部分代码展示:
//堆栈寄存器
module?stack(datain,?push,?pop,?reset,?clk,?stackfull,?dataout);
???input?[7:0]??datain;//堆栈输入数据
???input????????push;//堆栈信号
???input????????pop;//弹栈信号
???input????????reset;//复位
???input????????clk;//时钟
???output???????stackfull;//堆栈满指示信号
???output?[7:0]?dataout;//堆栈读出数据
???
???reg?[7:0]????dataout;
???integer??????i;
???reg?[7:0]????data[11:0];//深度12.数据位宽为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)//复位
??????begin
?????????stackflag?<=?{12{1'b0}};
?????????dataout?<=?{8{1'b0}};
?????????for?(i?=?0;?i?<=?11;?i?=?i?+?1)
????????????data[i]?<=?8'b00000000;////复位清零
??????end
??????else?
?????????case?(selfunction)
????????????2'b10?://入栈信号
???????????????if?(stackflag[0]?==?1'b0)
???????????????begin
??????????????????data[11]?<=?datain;//堆栈输入数据
??????????????????stackflag?<=?{1'b1,?stackflag[11:1]};//右移,高位移入1
??????????????????for?(i?=?0;?i?<=?10;?i?=?i?+?1)
?????????????????????data[i]?<=?data[i?+?1];//数据移位
???????????????end
????????????2'b01?://出栈信号
???????????????begin
dataout?<=?data[11];//读出最外部数据
??????????????????stackflag?<=?{stackflag[10:0],?1'b0};//左移,低位移入0
??????????????????for?(i?=?11;?i?>=?1;?i?=?i?-?1)
?????????????????????data[i]?<=?data[i?-?1];////数据移位
???????????????end
????????????default?:
???????????????;
?????????endcase
???end
???
endmodule
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=589
阅读全文
305