Necesito urgentemente una explicación detallada y un análisis del núcleo IP en FPGA, ¡¡¡gracias!!!
1 Clasificación y características de los núcleos
Los núcleos son módulos funcionales complejos predefinidos y probados que se pueden integrar en diseños basados en núcleos. Las características principales son reutilizar los módulos de diseño existentes, acortar el tiempo de diseño, minimizar los riesgos de diseño y mejorar el rendimiento general del sistema a través de una integración avanzada. Hay tres tipos de núcleos en el diseño de FPGA, como se muestra en la Tabla 1:
. Tabla 1 Clasificación y características del núcleo
Núcleo duro
(hard core)
Se han dispuesto los módulos predefinidos y no se puede modificar el diseño durante el cableado , se debe adoptar la tecnología de implementación especificada para garantizar el rendimiento del tiempo.
Núcleo firme
(núcleo firme) El código fuente HDL y el diseño del núcleo no se pueden modificar, y se debe adoptar la tecnología de implementación especificada para garantizar el rendimiento del tiempo.
(Núcleo sólido) Código fuente HDL) Código fuente HDL, algunas funciones de la lista de redes relacionadas con la tecnología de implementación se pueden modificar y el tiempo de la ruta crítica se puede controlar utilizando el especificado. tecnología de implementación
Software
(núcleo blando)
El diseño del código fuente HDL a nivel de comportamiento o RTL se puede modificar y el rendimiento del tiempo no se puede garantizar independientemente de la tecnología de implementación , y lo decide el usuario
Los núcleos duros están optimizados para una tecnología de implementación específica
El hardware es un sistema optimizado para una tecnología de implementación específica Un núcleo duro optimizado para una tecnología de implementación específica. tiene una estructura y un diseño no modificables y está disponible como componente de biblioteca. El rendimiento de sincronización es estable, pero el núcleo duro no se puede modificar ni ajustar de acuerdo con la sincronización del diseño. El núcleo sólido está compuesto por código fuente HDL y listas de redes relacionadas con la tecnología de implementación. Los usuarios pueden agregar o eliminar algunas funciones según sea necesario. El tiempo de la ruta crítica del núcleo sólido es fijo, pero su tecnología de implementación no se puede cambiar, es decir, los FPGA producidos por diferentes fabricantes no se pueden usar indistintamente con núcleos sólidos.
El núcleo blando es un código fuente de lenguaje de descripción de hardware (HDL) sintetizable. No tiene nada que ver con la tecnología de implementación y se puede modificar según las necesidades del usuario. Tiene la mayor flexibilidad, pero el rendimiento de sincronización de la ruta crítica del núcleo blando. no está garantizado el rendimiento final está determinado principalmente por las técnicas de síntesis, ubicación y ruta y de implementación adoptadas 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 es completamente independiente de la tecnología de implementación del hardware, es muy limitado, mientras que el núcleo duro Carece de flexibilidad de uso, por lo que se utilizan más comúnmente los núcleos de estado sólido, un compromiso entre núcleos blandos y núcleos duros. Las anteriores son clasificaciones de kernel representativas. En aplicaciones prácticas, los kernels con ciertas funciones a menudo vienen en varias formas, y los usuarios pueden elegir según sus necesidades. Los kernels blandos incluyen no solo el código fuente HDL, sino también modelos de comportamiento y vectores de prueba para pruebas funcionales. , un documento de restricciones utilizado para guiar la síntesis.
2 métodos de diseño de FPGA basados en núcleos
En el diseño basado en núcleos, un diseño completo consta principalmente de dos partes, una parte es el núcleo, como la MCU y la RAM en la Figura 1. , la otra parte es el circuito lógico definido por el usuario. De acuerdo con los requisitos del diseño del sistema, estos módulos funcionales deben conectarse entre sí para completar el diseño del chip. Actualmente no existe un estándar unificado para el método de conexión de cada núcleo o módulo funcional. Según los diferentes diseños, generalmente se deben cumplir ciertos requisitos de sincronización. . Como primer paso en el diseño básico del kernel, es elegir el kernel apropiado, lo que depende principalmente de la función, el rendimiento y la confiabilidad del kernel, así como de la tecnología de implementación.
Figura 1: Diagrama esquemático del chip de diseño basado en núcleo
Un núcleo debe tener primero una descripción funcional del núcleo, que se utiliza para explicar las funciones del núcleo, los requisitos de tiempo, etc. ., como se muestra en la Figura 2, y luego también debe incluir archivos de diseño tanto para la implementación como para la verificación del diseño, es decir, no solo el código fuente del nivel de transferencia de registros (RTL) o netlist que implementa la función principal, sino también el modelo de simulación y Pruebas utilizadas para verificar la corrección de las funciones lógicas implementadas por el núcleo. Esto significa no solo el código fuente o netlist del nivel de transferencia de registro (RTL) que implementa las funciones principales, sino también los modelos de simulación y los vectores de prueba utilizados para verificar las funciones lógicas después de implementar el núcleo. 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 complicado. El rendimiento después de la implementación está relacionado con el método de implementación específico del usuario. Se utiliza para guiar la síntesis de núcleos blandos y el uso de núcleos sólidos se encuentra en algún punto intermedio entre los dos anteriores.
Figura 2: El kernel consta de la implementación y verificación del diseño. Muchos proveedores de kernel proporcionan entornos de evaluación del kernel, así como placas de demostración y desarrollo para facilitar que los usuarios comprendan las funciones y el uso del kernel.
El proceso de diseño de FPGA basado en núcleos se muestra en la Figura 3. La entrada de diseño incluye:
1) Entrada de la lógica de diseño del usuario, modelo de simulación de núcleo blando, núcleo sólido o núcleo duro
2) Simulación funcional
3; ) síntesis lógica. El modelo de simulación es un modelo a nivel de comportamiento y solo se utiliza para simulación funcional y no para síntesis.
Figura 3 Proceso de diseño de FPGA basado en kernel
La entrada del diseño generalmente utiliza 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. Una vez completada la simulación funcional, se puede sintetizar el circuito lógico.
Se deben agregar restricciones de tiempo razonables a la síntesis de la lógica del usuario y el núcleo blando para cumplir con los requisitos de diseño. Las restricciones pueden venir dadas por el archivo de síntesis (Synthesis Script). Después de completar la entrada del diseño, ingrese a la etapa de implementación del diseño. En esta etapa, la lista de redes central fija y el archivo de restricciones de diseño, la lista de redes completa del usuario y el archivo de restricciones de diseño se ingresan en la herramienta de enrutamiento y ubicación de la FPGA para completar la implementación final de la FPGA y. generar el archivo de sincronización para su uso para la simulación de sincronización y la verificación funcional. Finalmente, al ingresar a la etapa de verificación del diseño, 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 cumple con los requisitos, debe descubrir la ruta crítica que afecta el rendimiento, devolver información de retraso, modificar el archivo de restricciones, resintetizar el diseño, el lugar y la ruta, 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 repetidos intentos, es necesario modificar el diseño o utilizar otras técnicas de implementación.
3 Diseño y uso de núcleos blandos
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 resulta en una baja tasa de utilización del núcleo blando. Los recursos, la baja velocidad y otras deficiencias se pueden compensar, y los núcleos blandos juegan un papel cada vez más importante en el diseño. Su principal ventaja es que sus funciones son independientes de la tecnología de implementación y su uso es flexible. Por lo tanto, podemos utilizar fácilmente núcleos blandos en diferentes tecnologías de implementación. Por ejemplo, un núcleo blando implementado en XIL INX FPGA se puede implementar en ACTEL FPGA después de la resíntesis sin cambiar el diseño, lo que mejora en gran medida la flexibilidad de la implementación del diseño. 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 que los núcleos blandos alcancen un rendimiento ideal es actualmente un problema 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. Esperan controlar parcialmente el rendimiento de los núcleos blandos imponiendo algunas restricciones del código fuente HDL en la preparación de núcleos blandos y combinándolos. con las limitaciones de tiempo de las herramientas de síntesis. Por ejemplo, los núcleos blandos están restringidos únicamente a diseños de lógica estrictamente síncrona y no pueden usar bucles de retroalimentación, múltiples rutas de reloj, lógica de tres estados, pestillos y flip-flops de reinicio asíncrono. Solo pueden usar indicadores D y puertas lógicas. De esta manera, con la ayuda de herramientas de síntesis, 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 se produce a expensas de ciertos recursos lógicos de FPGA, pero con el desarrollo de la tecnología de silicio, los recursos de hardware se han vuelto muy abundantes. Vale la pena intercambiar un cierto desperdicio de recursos de hardware para mejorar la flexibilidad del diseño, como en. PC En el diseño de software, pocas personas ahora prestan demasiada atención al espacio de almacenamiento que ocupa el programa.
El autor de este artículo sigue las ideas de diseño de núcleo blando anteriores, adopta un diseño lógico totalmente síncrono y solo utiliza flip-flops D y puertas lógicas para realizar el diseño de un microcontrolador de 8 bits compatible con PIC16C57. Su estructura de nivel superior se muestra en la Figura 4. Adopta la estructura de Harvard. La búsqueda de instrucciones y la ejecución de instrucciones funcionan en paralelo, excepto algunas instrucciones de salto del programa, todas las instrucciones 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. Los registros de instrucciones y los registros de funciones especiales, incluidos los registros de puertos IO, registros de estado, contadores de programas, etc., se componen de flip-flops tipo D. Los registros de uso general utilizan módulos RAM FPGA y unidades lógicas aritméticas. puertas lógicas.