Verilog: incluye un módulo en otro módulo

0

Soy un principiante en Verilog. Así que estoy confundido en la codificación en Verilog. ¿Puedo usar un módulo en otro módulo?

module pn(
  input p,
  input n,
  input clk,
  output reg q
);

  initial begin
    q = 0;
  end

  always @(posedge clk) q=(q&n)|((~q)&p);

endmodule

Quiero usarlo en el siguiente módulo

module ic2323(
  input p0, 
  input n0, 
  input p1, 
  input n1, 
  input clk, 
  output q0, 
  output q1, 
  output x
);

endmodule

¿Es posible?

EDITAR:

 x=q0~^q1;

este código da error

La referencia al cable escalar 'x' no es un registro legal o una variable lvalue

Lado izquierdo ilegal de la asignación de bloqueo

    
pregunta nurgasemetey

1 respuesta

3

Claro, si no pudieras construir una jerarquía, los HDL serían bastante limitados.

Por ejemplo, podría tener:

module ic2323(
  input p0, 
  input n0, 
  input p1, 
  input n1, 
  input clk, 
  output q0, 
  output q1, 
  output x
);

  // Instantiate a pn for p0, n0 and q0.
  pn pn_a(
    .p   (p0),
    .n   (n0),
    .clk (clk),
    .q   (q0)
  );

  // Instantiate another pn for p1, n1 and q1
  pn pn_b (
    .p   (p1),
    .n   (n1),
    .clk (clk),
    .q   (q1)
  );

  // XNOR the two outputs together
  assign x = ~(q0 ^ q1);

endmodule
    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas