usando d_ff en siempre bloquear

0

Quiero hacer un contador como el código gris, pero esto es diferente, así que escribe este código pero ayúdame a encontrar un error

Este es el código

module counter2(mainclk,rst , A,B,C,D );
input mainclk;
input rst;
output A,B,C,D;
reg A,B,C,D;
reg [3:0]qb;

reg anb,dnb,bc,nca,nd,na,nb,cna;
reg ap,bp,cp;
initial
begin
A=1'b0;
B=1'b1;
C=1'b0;
D=1'b1;

qb[3]=1'b1;
qb[2]=1'b0;
qb[1]=1'b1;
qb[0]=1'b0;

end
always @(posedge mainclk )
begin
    if(rst)
        begin
            A<=1'b0;
            B<=1'b1;
            C<=1'b0;
            D<=1'b1;
        end
    else
        begin
            anb <= A && qb[2];
            dnb <= D && qb[2];
            ap <=  anb || dnb;
            d_ff dffa(ap , 0 , mainclk , A ,qb[3]);
            bc <= B && C ;
            nca <= A && qb[1];
            bp <= bc || nca;
            @d_ff dffb(bp , 0 , mainclk , B ,qb[2]);
            cp <= qb[0] || qb[3] || qb[2] ;
            @d_ff dffc(cp , 0 , mainclk , C ,qb[1]);
            cna <= C && qb[3];
            @d_ff dffd(cna , 0 , mainclk , D ,qb[0]);
        end
end

endmodule

y el error es Error (10170): Verilog HDL syntax error at counter2.v(37) near text "dffa"; expecting "<=", or "="

    
pregunta alireza valipour

1 respuesta

1

Erm, su módulo d_ff es una unidad independiente, contendrá un bloque always . Se crea una instancia del módulo por separado (es decir, no en un bloque always ) y se usa wire para todas las salidas y reg or wire para todas las entradas.

Una vez que conecte mainclk a la entrada del reloj de su módulo d_ff y también a rst , entonces se comportará como un flip flop sincrónico para todos aquellos en su bloque always .

No tienes que pegar todo en el mismo bloque always , puedes tener tantos como necesites. Cualquiera que tenga la misma lista de sensibilidad de borde estará sincronizado entre sí, independientemente de si están o no en el mismo bloque.

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas