Testbench para un archivo de registro simple

-1

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)

    
pregunta alsh

1 respuesta

0

a1, a2, a3 son índices en una tabla de 16 entradas, por lo que deben tener solo 4 bits de ancho.

También en su banco de pruebas, establezca un valor inicial en todas las entradas desde el inicio. Todo está indefinido hasta el # 2.

No he visto un valor inicial para su reloj. Así que en tu simulación tu reloj es probablemente 'x' todo el tiempo. Solo eso debería haber activado todas las alarmas.

Haz un reloj decente, no una sola ventaja.

    
respondido por el Oldfart

Lea otras preguntas en las etiquetas