Estoy intentando crear un módulo que funcione como una cola con 4 ranuras. Es para un elevador y el currSt es el estado actual y el destino es el primer elemento en la cola. 4'b1111 es como NULL. El problema aquí es que la cola no obtiene la entrada del teclado para ser almacenada en los 4 lugares libres. '
module Queue(
input clk, slowclk,
input[3:0] cs,
output[3:0] currstat, des,
input[3:0]keycode,
output reg go
);
reg currSt;
initial currSt = 4'b1;
//1111 = empty place in queue
reg queueItem1 = 4'b1111;
reg queueItem2 = 4'b1111;
reg queueItem3 = 4'b1111;
reg queueItem4 = 4'b1111;
//continuous assignment
assign currstat = currSt;
assign des = (queueItem1 == 4'b1111)?currSt:queueItem1;
always@(posedge clk) begin
if ((keycode == 4'b0001)
||(keycode == 4'b0010)
||(keycode == 4'b0100)
||(keycode == 4'b1000))
begin
if(queueItem1 == 4'b1111)
queueItem1 = keycode;
else if(queueItem2 == 4'b1111)
queueItem2 = keycode;
else if(queueItem3 == 4'b1111)
queueItem3 = keycode;
else if(queueItem4 == 4'b1111)
queueItem4 = keycode;
//else do nothing
end
//adds new key pressed to queue
if (keycode == 4'b0001
|| keycode == 4'b0010
|| keycode == 4'b0100
|| keycode == 4'b1000)
begin
if (queueItem1 != keycode
&& queueItem2 != keycode
&& queueItem3 != keycode
&& queueItem4 != keycode)
begin
if (queueItem1 == 4'b1111
&& queueItem2 == 4'b1111
&& queueItem3 == 4'b1111
&& queueItem4 == 4'b1111)
queueItem1 = keycode;
else if (queueItem1 != 4'b1111
&& queueItem2 == 4'b1111
&& queueItem3 == 4'b1111
&& queueItem4 == 4'b1111)
queueItem2 = keycode;
else if (queueItem1 != 4'b1111
&& queueItem2 != 4'b1111
&& queueItem3 == 4'b1111
&& queueItem4 == 4'b1111)
queueItem3 = keycode;
else if (queueItem1 != 4'b1111
&& queueItem2 != 4'b1111
&& queueItem3 != 4'b1111
&& queueItem4 == 4'b1111)
queueItem4 = keycode;
//else don't add the new one in the queue
end
//else if any of the slots is equal the keycode then dont add it
end
//check if current state matches with the request queue
if (currSt == 4'b1000
|| currSt == 4'b0100
|| currSt == 4'b0010
|| currSt == 4'b0001)
begin
if (queueItem1 == currSt) begin
queueItem1 = queueItem2;
queueItem2 = queueItem3;
queueItem3 = queueItem4;
queueItem4 = 4'b1111;
go = 0;
end else if (queueItem2 == currSt) begin
queueItem2 = queueItem3;
queueItem3 = queueItem4;
queueItem4 = 4'b1111;
go = 0;
end else if (queueItem3 == currSt) begin
queueItem3 = queueItem4;
queueItem4 = 4'b1111;
go = 0;
end else if (queueItem4 == currSt) begin
queueItem4 = 4'b1111;
go = 0;
end
//if current state is not in the request queue
else
go = 1;
end
end
always@(posedge slowclk)//change current state to new state
currSt <= cs;
endmodule