Académique Documents
Professionnel Documents
Culture Documents
Introduo
A Unidade Lgica-Aritmtica (ULA) de um processador o mdulo responsvel pela realizao de todas as
operaes lgicas e aritmticas definidas pelo seu conjunto de instrues. Entre as operaes lgicas esto AND,
OR, XOR e NOT, alm daquelas relativas ao deslocamento esquerda ou direita do contedo de um registrador.
As trs primeiras so binrias (operam sobre dois registradores) e as de deslocamento e o NOT so unrias (operam
sobre um nico registrador). Entre as operaes aritmticas, a adio e a subtrao esto presentes em todos os
processadores, sendo as operaes de multiplicao e diviso restritas aos processadores de maior desempenho.
Outras operaes incluem a comparao, realizada atravs da subtrao sem atualizao de registradores mas
refletindo o resultado nos sinalizadores.
O resultado de uma operao na ULA tipicamente armazenado num registrador mas pode ser descartado se o
que se deseja apenas sinalizar a condio resultante da operao tal como, por exemplo, se a adio de dois
nmeros produz um resultado positivo, negativo ou nulo. A condio armazenada em sinalizadores (flags), que
refletem condies tais como:
zero: o resultado da operao na ULA produziu o valor 0 (zero)
positivo: idem, produziu um valor positivo (formato complemento-de-2)
negativo: idem, produziu um valor negativo (formato complemento-de-2)
estouro: idem, produziu um valor que ultrapassa o limite mximo (positivo ou negativo) para nmeros em
formato complemento-de-2
vai-um (carry): idem, produziu um vai-um final do bit mais significativo (formato sem sinal)
paridade: idem, indica se o nmero de 1s no resultado par ou no
Na arquitetura MIPS, como explicado no livro-texto, decidiu-se implementar apenas um sinalizador, o de zero,
sendo os outros derivados dele em funo da realizao de outras operaes entre os operandos.
2. Objetivos
O objetivo desta aula prtica a implementao, simulao e teste de uma ULA que implemente as seguintes
operaes lgicas e aritmticas:
AND, OR, NOR: AND, OR e NOR lgicos, entre dois operandos de 32 bits
ADD: adio de dois operandos de 32 bits no formato complemento-de-2
SUB: subtrao de dois operandos de 32 bits no formato complemento-de-2
SLT: comparao entre dois operandos de 32 bits no formato complemento-de-2
O projeto lgico dever ser definido atravs da linguagem VHDL, j estudada nas disciplinas de sistemas
digitais. No site da disciplina, h vrias referncias sobre a linguagem. Aps a entrada do projeto lgico, ele dever
ser compilado e simulado, para verificao do seu correto funcionamento.
3. Parte Experimental
A parte experimental consiste em testar o projeto de uma ULA que suporte um subconjunto das instrues
definidas para o processador MIPS. Para isto, conforme descrito no captulo 4 do livro-texto (figura 4.12), sero
implementadas as funes dadas na tabela abaixo e que faro uso da ALU em seu processamento:
opcode
ALUOp
Operation
funct
ALU function
ALU control
lw
00
load word
XXXXXX
add
0010
sw
00
store word
XXXXXX
add
0010
beq
01
branch equal
XXXXXX
subtract
0110
R-type
10
add
100000
add
0010
R-type
10
subtract
100010
subtract
0110
R-type
10
AND
100100
AND
0000
R-type
10
OR
100101
OR
0001
R-type
10
set-on-less-than
101010
set-on-less-than
0111
3.1. Atividade 1
Nesta atividade, voc dever verificar o funcionamento do projeto da ULA atravs de sua simulao. Para isto,
proceda como descrito a seguir:
3.
4.
5.
1.
2.
Verifique o funcionamento da ULA alterando o arquivo de testes de forma a gerar valores diferentes para os
operandos A e B, bem como alterando a funo F.
3.2. Atividade 2
A atividade 2 consiste em verificar o funcionamento da ULA no kit DE2. Como o projeto da ULA ser, mais
tarde, incorporado ao projeto do processador, ele ser considerado como um COMPONENTE de um projeto
maior, ilustrando a natureza hierrquica dos projetos em VHDL. Para isto, os operandos A e B viro das chaves
SW(6..0) e SW(13..7), respectivamente, e a funo F ser definida pelas chaves SW(17..14). A sada dever ser ligada
aos LEDs vermelhos LEDR(6..0) e LEDG(0). Lembre-se de importar o arquivo de atribuies do kit DE2
(AssignmentsImport Assignments e selecione DE2_pin_assignments.csv)
Para isso, siga os passos:
1. Crie um novo projeto, no mesmo diretrio, com o nome ULA_DE2, para enfatizar que esta verso
para testes no kit. Ignore o aviso de que j h um projeto no mesmo diretrio.
2. Crie um arquivo em VHDL com a mesma estrutura do projeto da ULA, exceto que nele no haver
qualquer cdigo mas simplesmente uma conexo entre portas (este um conceito conhecido como
encapsulamento). Neste novo arquivo, para suas entradas e sadas utilize os nomes dos pinos
correspondentes a chaves e LEDs como descrito acima.
3. Adicione um componente ULA arquitetura deste novo arquivo, copiando a entidade ULA e
renomeando entity para component e a sequncia end ULA para end component
4. Faa o mapeamento de portas de forma que os sinais equivalentes nos dois projetos estejam
conectados. Exemplo: ... A => SW(6 downto 0), ... No caso, A o sinal que est associado ao
operando A no projeto da ULA e SW ser a entrada do projeto ULA_DE2 conectada s chaves SW[6]
a SW[0].
5. Compile o projeto e teste-o no kit.
3.3. Atividade 3
A atividade 3 consiste em adicionar, ao cdigo da atividade 2, as seguintes funes ULA: OR, NOR, SUB e
LUI, sendo esta ltima definida como no conjunto de instrues do MIPS. Para testar seu projeto, modifique o
arquivo ULA_tb.vhd e simule-o no ModelSim.
Cdigo da atividade 1: Unidade Lgica-aritmtica (ULA)
-- @2012 - Prof. Julio C. D. de Melo - DELT/EEUFMG
-- Sistemas, Processadores e Perifricos
-- Projeto do processador uMIPS: Unidade Lgica-Aritmtica
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
-- ULA
entity ULA is
port(
A, B : in std_logic_vector (31 downto 0);
F : in std_logic_vector(3 downto 0);
Y : out std_logic_vector (31 downto 0);
Z: out std_logic
);
end ULA;
-----
Entradas A e B da ULA
Controle da ULA
Sada da ULA
flag de zero
-- AND lgico
end process;
Y <= saida;
Z <= '1' when (saida = x"00000000") else '0';
-- resultado
-- flag de zero
END beh;
-- Sada da ULA
-- flag de zero
-----
Entradas A e B da ULA
Controle da ULA
Sada da ULA
flag de zero
-- A = 1
-- B = 1
-- F = adio => sada = 2 e flag = 0