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