1 / 22

Projecto de Hardware com FPGAs

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 Introduzidos no começo dos anos 80 Com crescente utilização

sidney
Télécharger la présentation

Projecto de Hardware com FPGAs

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. FPGAs • FPGAs: Field-Programmable Logic Arrays • 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)

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

  4. FPGAs • Estrutura genérica

  5. 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

  6. Exemplo: Spartan-IIE 1.8V FPGA

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

  8. 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

  9. 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.

  10. Exemplo: Spartan-IIE 1.8V FPGA • Estrutura do CLB

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

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

  13. Projecto Hardware com FPGAs

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

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

  16. 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

  17. 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) begin if (rising_edge(wclk)) then if (we = '1') then mem(conv_integer(addr)) <= d; end if; end if; end process; o <= mem(conv_integer(addr)); end xilinx;

  18. 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) begin if (clk = '1' and clk'event) then if (we = '1') then mem(CONV_INTEGER(address)) <= data; end if; end if; q <= mem(CONV_INTEGER(address)); end process; end rtl;

  19. 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) begin 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 if; end process; end rtl;

  20. 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) begin if (clk = '1' and clk'event) then if (we1 = '1') then mem(CONV_INTEGER(address1)) <= data; end if; end if; end process; READ: process (clk, address2) begin q <= mem(CONV_INTEGER(address2)); end process; end rtl;

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

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

More Related