VHDL: nomenclatura e interpretación de arquitectura

14

Nota: Estoy usando el ISE de Xilinx y tengo una placa FPGA para trabajar (con interruptores y luces, etc.), y hasta ahora he pirateado algunos proyectos simples. Al mismo tiempo, estoy leyendo varios tutoriales para construir una base para lo que estoy haciendo.

He visto varias entidades y sus arquitecturas mencionadas en los materiales de referencia que he estado revisando, pero la denominación a menudo es confusa. A menudo, en lugar de "arquitectura rtl de .." o "arquitectura estructural de ..." Veré "arquitectura foo de ..." o incluso "arquitectura arco de ..."

Me doy cuenta (tardíamente) de que el nombre de la arquitectura es tan arbitrario como el nombre de la entidad, aunque hay guías de estilo que sugieren que se pueden usar convenciones de nombres más consistentes para evitar este problema. Esto me lleva a algunas preguntas:

  • En cuanto a una entidad, ¿cómo se puede determinar el modelo arquitectónico real que se utiliza sin indicios del nombre de la arquitectura? RTL, conductual, estructural ... parecen ser bastante similares a los ojos de mi alumno (suponiendo que los ejemplos que he visto en realidad estén nombrados correctamente). Un ejemplo simple pero obvio sería útil aquí (o un puntero a uno).

  • Si especifica múltiples arquitecturas para una sola entidad (lo que entiendo es posible) ¿simplemente le da a las arquitecturas diferentes nombres en el mismo archivo o ...?

  • ¿Están los nombres de arquitectura confinados a una entidad dada (es decir, ¿hay algún problema con los "espacios de nombres" al usar el mismo nombre de arquitectura en varias entidades)?

Editar: y uno más:

  • Parece que hay una distinción entre RTL y comportamiento, pero como se mencionó anteriormente, realmente no lo veo en los ejemplos que he visto (a menudo solo veo una arquitectura definida). ¿Una arquitectura es más común que las otras?

Lo que he estado buscando es un proyecto integral pero simple de múltiples componentes (pequeños componentes), escrito utilizando las mejores prácticas (nombres adecuados, no todos agrupados en un solo archivo, etc.) pero aún no he encontrado uno. Encuentro proyectos de muestra adecuadamente diseñados muy útiles para iluminar principios básicos y mejores prácticas. Si conoces un proyecto de este tipo, también agradecería un puntero a eso. (Si nada más, tal vez una vez que descubra esto, pueda compartir uno de los míos ...)

MartyMacGyver
fuente

Respuestas:

6

Mirando una entidad, ¿cómo se puede determinar el modelo arquitectónico real que se utiliza sin indicios del nombre de la arquitectura?

No puede: cuando se crea una instancia o se configura , se puede especificar la arquitectura (si hay más de una para elegir) o se elegirá una predeterminada para usted.

Si especifica múltiples arquitecturas para una sola entidad (lo que entiendo es posible) ¿simplemente le da a las arquitecturas diferentes nombres en el mismo archivo o ...?

Les das diferentes nombres. No tiene que estar dentro del mismo archivo (de hecho, a VHDL le importa mucho menos de lo que piensas sobre qué hay en ese archivo)

¿Están los nombres de arquitectura confinados a una entidad dada (es decir, ¿hay algún problema con los "espacios de nombres" al usar el mismo nombre de arquitectura en varias entidades)?

Están "unidos" a una entidad, por lo que pueden reutilizarse.

A menudo uso a1como mi arquitectura para todo lo sintetizable como

  • rtl implica un nivel más bajo (para muchos lectores) de lo que escribo.
  • behavioural a menudo implica no sintetizable (para algunos lectores)
  • synth es usado por el sintetizador para su modelo (de lo contrario, lo habría usado)

a1 no ha tenido conflictos hasta el momento y no causa confusión;)

Si realmente tengo más de una arquitectura, tiendo a nombrarlas de forma detallada (por ejemplo hard_multipliersy lut_multiplierspara un filtro que crea instancias, o no, de bloques MUL18).

Muy a menudo solo tienes una arquitectura, por lo que no importa. Los buenos nombres de entidad son mucho más importantes.

Parece que hay una distinción entre RTL y comportamiento, pero como se mencionó anteriormente, realmente no lo veo en los ejemplos que he visto (a menudo solo veo una arquitectura definida). ¿Una arquitectura es más común que las otras?

Es histórico: no solías ser capaz de sintetizar código de "comportamiento" (que en un momento incluía cosas como agregar), así que creaste una versión RTL que instanciaba sumadores y similares. (Eso es lo que entiendo: ¡he estado escribiendo código de comportamiento (y aún sintetizable) desde que comencé VHDLing en aproximadamente 1999!)

Martin Thompson
fuente
Agradezco la respuesta punto por punto!
MartyMacGyver
Hago casi lo mismo: nombro todas mis arquitecturas archy, en cambio, me concentro en dar nombres razonables a las entidades. Para el caso poco frecuente, tengo más de una arquitectura para una entidad, solo les doy otros nombres. Sin embargo, para mí, behaviouralrealmente implica un código que no es posible o que no se pretende sintetizar. Además, siempre tuve la idea de que rtles el nombre adecuado para todos los HDL destinados a la síntesis, independientemente del nivel de abstracción. (Aunque, como siempre, podría estar equivocado en cualquiera de estos puntos, pero esa fue mi comprensión del uso de esas palabras.)
Carl
8

