¿Se puede conectar un banco de pruebas de Modelsim con un estímulo externo?

10

Estoy trabajando en un equipo que está haciendo tanto el software del controlador como el desarrollo de FPGA. La simulación de FPGA se está realizando en Modelsim y el software del controlador está escrito en C. Para minimizar el riesgo de integración, me encantaría poder modelar la interacción entre las dos mitades de nuestro producto antes de ponerlo en el hardware.

Sé que Modelsim admite un banco de pruebas que le permite proporcionar estímulos en forma de un archivo de texto con tiempos y valores para ingresar. Me pregunto si Modelsim tiene un modo que le permite conectar una tubería a una aplicación externa (como nuestro controlador) y ejecutar una especie de simulación distribuida donde el software puede insertar valores en el banco de pruebas, luego observar los resultados más tarde .

El truco que no puedo hacer con una entrada de archivo de texto es hacer que las dos mitades del producto interactúen. Necesito que el software "escriba" valores en el simulador FPGA, lea los resultados y luego escriba nuevos valores en el FPGA que dependen de los resultados que lee. Los archivos de texto requieren que las entradas sean independientes de la salida.

He realizado búsquedas tanto en StackExchange como en google, pero no he podido encontrar un conjunto de palabras clave para limitar mi búsqueda lo suficiente como para identificar el comportamiento que estoy buscando o determinar que no existe.

Cort Ammon
fuente

Respuestas:

9

Control externo de una simulación ModelSim a través de tuberías con nombre Unix

Resumen: En esta tesis, presentamos un método para controlar una simulación ModelSim a través de un programa externo. La comunicación entre ModelSim y el programa externo se logra mediante el uso de canalizaciones con nombre ("FIFOs"), que aparecen como archivos normales para cada aplicación. La principal diferencia entre el uso de FIFO frente a archivos normales para la comunicación entre procesos (IPC) es que una aplicación que intenta escribir en un FIFO está en pausa hasta que otra aplicación intente leer desde el FIFO y viceversa. Esto mejora la confiabilidad del IPC. Las principales ventajas de este método son 1) Dado que solo se utilizan operaciones genéricas de archivos, la aplicación externa se puede escribir en casi cualquier lenguaje de programación; 2) Le da al ingeniero de verificación la capacidad de reutilizar paquetes de software de validación de estándares con una reescritura mínima; 3) Al tener múltiples dispositivos bajo prueba (DUT) comunicarse entre sí, se puede crear una simulación más precisa del sistema final; y 4) El rendimiento de la simulación general puede aumentarse fácilmente en un clúster de imagen de sistema único (SSI) o en una computadora multiprocesador, aunque el motor de simulación de ModelSim no sea multiproceso. Debido a su implementación de entrada / salida de archivo (E / S) para VHDL de comportamiento, ModelSim no puede leer o escribir estos FIFO directamente. Una solución para esta limitación se demuestra utilizando la interfaz de idioma extranjero (FLI) de ModelSim. Este documento también muestra un ejemplo de trabajo de este método utilizado en la verificación de la próxima generación de rutinas de punto flotante en VHDL. Específicamente, el paquete de software IEEE Compliance Checker de código abierto, que está escrito en C ++,

Y el problema con los FIFO que requieren una interfaz de programación extranjera es que la E / S de archivos VHDL no puede manejar correctamente el bloqueo hasta que los datos estén disponibles.

Lamentablemente, la tesis no está disponible en la web.

Modelo Sim® Interfaz de idioma extranjero versión 5.6d , PDF 3.4 MB.

Uso de la interfaz de idioma extranjero de ModelSim para c - Simulación simultánea de VHDL y para control de simulador en la plataforma Linux x86 Andre Pool - [email protected] - Versión 1.5 - creado en noviembre de 2012, última actualización en septiembre de 2013 , PDF, 320 KB (y nunca menciona FIFOs) .

Uso de la interfaz de lenguaje extranjero ModelSim para c-VHDL Co-Simulation y para Simulator Control en la plataforma Linux x86 (el repositorio de código github correspondiente).

