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
44 lines
1.1 KiB
6 years ago
|
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
|