这次要做的是用Verilog代码写一个寄存器堆,此寄存器堆共有32个寄存器,每个寄存器可存储32个二进制位。要求有一个写端口,两个读端口,本次实验设计为异步读同步写的寄存器堆,即读寄存器不需要时钟控制,但写寄存器需时钟控制。 先上寄存器堆模块的代码
`timescale 1ns / 1ps
//*************************************************************************
// > 文件名: regfile.v
// > 描述 :寄存器堆模块,同步写,异步读
// > 作者 : LOONGSON
// > 日期 : 2016-04-14
//*************************************************************************
module regfile(
input clk, //时钟控制信号
input wen, //写使能信号,1有效
input [4 :0] raddr1, //第一个读端口的地址
input [4 :0] raddr2, //第二个读端口的地址
input [4 :0] waddr, //一个写端口
input [31:0] wdata, //需要写入的数据
output [31:0] rdata1, //读出的数据1
output [31:0] rdata2, //读出的数据2
input [4 :0] test_addr, //输入的调试地址
output [31:0] test_data //输出调试数据
);
//总共32个寄存器
integer i = 0;
reg [31:0] REG_Files[31:0];
initial//初始化32个寄存器,全为0
for(i = 0;i < 32;i = i + 1)
REG_Files[i] |