Projecto de Hardware com FPGAs

Slides:



Advertisements
Apresentações semelhantes
Contadores e Registradores
Advertisements

Virtex-II Pro X Platform FPGA
MATRIZES DE PORTAS PROGRAMÁVEIS NO CAMPO (FPGA)
Circuitos Lógicos e Organização de Computadores Capítulo 8 –Circuitos Seqüenciais Síncronos Ricardo Pannain
abs access after alias all and architecture array assert attribute begin block body buffer bus case component configuration constant disconnect downto.
Dispositivos lógicos programáveis (DLP)
VHDL - VHSIC Hardware Description Language
VHDL - VHSIC Hardware Description Language
Fernando Gehm Moraes Ney Laert Vilar Calazans
LABORG Parte 2 - Introdução a FPGAs e Prototipação de Hardware
Fernando Moraes e Ney Laert Vilar Calazans
César Augusto Missio Marcon Ney Laert Vilar Calazans
Ney Laert Vilar Calazans
Parte 4 - Introdução a FPGAs
VHDL Linguagem de Descrição e Síntese de Circuitos Digitais Sistemas Digitais.
VHDL AULA - 2.
Circuitos Lógicos Sequenciais
MC542 Organização de Computadores Teoria e Prática
Introdução a circuitos lógicos
Dicas de Circuitos MO801/MC912.
VHDL (outros tópicos) MO801/MC912.
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.
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.
Dispositivos de Lógica Programável
Circuitos Sequenciais
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}
Dispositivos Lógicos Programáveis (PLD)
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.
Circuitos combinatórios
Arquitetura de Sistemas Digitais FPGA
Máquina de Estados Finito
ALTERA FLEX 10K CARACTERÍSTICAS
Exercícios Referentes à Prova P2
Circuitos Seqüenciais Descrição VHDL
UTFPR – Prof. Carlos Raimundo Erig Lima. .….… STD_LOGIC (equivalente ao BIT) STD_LOGIC_VECTOR (equivalente ao BIT_VECTOR)
EPUSP – PTC Guido Stolfi
Engenharia de Software para Computação Embarcada
Antonyus Pyetro Infra-estrutura de Hardware – IF674
Dispositivos Lógicos Programáveis (DLP) Ideia e Arquiteturas
Latches e Flip-Flops GSI008 – Sistemas Digitais
Placa de prototipação H.O.T. II
Validação de VHDL: técnicas e ferramentas
LABORG Parte 2 - Introdução a FPGAs e Prototipação de Hardware
Circuitos Seqüenciais Contadores
Circuitos Seqüenciais
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
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
BRAZIL IP The BrazilIP Network Verilog Curso do Brazil-IP Elmar Melcher UFCG
ENGA78 – Síntese de Circuitos Digitais
Circuitos Sequenciais
Descrição de Circuitos Combinacionais em VHDL
Dispositivos Programáveis
Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos.
Introdução à Programação da FPGA João M. P. Cardoso.
Prof. Anderson Royes Terroso Abril, 2000.
Introdução a VHDL Monitoria de Digitais.
Introdução ao VHDL João M. P. Cardoso.
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.
Dispositivos Reconfiguráveis
Cap. V – Análise e Síntese de Circuitos Sequenciais Síncronos
Introdução à Programação da FPGA
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.
Arquitetura interna de FPGAs da família Virtex
Transcrição da apresentação:

Projecto de Hardware com FPGAs Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.pt URL: http://w3.ualg.pt/~jmcardo 2004/2005

FPGAs FPGAs: Field-Programmable Logic Arrays Empresas representativas Introduzidos no começo dos anos 80 Com crescente utilização Classe de dispositivos de Lógica Programável Empresas representativas Xilinx Inc. (www.xilinx.com) Altera Inc. (www.altera.com)

FPGAs Cada empresa tem um conjunto de FPGAs Exemplo Xilinx Spartan-II Spartan-IIE Spartan-III Virtex Virtex-II Virtex-Pro Virtex-4 (nova)

FPGAs Estrutura genérica

Exemplo: Spartan-IIE 1.8V FPGA Composto por 5 elementos principais: IOBs permitem o interface entre os pinos do chip e a lógica interna CLBs os elementos lógicos para construir funções Blocos de RAM dedicados cada com 4096 bits Interligações versáteis multi-nível Clock DLLs: para compensação do atraso na distribuição do relógio e controlo do relógio

Exemplo: Spartan-IIE 1.8V FPGA

Exemplo: Spartan-IIE 1.8V FPGA Cada CLB é constituído por dois Slices LC: logic cell Slice

Exemplo: Spartan-IIE 1.8V FPGA LUT: Look-Up Table Geradores de funções: Implementados com 4-input look-up tables (LUTs) LUTs: Além de poderem ser utilizados para gerar funções: Cada LUT pode ser utilizado como uma RAM síncrona de 16 x 1-bit s 2 LUTs num slice podem ser combinados para produzir 16 x 2-bit or 32 x 1-bit RAM síncrona, Ou uma 16 x 1-bit RAM síncrona de duplo porto. LUTs permitem implementar 16-bit shift registers rápidos

Exemplo: Spartan-IIE 1.8V FPGA Elementos de armazenamento Elementos de armazenamento podem ser configurados: Flip-flops tipo D ou latches. A entrada D pode vir de geradores de funções no slice ou diretamente das entradas do slice Adicionalmente aos sinais Clock e Clock Enable, cada slice tem sinais de set ou reset síncronos ou assíncronos.

Exemplo: Spartan-IIE 1.8V FPGA Estrutura do CLB

Exemplo: Spartan-IIE 1.8V FPGA Blocos de RAM Cada célula de RAM é constituída por uma memória síncrona, de duplo porto, de 4096 bits O tamanho de bits de cada porto pode ser configurado independente

Exemplo: Spartan-IIE 1.8V FPGA Programação do FPGA é constituída por ficheiros de bits cujo tamanho depende do sistema digital implementado

Projecto Hardware com FPGAs

Projecto Hardware com FPGAs Hardware a implementar é descrito numa linguagem de descrição de hardware (ex.: VHDL) A ferramenta de síntese lógica encarrega-se de criar a estrutura do circuito que implementa a especificação A ferramenta de Place & Route mapeia, coloca encaminha o circuito no FPGA utilizado Ligação de sinais internos a pinos do dispositivo é realizada com indicações do programador: por atributos em VHDL ou com a utilização de um ficheiro de restrições (*.ucf) Por último é gerado o código binário que programa o hardware

Projecto Hardware com FPGAs Fluxo de projecto de hardware digital em FPGAs utilizando síntese lógica

Hierarquia no desenho? Projectos com HDLs podem ser modelos planares com um único módulo ou constituídos por muitos módulos pequenos Ambos têm vantagens e desvantagens Contudo, com a complexidade dos FPGAs, a hierarquia é mais vantajosa Vantagens dos desenhos com hierarquia Verificação/simulação mais fácil e mais rápida Possibilidade de vários engenheiros trabalharem no mesmo desenho ao mesmo tempo Aumenta a velocidade da compilação do desenho Reduz tempo de desenho, ao permitir a re-utilização de módulos neste e nos próximos desenhos Desenhos mais fáceis de perceber Fluxo de projecto mais fácil de gerir Desvantagens dos desenhos com hierarquia: Mapeamento do desenho no FPGA pode não ser tão boa entre fronteiras de módulos: pode causar menor utilização do dispositivo e diminuir a performance do desenho Controlo do ficheiro do desenho torna-se mais difícil Desenhos tornam-se mais verbose Algumas destas desvantagens podem ser torneadas com uma escolha adequada da hierarquia

