I TRABALHO CDII FINAL

20
Identificação: Nome: Gustavo Henrique Gomes Matsushita RA: 79194 Nome: Gustavo Matheus Tófoli RA: 77436 1º Trabalho da Disciplina de Circuitos Digitais II – Prof. Nardênio Almeida Martins - Ciência da Computação Projeto: ULA de 1 bit: A ULA (Unidade Lógico-Aritmética) é um circuito digital pelo qual são realizadas as operações lógicas e aritméticas num processador, tomando decisões lógicas e resolvendo sintaxes lógicas numa determinada programação. Ela tem um papel indispensável para o funcionamento de uma CPU (central de processamentos) e/ou microprocessadores, em sua total abrangência. Neste trabalho, a ULA (de 1 bit) projetada possui as seguintes funções lógicas: AND, NAND, OR, NOR, XOR, XNOR e também as aritméticas: Somador Completo e Subtrator Completo. Entretanto ela não se limita a essa quantidade de operações e muito menos a 1 bit. É possível introduzir mais bits a uma ULA, assim como outras funções como: inversão, deslocamento (para esquerda ou para direita), identidade e complemento, e determinar se uma quantidade é maior, menor ou igual à outra (comparação).

Transcript of I TRABALHO CDII FINAL

Identificação:

Nome: Gustavo Henrique Gomes Matsushita RA: 79194

Nome: Gustavo Matheus Tófoli RA: 77436

1º Trabalho da Disciplina de Circuitos Digitais II –

Prof. Nardênio Almeida Martins - Ciência da

Computação

Projeto: ULA de 1 bit:

A ULA (Unidade Lógico-Aritmética) é um circuito digital

pelo qual são realizadas as operações lógicas e aritméticas

num processador, tomando decisões lógicas e resolvendo

sintaxes lógicas numa determinada programação. Ela tem um

papel indispensável para o funcionamento de uma CPU (central

de processamentos) e/ou microprocessadores, em sua total

abrangência.

Neste trabalho, a ULA (de 1 bit) projetada possui as

seguintes funções lógicas: AND, NAND, OR, NOR, XOR, XNOR e

também as aritméticas: Somador Completo e Subtrator Completo.

Entretanto ela não se limita a essa quantidade de operações e

muito menos a 1 bit. É possível introduzir mais bits a uma

ULA, assim como outras funções como: inversão, deslocamento

(para esquerda ou para direita), identidade e complemento, e

determinar se uma quantidade é maior, menor ou igual à outra

(comparação).

Para a execução dessas operações ocorre o seguinte

processo: a ULA recebe os dados dos registradores, que são

basicamente células de memória, vindo da unidade de controle

(UC), que decodificam qual operação a ULA deve realizar.

Assim, esses dados são processados e armazenados nos

registradores de saída para serem executados.

Para o projeto de ULA de 1 bit criou-se um circuito

Decodificador, o qual permitiria definir qual das operações

citadas anteriormente deveria ser executada. Analisando as

operações que deveriam ser realizadas, verificou-se que o

decodificador poderia ser desenvolvido de tal forma onde, com

três entradas (E2, E1, E0), cada uma das operações seria

executada uma por vez se, e somente se, determinadas entradas

estiverem ligadas (1) ou desligadas (0), como mostra a tabela

abaixo:

ENTRADAS SAÍDASE2 E1 E0 OPERAÇÃO0 0 0 AND0 0 1 NAND0 1 0 OR0 1 1 NOR1 0 0 XOR1 0 1 XNOR1 1 0 SOMADOR1 1 1 SUBTRATOR

(Tabela 1.1 – Tabela Verdade do Decodificador)

Para a elaboração dos circuitos que realizam as operações

de Somador e Subtrator Completo, foram construídas tabelas

verdade, em seguida, montados os respectivos Mapas de

Karnaught e com isso obter as expressões simplificadas para o

resultado da soma ou subtração (S) e para o Carry Out (Cout),

apresentadas a seguir:

Somador:

(Tabela 1.2 – Tabela Verdade do Somador)

ENTRADAS SAÍDASA B Cin S Cout0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1

(Mapa 1.1 – Mapa de Karnaught S do Somador)

S = A B Cin

(Mapa 1.2 – Mapa de Karnaught Cout do Somador)

Cout = AB + BCin + ACin = A(B + Cin) + BCin

Subtrator:

(Tabela 1.3 – Tabela Verdade do Subtrator)

ENTRADAS SAÍDASA B Cin S Cout0 0 0 0 00 0 1 1 10 1 0 1 10 1 1 0 11 0 0 1 01 0 1 0 01 1 0 0 01 1 1 1 1

