El título del post podría resumir mi proyecto fin de carrera, aunque para ser fiel a la realidad tendría que decir que las FPGA's ganan por goleada a los microprocesadores.
Vamos al tema: ¿cuáles son las diferencias más relevantes? Para analizarlas necesitamos estudiar brevemente las dos opciones.
Un microprocesador se compone básicamente de una unidad aritmeticologica (ALU, para realizar operaciones), un contador de programa (CP, para realizar ordenadamente las operaciones), una serie de registros (para almacenar resultados y operandos) y un bus de acceso a memoria (el programa que se ejecuta reside en memoria). Su funcionamiento es muy sencillo: el contador de programa apunta a una direccion de memoria de la cual se extrae el contenido y se almacena en uno de los registros. La "palabra" extraída de la memoria suele dividirse en 3 partes: Instrucción o comando, y dos operandos. Estos datos se transmiten a la ALU, que realiza el calculo y pone en su salida el resultado. Una vez se ha realizado la operación, el contador de programa se incrementa y se ejecuta la siguiente instrucción, y así sucesivamente. Hacer un programa con instrucciones inteligibles directamente por el procesador es "programar a bajo nivel", y el lenguaje se llama "ensamblador", siendo único el ensamblador de cada procesador.
Una FPGA es una matriz de lo que se llama "celdas lógicas" (LC). Estas celdas lógicas se componen de una serie de puertas lógicas y multiplexores (interruptores) cuyas interconexiones pueden ser programas mediante un simple pc y el software adecuado (el que te da el fabricante cuando compras la FPGA). A la funcionalidad de las LC's se añade la colocación de bloques de memoria y registros para almacenar datos de entrada, intermedios y de salida. Este tipo de arquitectura proporciona una versatilidad a las FPGA's casi infinita, y lo que es mejor, con un consumo de recursos mínimos.
Aquí va un ejemplo para hacer gráficas las diferencias. Para implementar, por ejemplo, un contador, se necesitarían unicamente unas pocas LC's (según el valor máximo del contador), incrementando su valor en una unidad por ciclo de reloj, y dejando el resto de la FPGA libre para cualquier otro uso, mientras en el procesador, si implementamos el contador con un bucle, en cada iteración se pierden los ciclos propios de la suma y los de la comprobación de la condición de iteración, todo ello sin dejar recursos libres en el sistema. Este es uno de los ejemplos más claros para observar las ventajas del empleo de FPGA's frente al de los microprocesadores, aunque no todo son ventajas, porque realizar un contador en cualquier lenguaje de programación con un bucle está al alcance de cualquier persona, sin embargo implementarlo en un lenguaje de descripción como puede ser VHDL no es trivial, y extrapolando a proyectos más complejos, como por ejemplo un algoritmo criptográfico (mi trabajo), la diferencia de tiempo de desarrollo es abismal, pudiendo desarrollar la versión software (microprocesador) en unas horas, y la versión hardware (FPGA) en varios días.
Como conclusión se puede sacar que las FPGA's son mucho más potentes que los microprocesadores, pero que el tiempo de desarrollo de un proyecto en una u otra plataforma puede ser determinante a la hora de decantarse por el microprocesador.
Vamos al tema: ¿cuáles son las diferencias más relevantes? Para analizarlas necesitamos estudiar brevemente las dos opciones.
Un microprocesador se compone básicamente de una unidad aritmeticologica (ALU, para realizar operaciones), un contador de programa (CP, para realizar ordenadamente las operaciones), una serie de registros (para almacenar resultados y operandos) y un bus de acceso a memoria (el programa que se ejecuta reside en memoria). Su funcionamiento es muy sencillo: el contador de programa apunta a una direccion de memoria de la cual se extrae el contenido y se almacena en uno de los registros. La "palabra" extraída de la memoria suele dividirse en 3 partes: Instrucción o comando, y dos operandos. Estos datos se transmiten a la ALU, que realiza el calculo y pone en su salida el resultado. Una vez se ha realizado la operación, el contador de programa se incrementa y se ejecuta la siguiente instrucción, y así sucesivamente. Hacer un programa con instrucciones inteligibles directamente por el procesador es "programar a bajo nivel", y el lenguaje se llama "ensamblador", siendo único el ensamblador de cada procesador.
Una FPGA es una matriz de lo que se llama "celdas lógicas" (LC). Estas celdas lógicas se componen de una serie de puertas lógicas y multiplexores (interruptores) cuyas interconexiones pueden ser programas mediante un simple pc y el software adecuado (el que te da el fabricante cuando compras la FPGA). A la funcionalidad de las LC's se añade la colocación de bloques de memoria y registros para almacenar datos de entrada, intermedios y de salida. Este tipo de arquitectura proporciona una versatilidad a las FPGA's casi infinita, y lo que es mejor, con un consumo de recursos mínimos.
Aquí va un ejemplo para hacer gráficas las diferencias. Para implementar, por ejemplo, un contador, se necesitarían unicamente unas pocas LC's (según el valor máximo del contador), incrementando su valor en una unidad por ciclo de reloj, y dejando el resto de la FPGA libre para cualquier otro uso, mientras en el procesador, si implementamos el contador con un bucle, en cada iteración se pierden los ciclos propios de la suma y los de la comprobación de la condición de iteración, todo ello sin dejar recursos libres en el sistema. Este es uno de los ejemplos más claros para observar las ventajas del empleo de FPGA's frente al de los microprocesadores, aunque no todo son ventajas, porque realizar un contador en cualquier lenguaje de programación con un bucle está al alcance de cualquier persona, sin embargo implementarlo en un lenguaje de descripción como puede ser VHDL no es trivial, y extrapolando a proyectos más complejos, como por ejemplo un algoritmo criptográfico (mi trabajo), la diferencia de tiempo de desarrollo es abismal, pudiendo desarrollar la versión software (microprocesador) en unas horas, y la versión hardware (FPGA) en varios días.
Como conclusión se puede sacar que las FPGA's son mucho más potentes que los microprocesadores, pero que el tiempo de desarrollo de un proyecto en una u otra plataforma puede ser determinante a la hora de decantarse por el microprocesador.
2 comentario(s):
menuda caca mi primer comentario!
bueno, a pesar de lo denso que me ha quedado espero que más o menos os enteréis!!
¿Una caca de post?, pero que dices compañero, es uno de los más potentes de este Blog.
Es muy interesante que hables de un tema diferente. Espero que no te detengas en este post y que sigas compartiendo tu sabiduría.
Publicar un comentario en la entrada