¿Cómo llevar las señales internas de un módulo inferior a un módulo superior en VHDL?

9

¿Cómo puedo llevar las señales internas de mi código fuente VHDL a mi banco de pruebas para poder verlas como formas de onda? Yo uso Active HDL. Me gustaría saber si existe algún método independiente para lograr mi objetivo. Cualquier ayuda es apreciada.

Recibo este error ahora.

Micódigofuentees

entitySPI_DACisPort(--inputsandoututs)endSPI_DAC;architectureBehavioralofSPI_DACis--Thesearemyinternalsignalssignalch1_byte_data_sent:STD_LOGIC_VECTOR(23downto0):=x"000000"; 
    signal ch1_byte_cmd_sent        : STD_LOGIC_VECTOR(23 downto 0)     := x"000000";
    --and a few other signals
begin 
    --functionality 
end Behavioral;

El código de mi banco de pruebas es

entity tb_spi_dac is
end tb_spi_dac;

architecture behavioral of tb_spi_dac is
    component spi_dac
    port(
    --declaration, inputs and outputs
    );
    end component;
begin
    uut: spi_dac port map(
    --map ports
    );
    --stimulus process
end;
    
pregunta Suhasini

4 respuestas

10

Lo que está buscando se llama nombres externos (o nombres jerárquicos) en VHDL. Se pueden utilizar para eludir la visibilidad del alcance / jerarquía. La sintaxis es como el ejemplo a continuación.

<<signal path_name : std_logic_vector(7 downto 0)>>

También puede acceder a constantes y variables con nombres externos. Tienes que cambiar el tipo en el tipo externo sin embargo. Puede usar nombres externos directamente para el acceso de lectura / escritura. Sin embargo, deberías usar alias para mejorar la legibilidad.

alias signal_name is 
    <<signal path_name : std_logic_vector(7 downto 0)>>;

El nombre externo debe contener la ruta al elemento al que desea acceder. El camino puede ser absoluto o relativo. Los elementos individuales en su camino están separados por puntos. Tenga en cuenta que debe proporcionar las etiquetas de la instancia / proceso / entidad / ... y no el nombre. La ruta absoluta comienza con un . seguido del nombre de su nivel superior. Para las rutas relativas puede usar ^ para ascender en la jerarquía. Al usar constantes / señales de algún paquete, también puede usar @ para moverse a una biblioteca.

Un ejemplo para una ruta absoluta es

.tb_name.instance_label.sub_instance_label.signal_name

Para acceder al mismo elemento desde el banco de pruebas con nombres relativos que puede usar

instance_label.sub_instance_label.signal_name

Cuando desee acceder a alguna señal / constante de banco de pruebas desde la instancia secundaria que puede usar

^.^.constant_name

Para acceder a alguna otra constante en un paquete de configuración ubicado en la biblioteca de configuración, puede utilizar

@config.pkg_name.other_constant_name

Puedes usar el navegador de diseño / biblioteca de tus simuladores como lo señaló David para encontrar el nombre de ruta correcto.

Esta función se agregó en VHDL-2008, por lo que debería ser compatible con todas las herramientas que ya tienen soporte para VHDL-2008 (incluido ActiveHDL, creo). La mayoría de los simuladores no utilizan VHDL-2008 por defecto, pero proporcionan un argumento de línea de comandos o una opción de configuración para habilitarlo.

    
respondido por el Thomas S.
1
  

¿Cómo puedo llevar las señales internas de mi código fuente VHDL a mi   testbench para que pueda verlos como formas de onda?

Un banco de pruebas implica simulación: una entidad sin puertos generalmente no es elegible para síntesis.

Aunque nunca he usado Active-HDL, entiendo que tiene un navegador de diseño que debería permitirle seleccionar señales en su jerarquía para mostrarlas en su forma de onda. Vea el Compilación y simulación video (5:02, min: seg).

Y ahora tengo la impresión de que el video puede causar confusión, quizás en este caso particular.

A las 2:22 del final, el video muestra un archivo do (macro) que controla la simulación:

Donde vemos cada señal en el nivel superior del diseño se ha agregado a la pantalla de forma de onda con el comando de onda. También debería ser posible especificar una señal en cualquier lugar de la jerarquía de diseño.

La idea básica es que muchos simuladores le permiten programar señales (y algunas permiten que variables) se recopilen para la visualización de la forma de onda.

Este breve video simplemente no muestra señales para niveles de jerarquía subsidiaria. (Hay mucho relleno en una breve presentación de video).

  
    

Me gustaría saber si existe algún método independiente de herramienta para lograr mi objetivo.

  

Como se señaló anteriormente, su objetivo parece ser ver las señales internas como formas de onda.

Ahora hay malas noticias: no hay estandarización para las funciones o interfaces del simulador, señales de programación para el volcado de forma de onda, etc. Todas estas están definidas para su implementación.

Está bastante garantizado que puede volcar señales en cualquier lugar en una jerarquía de diseño a un visor de forma de onda o archivo de volcado de forma de onda con cualquier implementación que simule, el método para hacerlo es la implementación definida.

La buena noticia es que tienden a copiar conceptos entre sí, como hacer archivos, que podría generar mediante programación para la portabilidad, usando una base de datos que describe la verificación funcional en múltiples plataformas de implementación, superando las diferencias en sintaxis y semantica. Es probable que también haya diferencias en la sintaxis de la interfaz de línea de comandos para invocar las herramientas mediante programación.

La idea de portabilidad no abarca varias GUIs con gracia.

    
respondido por el user8352
0

Herramientas como xilinx tienen la opción de ver señales internas.

Un método simple independiente de la herramienta es declarar líneas de salida separadas y conectar las señales internas a estas líneas.

    
respondido por el nidhin
0

Si ha declarado las señales en el banco de pruebas pero no puede ver ninguna salida, es posible que tenga un problema en la instrucción de creación de instancias en la que cree una instancia de la entidad que se va a probar. Compruebe si lo instaló correctamente, utilizando una instrucción de instanciación de entidad o una instanciación de componente. Asegúrese de que las señales en su banco de pruebas estén conectadas a la entidad bajo prueba. Si eso no resuelve el problema, publique el código de testbench para que podamos ayudarlo.

    
respondido por el rick

Lea otras preguntas en las etiquetas