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?
Respuestas:
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
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:
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.
fuente
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
fuente
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.
fuente