microcontroller - español - Microcontrolador+simulador Verilog/VHDL?
verilog tutorial (6)
Mis compañeros del departamento de hardware usan software de simulación FPGA con bastante frecuencia para encontrar errores de tiempo y rastrear comportamientos extraños.
La simulación de uno o dos milisegundos puede tomar varias horas, por lo que no es posible utilizar el simulador para nada más que para cosas muy pequeñas.
Es posible que desee echarle un vistazo a SystemC sin embargo. http://en.wikipedia.org/wiki/SystemC
A lo largo de los años he trabajado en varios proyectos basados en microcontroladores; mayormente con los PIC de Microchip. He usado varios simuladores de microcontroladores, y si bien pueden ser muy útiles a veces, a menudo me siento frustrado. En la vida real, los microcontroladores nunca existen solos y el comportamiento del firmware depende del entorno. Sin embargo, ninguno de los sims que he usado proporciona un soporte decente para nada fuera del microcontrolador.
Mi primer pensamiento fue modelar todo el tablero en Verilog. Pero preferiría no crear un modelo completo de CPU, y no he tenido mucha suerte en encontrar modelos existentes para los chips que uso. A pesar de todo, realmente no necesito, o quiero, simular el proceso en ese nivel de detalle, y me gustaría conservar las facilidades de depuración proporcionadas por un simulador de procesador regular.
Me parece que la solución ideal sería un simulador híbrido que interconecta un simulador de procesador tradicional con un modelo Verilog.
¿Existe tal cosa?
Para el enfoque de "simular todo el tablero", The Free Model Foundry tiene una gran cantidad de modelos, algunos en VHDL, otros en Verilog, que están disponibles ahora ... pero deberá pagar para que se creen nuevos modelos. Estos son muy útiles para asegurarse de que la placa esté construida correctamente.
Pero creo que el enfoque más común al depurar su PIC es simplemente construir una placa y luego trabajar en el firmware. En el mundo de los chips, (donde el firmware se ejecuta en un microprocesador en un chip que todavía no se ha convertido en fabuloso) las personas recurren a sistemas muy caros (o alquilan tiempo) que permiten compilar parte del diseño en un emulador. mientras que el resto del diseño se ejecuta en el entorno normal del simulador. Sin la barrera de una máscara costosa establecida para el chip, el costo no es justificable para una placa de circuito. Aunque he oído hablar de algunas aplicaciones creativas de Simulink (Mathworks) con FPGA, pero mi recuerdo es que uno ejecutó el sistema en la computadora, o programó el dispositivo y ejecutó la misma cosa en tiempo real.
Creo que tanto Cadence (pregunte por Palladium) como Mentor Graphics tienen esa solución integrada si tiene el dinero para gastar en ella.
He usado el procesador Altera Nios II integrado en un FPGA. Altera proporciona una cadena de herramientas para simular la CPU (con su software) junto con su lógica personalizada en un simulador. Supongo que se puede lograr una configuración similar descargando un núcleo VHDL / Verilog de tu CPU (¿Has probado los códigos abiertos? Tienen muchas cosas allí).
Pero tenga en cuenta que va a ser alucinantemente lento, así que no espere simular procesos complejos completos de esta manera. Lo mejor que puede esperar es simular puntos de interacción entre software y hardware para solucionar problemas. Si necesita una simulación más profunda, considere ejecutarla en un FPGA con código de monitoreo incorporado.
No es que lo haya visto Su mejor opción es definir correctamente las interfaces y el comportamiento entre el uC y FPGA y luego definir una serie de formas de onda de prueba que se pueden aplicar utilizando un probador automático. Debería hacer que el probador automático (o tal vez un analizador lógico pueda tener alguna de esas funciones) fuera de un FPGA o uC (aplicar forma de onda, ver interrupciones, puntos de interrupción, etc.). Si realmente quieres, sé que Opencores.org tiene PIC y núcleos uC de 8 bits tipo AVR definidos como VHDL, por lo que podrías implementar todo tu proyecto en el FPGA y luego simplemente depurarlo.
En general, no es necesario modelar la CPU en el nivel RTL. Ya que realmente no te importa lo que hace poco a poco; generalmente le importa lo que hace, por ejemplo, valores de registro, recuerdos y acceso al bus.
El más simple es llamar al Bus Functional Model. Esto solo genera la lectura y escritura que hace la CPU, a menudo en base a un archivo de texto. Estos están disponibles para algunas CPU y muchos buses populares (por ejemplo, PCI, PCIe). Este simula súper rápido.
El siguiente paso es un modelo funcional de ciclo preciso. Aquellos simulan rápido. A menudo están encriptados.
El último es un modelo completo de RTL. Por lo general, solo están disponibles si está trabajando en estrecha colaboración con el proveedor de la CPU, por ejemplo, utilizando su núcleo en su ASIC. Por lo general, estos están encriptados, a menos que sea una gran compañía.
Los modelos de memoria son típicamente de ciclo preciso (por ejemplo, Micron).
Lo que he hecho recientemente es crear una interfaz entre el entorno de simulación y el sistema host. Los diferentes simuladores hdl tienen diferentes interfaces, y al hacer que el simulador NO piense en modo batch, el modelo de simulación tradicional, en lugar de ejecutarse para siempre como un diseño real, es la mitad del problema.
Luego, desde el host que usa C (o lo que sea), puede crear abstracciones que pueden o no permitirle escribir el software de su aplicación para cualquier objetivo (dependiendo del idioma y las capacidades del compilador que tenga). Por ejemplo, puede hacer una función genérica de asomarse y mirar, y en el objetivo final tener memoria y E / S, pero para la simulación a través de la abstracción puede hablar con un banco de pruebas en la simulación que simula el mismo ciclo de memoria.
Fui un paso más allá y utilicé conectores (Berkeley) entre el servidor y el banco de pruebas para que la simulación pueda seguir ejecutándose mientras las aplicaciones host se detienen y comienzan. A diferencia de tener un procesador real con un sistema operativo que está iniciando aplicaciones y ejecutarlas hasta su finalización y comenzar otra. Al menos para aplicaciones de prueba, para la entrega probablemente solo tengas una aplicación.
Al crear estas capas de abstracción, puedo escribir aplicaciones reales que se usarán en el objetivo cuando se construya. En el camino, puede usar la simulación de software de la lógica inicialmente; luego, si le gusta construir un fpga con una interfaz de abstracción (throw away logic), diga un uart por ejemplo. Reemplace la cuña entre la capa de abstracción de aplicaciones y el simulador con una interfaz uart, o lo que sea. Luego, cuando se case el procesador y la lógica en el mismo chip o en el mismo tablero, reemplace la capa de abstracción de nuevo con llamadas directas a las interfaces que siempre han estado hablando. Si algo se rompe y ha conservado la capa de abstracción, puede llevar la aplicación al modelo de simulación y tener acceso a todas sus partes internas lógicas.
Específicamente, esta vez estoy usando un cdl de hdl language cyclicity que está en sourceforge, la documentación necesita ayuda pero los ejemplos pueden ayudarte, y produce verilog sintetizable, por lo que obtienes una ganancia extra allí. Lancé todas las cosas del lote de secuencias de comandos aparte del mínimo necesario para conectar e iniciar un modelo de simulación C. Así que mi banco de pruebas está en C (técnicamente bien C ++) la capa de sockets se hizo allí. El resultado puede ser archivos .vcd que usa gtkwave. Básicamente puede hacer la mayor parte de su diseño HDL utilizando software de código abierto sin licencias, etc. Al agregar una o dos líneas de código a la parte de simulación CDL, pude hacer que funcionara como un bucle infinito, lo que puedo decir que funciona bastante bien, no parece haber pérdidas de memoria, etc.
Tanto modelim como cadencia tienen formas estandarizadas de conectar programas de host C al mundo de simulación y desde allí puede usar un IPC para llegar a las aplicaciones host que hablan con una API de capa de abstracción.
esto es probablemente demasiado para una foto, ya hace tiempo que renuncié a las fotos para micros más rápidos y amigables con C arm. Hubo / hubo una foto de núcleo abierto que simplemente pudiste incorporar a tu simulación, aunque eso no es lo que intentas hacer aquí.