Quiero probar mi archivo de registro antes de conectarlo a ALU. Así que escribí un banco de pruebas para mi archivo de registro.
// 16 x 32 register file with two read, 1 write port
module regfile(
input logic clk, we3,
input logic [31:0] a1, a2, a3,
input logic [31:0] wd3,
output logic [31:0] rd1, rd2);
logic [31:0] RAM[15:0]; //16 regsiters
assign rd1 = RAM[a1]; // asynchronous read
assign rd2 = RAM[a2];
always @(posedge clk)
begin // synchronous write
if (we3)
RAM[a3] <= wd3;
end
endmodule
y este es mi banco de pruebas
module regfile_tb();
logic clk=0, we3;
logic [3:0] a1, a2, a3;
logic [31:0] wd3;
logic [31:0] rd1, rd2;
regfile uut(.clk(clk), .we3(we3), .a1(a1), .a2(a2), .a3(a3), .wd3(wd3),
.rd1(rd1), .rd2(rd2));
always #5 clk = ~clk;
initial begin
a1=0;a2=0;a3=0;we3=0;wd3=0;
#10
we3=1;
a1=5;
a2=4;
a3=6;
wd3=15;
#100 $finish;
end
endmodule
Entonces, con las condiciones anteriores, la salida de banco de pruebas rd1 y rd2 no será importante, pero cuando establezca todas las entradas en el mismo número, la salida funcionará y será la misma que la entrada. Sé que este sonido me dice que la salida está siguiendo la entrada, pero el esquema no lo muestra. Entonces, ¿cuál podría ser la razón de esta situación?
Mi esquema se parece a este (lo siento, no tengo acceso a vivado en este momento)