Hay un poco más de código abierto, utilizando las llamadas de función VHPI Foreign en ghdl: vhdl / src / sim / ghdlex_mein en master · texane / vhdl · GitHub .

Y lo que parece una actualización de Martin Strubel en la lista GHDL_discuss: http://www.section5.ch/downloads/ghdlex-0.051.tgz que muestra una fecha para el 15 de abril de 2014.

FLI, por definición, lo encerraría en Modelsim, sin estar seguro del estado de su soporte VHPI (que es parte de IEEE Std 1076-2008, el VHDL LRM).

El uso de un socket o archivo FIFO permite que el proceso de software y hardware se ejecute a diferentes velocidades, al proporcionar almacenamiento en búfer de velocidad. No siempre es necesario si su sistema de software es mucho más rápido que la simulación de hardware (y generalmente lo es).

Hay un esfuerzo por proporcionar la funcionalidad UNIX (POSIX) a VHDL, consulte los paquetes de dominio público VHDL , que contiene un puntero a un documento anterior SNUG San Jose 2002 1 Funciones C / UNIX para bancos de pruebas VHDL Funciones C / UNIX para bancos de pruebas VHDL junto con una diapositiva conjunto con notas adicionales en tuberías Unix y rsh . Esto muestra cómo mantener abiertas las canalizaciones con nombre. Todo el código VHDL también se puede descargar. Soy de la opinión de que esto conduciría a la forma más fácil de lograr su objetivo.

Entonces, ¿hay algo nativo de Modelsim que te permita conectarlo a una tubería? Probablemente no, más aún en Windows. Se puede hacer? Sí, pero el camino no es para los débiles de corazón. Puede bloquear un extremo u otro o posiblemente ambos esperando la disponibilidad de datos.

Una interfaz de programación externa teóricamente te permite generar un proceso hijo para uno u otro extremo de la 'tubería', lo que también significa que puedes usar un modelo de memoria compartida para comunicarte entre los dos extremos.

usuario8352
fuente
¡Gracias por la respuesta maravillosamente investigada! "Interfaz de idioma extranjero" era exactamente la frase que necesitaba para obtener la documentación de referencia que necesitaba, ¡nunca lo habría adivinado! Integración temprana aquí vengo!
Cort Ammon
5

Es posible que desee mirar Cocotb . Es una biblioteca de co-simulación basada en Python, uno de los objetivos de diseño era habilitar la metodología que describe, simulando fácilmente software de producción y RTL no modificados.

Hay un ejemplo en el repositorio de ejecutar pingcomandos no modificados contra una simulación y un tutorial que recorre el código.

Para controladores de espacio de usuario, utilidades de configuración, etc., tiene un par de opciones para ejecutar su software sin modificar :

  1. Si sus accesos al dispositivo se reducen a unas pocas funciones (por ejemplo, una llamada de lectura y escritura), puede vincular contra una biblioteca de simulación que se bloquea mientras realiza el acceso contra la simulación. Esto funciona muy bien para la configuración.

  2. Si su software usa IO mapeado en memoria y punteros de desreferencia para acceder al dispositivo, entonces las cosas se vuelven un poco más complejas: debe crear un área de memoria compartida con bits de protección establecidos y accesos de trampa .

Si usa redes, entonces se pueden usar interfaces virtuales como TUN / TAP (consulte el tutorial mencionado anteriormente), sospecho que puede haber opciones similares para la transferencia USB u otras interfaces de host comunes.

Cocotb funciona con una variedad de simuladores y diseños VHDL (a través de VHPI) o Verilog / SystemVerilog (a través de VPI). Lamentablemente, Modelsim no implementa VHPI, por lo que, como usuario de VHDL, está atascado con FLI, que no es tan útil como una interfaz. Puede gemir en Mentor para tratar de persuadirlos de implementar una interfaz estándar de la industria, o puede evaluar otro simulador que admita VHPI.

Lamentablemente, parece que los vendedores de herramientas en general no están particularmente interesados ​​en el mercado de VHDL, a juzgar por el tiempo que les lleva implementar cualquier funcionalidad relacionada con VHDL ...

Descargo de responsabilidad: soy un desarrollador de Cocotb.

Chiggs
fuente