FPGAs en C con Cynth

author
1 minute, 5 seconds Read

La programación de un FPGA con Verilog se ve una gran oferta como la programación. Sin embargo, no lo es, al menos no en el sentido convencional. Ha habido una serie de sistemas que objetivos tomaran el código C, así como convertirlo en un idioma de descripción de hardware. Uno de estos, Cynth, es fácil de utilizar, así como ofrecido en GitHub. Usted requerirá configurar Scala, así como un sistema de desarrollo llamado SBT, si desea probarlo.

Hay limitaciones, por supuesto. Si quieres un preprocesador, tendrás que ejecutarlo por separado. No puede utilizar variables mundiales, multiplicación, flotadores, así como numerosas otras piezas de C. El compilador produce datos de Verilog para cada función C.

Un programa C convencional ejecuta una cosa cada vez que utilice métodos especiales en un multiprocesador. Incluso entonces, hay algún límite útil para las numerosas CPU, probablemente controlará. Un FPGA, por otro lado, le permite ejecutar cosas que suceden en paralelo. Por ejemplo, piensa en esto:

Mientras (1)
{
OUT1 = CTR1 ++;
OUT2 = CTR2 ++;
}
El valor OUT1 va a modificar un poco antes del valor en Out2. Si tuviera muchos de estos, indique tanto como OUT999, la demora podría ser significativa. El código de verilog equivalente puede parecerse a:

siempre @ (PosEge Clk)
empezar
OUT1 <= CTR1; CTR1 <= CTR1 + 1; OUT2 <= CTR2; CTR2 <= CTR2 + 1; final Esto parece prácticamente lo mismo, sin embargo, las salidas se modificarán a la misma hora, sin importar exactamente cuán numerosas hay. Lo que es mucho más es que todas las otras cosas que no puede ver también ocurran en el mismo tiempo. Al igual que un hardware, así como la entrada, no "escanea" sus entradas, un FPGA procesa todas sus entradas, así como produce salidas. En la situación de Cynth, cada función C produce un módulo de verilog que tiene los mismos argumentos exactamente que la función junto con un desacuerdo más para pararse para el valor de retorno, en su caso. Asimismo, se iniciarán las entradas para el reloj del sistema, una señal de reinicio, así como tres señales administrativas. Una es una entrada que permite el procesamiento. Hay dos salidas. Uno indica que se ofrece la función para permitir, así como una indicación más que hay un resultado disponible. El ejemplo ofrecido con el código es un patrón de ojo de cilón que impulsa cuatro LED. Hay dos funciones externas que se producen con verilog pura. La función WRITED_LEDS conduce los LED, así como una función de suspensión, crea un retraso. El código C es una función simple llamada ROING: Mientras (1) { if (dir && c == 8) dir = 0; de lo contrario si (! Dir && C == 1) dir = 1; if (dir) C << = 1; demás C >> = 1;

write_leds (c);

Dormir (1000); // 1s
}
Los datos de verilog correspondientes realizan exactamente la misma función que puede confirmar el uso de un emulador de verilog.

Si desea profundizar en el código producido, puede descubrir mucho más sobre Verilog con algunos proyectos. Si C no es lo tuyo, siempre puedes probar Python.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *