Hola, estoy intentando implementar un registro de desplazamiento de salida en serie paralelo basado en la hoja de datos para el registro de desplazamiento de salida paralelo en serie de 74LV165A
la hoja de especificaciones se puede encontrar en hoja de datos para 74LV165A
Si hago que mi banco de pruebas comience por desplazarse en serie, luego intente bloquear los datos en la entrada paralela, los datos no aparecen. Si comienzo el banco de pruebas con el bloqueo paralelo habilitado, los datos aparecen en la Q y se marcará una vez que se habilite el cambio.
Mi objetivo es cambiar varios conjuntos de datos a través de este registro; sin embargo, actualmente este comportamiento lo impide. Cualquier ayuda sería muy apreciada, evento si es solo una pista :)
Actualmente estoy monitoreando la información de configuración y reinicio y las líneas Q.
module nand3(input one, input two, input three, output out);
assign out = !(one&two&three);
endmodule
module nand2(input one, input two, output out);
assign out = !(one&two);
endmodule
module DFlipFlop(input clk, input reset, input D, input set, output Q);
reg Q;
initial
Q<=0;
always @(posedge clk or negedge reset or negedge set)
begin
if(!reset)
Q<=0;
else if(!set)
Q<=1;
else
Q<=D;
end
endmodule
module control_mux(input [7:0]set_bits, input CP, input CE, input PL, output [16:0]bus); // bit 16 is clk, bits 15 -> 8 are set, bits 7 -> 0 of bus are reset
assign VCC = 1;
nand3 control(!CP, !CE, PL, bus[16]);
nand2 set1(!PL, set_bits[7], bus[15]);
nand2 set2(!PL, set_bits[6], bus[14]);
nand2 set3(!PL, set_bits[5], bus[13]);
nand2 set4(!PL, set_bits[4], bus[12]);
nand2 set5(!PL, set_bits[3], bus[11]);
nand2 set6(!PL, set_bits[2], bus[10]);
nand2 set7(!PL, set_bits[1], bus[9]);
nand2 set8(!PL, set_bits[0], bus[8]);
nand2 reset1(!PL, bus[15], bus[7]);
nand2 reset2(!PL, bus[14], bus[6]);
nand2 reset3(!PL, bus[13], bus[5]);
nand2 reset4(!PL, bus[12], bus[4]);
nand2 reset5(!PL, bus[11], bus[3]);
nand2 reset6(!PL, bus[10], bus[2]);
nand2 reset7(!PL, bus[9], bus[1]);
nand2 reset8(!PL, bus[8], bus[0]);
endmodule
module testbench;
reg [7:0]set_bits;
reg [7:0]set_bits2;
reg CE, PL, CP, D;
wire [16:0]bus;
wire [7:0]Q;
always
#5 CP = !CP;
initial
begin
CP = 0;
D = 0;
set_bits = 8'b11001011;
PL = 0; CE = 1;
#10 PL = 1; CE = 0;
end
initial
#500 $finish;
initial
begin
$display("CP, CE, PL, b16 b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0");
$monitor("%b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b", CP, CE, PL, bus[16], bus[15], bus[14], bus[13], bus[12], bus[11], bus[10], bus[9], bus[8], bus[7], bus[6], bus[5], bus[4], bus[3], bus[2], bus[1], bus[0], Q[7], Q[6],Q[5],Q[4],Q[3],Q[2],Q[1],Q[0]);
end
control_mux CM(set_bits, CP, CE, PL, bus);
DFlipFlop FF(bus[16], bus[7], D, bus[15], Q[7]);
DFlipFlop FF2(bus[16], bus[6], Q[7], bus[14], Q[6]);
DFlipFlop FF3(bus[16], bus[5], Q[6], bus[13], Q[5]);
DFlipFlop FF4(bus[16], bus[4], Q[5], bus[12], Q[4]);
DFlipFlop FF5(bus[16], bus[3], Q[4], bus[11], Q[3]);
DFlipFlop FF6(bus[16], bus[2], Q[3], bus[10], Q[2]);
DFlipFlop FF7(bus[16], bus[1], Q[2], bus[9], Q[1]);
DFlipFlop FF8(bus[16], bus[0], Q[1], bus[8], Q[0]);
endmodule