En Verilog Synthesis, ¿Crear varias instancias de un módulo es lo mismo que crear varios módulos con el mismo contenido?

1

Me pregunto si hay una diferencia entre crear varias instancias de un solo módulo y crear instancias de diferentes módulos (con código de hardware idéntico) solo una vez.

Por ejemplo, quiero hacer una operación - división binaria -, necesito hacer 2 divisiones consecutivas, ejemplo B = 1 / A y C = A / 28, que necesito para pasar en el al mismo tiempo , por lo que creo el módulo en otro archivo llamado Bin_Div. En el módulo superior escribo

 Module top_mod_oper (A,B,C);
 input [31:0] A; 
 output [31:0] B, C;


 Bin_Div inst1 (

 .dataa (A),
 .output (B));


 Bin_Div inst2 (

 .dataa (A),
 .output (C));

 endmodule

que creará 2 hardware independiente, ¿correcto? sería lo mismo que crear un segundo Bin_Div, por ejemplo

   .
   .
   .
 First_Bin_Div inst1 (

 .dataa (A),
 .output (B));


 Second_Bin_Div inst1 (

 .dataa (A),
 .output (C));

 endmodule

Y otra pregunta , ¿qué debo hacer si quiero que ocurran de forma consecutiva? Significa una después de la otra utilizando el mismo hardware Bin_DiV.

    
pregunta sujeto1

2 respuestas

1

En el primer caso, uno de los módulos se "optimizará" ya que las salidas son equivalentes y se pueden conectar entre sí (el mismo módulo, las mismas entradas, los mismos parámetros, por lo que las salidas serán las mismas). En el segundo caso, esto también sucederá si los contenidos del módulo son idénticos. Si el contenido del módulo es diferente o si las entradas / parámetros son diferentes, entonces el resultado será dos conjuntos de lógica diferentes (bueno, podría optimizarse de manera que algunas partes se compartan, pero las salidas deben ser distintas).

Si desea que las cosas sucedan secuencialmente, entonces creo que tendrá que colocarlas en el mismo módulo y usar una máquina de estados o similar para secuenciar las operaciones. Si están en dos módulos separados, entonces podría usar señales de habilitación de algún tipo y secuencia que externamente, pero es posible que no obtenga ningún ahorro de área de la lógica que pueda reutilizarse para las operaciones secuenciales.

    
respondido por el alex.forencich
0

Si necesita que se ejecuten dos divisores binarios al mismo tiempo, entonces necesita dos circuitos divisores binarios. Ya sea que escriba el divisor dos veces o lo coloque en un módulo y lo cree dos veces, el efecto es el mismo.

Si desea tener un divisor binario y compartirlo, entonces necesita alguna forma de arbitrar el acceso. Hay muchas maneras de hacer esto.

Una forma sería tener dos entradas, cada una con una señal de "solicitud" separada, una salida y dos señales de "finalización". Cada uno de los dos componentes que quiere compartir el divisor pone un valor en una de las entradas y eleva la señal de "solicitud" correspondiente, luego lee el resultado cuando su "hecho" va alto.

O, si sabe que los componentes que usan el divisor nunca entrarán en conflicto, podría idear algún esquema por el cual los componentes siempre pondrían 0 en sus entradas cuando no necesiten el divisor. Entonces podrías O O las entradas juntas y dividir eso. Podría arreglar esto si, por ejemplo, estuviera ejecutando un proceso continuo que requiriera 10 relojes y un componente solo necesitara el divisor en el reloj 3 y el otro solo lo necesitara en el reloj 6.

    
respondido por el Willis Blackburn

Lea otras preguntas en las etiquetas