A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos."— Transcrição da apresentação:

1 Projetos Grandes MO801/MC912

2 Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos

3 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

4 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;

5 Instanciação entity reg4 is port (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;

6 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

7 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

8 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

9 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

10 Exemplo library star_lib; use star_lib.edge_triggered_Dff; configuration reg4_gate_level of reg4 is 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 configuration reg4_gate_level;

11 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 …

12 Configurando Múltiplos Níveis Utilizando uma configuração já existente for flag_reg : reg4 use configuration work.reg4_gate_level; end for;

13 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;

14 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;

15 Outra Forma Configurar toda a hierarquia com uma só configuração Pouco flexível Difícil de interpretar

16 Exemplo configuration 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 registered end configuration full;

17 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;

18 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

19 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;

20 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;

21 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;

22 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;

23 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;

24 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;

25 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 Exemplo entity nand3 is port (a, b, c : in bit; y : out bit); end entity nand3;

26 Criando um Componente nand2 library 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 declarations begin gate1 : component nand2 port map ( in1 => s1, in2 => s2, result => s3 ); --... -- other concurrent statements end architecture ideal;

27 Instanciação Múltipla Permite replicar componentes numa estrutura regular Permite interligar os componentes Visão geral: Permite replicar código –Incluindo processos

28 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;

29 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;

30 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;

31 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

32 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;

33 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;

34 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;

35 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


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

Apresentações semelhantes


Anúncios Google