Dominando std_logic do VHDL: Estados, Resolução e Análise de Forma de Onda
Em VHDL, o tipo std_logic é a pedra angular para representar um único bit em um fio físico. Diferente do tipo simples integer usado em tutoriais anteriores, std_logic oferece um conjunto mais rico de valores que modelam o comportamento de sinais digitais do mundo real mais precisamente.
Enquanto um pino digital geralmente carrega ou um logic high ('1') ou um logic low ('0'), um sinal físico também pode aparecer em estados de alta impedância, fraco ou indefinido. O tipo std_logic captura todas essas possibilidades, tornando-o o tipo mais frequentemente empregado em design VHDL.
Este artigo é parte da série Tutoriais Básicos de VHDL.
Abaixo está a lista completa de valores que um sinal std_logic pode assumir:
| '1' | Lógica 1 |
| '0' | Lógica 0 |
| 'Z' | Alta impedância |
| 'W' | Sinal fraco; 0 ou 1 indeterminado |
| 'L' | 0 fraco (pull-down) |
| 'H' | 1 fraco (pull-up) |
| '-' | Don't care (não importa) |
| 'U' | Não inicializado |
| 'X' | Desconhecido (múltiplos drivers) |
Na maioria dos tutoriais, focaremos nos valores primários '1' e '0', e ocasionalmente 'U' e 'X' para destacar erros de design. Os estados restantes são recursos avançados úteis para modelar protocolos como I2C ou criar barramentos tri-state.
Quando vários processos conduzem o mesmo sinal std_logic, a linguagem emprega uma função de resolução para determinar o valor resultante. Este mecanismo previne erros de compilação ou tempo de execução em simulações e é definido por uma tabela de resolução, como mostrado abaixo.
| 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 | - |
Exercício
Este tutorial em vídeo demonstra como declarar sinais std_logic e visualizá-los em uma simulação de forma de onda.
O código VHDL final produzido neste exercício é mostrado abaixo:
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; A janela de forma de onda no ModelSim após pressionar run e dar zoom na linha do tempo:

A forma de onda com o cursor colocado na outra parte do ciclo de sinal repetitivo:

Análise
Este exercício ilustra a função de resolução do VHDL em ação. Inspecionando a forma de onda em vez de confiar apenas na saída textual, ganhamos uma visão mais clara de como múltiplos drivers interagem em um sinal std_logic.
Signal1 é alternado por um único processo, então seu valor alterna limpo entre '0' e '1'. Sinais conduzidos por ambos Driver A e Driver B resolvem de acordo com a tabela exibida anteriormente.
| Sinal | Driver A | Driver B | Resultado |
|---|---|---|---|
| Signal2 | 'Z' | 'Z' | 'Z' |
| Signal2 | 'Z' | '1' | '1' |
| Signal3 | '0' | 'Z' | '0' |
| Signal3 | '0' | '1' | 'X' |

Conclusão
std_logicé o tipo VHDL mais amplamente usado para sinais de bit único.- Pense em um sinal
std_logiccomo um fio físico carregando um valor digital. - Quando múltiplos processos conduzem o mesmo sinal
std_logic, a função de resolução determina o valor final.
Vá para o próximo tutorial »
VHDL
- Principais Gargalos no Fluxo de Trabalho de Impressão 3D e Soluções Comprovadas
- Problemas Comuns do Sistema de Arrefecimento e Como Diagnosticá-los
- Desbloqueando Dados IoT: Como Gestão de Regras de Negócio Impulsiona Valor Empresarial
- Implementando Lista Encadeada Dinâmica em VHDL com Tipos Protegidos e Ponteiros de Acesso
- Aproveitando Procedimentos In-Process para Design de FSM em VHDL Mais Limpo
- Usando Funções Impuras em VHDL: Melhorando Legibilidade e Manutenibilidade de FSM
- Dominando Funções VHDL: Guia Prático para Design Eficiente
- Guia de Segurança para Guindastes de Motor: Melhores Práticas no Local de Trabalho
- Principais Causas de Acidentes com Guindastes e Como Preveni-los
- Principais Aplicações Industriais da Liga A286: Alta Resistência e Resistência à Corrosão