projeto: uma calculadora com componentes em vhdl · descrição estrutural decodificador 8 chaves 3...

27
Projeto: Uma Calculadora com Componentes em VHDL

Upload: vonhi

Post on 10-Sep-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Projeto : Uma Calculadora com Componentes em VHDL

Descrição Estrutural

DECODIFICADOR

8 chaves

3 botoeiras 2 displays

4 leds

INT

ER

FA

CE

DE

EN

TR

AD

A

INT

ER

FA

CE

DE

SA

ÍDA

UNIDADE ARITMÉTICA

EM C2

x

y

C.O.

sinais de controle

s

CVZN

Representa ção em C2

Bit de sinal (N)

Zero (Z=1)

número

Númerosnegativos

Númerospositivos

110111

000110

000101

011100

101011

110010

110001

000000

Adição em C2

1. Somar os dois números X e Y de n bits, bit a bit, inclusive o bit de sinal (N), descartar o ‘vai-um’(C), para obter o resultado S, .

2. Avaliação dos casos de estouro (V=1):

111111 −−−−−− += nnnnnn syxsyxV

1−nx 1−ny 1−ns V 1−nCnC

nn CCV ⊕= −1

V: Bit de OverflowC: Bit de Transporte

Subtra ção em C2

Complemento e Troca de Sinal

• Complemento: complementar bit a bit.

• Troca de sinal: complementar bit a bit e somar “1”.

Tarefa 1: Unidade Aritm ética

Descrição Funcional

s=-xtroca de sinalCSX

s=y’complementoCMY

s=x-ysubtraçãoSUB

s=x+yadiçãoADD

Sinais de Controle

DefiniçãoCódigo de Operação

Operandos: x, y (8 bits) Resultado: s (8 bits), C,V,Z,N (bits de condição)

Descrição Funcional

CX=ZY=Ci=1CY=ZX=0

s=-xtroca de sinalCSX

CY=ZX=1CX=ZY=Ci=0

s=y’complementoCMY

CY=Ci=1CX=ZX=ZY=0

s=x-ysubtraçãoSUB

CX=CY=ZX=ZY=Ci=0

s=x+yadiçãoADD

Sinais de Controle

DefiniçãoCódigo de Operação

Operandos: x, y (8 bits) Resultado: s (8 bits), C,V,Z,N (bits de condição)

Somador de 4 bits

library ieee;use ieee.std_logic_1164.all;

entity somador_4bit isport (a0, a1, a2, a3, b0, b1, b2, b3: in std_logic;

Cin : in std_logic;f0, f1, f2, f3: out std_logic;Cout, V, N, Z: out std_logic);

end somador_4bit;architecture fouradder_structure of somador_4bit is

signal c, sum: std_logic_vector (4 downto 0);component FULLADDER

port(a, b, c: in std_logic; sum, carry: out std_logic);

end component;begin

FA0: FULLADDER port map (a0, b0, Cin, sum(0), c(1));FA1: FULLADDER port map (a1, b1, C(1), sum(1), c(2));FA2: FULLADDER port map (a2, b2, C(2), sum(2), c(3));FA3: FULLADDER port map (a3, b3, C(3), sum(3), c(4));V <= c(3) xor c(4);Cout <= c(4);f0 <= sum(0);f1 <= sum(1);f2 <= sum(2);f3 <= sum(3);Z <= not(sum(0) or sum(1) or sum(2) or sum(3));N <= sum(3);

end fouradder_structure;

Um Exemplo de “reuso” do componenteFulladder desenvolvido no Experimento 3:

Especificação dainterface do componente quevocê desenvolveu: nome do componente e dos pinos igual aoespecificado nainterface do componente “Conexão” dos sinais

do circuito à pinagemdo componente

Alternativa 1 para descreverComportamento “Complemento ”

library ieee;use ieee.std_logic_1164.all;entity complemento is

port (a0, a1, a2, a3, a4, a5, a6, a7: in std_logic;C : in std_logic;b0, b1, b2, b3, b4, b5, b6, b7: out std_logic

);end complemento;architecture behavior_1 of complemento is signal a_vec: std_logic_vector(7 downto 0); begin

