You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.1 KiB

module top (input CLK, input [3:0] COLS, inout [3:0] ROWS, output [3:0] LEDS, output TACT_LED);
// MODULE POOLS MATRIX KEYBOARD 4x4 WITH PERIOD ~1 SEC (FOR EACH ROW)
// AND REDIRECTED COLUMNS TO RED LEDS
// GREEN LED TOGGLES EVERY ONE SECOND (AS POOLING PERIOD)
// NEED FOR CHECKING CONNECTION TO MATRIX 4x4 KEYBOARD
// IF THERE IS NO KEY PRESSED, ALL RED LEDS ARE ON
// IF SOME KEY PRESSED, SOME LED IS NOT ON IN ONE OF FOUR PERIODS
// ETC
reg [1:0] row_counter = 0;
reg [23:0] period_counter = 0;
reg [3:0] rows_out = 0;
reg [3:0] rows_en = 0;
wire [3:0] rows_in;
parameter period = 24'd12000000;
always @ ( posedge CLK ) begin
if (period_counter == period) begin
period_counter <= 0;
rows_en <= (1<<row_counter);
row_counter <= row_counter + 1;
end
else
period_counter <= period_counter + 1;
end
assign TACT_LED = row_counter[0];
assign LEDS = COLS;
SB_IO #(
.PIN_TYPE(6'b 1010_01),
.PULLUP(1'b 0)
) rows_io [3:0] (
.PACKAGE_PIN(ROWS),
.OUTPUT_ENABLE(rows_en),
.D_OUT_0(rows_out),
.D_IN_0(rows_in)
);
endmodule