En VHDL, ¿el hecho de tener una entrada grande de bus al componente requiere recursos adicionales?

2

Tengo un componente que tiene una señal de matriz muy grande (un par de kilobits) y actualmente escribo y leo en solo un componente. He comprobado en Vivado si esto usa demasiados recursos, y no lo hace. Mi pregunta es que quiero tener un subcomponente que pueda acceder a esta matriz (solo leer de ella). Si simplemente establezco la matriz como una entrada para el subcomponente, ¿tomará más recursos que si implementara la matriz en el mismo componente? Sé que el compilador de optimización es bastante poderoso, pero no sé qué sucede cuando se interconecta entre los componentes VHDL.

Gracias

    
pregunta Ethan

3 respuestas

1

Cuando ve el diseño como un esquema, puede obtener un falso sentido de que existen límites entre sus módulos (o entidades) individuales. Pero, de manera predeterminada, Vivado aplana su diseño, lo que significa que su diseño se trata esencialmente como un gran diseño. Todos los límites de los subcomponentes se ignoran. Entonces, simplemente piense en ello como si simplemente hubiera copiado el código del subcomponente y lo hubiera pegado en el padre.

Por supuesto, puede decirle a Vivado que mantenga su jerarquía definida (es decir, no aplanar el diseño), en cuyo caso el lugar y las etapas de enrutamiento intentarán colocar las agallas de cada entidad individual dentro del tejido. Pero aún así, no replicará los controladores de señales que existen en los componentes principales.

    
respondido por el Blair Fonville
2

Cuando tienes una gran variedad en diseño HDL (ya sea VHDL o Verilog), el sintetizador a menudo lo reconocerá como un "ram" y lo implementará utilizando el bloque ram en lugar de una gran pila de registros.

Sin embargo, solo puede hacer esto en un subconjunto limitado de casos, si no puede asignarlo a un carnero, terminará con una gran cantidad de registros. En particular, la mayoría de los rams solo tienen dos "puertos", por lo que leer o escribir su arreglo desde más de dos lugares (ya sea en el mismo módulo o no) es casi seguro que lo acorralará con un montón de registros.

No sé si la deducción del ram de bloque se produce antes o después de que el diseño se haya aplanado, tendría que experimentar para averiguarlo.

Finalmente ten mucho cuidado al probar diseños parciales. Es muy fácil terminar con grandes partes de su diseño sintetizadas completamente porque no conectó su salida a nada o porque alimentó su entrada con una constante.

    
respondido por el Peter Green
0

[Respuesta reescrita por la competencia, porque entendí mal la pregunta.]

Desde un punto de vista de síntesis, una señal que es una matriz es equivalente a un grupo de señales separadas para cada elemento. La síntesis generalmente tratará con cada una de esas señales separadas de manera independiente.

La síntesis requerirá recursos de interconexión entre el controlador (fuente) de una señal particular, en este caso, cada componente del arreglo, y la lógica sintetizada que usa esa señal como entrada (se hunde). El simple hecho de pasar la señal al nivel del código fuente de VHDL a través de los puertos de los componentes de VHDL solo define la conectividad en un sentido puramente lógico, pero no especifica que esas señales tengan una ruta de enrutamiento particular y recursos sintetizados.

Específicamente, si la señal de la matriz grande se activa en un componente y se pasa a través de un puerto a otro componente, cada elemento de señal individual tendrá que enrutarse desde su propia fuente a su propio (s) receptor (es), pero cada uno de ellos se enrutarán por separado de forma tan mínima como la síntesis y P & R puedan hacerlo.

    
respondido por el Eric Smith

Lea otras preguntas en las etiquetas