Hola amigos y amigas.
Quiero empezar a escribir sobre mis primeros pasos en la odisea de aprender a trabajar con las FPGA y en general con dispositivos lógicos programables.
1. Por que es importante trabajar con Dispositivos Lógicos Programables?Actualmente, los avances tecnológicos en semiconductores y por ende de los dispositivos programables son impresionantes. La gran competencia entre diferentes marcas de fabricantes de Microcontroladores por sacar al mercado dispositivos más potentes, con más periféricos, con menos consumo de energía, y cada vez más pequeños, son una muestra de ello. El nacimiento de los microcontroladores permitió una de las revoluciones tecnológicas más grandes de todos los tiempos. Sus bajos costos, altas prestaciones y gran flexibilidad los hacen los dispositivos por excelencia en muchos de los productos electrónicos que hay actualmente en el mercado. Pero por mas potentes que sean los microcontroladores actuales, por mas veloces que los fabriquen, siempre hay una limitación.
Los Microcontroladores (MCUs), al igual que los procesadores digitales de señales (DSPs) y los controladores digitales de señales (DSCs). Son circuitos integrados diseñados para interpretar y ejecutar un programa de forma secuencial. El procesador lee y ejecuta una por una las instrucciones programadas por el usuario y toma decisiones de forma secuencial dependiendo de la respuesta del circuito que lo acompañe externamente. El gran problema llega cuando se necesitan ejecutar dos o más instrucciones al mismo tiempo, cuando se necesitan leer 2 o mas señales al mismo tiempo, cuando se quieren obtener varias señales muy importantes en el mismo instante de tiempo. Esto se denomina “Paralelismo” o capacidad de realizar tares en forma paralela. Es en este preciso instante que el diseñador electrónico debe tomar una decisión y abandonar la idea de seguir trabajando con MCUs, y/o DSPs, y/o DSCs. Los dispositivos Lógicos Programables, solucionan este gran problema.
2. Diferencia entre los MCUs, DSPs, DSCs y los PLDs.En los Dispositivos Lógicos Programables (PLDs), no se programa el comportamiento del chip creando un “Software” para que sea ejecutado de forma secuencial. Acá se programa es el comportamiento del “Hardware” para que responda de forma instantánea según las entradas programadas.
Para entenderlo mejor podemos ver este ejemplo:
Si usáramos un PIC para que lo que entre por un PIN salga por otro pero negado, seria necesario hacer esto:
Repetir:
Btfss porta,0
Goto Sacar0
Sacar1:
Bsf porta,1
Goto repetir
Sacar0:
Bcf porta,1
Goto repetir
Vemos que el MCU en este caso un PIC, debe primero preguntar por el estado de un PIN (pin_a0), luego según el valor leído decide si salta o no para colocar un 1 o un 0 a la salida (pin_a1), luego salta atrás para repetir este proceso. Si habláramos en tiempo necesitado para realizar esta tarea, serian más de 6 ciclos de instrucción que se convierten en 6x4 ciclos de reloj. Así tengamos un PIC corriendo a 12MIPS (Con cristal de 48MHz), existirá un instante de tiempo en el que el procesador estará ejecutando lo de abajo (Sacando un 1 o un 0) o saltando para regresar y no podrá ver si existió un cambio a la entrada. Ahora imaginemos un proceso mucho mas largo después de leer la entrada…
Ahora bien, en un dispositivo lógico programable (PLD) como se haría este proceso:
No hay retardo alguno, es hardware realizando esta tarea, no hay que leer instrucción alguna, no hay pérdida de tiempo. Bueno el único tiempo es el que nunca se podrá evitar y es el del cambio de estado a la salida.
Con lo anterior podríamos decir que cuando programamos un PLD no programamos Software sino Hardware, es por esto que los lenguajes para programar estos dispositivos se les llaman lenguajes de descripción de hardware.
Una Petición:Este Subforo, no debería llamarse VHDL (Lenguaje para Descripción), ya que VHDL hace referencia un lenguaje específico para programar los PLDs. También existe Verilog y otra forma de programar que es descripción grafica.
Debería llamarse Dispositivos Lógicos Programables (PLDs y FPGAs).
Tampoco creo que deba estar entre Entornos de Programación para PC, ya que no es un PC al que se programa.