Fundamentos de HDL y Arquitecturas de Lógica Programable: VHDL, Verilog y FPGAs
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 205,2 KB
1. Historia de los Lenguajes de Descripción de Hardware (HDL)
| Década | Hito clave |
|---|---|
| 1947 | Transistor BJT (Bell Labs) — Inicio de la electrónica de estado sólido. |
| 1959 | Transistor MOS — Base de la integración a gran escala. |
| 1960s | Circuitos integrados, diseño con esquemas eléctricos y primeras herramientas CAD. |
| 1970s | Primeros microprocesadores (Intel 4004, 8080). |
| 1983 | Creación de VHDL (Departamento de Defensa de EE.UU.) y aparición de Verilog (comercial). |
| 1990s | Estandarización IEEE: VHDL = IEEE 1076, Verilog = IEEE 1364. Popularización de las FPGAs. |
| 2000s | SystemVerilog y el auge de los SoC (System on Chip). |
| 2010s | SoC-FPGA, HDL en automatización, comunicaciones y robótica. |
| 2020s | IoT, IA, edge computing y flujos HLS (High-Level Synthesis). |
Comparativa: VHDL vs. Verilog vs. SystemVerilog
| Característica | VHDL | Verilog | SystemVerilog |
|---|---|---|---|
| Tipado | Fuerte | Débil | Extensión de Verilog |
| Sintaxis | Rigurosa | Compacta, parecida a C | Orientada a objetos |
| Uso típico | Alta confiabilidad, academia | Industria, síntesis y verificación | Bancos de pruebas, verificación de ICs complejos |
| Significado de siglas | VHSIC Hardware Description Language (VHSIC = Very High Speed Integrated Circuit) | — | — |
Bloques Combinacionales: Definiciones Clave
| Bloque | Definición corta |
|---|---|
| Codificador | Acepta un nivel activo en UNA de sus 2n entradas y lo convierte en una salida codificada de n bits. |
| Codificador con prioridad | Si más de una entrada está activa a la vez, produce la salida de la entrada de mayor prioridad. |
| Decodificador | n bits de entrada codificados en binario → 2n salidas; correspondencia directa entrada-salida. |
| Comparador | Compara dos palabras binarias e indica si son iguales, mayor o menor. |
| Medio sumador (Half-adder) | Suma 2 bits sueltos, produce un bit de suma y un bit de acarreo. |
| Sumador completo (Full-adder) | Suma 3 entradas (incluyendo un acarreo de entrada); se construye conceptualmente con dos medios sumadores. |
| Sumador con acarreo serie | Los acarreos se propagan uno tras otro (más lento). |
| Sumador con acarreo paralelo (Carry Lookahead) | Calcula los acarreos por adelantado (más rápido). |
| ALU | Realiza varias operaciones aritmético-lógicas según un selector de operación. |
| Circuito de paridad | n compuertas XOR detectan la paridad de n+1 entradas. |
| Multiplexor (MUX) | Conecta UNA de sus 2n entradas a la salida, seleccionada por n líneas de selección. |
| Demultiplexor | Lo contrario del MUX: una única entrada se dirige hacia UNA de varias salidas posibles. |
Asignaciones en Verilog: Bloqueantes vs. No Bloqueantes
| Característica | Bloqueante (=) | No bloqueante (<=) |
|---|---|---|
| ¿Cuándo se ejecuta? | Inmediato, en orden (como en un lenguaje de programación convencional). | Se agenda; todas las asignaciones de ese bloque se actualizan al final del ciclo, "al mismo tiempo". |
| ¿Dónde se usa? | Lógica combinacional. | Lógica secuencial. |
| Qué modela | Un cálculo directo, paso a paso. | El comportamiento real de un flip-flop (todos los registros cambian juntos en el flanco de reloj). |
Reglas de Sensibilidad en el Bloque always
| Forma | Detecta | Uso típico |
|---|---|---|
Sensible a flanco de subida (posedge) | Cambio de 0 a 1 en la señal de reloj. | Flip-flops, contadores, registros. |
Sensible a flanco de bajada (negedge) | Cambio de 1 a 0 en la señal de reloj. | FF activados en flanco negativo. |
| Sensibilidad a señales por nivel (forma antigua) | Se ejecuta cuando cambia cualquiera de las señales listadas. | Lógica combinacional (forma antigua, propensa a errores). |
Sensibilidad automática (always @*) | Cambio en cualquier señal usada dentro del bloque. | Recomendado para combinacional: evita olvidar señales y generar memoria accidental (latches). |
| Combinación mixta | Flanco de reloj O flanco de reset. | Muy común en flip-flops con reset asíncrono. |
Dispositivos de Lógica Programable (PLD) — SPLDs
Definición general: Un circuito integrado cuya función lógica NO está fija de fábrica; se puede configurar y modificar mediante programación para construir la lógica digital deseada.
Estructura general de un SPLD: N líneas de entrada → Arreglo AND → P líneas de producto (product-terms) → Arreglo OR → M líneas de salida.
| Dispositivo | Arreglo AND | Arreglo OR |
|---|---|---|
| PROM (Programmable Read-Only Memory) | Fijo (predefinido de fábrica) | Programable |
| PAL (Programmable Array Logic) | Programable | Fijo |
| PLA (Programmable Logic Array) | Programable | Programable |
| GAL (Generic Array Logic) | Programable (tecnología más moderna que PAL) | Fija, con configuración programable de entradas/salidas. |
CPLD (Complex Programmable Logic Device)
- Se puede ver como una evolución del PAL: contiene múltiples estructuras PAL llamadas macroceldas.
- En el encapsulado CPLD, todos los pines de entrada están disponibles para cada macrocelda, mientras que cada una tiene un pin de salida dedicado.
- GIM (Matriz de Interconexión Global): Al reconfigurar la GIM, se pueden implementar diferentes circuitos lógicos.
- En esencia: múltiples SPLDs (o grupos de bloques lógicos programables) contenidos dentro de un solo chip.
FPGA (Field-Programmable Gate Array)
- Dispositivo semiconductor clasificado dentro de los FPL (Field Programmable Logic), pero es un dispositivo lógico programable complejo, muy flexible y potente.
- Se basa en una matriz de CLBs (Configurable Logic Blocks); en terminología de Altera/Intel se les llama ALM.
- Su arquitectura de "campo abierto" permite reconfigurar los transistores internos según el requerimiento del usuario.
- Dependiendo del fabricante, puede incluir componentes integrados adicionales: multiplicadores, bloques DSP y bloques RAM.
Componentes Internos de la FPGA
- LUT (Look-Up Table): Compuesta principalmente por multiplexores conectados entre sí. Los selectores funcionan como entradas de la LUT, y la tabla de verdad se obtiene de la memoria de la FPGA. Esto le permite implementar cualquier tabla de verdad posible.
- BLE (Elemento Lógico Básico): Formado por una LUT, un flip-flop tipo D y un multiplexor. Permite implementar tanto lógica combinacional como secuencial.
- CLB: Contiene un grupo de BLEs conectados mediante una red de interconexión interna. Incluye bloques diseñados para memorias, multiplicadores o DSPs, siendo muy eficientes en tareas específicas.
Comparativa Final: CPLD vs. FPGA
| Característica | CPLD | FPGA |
|---|---|---|
| Flexibilidad | Baja | Alta |
| Precio | Bajo | Alto |
| Seguridad | Alta | Baja |
| Velocidad | Alta | Alta |
| Capacidad | Limitada | Alta |
| Aplicación | Tareas simples | Diseños complejos |
| Consumo energético | Más bajo | Más alto |
Bloques de Entrada/Salida (I/O Blocks)
Permiten la interacción con el mundo exterior para enviar y recibir información de dispositivos externos. Generalmente se componen de registros y buffers. Suelen incluir líneas de salida, entrada y de tres estados (alta impedancia), y pueden configurarse como unidireccionales o bidireccionales. Además, incorporan protección contra sobrevoltaje o sobrecorriente.