Unidade Lógica Aritmética (ULA)

Unidade Lógica Aritmética

 

A Unidade Lógica Aritmética (ULA) é um bloco que executa operações aritméticas e lógicas. Entre as operações aritméticas que excuta, ela soma, subtrai, divide e determina se um número é positivo ou negativo ou se é zero. Ela pode também executar funções lógicas como "E", "OU" ou "OU EXCLUSIVO". A ULA é um bloco básico de um  microprocessador ou CPU de um computador.

O projeto a seguir, é um exemplo de circuito lógico combinacional, descrito em VHDL e simulado no software ModelSim®-Altera, através do modo interativo.

Os módulos necessários para a implementação do projeto são:

Lógica de Funcionamento

A ULA recebe duas palavras de 4 bits (A e DADO) e realiza uma operação entre as duas. A operação a ser efetuada é selecionada através da entrada OPERACAO conforme a tabela abaixo.

OPERACAO Operação realizada
000 Adição
001 Subtração
010 'E' Lógico
011 'OU' Lógico
100 'OU' Exclusivo
101 Complemento do acumulador

Para outras entradas, a ULA apresenta uma saída de alta impedância.

A Figura 1 apresenta o símbolo padrão para a ULA.

ULA_diagrama

Figura 1 - Símbolo esquemático típico para a ULA

Este trecho de código descreve, em VHDL, a entidade ULA.

entity ULA_SIMPLES is
  port
   (
      -- Dados de Entrada:
      A, DADO: in std_logic_vector (3 downto 0);
      -- Saída de Resultados ("Bruto", sem flags)
      S: out std_logic_vector (3 downto 0);
      -- Definição da operação a ser executada:
      OPERACAO: in std_logic_vector  (2 downto 0)
   );
end entity ULA_SIMPLES;

 

 Este trecho de código apresenta o decodificador utilizado para selecionar a operação a partir da entrada OPERACAO. Utiliza-se a função case dentro de um processo.

--  O código na entrada "OPERACAO", de três bits, determina
 --    que tarefa a ULA simples executará.
 case OPERACAO is
    when "000"  =>  S <= A  +  DADO; -- Adição
    when "001"  =>  S <= A  -  DADO; -- Subtração
    when "010"  =>  S <= A and DADO; -- Lógica "E" bit a bit
    when "011"  =>  S <= A or DADO;  -- Lógica "OU" bit a bit
    when "100"  =>  S <= A xor DADO; -- Lógica "OU EXCLUSIVO" bit a bit
    when "101"  =>  S <= NOT A;      -- Complemento do acumulador
    when others =>  S <= "ZZZZ";     -- Saída em alta impedância para operação indefinida...
 end case;

 

Uma vez selecionada, a operação é executada a partir das entradas A e DADO) ou apenas de uma que é o caso do NOT.

A Figura  apresenta um resumo da Analise e síntese.

Figura 2 - Resumo do Resultado da Análise e Síntese.

 

Simulação

A Figura 4 apresenta as formas de onda da simulação. Foram adotados valores fixos para A e para DADO e para OPERACAO foi testado todas as possibilidades. Foi utilizado o ModelSim®-Altera de forma interativa (tutorial para a forma interativa, clique aqui).

Simulacao

Figura 3 - Formas de onda da simulação.

Estrutura Física

Para demonstrar o funcionamento da ULA, utilizamos chaves (para operandos e operação) e LEDs (para o resultado).

Na primeira placa de chaves, as 4 primeiras (7 a 4) são para a variável A e as 4 ultimas (3 a 0) para a variável DADO. Nos LEDs temos a apresentação do resultado.

Figura 4 - Estrutura Física do Projeto.

 

Montagem e Roteameno

As placas de chaves serão colocadas nos conectores CON1 e CON2 e a placa de LEDs será conectado no conector CON3, como mostrado nas ilutrações abaixo feitas no software Fritzing. Lembrando que deve-se ficar atento para que os pinos de Vcc e o GND dos periféricos fiquem alinhados entre as placas.

Figura 5 - Detalhe do CON1 na matriz de contatos.

Figura 6 - Detalhe do CON2 na matriz de contatos.

Figura 7 - Detalhe do CON3 na matriz de contatos

A Figura 8 apresenta o mapeamento dos pinos de acordo a disposição das placas acima apresentada.

Figura 8 - Pin Planner.

 

Arquivos do Projeto

Para o download do projeto completo, clique aqui.

O arquivo está no formato "zip", e inclui, entre outros:

   - O arquivo de projeto do Quartus ".qpf"

   - A descrição no formato VHDL ".vhd"

   - O arquivo para gravação do CPLD, no formato ".pof".