Creación de diseños de hardware a partir de código de software
La síntesis de alto nivel ( HLS ), a veces denominada síntesis C , síntesis a nivel de sistema electrónico (ESL) , síntesis algorítmica o síntesis conductual , es un proceso de diseño automatizado que toma una especificación conductual abstracta de un sistema digital y encuentra una estructura a nivel de transferencia de registro que realiza el comportamiento dado. [1] [2] [3]
La síntesis comienza con una especificación de alto nivel del problema, donde el comportamiento generalmente se desacopla de la mecánica de circuitos de bajo nivel, como la temporización a nivel de reloj . Los primeros HLS exploraron una variedad de lenguajes de especificación de entrada, [4] aunque las investigaciones recientes y las aplicaciones comerciales generalmente aceptan subconjuntos sintetizables de ANSI C / C++ / SystemC / MATLAB . El código se analiza, se restringe arquitectónicamente y se programa para transcompilar desde un modelo de nivel de transacción (TLM) a un diseño de nivel de transferencia de registro (RTL) en un lenguaje de descripción de hardware (HDL), que a su vez se sintetiza comúnmente al nivel de compuerta mediante el uso de una herramienta de síntesis lógica .
El objetivo de HLS es permitir que los diseñadores de hardware construyan y verifiquen hardware de manera eficiente, brindándoles un mejor control sobre la optimización de su arquitectura de diseño y a través de la naturaleza de permitir que el diseñador describa el diseño en un nivel más alto de abstracción mientras la herramienta realiza la implementación RTL. La verificación de RTL es una parte importante del proceso. [5]
El hardware se puede diseñar con distintos niveles de abstracción. Los niveles de abstracción más utilizados son el nivel de compuerta , el nivel de transferencia de registros (RTL) y el nivel algorítmico .
Mientras que la síntesis lógica utiliza una descripción RTL del diseño, la síntesis de alto nivel trabaja en un nivel más alto de abstracción, comenzando con una descripción algorítmica en un lenguaje de alto nivel como SystemC y ANSI C/C++. El diseñador normalmente desarrolla la funcionalidad del módulo y el protocolo de interconexión. Las herramientas de síntesis de alto nivel manejan la microarquitectura y transforman el código funcional no temporizado o parcialmente temporizado en implementaciones RTL completamente temporizadas, creando automáticamente detalles ciclo por ciclo para la implementación de hardware. [6] Las implementaciones (RTL) se utilizan luego directamente en un flujo de síntesis lógica convencional para crear una implementación a nivel de compuerta.
Historia
Los primeros trabajos académicos extrajeron la programación, la asignación y la vinculación como los pasos básicos para la síntesis de alto nivel. La programación divide el algoritmo en pasos de control que se utilizan para definir los estados en la máquina de estados finitos . Cada paso de control contiene una pequeña sección del algoritmo que se puede realizar en un solo ciclo de reloj en el hardware. La asignación y la vinculación asignan las instrucciones y las variables a los componentes del hardware, multiplexores, registros y cables de la ruta de datos.
La síntesis de comportamiento de primera generación fue introducida por Synopsys en 1994 como Behavioral Compiler [7] y utilizaba Verilog o VHDL como lenguajes de entrada. El nivel de abstracción utilizado eran procesos parcialmente temporizados (sincronizados). Las herramientas basadas en Verilog o VHDL conductuales no fueron ampliamente adoptadas en parte porque ni los lenguajes ni la abstracción parcialmente temporizada eran adecuados para modelar el comportamiento a un alto nivel. Diez años después, a principios de 2004, Synopsys dio por finalizado su ciclo de vida con Behavioral Compiler. [8]
En 1998, Forte Design Systems presentó su herramienta Cynthesizer, que utilizaba SystemC como lenguaje de entrada en lugar de Verilog o VHDL. Cynthesizer fue adoptado por muchas empresas japonesas en 2000, ya que Japón tenía una comunidad de usuarios de SystemC muy madura. La primera síntesis de alto nivel se logró en 2001 por Sony utilizando Cynthesizer. La adopción en los Estados Unidos comenzó en serio en 2008. [ cita requerida ]
En 2006, se desarrolló una técnica de "programación de módulo SDC" eficiente y escalable en gráficos de flujo de datos y control [9] y luego se extendió a la programación de tuberías. [10] Esta técnica utiliza la formulación de programación lineal entera. Pero muestra que la matriz de restricciones subyacente es totalmente unimodular (después de aproximar las restricciones de recursos). Por lo tanto, el problema se puede resolver en tiempo polinomial de manera óptima utilizando un solucionador de programación lineal en tiempo polinomial. Este trabajo fue incluido en el Salón de la Fama de FPGA y Computación Reconfigurable 2022. [11]
El algoritmo de programación SDC se implementó en el sistema xPilot HLS [12] desarrollado en UCLA [13] y luego se licenció a AutoESL Design Technologies, una empresa derivada de UCLA. AutoESL fue adquirida por Xilinx (ahora parte de AMD) en 2011 [11] y la herramienta HLS desarrollada por AutoESL se convirtió en la base de las soluciones HLS de Xilinx, Vivado HLS y Vitis HLS, ampliamente utilizadas para diseños de FPGA.
Entrada de fuente
Las fuentes de entrada más comunes para la síntesis de alto nivel se basan en lenguajes estándar como ANSI C / C++ , SystemC y MATLAB .
La síntesis de alto nivel normalmente también incluye una especificación ejecutable con precisión de bits como entrada, ya que para derivar una implementación de hardware eficiente, se necesita información adicional sobre qué es un error cuadrático medio o tasa de error de bits aceptable, etc. Por ejemplo, si el diseñador comienza con un filtro FIR escrito utilizando el tipo flotante "doble", antes de poder derivar una implementación de hardware eficiente, necesita realizar un refinamiento numérico para llegar a una implementación de punto fijo. El refinamiento requiere información adicional sobre el nivel de ruido de cuantificación que se puede tolerar, los rangos de entrada válidos, etc. Esta especificación con precisión de bits hace que la especificación de la fuente de síntesis de alto nivel sea funcionalmente completa. [14]
Normalmente, las herramientas infieren del código de alto nivel una máquina de estados finitos y una ruta de datos que implementan operaciones aritméticas.
Etapas del proceso
El proceso de síntesis de alto nivel consta de una serie de actividades. Varias herramientas de síntesis de alto nivel realizan estas actividades en diferentes órdenes utilizando diferentes algoritmos. Algunas herramientas de síntesis de alto nivel combinan algunas de estas actividades o las realizan de forma iterativa para converger en la solución deseada. [15]
- Procesamiento léxico
- Optimización de algoritmos
- Análisis de control/flujo de datos
- Procesamiento de biblioteca
- Asignación de recursos
- Programación
- Vinculación de unidades funcionales
- Registro vinculante
- Procesamiento de salida
- Reagrupamiento de entrada
Funcionalidad
En general, un algoritmo se puede ejecutar en muchos ciclos de reloj con pocos recursos de hardware, o en menos ciclos de reloj utilizando una mayor cantidad de ALU, registros y memorias. En consecuencia, a partir de una descripción algorítmica, un compilador HLS puede generar una variedad de microarquitecturas de hardware según las directivas dadas a la herramienta. Este es el mismo equilibrio entre velocidad de ejecución y complejidad de hardware que se observa cuando un programa determinado se ejecuta en procesadores convencionales de diferente rendimiento, pero todos funcionando aproximadamente a la misma frecuencia de reloj.
Restricciones arquitectónicas
Las restricciones de síntesis para la arquitectura se pueden aplicar automáticamente en función del análisis de diseño. [5] Estas restricciones se pueden dividir en
- Jerarquía
- Interfaz
- Memoria
- Bucle
- Restricciones de tiempo de bajo nivel
- Iteración
Síntesis de interfaz
La síntesis de interfaz se refiere a la capacidad de aceptar una descripción pura de C/C++ como entrada y luego usar tecnología de síntesis de interfaz automatizada para controlar el protocolo de comunicaciones y tiempo en la interfaz de diseño. Esto permite el análisis de la interfaz y la exploración de una gama completa de opciones de interfaz de hardware, como transmisión, RAM de puerto único o doble, además de varios mecanismos de protocolo de enlace. Con la síntesis de interfaz, el diseñador no incorpora protocolos de interfaz en la descripción de la fuente. Algunos ejemplos pueden ser: conexión directa, una línea, protocolo de enlace de dos líneas, FIFO. [16]
Vendedores
Datos reportados en encuesta reciente [17]
- Dinámica de la EPFL / ETH de Zúrich
- Codificador MATLAB HDL [1] de Mathworks [19]
- HLS-QSP de CircuitSutra Technologies [20]
- C-to-Silicon de Cadence Design Systems
- Aceleración concurrente a partir de EDA concurrente
- Compilador Symphony C de Synopsys
- Juego rápido de PLDA [21]
- PowerOpt de ChipVision [22]
- Cynthesizer de Forte Design Systems (ahora Stratus HLS de Cadence Design Systems )
- Catapult C de Calypto Design Systems, parte de Mentor Graphics a partir de 2015, 16 de septiembre. En noviembre de 2016, Siemens anunció planes para adquirir Mentor Graphics, Mentor Graphics pasó a llamarse "Mentor, una empresa de Siemens". En enero de 2021, se completó la fusión legal de Mentor Graphics con Siemens, fusionándose en la entidad legal Siemens Industry Software Inc. El nombre de Mentor Graphics se cambió a Siemens EDA, una división de Siemens Digital Industries Software . [23]
- TuberíaC [2]
- CyberWorkBench de NEC [24]
- Mega Hardware [25]
- C2R de CebaTech [26]
- Codesarrollador de Impulse Accelerated Technologies
- HercuLeS de Nikolaos Kavvadias [27]
- Programa de entrada/código de salida (PICO) de Synfora, adquirido por Synopsys en junio de 2010 [28]
- xPilot de la Universidad de California, Los Ángeles [29]
- Vsyn de vsyn.ru [30]
- ngDesign de SynFlow [31]
Véase también
Referencias
- ^ Coussy, Philippe; Morawiec, Adam, eds. (2008). Síntesis de alto nivel - Springer . doi :10.1007/978-1-4020-8588-8. ISBN 978-1-4020-8587-1.
- ^ McFarland, MC; Parker, AC; Camposano, R. (febrero de 1990). "La síntesis de alto nivel de sistemas digitales". Actas del IEEE . 78 (2): 301–318. doi :10.1109/5.52214. ISSN 1558-2256.
- ^ "HLS Book: Home". www.hlsbook.com . Consultado el 21 de junio de 2023 .
- ^ Síntesis de alto nivel IEEE Xplore: pasado, presente y futuro DOI 10.1109/MDT.2009.83
- ^ ab Bowyer, Bryan (2005-05-02). "El 'por qué' y el 'qué' de la síntesis algorítmica". EE Times . Consultado el 2016-10-03 .
- ^ "Prototipado rápido basado en C para procesamiento de señales digitales" (PDF) . Universidad UBS, Francia . Consultado el 3 de octubre de 2016 .
- ^ "Publicaciones y presentaciones". Bdti.com . Archivado desde el original el 26 de abril de 2008. Consultado el 3 de octubre de 2016 .
- ^ "Encrucijada de la síntesis conductual". EE Times . Consultado el 3 de octubre de 2016 .
- ^ Cong, Jason; Fan, Yiping; Han, Guoling; Jiang, Wei; Zhang, Zhiru (septiembre de 2006). "Síntesis a nivel de sistema y a nivel de comportamiento basada en plataforma". Conferencia SOC internacional IEEE de 2006. IEEE. págs. 199–202. doi :10.1109/socc.2006.283880. ISBN . 0-7803-9782-7.
- ^ Zhang, Zhiru; Liu, Bin (2013). Conferencia internacional IEEE/ACM de 2013 sobre diseño asistido por computadora (ICCAD) (PDF) . IEEE. págs. 211–218. ISBN. 978-1-4799-1071-7.
- ^ ab Cong, Jason; Bin Liu; Neuendorffer, Stephen; Noguera, Juanjo; Vissers, Kees; Zhiru Zhang (abril de 2011). "Síntesis de alto nivel para FPGAs: desde el prototipado hasta la implementación". IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems . 30 (4): 473–491. doi :10.1109/tcad.2011.2110592. ISSN 0278-0070.
- ^ Cong, J.; Zhiru Zhang (2006). "Un algoritmo de programación eficiente y versátil basado en la formulación SDC". 2006 43rd ACM/IEEE Design Automation Conference . IEEE. págs. 433–438. doi :10.1109/dac.2006.229228. ISBN 1-59593-381-6.
- ^ "xPilot: Sistema de síntesis de comportamiento basado en plataforma | Laboratorio VAST". vast.cs.ucla.edu . Consultado el 18 de abril de 2024 .
- ^ Síntesis de alto nivel de longitud de palabra múltiple Revista EURASIP sobre sistemas integrados
- ^ "Una mirada al interior de la síntesis conductual". EE Times . Consultado el 3 de octubre de 2016 .
- ^ "DesignCon: InfoVault: Paper Library". www.designcon.com . Archivado desde el original el 25 de septiembre de 2010. Consultado el 13 de enero de 2022 .
- ^ Nane, R.; Sima, VM; Pilato, C.; Choi, J.; Fort, B.; Canis, A.; Chen, YT; Hsiao, H.; Brown, S. (2016). "Una encuesta y evaluación de herramientas de síntesis de alto nivel de FPGA" (PDF) . Transacciones IEEE sobre diseño asistido por computadora de circuitos y sistemas integrados . 35 (10): 1591–1604. doi :10.1109/TCAD.2015.2513673. hdl : 11311/998432 . ISSN 0278-0070. S2CID 8749577.
- ^ "Xilinx compra un proveedor de EDA de síntesis de alto nivel". EE Times. 5 de febrero de 2011. Archivado desde el original el 17 de octubre de 2011. Consultado el 3 de octubre de 2016 .
- ^ "MathWorks: creadores de MATLAB y Simulink". Mathworks.com . Consultado el 3 de octubre de 2016 .
- ^ "Metodologías ESL basadas en SystemC - Metodologías ESL basadas en SystemC". Circuitsutra.com . Consultado el 3 de octubre de 2016 .
- ^ John M. en una importante corporación de ERP y DBMS (29 de agosto de 2016). "QuickPlay: acercando la computación FPGA a las masas". Quickplay.io . Consultado el 3 de octubre de 2016 .
- ^ "Chipvision: vía rápida hacia el bajo consumo". www.chipvision.com . Archivado desde el original el 30 de mayo de 2002. Consultado el 13 de enero de 2022 .
- ^ "Mentor finalmente se convierte en Siemens EDA a partir de enero de 2021". 15 de diciembre de 2020.
- ^ "CyberWorkBench: Productos". NEC . Consultado el 3 de octubre de 2016 .
- ^ "Inicio mega-hardware". www.mega-hardware.com . Archivado desde el original el 15 de enero de 2004. Consultado el 13 de enero de 2022 .
- ^ "Cebatech - Inicio". www.cebatech.com . Archivado desde el original el 7 de mayo de 2005 . Consultado el 13 de enero de 2022 .
- ^ "Nikolaos Kavvadias - Herramienta de síntesis de alto nivel HercuLeS". Nkavvadias.com . Consultado el 3 de octubre de 2016 .
- ^ "Synopsys compra activos de Synfora". EE Times. Archivado desde el original el 7 de abril de 2011. Consultado el 3 de octubre de 2016 .
- ^ "El sistema xPilot". Cadlab.cs.ucla.edu . Consultado el 3 de octubre de 2016 .
- ^ "vSyn.ru". vSyn.ru . 16 de junio de 2016. Archivado desde el original el 30 de junio de 2016 . Consultado el 3 de octubre de 2016 .
- ^ "Diseño de hardware para todos". Synflow . Consultado el 3 de octubre de 2016 .
Lectura adicional
- Jason Cong, Jason Lau, Gai Liu, Stephen Neuendorffer, Peichen Pan, Kees Vissers, Zhiru Zhang. FPGA HLS hoy: éxitos, desafíos y oportunidades. ACM Transactions on Reconfigurable Technology and Systems, volumen 15, número 4, artículo n.º 5, págs. 1 a 42, diciembre de 2022, https://doi.org/10.1145/3530775.
- Michael Fingeroff (2010). Libro azul de síntesis de alto nivel . Xlibris [ fuente autoeditada ] Corporation. ISBN 978-1-4500-9724-6.
- Coussy, P.; Gajski, DD; Meredith, M.; Takach, A. (2009). "Introducción a la síntesis de alto nivel". IEEE Design & Test of Computers . 26 (4): 8–17. doi :10.1109/MDT.2009.69. S2CID 52870966.
- Ewout SJ Martens; Georges Gielen (2008). Modelado y síntesis de alto nivel de sistemas integrados analógicos . Springer. ISBN 978-1-4020-6801-0.
- Saraju Mohanty ; N. Ranganathan; E. Kougianos y P. Patra (2008). Síntesis de alto nivel y bajo consumo para circuitos CMOS a escala nanométrica . Springer. ISBN 978-0387764733.
- Alicia C. Parker ; Yosef Tirat-Gefen; Suhrid A. Wadekar (2007). "Diseño a nivel de sistema". En Wai-Kai Chen (ed.). El manual VLSI (2ª ed.). Prensa CRC. ISBN 978-0-8493-4199-1. capítulo 76.
- Shahrzad Mirkhani; Zainalabedin Navabi (2007). "Lenguajes de diseño a nivel de sistema". En Wai-Kai Chen (ed.). El manual VLSI (2ª ed.). Prensa CRC. ISBN 978-0-8493-4199-1. capítulo 86.cubre el uso de C/C++, SystemC, TML e incluso UML
- Liming Xiu (2007). Desmitificación de la metodología de diseño de circuitos VLSI: una taxonomía conceptual . Wiley-IEEE. ISBN 978-0-470-12742-1.
- John P. Elliott (1999). Entender la síntesis conductual: una guía práctica para el diseño de alto nivel . Springer. ISBN 978-0-7923-8542-4.
- Nane, Razvan; Sima, Vlad-Mihai; Pilato, Christian; Choi, Jongsok; Fort, Blair; Canis, Andrew; Chen, Yu Ting; Hsiao, Hsuan; Brown, Stephen; Ferrandi, Fabrizio; Anderson, Jason; Bertels, Koen (2016). "Una encuesta y evaluación de herramientas de síntesis de alto nivel de FPGA". Transacciones IEEE sobre diseño asistido por computadora de circuitos y sistemas integrados . 35 (10): 1591–1604. doi :10.1109/TCAD.2015.2513673. hdl : 11311/998432 . S2CID 8749577.
- Gupta, Rajesh; Brewer, Forrest (2008). "Síntesis de alto nivel: una retrospectiva". "Síntesis de alto nivel: una retrospectiva" . Springer. págs. 13–28. doi :10.1007/978-1-4020-8588-8_2. ISBN 978-1-4020-8587-1.
Enlaces externos
- Curso Vivado HLS en Youtube
- Foro de discusión de Deepchip