名称:堆栈寄存器设计Verilog代码Quartus仿真(文末获取)
软件:Quartus
语言:Verilog
代码功能:
堆栈寄存器设计
内容及要求
模拟堆栈寄存器电路。
(1)深度12,数据宽度8比特
(2)堆栈、弹栈有指示信号
(3)使用实验室的开发箱或自备开发板完成设计
(4)完成全部流程:设计规范文档、模块设计、代码输入、功能仿真、结果与综合、时序伤真、下载验证等
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
源代码
扫描文章末尾的公众号二维码