Estoy intentando escribir un contador de módulo para rebotar una entrada proveniente de botones mecánicos. El módulo de botón de matriz 4x4 debe controlar el módulo cuando se inicia o detiene la debonce.
Este es mi módulo contador
module counter(input clk,input start, input[25:0] stateToGo ,output reg finished);
reg [25:0]state = 0;
reg [25:0]nextState = 0;
//state register
always@(posedge clk)begin
state <= nextState;
end
//output CL
always@(posedge clk)begin
if (start == 1)begin
if(state == stateToGo)
finished = 1;
else
finished = 0;
end
end
//next state CL
always@(posedge clk)begin
if(start == 1)begin
if(state == stateToGo)
nextState = 0;
else
nextState = state + 1;
end
end
endmodule
Y este otro es mi módulo keyboardScanner, pero cuando los conecto con un módulo superior e intento presionar un botón, no se toma ninguna entrada del keyboardScanner:
module keyboardScanner (input wait100,input wait20, input [3:0] col, output reg start,output reg [3:0] row, output reg [7:0] keyCode);
reg [1:0]state=2'b00;
reg [1:0]nextState=2'b01;
//state register
always@(posedge wait100) begin
state <= nextState;
end
//output CL
always@(posedge wait100) begin
case (state)
2'b00: row <= 4'b0001;
2'b01: row <= 4'b0010;
2'b10: row <= 4'b0100;
2'b11: row <= 4'b1000;
default: row <= 4'b0001;
endcase
if (col != 4'b0000)
start = 1;
if (col != 4'b0000 && wait20 == 1) begin
keyCode <= {row[1],row[2],row[3],row[0], col[0],col[1],col[2],col[3]};
start = 0;
end
end
//next state CL
always @(posedge wait100) begin
if(wait20 == 0 && start == 1)begin
case (state)
2'b00: nextState <= 2'b01;
2'b01: nextState <= 2'b10;
2'b10: nextState <= 2'b11;
2'b11: nextState <= 2'b00;
default: nextState <= 2'b00;
endcase
end
end
endmodule
¿Algo va mal con mi contador? Si uso CLK y ningún contador, las entradas se toman bastante bien desde el keyboardScanner FSM
Este es mi módulo superior con contador:
module comboModule(input clk, input [3:0]col,output [3:0] row, output CA,CB,CC,CD,CE,CF,CG,AN0,AN1,AN2,AN3,output [7:0]kCode);
wire finish20,finish100,starter;
counter c20(clk,starter,26'b00000000011000011010100000, finish20);
counter c100(clk,1 ,26'b00000001111010000100100000, finish100);
keyboardScanner kScan(finish100,finish20,col,starter,row,kCode);
SevenSegment SS(clk, kCode,CA,CB,CC,CD,CE,CF,CG,AN0,AN1,AN2,AN3);
endmodule