(Mapa 1.3 – Mapa de Karnaught S do Subtrator)

S = A B Cin

(Mapa 1.4 – Mapa de Karnaught Cout do Subtrator)

Cout = ĀB + BCin + ĀCin = Ā(B + Cin) + BCin

Para fazer com que as saídas da ULA realizassem a operação

desejada de forma correta, utilizou-se duas portas AND, onde

uma primeira com três entradas receberia E2, E1 e E0 de acordo

com a Tabela 1.1, de tal forma que ficaria com o valor lógico

(1) somente quando essa operação fosse selecionada. Já a

segunda, recebe a saída da primeira, além do circuito da

operação aritmética ou da porta lógica, que são formados por

outras duas entradas a serem operadas: A e B. Com isso, devido

ao fato da primeira entrada ser sempre (1) para determinada

operação, o valor resultante dependerá exclusivamente do

circuito das operações aritméticas ou da porta lógica. As

saídas dessas portas AND para as funções lógicas e para a

saída S do Somador/Subtrator, foram ligadas a duas portas OR

de quatro entradas de modo a resultarem em uma única saída

final, como é representado na figura abaixo:

Cout - SUBTRATOR

Cout - SOMADOR

FUNÇÕES LÓGICASS - SOMADOR E SUBTRATOR

Cin0V

B0V

A0V

E00V

E10VE2

0V

U18BU18A

L3

L2

L1

U13D

U13C

U13B

U16A

U15C

U15B

U15A

U14C

U14B

U14A

U8C

U8B

U8A

U13AU11C

U12BU11B

U1D

U12A

U11AU5D

U10C

U10BU5C

U10A

U5B

U7CU7B

U9A

U7A

U6A

U4CU5A

U4AU3A

U2CU2A

U1CU1BU1A

(Figura 1.1 - ULA)

Decodificado r

O decodificador foi desenvolvido através de arquitetura

Comportamental utilizando-se o comando Sequencial CASE WHEN.

Seu código em VHDL foi escrito descrevendo todos os casos de

sua tabela verdade, apresentado na tabela 1.1. Segue abaixo o

código do decodificador:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY Decodificador IS

PORT(E2,E1,E0: IN BIT;

S0,S1,S2,S3,S4,S5,S6,S7: OUT BIT);

END Decodificador;

ARCHITECTURE comportamental OF Decodificador IS

SIGNAL Controle: BIT_VECTOR(2 DOWNTO 0);

SIGNAL Saida: BIT_VECTOR(7 DOWNTO 0);

BEGIN

Controle <= E2&E1&E0;

Process (Controle)

Begin

CASE Controle IS

WHEN "000" => Saida <= "00000001";

WHEN "001" => Saida <= "00000010";

WHEN "010" => Saida <= "00000100";

WHEN "011" => Saida <= "00001000";

WHEN "100" => Saida <= "00010000";

WHEN "101" => Saida <= "00100000";

WHEN "110" => Saida <= "01000000";

WHEN "111" => Saida <= "10000000";

END CASE;

END PROCESS;

S0 <= saida(0);

S1 <= saida(1);

S2 <= saida(2);

S3 <= saida(3);

S4 <= saida(4);

S5 <= saida(5);

S6 <= saida(6);

S7 <= saida(7);

END comportamental;

(Figura 1.2 – Formas de Onda do Decodificador)

Unidade Lógica

A Unidade Lógica contém todas as funções lógicas descritas

anteriormente (AND, NAND, OR, NOR, XOR, XNOR), suas entradas

são A e B, e possui seis saídas (S0, S1, S2, S3, S4, S5), uma

para cada função. Seu código foi escrito com base no resultado

de cada operação para cada estado de entrada.

Utilizou-se arquitetura Comportamental para seu

desenvolvimento com o comando Sequencial IF THEN ELSE. Segue

abaixo o código da unidade lógica em VHDL:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY UnidadeLogica IS

PORT(a,b:IN BIT;

S0,S1,S2,S3,S4,S5:OUT BIT);

-- S0=AND; S1=NAND; S2=OR; S3=NOR; S4=XOR; S5=XNOR;

END UnidadeLogica;

ARCHITECTURE comportamental OF UnidadeLogica IS

BEGIN

PROCESS(a,b)

BEGIN

IF (a='0' AND b='0') THEN

S0<='0'; S1<='1'; S2<='0';

S3<='1'; S4<='0'; S5<='1';

ELSIF (a='0' AND b='1') THEN

S0<='0'; S1<='1'; S2<='1';

S3<='0'; S4<='1'; S5<='0';

ELSIF (a='1' AND b='0') THEN

S0<='0'; S1<='1'; S2<='1';

