1
Outline
 Hardware reconfigurável (FPGA);
 Placas de desenvolvimento ;
 Ferramenta ISE 6.x. Exemplos de desenvolvimento de
circuitos;
 Interface entre FPGAs e dispositivos periféricos;
 Tutorias
2
I/O
I/O
DLL1
Block RAM
DLL2
Block RAM
DLL3
DLL0
3
Xilinx Spartan-II
Xilinx Spartan-IIE
Xilinx Spartan-3
Xilinx Virtex-II
Xilinx Virtex IIPro
4
CLBs
95
625
1536
237.5
62.5
14000
12000
10000
XC4010XL
Spartan-IIe
Virtex-II
Virtex-IIP
8000
6000
4000
2000
0
1st Qtr
5
I/O
Block RAM
I/O
DLL2
Block RAM
DLL3
DLL concede 4 fases do sinal
de relógio principal, podendo
duplicar o relógio ou dividí-lo
por 1.5, 2, 2.5, 3, 4, 5, 8, 16.
DLL1
CLK0
CLK90
CLK180
CLK270
I/O
DLL0
I/O
Look-Up
Table
Package
Pin
Programmable
Bias and
ESD Network
Carry
and
Control
Logic
S
l
i
c
e
Package Pin
Programmable
Output Buffer
Internal
Reference
Look-Up
Table
Programmable
Delay
Programmable
Input Buffer
To Next I/O
To other
External VREF Inputs
of Bank
Package Pin
Carry
and
Control
Logic
2
Slice 1
6
Package
Pin
Programmable
Bias and
ESD Network
Package Pin
Programmable
Output Buffer
Internal
Reference
Programmable
Delay
Programmable
Input Buffer
Package Pin
To Next I/O
To other
External VREF Inputs
of Bank
7
Logic Cell (LC)
Slice
S
l
i
c
e
2
Slice 1
CLB
1 CLB
=
2 Slices
=
4 LC
8
9
16-bit shift register
16 x 1 bit synchronous RAM
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
f
10
16 x 2-bit
or
32 x 1-bit
synchronous RAM
or
16 x 1-bit
dual-port
synchronous RAM
11
5
9
1
?
1
4:1 multiplexer
12
6
19
1
?
1
8:1 multiplexer
13
14
DLL concede 4 fases do sinal
de relógio principal, podendo
duplicar o relógio ou dividí-lo
por 1.5, 2, 2.5, 3, 4, 5, 8, 16.
CLK0
CLK90
CLK180
CLK270
15
16
I/O
Block RAM
I/O
DLL2
Block RAM
DLL3
DLL concede 4 fases do sinal
de relógio principal, podendo
duplicar o relógio ou dividí-lo
por 1.5, 2, 2.5, 3, 4, 5, 8, 16.
DLL1
CLK0
CLK90
CLK180
CLK270
I/O
DLL0
I/O
Look-Up
Table
Package
Pin
Programmable
Bias and
ESD Network
Carry
and
Control
Logic
S
l
i
c
e
Package Pin
Programmable
Output Buffer
Internal
Reference
Look-Up
Table
Programmable
Delay
Programmable
Input Buffer
To Next I/O
To other
External VREF Inputs
of Bank
Package Pin
Carry
and
Control
Logic
2
Slice 1
17
max 1200 pins (XC2VP125)
I/O
DLL1
DLL2
max 55616
slices
(XC2VP125)
Block RAM
I/O
Block RAM
DLL3
DLL0
PowerPC
processor blocks
max 4 (XC2VP125)
18*18 bit
multiplier blocks
max 556 (XC2VP125)
max 556 blocks
(18 Kbits) or
10 008 Kbits
(XC2VP125)
Rocket I/O
transceiver blocks
max 24 (XC2VP125)
18
19
Memória Flash
64 Mbit
JTAG
Alimentação Porta
paralela
12 V
CPLD XCR3128XL
relógio 80 MHz
Interruptor de
alimentação
SRAM 0
256K x 36 bit
SRAM 1
256K x 36 bit
Vídeo DAC
VGA
FPGA
XC2S200
-5-FG456
Descodificador
de entrada
de vídeo
Conector
de expansão
20
E22 - clock F20 - sync
R[7:0]
K22,K21,K19,L22,L21,L18,L17,L20
G[7:0]
H19,H21,J19,J22,J18,J20,K18,J21
B[7:0]
F21,F19,F22,G19,G20,G18,G21,H18
DAC
R
G
B
A10
F18 - blank
relógio
B10
H-sync
V-sync
relógio
F11
8
10
12
14
18
20
22
24
28
30
32
34
38
40
42
44
47
45
43
41
37
35
33
31
27
25
23
21
17
15
13
11
5
FPGA
E21
D22
E11
W18
AA20
Y18
V17
AA19
AB20
W17
AA18
V16
Y17
AB19
AB18
W16
AA17
Y16
V15
AB17
AB16
Y15
AA15
AB15
W15
Y14
V14
AA14
W14
AB14
V13
Y13
AA13
AB13
W13
Y11
V13
W18
W13
AB14 AA19
AA20
AB20
W14
AA14
Y18
U20
W11
A11
A22
Enable
V17
80 MHz
AB13
W17
AA18
V20
LEDs
Enable
FPGA
Conector de expansão
AA13
Y13
21
FPGA
Memória
Flash
Data(15:8):
E20,D21,C22,B19,C18,D17,A19,B18
Data(7:0):
Interruptores
Porta
paralela
Data
Control
Status
Y21,T22,R21,N22,K20,H20,H22,D20
FP_RW
FP_COM[2:0]
CPLD
FP_PARPORT_MASTER
AA12
Y12
V12
ZZ,ADSP AA10
Y10
(0)
BWE
ler-1/
escrever-0
clock
Output
enable (OE)
Chip enable
(CE)
ADV
Data
Address
(17:0)
RAM estática (banco 1)
V11,Y8,W8,W7,AA7
AB6,AA6,V8,AB5
AA5,Y7,W6, AB4,
AA4,Y6,V7,AB3,W5
P(3:0): L5,L1,L3,L4
C8: B3(7:0): F1,F2,H5,G3,G4,E1,E2,F3
B8: B2(7:0): G5,F4,E3,D2,F5,C1,E4,B1
D9: B1(7:0): L6,K2,K4,K3,K1,K5,J1,J3
A8: B0(7:0): J2,J5,H1,J4,H2,H3,G1,H4
A5,D6,C6,B5,E7,A4
E6,B4,A3,B3,D5,C5
Address
(17:0)
A9,E8,D8,C7,D7,B6
D10 A7 E9 C9 E10
(0) (0) (0)
Data
ADV
Chip enable
(CE)
Output
enable (OE)
RAM estática (banco 0)
clock
ler-1/
escrever-0
BWE
A20
U12
address(23:0): E15,A17,D15,C16,D14,E14,A16, C15,B15,E13,A15,F12,
C14,B14,A14,D13,C13,B13,E12, A13,B12,D12,C12,D11
C10 ZZ,ADSP
B9
(0)
FPGA
FPGA
STS:D16, Byte:E16, CE:B17, OE:C17, WE:A18
AB10 W10 AB8 V9 AA9
(0) (0) (0)
V4,V3,W3,Y2  P(3:0)
P3,P5,R1,P4,P2,N5,P1,N4  B3(7:0): W9
N3,N2,M5,N1,M4,M3,M6,M1B2(7:0): AB9
22
W2,Y1,U4,V2,W1,T4,T3,U2B1(7:0):
Y9
T5,V1,R5,U1,T2,R4,T1,R2 B0(7:0): V10
Controlo de USB
USB
RS232
Controlo de VGA
Interruptor
de alimentação
on
RAM estática
256Kx16-bit
FPGA
XC2S300E
-6FT256
off
VGA
Memória Flash
1Mx8/512Kx16-bit
Botões,
interruptores,
LEDs
LED L5
LED de alimentação
JTAG
Oscilador de
utilizador 25MHz
CPLD
Oscilador
XC9572XL PRR USB 48MHz
D7
D6
Barramento de memória
PROGRAM
RUN
RESET
23
N16
N14
N15
Write
Enable
VP
VM
RCV transmissor/
VPO
receptor
FSEO
de USB
OE
Address
(2:0)
Botão de reset
P15 25 MHz
B8
48 MHz
T9
D16
Byte
Address(21:1):
Memória
P9
A(19:1)
Enable
Flash
N9
Chip Enable
1Mx8/
R14
Data(15:0):
512Kx16-bit
Ready/Busy
D(15:0) J13 T14
P10
G12
J16 R10
F13
J15 T11
F12
D(15:0)K13 R11
D+
K12 P12
USB E14
RAM
E13
L12 T12
D- J22
estática
D15
A(18:1) K16 R12
D14
256K
P11
C16
K15 T13
x16-bit
BLE:L15, BHE:K14
P16 R13
L16 M11
LEDs: 1 – on
0 - off
L13 P13
DIP
0
J14 N12
1 1
D(7:0) G15
N11
0
F14
CPLD
N10
E15
B1
LEDs XC9572XL
A(2:1) B16 M10
T10
D(7:0)
(H15,F16,H13) G13 G14
CS:M13, OE:L14
E10
CON
E#
D9
C9
B9
E11
D12
R
G
B
VGA
HSYNC
VSYNC
E
A8
R9
Output
D10
C10
A11
B11
C11
D11
B10
A10
M14
B4
LED L5
C15
RS232
24
Chip select
Read/Write
M16 M15
B13 C12
Oscilador
100 MHz
Porta
paralela
4 interruptores
Memória Flash
256 KByte
Alimentação 9V
Display de
segmentos
Botão
CPLD XC9572XL
FPGA XC2S100 (Spartan-II)
RAM estática
16 MByte
25
CLBs
Número
máximo de
pinos de I/O
RAM
distribuída
(bits)
Blocos de
RAM
(Kbits)
XC2S15
XC2S30
8x12
12x18
86
132
6 144
13 824
16
24
XC2S50E*
16x24
182
24 576
32
XC2S100E*
20x30
202
38 400
40
XC2S150E*
24x36
265
55 296
48
XC2S200E*
28x42
289
75 264
56
XC2S300E
32x48
329
98 304
64
XC2S400E
40x60
410
153 600
160
XC2S600E
48x72
514
221 184
288
FPGA
Array de
26
Tabela 1 – FPGAs das famílias Spartan-II/Spartan-IIE da Xilinx
27
28
FPGA
HGS
ISE 5.x
VHDL
Hardware templates
DK1
Placas de protótipo
Teoria de projecto lógico
Handel-C
Interacção com os dispositivos periféricos: rato, teclado, monitor, LCD, RAM,29etc.
30
II. Hardware reconfigurável e placas de desenvolvimento
A. FPGAs de famílias Spartan-II/Spartan-IIE
B. A placa RC100 da Celoxica
C. A placa TE-XC2Se da Trenz Electronic
D. A placa XSA100 da XESS
III. Ferramenta ISE 6. Exemplos de desenvolvimento de circuitos para as FPGAs da família Spartan-IIE
A. Ferramenta ISE e os passos básicos de desenvolvimento
B. Desenvolvimento de um circuito trivial
C. Interacção com os botões, interruptores e LEDs através do CPLD
D. Interacção com o LCD
E. Projecto de MEFs e simulação
F. Uso de DLLs
IV. Exemplos de desenvolvimento de circuitos para as FPGAs da família Spartan-II
A. Projecto de um conversor de códigos
B. Interacção com o rato
C. Interacção com a RAM estática
D. Exemplo de projecto baseado em EDIF
31
Projecto baseado em VHDL incluíndo os tópicos seguintes:
• criação do módulo VHDL no nível superior da hierarquia;
• geração do ficheiro de restrições do utilizador (User Constraints File - UCF);
• implementação de módulos VHDL sintetizáveis descritos a nível comportamental;
• implementação de módulos VHDL sintetizáveis descritos a nível estrutural;
• ligação de módulos de biblioteca para possibilitar o desenvolvimento hierárquico;
• ligação com as bibliotecas VHDL;
Projecto esquemático incluíndo os tópicos seguintes:
• criação de módulos no editor esquemático;
• geração de módulos de biblioteca para possibilitar o desenvolvimento hierárquico;
• utilização de bibliotecas esquemáticas;
32
33
Simulação em ModelSim incluíndo os pontos seguintes:
• criação de ficheiros com entradas de teste (testbenches);
• fluxo de simulação funcional;
Desenvolvimento de máquinas de estados finitos (MEF)
Utilização da ferramenta Core Generator
Implementação do projecto
34
10
15
16
17
11
12
rc
13
18
20
mover
19
14
apagar
35
criar código VHDL
adicionar um estado
simular a MEF
adicionar uma transição
adicionar o sinal reset
inserir comentários
ldb
adicionar um vector
lb
36 = '0')
not (SW3 = '1' and SW2 = '0' and SW1
Uma área diferente que é extremamente importante hoje em dia, é o projecto a partir das
linguagens de especificação a nível de sistemas, tais como SystemC, Handel-C e muitas
outras. Para a leccionação foi escolhida a linguagem Handel-C e o ambiente DK1
desenvolvido por Celoxica. Esta escolha é fundamentada pelas razões seguintes:
 todas as ferramentas necessárias para o desenvolvimento imediato de sistemas digitais
baseados em FPGA podem ser facil e rapidamente recebidos da Celoxica juntamente
com manuais e exemplos compreensivos;

as ferramentas são directamente integráveis com ISE 6 da Xilinx; por exemplo, é
possível construir no ambiente DK1 os módulos VHDL a partir da sua especificação
em Handel-C e utilizá-los posteriormente como componentes de biblioteca em ISE 6;
 a Celoxica fornece alguns componentes complementares que são úteis para
o desenvolvimento de sistemas digitais, tais como os controladores para
dispositivos periféricos (monitor VGA, teclado, rato, memória, etc.), a biblioteca
de macros Handel-C, as ferramentas de depuração e simulação, etc.;
 finalmente a nossa própria experiência indica que as ferramentas da Celoxica permitem
resolver problemas de projecto bastante complicados.
37
V.Sklyarov, Síntese e Implementação de Circuitos Digitais Reconfiguráveis Dinamicamente
Johnny Santos, Nuno Duarte, Síntese e Implementação de Circuitos Digitais
Reconfiguráveis Dinamicamente (Projecto 1)
Diogo Gomes e Nuno Carvalho, Síntese e Implementação de Circuitos Digitais
Reconfiguráveis Dinamicamente (Projecto 2)
Cláudio Teixeira e João Girão, Síntese e Implementação de Circuitos Digitais
Reconfiguráveis Dinamicamente (Projecto 3)
João Paulo Barraca e Nuno João Sénica, Síntese e Implementação de Circuitos Digitais
Reconfiguráveis Dinamicamente (Projecto 4)
Todos os 4 projectos estão apresentados na WebCT:
Página http://webct.ua.pt, "2º Semestre", a disciplina "Computação Reconfigurável".
38
Computação Reconfigurável. WebCT, Tutorias e Projectos
V. Sklyarov, I. Skliarova
Utilização da linguagem Handel-C na criação e implementação
de um Gap Puzzle
Bruno Pimentel
Desenvolvimento de um circuito em Handel-C para experiências
com máquinas de estados finitos
Joel Arrais
Desenvolvimento de um circuito para operações sobre vectores
booleanos e ternários
Bruno Pereira
Desenvolvimento de uma calculadora baseada numa FPGA e
num touch panel
Rui Costa, João Limas, Inês Oliveira
39
Pedro Almeida, Manuel Almeida, Desenvolvimento de um circuito aritmético a partir
da sua especificação em
40
41
32 bits, 66 MHz
Programming and alternative data
exchange through USB port
Expansion
connector
Data exchange
Programming and alternative data
exchange through a parallel port
42
start bit
4
7
8 data bits
stop bit
6
8-11
5
1 2 3 4 5 6 7 8
11
0
RS232out <= line_RS(ind)(tmp);
lclk
if rising_edge(lclk) then
subtype word10 is std_logic_vector (9 downto 0);
type serial_pac is array (11 downto 0) of word10;
constant line_RS : serial_pac := ( x"1B"&"01",
x“54"&"01",
2) touch command
x“48"&"01",
3) horizontal labeling
4) upper left touch field
x“0D"&"01",
5) lower right touch field
x“19"&"01",
6) return code
x“41"&"11",
7) key with frame
x"02"&"01",
8-11) the world STOP x“53"&"01",x“54"&"01",x“4F"&"11“,x“50"&"11“,
12) end
43
x“00"&"11“);
0
9
44
45
46
47
48
Exemplo 1. Projecto simples implementado em VHDL
O exemplo demonstra todos os passos necessários para descrever,
sintetizar e implementar em FPGA um circuito simples que controla
um LED ligado a um pino da FPGA, ligando e desligando-o com
uma frequência de ~1 Hz.
FPGA da família Spartan-IIE: XC2S300E
Divider
LED
clk
Pino: T9
Pino: C15
led
reset
Pino: P15
RESET
48 MHz
49
entity led_on_off is
Port ( clk : in std_logic;
reset : in std_logic;
led : out std_logic);
end led_on_off;
Pino: T9 48 MHz
Pino: P15 RESET
LED
architecture Behavioral of led_on_off is
signal internal_clock : std_logic_vector (25 downto 0);
begin
process(clk,reset)
begin
if reset = ‘0’ then
internal_clock <= (others=>’0’);
elsif clk’event and clk = ‘1’ then
internal_clock <= internal_clock+1;
end if;
end process;
led <= internal_clock(internal_clock’left);
end Behavioral;
50
Código VHDL do divisor
 1 segundo
25
10
0
architecture Behavioral of led_on_off is
signal internal_clock : std_logic_vector (25 downto 0);
begin
process(clk,reset)
00000000000000000000000000
begin
if reset = ‘0’ then
internal_clock <= (others=>’0’);
elsif clk’event and clk = ‘1’ then
internal_clock <= internal_clock+1;
end if;
end process;
led <= internal_clock(internal_clock’left);
end Behavioral;
51
Fontes do projecto.
Exemplos: ficheiros VHDL,
esquemáticos, ficheiros de
biblioteca, etc.
Processos para a fonte
corrente. Exemplos:
modelação, síntese,
implementação, edição,
geração de símbolos da
biblioteca, geração de
bitstreams, etc.
Edição de ficheiros diferentes.
Exemplos: código VHDL, ficheiros de
restrições do utilizador, etc.
Resultados dos processos activos.
Exemplo: resultados de síntese do código VHDL
52
Comece aqui
1
2
3
53
Slide seguinte
3
4
5
6
7
Slide seguinte
54
7
Fontes do projecto.
Exemplos: ficheiros VHDL,
esquemáticos, ficheiros de
biblioteca, etc.
55
Fontes do projecto.
Exemplos: ficheiros VHDL,
esquemáticos, ficheiros de
biblioteca, etc.
9
Slide
seguinte
8
56
12
11
9
10
57
13
14
15
16
17
18
58
18
59
library IEEE;
process(clk,reset)
use IEEE.STD_LOGIC_1164.ALL;
begin
use IEEE.STD_LOGIC_ARITH.ALL;
if reset = ‘0’ then
use IEEE.STD_LOGIC_UNSIGNED.ALL;
internal_clock <= (others=>’0’);
elsif clk’event
and clk = ‘1’ then
entity led_on_off
is
Port ( clk internal_clock
: in std_logic;<= internal_clock+1;
if;
reset : in end
std_logic;
end process;
led : out std_logic);
led <= internal_clock(internal_clock’left);
end led_on_off;
architecture Behavioral of led_on_off is
signal internal_clock : std_logic_vector (25 downto 0);
begin
end Behavioral;
60
my_in_bus
7
6
5
4
3
2
1
0
my_out_bus
2
3
4
5
61
19
62
20
22
21
23
63
Slide seguinte
24
25
26
27
28
Clique duas vezes com 64
o botão esquerdo do rato
29
30
Desloque o cursor e carregue
no botão direito do rato
65
33
32
31
66
37
34
35
48 MHz HIGH 50%
40
38
36
39
NET "clk" TNM_NET = "clk";
TIMESPEC "TS_clk" = PERIOD "clk" 48 MHz HIGH 50 %;
67
41
44
seleccione
43
duas vezes no
42 Carregue
botão direito do rato
68
48
45
47
44
46
69
49
50
70
52
51
54 Seleccione
Carregue duas vezes no
53 botão direito do rato
55
71
Utilização da placa de protótipo TE-XC2Se da Trenz para testar o circuito
58
57
Pressione
72
60 LED
59
Pressione
61
Pressione para
inicializar
73
74
Download

on 0