1 / 13

Projeto de Circuito Combinacional Unidade Lógica e Aritmética ( ULA )

Projeto de Circuito Combinacional Unidade Lógica e Aritmética ( ULA ). ULA. Unidade Lógica e Aritmética (ULA) é um circuito que realiza funções lógicas e aritméticas É um dos componentes de transformação de dados principais de um processador Normalmente implementado de forma combinacional

ian-young
Download Presentation

Projeto de Circuito Combinacional Unidade Lógica e Aritmética ( ULA )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Projeto de Circuito CombinacionalUnidade Lógica e Aritmética (ULA)

  2. ULA • Unidade Lógica e Aritmética (ULA) é um circuito que realiza funções lógicas e aritméticas • É um dos componentes de transformação de dados principais de um processador • Normalmente implementado de forma combinacional • Representação: Seleção (comando) Vetor de entrada A Vetor de saída Vetor de entrada B Qualificadores (flags)

  3. ULA - Funcionalidades Lógicas • Diversas são as funcionalidades lógicas. Dentre as mais comuns estão: • E lógico das entradas • Ou lógico das entradas • Ou exclusivo lógico das entradas • Complemento de uma das entradas • A seleção de qual operação será realizada é obtida pela porta de comando • Normalmente controlada pela unidade de controle do processador onde se encontra a ULA • Operações lógicas usam normalmente apenas os qualificadores Z (zero) e N (negativo) • Qualificadores de V (overflow) e C (carry) não são considerados, pois operações lógicas não alteram o valor dos mesmos

  4. ULA - Funcionalidades Aritméticas • Dentre as funcionalidades aritméticas mais comuns estão: • Soma das entradas • Subtração das entradas • Deslocamento de uma das entrada • Rotação de uma das entradas • E variações das funcionalidades acima utilizando a flag C • A seleção de qual operação será realizada é obtida pela porta de comando • Operações aritméticas fazem uso dos quatro qualificadores vistos até então (Z, N, V, C)

  5. Especificação de uma ULA de 4 Bits • Projetar uma ULA em VHDL com as seguintes funcionalidades: • Soma • Subtração • Incremento • Decremento • E lógico • Ou lógico • Ou exclusivo lógico • Complemento • Para dar suporte a funcionalidade completa do processador, esta ULA deve ter os seguintes qualificadores: • Carry • Negativo • Zero • Overflow • A ULA deve ter as portas de entrada e saída com 4 bits

  6. Especificação de uma ULA de 4 Bits • Definição da relação entre a codificação e a seleção de comandos: • A implementação da ULA deve ser feita utilizando uma descrição comportamental

  7. Implementação de uma ULA de 4 Bits (Entidade) library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_SIGNED.all; entity Ula4bits is port ( A, B: in STD_LOGIC_VECTOR(3 downto 0); oper: in STD_LOGIC_VECTOR(2 downto 0); N, Z, C, V: out STD_LOGIC; S: out STD_LOGIC_VECTOR(3 downto 0) ); end Ula4bits;

  8. Implementação de uma ULA de 4 Bits (Arquitetura) architecture ula4bits of ula4bits is signal iA, iB, i_S: STD_LOGIC_VECTOR(4 downto 0); signal SS: STD_LOGIC_VECTOR(3 downto 0); begin iA <= A(3) & A; -- Extensão de sinal iB <= B(3) & B; SS <= i_S(3 downto 0); S <= SS; with op select i_S<= iA+ iB when "000", iA - iB when "001", iA + 1 when "010", iA - 1 when "011", iA and iB when "100", iA or iB when "101", iAxoriB when "110", not iA when others; N <= '1' when SS < 0 else '0'; Z <= '1' when SS = 0 else '0'; C <= i_S(4); V <= '1' when (op="000" and ((iA>0 and iB>0 and SS<0) or (iA < 0 and iB < 0 and SS > 0))) or ((op="010" or op="011") and ((iA > 0 and SS < 0) or (iA < 0 and SS > 0))) or (op="001" and ((iA>0 and iB<0 and SS<0) or (iA < 0 and iB > 0 and SS > 0))) else '0'; end ula4bits;

  9. Implementação de uma ULA de 4 Bits • Exercício: • Faça alguns exemplos de vetores e teste se os quatro qualificadores estão implementados corretamente • Pergunta: • A descrição comportamental apresentada poderia ser mais clara? • Sim. Bastaria usar uma definição do que é cada operação. Isto pode ser obtido com uma definição de um tipo em um pacote • Exemplo: • Definição do tipo OP_ULA no pacote ULA, conforme a especificação package ULA is type OP_ULA is ( soma, sub, inc, dec, op_and, op_or, op_xor, op_not ); end ULA;

  10. Implementação de uma ULA de 4 Bits library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_SIGNED.all; use work.ULA.all; -- Inclusão do pacote ULA entityUla4bitsis port( A, B: in STD_LOGIC_VECTOR(3 downto 0); oper: in OP_ULA; N, Z, C, V: out STD_LOGIC; S: out STD_LOGIC_VECTOR(3 downto 0) ); endUla4bits;

  11. Implementação de uma ULA de 4 Bits (Arquitetura) architecture ula4bits of ula4bits is signal iA, iB, i_S: STD_LOGIC_VECTOR(4 downto 0); signal SS: STD_LOGIC_VECTOR(3 downto 0); begin iA <= A(3) & A; iB <= B(3) & B; SS <= i_S(3 downto 0); S <= SS; with op select i_S<= iA + iB when soma, iA - iB when sub, iA + 1 when inc, iA - 1 when dec, iA and iB when op_and, iA or iB when op_or, iAxoriB when op_xor, not iA when others; N <= '1' when SS < 0 else '0'; Z <= '1' when SS = 0 else '0'; C <= i_S(4); V <= '1' when (op=soma and ((iA>0 and iB>0 and SS<0) or (iA < 0 and iB < 0 and SS > 0))) or ((op=inc or op=dec) and ((iA > 0 and SS < 0) or (iA < 0 and SS > 0))) or (op=suband ((iA>0 and iB<0 and SS<0) or (iA < 0 and iB > 0 and SS > 0))) else '0'; end ula4bits;

  12. Implementação de uma ULA de 4 Bits (Arquitetura)- Outra solução  Só comportamental - architecture ula4bits of ula4bits is signal iS: STD_LOGIC_VECTOR(3 downto 0); begin S <= iS; with op select iS <= A + B when soma, A - B when sub, A + 1 when inc, A - 1 when dec, A and B when op_and, A or B when op_or, A xor B when op_xor, not A when others; N <= '1' when S < 0 else '0'; Z <= '1' when S = 0 else '0'; C <= '1' when ((op = soma and A > iS or B > iS) or (op = inc and A >= iS) or (op = dec and A <= iS) or (op = subtracaoand A < iS or B < iS)) else '0'; V <= '1' when (op=soma and ((A > 0 and B > 0 and iS < 0) or (A < 0 and B < 0 and iS > 0))) or ((op=inc or op=dec) and ((A > 0 and iS <= 0) or (A < 0 and iS >= 0))) or (op=suband ((A>0 and B < 0 and iS < 0) or (A < 0 and B > 0 and iS > 0))) else '0'; end ula4bits;

  13. Exercício • Faça um diagrama de blocos mostrando como ficam conectados os subcircuitos da ULA • Complemente o projeto da ULA inserindo instruções de multiplicação e divisão. Para tanto, refaça a ULA de forma a esta ter uma saída com o dobro de bits. Organize estes bits para ter funcionalidade adequada para ponto flutuante na divisão e ter um número inteiro maior na multiplicação. Faça, também, uma codificação adequada para as novas instruções • Projete a mesma especificação de ULA, mas agora de forma estrutural. Para tanto, utilize as descrições de circuitos aritméticos descritos nas aulas anteriores e complemente os mesmos com as novas funcionalidades

More Related