De C a Silicon: ¿Cómo implementar una solución de software / firmware como hardware?

13

A la luz de esta pregunta, me preguntaba si había un proceso bastante estándar para convertir una solución de software en una implementación de hardware. Perdóname a mí y a mi imaginación, pero ¿habría un compilador que pudiera tomar un programa en C y compilarlo en términos de un esquema de transistores, resistencias, etc. o tal vez incluso PCB conocidos?

Me doy cuenta de que podría estar mirando este escenario desde una perspectiva incorrecta. Históricamente, según mi propia experiencia, normalmente tiene algún hardware que alguien ha implementado como una solución de software (piense en la emulación de hardware). ¿Existe este concepto a la inversa? ¿Cómo lo hacen estas grandes empresas, como el enrutamiento IP de software frente a hardware?

Chad Harrison
fuente
Consulte también "¿por qué no puedo hacer que mi programa C singleheatheaded sea multiproceso automáticamente?"
pjc50
@ pjc50: ¿Dónde puedo ver "¿por qué no puedo hacer que mi programa C single -headed sea multiproceso automáticamente?" ?
davidcary 01 de
No tengo un ejemplo específico en mente, pero es una pregunta que he visto antes. También está relacionado en que el hardware es intrínsecamente paralelo, mientras que el software es "naturalmente" secuencial en términos de la forma en que las personas piensan y escriben programas.
pjc50

Respuestas:

11

No, no existe una solución estándar para convertir el software en hardware. En términos generales, tomar software que no fue escrito con una implementación de hardware en mente no se puede convertir fácilmente en hardware sin grandes pérdidas e ineficiencias. Por lo general, lo mejor que puede hacer es crear un chip que tenga una CPU y una ROM, y colocar el software en la ROM.

A lo largo de los años ha habido compiladores que tomarían el código "C-Like" y lo compilarían en hardware, de la misma manera que VHDL o Verilog se pueden compilar en hardware. Pero la clave es que es "C-Like" y no C. Todavía no puede tomar, por ejemplo, un programa C / C ++ que calcule PI y lo convierta mágicamente en hardware que calcule PI. La mayoría de estos lenguajes C-Line han desaparecido o no se usan en ningún número. Una de las versiones más populares de esto es SystemC , pero es importante tener en cuenta que no es C / C ++ y no es útil para el software genérico "vamos a escribir y luego lo compilamos en hardware". Aún necesita "escribir algo de hardware, que también podría compilarse en software".

Los conmutadores y enrutadores suelen tener hardware que realiza la mayoría de las funciones de enrutador críticas y de uso común (buscar cosas en las tablas de enrutamiento, administrar colas, etc.) en hardware y luego usar una CPU para realizar todas las funciones no tan comunes (manejo de excepciones, errores, actualizaciones de la tabla de enrutamiento, etc.). En muchos sentidos, esto es similar al funcionamiento de la CPU moderna, donde los códigos de operación más comunes se realizan en hardware y, en ocasiones, algunos códigos de operación se implementan realmente en software (por ejemplo, instrucciones de coma flotante cuando una FPU no está presente).


fuente
SystemC no solo es C ++ real, es solo una biblioteca C ++. Puede usar cualquier código C ++ ordinario que desee con SystemC. Dicho esto, SystemC no tiene mucho que ver con la generación automática de hardware. Está más orientado a simular sistemas, lo que ayuda a tomar decisiones arquitectónicas y permite que los equipos de software comiencen antes de que el hardware esté disponible.
Theran
Esto realmente me ayuda a entender por qué hay hardware específico que realiza tareas específicas.
Chad Harrison
Hay muchos otros compiladores de C a HDL que fueron diseñados para este propósito.
Anderson Green el
5

Lo más parecido sería el compilador C-to-Hardware (C2H) de Altera . Puede hacer algo de lo que estás sugiriendo. Pero hay advertencias desafiantes. No puede convertir cualquier código C en hardware, ni tampoco desearía hacerlo. Pero las funciones específicas funcionan bastante bien y puede ver un aumento dramático en el rendimiento.

Por lo general, implementaría un procesador softcore NIOS II en un FPGA Altera. Luego escribiría un código ANSI C como lo haría con cualquier otro procesador. Luego, supongamos que una de las funciones de C que ha escrito implica algunas matemáticas pesadas que se beneficiarían en términos de rendimiento de alguna ejecución paralela. Invoca el compilador C2H, dice "Implementar en hardware" y esencialmente convierte esa función en un periférico del procesador softcore NIOS II.

Aquí hay un ejemplo de codificación de un cálculo de Mandelbrot en ANSI C y luego implementarlo en hardware:

El algoritmo de Mandelbrot acelerado por el compilador C2H da como resultado una mejora de velocidad de al menos 60x en comparación con el mismo algoritmo que se ejecuta en el procesador Nios II más rápido que utiliza el nivel de optimización del compilador 2 (-O2). Este aumento de velocidad se debe al paralelismo y las velocidades de iteración rápidas que puede proporcionar el hardware, que no son posibles desde una unidad de procesamiento de propósito general.

Volviendo a su ejemplo, el procesador NIOS II puede ejecutar Linux. Y ciertas funciones que serían necesarias para realizar tareas de enrutamiento podrían beneficiarse de la aceleración de hardware. Lo más probable es que funcione mejor que un enrutador de software puro. Pero nunca se acercará al rendimiento de los ASIC dedicados especialmente diseñados.

Embedded.kyle
fuente
1
Xilinx tiene una herramienta comparable llamada Vivado HLS (síntesis de alto nivel), anteriormente conocida como AutoESL. Se aplican advertencias similares: hace un buen trabajo al convertir código a RTL si es el tipo de código que es fácil de convertir automáticamente a RTL.
Theran
@ Theran No sabía que Xilinx tenía un producto de la competencia. Tendré que comprobar eso. ¡Gracias!
embedded.kyle
2

Usted menciona "C a silicio" en su título y menciona productos de nivel de tablero en el cuerpo. Solo me enfocaré en la parte de esa ecuación que sí existe -> flujos de diseño "C a silicio". C en sí mismo no es un ajuste natural para la descripción del hardware, ya que carece de algún soporte fundamental para el paralelismo inherente del hardware, la necesidad de prevenir las condiciones de carrera y otros problemas, y no es notablemente expresivo para poder representar estos conceptos. O no tanto como Verilog y VHDL.

El código C que es sintetizable (es decir, se puede representar en una descripción de hardware) y aquí hardware = lógica digital, no ganaría ningún concurso de codificación juzgado por los desarrolladores de software.

Aquí hay una lista de algunos proveedores notables que suministran herramientas C -> Silicon para la multitud de flujo ASIC.

  • Forte Cynthesizer

  • Catapulta de mentor

  • BlueSpec C

  • Sinopsis de Synopsys (ex Synfora)

  • Cadencia C-a-Silicio

marcador de posición
fuente
1

Convertir el software en hardware no es una tarea completamente trivial si espera un hardware razonable. El hardware tiende a necesitar más arquitectura para administrar cuidadosamente el uso de recursos que se relaciona con el área / costo. Dicho esto, hay una serie de herramientas que toman C de alguna forma, le permiten agregar información específica de hardware (por ejemplo, ¿cuál es la interfaz de hardware?) Y generar hardware optimizado. Los usuarios expertos pueden obtener mejores resultados en menos tiempo que el RTL codificado a mano.

Brett Cline
fuente