Aquí están los tipos de arquitectura:

Comportamiento:

Notas generales:

  • Tradicionalmente no hay jerarquía (solo un archivo, no hay componentes instanciados) aunque esto varía entre las herramientas.
  • Muy rápido para simular.
  • Se definen los comportamientos de las señales.
  • Cuando el comportamiento se usa para simulación, solo puede contener código no sintetizable. El comportamiento destinado a la síntesis debe ser naturalmente sintetizable.

Notas específicas de Xilinx

  • En general, los modelos de generador principal son archivos .vhd de pre-síntesis

Estructural:

Definición general

  • Solo crea instancias de componentes y los conecta (jerárquico).
  • Más lento para simular que conductual.
  • No hay una definición real del comportamiento de la señal en el nivel superior.
  • Solo código sintetizable.

Xilinx x notas específicas

  • Los modelos de generador principal no tienen en cuenta el tiempo.
  • En general, los modelos de generador de núcleo crean instancias de listas de redes posteriores a la síntesis

Los anteriores son básicamente los dos principales animales tradicionales de la arquitectura. Muy comúnmente se usa una definición "mixta", que contiene propiedades de ambos.

RTL:

RTL lo que realmente se pone en el FPGA al final del día. Por lo tanto, este es un código sintetizable que define el comportamiento del sistema y está formado por una jerarquía de código: las
capas inferiores serán de comportamiento sintetizable, donde se define la esencia del comportamiento de la señal, y los niveles superiores serán estructurales, donde el componentes de comportamiento se unen para crear un gran "diagrama de bloques" de alto nivel si se quiere.

En múltiples arquitecturas:

Las arquitecturas pueden estar todas en un archivo o en múltiples archivos. Lo único importante es que la entidad se compila primero y se especifica la arquitectura que se utilizará.

Este libro es muy útil y detalla este tipo de cosas bastante bien.

No existe una regla estricta sobre cómo se deben hacer las cosas en términos de tener modelos conductuales y estructurales distintos o simplemente mezclarlos. Por lo general, en grandes diseños de firmware (o en grandes corporaciones donde el código se comparte y se reutiliza) es útil distinguir entre los dos para simplificar las cosas, sin embargo, al final del día, todo se reduce a lo que funcione para usted.

Stanri
fuente
Gracias por la respuesta y el consejo del libro (aunque evidentemente es un artículo difícil de adquirir).
MartyMacGyver
@MartyMacGyver: sí, generalmente solo leo la versión de Google
Docs
Lo haría, pero faltan páginas deliberadamente ...
MartyMacGyver
1

En primer lugar, los diseños de arquitectura del mundo real no se pueden clasificar estrictamente de esa manera. ¿Por qué limitarse? Es posible que desee crear instancias de otras entidades y conectarlas "estructuralmente", pero agregue un proceso o una asignación concurrente aquí y allá para agregar alguna lógica "rtl", y tal vez use algunos patrones de codificación "conductuales" para que el sintetizador descubra algunos de los detalles que no le interesan (como agregar sin crear una instancia específica de un sumador con parámetros de área / canalización / rendimiento), todo en la misma arquitectura.

Más importante aún, debe comprender qué es sintetizable en las tecnologías actuales de asic / fpga y qué no, y esto es independiente del modelo de arquitectura.

Una entidad puede implementarse de múltiples maneras, incluso permitiendo comportamientos ligeramente diferentes, por lo que puede tener múltiples arquitecturas para la misma entidad. Además, puede tener una arquitectura para la simulación solamente (generalmente no sintetizable) que puede simular más rápido que la versión "real", lo que puede ser útil al probar bancos de grandes diseños en su conjunto. Le daría a estas arquitecturas nombres que lo ayudarán a recordar lo que los hace diferentes a los demás, y simplemente bhv / str / rtl generalmente no es suficiente o preciso, dada la naturaleza híbrida de los diseños del mundo real.

Con respecto a sus preguntas específicas, la declaración de arquitectura está vinculada a un nombre de entidad, por lo que no hay problemas de espacio de nombres con arquitecturas del mismo nombre para diferentes entidades. Simplemente use nombres diferentes para arquitecturas para la misma entidad.

Las arquitecturas pueden residir en diferentes archivos, solo debe asegurarse de que la declaración de la entidad se compila primero.

Puede seleccionar qué arquitectura usar al crear instancias de la entidad o al usar declaraciones de configuración. Si no lo hace, el valor predeterminado es "generalmente" la última arquitectura que el compilador vio para una declaración de entidad dada.

apalopohapa
fuente
1
¡Gracias por tu respuesta! El tema común parece ser que los diseños generalmente no encajan perfectamente en los casilleros arquitectónicos sobre los que he estado leyendo. Espero poder encontrar un ejemplo canónico para satisfacer mi curiosidad (bastante pedante) sobre el asunto ... Si voy a estar divergiendo de un "ideal", me gustaría al menos saber cómo es un ideal.
MartyMacGyver