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
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
Complemento e Troca de Sinal
• Complemento: complementar bit a bit.
• Troca de sinal: complementar bit a bit e somar “1”.
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
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
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!!!
Top Related