¿Creación de instancias del módulo Verilog durante la síntesis?

0

He escrito un banco de pruebas en Verilog que crea 3 copias de un módulo y pasa los datos de un lado a otro con mi prueba del módulo principal como se anticipa:

test Sen1(A,B,C,D,E,F,CLK);
test Sen2(A,B,C,D,E,F,CLK);
test Sen3(A,B,C,D,E,F,CLK);

¿La creación de instancias de módulo solo es válida para simular modelos de comportamiento / funcionales? Me pregunto qué debo hacer para crear una versión sintetizable de esto. Por un lado, parece que mi módulo llamado prueba podría agregar todos los puertos de esta manera:

test (A1,A2,A3,B1,B2,B3,....CLK)

pero luego tendré módulos individuales con una gran cantidad de puertos que saturarán mi código (CLK tendría que ser compartido entre instancias BTW). Me gustaría saber su opinión sobre el enfoque correcto para reorganizar / reformular las instancias de mis módulos en una estructura de código a la que puedo sintetizar y asignar pines.

    
pregunta reacher33

2 respuestas

0

En la parte superior de su jerarquía, DEBE tener un módulo que contenga toda la lógica.

  

pero luego tendré módulos únicos con muchos puertos que saturarán mi código

No hay una solución simple para "despejar" su código. La única forma es usar puertos sensibles y nombres de señales.
No es inusual que los diseños digitales tengan muchas señales en el nivel superior. Es por eso que encuentras FPGA con más de 400 puertos de E / S. Dentro de un diseño, las conexiones de puerto son un orden de magnitud más grande.

  

Me gustaría saber qué piensa sobre el enfoque correcto para reorganizar / reformular las instancias de mis módulos en una estructura de código que puedo sintetizar y asignar pines a.

Eso no es posible a menos que sepamos mucho más de lo que hace su código y todos los puertos que tiene. La frase "La limpieza está al lado de la piedad" viene a la mente aquí. Los nombres en su ejemplo anterior son la quintaesencia de cómo no nombrar puertos.

    
respondido por el Oldfart
0

Solo puede tener una instancia del "Módulo de nivel superior" en un diseño, es esta única instancia de módulo la que será su hardware. Lo mismo ocurre con la simulación: tiene un único módulo de banco de pruebas que su herramienta de simulación utiliza para construir la jerarquía.

Si lo piensas bien, ¿cómo sabrían las herramientas de síntesis qué puerto es cuál si pudieras solicitar varias instancias? Tendría varios puertos llamados A , varios llamados B , etc. Si no están conectados al mismo pin, necesitaría alguna forma de diferenciarlos.

Si desea que varias instancias de su módulo formen el nivel superior, deberá crear un contenedor que ejemplifique la cantidad de instancias que necesita. La forma más sencilla de hacer esto si desea poder cambiar fácilmente el número de instancias y no desea volver a declarar muchos puertos, es utilizar la generación de bucles:

test Sen1(A,B,C,D,E,F,CLK);
test Sen2(A,B,C,D,E,F,CLK);
test Sen3(A,B,C,D,E,F,CLK);

podría convertirse en:

module #(
    parameter instances = 3 //Change this value to set number of instances
) SenTop (
   ... [instances-1:0] A,
   ... [instances-1:0] B,
   ...
   ... [instances-1:0] F,
   input CLK,
);
    genvar i;
    generate for (i = 0; i < instances; i=i+1) begin : inst_loop
        test Sen(A[i],B[i],C[i],D[i],E[i],F[i],CLK);
    end endgenerate
end

También puede conectar el mismo pin input o inout a varias instancias si es necesario (por ejemplo, CLK podría ser de un solo bit y conectarse a todas las instancias).

Si alguno de los pines en la instancia del módulo es multi-bit, tendría que tener algo de desempaquetado en su bucle. Por ejemplo, si digamos que A era un bus de 2 bits en el submódulo, podría tener algo como:

module #(
    parameter instances = 3 //Change this value to set number of instances
) SenTop (
   ... [instances*2-1:0] A,
   ... [instances  -1:0] B,
   ...
   input CLK,
);
    genvar i;
    generate for (i = 0; i < instances; i=i+1) begin : inst_loop
        localparam j = 2 * i;
        test Sen(A[j+:2],B[i], ... ,CLK);
    end endgenerate
end
    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas