35
Projetos Grandes MO801/MC912

Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Embed Size (px)

Citation preview

Page 1: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Projetos Grandes

MO801/MC912

Page 2: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Roteiro

• Componentes

• Configurações

• Instanciação múltipla

• Instanciação condicional

• Atenção: Os exemplos são cumulativos

Page 3: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Componentes

• Forma de descrever a interface de um módulo sem indicar o conteúdo

• Pode ser colocado num pacote e distribuído aos demais desenvolvedores

• Pode esconder entidades complexas através de uma configuração– Removendo portas– Removendo generics

Page 4: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Declaração

component flipflop is

generic(Tprop,Tsetup,Thold:delay_lengh);

port (clk : in bit;

clr : in bit;

d : in bit;

q : out bit);

end component flipflop;

Page 5: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Instanciação

entity reg4 isport (clk, clr, in bit; d : in bit_vector(0 to 3);

q : out bit_vector(0 to 3));end entity reg4;architecture struct of reg4 is

component flipflop …begin

bit0 : component flipflop generic map (2 ns, 2 ns, 1 ns) port map (clk, clr, d(0), q(0));

bit1 : …bit2 : …bit3 : …

end architecture struct;

Page 6: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Sugestão de uso

• Declarar os componentes dentro de pacotes– Declarar num pacote todos os componentes

necessários aos submódulos

• Utiliza-los de forma a desplugar totalmente a implementação do uso

• Utiliza-los como uma funcionalidade existente, sem preocupação com o conteúdo

Page 7: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Instanciação de Entidades x Componentes

• Instanciar uma entidade indica exatamente– o módulo que será colocado no circuito– como ele será ligado

• Instanciar um componente indica apenas que algo será ligado naquele lugar– Não explicita a entidade que será utilizada– As conexões explícitas são apenas para as

portas do componente, que podem ser diferentes da entidade

Page 8: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Mapeamento Componente x Entidade

• Mapeamento nominal– Forma mais simples– O componente é mapeado diretamente na

entidade de mesmo nome da biblioteca atual– Todas as portas e generics são mapeados de

forma similar

• Mapeamento através de configuração– Configurações de um componente– Configurações de uma arquitetura– Configurações de todos os submódulos

Page 9: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Configurações

• Explicita o mapeamento componente x entidade

• Define parâmetros para componentes• Faz o mapeamento de pinos da entidade que

não estão presentes no componente• Define a arquitetura que será utilizada• Define parâmetros para outros elementos da

linguagem• Múltiplas configurações podem ser criadas• Pode ser instanciada

Page 10: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo

library star_lib;use star_lib.edge_triggered_Dff;configuration reg4_gate_level of reg4 is

for struct -- architecture of reg4for bit0 : flipflop

use entity edge_triggered_Dff(hi_fanout);end for;for others : flipflop

use entity edge_triggered_Dff(basic);end for;

end for; -- end of architecture structend configuration reg4_gate_level;

Page 11: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Configurando Instâncias

• Configurando uma instância– for bit0 : flipflop …

• Configurando todas as instâncias– for all : flipflop …

• Configurando todas as instâncias ainda não configuradas– for others : flipflop …

Page 12: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Configurando Múltiplos Níveis

• Utilizando uma configuração já existentefor flag_reg : reg4

use configuration work.reg4_gate_level;

end for;

Page 13: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo (instanciação)architecture registered of counter is component digit_register is port ( clk, clr : in bit; d : in digit; q : out digit ); end component digit_register; signal current_val0, current_val1, next_val0, next_val1 : digit;begin val0_reg : component digit_register port map ( clk => clk, clr => clr, d => next_val0, q => current_val0 );

val1_reg : component digit_register port map ( clk => clk, clr => clr, d => next_val1, q => current_val1 );…end architecture registered;

Page 14: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo (configuração)

configuration counter_down_to_gate_level of counter is

for registered

for all : digit_register use configuration work.reg4_gate_level; end for;

-- . . . -- bindings for other component instances

end for; -- end of architecture registered

end configuration counter_down_to_gate_level;

Page 15: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Outra Forma

• Configurar toda a hierarquia com uma só configuração

• Pouco flexível

• Difícil de interpretar

Page 16: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemploconfiguration full of counter is for registered -- architecture of counter for all : digit_register use entity work.reg4(struct); for struct -- architecture of reg4 for bit0 : flipflop use entity edge_triggered_Dff(hi_fanout); end for; for others : flipflop use entity edge_triggered_Dff(basic); end for; end for; -- end of architecture struct end for; -- . . . -- bindings for other component instances end for; -- end of architecture registeredend configuration full;

Page 17: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Instanciando uma Configuração

architecture top_level of alarm_clock is use work.counter_types.digit;

signal reset_to_midnight, seconds_clk : bit; signal seconds_units, seconds_tens : digit; …begin seconds : configuration work.counter_down_to_gate_level port map ( clk => seconds_clk, clr => reset_to_midnight, q0 => seconds_units, q1 => seconds_tens ); …end architecture top_level;

Page 18: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Generic e Port Map

• Podem ser definidos na configuração

• Permitem ocultar parte de uma entidade de um componente– Removendo generics (Exemplo 1)– Removendo portas (Exemplo 2)– Todas as portas e generics precisam ser

definidas no final

Page 19: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo 1 (Entidade Base)

library ieee; use ieee.std_logic_1164.all;

entity reg is

generic ( t_setup, t_hold, t_pd : delay_length;

width : positive );

port ( clock : in std_logic;

data_in : in std_logic_vector(0 to width - 1);

data_out : out std_logic_vector(0 to width - 1) );

end entity reg;