process(C,a0,a1,a2,a3,a4,a5,a6,a7)variable aa_vec:std_logic_vector(7 downto 0);begin

aa_vec := a7 & a6 & a5 & a4 & a3 & a2 & a1 & a0;if (C = '1') then

aa_vec := not(aa_vec);end if;a_vec <= aa_vec;

end process;b0<=a_vec(0); b1<=a_vec(1); b2<=a_vec(2); b3<=a_vec(3);b4<=a_vec(4); b5<=a_vec(5); b6<=a_vec(6); b7<=a_vec(7);

end behavior_1;

Sinais aos quais o processo é sensível

Descrição de “comportamentossequenciais”, permite uso de variáveisauxiliares que nãonecessariamentesão convertidosem sinais físicos.

library ieee;use ieee.std_logic_1164.all;

entity complemento isport (a0, a1, a2, a3, a4, a5, a6, a7: in std_logic;

C : in std_logic;b0, b1, b2, b3, b4, b5, b6, b7: out std_logic);

end complemento;

architecture behavior_2 of complemento is signal a_vec, c_vec, b_vec:std_logic_vector(7 downto 0);

begina_vec <= a7 & a6 & a5 & a4 & a3 & a2 & a1 & a0;c_vec <= C & C & C & C & C & C & C & C;b_vec <= a_vec xor c_vec;b0<= b_vec(0); b1<= b_vec(1); b2<= b_vec(2); b3<= b_vec(3); b4<= b_vec(4); b5<= b_vec(5); b6<= b_vec(6); b7<= b_vec(7);

end behavior_2;

Alternativa 2 para descreverComportamento “Complemento ”

Função lógica

Alternativa 3 para descreverComportamento “Complemento ”

library ieee;use ieee.std_logic_1164.all;

entity complemento isport (a0, a1, a2, a3, a4, a5, a6, a7: in std_logic;

C : in std_logic;b0, b1, b2, b3, b4, b5, b6, b7: out std_logic);

end complemento;

architecture behavior_3 of complemento is signal a_vec, c_vec, b_vec:std_logic_vector(7 downto 0);

begina_vec <= a7 & a6 & a5 & a4 & a3 & a2 & a1 & a0;b_vec <= not (a_vec) when C='1' else

a_vec;b0<= b_vec(0); b1<= b_vec(1); b2<= b_vec(2); b3<= b_vec(3); b4<= b_vec(4); b5<= b_vec(5); b6<= b_vec(6); b7<= b_vec(7);

end behavior_3;

Multiplexação

Circuito de “Zerar”

• Como vocês descreveriam em VHDL?

Testes

1001

0001

0101

0010

0110

1100

0100

0000

VCZNResultados

nn CCV ⊕= −1nCC =

Sugestão de Procedimento• Abrir um projeto Calculadora• Projetar e especificar em VHDL as componentes Compl, Zerar,

Somar (8 bits) • Para cada componente: editar, compilar, visualizar em RTL netlist e

simular– File > New > VHDL File– Setar como “top-level” (Project > Set as Top-level Entity)– MAX+PLUSII > Compiler– Tools > Netlist Viewers > RTL Viewer– Editar formas de onda (MAX+PLUSII > Waveform Editor)– Simular (MAX+PLUSII > Simulator)

• Projetar a componente ULA com uso das componentes existentes• Desenhar o esquemático da ULA, compilar, simular

– File > New > Block Diagram/Schematic File– Setar como “top-level” (Project > Set as Top-level Entity)– MAX+PLUSII > Compiler– Editar formas de onda (MAX+PLUSII > Waveform Editor)

contendo os casos de teste listados no roteiro– Simular (MAX+PLUSII > Simulator)

• Opcional: programar ULA em FPGA• Vistar os resultados de simulação da ULA

Tarefa 2: Decodificador• Projetar e especificar em VHDL a componente

Decodificador– Dica: Especificar a função lógica para cada sinal de

saída. Por exemplo, Ci <= função(f0,f1,f2);• Editar, compilar, visualizar em RTL netlist e simular

– File > New > VHDL File– Setar como “top-level” (Project > Set as Top-level

Entity)– MAX+PLUSII > Compiler– Tools > Netlist Viewers > RTL Viewer– Editar formas de onda (MAX+PLUSII > Waveform

Editor) contendo todas as possíveis combinaçõesde f2f1f0

