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.

{code}

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;

{/code}

 

 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.

{code}

—  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;

{/code}

 

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”.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *