El código fuente central más difícil
GA) y el dispositivo lógico programable complejo (CPLD) son ambos un tipo de ASIC. Su ventaja es que el ingeniero de diseño puede programar in situ el chip FPGA o CPLD proporcionado por el fabricante para completar el diseño final del ASIC sin costosos costos de NRE. En la actualidad, la escala de FPGA ha alcanzado el millón de puertas. Por ejemplo, Xilinx-p.htm " target = " _ Blank " title = " Xilinx source and PDF materials " > La serie V irtex de Xilinx puede implementar completamente un sistema en-. chip, y su método de diseño pasará gradualmente al diseño basado en núcleos
1 Clasificación y características de los núcleos
Un núcleo es un módulo funcional complejo, probado y predefinido que se puede integrar. en un diseño de sistema basado en núcleos. La característica principal del diseño es reutilizar los módulos de diseño existentes, acortar el tiempo de diseño y reducir los riesgos de diseño. Hay tres núcleos en el diseño de FPGA:
Tabla 1 Clasificación del núcleo y. Características
Hardcore
(Hardcore)
Los módulos predefinidos con ubicación y enrutamiento no pueden modificar el diseño, el tiempo El rendimiento debe estar garantizado por la tecnología de implementación especificada.
p>
Núcleo sólido
(núcleo firme) El código fuente HDL puede modificar algunas funciones de netlist relacionadas con la tecnología de implementación y utilizar la implementación especificada. La tecnología puede controlar el tiempo de la ruta crítica
. Software
(Soft Core)
El código fuente HDL de nivel RTL o de comportamiento se puede modificar y diseñar independientemente de la tecnología de implementación específica. Sin embargo, el rendimiento del tiempo depende del usuario. el usuario decide.
El núcleo duro tiene una estructura y un diseño inmutables y se puede utilizar como una biblioteca con un rendimiento de sincronización estable. Sin embargo, el núcleo duro no puede modificar ni ajustar la sincronización de acuerdo con los requisitos de diseño. El núcleo sólido se compone de código fuente HDL y listas de redes relacionadas con la tecnología de implementación. El usuario puede agregar o eliminar algunas funciones de acuerdo con las regulaciones, pero el tiempo de ruta crítica del núcleo sólido es fijo. Los núcleos FPGA de diferentes fabricantes no se pueden usar indistintamente. El núcleo blando es el código fuente del lenguaje de descripción de hardware (HDL) que se puede sintetizar y modificar según las necesidades del usuario. Tiene la mayor flexibilidad de uso. El rendimiento del tiempo de ruta crítica del núcleo blando no está garantizado. El rendimiento final depende principalmente de la tecnología de integración, diseño e implementación adoptada por el usuario.
En el diseño de FPGA, debido a las grandes diferencias en las tecnologías de implementación específicas de diferentes fabricantes, el rendimiento del núcleo blando, que no tiene nada que ver con la tecnología de implementación del hardware, es muy limitado, mientras que el núcleo duro El núcleo carece de flexibilidad en su uso, por lo que es más La mayoría de ellos se utilizan como un compromiso entre el núcleo blando y el duro. Lo anterior es la clasificación de núcleos representativos. En el uso real, el núcleo de una determinada función a menudo aparece en varias formas y los usuarios pueden elegir según sus necesidades. El núcleo blando no solo tiene código fuente HDL, sino que también incluye modelos de comportamiento y vectores de prueba para pruebas funcionales, que se utilizan para guiar la síntesis de archivos de restricciones.
Introducción al método de diseño FPGA de doble núcleo
En el diseño basado en núcleos, un diseño completo consta principalmente de dos partes. Una es el núcleo, como la MCU y la RAM en la Figura. 1; Es un circuito lógico definido por el usuario. Según los requisitos del diseño del sistema, estos módulos funcionales se conectan entre sí para completar el diseño del chip. Actualmente no existe un estándar unificado para la conexión de cada núcleo o bloque funcional. Debido a los diferentes diseños, se deben cumplir ciertos requisitos de sincronización. Como primer paso en el diseño basado en núcleos, se debe seleccionar un núcleo adecuado, principalmente en aspectos como funciones centrales, confiabilidad del rendimiento y tecnología de implementación.
Figura 1 Esquema del chip de diseño basado en el núcleo
El núcleo primero debe tener un archivo de descripción funcional para explicar las funciones del núcleo y los requisitos de sincronización, como se muestra en la Figura 2. En segundo lugar, debe incluir dos documentos: implementación del diseño y verificación del diseño, es decir, no solo el código fuente RTL o netlist para implementar las funciones principales, sino también el modelo de simulación y los vectores de prueba para verificar la exactitud de las funciones lógicas después de la implementación principal. . La implementación del núcleo duro es relativamente simple, similar al uso de chips IC en el diseño de PCB, mientras que el uso del núcleo blando es más complejo y el rendimiento después de la implementación está relacionado con el método de implementación específico del usuario. Para garantizar el rendimiento de los núcleos blandos, los proveedores de núcleos blandos generalmente proporcionan archivos de descripción completos para guiar la síntesis de los núcleos blandos, mientras que el uso de núcleos reales se encuentra en algún punto intermedio entre los dos anteriores.
El núcleo de la Figura 2 consiste en la implementación y verificación del diseño. Muchos proveedores principales proporcionan entornos de evaluación, demostraciones y placas de desarrollo para el núcleo para facilitar que los usuarios comprendan la funcionalidad y el uso del núcleo.
El proceso de diseño de FPGA basado en núcleos se muestra en la Figura 3. La parte de entrada del diseño incluye:
1) Entrada de lógica diseñada por el usuario, modelo de simulación de núcleo blando, núcleo real o núcleo duro,
2) Simulación funcional,
3) Síntesis lógica. El modelo de simulación es un modelo de comportamiento que solo se utiliza para simulación funcional sin síntesis.
Figura 3 Proceso de diseño de FPGA basado en kernel
La entrada de diseño suele ser lenguaje HDL, como VHDL, Verilog, etc. Después de ingresar el modelo de diseño y simulación, se puede realizar la simulación funcional. Cuando se completa la simulación funcional, se puede sintetizar el circuito lógico.
La síntesis de la lógica del usuario y los núcleos blandos debe estar sujeta a restricciones de tiempo razonables para cumplir con los requisitos de diseño. Las restricciones pueden venir dadas por un script de síntesis. Una vez completada la entrada del diseño, se ingresa a la fase de implementación del diseño, en la que se fijan los archivos de lista de red y restricciones de diseño. Los archivos de lista de red y restricciones de diseño sintetizados por el usuario se ingresan en la herramienta de enrutamiento y ubicación de FPGA para completar la implementación final. FPGA y generar archivos de sincronización para simulación de sincronización y verificación de funciones. Finalmente, se ingresa a la fase de verificación del diseño, donde se utiliza el análisis de sincronización estática para determinar si el diseño cumple con los requisitos de desempeño, y los resultados de la simulación funcional se comparan con los resultados de la simulación de sincronización para verificar si la sincronización y las funciones del diseño son correctas. Si el rendimiento del diseño no puede cumplir con los requisitos, es necesario descubrir la ruta crítica que afecta el rendimiento, devolver información de retraso, modificar el archivo de restricciones, volver a sintetizar y diseñar el diseño, y repetir esto muchas veces hasta que el diseño Se cumplen los requisitos. Si los requisitos de diseño aún no se cumplen después de múltiples iteraciones, es necesario modificar el diseño o utilizar otras técnicas de implementación.
3 Diseño y uso de núcleo blando
Debido al rápido desarrollo de la tecnología de hardware FPGA, los recursos de hardware son cada vez más abundantes y rápidos, lo que compensa la baja tasa de utilización. De los recursos de núcleo blando, las deficiencias de la velocidad de trabajo lenta, los núcleos blandos desempeñan un papel cada vez más importante en los diseños basados en núcleos. Su principal ventaja es que sus funciones son independientes de la tecnología de implementación y su uso es flexible. De esta manera, podemos utilizar fácilmente núcleos blandos bajo diferentes tecnologías de implementación.
Por ejemplo, el núcleo blando implementado con X LINX FPGA se puede implementar con ACTEL FPGA sin cambiar el diseño, lo que mejora en gran medida la flexibilidad de diseño e implementación. Sin embargo, el rendimiento de los núcleos blandos todavía se ve muy afectado por la tecnología de implementación. Cómo garantizar el rendimiento esperado de los núcleos blandos es un problema urgente que debe resolverse. En los últimos años, países extranjeros han propuesto la idea de núcleos blandos sintetizables que no tienen nada que ver con la tecnología de implementación. Se espera que a través de algunas restricciones en la compilación del código fuente HDL de núcleos blandos, combinadas con la función de restricción de tiempo de las herramientas de síntesis, Se puede lograr el propósito de controlar parcialmente el rendimiento de los núcleos blandos. Por ejemplo, los núcleos blandos solo pueden usar un diseño de lógica síncrona estricta, sin bucles de retroalimentación, múltiples rutas de reloj, lógica de tres estados, pestillos y flip-flops de reinicio de conjunto asíncrono, y solo usan flip-flops D y puertas lógicas. De esta manera, con la ayuda de herramientas integrales, se puede controlar eficazmente el retraso de la ruta crítica del núcleo blando y se puede predecir el rendimiento del núcleo blando en tecnologías de implementación específicas. Por supuesto, esto es a expensas de algunos recursos lógicos de FPGA, pero con el desarrollo de la tecnología de silicio, los recursos de hardware se han vuelto muy abundantes y vale la pena desperdiciar algunos recursos de hardware a cambio de una mayor flexibilidad de diseño, al igual que en el software de PC. diseño, pocas personas prestan demasiada atención al espacio de almacenamiento que ocupa el programa.
Basándose en las ideas de diseño de núcleo blando anteriores, el autor adopta un diseño lógico totalmente síncrono y solo utiliza flip-flops D y puertas lógicas para implementar el diseño de un microcontrolador de 8 bits compatible con PIC16C57. La estructura de nivel superior se muestra en la Figura 4, utilizando la estructura de Harvard. La búsqueda de instrucciones y la ejecución de instrucciones funcionan en paralelo, excepto algunas instrucciones de salto de programa, todas las demás son instrucciones de ciclo de reloj único. La memoria del programa ROM generalmente se coloca fuera de la FPGA. Si hay pocas instrucciones en la ROM, también se puede colocar en la FPGA. El bus de datos adopta la forma de un multiplexor para adaptarse a diferentes tecnologías de implementación. Registros de instrucciones y registros de funciones especiales, incluidos registros de puertos IO, registros de estado, contadores de programas, etc. , están compuestos por chanclas D. El registro general utiliza el módulo RAM de la FPGA, y las unidades de lógica aritmética y decodificación de instrucciones se componen de puertas lógicas combinacionales.