Page 20: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo 1 (Componente)architecture structural of controller is component reg is generic ( width : positive ); port ( clock : in std_logic; data_in : in std_logic_vector(0 to width - 1); data_out : out std_logic_vector(0 to width - 1) ); end component reg; …begin state_reg : component reg generic map ( width => state_type'length ) port map ( clock => clock_phase1, data_in => next_state, data_out => current_state ); …end architecture structural;

Page 21: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo 1 (Configuração)

configuration controller_with_timing of controller is

for structural

for state_reg : reg

use entity work.reg(gate_level)

generic map ( t_setup => 200 ps, t_hold => 150 ps, t_pd => 150 ps, width => width );

end for;

end for;

end configuration controller_with_timing;

Page 22: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo 2 (Entidade Base)

entity decoder_3_to_8 is

generic ( Tpd_01, Tpd_10 : delay_length );

port ( s0, s1, s2 : in bit;

enable : in bit;

y0, y1, y2, y3, y4, y5, y6, y7 : out bit );

end entity decoder_3_to_8;

Page 23: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo 2 (Componente)architecture structure of computer_system is component decoder_2_to_4 is generic ( prop_delay : delay_length ); port ( in0, in1 : in bit; out0, out1, out2, out3 : out bit ); end component decoder_2_to_4;…begin interface_decoder : component decoder_2_to_4 generic map ( prop_delay => 4 ns ) port map ( in0 => addr(4), in1 => addr(5), out0 => interface_a_select, out1 => interface_b_select, out2 => interface_c_select, out3 => interface_d_select );…end architecture structure;

Page 24: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo 2 (Configuração)

configuration computer_structure of computer_system is for structure for interface_decoder : decoder_2_to_4 use entity work.decoder_3_to_8(basic) generic map ( Tpd_01 => prop_delay, Tpd_10 =>

prop_delay ) port map ( s0 => in0, s1 => in1, s2 => '0', enable => '1', y0 => out0, y1 => out1, y2 => out2, y3 => out3, y4 => open, y5 => open, y6 => open, y7 => open ); end for; … end for;end configuration computer_structure;

Page 25: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Configurando sem Configuration

• Usado para selecionar a entidade de um componente e fazer as configurações sem definir uma configuração explícita

• Uso comum: simplificar um componente

• Exemploentity nand3 is

port (a, b, c : in bit;

y : out bit);

end entity nand3;

Page 26: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Criando um Componente nand2library gate_lib;architecture ideal of logic_block is component nand2 is port ( in1, in2 : in bit; result : out bit ); end component nand2; for all : nand2 use entity gate_lib.nand3(behavioral) port map ( a => in1, b => in2, c => '1', y => result ); -- . . . -- other declarationsbegin gate1 : component nand2 port map ( in1 => s1, in2 => s2, result => s3 ); -- . . . -- other concurrent statementsend architecture ideal;

Page 27: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Instanciação Múltipla

• Permite replicar componentes numa estrutura regular

• Permite interligar os componentes

• Visão geral: Permite replicar código– Incluindo processos

Page 28: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo (Entidade)

library ieee; use ieee.std_logic_1164.all;

entity register_tristate is

generic ( width : positive );

port ( clock : in std_logic;

out_enable : in std_logic;

data_in : in std_logic_vector(0 to width - 1);

data_out : out std_logic_vector(0 to width - 1) );

end entity register_tristate;

Page 29: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo (Componentes)

architecture cell_level of register_tristate is

component D_flipflop is port ( clk : in std_logic; d : in std_logic; q : out std_logic ); end component D_flipflop;

component tristate_buffer is port ( a : in std_logic; en : in std_logic; y : out std_logic ); end component tristate_buffer;

Page 30: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo (Arquitetura)

begin cell_array : for bit_index in 0 to width - 1 generate signal data_unbuffered : std_logic; begin cell_storage : component D_flipflop port map ( clk => clock, d => data_in(bit_index), q => data_unbuffered ); cell_buffer : component tristate_buffer port map ( a => data_unbuffered, en => out_enable, y => data_out(bit_index) ); end generate cell_array;end architecture cell_level;

Page 31: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Instanciação Condicional

• Permite instanciar um componente somente caso uma condição seja verdadeira

• Pode habilitar ou desabilitar certas funcionalidades do circuito– Últil para testes

• A condição pode vir de um generic

Page 32: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo (Entidade)

library ieee; use ieee.std_logic_1164.all;

entity shift_reg is

port ( phi1, phi2 : in std_logic;

serial_data_in : in std_logic;

parallel_data : inout std_logic_vector );

end entity shift_reg;

Page 33: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo (Componente)

architecture cell_level of shift_reg is

alias normalized_parallel_data : std_logic_vector(0 to parallel_data'length - 1) is parallel_data;

component master_slave_flipflop is port ( phi1, phi2 : in std_logic; d : in std_logic; q : out std_logic ); end component master_slave_flipflop;

Page 34: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Exemplo (Arquitetura)begin reg_array : for index in normalized_parallel_data'range generate begin first_cell : if index = 0 generate begin cell : component master_slave_flipflop port map ( phi1, phi2, d => serial_data_in, q => normalized_parallel_data(index) ); end generate first_cell; other_cell : if index /= 0 generate begin cell : component master_slave_flipflop port map ( phi1, phi2, d => normalized_parallel_data(index - 1), q => normalized_parallel_data(index) ); end generate other_cell; end generate reg_array;end architecture cell_level;

Page 35: Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

Comentários Finais

• É possível configurar as instâncias do generate

• É possível criar entidades recursivas com generate instanciando a própria entidade dentro dela

• Mais detalhes, consultar capítulo 14 do livro