keyscan_tb

`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, col[0]};
            5'h1: row <= {1'b1, 1'b1, 1'b1, col[1]};
            5'h2: row <= {1'b1, 1'b1, 1'b1, col[2]};
            5'h3: row <= {1'b1, 1'b1, 1'b1, col[3]};

            5'h4: row <= {1'b1, 1'b1, col[0], 1'b1};
            5'h5: row <= {1'b1, 1'b1, col[1], 1'b1};
            5'h6: row <= {1'b1, 1'b1, col[2], 1'b1};
            5'h7: row <= {1'b1, 1'b1, col[3], 1'b1};

            5'h8: row <= {1'b1, col[0], 1'b1, 1'b1};
            5'h9: row <= {1'b1, col[1], 1'b1, 1'b1};
            5'hA: row <= {1'b1, col[2], 1'b1, 1'b1};
            5'hB: row <= {1'b1, col[3], 1'b1, 1'b1}; 

            5'hC: row <= {col[0], 1'b1, 1'b1, 1'b1};
            5'hD: row <= {col[1], 1'b1, 1'b1, 1'b1};
            5'hE: row <= {col[2], 1'b1, 1'b1, 1'b1};
            5'hF: row <= {col[2], 1'b1, 1'b1, 1'b1};
            
            default: row <= {1'b1, 1'b1, 1'b1, 1'b1};
        endcase
    end

    defparam RomInst.KeyScanInst.T10ms = 5;

    endmodule 

你可能感兴趣的:(fpga开发)