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
1
FPGAs

FPGAs: Field-Programmable Logic Arrays




Empresas representativas


2
Introduzidos no começo dos anos 80
Com crescente utilização
Classe de dispositivos de Lógica
Programável
Xilinx Inc. (www.xilinx.com)
Altera Inc. (www.altera.com)
FPGAs


Cada empresa tem um conjunto de FPGAs
Exemplo Xilinx







3
Spartan-II
Spartan-IIE
Spartan-III
Virtex
Virtex-II
Virtex-Pro
Virtex-4 (nova)
FPGAs

4
Estrutura genérica
Exemplo: Spartan-IIE 1.8V
FPGA

Composto por 5 elementos principais:





5
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
6
Exemplo: Spartan-IIE 1.8V
FPGA

Cada CLB é
constituído por
dois Slices
LC: logic cell
Slice
7
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
8
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.
9
Exemplo: Spartan-IIE 1.8V
FPGA

10
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
11
Exemplo: Spartan-IIE 1.8V
FPGA

Programação
do FPGA é
constituída por
ficheiros de
bits cujo
tamanho
depende do
sistema digital
implementado
12
Projecto Hardware
com FPGAs
13
Projecto Hardware com
FPGAs




14
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

15
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



Vantagens dos desenhos com hierarquia









16
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:


Ambos têm vantagens e desvantagens
Contudo, com a complexidade dos FPGAs, a hierarquia é mais vantajosa
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)
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;
17
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;
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)
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;
19
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;
20
Pipelining

Forma de aumentar o ritmo de computação


21
Inserir registos entre lógica de computação
Nos FPGAs os registos já existem
Sumário



22
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
Download

Slides sobre desenvolvimento de sistemas digitais em FPGAs