2012-03-28 20 views
9

Las configuraciones de VHDL se pueden usar para vincular componentes a entidades con un nombre diferente e incluso con puertos completamente diferentes. [see this article for more info]¿Las configuraciones VHDL avanzadas se utilizan alguna vez en la vida real?

configuration c2 of testbench is 
    for str 
     for dut_inst : dut 
      use entity work.unrelated(rtl) 
       port map(
        port1 => a, 
        port2 => b, 
        port3 => c, 
        port4 => "unused" 
       ); 
     end for; 
    end for; 
    end configuration c2; 

¿Alguno de ustedes ha visto que esto suceda en un proyecto de proyecto comercial? ¿Cuál fue el propósito de caer en una entidad aparentemente no relacionada? ¿Por qué no solo cambiaron el código de instanciación?

Puedo inventar situaciones hipotéticas, pero estoy interesado en un caso de uso real.

+0

Gracias por hacer esta pregunta - También estoy muy interesado. En mi experiencia, nunca lo he visto utilizar y he trabajado en grandes bases de código dirigidas a múltiples placas/sistemas FPGA. – Josh

+1

Lo mismo para mí. VHDL parece tener un par de elementos de lenguaje que lo hacen sentir muy viejo y especificado para una base de usuarios diferente y más pequeña que los ingenieros de FPGA de hoy en día. Listas de sensibilidad, configuraciones, etiquetas obligatorias, falta del equivalente de un preprocesador C, insistiendo en que el último elemento de una lista no debe tener coma en cola, o distinguir entre std_logic y bool cuando el desarrollador asume '1' = verdadero y el nombre la señal en consecuencia. Los conceptos básicos están bien, pero alguien necesita rediseñar el lenguaje desde cero. – maxy

+0

@maxy: Algunos de ellos estaré de acuerdo, y otros no. Las listas de sensibilidad son una reliquia de cuando los compiladores/simuladores no eran tan capaces, así que te daré eso. Las comillas finales, sí, está bien, pero no estoy perdiendo el sueño por eso. Las configuraciones son potentes y útiles (aunque el ejemplo anterior parece innecesario). No quiero un preprocesador. ¿Has visto las cosas horribles que las personas hacen con eso? Los genéricos te dan el 90% allí, pero imponen la estructura. std_logic vs bool es un artefacto de tener un lenguaje rígidamente tipeado, y la tipificación rígida es algo bueno para RTL en mi humilde opinión. Etiquetas ... ¿por qué no etiquetarías algo? :-) –

Respuesta

3

No, nunca he visto eso en la naturaleza.

Supongo que la razón es que la mayoría de las personas (incluido yo mismo) ni siquiera saben que tales cosas son posibles con las configuraciones.

4

Nunca he visto las conexiones de puertos cambiar, pero he visto que se utiliza para enlazar en diferentes versiones de componentes con el mismo mapa de puertos. Algunos ejemplos que he visto:

  • Encuadernación en versiones vacías al construir simulaciones de nivel de sistema grandes. Parte del diseño se reemplaza por versiones que no hacen nada para mantener la huella de memoria baja cuando se prueban otras partes del diseño.
  • Similar, pero al probar la infraestructura del bus de un diseño, aglutine en unidades simples que respondan de manera "loca".
  • Diferentes versiones de un bloque en particular que tienen diferentes compromisos de diseño. p.ej. Una versión grande y rápida, una pequeña pero lenta. Luego se puede cambiar dependiendo de lo que se necesita cuando el sistema se combina o para una aplicación en particular.

Sin embargo, ninguno de estos necesita las características de las que está hablando. Lo único que puedo pensar es que usar un componente diferente podría ser útil si tienes algo así como varios proveedores de bibliotecas RAM, y necesitas intercambiarlos regularmente. Incluso entonces es poco probable que puedas hacer un mapeo de puertos uno a uno. Siempre hay un pin de apagado que necesita inversión o algo así.

+0

Añadiría (1) el intercambio de modelos de comportamiento para modelos RTL a medida que progresa un proyecto grande, y (2) el uso de la configuración para seleccionar diferentes versiones de una simulación. Esto es muy común en grandes proyectos. También agregaría que solo necesita hablar con un Verilogger para averiguar qué tan doloroso es que se le permita un solo nombre cuando ese nombre exista como componentes diferentes en diferentes bibliotecas. Las configuraciones son, IMO, fundamentales para VHDL. – EML

1

He usado este tipo de configuración algunas veces. Intento evitarlo, pero a veces es útil para las pruebas de Whitebox.

Supongamos que tengo una entidad + arquitectura FooMachine muy grande, y deseo escribir una serie de pruebas de unidad de caja blanca que se refieran a señales dentro de FooMachine. Idealmente, FooMachine se dividiría en varios componentes y escribiría pruebas de recuadro negro sobre estos, pero he heredado algunas arquitecturas realmente masivas en las que no podía, desde el punto de vista económico, justificar el tiempo requerido para refactorizar cuando solo se requerían cambios menores.Lo que voy a hacer es definir un componente en FooMachine

component Dummy is 
end component Dummy; 

y una instancia

dummy_g : Dummy; 

Luego, en una unidad de prueba de la señal x en FooMachine, voy a escribir una entidad + arquitectura

entity TestDummy is 
    port (
     x : in std_logic 
    ); 
end entity; 

architecture Arch of TestDummy is 
    ... 
end Arch; 

y una configuración

configuration conf of ... is 
... 
    for all : FooMachine 
     ... 
     for all : Dummy 
      use entity work.TestDummy(Arch) 
       port map (x => x); 
     end for; 
    end for; 
... 
end configuration; 

Y luego puedo escribir mis afirmaciones en TestDummy.

De nuevo, esta no es la forma en que prefiero escribir mis pruebas unitarias, pero ha habido ocasiones en que esta era la mejor solución para un desafortunado problema.

+0

gran respuesta, no muchas personas entienden las implicaciones y la utilidad de este – CJC

Cuestiones relacionadas