Compartir la salida del módulo en verilog

0

Al comenzar a aprender Verilog, surgió esta duda que me arrastró a la mente, que es la siguiente: -

1) Considere el siguiente código Verilog con 3 módulos. Módulo 'Reloj' que simula un reloj, el módulo D Flip Flop y el módulo JK Flip Flop: -

module clock(clock_out); //Clock Module
output clock_out;
reg clk;
wire clock_out;
assign clock_out=clk;
initial 
    clk=1'b0;
always 
    begin
    #200    clk=~clk;
    end
endmodule

module d(q,q1,d,c); //D Flip Flop
output q,q1;
input c,d;
wire c;
clock clock1(.clock_out(c)); //clock module instantiated
reg d;
reg q,q1;
    initial 
       begin
           q=1'b0; q1=1'b0;d=1'b0;
      end
    always @ (posedge c)
       begin 
         q=d;
         q1= ~d;
         d=~d;
        end
endmodule


module jk(q,q1,j,k,c);   //JK Flip Flop
output q,q1;
input j,k,c;
reg q,q1;
wire c;
clock clock2(.clock_out(c));// another clock module instatiated

initial begin q=1'b0; q1=1'b1; end
always @ (posedge c)
  begin
    case({j,k})
         {1'b0,1'b0}:begin q=q; q1=q1; end
         {1'b0,1'b1}: begin q=1'b0; q1=1'b1; end
         {1'b1,1'b0}:begin q=1'b1; q1=1'b0; end
         {1'b1,1'b1}: begin q=~q; q1=~q1; end
    endcase
   end
endmodule

2) En esta configuración, habiendo instanciado un módulo de reloj en cada uno de los módulos D y JK Flip Flop, puedo esperar que el reloj (señal de salida generada por el reloj del módulo) esté sincronizado en ambos módulos o debería esperar un retraso igual al ¿Retraso de la instanciación real de los relojes cuando comenzó la simulación?

PD: Por favor, avíseme si no he podido explicarme. No quería alargar la publicación de lo requerido.

    
pregunta sherinkapotein

1 respuesta

0

Tu primer problema está aquí:

module d(q,q1,d,c); //D Flip Flop
output q,q1;
input c,d;           // Line A
// ...
    always @ (posedge c)
       begin 
         q=d;
         q1= ~d;
         d=~d;       // Line B
        end
endmodule

Si hace que d sea una entrada para un módulo (en la línea A), no debe conducirlo como lo está en la línea B. Las entradas para d deben ser controladas por algo en el módulo de nivel superior que crea una instancia de d .

(También asignas una entrada del módulo d cuando creas un clock dentro de él y conectas la salida de clock a una señal de entrada).

Su segundo problema es que definió tres módulos, pero nunca los instaló en ningún lugar. Debe crear un módulo "principal" o "de nivel superior" que cree una instancia de al menos una instancia de cada uno de sus submódulos y le informe cómo se conectan entre sí.

  

En esta configuración, habiendo instanciado un módulo de reloj en cada uno de los módulos D y JK Flip Flop, puedo esperar que el reloj (señal de salida generada por el reloj del módulo) esté sincronizado en ambos módulos o debería esperar un retraso igual al retraso de ¿Ejemplificación real de los relojes cuando comenzó la simulación?

Estarán sincronizados, pero solo porque el simulador está idealizado. Toda la inicialización ocurre efectivamente al mismo tiempo. Sin embargo, su módulo de reloj no es un código sintetizable, ya que se basa en un retraso mágico "# 200" sin ninguna indicación de cómo se produciría en un circuito físico.

Entonces, en la simulación, sus dos módulos (si realmente los instaló en algún lugar) operarán en sincronización. Pero la forma habitual de hacer las cosas es crear un módulo principal, crear una instancia de un módulo de reloj allí y usar su salida como entrada c para las instancias de los dos módulos de flip-flop. (Si realmente hiciste que clock sea un diseño sintetizable, esto también ahorraría recursos al no crear dos copias cuando solo necesitas una)

    
respondido por el The Photon

Lea otras preguntas en las etiquetas