Estoy intentando crear un registro de desplazamiento de 32 bits en Verilog con dos entradas, DATA0 y DATA1. Los DATOS se conducen a un nivel bajo para ingresar un 0 al registro y los DATOS se conducen a un nivel bajo para ingresar un 1 al registro. DATA0 y DATA1 se mantienen altos cuando no se están utilizando.
El problema con el que me estoy topando es que cuando tengo un DATO bajo, reemplaza todos los bits en el registro con ceros. DATA1 funciona bien, cambiando el registro y agregando un uno al final. Mi código es el siguiente:
module shift(
databits, //The register
reset , // reset Input
DATA0 , //Input for a 0
DATA1 //Input for a 1
);
//------------Output Ports--------------
output [31:0] databits;
//------------Input Ports--------------
input reset, DATA0, DATA1;
//------------Internal Variables--------
reg [31:0] databits;
//-------------Code Starts Here-------
always @(posedge reset or negedge DATA0 or negedge DATA1) begin
if(reset) begin
databits <= 0;
end
//If DATA0 triggered this, write a 0
else if (~DATA0) begin
databits <= databits << 1;
end
//If DATA1 triggered this, write a 1
else if (~DATA1) begin
databits <= { databits[30:0], 1'b1 };
end
end
endmodule
Intenté usar DATA0 para ingresar también algunos en el registro, pero sobrescribió a todos los reigsters con unos. Tengo entendido que el bloque siempre debe ejecutarse una vez cuando DATA0 baja, por lo que no entiendo por qué está haciendo esto.