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

Estoy trabajando en un equipo que está haciendo software de controladores y desarrollo de FPGA. La simulación de FPGA se realiza 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 instalarlo 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 enviar valores al banco de pruebas y luego observar los resultados. .

El truco que no puedo hacer con la entrada de un archivo de texto es hacer que las dos mitades del producto interactúen. Necesito que el software "escriba" valores en el simulador de FPGA, lea los resultados y luego escriba nuevos valores en el FPGA que dependen de los resultados que lea. 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.

Respuestas (2)

Control externo de una simulación de ModelSim a través de canalizaciones con nombre de 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 Named Pipes ("FIFO"), que aparecen como archivos normales para cada aplicación. La principal diferencia entre el uso de FIFO y los archivos normales para la comunicación entre procesos (IPC) es que una aplicación que intenta escribir en una FIFO se detiene hasta que otra aplicación intenta leer de la FIFO y viceversa. Esto mejora la fiabilidad del IPC. Las principales ventajas de este método son 1) Dado que solo se utilizan operaciones de archivo genéricas, la aplicación externa se puede escribir en casi cualquier lenguaje de programación; 2) Brinda 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 varios dispositivos bajo prueba (DUT) que se comunican entre sí, se puede crear una simulación más precisa del sistema final; y 4) El rendimiento de la simulación general se puede aumentar 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 (E/S) de archivos para VHDL de comportamiento, ModelSim no puede leer ni escribir estos FIFO directamente. Se demuestra una solución para esta limitación utilizando la interfaz de idioma extranjero (FLI) de ModelSim. Este documento también muestra un ejemplo de trabajo de este método que se utiliza en la verificación de la próxima generación de rutinas de punto flotante en VHDL. Específicamente, el paquete de software de código abierto IEEE Compliance Checker, que está escrito en C++,

Y el problema con los FIFO que requieren una interfaz de programación externa 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.

Model Sim® Interfaz de idioma extranjero Versión 5.6d , PDF 3.4 MB.

Uso de la interfaz de idioma extranjero de ModelSim para c: cosimulación de VHDL y para el control del simulador en la plataforma Linux x86 Andre Pool - fli@andrepool.com - Versión 1.5 - creado en noviembre de 2012, última actualización en septiembre de 2013 , PDF, 320 KB (y nunca menciona FIFO) .

Uso de la interfaz de idioma extranjero de ModelSim para la cosimulación de VHDL c y para el control del simulador en la plataforma Linux x86 (el repositorio de código github correspondiente).

Hay un código un poco más abierto, utilizando las llamadas a funciones extranjeras de VHPI 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 fifo.c del 14 de abril de 2014.

FLI, por definición, lo bloquearí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 un 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 Paquetes VHDL de dominio público , que contiene un puntero a un artículo anterior SNUG San Jose 2002 1 Funciones C/UNIX para bancos de prueba VHDL Funciones C/UNIX para bancos de prueba VHDL junto con una diapositiva conjunto con notas adicionales sobre 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 le permita conectarse a una tubería? Probablemente no, más aún bajo Windows. Se puede hacer? Sí, pero el camino no es para los pusilánimes. Puede interbloquear un extremo o el otro o posiblemente ambos esperando la disponibilidad de datos.

Teóricamente, una interfaz de programación externa le permite generar un proceso secundario para uno u otro extremo de la 'tubería', lo que también significa que podría usar un modelo de memoria compartida para comunicarse entre los dos extremos.

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

Es posible que desee ver Cocotb . Es una biblioteca de cosimulación basada en Python, uno de los objetivos de diseño era habilitar la metodología que describe, simulando fácilmente RTL y software de producción sin modificar.

Hay un ejemplo en el repositorio de ejecutar pingun comando sin modificar 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 una biblioteca de simulación que se bloquea mientras realiza el acceso a la simulación. Esto funciona muy bien para la configuración.

  2. Si su software usa E/S mapeadas en memoria y desreferencia punteros para acceder al dispositivo, entonces las cosas se vuelven un poco más complejas: tiene que crear un área de memoria compartida con bits de protección configurados y trampas de acceso .

Si usa redes, 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). Desafortunadamente, Modelsim no implementa VHPI, por lo que, como usuario de VHDL, está atascado con FLI, que no es tan útil como interfaz. Podría quejarse de Mentor para tratar de persuadirlos de que implementen una interfaz estándar de la industria, o podría evaluar otro simulador que admita VHPI.

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

Descargo de responsabilidad: soy un desarrollador de Cocotb.