– Simular (MAX+PLUSII > Simulator)• Opcional: programar o decodificador em FPGA• Vistar os resultados de simulação do Decodificador

Interface do Decodificador

entity decodificador isport (

f0,f1,f2 : in std_logic;Ci,CX,CY,ZX,ZY : out std_logic

);end entity;

Tarefa 3: Barramento

1 dispositivo ativo Mais de um dispositivo ativo

Conjunto de linhascompartilhadas pordiferentesdispositivos

Portas com sa ída Tri-State

111

010

Z01

Z00

CBA

SaídaEntrada

Tabela-verdade

library altera; use altera.altera_primitives_components.all;

-- Instantiating TRI<instance_name> : TRI-- <data_out> may feed an inout pinport map (a_in => <data_in>, oe =>

<enable_signal>, a_out => <data_out>);

VHDL:

Símbolo:TRI

inst

Barramento de Acesso às Entradas

barramento

Interface de um Registrador em VHDLentity registrador_8 is

generic ( NUM_STAGES : natural := 8 );port (

clk : in std_logic;enable : in std_logic;reset : in std_logic;sr_in : in std_logic_vector((NUM_STAGES-1) downto 0);sr_out : out std_logic_vector((NUM_STAGES-1) downto 0)

);end entity;

entity registrador_8 isport (

clk : in std_logic;enable : in std_logic;reset : in std_logic;sr_in : in std_logic_vector (7 downto 0);sr_out : out std_logic_vector(7 downto 0)

);end entity;

OU

Dica: Ver o template de Basic Register em QuartusII

Buffer com 4 Tri-stateslibrary ieee;use ieee.std_logic_1164.all;library altera; use altera.altera_primitives_components.all;entity buffer_4 is

port (enable : in std_logic;sr_in : in std_logic_vector (4 downto 0);sr_out : out std_logic_vector (4 downto 0));

end entity;architecture rtl of buffer_4 isbeginP0 : TRI port map (a_in=>sr_in(0), oe=>enable, a_out=>sr_out(0));P1 : TRI port map (a_in=>sr_in(1), oe=>enable, a_out=>sr_out(1));P2 : TRI port map (a_in=>sr_in(2), oe=>enable, a_out=>sr_out(2));P3 : TRI port map (a_in=>sr_in(3) ,oe=>enable, a_out=>sr_out(3));end rtl;

Declaração da bibliotecaque contém componenteTRI

Alternativa para especificar conexãoentre os sinais do circuito com ospinos do componente

pino do componente

sinal

Atrasos em tri-states

Atenção: Botoeiras do kit Altera são ativo baixo, ou seja, usualmente o nívellógico do seu sinal é 1. Quando apertá-la, o nível vai para 0 gerando umaborda de descida e quando soltá-la volta-se ao ‘nível 1 gerando uma bordade subida.

Sugestão de Procedimento

• Projetar a Calculadora utilizando componentes existentes• Desenhar o esquemático, compilar, e simular

– File > New > Block Diagram/Schematic File– Setar como “top-level” (Project > Set as Top-level Entity)– MAX+PLUSII > Compiler– Editar formas de onda (MAX+PLUSII > Waveform Editor) dos casos

listados no roteiro– Simular (MAX+PLUSII > Simulator)

• Simular e fazer ajustes no circuito para eliminar os conflitos temporais.• Testar o componente

– Adaptar os nomes dos símbolos para as convenções adotadas pelo kitAltera

– Importar o arquivo de correspondência (Assignments > Import Assignments)

– Compilar– Programar FPGA

• Vistar o circuito executando os casos do roteiro.

Tarefa 4: Conversor BCD-Hex

ON ON ON ONOFFON ON

OFFON ON ON OFFOFF OFFON ON ON

ONON ON ON ON

Reutilizar a componente do Experimento 3!!!

• Integrar o conversor ao circuito Calculadora• Importar o arquivo de correspondência (Assignments > Import

Assignments)• Compilar• Programar FPGA• Vistar o circuito executando os casos do roteiro.

Calculadora