Utilização das RAM distribuídas do FPGA library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity ram_dist_single is generic( INIT_00: String := "1F1E1D1C1B1A191817161514131211100F0E0D0C0B0A0980706050403020100"; d_width : integer := 8; addr_width : integer := 5; mem_depth : integer := 32); port ( o : out STD_LOGIC_VECTOR(d_width - 1 downto 0); we, wclk : in STD_LOGIC; d : in STD_LOGIC_VECTOR(d_width - 1 downto 0); addr : in STD_LOGIC_VECTOR(addr_width - 1 downto 0)); end ram_dist_single; architecture xilinx of ram_dist_single is type mem_type is array (mem_depth - 1 downto 0) of STD_LOGIC_VECTOR (d_width - 1 downto 0); signal mem : mem_type; begin process(wclk, we, addr) if (rising_edge(wclk)) then if (we = '1') then mem(conv_integer(addr)) <= d; end if; end process; o <= mem(conv_integer(addr)); end xilinx;

Utilização de blocos de RAM do FPGA library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ram_block is generic( data_width : integer := 8; address_width : integer := 8; mem_depth : integer := 256); port( data : in std_logic_vector(data_width-1 downto 0); address : in std_logic_vector(address_width-1 downto 0); en, we, clk : in std_logic; q : out std_logic_vector(data_width-1 downto 0)); end ram_block; architecture rtl of ram_block is type mem_array is array (mem_depth-1 downto 0) of std_logic_vector (data_width-1 downto 0); signal mem : mem_array; attribute syn_ramstyle : string; attribute syn_ramstyle of mem : signal is "block_ram"; signal raddress : std_logic_vector(address_width-1 downto 0); begin l0: process (clk, address) if (clk = '1' and clk'event) then if (we = '1') then mem(CONV_INTEGER(address)) <= data; end if; q <= mem(CONV_INTEGER(address)); end process; end rtl;

Utilização de blocos de RAM do FPGA library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ram_block is generic( data_width : integer := 8; address_width : integer := 8; mem_depth : integer := 256); port( data : in std_logic_vector(data_width-1 downto 0); address : in std_logic_vector(address_width-1 downto 0); en, we, clk : in std_logic; q : out std_logic_vector(data_width-1 downto 0)); end ram_block; architecture rtl of ram_block is type mem_array is array (mem_depth-1 downto 0) of std_logic_vector (data_width-1 downto 0); signal mem : mem_array; attribute syn_ramstyle : string; attribute syn_ramstyle of mem : signal is "block_ram"; signal raddress : std_logic_vector(address_width-1 downto 0); begin l0: process (clk) if (clk = '1' and clk'event) then if (we = '1') then mem(CONV_INTEGER(address)) <= data; else q <= mem(CONV_INTEGER(address)); end if; end process; end rtl;

Utilização de blocos de RAM do FPGA entity ram_block_dual is generic( data_width : integer := 8; address_width : integer := 8; mem_depth : integer := 256); port( data : in std_logic_vector(data_width-1 downto 0); address1, address2 : in std_logic_vector(address_width-1 downto 0); en, we, clk : in std_logic; q : out std_logic_vector(data_width-1 downto 0)); end ram_block_dual; architecture rtl of ram_block_dual is type mem_array is array (mem_depth-1 downto 0) of std_logic_vector (data_width-1 downto 0); signal mem : mem_array; attribute syn_ramstyle : string; attribute syn_ramstyle of mem : signal is "block_ram"; signal raddress : std_logic_vector(address_width-1 downto 0); begin WRITE: process (clk, address1) if (clk = '1' and clk'event) then if (we1 = '1') then mem(CONV_INTEGER(address1)) <= data; end if; end process; READ: process (clk, address2) q <= mem(CONV_INTEGER(address2)); end rtl;

Pipelining Forma de aumentar o ritmo de computação Inserir registos entre lógica de computação Nos FPGAs os registos já existem

Sumário FPGAs são dispositivos Programáveis, substitutos de hardware, substitutos de tarefas desempenhadas por microprocessadores Projecto parte de uma HDL: VHDL, por exemplo Partir de software é um tópico muito importante de investigação: compiladores Arquitectura é escolhida pelo projectista Para se tirar partido dos recursos do FPGA é necessário Ler com atenção as sugestões em termos de estilo de VHDL dadas pelo fabricante de FPGAs