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


11

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

Me sale este error ahora.ingrese la descripción de la imagen aquí

Mi código fuente es

entity SPI_DAC is
    Port ( 
    -- inputs and oututs
    )
end SPI_DAC;

architecture Behavioral of SPI_DAC is 
    --These are my internal signals 
    signal ch1_byte_data_sent       : STD_LOGIC_VECTOR(23 downto 0)     := x"000000"; 
    signal ch1_byte_cmd_sent        : STD_LOGIC_VECTOR(23 downto 0)     := x"000000";
    --and a few other signals
begin 
    --functionality 
end Behavioral;

Mi código de 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;

Cuando comience su simulación, su simulador elaborará todos los elementos. Luego, busca los enlaces que ha creado utilizando nombres externos. Me parece que tu camino está equivocado. Edité mi respuesta para dar más detalles sobre la construcción de caminos. Sin conocimiento sobre su diseño, no puedo decir qué hay de malo en su camino.
Thomas S.

Como dije en mi respuesta, debe usar la etiqueta, no el nombre de la entidad. El camino correcto debe ser .tp_spi_dac.uut.ch1_byte_data_sent.
Thomas S.

Sus sugerencias resolvieron mi problema @ThomasS. ¡Muchas gracias! Tuve un problema con la versión de VHDL, que resolví después de ver el video según lo sugerido por David. Sé que escribir notas de agradecimiento no es recomendable, pero gracias Thomas por corregir mi edición (realmente estaba confundido con este formato de descuento).
Suhasini

Respuestas:


11

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

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

También puede acceder a constantes y variables con nombres externos. Sin embargo, debe cambiar el tipo en el tipo externo. Puede usar nombres externos directamente para acceso de lectura / escritura. Sin embargo, debe 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. La ruta puede ser absoluta o relativa. 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 por el nombre de su nivel superior. Para rutas relativas, puede usar ^para subir en la jerarquía. Cuando use constantes / señales de algún paquete, también puede usarlo @para moverse a una biblioteca.

Un ejemplo de 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, 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, puede usar

^.^.constant_name

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

@config.pkg_name.other_constant_name

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

Esta característica 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 usan VHDL-2008 de manera predeterminada, pero proporcionan un argumento de línea de comando u opción de configuración para habilitarlo.


Intenté lo que sugeriste. alias ch1_byte_data_sent es << señal .TB_SPI_DAC.SPI_DAC.ch1_byte_data_sent: STD_LOGIC_VECTOR (23 downto 0) >>: = x "000000"; Cuando hago esto, aparece el error "Identificador de cadena o literal esperado". ¿Alguna idea de por qué me sale el error? (Perdón por cualquier error con la publicación, ¡mi primera vez aquí!)
Suhasini

Mi respuesta podría no ser lo suficientemente clara. Al usarlo alias, debe escribir la tarea en una nueva declaración. La ventaja es que puede usar el nombre de alias en lugar del nombre externo largo.
Thomas S.

1

¿Cómo puedo mostrar las señales internas de mi código fuente VHDL en mi banco de pruebas para poder verlas como formas de onda?

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

Si bien 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 video de compilación y simulación de Aldec (5:02, min: seg).

Y por ahora tengo la impresión de que el video puede causar confusión, tal vez en este caso particular.

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

2:22 hacer archivo

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 variables) que se recopilarán 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 hay alguna herramienta independiente del método para lograr mi objetivo.

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

Ahora, para las malas noticias: no hay estandarización para las características o interfaces del simulador, señales de programación para el volcado de forma de onda, etc. Estas son todas definiciones de implementación.

Está prácticamente garantizado que puede volcar señales en cualquier lugar de una jerarquía de diseño en un visor de forma de onda o en un 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 archivos do, que podría generar mediante programación para la portabilidad, utilizando una base de datos común que describe la verificación funcional en múltiples plataformas de implementación, superando las diferencias en sintaxis y semántica. Probablemente 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 múltiples interfaces gráficas de usuario con gracia.


0

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

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


No deseo interferir con mis puertos de entrada y salida; entonces no puedo declarar ninguna nueva línea de salida. Declaré las señales en mi banco de pruebas pero no puedo ver ninguna salida en la forma de onda (muestra solo mi valor inicializado de cero sin implementar la funcionalidad). ¿Hay alguna otra forma de hacerlo?
Suhasini

0

Si ha declarado las señales en el banco de pruebas pero no puede ver ningún resultado, es posible que tenga un problema en la instrucción de instanciación donde instancia la entidad que se probará. Compruebe si lo ha instanciado correctamente, utilizando una instrucción de instanciación de entidad o 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 testbench para que podamos ayudarlo.


Lo que dijo Thomas aborda mi problema exactamente. Resolví el error que mencioné anteriormente, que surgió debido a que el valor predeterminado se estableció en VHDL 1993 en el Active-HDL provisto con el software de diseño iCEcube2 de Lattice. Ahora me enfrento a un error de elaboración fatal cuando intento inicializar la simulación. Estoy tratando de encontrar por qué ocurre esto, espero que no sea un problema de licencia limitada.
Suhasini

¿Puedes mostrarnos ese mensaje?
Rick
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.