S3<='0'; S4<='1'; S5<='0';

ELSIF (a='1' AND b='1') THEN

S0<='1'; S1<='0'; S2<='1';

S3<='0'; S4<='0'; S5<='1';

END IF;

END PROCESS;

END comportamental;

(Figura 1.3 – Formas de Onda da Unidade Lógica)

Somador Completo de 1 bit

O Somador Completo de 1 bit foi desenvolvido com

arquitetura de Comportamental usando o comando Concorrente

WITH SELECT WHEN, descrevendo no código qual deve ser a saída

(S e Cout) quando se tem uma dada entrada (A e B), como foi

apresentado na tabela 1.2. Segue abaixo o código do somador:

LIBRARY ieee;

USE ieee.std_logic_1164;

ENTITY Somador IS

PORT(A,B,Cin:IN BIT;

S,Cout: OUT BIT);

END Somador;

ARCHITECTURE comportamental OF Somador IS

SIGNAL entrada:BIT_VECTOR(2 DOWNTO 0);

SIGNAL saida:BIT_VECTOR(1 DOWNTO 0);

BEGIN

entrada <= A&B&Cin;

WITH Entrada SELECT

saida <= "00" WHEN "000",

"10" WHEN "001",

"10" WHEN "010",

"01" WHEN "011",

"10" WHEN "100",

"01" WHEN "101",

"01" WHEN "110",

"11" WHEN "111";

S <= saida(1);

Cout <= saida(0);

END comportamental;

(Figura 1.4 – Formas de Onda do Somador)

Subtrator Completo de 1 bit

Para o desenvolvimento do Subtrator, descrevendo os casos

apresentados anteriormente na tabela 1.3, foi utilizada

arquitetura Comportamental com o comando Concorrente WHEN

ELSE. Segue abaixo o código do Subtrator:

LIBRARY ieee;

USE ieee.std_logic_1164;

ENTITY Subtrator IS

PORT(A,B,Cin:IN BIT;

S,Cout: OUT BIT);

END Subtrator;

ARCHITECTURE comportamental OF Subtrator IS

SIGNAL Entrada : BIT_VECTOR(2 DOWNTO 0);

SIGNAL Saida : BIT_VECTOR(1 DOWNTO 0);

BEGIN

Entrada <= A&B&Cin;

Saida <= "00" WHEN entrada =

"000" ELSE

"11" WHEN entrada = "001" ELSE

"11" WHEN entrada = "010" ELSE

"01" WHEN entrada = "011" ELSE

"10" WHEN entrada = "100" ELSE

"00" WHEN entrada = "101" ELSE

"00" WHEN entrada = "110" ELSE

"11" WHEN entrada = "111";

S <= saida(1);

Cout <= saida(0);

END comportamental;

(Figura 1.5 – Formas de Onda do Subtrator)

Package (Pacote)

O pacote para o desenvolvimento da ULA contém as

declarações de cada componente que vai ser utilizado durante o

código final, sendo esses componentes os desenvolvidos

anteriormente (Decodificador, Unidade Lógica, Somador e

Subtrator), além de uma AND, uma OR de duas entradas e uma OR

de oito entradas. Segue abaixo o código VHDL do pacote:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

PACKAGE ULA_package IS

COMPONENT Decodificador IS

PORT(E2,E1,E0:IN BIT;

S0,S1,S2,S3,S4,S5,S6,S7:OUT BIT);

END COMPONENT;

COMPONENT UnidadeLogica IS

PORT(A,B:IN BIT;

S0,S1,S2,S3,S4,S5:OUT BIT);

END COMPONENT;

COMPONENT Somador IS

PORT(A,B,Cin:IN BIT;

S,Cout:OUT BIT);

END COMPONENT;

COMPONENT Subtrator IS

PORT(A,B,Cin: IN BIT;

S,Cout: OUT BIT);

END COMPONENT;

COMPONENT AND_2 IS

PORT (a,b: in bit;

s:out bit);

END COMPONENT;

COMPONENT OR_2 IS

PORT (a,b: in bit;

s:out bit);

END COMPONENT;

COMPONENT OR_8 IS

PORT (a,b,c,d,e,f,g,h: in bit;

s:out bit);

END COMPONENT;

END ULA_package;

ULA

Para o desenvolvimento e a simulação final da ULA, o código

VHDL foi escrito em uma arquitetura Estrutural com uso de

Componentes, estes componentes são os projetos apresentados

anteriormente e que foram descritos e inseridos no Pacote.

Os três componentes adicionais citados anteriormente: uma

porta AND de duas entradas, uma porta OR de duas entradas e

uma porta OR de oito entradas, foram necessários para

