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

Slides:



Advertisements
Apresentações semelhantes
Circuitos Lógicos e Organização de Computadores Capítulo 8 –Circuitos Seqüenciais Síncronos Ricardo Pannain
Advertisements

Projecto de Hardware com FPGAs
abs access after alias all and architecture array assert attribute begin block body buffer bus case component configuration constant disconnect downto.
VHDL - VHSIC Hardware Description Language
VHDL - VHSIC Hardware Description Language
Fernando Gehm Moraes Ney Laert Vilar Calazans
Fernando Moraes e Ney Laert Vilar Calazans
César Augusto Missio Marcon Ney Laert Vilar Calazans
Ney Laert Vilar Calazans
Verilog AULA - 3.
VHDL AULA - 2.
VHDL Very High Speed Integrated Circuit Hardware Description Language Prof. Eduardo Todt 2008.
Monitores.
MC613 Laboratório de Circuitos Lógicos
VHDL Introdução Paulo C. Centoducatte fevereiro de 2005
VHDL Introdução Paulo C. Centoducatte fevereiro de 2005
Introdução a circuitos lógicos
Verificação MO801/MC912.
Dicas de Circuitos MO801/MC912.
VHDL (outros tópicos) MO801/MC912.
MC Prof. Paulo Cesar Centoducatte MC542 Organização de Computadores Teoria e Prática.
MC542 Organização de Computadores Teoria e Prática
MO Prof. Paulo Cesar Centoducatte MC542 Organização de Computadores Teoria e Prática.
Tiago Salmito SystemC Tiago Salmito
Semana de Engenharia Introdução a Linguagem de Descrição de HW VHDL a ao Projeto Baseado em Lógica de Programação ALTERA Prof. Daniel Barros Júnior
FLI – ModelSim Pedro Velho.
Library IEEE; use ieee.std_logic_1164.all; use IEEE.std_logic_arith.all;
Tipos de dados Existentes BIT - {0, 1} BIT_VECTOR - {vetor de BIT}
Máquina de Estados Uma máquina de estados finitos ou autômato finito é uma modelagem de um comportamento composto por estados, transições e ações Um estado.
Construção sequencial CASE WHEN
Hardware Description Language (HDL)
7 Abstração Genérica Unidades genéricas e instanciação.
Modelagem de Sistemas com VHDL
DSP – TMS320LF2407A.
Fundamentos de Eletrônica Digital
Máquina de Estados Finito
Ada.
Circuitos Seqüenciais Descrição VHDL
Dispositivos Lógicos Programáveis (DLP) Ideia e Arquiteturas
Validação de VHDL: técnicas e ferramentas
Circuitos Seqüenciais Contadores
Projeto de um Comparador Descrição Estrutural x Comportamental
Test-bench para Somador
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Projeto de Somador com e sem Sinal Descrição.
Diagramas de Blocos e Descrição VHDL
MARCELO ARAUJO LIMA JILSEPH LOPES
Projeto de Circuito Combinacional Unidade Lógica e Aritmética (ULA)
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Memórias.
Ney Laert Vilar Calazans
Descrição de Circuitos Combinacionais em VHDL
Hardware Description Language Aula 4 –VHDL (introdução)
Hardware Description Language Aula 5 -VHDL Prof. Afonso Ferreira Miguel, MSc.
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Tecgraf PUC-Rio Fevereiro de 2014 IDL.
Prof. Anderson Royes Terroso Abril, 2000.
Parte 3 Seção de Dados e Unidade de Controle
VERILOG.
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Exercícios Circuitos Descritos em VHDL.
Introdução a VHDL Monitoria de Digitais.
Revisão do Quartus II e Ferramentas de Simulação
Introdução ao VHDL João M. P. Cardoso.
1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital.
1. 2 Objetivos 1.Análise dos resultados da primeira avaliação. Notas importantes para futuro. 2.Comunicação de placas baseadas em FPGAs com computador.
Verilog HDL. Introduzida em 1985 pela Gateway Design System Corporation Após 1990, passou a ser de domínio público, e em 1995 passou a ser padrão IEEE.
Graph Database Neo4j Edson Barboza.
VHDL (Very High Speed Integrated Circuit HDL (VHSIC HDL)) GRECO CIn-UFPE.
Projeto de Circuitos Integrados Semidedicados Prof. Marcio Cunha Aula 04 – Linguagem de Descrição de Hardware: VHDL.
Introdução à Programação da FPGA
Projeto de Circuitos Integrados Semidedicados
Máquina de Estados Finitos com Dados (FSMD)
Máquina de Estados Uma máquina de estados finitos ou autômato finito é uma modelagem de um comportamento composto por estados, transições e ações Um estado.
Transcrição da apresentação:

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

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;

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;

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

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

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

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

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;

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 …

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

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;

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;

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

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;

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;

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

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;

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;

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;

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;

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;

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;

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;

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;

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

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;

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;

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;

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

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;

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;

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;

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