`timescale 1ns/1ps
module Rom_tb;
reg clk;
reg rst_n;
reg 4:0 num;
reg 3:0 row;
wire 3:0 col;
wire 7:0 q;
initial begin
clk <= 1'b1;
rst_n <= 1'b0;
#20 rst_n <= 1'b1;
#100 num <= 5'h1;
#500 num <= 5'h1F;
#10000 num <= 5'h2;
#500 num <= 5'h1F;
#10000 num <= 5'h3;
#500 num <= 5'h1F;
#10000 num <= 5'h4;
#500 num <= 5'h1F;
end
always #5 clk = !clk;
Rom RomInst(
.clk (clk),
.rst_n (rst_n),
.row (row),
.col (col),
.q (q)
);
always @ (*)
begin
case (num)
5'h0: row <= {1'b1, 1'b1, 1'b1, col0};
5'h1: row <= {1'b1, 1'b1, 1'b1, col1};
5'h2: row <= {1'b1, 1'b1, 1'b1, col2};
5'h3: row <= {1'b1, 1'b1, 1'b1, col3};
5'h4: row <= {1'b1, 1'b1, col0, 1'b1};
5'h5: row <= {1'b1, 1'b1, col1, 1'b1};
5'h6: row <= {1'b1, 1'b1, col2, 1'b1};
5'h7: row <= {1'b1, 1'b1, col3, 1'b1};
5'h8: row <= {1'b1, col0, 1'b1, 1'b1};
5'h9: row <= {1'b1, col1, 1'b1, 1'b1};
5'hA: row <= {1'b1, col2, 1'b1, 1'b1};
5'hB: row <= {1'b1, col3, 1'b1, 1'b1};
5'hC: row <= {col0, 1'b1, 1'b1, 1'b1};
5'hD: row <= {col1, 1'b1, 1'b1, 1'b1};
5'hE: row <= {col2, 1'b1, 1'b1, 1'b1};
5'hF: row <= {col2, 1'b1, 1'b1, 1'b1};
default: row <= {1'b1, 1'b1, 1'b1, 1'b1};
endcase
end
defparam RomInst.KeyScanInst.T10ms = 5;
endmodule