completar o projeto, apresentando corretamente os resultados

esperados.

Devido a algumas limitações do software Circuit Maker

Student, utilizado na elaboração da ULA apresentada na Figura

1.1, como um limite máximo de fios e elementos do circuito, a

ULA desenvolvida no código VHDL apresenta algumas diferenças.

Abaixo temos uma especificação de etapas tomadas para sua

codificação:

Para utilizar o sinal do decodificador para fazer a seleção

das funções adicionou-se ao circuito de cada operação uma

porta AND, onde uma das entradas é o resultado da operação

(s0, s1, s2, s3, s4, s5, s6, s7) e a outra, o sinal do

decodificador ( D0, D1, D2, D3, D4, D5, D6, D7). Desse

modo, todas as operações que não foram selecionadas terão

resultado (0). Como são oito saídas, utilizou-se uma porta OR

de oito entradas, assim a ULA terá apenas uma única Saída.

Para que tenha apenas uma saída do Cout, e para que uma das

operações não interfira na saída Cout quando a outra estiver

selecionada, utilizou-se o mesmo princípio da seleção das

operações, ou seja, uma porta AND ligando o sinal do

decodificador ao Cout. Em seguida, com uma porta OR, entramos

com o sinal Cout do Somador (CoutSom) e o Cout do Subtrator

(CoutSub) tendo uma única saída Cout.

Segue abaixo o código da ULA:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE work.ULA_package.all;

ENTITY ULA IS

PORT(E2,E1,E0 : IN BIT; -- Controle

A,B : IN BIT; -- Entrada de dados

Cin : IN BIT; -- Cin do Somador/Subtrator

Saida : OUT BIT; -- Saída com o resultado a

função escolhida no controle

Cout : OUT BIT); -- Cout do Somador/Subtrator

END ULA;

ARCHITECTURE estrutural OF ULA IS

SIGNAL D0,D1,D2,D3,D4,D5,D6,D7,

s0, s1, s2, s3, s4, s5, s6, s7, C0, C1,

Sand, Snand, Sor, Snor, Sxor, Sxnor, Ssom,

Ssub,

CoutSub, CoutSom:BIT;

BEGIN

P1 : Decodificador PORT MAP (E2, E1, E0, D0, D1, D2, D3,

D4, D5, D6, D7);

P2 : UnidadeLogica PORT MAP (A, B, s0, s1, s2, s3, s4,

s5);

P3 : Somador PORT MAP (A, B, Cin , s6, C0);

P4 : Subtrator PORT MAP (A, B, Cin , s7, C1);

P5 : and_2 PORT MAP (D0, S0, Sand);

P6 : and_2 PORT MAP (D1, s1, Snand);

P7 : and_2 PORT MAP (D2, s2, Sor);

P8 : and_2 PORT MAP (D3, s3, Snor);

P9 : and_2 PORT MAP (D4, s4, Sxor);

P10: and_2 PORT MAP (D5, s5, Sxnor);

P11: and_2 PORT MAP (D6, s6, Ssom);

P12: and_2 PORT MAP (D7, s7, Ssub);

P13: or_8 PORT MAP (Sand, Snand, Sor, Snor, Sxor, Sxnor,

Ssom, Ssub, Saida);

P14: and_2 PORT MAP (D6,C0 , CoutSom);

P15: and_2 PORT MAP (D7,C1 , CoutSub);

P16: or_2 PORT MAP (CoutSom,CoutSub , Cout);

END estrutural;

(Figura 1.6 – Formas de Onda da ULA)

Referências Bibliográficas:

CAPUANO, FRANCISCO GABRIEL E IDOETA, IVAN V. ELEMENTOS DEELETRÔNICA DIGITAL. EDITORA ERICA, 40a EDICAO, 2006.

GUNTZEL, JOSÉ LUÍS. PROJETO DE UMA UNIDADE LÓGICO-ARITMÉTICA(ULA). INSTITUTO DE FÍSICA E MATEMÁTICA DA UNIVERSIDADEFEDERAL DE PELOTAS, 2003.

PINTO, ROSSANO PABLO. PORTAS LÓGICAS E CIRCUITOS DIGITAIS.SISTEMAS DA COMPUTAÇÃO, 2007.

TOCCI, RONALD; WIDMER, NEAL; MOSS, GREGORY L. SISTEMASDIGITAIS: PRINCÍPIOS E APLICAÇÕES. EDITORA: PEARSON PRENTICEHALL, 10a EDICAO, 2007.

AMORE, ROBERT d’. VHDL: DESCRIÇÃO E SÍNTESE DE CIRCUITOSDIGITAIS. LTC, RIO DE JANEIRO, 2005.