módulos en verilog?

1

En mi proyecto reciente en Xilinx ISE, necesito crear dos módulos, uno para multiplicador de 4 bits y otro para sumador de 4 bits.

Entre los dos, necesito llamar al sumador de 4 bits en el módulo multiplicador que estoy haciendo al llamar al sumador:

module multiplier(inputs ..., output ...) begin

always @(posedge clk) begin

    shift_product[23:16]=16'b1;

    twentyfourbit_adder(sum,shift_product,sum,cout);

end

No escribí todo el código porque solo pido que este sea el método correcto para usar un módulo en otro.

    
pregunta Virange

1 respuesta

3

En Verilog, cuando estás creando instancias de un módulo, eso significa que estás agregando hardware adicional a la pizarra.

Este hardware se debe agregar antes de que comience la simulación (es decir, en el momento de la compilación). Aquí, puede no agregar / eliminar hardware en cada pulso de reloj.

Una vez que se crea una instancia, el módulo se ejecuta / verifica para cada marca de tiempo de la simulación, hasta el final.

Entonces, para ejecutar cualquier módulo, simplemente cree una instancia, proporcione el clk y otras entradas necesarias, y agregue el bloque siempre en el propio submódulo .

Una vez que el hardware esté instanciado , se ejecutará de acuerdo con la lógica que contiene, durante toda la vida útil .

Un comentario más, la creación de instancias del módulo requiere un nombre de instancia , para identificar de forma única todas las piezas de hardware. Entonces, para twentyfourbit_adder , use cualquier nombre de instancia como twentyfourbit_adder ta(sum,shift_product,sum,cout);

Su código puede ir de la siguiente manera:

module multiplier(inputs ..., output ...) begin

// Instantiate just once
twentyfourbit_adder ta(sum,shift_product,sum,cout);

always @(posedge clk) begin

    shift_product[23:16]=16'b1;
   // Other stuff here...    
end

Nota al margen:

Es posible que haya mezclado el entendimiento sobre creación de instancias del módulo y la llamada de tarea / función . El módulo es una entidad estática mientras que la tarea / función puede ser dinámica . Como demostró, si twentyfourbit_adder es una tarea, entonces la llamada anterior es válida.

He agregado la mayor parte de mi respuesta de la respuesta anterior a esta similar pregunta . Para obtener más información, consulte Creación de instancias del módulo y Módulos de creación de instancias y enlaces primarios

    
respondido por el sharvil111

Lea otras preguntas en las etiquetas