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

13

En vista 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óneme a mí y a mi imaginación, pero ¿habría un compilador que pudiera tomar un programa de C y compilarlo en términos de un esquema de transistores, resistencias, etc. o incluso PCB conocidos?

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

    
pregunta Chad Harrison

4 respuestas

11

No, no existe una solución estándar para convertir software en hardware. En general, tomar software que no fue escrito teniendo en cuenta una implementación de hardware no se puede convertir fácilmente en hardware sin grandes desperdicios e ineficiencias. Por lo general, lo mejor que puede hacer es hacer 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 calcula PI y lo convierte mágicamente en hardware que calcula PI. La mayoría de estos idiomas de C-Line han desaparecido o no se utilizan 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 es no es útil para el genérico "escribamos software y luego compilémoslo en hardware". Aún necesita "escribir algún hardware, que también podría compilarse en el software".

Los conmutadores y enrutadores suelen tener hardware que hace la mayoría de las funciones de enrutador más comunes y rápidas (buscar cosas en tablas de enrutamiento, administrar colas, etc.) en hardware y luego usar una CPU para hacer todo lo que no. - Funciones comunes (manejo de excepciones, errores, actualizaciones de la tabla de enrutamiento, etc.). En muchos aspectos, esto es similar a cómo funcionan las CPU modernas, 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 en el software (por ejemplo, instrucciones de punto flotante cuando no hay una FPU).

    
respondido por el user3624
5

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

Normalmente, implementaría un procesador de softcore NIOS II en un FPGA de Altera. Luego, escribiría algún código ANSI C para él como lo haría con cualquier otro procesador. Luego, diga que una de las funciones C que ha escrito tiene que ver con un cálculo matemático pesado que se beneficiaría en términos de rendimiento de alguna ejecución paralela. Usted invoca el compilador C2H, dice "Implementar en hardware" y esencialmente convierte esa función en un periférico del procesador de softcore NIOS II.

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

  

El algoritmo Mandelbrot acelerado por compilador C2H da como resultado una velocidad   mejora 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 2 de optimización del compilador.   (-O2). Este incremento de velocidad se debe al paralelismo y rapidez.   velocidades de iteración que el hardware puede proporcionar, que no son posibles   de 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 se desempeñe mejor que un enrutador de software puro. Pero nunca abordará el rendimiento de los ASIC dedicados especialmente diseñados.

    
respondido por el embedded.kyle
2

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

El código C que se puede sintetizar (es decir, se puede representar a 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 C - > Herramientas de silicio para el flujo de ASIC.

  • strong Cynthesizer

  • Mentor Catapult

  • BlueSpec C

  • Synopsys Synphony (ex Synfora)

  • Cadence C-to-Silicon

respondido por el placeholder
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 con cuidado 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 del hardware (por ejemplo, ¿cuál es la interfaz del hardware?) Y generar hardware optimizado. Los usuarios competentes pueden obtener fácilmente mejores resultados en menos tiempo que los RTL codificados a mano.

    
respondido por el Brett Cline

Lea otras preguntas en las etiquetas