Dominando std_logic de VHDL: Estados, resolución y análisis de forma de onda
En VHDL, el tipo std_logic es la piedra angular para representar un solo bit en un cable físico. A diferencia del tipo simple integer usado en tutoriales anteriores, std_logic ofrece un conjunto más rico de valores que modelan el comportamiento real de señales digitales con mayor precisión.
Mientras que un pin digital usualmente lleva un logic high ('1') o un logic low ('0'), una señal física también puede aparecer en estados de alta impedancia, débiles o indefinidos. El tipo std_logic captura todas estas posibilidades, convirtiéndolo en el tipo más empleado en diseño VHDL.
Este artículo es parte de la serie Tutoriales Básicos de VHDL.
A continuación se muestra la lista completa de valores que una señal std_logic puede asumir:
| '1' | Logic 1 |
| '0' | Logic 0 |
| 'Z' | Alta impedancia |
| 'W' | Señal débil; 0 o 1 indeterminado |
| 'L' | 0 débil (pull-down) |
| 'H' | 1 débil (pull-up) |
| '-' | No importa (don't care) |
| 'U' | No inicializado |
| 'X' | Desconocido (múltiples controladores) |
En la mayoría de los tutoriales nos centraremos en los valores primarios '1' y '0', y ocasionalmente 'U' y 'X' para resaltar errores de diseño. Los estados restantes son características avanzadas útiles para modelar protocolos como I2C o crear buses tri-state.
Cuando varios procesos conducen la misma señal std_logic, el lenguaje emplea una función de resolución para determinar el valor resultante. Este mecanismo previene errores en tiempo de compilación o ejecución en simulaciones y está definido por una tabla de resolución, como se muestra a continuación.
| U | X | 0 | 1 | Z | W | L | H | - | |
|---|---|---|---|---|---|---|---|---|---|
| U | X | X | 1 | 1 | 1 | 1 | 1 | X | 1 |
| U | X | 0 | X | 0 | 0 | 0 | 0 | X | 0 |
| U | U | U | U | U | U | U | U | U | U |
| U | X | X | X | X | X | X | X | X | X |
| U | X | 0 | 1 | Z | W | L | H | X | Z |
| U | X | 0 | 1 | W | W | W | W | X | W |
| U | X | 0 | 1 | L | W | L | W | X | L |
| U | X | 0 | 1 | H | W | W | H | X | H |
| U | X | X | X | X | X | X | X | X | - |
Ejercicio
Este tutorial en video demuestra cómo declarar señales std_logic y visualizarlas en una simulación de forma de onda.
El código VHDL final producido en este ejercicio se muestra a continuación:
library ieee;
use ieee.std_logic_1164.all;
entity T10_StdLogicTb is
end entity;
architecture sim of T10_StdLogicTb is
signal Signal1 : std_logic := '0';
signal Signal2 : std_logic;
signal Signal3 : std_logic;
begin
process is
begin
wait for 10 ns;
Signal1 <= not Signal1;
end process;
-- Driver A
process is
begin
Signal2 <= 'Z';
Signal3 <= '0';
wait;
end process;
-- Driver B
process(Signal1) is
begin
if Signal1 = '0' then
Signal2 <= 'Z';
Signal3 <= 'Z';
else
Signal2 <= '1';
Signal3 <= '1';
end if;
end process;
end architecture;
La ventana de forma de onda en ModelSim después de presionar run y hacer zoom en la línea de tiempo:

La forma de onda con el cursor colocado en la otra parte del ciclo de señal repetitivo:

Análisis
Este ejercicio ilustra la función de resolución de VHDL en acción. Al inspeccionar la forma de onda en lugar de confiar solo en la salida textual, obtenemos una visión más clara de cómo múltiples controladores interactúan en una señal std_logic.
Signal1 es conmutado por un solo proceso, por lo que su valor alterna limpiamente entre '0' y '1'. Las señales conducidas por tanto el Driver A como el Driver B se resuelven según la tabla mostrada anteriormente.
| Señal | Driver A | Driver B | Resultado |
|---|---|---|---|
| Signal2 | 'Z' | 'Z' | 'Z' |
| Signal2 | 'Z' | '1' | '1' |
| Signal3 | '0' | 'Z' | '0' |
| Signal3 | '0' | '1' | 'X' |

Conclusión
std_logices el tipo VHDL más ampliamente usado para señales de un solo bit.- Piense en una señal
std_logiccomo un cable físico que lleva un valor digital. - Cuando múltiples procesos conducen la misma señal
std_logic, la función de resolución determina el valor final.
Vaya al siguiente tutorial »
VHDL
- Principales Cuellos de Botella en Flujos de Trabajo de Impresión 3D y Soluciones Probadas
- Problemas Comunes del Sistema de Refrigeración del Coche y Cómo Diagnosticarlos
- Guía de seguridad para polipastos de motor: Mejores prácticas en el lugar de trabajo
- Principales Causas de Accidentes de Grúa y Cómo Prevenirlos
- Desbloqueando datos IoT: Cómo la gestión de reglas de negocio impulsa valor empresarial
- Aplicaciones industriales clave de la aleación A286: Alta resistencia y resistencia a la corrosión
- Implementación de lista enlazada dinámica en VHDL con tipos protegidos y punteros de acceso
- Aprovechando procedimientos en-proceso para diseños FSM más limpios en VHDL
- Uso de funciones impuras en VHDL: Mejorando legibilidad y mantenibilidad de FSM
- Dominando funciones VHDL: Guía práctica para diseño eficiente
- Uso de procedimientos en VHDL: Simplifique su diseño con código reutilizable