Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> VHDL

Dominando Tipos Signed e Unsigned em VHDL: Guia Prático

Em VHDL, signed e unsigned são vetores de bits especializados que permitem realizar aritmética em barramentos de dados. Diferente de std_logic_vector, que é ideal para rotear sinais mas não para cálculos, esses tipos são interpretados como valores numéricos pelo compilador.

Tentar somar um std_logic_vector disparará o erro de compilação: No feasible entries for infix operator "+", porque a ferramenta não pode determinar como tratar o padrão de bits bruto como um número.

Parte da série Tutoriais Básicos de VHDL.

Para habilitar aritmética, declare um vetor como signed ou unsigned:

signal <name> : signed(<N-1> downto 0) := <initial_value>; signal <name> : unsigned(<N-1> downto 0) := <initial_value>;

O intervalo pode usar to ou downto, mas downto 0 é o mais comum. O valor inicial é opcional; se omitido, todos os bits padrão para 'U'.

Por que preferir signed/unsigned sobre o tradicional integer? Designers digitais frequentemente precisam de controle preciso sobre largura de bits. Esses tipos de vetor fazem wrap em overflow, enquanto integer levantará erro de tempo de execução se o valor exceder seus limites. Além disso, vetores podem conter meta-valores como 'U' e 'X', que ajudam a revelar bugs de design cedo.

Demonstração em Vídeo

No vídeo acompanhante, exploramos como sinais signed e unsigned se comportam de forma similar e onde divergem.

Código de Exemplo

library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T12_SignedUnsignedTb is end entity; architecture sim of T12_SignedUnsignedTb is signal UnsCnt : unsigned(7 downto 0) := (others => '0'); signal SigCnt : signed(7 downto 0) := (others => '0'); signal Uns4 : unsigned(3 downto 0) := "1000"; signal Sig4 : signed(3 downto 0) := "1000"; signal Uns8 : unsigned(7 downto 0) := (others => '0'); signal Sig8 : signed(7 downto 0) := (others => '0'); begin process is begin wait for 10 ns; -- Contador com wrap UnsCnt <= UnsCnt + 1; SigCnt <= SigCnt + 1; -- Somando sinais Uns8 <= Uns8 + Uns4; Sig8 <= Sig8 + Sig4; end process; end architecture; 

Análise da Forma de Onda

A forma de onda do ModelSim, com zoom nos eventos-chave, exibe todos os valores em hexadecimal para clareza:

Dominando Tipos Signed e Unsigned em VHDL: Guia Prático

No exemplo do contador, tanto UnsCnt quanto SigCnt começam em 0, incrementam até FF (decimal 255), então fazem wrap de volta para 0 — demonstrando comportamento de wrap idêntico.

Os sinais de 4 bits Uns4 e Sig4 ambos mantêm o valor binário 1000, que é decimal 8 para unsigned e -8 para signed (complemento de dois).

Ao somar esses números de 4 bits aos acumuladores de 8 bits, a extensão de sinal entra em jogo. Números unsigned são preenchidos com zeros, enquanto números signed são preenchidos com o bit de sinal. O resultado é que Uns8 aumenta em 8, enquanto Sig8 diminui em 8.

Visualizar o processo de extensão de sinal esclarece a diferença:

Dominando Tipos Signed e Unsigned em VHDL: Guia Prático

Dominando Tipos Signed e Unsigned em VHDL: Guia Prático

Principais Conclusões

Prossiga para o próximo tutorial para insights mais profundos.

VHDL

  1. Dominando Tipos Signed vs Unsigned em VHDL: Insights Práticos
  2. Aproveitando Procedimentos In-Process para Design de FSM em VHDL Mais Limpo
  3. Usando Funções Impuras em VHDL: Melhorando Legibilidade e Manutenibilidade de FSM
  4. Dominando Funções VHDL: Guia Prático para Design Eficiente
  5. Usando Procedimentos em VHDL: Simplifique seu Design com Código Reutilizável
  6. Aproveitando Constantes e Generic Maps em VHDL para Design de Módulo Flexível
  7. Dominando Instanciação com Port Map em VHDL: Guia Prático
  8. Configuração Gratuita de Simulador e Editor VHDL: Guia para Estudantes
  9. Microcontroladores PIC18: Características, Desempenho e Como Usá-los
  10. Entendendo Designadores de Referência: Como Rotular Conexões de Montagem de PCB