descrição arquitectónica das fpgas da família virtex da xilinx
TRANSCRIPT
Descrição arquitectónica das FPGAs da família Virtex da
Xilinx
2 Descrição arquitectónica
da família Virtex da Xilinx 3
1. ARQUITECTURA INTERNA............................................................................... 7
1.1.O BLOCO LÓGICO CONFIGURÁVEL .................................................................... 8
1.1.1. LÓGICA ADICIONAL .............................................................................................9
1.1.2. LÓGICA ARITMÉTICA.........................................................................................10
1.2.O BLOCO DE ENTRADA/SAÍDA .......................................................................... 11
1.2.1. ESTRUTURA E FUNCIONALIDADE ..................................................................11
1.2.2. PARÂMETROS ELÉCTRICOS DE INTERFACE..................................................13
1.2.3. DESCRIÇÃO DOS BUFFERS DE ENTRADA E SAÍDA ......................................15
1.2.4. BANCOS DE E/S.....................................................................................................16
1.3.OS BLOCOS DE MEMÓRIA.................................................................................... 17
1.4.A MATRIZ DE ENCAMINHAMENTO PROGRAMÁVEL ................................... 19
1.4.1. RECURSOS DE INTERLIGAÇÃO LOCAL...........................................................20
1.4.2. RECURSOS GENÉRICOS DE INTERLIGAÇÃO..................................................21
1.4.3. RECURSOS DE INTERLIGAÇÃO PERIFÉRICOS ...............................................21
1.4.4. OUTROS RECURSOS DE INTERLIGAÇÃO .......................................................22
1.5.OS CIRCUITOS DE CONTROLO E DISTRIBUIÇÃO DE SINAIS DE RELÓGIO .
.............................................................................................................................. 22
1.6.A INFRA-ESTRUTURA BOUNDARY-SCAN ........................................................ 24
1.6.1. O TEST ACCESS PORT – TAP..............................................................................24
1.6.2. O CONTROLADOR DO TAP ...............................................................................26
1.6.3. O REGISTO DE INSTRUÇÃO ..............................................................................28
1.6.4. O REGISTO DE VARRIMENTO PELA PERIFERIA (BOUNDARY-SCAN – BS)...
............................................................................................................................28
1.6.5. O REGISTO DE BYPASS .......................................................................................30
1.6.6. O REGISTO DE IDENTIFICAÇÃO.......................................................................30
1.6.7. O REGISTO DE IDENTIFICAÇÃO DO UTILIZADOR.......................................31
1.6.8. O REGISTO DE CONFIGURAÇÃO......................................................................31
1.6.9. OS REGISTOS DO UTILIZADOR.........................................................................32
1.6.10. O CONJUNTO DE INSTRUÇÕES...................................................................32
1.7.A MEMÓRIA DE CONFIGURAÇÃO ..................................................................... 34
1.7.1. MODOS DE CONFIGURAÇÃO............................................................................34
1.7.1.1. O MODO DE CONFIGURAÇÃO MESTRE-SÉRIE .................................................36
1.7.1.2. O MODO DE CONFIGURAÇÃO ESCRAVO-SÉRIE..............................................37
4 Descrição arquitectónica
1.7.1.3. O MODO DE CONFIGURAÇÃO SELECTMAP .................................................... 39
1.7.1.4. O MODO DE CONFIGURAÇÃO BOUNDARY-SCAN ......................................... 40
2. CONFIGURAÇÃO E LEITURA ..........................................................................45
2.1.VECTORES DE DADOS.......................................................................................... 45
2.2.REGISTOS DE CONFIGURAÇÃO ......................................................................... 45
2.2.1. REGISTO DE COMANDOS (CMD)......................................................................45
2.2.2. REGISTO DO COMPRIMENTO DO VECTOR (FLR) ........................................46
2.2.3. REGISTO DE OPÇÕES DE CONFIGURAÇÃO (COR).......................................46
2.2.4. REGISTO DE CONTROLO (CTL)........................................................................47
2.2.5. REGISTO DE MÁSCARA (MASK) .......................................................................49
2.2.6. REGISTO DE ENDEREÇO DO VECTOR (FAR) .................................................49
2.2.7. REGISTO DE ENTRADA DE VECTORES DE DADOS (FDRI)..........................49
2.2.8. REGISTO DE SAÍDA DE VECTORES DE DADOS (FDRO)...............................50
2.2.9. REGISTO DE SAÍDA DE DADOS PARA CONFIGURAÇÃO EM CADEIA
(LOUT) ...................................................................................................................50
2.2.10. REGISTO DE VERIFICAÇÃO POR REDUNDÂNCIA CÍCLICA (CRC)......50
2.2.11. REGISTO DE ESTADO (STAT) ......................................................................50
2.3.O PROCESSO DE CONFIGURAÇÃO E LEITURA............................................... 52
2.3.1. ORGANIZAÇÃO DUM PACOTE DE CONFIGURAÇÃO ..................................54
2.4.ENDEREÇAMENTO E CONTEÚDO DO ESPAÇO DE CONFIGURAÇÃO...... 56
2.4.1. ORGANIZAÇÃO DA MEMÓRIA DE CONFIGURAÇÃO ..................................56
2.4.2. VECTORES.............................................................................................................58
2.4.3. ORGANIZAÇÃO DOS VECTORES......................................................................59
2.4.4. LOCALIZAÇÃO DOS BITS DAS TABELAS DE CONSULTA...........................60
2.4.5. LEITURA DOS DADOS DE CONFIGURAÇÃO..................................................60
2.4.6. ESCRITA DOS DADOS DE CONFIGURAÇÃO ..................................................61
2.4.7. ALTERAÇÃO DOS DADOS DE CONFIGURAÇÃO...........................................61
2.4.8. LOCALIZAÇÃO DOS BITS NO FICHEIRO DE CONFIGURAÇÃO..................62
da família Virtex da Xilinx 5
Nota introdutória
Este documento contém uma descrição da arquitectura interna das FPGAs da família Virtex da Xilinx e dos
seus mecanismos de configuração e leitura. Os dados foram recolhidos a partir de informação disponibilizada
pelo fabricante e a sua compilação constituiu o ponto de partida para a elaboração de todo o trabalho de
dissertação.
6 Descrição arquitectónica
da família Virtex da Xilinx 7
1.ARQUITECTURA INTERNA
As FPGAs da família Virtex da Xilinx são baseadas numa arquitectura simétrica, regular, que para efeitos
duma análise mais profunda pode ser dividida em várias partes:
• uma matriz de blocos lógicos configuráveis, designados por CLBs (do termo Configurable Logic Blocks);
• um conjunto de blocos de entrada/saída (E/S), designados por IOBs (Input/Output Blocks), que serve de
interface entre os CLBs e os pinos do componente;
• um conjunto de blocos de memória RAM (do termo Random Access Memory) dedicados de 4096 bits cada;
• um conjunto de recursos de interligação local, designado VersaBlock;
• um conjunto de recursos genéricos de interligação, designado GPR (do termo General Purpose Routing);
• um conjunto de recursos de interligação periféricos, designados VersaRing;
• quatro DLLs (do termo Delay-Locked Loops) dedicadas para controlo do relógio a aplicar à lógica
configurada;
• uma memória estática de configuração.
Para além destes blocos principais, a FPGA possui ainda recursos dedicados para controlo e distribuição de
sinais de relógio, bem como uma infra-estrutura de teste compatível com a norma IEEE1149.1, conhecida
pela designação Boundary Scan Test (BST) [IEEE Std 1149.1, 90]. A Figura 1.1 apresenta uma representação
esquemática da arquitectura das Virtex [Xilinx, 00]. Cada um dos subcapítulos seguintes é dedicado à
descrição pormenorizada de cada um destes blocos.
Porto1
VersaRing
IOBs
IOBsCLBs
VersaRing
VersaR
ingVer
saR
ing
Bloc
k R
AM
s Block RA
Ms
RAM0 RAM1
DLL DLL
DLL DLLIOBs
IOBs
Figura 1.1: Arquitectura das Virtex
8 Descrição arquitectónica
1.1. O BLOCO LÓGICO CONFIGURÁVEL
A constituição dos blocos lógicos configuráveis, CLBs, tem por base as células lógicas, as quais incluem, cada
uma, um gerador de funções de 4 entradas, implementado sob a forma duma tabela de consulta (Look-Up
Table - LUT), lógica de controlo e transporte (control and carry logic) e um elemento de retenção. A saída do
gerador de funções de cada célula lógica opera a saída do CLB, directamente ou através do elemento de
retenção, de forma independente [Renovell, 98]. Cada CLB, cuja organização interna se encontra
esquematizada na Figura 1.2, contém quatro destas células lógicas, organizadas em duas partes similares,
designadas slice. Para além destas quatro células lógicas básicas, cada CLB possui igualmente lógica que
permite combinar os vários geradores de funções, por forma a proporcionar funções de cinco e seis entradas.
LUT
LUT
Controlo &Transferência
Controlo &Transferência
G4G3G2G1
F4F3F2F1
D
D
BX
CIN
COUT
BY
YB
Y
YQ
XBX
XQ
LUT
LUT
Controlo &Transferência
Controlo &Transferência
G4G3G2G1
F4F3F2F1
D
D
BX
CIN
COUT
BY
YB
Y
YQ
XBX
XQ
Slice 1 Slice 0
Célula lógica
Figura 1.2: Arquitectura interna de um CLB
A tabela de consulta é um elemento bastante versátil, sendo possível o seu uso não só como gerador de
funções, mas igualmente como memória ROM ou memória RAM (LUT RAM) síncrona local de 16×1 bit,
isoladamente, ou como RAM síncrona de 32×1 bit, de 16×2 bits, ou ainda como RAM síncrona de dupla porta
de acesso de 16×1 bit, desde que, em todos os casos referidos, em combinação com a outra do seu slice.
Exequível também o seu funcionamento como um registo de deslocamento de 16 bits, ideal para a captura de
dados a alta velocidade ou transitórios (high-speed ou burst-mode data).
Os elementos de retenção são configuráveis quer como circuitos bi-estáveis do tipo D (vulgo D-type flip-flops
- Dff), activos à transição de relógio, quer como elementos de retenção, activos ao patamar, podendo a sua
entrada ser operada a partir da saída do gerador de funções ou directamente da entrada do CLB.
Cada slice, para além dos sinais de relógio (CLK) e habilitação de relógio (CE), que figuram no seu esquema
detalhado apresentado na Figura 1.3, possui sinais para Set e Reset síncronos ou Preset e Clear assíncronos, que
dependem da configuração (SR e BY). SR força o elemento de retenção ao estado de inicialização
especificado no ficheiro configuração (entrada INIT do Dff), enquanto BY o força ao estado inverso (entrada
da família Virtex da Xilinx 9
REV do Dff). Desta forma, a um estado inicial especificado como ‘0’, irá corresponder, se especificadas no
projecto, uma linha de Reset ou Clear actuando na entrada SR do slice e uma linha de Set ou Reset actuando
na entrada BY do mesmo slice. De igual forma, um estado inicial definido na configuração como ‘1’, vai
implicar que a linha de Reset ou Clear actue na entrada BY do slice e que a linha de Set ou Reset actue na
entrada SR do mesmo slice.
A polaridade de todos os sinais de controlo é especificável independentemente, sendo todos eles partilhados
pelos dois flip-flops, dentro do mesmo slice.
A4A3A2A1
G-LUT
WS DI
D
G4G3G2G1
BY
10
BY DG
BX DF
A5WECK
WSG
WSF
10
PROD
A4A3A2A1
F-LUT
WS DI
D
F4F3F2F1
10
PROD
10
10
10
BX
CE
CLK
SR
CIN
0
1 1
G0 1
0 1
F
G
BX
CIN
0
1
F5IN
F6F5
F6GXORG
F5FXORF
1
F
1
1
0
1
0
1
0
REVINIT
CE
D Q
ff Y
REVINIT
CE
D Q
ff X
0
0
0
0
0
XQ
X
F5
XB
YQ
Y
YB
COUT0
XORCY
CY
Figura 1.3: Esquema detalhado de uma slice
1.1.1. LÓGICA ADICIONAL
Um multiplexador (F5) combina as saídas dos dois geradores de funções, permitindo obter quer um gerador de
funções capaz de implementar uma qualquer função lógica com cinco entradas, quer um multiplexador de 4
para 1 (4:1), quer determinadas funções com até nove entradas. De forma similar, o multiplexador F6
combina as saídas dos quatro geradores de funções de uma CLB, através da selecção de uma das saídas dos
multiplexadores F5. Esta solução permite a implementação de qualquer função lógica de 6 entradas, dum
multiplexador de 8:1, ou de funções específicas com até 19 entradas.
Por exemplo, a implementação da função lógica com cinco entradas:
F=ABC+ADE+/BCE+A/CDE
10 Descrição arquitectónica
implicaria que F1=G1=A, F2=G2=B, F3=G3=C, F4=G4=D e BX=E, com a saída em F5(=F). Supondo
que BX=0 selecciona a G-LUT e BX=1 a F-LUT, e partindo do bit menos significativo, o conteúdo das LUT
G e F seria, respectivamente, 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 e 0 0 0 0 1 1 0 1 0 1 0 1 1 1 0 1. A Figura 1.4
ilustra a implementação desta função numa slice duma CLB.
A4A3A2A1
D
A4A3A2A1
D
DCBA
DCBA
F
F5
F-LUT
0000110101011101bit0............................bit15
G-LUT
0000000100000001bit0...............................bit15
0
1
F=ABC+ADE+/BCE+A/CDEE
Figura 1.4: Implementação numa slice duma função F de 5 entradas
A possibilidade de configuração das tabelas de consulta como blocos de memória, obriga igualmente à
introdução de alguma lógica adicional destinada a controlar o processo de escrita nas células da tabela, bem
como de algumas linhas extra, nomeadamente uma linha de habilitação de escrita (WE), uma de entrada de
dados (DI) e uma linha a mais de endereço, A5, em virtude da possibilidade de associação das duas LUT
duma mesma slice para formação duma RAM de 32x1 bit. Note-se que enquanto as operações de escrita na
LUT RAM são síncronas com o sinal de relógio, as operações de leitura são completamente assíncronas,
revelando nisso um comportamento idêntico ao que possuem quando actuam como simples gerador de
funções, reflectindo a cada momento o porto de saída o valor da posição de memória especificada no
barramento de endereços (F1=A1, F2=A2, F3=A3, F4=A4 e de igual forma para as entradas Gx). O
conteúdo inicial das células de memória da LUT RAM pode ser especificado no ficheiro de configuração,
sendo por omissão a RAM inicializada com todas as suas posições de memória a 0. É possível a utilização das
LUT para constituição de blocos de memória com palavras de maior comprimento e maior número de
posições de memória, bem como de memórias de dupla porta, mas tal implica já a utilização de recursos
genéricos de configuração.
1.1.2. LÓGICA ARITMÉTICA
A existência de lógica aritmética dedicada proporciona os recursos necessários para a implementação de
funções aritméticas com velocidades elevadas de execução. Cada CLB suporta duas cadeias de transporte1,
uma por slice, as quais se podem estender por várias slices, permitindo a implementação de funções aritméticas
de elevada complexidade e de funções lógicas com grande número de variáveis. A lógica aritmética inclui
1 Recursos lógicos do tipo série dedicados ao deslocamento de valores de transporte resultantes de operações aritméticas,conduzindo a uma maior rapidez na execução dessas operações.
da família Virtex da Xilinx 11
uma porta lógica EXOR (disjunção lógica exclusiva) (XORCY na Figura 1.3), a qual torna possível a
implementação de um somador de um bit numa única célula lógica, como ilustrado na Figura 1.5, e uma porta
lógica E (conjunção lógica), a qual permite melhorar a eficiência na implementação do multiplicador de um
bit, ao dispensar a utilização de outros recursos exteriores à célula para geração do bit de transporte, tal como
ilustra a Figura 1.6.
CY
A
B
Cout
X=A+B
0 1
000 A4
A3A2A1
F-LUT
01XXXXXXXXXXXXXXbit0...................................bit15 D
Figura 1.5: Implementação numa slice duma CLB dum somador de um bit com transporte
A4A3A2A1
DAB
00
F-LUT
0110XXXXXXXXXXXXbit0.................................bit15
Cout
X=A×B
CY0 1
0
Figura 1.6: Implementação numa slice duma CLB dum multiplicador de um bit com transporte
1.2. O BLOCO DE ENTRADA/SAÍDA
A análise do bloco de entrada/saída (IOB) das Virtex subdivide-se em duas partes distintas: a análise do
ponto de vista estrutural e funcional das entradas; e a análise do ponto de vista eléctrico.
1.2.1. ESTRUTURA E FUNCIONALIDADE
Do ponto de vista estrutural os blocos de E/S são constituídos basicamente por três elementos distintos:
elementos de armazenamento, multiplexadores e buffers. A estrutura interna de cada IOB está representada
12 Descrição arquitectónica
na Figura 1.7. Funcionalmente, os três elementos de armazenamento são configuráveis quer como flip-flops
(sensíveis às transições de relógio), quer como elementos de retenção (sensíveis ao patamar). Embora o sinal
de relógio seja partilhado pelos três, cada um possui um sinal de habilitação de relógio independente (xCE). O
sinal Set/Reset (SR) é igualmente partilhado pelos três, podendo ser configurado independentemente para
cada flip-flop como Set/Reset síncrono ou Preset/Clear assíncrono. Deste modo, e embora o sinal aplicado seja o
mesmo para os três flip-flops, a sua activação leva cada um deles a assumir o estado definido na sua
configuração. Os multiplexadores permitem configurar o sinal de saída e o sinal de controlo do terceiro
estado, como síncronos ou assíncronos, de forma independente um do outro.
AtrasoProgramável
Vref
WeakKeeper
OBUFT
IBUF
T
TCE
O
OCE
I
IQ
SRCLKICE
Con
trol
o do
terc
eiro
est
ado
Saíd
a
EntradaAssíncrona
EntradaSíncrona
SR
CE
DQ
SR
CE
D Q
SR
CE
D QPorto
VCC
Pull upPull down
Figura 1.7: Esquema detalhado de um IOB
O buffer de saída, bem como todos os sinais de controlo, possui controlo de polaridade independente.
Resistências opcionais de pull-up e pull-down, bem como um circuito opcional Weak Keeper2 podem ser ligados
a cada porto. Anteriormente à configuração, todos os pinos não envolvidos neste processo são forçados ao seu
2 Circuito que, através da monitorização constante do sinal no pino, mantém, no caso de as fontes de sinal a ele ligadaspassarem a um estado de alta impedância (terceiro estado), o último valor lógico válido, através da aplicação, consoanteos casos, dum valor lógico zero ou um valor lógico fraco, evitando assim o aparecimento de ruído no barramento.Entende-se por valor lógico fraco um valor lógico resistivo, isto é, aplicação exterior de um valor lógico inverso aoimposto na saída provoca a sua mudança sem originar um aumento da corrente drenada.
da família Virtex da Xilinx 13
estado de alta impedância (terceiro estado), podendo numa base global, e de forma opcional, por controlo dos
pinos que determinam o modo de configuração, as entradas serem forçadas ao valor lógico 1.
Todos os IOBs são compatíveis com a norma de teste por varrimento pela periferia, IEEE 1149.1 [IEEE Std
1149.1, 90], cuja estrutura será descrita detalhadamente noutro subcapítulo.
1.2.2. PARÂMETROS ELÉCTRICOS DE INTERFACE
• Do ponto de vista da interface com o exterior, os blocos de entrada/saída das Virtex apresentam uma
elevada flexibilidade, suportando, por configuração, uma larga variedade de normas de interface, que se
encontram listadas na Tabela 1.1 [Xilinx, 00a] e das quais se apresenta uma breve caracterização, visto
que uma visão mais aprofundada foge ao âmbito deste trabalho. Informação detalhada sobre cada uma das
normas pode ser encontrada em [JEDEC].
• LVTTL – Low-Voltage TTL (Transistor-Transistor Logic)
A norma LVTTL (JESD8-1) proposta pela EIA (Electronic Industry Alliance), é uma norma genérica para
interface de circuitos digitais de baixa tensão (3,3V) compatíveis com os níveis TTL. Usa buffers de
entrada do tipo LVTTL e buffers de saída do tipo push-pull, ambos tolerantes aos 5V.
• LVCMOS2 – Low-Voltage CMOS para 2,5V
A norma LVCMOS2 ou LVCMOS para 2,5V ou menos, é uma extensão da norma LVCMOS (JESD 8-5)
usada genericamente para aplicações a 2,5V. O buffer de entrada é do tipo CMOS, tolerante aos 5V,
sendo o de saída do tipo push-pull.
• PCI – Peripheral Component Interconnect
A norma PCI especifica um barramento a 33MHz ou 66MHz para computadores pessoais com suporte
para Plug and Play. Proporciona velocidades elevadas de interligação com até sete dispositivos periféricos.
Utiliza buffers de entrada LVTTL e buffers de saída do tipo push-pull e é igualmente tolerante aos 5V.
• GTL – Gunning Transceiver Logic
• A norma GTL (JESD 8-3), desenvolvida pela Xerox, define uma interface para aplicações de elevada
velocidade e baixa tensão, incluindo as especificações eléctricas a que devem obedecer as entradas e
saídas. Esta norma utiliza um buffer de entrada diferencial amplificado e um buffer de saída em dreno
aberto.
• GTL+ – Gunning Transceiver Logic Plus
A norma GTL+ é uma variação da norma JESD8-3, primeiramente usada nos processadores PentiumPro
da Intel.
• HSTL – High-Speed Transistor Logic
14 Descrição arquitectónica
A norma HSTL, proposta pela IBM (EIA/JESD 8-6), especifica um barramento de uso genérico, de
elevada velocidade e baixa tensão (1,5V). Esta norma comporta quatro variantes ou classes, das quais três,
Classes I, III e IV, são suportadas pelas Virtex. O buffer de entrada utilizado é do tipo diferencial
amplificado e o de saída do tipo push-pull.
Norma E/S Tensão de ref. deentrada (VREF)
Tensão da fontede saída (VCCO)
Tensão determinação da
placa (VTT)Tolerante aos 5V3?
LVTTL2 – 24 Ma Não 3,3 Não Sim
LVCMOS2 Não 2,5 Não Sim
PCI, 5V Não 3,3 Não Sim
PCI, 3,3V Não 3,3 Não Não
GTL 0,8 Não 1,2 Não
GTL+ 1,0 Não 1,5 Não
HSTL Classe I 0,75 1,5 0,75 Não
HSTL Classe III 0,9 1,5 1,5 Não
HSTL Classe IV 0,9 1,5 1,5 Não
SSTL3 Classe I & II 1,5 3,3 1,5 Não
SSTL2 Classe I & II 1,25 2,5 1,25 Não
CTT 1,5 3,3 1,5 Não
AGP 1,32 3,3 Não Não
Tabela 1.1: Normas de interface suportados pelas E/S das Virtex
• SSTL3 – Stub-Series Terminated Logic para 3,3V
A norma SSTL3, proposta pela Hitachi e pela IBM (EIA/JESD 8-8), especifica uma interface, baseada nos
parâmetros eléctricos de tecnologia CMOS, para memórias de elevada velocidade (>125MHz) e baixa
tensão (3,3V). Esta norma comporta duas variantes ou classes, ambas suportadas pelas Virtex, sendo o
buffer de entrada do tipo diferencial amplificado e o de saída do tipo push-pull.
• SSTL2 – Stub Series Terminated Logic para 2,5V
A norma SSTL2 (EIA/JESD 8-9) é em tudo idêntica à anterior com excepção da tensão que passa a ser de
2,5V. Possui igualmente duas classes, ambas suportadas pelas Virtex.
3 Entende-se por tolerância aos 5V a possibilidade de aplicação às entradas ou saídas de níveis de tensão TTL (0-5V).
da família Virtex da Xilinx 15
• CTT – Center Tap Terminated
A norma CTT, proposta pela Fujitsu (JESD 8-4), especifica os parâmetros eléctricos de uma interface a
elevada velocidade e baixa tensão para circuitos integrados. Esta norma requer o uso dum buffer de
entrada diferencial amplificado e dum buffer de saída do tipo push-pull.
• AGP-2X – Accelerated Graphics Port
A norma Intel AGP especifica um barramento usado em aplicações gráficas pelos processadores Pentium
II, e especifica o uso um buffer de entrada diferencial amplificado e um buffer de saída do tipo push-pull.
A proliferação de normas de interface, as quais apresentam como denominador comum a utilização de baixas
tensões, obriga a que as E/S possuam uma grande versatilidade do ponto de vista dos parâmetros eléctricos,
permitindo a utilização da FPGA em inúmeras aplicações.
1.2.3. DESCRIÇÃO DOS BUFFERS DE ENTRADA E SAÍDA
O buffer de entrada (IBUF) de cada IOB encaminha o sinal do porto de entrada para a lógica interna
directamente (modo assíncrono) ou, opcionalmente, através dum flip-flop (modo síncrono). Cada buffer de
entrada admite qualquer uma das normas de interface suportadas pelas Virtex. Em algumas dessas normas é
necessário aplicar ao buffer uma tensão externa de referência, VREF, o que impõe restrições quanto à
proximidade de entradas sujeitas a diferentes normas. Cada entrada possui resistências de pull-up e pull-down
para uso opcional após a configuração, com valores na gama de 50 a 100kΩ.
A saída de cada IOB inclui um buffer (OBUFT) com terceiro estado, que fornece o sinal de saída ao porto do
IOB. O sinal de saída pode ser aplicado a esse buffer directamente ou, opcionalmente, através dum flip-flop.
De igual forma, o controlo do terceiro estado pode ser encaminhado directamente da lógica interna ou
através dum flip-flop, proporcionando a habilitação ou inibição síncrona da saída.
Cada saída é programável individualmente para um largo número de normas de interface de baixa tensão,
podendo cada buffer fornecer até 24 mA e absorver até 48 mA. Para muitas das normas suportadas o valor
alto da tensão de saída (nível lógico 1) implica o fornecimento externo duma tensão, VCCO, o que impõe
restrições à proximidade de saídas sujeitas a diferentes normas.
Um circuito opcional weak keeper ligado a cada saída garante a manutenção, quando seleccionado, dum nível
lógico 0 ou 1 weak keeper na saída, dependendo da tensão no porto. Se o pino estiver ligado a múltiplas fontes
de sinal e todas elas se encontrarem em terceiro estado, o circuito de sinal weak keeper mantém na saída o
último valor lógico válido. Uma vez que este circuito monitoriza o nível da tensão no porto através do buffer
de entrada, pode ser necessário, dependendo da norma de interface usada, a aplicação dum valor de tensão de
referência, VREF, ficando como tal sujeito às mesmas restrições já anteriormente mencionadas quanto ao uso
de diferentes normas em portos de entrada contíguos.
16 Descrição arquitectónica
1.2.4. BANCOS DE E/S
Algumas das normas referidas na Tabela 1.1 requerem o uso de tensões externas, quer os portos sejam usados
como entradas ou como saídas. Estas tensões são aplicadas a pinos dedicados que servem grupos de portos,
designados bancos, pelo que existem restrições quanto às normas de interface que podem ser combinadas em
cada banco.
Os portos encontram-se em cada FPGA agrupados em oito bancos, como se ilustra na Figura 1.8, dois por
lado, possuindo cada banco múltiplos pinos VCCO, os quais devem ser todos ligados à mesma tensão, sendo o
seu valor determinado pela norma de interface usada. Os bancos situados em cima e em baixo incluem
igualmente entradas para as quatro redes globais de distribuição de sinais de relógio. Dentro de cada banco as
normas de interface usadas podem ser diversas, desde que se mantenha o mesmo valor de VCCO. A Tabela 1.2
apresenta a compatibilidade entre as várias normas, estando GTL e GTL+ incluídas em todas as linhas, uma
vez que a sua saída em dreno aberto não depende de VCCO.
Virtex
Banco 0
Banco 5
Banco 1
Banco 4
Banc
o 2
Banc
o 3
Banc
o 6
Banc
o 7
GCLK0
GCLK3 GCLK2
GCLK1
Figura 1.8: Bancos de E/S nas Virtex
Algumas normas requerem que às entradas seja fornecida uma tensão de referência, VREF. Neste caso,
aproximadamente um em cada seis dos pinos de E/S genéricos normalmente disponíveis para configuração
pelo utilizador, são automaticamente configurados como entradas dessa tensão VREF. Os pinos de VREF de cada
banco interligam-se internamente, pelo que só uma tensão de referência pode ser usada dentro dum mesmo
banco. No entanto, todos os pinos de VREF devem, para um funcionamento correcto, estar ligados à fonte de
tensão externa. Dentro dum mesmo banco as entradas que requeiram uma tensão de referência podem
misturar-se com outras que dela não necessitem. Buffers de entrada aos quais seja aplicada uma tensão de
referência deixam de ser tolerantes aos 5V.
da família Virtex da Xilinx 17
VCCO Compatibilidade entre normas
3,3 V PCI, LVTTL, SSTL3 I, SSTL3 II, CTT, AGP, GTL, GTL+
2,5 V SSTL2 I, SSTL2 II, LVCMOS2, GTL, GTL+
1,5 V HSTL I, HSTL III, HSTL IV, GTL, GTL+
Tabela 1.2: Compatibilidade entre as várias normas de interface
1.3. OS BLOCOS DE MEMÓRIA
Cada Virtex apresenta vários blocos de memória do tipo RAM, complementares da RAM distribuída
implementada em cada CLB. Os blocos de memória estão organizados em colunas, contendo cada Virtex duas
dessas colunas, verticalmente, uma de cada lado. Cada bloco de memória tem uma altura de 4 CLBs, o que
implica que num componente com 64 CLBs de altura existam 16 blocos de memória por coluna, num total de
32 blocos.
Cada bloco de memória de dupla porta, totalmente síncrona, tem um tamanho de 4096 bits, com sinais de
controlo independentes para cada porta, conforme ilustrado na Figura 1.9. O comprimento da palavra de
dados das duas portas é configurável independentemente, proporcionando conversão interna entre
barramentos de dados de comprimentos diferentes.
RAMB4_S#_S#
WEAENARSTA
CLKAADDRA[#:0]DIA[#:0]
WEBENBRSTB
CLKBADDRB[#:0]DIB[#:0]
DOA[#:0]
DOB[#:0]
Figura 1.9: Representação esquemática dum bloco de memória
Embora acedendo às mesmas 4096 células de memória, a operação das portas é totalmente independente uma
da outra. As linhas presentes em cada porta são [Xilinx, 00d]:
• CLK(A|B) Sinal de relógio A operação das portas é totalmente síncrona, possuindo cada uma o seu próprio
relógio de sincronismo. Todos os pinos de entrada da porta têm tempos de restabelecimento referenciados
a esse sinal de relógio.
• EN(A|B) Sinal de habilitação Este pino afecta as funcionalidades de leitura, escrita e inicialização da porta.
18 Descrição arquitectónica
• WE(A|B) Sinal de permissão de escrita Quando este sinal se encontra activo, é possível escrever nas células
de memória através da porta. O conteúdo do barramento de entrada de dados é escrito na célula de
memória especificada pelo valor presente no barramento de endereços, sendo o novo dado igualmente
reflectido para o barramento de saída. Quando inactivo, ocorre uma operação de leitura sendo o conteúdo
da célula de memória seleccionada reflectido para o barramento de saída de dados.
• RST(A|B) Sinal de inicialização A activação do sinal de inicialização força a passagem síncrona a zero do
conteúdo dos elementos de retenção presentes no barramento de saída de dados. As células de memória
não são afectadas nem qualquer operação de escrita em curso é perturbada.
• ADDR(A|B)[#:0] Barramento de endereços O barramento de endereços permite seleccionar a célula de
memória a aceder para uma operação de leitura ou escrita. O comprimento da palavra determina o
tamanho deste barramento, conforme ilustrado na Tabela 1.3.
• DI(A|B)[#:0] Barramento de entrada de dados Através do barramento de entrada de dados são
disponibilizados novos dados para serem escritos nas células de memória. O comprimento da palavra
determina o tamanho deste barramento, conforme ilustrado na Tabela 1.3.
• DO(A|B)[#:0] Barramento de saída de dados O barramento de saída de dados reflecte o conteúdo das
células de memória referenciadas através do barramento de endereços, aquando da última transição
ascendente do sinal de relógio. Durante uma operação de escrita o barramento de saída reflecte o valor
presente no barramento de entrada de dados. O comprimento da palavra determina o tamanho deste
barramento, conforme ilustrado na Tabela 1.3.
Tamanho damemória (palavras)
Comprimento dapalavra de dados
(bit)
Barramento deendereços
Barramento dedados
4096 1 ADDR[11:0] DI[0]
2048 2 ADDR[10:0] DI[1:0]
1024 4 ADDR[9:0] DI[3:0]
512 8 ADDR[8:0] DI[7:0]
256 16 ADDR[7:0] DI[15:0]
Tabela 1.3: Relação entre o comprimento da palavra de dados e o tamanho da memória
Os quatro pinos de controlo (CLK, EN, WE e RST) de cada porta possuem controlo de inversão de
polaridade independente disponível como opção de configuração. Cada porta acede ao mesmo conjunto de
4096 células de memória usando um esquema de endereçamento dependente do comprimento da palavra de
dados. A Tabela 1.3 apresenta a relação entre esse comprimento e o tamanho da memória, para as diversas
configurações possíveis do bloco de memória.
da família Virtex da Xilinx 19
Os blocos de memória incluem igualmente recursos de encaminhamento próprios que permitem uma
concatenação eficiente de vários blocos com um tempo mínimo de propagação, permitindo a obtenção de
estruturas de memória de maior tamanho ou palavras de maior número de bits. Aos blocos de memória podem
ser, quando invocados, associados recursos fixos, restringindo a sua colocação.
Uma vez que se tratam de memórias de dupla porta, é possível o acesso simultâneo a partir de ambas as portas
à mesma célula de memória. Quando através de uma das portas é efectuada uma operação de escrita numa
determinada célula, a outra porta não deve endereçar a mesma célula (para escrita ou leitura) dentro dum
intervalo mínimo de restabelecimento definido entre os sinais de relógio de ambas as portas (clock-to-clock
setup window). Para a resolução de eventuais conflitos devem ser tidas em conta as seguintes regras:
• Se ambas as portas escreverem simultaneamente na mesma célula de memória, violando o intervalo de
restabelecimento, os dados armazenados devem ser considerados inválidos;
• Se uma porta tentar ler a mesma célula de memória que a outra tenta simultaneamente escrever, violando
o intervalo mínimo de restabelecimento, ocorre a seguinte situação:
• A operação de escrita é bem sucedida;
• Os dados no barramento de saída da porta que efectuou a operação de escrita reflectem correctamente
o dado escrito;
• Os dados no barramento de saída da porta que efectuou a operação de leitura são inválidos.
• As situações de conflito não implicam qualquer dano físico.
Os valores iniciais presentes nos blocos de memória, inicializados durante a sequência de arranque, podem ser
definidos no ficheiro de configuração. A não definição de parte ou da totalidade desses valores implica a sua
inicialização a zero. No total estão adstritas a cada bloco 16 propriedades de inicialização (INIT_00 a
INIT_0F) com 64 valores hexadecimais cada, correspondendo a um conjunto de 256 bits de cada bloco (4 bits
por cada digito×64 digitos). A Tabela 1.4 lista as propriedades de inicialização dos blocos de memória e a sua
correspondência com as posições das células, dependente do comprimento da palavra de dados.
1.4. A MATRIZ DE ENCAMINHAMENTO PROGRAMÁVEL
A linha com maior atraso de propagação é aquela que limita a velocidade de operação do sistema.
Consequentemente, a arquitectura de encaminhamento e o programa de distribuição-e-encaminhamento
estão optimizados para minimizar os atrasos nas linhas mais longas, conduzindo a um melhor desempenho do
sistema.
20 Descrição arquitectónica
1.4.1. RECURSOS DE INTERLIGAÇÃO LOCAL
Um conjunto de recursos de interligação local, designado VersaBlock, proporciona recursos locais para o
encaminhamento dos sinais, conforme ilustrado na Figura 1.10. São três os tipos de recursos de interligação
presentes:
• recursos para interligação entre as LUTs, flip-flops e as matrizes de encaminhamento geral (General Routing
Matrix – GRM);
EndereçosINIT_0x
4096 x 1 2048 x 2 1024 x 4 512 x 8 256 x 16
INIT_00 255 - 0 127 - 0 63 - 0 31 - 0 15 - 0
INIT_01 511 - 256 255 - 128 127 - 64 63 - 32 31 - 16
INIT_02 767 - 512 383 - 256 191 - 128 95 - 64 47 - 32
INIT_03 1023 - 768 511 - 384 255 - 192 127 - 96 63 - 48
INIT_04 1279 - 1024 639 - 512 319 - 256 159 - 128 79 - 64
INIT_05 1535 - 1280 767 - 640 383 - 320 191 - 160 95 - 80
INIT_06 1791 - 1536 895 - 768 447 - 384 223 - 192 111 - 96
INIT_07 2047 - 1792 1023 - 896 511 - 448 255 - 224 127 - 112
INIT_08 2303 - 2048 1151 - 1024 575 - 512 287 - 256 143 - 128
INIT_09 2559 - 2304 1279 - 1152 639 - 576 319 - 288 159 - 144
INIT_0A 2815 - 2560 1407 - 1280 703 - 640 351 - 320 175 - 160
INIT_0B 3071 - 2816 1535 - 1408 767 - 704 383 - 352 191 - 176
INIT_0C 3327 - 3072 1663 - 1536 831 - 768 415 - 384 207 - 192
INIT_0D 3583 - 3328 1791 - 1664 895 - 832 447 - 416 223 - 208
INIT_0E 3839 - 3584 1919 - 1792 959 - 896 479 - 448 239 - 224
INIT_0F 4095 - 3840 2047 - 1920 1023 - 960 511 - 480 255 - 240
Tabela 1.4: Propriedades de inicialização dos blocos de memória
• linhas internas para realimentação dos CLBs, permitindo ligações rápidas entre as LUTs dum mesmo CLB,
encadeando-as com um mínimo de atraso de propagação;
• linhas directas que proporcionam ligações com elevada velocidade de propagação entre CLBs adjacentes
horizontalmente, eliminando o atraso introduzido pela matriz de encaminhamento geral.
da família Virtex da Xilinx 21
CLB
GRM para o GRMadjacente
para o GRMadjacente
para o GRMadjacente
para o GRMadjacente
ligação directa aoCLB adjacente
ligação directa aoCLB adjacente
Figura 1.10: Recursos de interligação local
1.4.2. RECURSOS GENÉRICOS DE INTERLIGAÇÃO
Grande parte dos sinais dentro da FPGA são encaminhados através de linhas genéricas (General Purpose
Routing – GPR) e, consequentemente, a maioria dos recursos de interligação estão associados a essas linhas.
Essas linhas estão localizadas em canais horizontais e verticais que se distribuem paralelamente às linhas e
colunas da matriz de CLBs. Os recursos genéricos de interligação presentes são os seguintes:
• adjacente a cada CLB encontra-se a matriz de encaminhamento geral (GRM); o GRM é uma matriz de
comutação através da qual as linhas genéricas horizontais e verticais são interligadas, sendo igualmente o
ponto pelo qual o CLB ganha acesso a essas linhas;
• 24 linhas de comprimento simples encaminham os sinais dum GRM para outro GRM adjacente, em
qualquer das quatro direcções;
• 72 linhas com amplificação de sinal encaminham os sinais dum GRM para outro GRM, distante seis
blocos, em cada uma das quatro direcções; estas linhas podem ser operadas somente a partir dos seus
extremos, mas os seus sinais podem ser acedidos quer nos extremos, quer a meio caminho (a três blocos da
fonte); 1/3 destas linhas são bidireccionais, sendo as restantes unidireccionais;
• 12 linhas longas, com amplificação de sinal, bidireccionais, estendendo-se vertical e horizontalmente ao
longo de todo o comprimento do componente, distribuem os sinais de forma rápida e eficiente.
1.4.3. RECURSOS DE INTERLIGAÇÃO PERIFÉRICOS
As Virtex possuem igualmente um conjunto de recursos de interligação periféricos, designados VersaRing,
dispostos entre a matriz de CLBs e os IOBs. Este conjunto adicional facilita a troca de pinos e a manutenção
da atribuição de sinais aos pinos aquando de alterações na lógica interna, evitando a necessidade de
redesenho da placa de circuito impresso (Printed Circuit Board – PCB).
22 Descrição arquitectónica
1.4.4. OUTROS RECURSOS DE INTERLIGAÇÃO
Para além dos já expostos, as Virtex possuem mais um conjunto de recursos de interligação dedicados a várias
funções específicas, como sejam a distribuição global e local de sinais de relógio, a propagação de sinais de
transporte verticalmente entre CLBs adjacentes e ainda recursos de encaminhamento horizontais, permitindo
a implementação de barramentos com terceiro estado. Quatro linhas de barramento segmentáveis são
disponibilizadas por cada linha de CLBs, permitindo a implementação de múltiplos barramentos dentro duma
mesma linha, conforme ilustrado na Figura 1.11. A segmentação das linhas ao longo da linha de CLBs é
efectuada por intermédio de buffers bidireccionais do tipo tri-state, intercalados de quatro em quatro CLBs,
alternadamente em cada uma das linhas. Duas linhas dedicadas em cada CLB, uma por cada slice, propagam
os sinais de transporte verticalmente até aos CLBs adjacentes, conforme ilustrado na Figura 1.12.
CLB CLB CLB CLB
Linhas c/3º estado
Figura 1.11: Linhas de barramento horizontais dedicadas
CIN
COUTslice 0
CIN
COUTslice 1
CIN
COUTslice 0
CIN
COUTslice 1
CLB
CLB
Figura 1.12: Linhas de transporte dedicadas
1.5. OS CIRCUITOS DE CONTROLO E DISTRIBUIÇÃO DE SINAIS DE RELÓGIO
Recursos de interligação global permitem a distribuição de relógio e doutros sinais com elevado número de
derivações, através de todo o componente. As Virtex incluem dois níveis de recursos de encaminhamento
global, referidos como recursos globais de encaminhamento de relógio primários e secundários. Os primários
são constituídos por quatro redes de distribuição com um porto de entrada dedicado e um buffer associado a
operar cada uma, desenhadas para possibilitar a distribuição de sinais de relógio com elevado número de
derivações, a velocidades elevadas e com o mínimo de atraso relativo (skew). Na Figura 1.13 encontra-se
da família Virtex da Xilinx 23
representado esquematicamente uma das redes de distribuição global de sinais de relógio. Cada rede global de
relógio pode operar todos os pinos internos de relógio de todos os CLBs, IOBs e blocos de memória. Os
secundários consistem em 24 linhas, doze colocadas ao longo do topo do componente e doze ao longo do
fundo. A partir destas linhas podem ser ligados até doze sinais por coluna, distribuídos pelas doze linhas longas
dessa coluna. Estes recursos secundários são mais flexíveis do que os primários, visto poderem ser
encaminhados para qualquer pino de E\S do componente.
GCLKPAD3
GCLKBUF3
GCLKPAD2
GCLKBUF2
GCLKPAD1
GCLKBUF1
GCLKPAD0
GCLKBUF0
Figura 1.13: Rede global de distribuição de relógio
Uma DLL totalmente digital associada a cada entrada global de relógio permite eliminar o atraso no sinal de
relógio entre o porto de entrada deste e as entradas de relógio internas espalhadas pelo componente. Cada
DLL pode operar duas redes globais de distribuição de relógio. A DLL monitoriza o sinal no porto de entrada
do relógio e compara-o com os sinais de relógio distribuídos ajustando automaticamente elementos de atraso
de modo a que as transições de relógio à entrada da lógica interna sejam síncronas com as transições do sinal
na entrada. Tal leva a que o sinal de relógio atinja a lógica interna um a quatro períodos de relógio depois de
24 Descrição arquitectónica
chegar à entrada. Este sistema em malha fechada efectivamente elimina o atraso na distribuição do sinal de
relógio ao garantir o sincronismo entre as transições do sinal de relógio que atinge a lógica interna e as do
sinal de relógio no porto de entrada. Operando a DLL uma das saídas do componente e realimentando-se o
sinal de volta, tal procedimento pode ser estendido ao nível da placa de circuito impresso, garantindo-se desta
forma a eliminação do atraso relativo do sinal de relógio entre múltiplos componentes.
Adicionalmente à eliminação do atraso na distribuição do sinal de relógio, a DLL permite a geração de quatro
fases em quadratura do sinal de relógio, e a duplicação ou a divisão por 1½, 2, 2½, 3, 4, 5, 8 ou 16 da sua
frequência.
1.6. A INFRA-ESTRUTURA BOUNDARY-SCAN
A família Virtex é totalmente conforme à norma IEEE 1149.1 Standard Test Access Port and Boundary-Scan
Architecture [IEEE Std 1149.1, 90], também conhecida pela designação JTAG (Joint Test Action Group), o
nome do grupo que esteve na sua génese, incluindo a sua arquitectura todos os elementos obrigatórios
definidos na norma. Esses elementos incluem:
• TAP (Test Access Port);
• controlador do TAP;
• registo de instrução;
• registo de varrimento pela periferia (Boundary-Scan – BS);
• registo de bypass.
São igualmente suportados alguns elementos adicionais totalmente compatíveis com a norma:
• um registo de identificação com 32 bits;
• um registo de identificação programável pelo utilizador;
• um registo de configuração.
Ao utilizador é permitida a configuração de dois registos por si definidos, os quais podem ser acedidos, depois
de criados, através dos pinos do TAP.
A Figura 1.14 ilustra a implementação interna dos registos presentes na infra-estrutura de teste Boundary Scan
das Virtex.
1.6.1. O TEST ACCESS PORT – TAP
O TAP nas Virtex é constituído por quatro pinos dedicados, três de entrada e um de saída, que controlam o
funcionamento desta infra-estrutura de teste, gerida por uma máquina de estados cujo diagrama de transição
está ilustrado na Figura 1.15.
Os quatro pinos dedicados são:
da família Virtex da Xilinx 25
• TMS – Test Mode Select A sequência de estados percorrida pelo controlador do TAP é determinada pelo
estado do pino TMS aquando da transição ascendente do relógio de teste (Test Clock – TCK). O pino
TMS possui uma resistência de pull-up interna, que assegura um valor lógico alto no caso de o pino não ser
usado.
IOB IOB IOB IOB IOB
IOB IOB
IOB IOB
IOB
IOBIOB
IOB
IOB IOB
Registo de instrução
Registo deBypass
TDI TDO
Registo de configuração
Registo de identificação
Versão Identificaçãodo componente
Código dofabricante
Reg. de identif. programável
2 registos opcionais
Figura 1.14: Registos internos da infra-estrutura de teste
• TCK – Test Clock Relógio de teste, sequencia o controlador do TAP e os registos associados a esta infra-
-estrutura de teste. O valor máximo da frequência do relógio de teste na família Virtex é de 33 MHz,
independente da velocidade do componente (entre 180 e 200 MHz, no máximo).
• TDI – Test Data In Entrada série de todas as instruções e dados para a infra-estrutura de teste. O estado
do controlador do TAP e a instrução guardada no registo de instrução, que indica a operação a executar,
determinam o registo que será atravessado pela sequência de bits injectada neste pino. O deslocamento
dos bits ocorre aquando da transição ascendente do relógio de teste (TCK). O pino TDI possui uma
resistência de pull-up interna que assegura um valor lógico alto no caso de o pino não ser usado.
• TDO – Test Data Out Saída série de todos os registos internos, instrução e dados. O estado do controlador
do TAP e a instrução guardada no registo de instrução, que indica a operação a executar, determinam
qual o registo que alimenta esta saída. O valor de TDO é alterado na transição descendente do relógio de
teste, encontrando-se activo somente durante o deslocamento de instruções ou dados através do
componente e em alta impedância durante o resto do tempo.
26 Descrição arquitectónica
1.6.2. O CONTROLADOR DO TAP
O controlador do TAP é uma máquina de estados finita com 16 estados, cujo diagrama está representado na
Figura 1.15. As três entradas do TAP controlam a forma como os dados são deslocados dentro dos vários
registos, sendo o estado do pino TMS, na altura da transição ascendente de TCK, que determina a sequência
de transição dos estados. Distinguem-se claramente no diagrama duas sequências principais idênticas, uma
para deslocar dados para o registo de dados seleccionado (ao centro na figura) e a outra para deslocar uma
instrução para o registo de instrução (à direita na figura).
A cada estado corresponde um comportamento bem definido, que sumariamente se descreve a seguir
[Maunder, 91, IEEE Std 1149.1, 90]:
• Test-Logic-Reset Neste estado toda a lógica de teste é inicializada, sem que de tal resulte qualquer
interferência para a normal operação do circuito integrado. Independentemente do estado inicial do
controlador do TAP, o estado Test-Logic-Reset é alcançado ao fim de cinco transições ascendentes no
relógio de teste, com o sinal TMS em nível lógico 1.
• Run-Test/Idle A instrução presente no registo de instrução determina o comportamento da lógica de teste
neste estado. Por exemplo, no caso de uma instrução de auto-teste interno, as respectivas operações serão
realizadas neste estado. Noutro caso, se a instrução presente no registo de instrução indicar a selecção
dum registo de dados, a lógica de teste permanecerá inactiva neste estado.
• Capture-DR Neste estado os dados presentes nas entradas paralelas do registo ou registos de dados
seleccionados pela presente instrução, são transferidos para o andar de captura/deslocamento das
respectivas células.
• Shift-DR O registo de dados seleccionado pela instrução actual transfere o conteúdo do andar de
captura/deslocamento das respectivas células para o exterior, através do pino TDO. A operação de
deslocamento permite que os dados previamente capturados sejam examinados no exterior, e que novos
dados sejam deslocados para o interior para serem aplicados.
• Update-DR Este estado marca o fim da operação de deslocamento. Os andares de retenção serão
actualizadas neste estado com os novos valores presentes no andar de captura/deslocamento das
respectivas células.
• Capture-IR, Shift-IR e Update-IR Estes estados são análogos respectivamente aos estados Capture-DR, Shift-
-IR e Update-IR, mas dizem neste caso respeito ao registo de instrução. Nestes estados uma nova instrução
pode ser deslocada, tornando-se activa no estado Update-IR.
da família Virtex da Xilinx 27
Shift-DR
Select-DR-Scan
Test-LogicReset1
Run-Test/Idle0
0
1
Capture-DR
0
0
Exit1-DR
Pause-DR
Exit2-DR
Update-DR
0
1
0
1
1
0
1
1
0
Shift-IR
Select-IR-Scan
Capture-IR
0
0
Exit1-IR
Pause-IR
Exit2-IR
Update-IR
0
1
0
1
1
0
1
1
0
1
01 01
1
Figura 1.15: Diagrama de estados do controlador do TAP4
É importante referir que a acção descrita nos estados Update-IR e Update-DR tem lugar à transição
descendente de TCK. Em todos os outros as acções descritas acontecem aquando da transição ascendente de
TCK, na altura da mudança de estado (ver Figura 1.16). Conforme já referido anteriormente, TDO encontra-
-se activo somente durante o deslocamento de instruções ou dados através do componente, isto é, nos estados
Shift-DR e Shift-IR, e em alta impedância em todos os outros. Nos restantes oito estados a lógica de teste está
inactiva. Os estados Pause-DR e Pause-IR possibilitam uma paragem temporária do processo de deslocamento,
permitindo, por exemplo, que o equipamento exterior que controla o teste aceda à sua memória para buscar
novos dados a serem deslocados. Os estados Select-DR-Scan, Select-IR-Scan, Exit1-DR, Exit1-IR, Exit2-DR e
Exit2-IR são estados de decisão quanto ao caminho a seguir no diagrama de estados.
4 O valor adjacente a cada transição de estado representa o sinal presente em TMS aquando da transição ascendente deTCK.
28 Descrição arquitectónica
TCK
Estado
Transiçãode estado
Acções que ocorrem na transiçãodescendente de TCK
(Update-DR e Update-IR)
Acções que ocorrem natransição ascendente de TCK
(todas as restantes)
Figura 1.16: Diagrama temporal das acções que ocorrem nas transições de TCK
1.6.3. O REGISTO DE INSTRUÇÃO
O registo de instrução apresenta-se na família Virtex como um registo de deslocamento de 5 bits com entradas
e saídas paralelas. A instrução deslocada para o seu interior é carregada, tornando-se activa, aquando da
passagem pelo estado Update-IR, sendo simultaneamente capturada informação sobre o estado interno do
componente, que por sua vez pode ser deslocada para o exterior para posterior análise.
1.6.4. O REGISTO DE VARRIMENTO PELA PERIFERIA (BOUNDARY-SCAN – BS)
O registo principal de dados é o registo de varrimento pela periferia (BS). A operação deste registo é
independente da configuração individual de cada IOB, ligado ou não a um pino do componente, que assim
contribuem para este registo sempre com três bits. A Figura 1.17 apresenta o esquema completo de um IOB,
incluindo toda a lógica associada à implementação da respectiva célula BS.
Quando, em virtude da instrução presente no registo de instrução, é este o registo seleccionado, a captura
paralela dos dados para o registo de deslocamento ocorre à transição ascendente de TCK, estando o
controlador do TAP no estado Capture-DR. Esses dados são deslocados para o exterior e substituídos por
dados novos durante o estado Shift-DR. O elemento de retenção existente em cada célula deste registo
assegura a estabilidade do valor presente na sua saída paralela, durante o processo de deslocamento, de
acordo com o especificado na norma IEEE 1149.1 [IEEE Std 1149.1, 90]. A actualização dos valores nas
saídas paralelas dar-se-à durante o estado Update-DR, à transição descendente de TCK.
Os bits da cadeia de varrimento periférico (BS), dentro de cada IOB, apresentam-se pela seguinte ordem:
entrada, saída, controlo do 3º estado. Os pinos de entrada dedicados5 contribuem com somente um bit para a
cadeia, enquanto que os pinos de saída dedicados contribuem com três [Xilinx, 00b].
5 Pinos não associados a IOBs configuráveis, excluindo, conforme definido na norma, os pinos do TAP.
da família Virtex da Xilinx 29
Atr
aso
Prog
ram
ável
VR
EF
Wea
kK
eepe
r
OBU
FT
IBU
F
T
TC
E O
OC
E I
IQ SRC
LK ICE
Controlo doterceiro estado Saída
Entr
ada
Ass
íncr
ona
Entr
ada
Sínc
rona
SR
CED
Q
SR
CE
DQ
SR
CE
DQ
Port
o
VC
CO
Pull
upPu
ll do
wn
para
o b
uffe
r glo
bal d
e re
lógi
o(s
omen
te n
os p
orto
s de
reló
gio)
1 0
Disj
unçã
o ló
gica
entr
e IN
TES
T e
EXT
EST
sd
LEDQ
TES
TLO
GIC
RES
ET
DQ
UPD
AT
E
1X 01 001X 01 00
TD
I
INT
EST SH
IFT
CLO
CK
DA
TA
REG
IST
ER
1 01 0
sd
LEDQ
DQ
EXT
EST
DQ
sd
LEDQ
1X 01 00
TD
O
Lógi
ca B
S pr
esen
teem
cad
a IO
B
And
ar d
e ca
ptur
a/de
sloca
men
toA
ndar
de
rete
nção
Figura 1.17: IOB com a respectiva célula BS
30 Descrição arquitectónica
A Tabela 1.5 mostra a sequência dos bits na cadeia de varrimento periférico, iniciando-se em TDO e seguindo
em sentido directo, visto do lado dos pinos, até atingir TDI, conforme se ilustra na Figura 1.18. Numa
sequência de deslocamento do conteúdo da cadeia de varrimento periférico o primeiro bit a aparecer em TDO
será o correspondente ao controlo do 3º estado do IOB mais próximo de TDO. A sequência dos portos na
cadeia BS é descrita para cada componente através dum ficheiro BSDL (Boundary-Scan Description Language).
Bit 0 (junto a TDO)
Bit 1
Bit 2
(junto a TDI)
Metade direita do conjunto de IOBs do topo(direita para a esquerda)
GCLK3
GCLK2
Metade esquerda do conjunto de IOBs do topo(direita para a esquerda)
IOBs do lado esquerdo (de cima para baixo)
M1
M0
M2
Metade esquerda do conjunto de IOBs do fundo(Esquerda para a direita)
GCLK1
GCLK0
Metade direita do conjunto de IOBs do fundo(Esquerda para a direita)
DONE
PROG
IOBs do lado direito (de baixo para cima)
CCLK
Tabela 1.5: Sequência de bits na cadeia BS
1.6.5. O REGISTO DE BYPASS
O registo de Bypass é um registo de dados constituído por um único flip-flop inserido entre TDI e TDO,
permitindo um percurso de comprimento mínimo entre estes dois pinos. Este registo é inicializado a zero
aquando da transição ascendente de TCK, na passagem do controlador do TAP pelo estado UPDATE-DR
[Xilinx, 00b].
1.6.6. O REGISTO DE IDENTIFICAÇÃO
As Virtex possuem um registo de identificação com 32 bits (IDCODE), que permite a fácil identificação do
componente a ser testado ou programado através da cadeia BS. O formato dos dados neste registo, pré-
-definido pelo fabricante, está representado na Tabela 1.6. O componente é identificado pelo código da
da família Virtex da Xilinx 31
família, no caso das Virtex, 03h, e pelo número de linhas que constituem a matriz de CLBs do componente. O
código de fabricante da Xilinx é 49h.
Vista inferiordo componente
TDITDO
GCLK2GCLK3
M1M0 M2
GCLK1 GCLK0
PROGDONE
CCLK
Porto
(de TDI)
(para TDO)
Vista superiordo
componente
TDI TDO
Figura 1.18: Identificação do sentido da cadeia BS dentro do componente
Identificação do componenteVersão
Código da família Nº linhas de CLBs
Código do
fabricanteLSB
31...28 27...21 20...12 11...1 0
xxxx 0000 011 y yyyy yyyy 0000 1001 001 1
Tabela 1.6: Conteúdo do registo de identificação na família Virtex
1.6.7. O REGISTO DE IDENTIFICAÇÃO DO UTILIZADOR
As Virtex suportam igualmente um registo de identificação adicional (USERCODE) de comprimento 32 bits,
o qual permite que o utilizador especifique um código de identificação próprio para cada implementação. O
conteúdo é definido pelo utilizador aquando da geração do ficheiro de configuração, pelo que este só se torna
válido após a configuração da FPGA, podendo a partir daí ser acedido em qualquer altura para verificação.
1.6.8. O REGISTO DE CONFIGURAÇÃO
O registo de configuração através da infra-estrutura BS possui 32 bits e permite o acesso ao barramento de
configuração do componente para operações de escrita (configuração) e leitura.
32 Descrição arquitectónica
1.6.9. OS REGISTOS DO UTILIZADOR
O utilizador pode igualmente definir durante o projecto até dois registos de dados adicionais (USER1 e
USER2), que serão válidos apenas após a configuração. Estes registos, uma vez criados, podem ser acedidos
através dos pinos do TAP, da mesma forma que os restantes registos de dados, através das instruções
opcionais USER1 e USER2. Uma vez que os pinos e a lógica de teste associadas à infra-estrutura BS são
dedicados, não é necessária a adição ao projecto de qualquer elemento para possibilitar o seu uso. No entanto,
se se pretender definir registos próprios, será necessário declará-lo explicitamente através do uso de uma
macro para esse fim, cujo símbolo se encontra representado na Figura 1.19.
Essa macro possui dois pinos, SEL1 e SEL2, que determinam qual o registo a aceder, dois pinos de relógio
independentes para cada registo, DRCK1 e DRCK2, e pinos de saída partilhados que representam o estado do
controlador do TAP, Reset, Shift e Update.
Figura 1.19: Representação simbólica da macro BSCAN_VIRTEX
1.6.10. O CONJUNTO DE INSTRUÇÕES
O modo de operação da infra-estrutura Boundary-Scan é determinado pelo conjunto de instruções suportado
pela família Virtex, conjunto esse apresentado na Tabela 1.7. A cada instrução corresponde um
comportamento bem definido, que a seguir se detalha:
• EXTEST Esta instrução permite o teste das ligações na carta de circuito impresso (CCI), seleccionando
para este efeito o registo de varrimento pela periferia (BS). O conteúdo dos respectivos andares de
retenção define o estado dos pinos de saída, aquando da transição descendente de TCK, no estado
Update-DR, enquanto que os sinais recebidos nos pinos de entrada são carregados para os andares de
captura/deslocamento das mesmas células, aquando da transição ascendente de TCK, no estado
Capture-DR.
• SAMPLE/PRELOAD Esta instrução, que selecciona igualmente o registo de varrimento pela periferia
(BS), permite que uma amostra do funcionamento normal do componente seja capturada e examinada,
sem que esse funcionamento seja perturbado. A mesma instrução permite que em simultâneo se
da família Virtex da Xilinx 33
carreguem valores, previamente deslocados, nos elementos de retenção de cada célula BS, ficando
disponíveis para operações posteriores.
Instrução Código (4:0) Descrição
EXTEST 00000 Habilita a operação EXTEST
SAMPLE/PRELOAD 00001 Habilita a operação SAMPLE/PRELOAD
USER1 00010 Acede ao registo 1, definido pelo utilizador
USER2 00011 Acede ao registo 2, definido pelo utilizador
CFG_OUT 00100 Acede ao barramento de configuração paraleitura
CFG_IN 00101 Acede ao barramento de configuração paraescrita
INTEST 00111 Habilita a operação INTEST
USERCODE 01000 Permite deslocar para o exterior o conteúdodo registo de identificação do utilizador
IDCODE 01001 Permite deslocar para o exterior o conteúdodo registo de identificação do componente
HIGHZ 01010 Coloca os pinos de saída em 3º estado ehabilita o registo de Bypass
JSTART 01100 Permite que TCK seja o relógio quesequencializa o arranque após a configuração
BYPASS 11111 Selecciona o registo de Bypass
RESERVED Todos os outros Códigos reservados
Tabela 1.7: Instruções suportadas pela infra-estrutura Boundary-Scan das Virtex
• USER1 e USER2 Estas instruções permitem o acesso aos registos do utilizador.
• CFG_OUT Esta instrução permite a leitura da configuração do dispositivo e, opcionalmente, do estado
actual dos registos internos dos CLBs e IOBs, e dos valores presentes nas tabelas de consulta dos CLBs e
nos blocos de memória, quer na sua totalidade, quer parcialmente.
• CFG_IN Esta instrução permite realizar a configuração do dispositivo, quer total quer parcialmente.
• INTEST Esta instrução, que selecciona o registo de varrimento pela periferia (BS) como registo de dados,
permite o teste da lógica interna do componente. Os estímulos de teste são deslocados e aplicados nas
entradas da lógica interna aquando da transição descendente de TCK, no estado Update-DR, sendo os
resultados obtidos nas suas saídas capturados para esse mesmo registo aquando da transição ascendente de
TCK, no estado Capture-DR, e posteriormente deslocados para o exterior.
• USERCODE Esta instrução selecciona o registo de identificação, cujo conteúdo é definido pelo utilizador,
permitindo o seu deslocamento para o exterior.
34 Descrição arquitectónica
• IDCODE Esta instrução selecciona o registo de identificação do componente, cujo conteúdo é definido
pelo fabricante (vide Tabela 1.6), permitindo o seu deslocamento para o exterior.
• HIGHZ Esta instrução selecciona o registo de Bypass e coloca todos os pinos de saída em terceiro estado.
• JSTART Após o deslocamento dos bits de configuração, a FPGA passa por uma sequência de arranque
antes de ficar operacional. Na configuração através da infra-estrutura BS, esta instrução torna TCK o
relógio que sequencializa essa etapa. O número mínimo de períodos de TCK requeridos pela sequência de
arranque é de doze.
• BYPASS Esta instrução selecciona o registo de Bypass, como o registo que interliga TDI a TDO durante o
estado Shift-DR, e coloca todas as células BS em modo transparente.
Todas as instruções estão disponíveis antes e após a configuração, com excepção de USER1 e USER2,
disponíveis apenas após a configuração e só se o seu uso tiver sido explicitamente definido.
1.7. A MEMÓRIA DE CONFIGURAÇÃO
A memória de configuração das Virtex, do tipo SRAM, permite um número infinito de reconfigurações do
componente, tendo no entanto a desvantagem da sua volatilidade, o que obriga à existência de uma memória
ou processador externo dedicado a esta tarefa.
A configuração das FPGAs da família Virtex desenrola-se ao longo de três fases:
1. limpeza da memória de configuração;
2. transferência dos dados de configuração para a memória de configuração do componente;
3. activação da lógica por intermédio duma sequência de arranque.
Alguns dos pinos usados para a configuração são dedicados, enquanto outros são reutilizáveis como pinos de
entrada, saída ou bidireccionais de uso geral, uma vez terminada a configuração. A Tabela 1.8 lista esses
pinos, indicando resumidamente a sua função e qual a sua funcionalidade após a configuração.
Dependendo do modo seleccionado, o relógio de configuração terá uma das seguintes origens: ser gerado
internamente na própria FPGA; provir de uma fonte externa (actuando neste caso o pino CCLK como um
pino de saída ou de entrada, respectivamente); ou ainda provir da entrada TCK do TAP.
1.7.1. MODOS DE CONFIGURAÇÃO
As Virtex suportam quatro modos de configuração [Xilinx, 00e]:
• Modo mestre-série;
• Modo escravo-série;
• Modo SelectMAP;
da família Virtex da Xilinx 35
• Modo boundary-scan.
Nome Direcção Tipo Descrição Funcionalidade apósconfiguração
Pinos dedicados
CCLK E/S Activa Relógio de configuração (saídano modo mestre-série) Entrada
PROG Entrada - Reset assíncrono da lógica deconfiguração
DONE E/S Activa/Colector--aberto
Estado da configuração econtrolo da sequência de
arranque
M2, M1, M0 Entrada - Selecção do modo deconfiguração
TMS Entrada - Modo do TAP
TCK Entrada - Relógio do TAP
TDI Entrada - Entrada de dados do TAP
TDO Saída Activa Saída de dados do TAP
-
Pinos não dedicados
DIN(D0) Entrada - Entrada de dados nasconfigurações série E/S
[D1:D7] E/S Activabidireccional
Entrada de dados deconfiguração e saída de dados de
leitura no modo SelectMAP
CS Entrada - Selecção do componente
WRITE Entrada -Escrita (0) ou leitura (1) damemória de configuração no
modo SelectMAP
E/S a menos que sejaretido pelo modo
SelectMAP
BUSY/DOUT Saída Colector--aberto/activa
Estado BUSY/READY no modoSelectMAP; saída série dosdados nos modos série de
configuração
INIT E/S Colector-aberto Atrasa a configuração, indicaerro de configuração
E/S
Tabela 1.8: Pinos de configuração
36 Descrição arquitectónica
Os pinos de modo determinam qual o modo de configuração seleccionado e a configuração das saídas dos
IOBs, com resistência de pull-up interna ou em alta impedância, antes da configuração se tornar activa. Após
a activação da configuração as saídas não usadas passam ao estado de alta impedância, enquanto as outras
assumem o estado determinado na configuração. Os códigos de selecção do modo de configuração
encontram-se listados na Tabela 1.9.
Modo deconfiguração M2 M1 M0 Sentido
de CCLKComprimento dapalavra de dados
DOUT
sérieResistência de pull-up
nas saídas
Modo mestre-série 0 0 0 Saída 1 Sim Não
Modo boundary-scan 1 0 1 - 1 Não Não
Modo SelectMAP 1 1 0 Entrada 8 Não Não
Modo escravo-série 1 1 1 Entrada 1 Sim Não
Modo mestre-série 1 0 0 Saída 1 Sim Sim
Modo boundary-scan 0 0 1 - 1 Não Sim
Modo SelectMAP 0 1 0 Entrada 8 Não Sim
Modo escravo-série 0 1 1 Entrada 1 Sim Sim
Tabela 1.9: Códigos de selecção do modo de configuração
A configuração através do TAP, isto é, o modo boundary-scan, é sempre possível, independentemente do
modo seleccionado. A selecção deste modo simplesmente desactiva os outros modos. Os pinos de modo
possuem resistências de pull-up internas, pelo que, por omissão, se não ligados, se encontram em nível lógico 1
(modo escravo-série).
1.7.1.1. O MODO DE CONFIGURAÇÃO MESTRE-SÉRIE
No modo mestre-série o componente é interligado ao seguinte ou seguintes, caso existam, através de uma
cadeia-série, tornando possível a configuração em série de vários componentes. No caso de ser componente
único ou de ser o primeiro elemento duma cadeia, deve estar neste modo de configuração, enquanto os
restantes, se existirem, se devem encontrar em modo de configuração escravo-série. O relógio de configuração
é gerado internamente e fornecido para o exterior através do pino CCLK, sendo aplicado quer aos possíveis
restantes elementos da cadeia, quer a uma memória externa, não volátil, de porta série, que alimenta com os
dados de configuração a entrada DIN da FPGA (os dados são aceites por esta entrada na transição
ascendente de CCLK). Uma vez transferida a totalidade dos dados para a primeira FPGA, os dados para o
próximo componente tornam-se válidos no seu pino DOUT, aquando da transição descendente seguinte de
CCLK. A Figura 1.20 exemplifica este modo de configuração.
da família Virtex da Xilinx 37
1Se nenhuma das Virtex for seleccionada para controlar a linha DONE, é necessário o uso de uma resistência de pull-up de 330Ω nesta linha
M2M1M0
DOUT
CCLK
INITDONE
VIRTEXESCRAVO
SÉRIE
DIN
VIRTEXMESTRE
SÉRIE
M2M1M0
DOUT
CCLKDIN
INITDONE
VCC
CLKDATACERESET/OE
CEO
3,3V
4,7K
PROGRAM
Resistência depull-up opcional1
Memória(ex: XC1701L)
PROG PROG
VCC
Figura 1.20: Modo de configuração mestre/escravo série
1.7.1.2. O MODO DE CONFIGURAÇÃO ESCRAVO-SÉRIE
Neste modo os dados de configuração que se apresentam na entrada DIN do componente são provenientes da
saída DOUT da FPGA, que actua como mestre no sistema de configuração, sendo este componente que
fornece igualmente o sinal à entrada de relógio CCLK. Note-se que não é obrigatório que o componente que
precede uma FPGA em modo de configuração escravo-série seja uma FPGA em modo de configuração
mestre—série, como representado na Figura 1.20. Basta que exista uma fonte de sinal de relógio de
configuração exterior e que este seja aplicado quer à memória de porta série, que contém os dados de
configuração, quer ao(s) componente(s) a ser configurado(s) neste modo. Todas as restantes FPGAs a
configurar são ligadas em cadeia, com o pino DOUT de uma ligado ao pino DIN da seguinte.
A frequência de CCLK é, por omissão, de 2,5 MHz no arranque. Esta frequência é usada até que a sequência
de bits de configuração, que contém o campo ConfigRate, seja carregada. A menos que outro valor seja
especificado no projecto, o valor desse campo é de 4 MHz. A frequência máxima permitida é de 60 MHz,
devendo-se no entanto assegurar que todos os componentes envolvidos, memória e restantes FPGAs na
cadeia, são suficientemente rápidos para suportarem este valor.
A Figura 1.21 apresenta o diagrama de fluxo do modo série de configuração. A entrada PROG permite a
limpeza assíncrona da memória de configuração, pelo que a FPGA limpa ciclicamente essa memória,
enquanto esta linha estiver forçada a zero. Depois de libertada a linha PROG, a memória de configuração é
limpa mais uma vez antes de libertar a linha INIT. A sequência de configuração só tem início quando todos os
pinos INIT de todos os componentes da cadeia estiverem a nível lógico 1.
38 Descrição arquitectónica
Recebealimentação
INIT?
Coloca PROG= 1
Liberta INIT
0
1
Carrega um bit deconfiguração
Fim dos bits deconfiguração
Não
Sim
Configuraçãocompleta
A FPGA inicia a limpeza dasua memória de configuração
A FPGA efectua uma últimapassagem de limpeza,libertando no final INIT
Uma vez por pacote de bits, aFPGA verifica os dados,colocando INIT=0 em casode erro
Se não forem encontradoserros, a FPGA entra na fasede arranque (DONE=1)
Se usado para atrasar aconfiguração
Figura 1.21: Diagrama de fluxo do modo série de configuração
O pino INIT possui duas funções distintas: indica se a memória de configuração da FPGA já está limpa e
como tal se se pode dar início à configuração; e se existe erro na transmissão dos bits de configuração. Neste
último caso INIT passa automaticamente a nível lógico 0, abortando a configuração. O valor de INIT pode
ser forçado exteriormente a nível lógico 0, de modo a atrasar o início da configuração. Como veremos mais
adiante, este procedimento não se aplica aos casos em que a reconfiguração é apenas parcial e efectuada de
forma dinâmica.
Após a configuração a FPGA entra numa sequência de arranque, que a conduz do seu estado de configuração
para o seu estado de operação, compreendendo uma série de oito estados onde são efectuadas as seguintes
tarefas:
4. Libertação do pino DONE;
5. Negação do sinal GTS (Global TriState), conduzindo à activação de todas as E/S;
6. Activação do sinal GWE (GlobalWriteEnable), permitindo que as memórias e os flip-flops mudem de estado
(o seu estado só mudará aquando da activação do sinal GSR);
da família Virtex da Xilinx 39
7. Negação do sinal GSR (GlobalSetReset), conduzindo à mudança de estado dos flip-flops;
8. Activação da flag interna EOS (End-Of-Start).
Por omissão, a libertação do pino DONE ocorre no quarto estado da sequência de arranque. No entanto, tal é
configurável pelo utilizador, podendo definir-se a sua ocorrência entre o primeiro e o sexto estado. De igual
forma, o estado em que ocorre a activação das E/S, bem como dos blocos internos de memória e a
inicialização de cada flip-flop no estado pré-definido pela configuração (alteração dos sinais GTS, GWE e
GSR), pode ser configurada, quer especificando um estado fixo para essa ocorrência (entre o primeiro e o
sexto), quer tornando-a dependente da transição do sinal DONE, situação em que a alteração dos sinais
ocorre sincronamente com a primeira transição ascendente do sinal do relógio de arranque após a transição
do sinal DONE. Ambas as possibilidades estão representadas na Figura 1.22. A sequência de arranque pode
ainda ser atrasada, forçando exteriormente a linha DONE a nível lógico 0.
Relógio de arranque
Estado
DONE
GTS
GSR
GWE
0 1 2 3 4 5 6 7
Relógio de arranque
Estado
DONE
GTS
GSR
GWE
0 1 2 3 4 5 6 7
Por omissão
Síncrono com DONE
DONE=1
Figura 1.22: Sequência de arranque
1.7.1.3. O MODO DE CONFIGURAÇÃO SELECTMAP
O modo SelectMAP é o mais rápido, uma vez que é o único em que a transmissão dos dados para a memória
de configuração do componente é efectuada de forma paralela, através de um barramento de oito bits. O fluxo
dos dados é controlado através de uma flag (BUSY), podendo a frequência do relógio de configuração atingir
os 60MHz. Vários componentes podem ser colocados em paralelo, sendo o componente a configurar
seleccionado através de uma linha única de selecção (CS), conforme se ilustra na Figura 1.23, devendo os
restantes sinais (DATA[0:7], CCLK, WRITE, BUSY, PROG, DONE e INIT) de todos os componentes da
cadeia ser ligados em paralelo. Se o ficheiro de configuração for o mesmo para todos os componentes, ou parte
40 Descrição arquitectónica
deles, e a opção de leitura não for usada, a linha CS desses componentes pode ser interligada, sendo
configurados em simultâneo. Embora não representado na Figura 1.23, este modo de configuração exige um
módulo de controlo que pode ser um processador, um microprocessador, ou outro dispositivo capaz de
desempenhar esta tarefa.
VIRTEXSelectMAP
M0M2M1
BUSY
INITPROGDONE
PROG
Resistência depull-up opcional
VCC
D[0:7]CCLKWRITE
CSCS(0)
VIRTEXSelectMAP
M0M2M1
BUSY
INITDONE
VCC
D[0:7]CCLKWRITE
CSCS(1)
INITDONE
BUSY
DATA[0:7]CCLK
WRITE
VCC
PROG
Figura 1.23: Modo de configuração SelectMAP
Após a configuração os pinos de dados comportam-se como pinos de E/S normais. Note-se no entanto que a
sua funcionalidade deve ser retida, o que pode ser especificado aquando da geração do ficheiro de
configuração, se se pretender realizar operações de leitura da memória de configuração usando este modo. A
Figura 1.24 apresenta o diagrama de fluxo do modo de configuração SelectMAP.
1.7.1.4. O MODO DE CONFIGURAÇÃO BOUNDARY-SCAN
Este modo sobrepõem-se a todos os outros e pode ser usado mesmo que através dos pinos de modo [M2:M0]
outro modo esteja seleccionado. Uma vez que toda a configuração é efectuada usando apenas os pinos do
TAP, este modo não requer a existência de pinos dedicados.
A configuração através do TAP usa a instrução CFG_IN, que converte os dados entrados por TDI em pacotes
para o barramento interno de configuração. A Figura 1.25 ilustra o fluxo de configuração neste modo.
O componente a ser configurado pode ser único na cadeia BS ou fazer parte de uma cadeia com múltiplos
componentes, configuráveis ou não. Quando se configura um único componente através da cadeia BS, deve-
-se assegurar que na geração do ficheiro de configuração é indicado TCK como relógio de configuração. A
Tabela 1.10 descreve a sequência de comandos de controlo do TAP, necessários para se proceder à
configuração de um único componente.
da família Virtex da Xilinx 41
Recebealimentação
INIT?
Coloca PROG= 1
Liberta INIT
0
1
A FPGA inicia a limpeza dasua memória de configuração
A FPGA efectua uma últimapassagem de limpeza,libertando no final INIT
Se usado para atrasar aconfiguração
ColocaWRITE= 0
ColocaCS= 0
Coloca o byte deconfiguração
BUSY?1
0
Fim dos dados?Não
Sim
Na primeira FPGA
Na primeira FPGAColocaCS= 1
Repete asequência A Para outra qualquer FPGA
ColocaWRITE= 1
Configuraçãocompleta
Verifica os dados colocandoINIT=0 em caso de erro
Sequência A
Não havendo erros a primeiraFPGA entra na fase dearranque, libertando DONE
Quando todos os pinosDONE forem libertados,DONE=1 e a sequência dearranque finaliza
Figura 1.24: Diagrama de fluxo do modo SelectMAP de configuração
42 Descrição arquitectónica
Recebealimentação
INIT?0
1
Carrega ainstrução CFG_IN
Carrega a cadeiade dados deconfiguração
Dadoscorrectos?
Não
Sim
Sequência dearranque
Operacional
Infra-estrutura BS disponível
Aborta arranque
Carrega ainstrução JSTART
Reconfigurar?Sim
Limpa mais umavez a memória de
configuração
Limpa a memóriade configuração
PROG=0?
Sequência deshutdown
Sim
Figura 1.25: Diagrama de fluxo do modo boundary-scan de configuração
É igualmente possível a configuração de múltiplos componentes numa mesma cadeia BS, um de cada vez. A
instrução CFG_IN deve ser carregada no componente que se pretende configurar, colocando todos os outros
da cadeia em Bypass. Para a configuração de vários componentes numa cadeia pode ser necessário o
deslocamento de alguns zeros (N) antes do início do ficheiro de configuração. A equação 1.1 permite
determinar o número de zeros a acrescentar, em função da posição na cadeia (M) do componente a
configurar. Note-se que à primeira posição corresponde o componente zero.
da família Virtex da Xilinx 43
Aplica e mantémDescrição da sequência de passos do controlador do TAP
TDI TMS
# impulsosde TCK
1Ao receber a alimentação, com TMS a 1, cinco impulsos derelógio em TCK asseguram que o estado Test-Logic-Reset éalcançado
X 1 5
2 Passa ao estado Run-Test/Idle X 0 1
3 Passa ao estado Select-IR X 1 2
4 Entra no estado Shift-IR X 0 2
5 Começa a carregar a instrução CFG_IN6 0101 0 4
6 Carrega o último bit da instrução CFG_IN quando deixa Shift-IR 0 1 1
7 Entra no estado Select-DR X 1 2
8 Entra no estado Shift-DR X 0 2
9 Desloca o ficheiro de configuração (bitn (mais significativo) é opriemiro bit do ficheiro de configuração) bit1...bitn 0 (# bits no
ficheiro)-1
10 Desloca o último bit do ficheiro de configuração bit0 1 1
11 Entra no estado Update-DR X 1 1
12 Entra no estado Select-IR X 1 2
13 Passa para o estado Shift-DR X 0 2
14 Começa a carregar a instrução JSTART, que inicializa asequência de arranque 1100 0 4
15 Carrega o último bit da instrução JSTART, quando deixa Shift-IR 0 1 1
16 Passa para o estado Select-DR X 1 2
17 Passa para o estado Shift-IR e aplica um mínimo de doze ciclos derelógio para executar a sequência de arranque X 0 ≥14
18 Passa ao estado Update-DR X 1 2
19 Retorna ao estado Run-Test-Idle X 0 1
Tabela 1.10: Sequência de configuração de um único componente
32)(M paraM32N
1.1 Eq.32)(M para32M
mod32N
≤−=
>
−=
6 Na coluna TDI, o bit mais à direita é deslocado em primeiro lugar.
44 Descrição arquitectónica
Depois de ter deslocado os ficheiros de configuração, um a um, para cada componente da cadeia, carrega-se a
instrução JSTART em todos eles, aplicando de seguida doze impulsos em TCK, após o que ficarão todos
operacionais. A Figura 1.26 ilustra as ligações dos componentes para o modo de configuração boundary-scan.
VIRTEXFPGA
PROG1
TDITMSTCK
TDO
VIRTEXFPGA
TDITMSTCK
TDO
VIRTEXFPGA
TDITMSTCK
TDOTDO
TMSTCK
TDI
ControladorBS
Componente 0 Componente 1 Componente 2
1O pino PROG deve ser mantido liberto durante a configuração através da cadeia BS
PROG1 PROG1
Figura 1.26: Modo de configuração boundary-scan
da família Virtex da Xilinx 45
2.CONFIGURAÇÃO E LEITURA
Nas aplicações típicas das FPGAs não é necessária uma compreensão aprofundada dos mecanismos de
configuração, nem o entendimento ao nível do bit do formato dos ficheiros de configuração. No entanto, para
operações de depuração, de leitura, de reconfiguração parcial ou outras, este conhecimento é fundamental.
Nos subcapítulos seguintes são analisados em detalhe o formato dos ficheiros de configuração, bem como a
lógica interna e o processo de configuração e leitura dos dados.
2.1. VECTORES DE DADOS
A memória interna de configuração está dividida em segmentos, designados por vectores, sendo as porções do
ficheiro de dados de configuração que são escritos nesta memória designados por vectores de dados. O
número e comprimento desses vectores depende do tamanho, em termos de lógica, da FPGA. A título de
exemplo, o componente XCV200 da família Virtex possui 2317 vectores, tendo cada um o comprimento de
576 bits (18 palavras), num total de 1 335 872 bits de configuração. O número total é obtido pelo produto
entre o número de vectores e o seu comprimento, a que se acrescenta o número de bits necessários para
configurar os registos internos que controlam a operação de configuração.
2.2. REGISTOS DE CONFIGURAÇÃO
A lógica de configuração das Virtex foi concebida de tal forma que é possível a partir do exterior ter um
controlo completo sobre todas as funções de configuração. Os registos internos que controlam essas funções,
listados na Tabela 2.1, são endereçáveis directamente através de um barramento de configuração comum,
podendo o seu valor ser lido e alterado do exterior. Todos os dados de configuração, com excepção das
palavras de sincronização e mudas7, são escritas em registos internos de configuração.
2.2.1. REGISTO DE COMANDOS (CMD)
Os comandos carregados no registo CMD controlam o funcionamento da máquina de estados que rege a
configuração, os registos de vectores de dados e alguns sinais globais. O comando presente no registo de
comandos é executado sempre que o registo de endereço do vector (FAR) é carregado com um novo valor,
sendo suportados os comandos apresentados na Tabela 2.2.
7 A lógica interna de configuração das Virtex necessita de alguns ciclos de relógio para se inicializar. Por esse motivo sãoacrescentados no início do ficheiro de configuração algumas palavras que não contêm informação válida (mudas). Nacontinuação deste documento o termo “mudo” será usado sempre que a informação não tenha valor relevante
46 Descrição arquitectónica
Símbolo Nome do registo Leitura/Escrita Endereço
CRC Verificação por redundância cíclica L/E 0000b
FAR Endereço do vector L/E 0001b
FDRI Entrada de vectores de dados E 0010b
FDRO Saída de vectores de dados L 0011b
CMD Comandos L/E 0100b
CTL Controlo L/E 0101b
MASK Máscara do registo de controlo L/E 0110b
STAT Estado L 0111b
LOUT Saída de dados para configuração em cadeia E 1000b
COR Opções de configuração L/E 1001b
Reservado - - 1010b
FLR Comprimento do vector L/E 1011b
Reservado - - 11xxb
Tabela 2.1: Registos internos de configuração
2.2.2. REGISTO DO COMPRIMENTO DO VECTOR (FLR)
O registo FLR é escrito no início da configuração com o valor do comprimento do vector em termos de
número de palavras de 32 bit. Recorde-se que esse comprimento é variável, dependendo do tamanho, em
termos de lógica, do componente. Se o número total de bits não for divisível por 32, o valor é arredondado
para o primeiro inteiro acima. Note-se que o valor presente em FLR é sempre inferior em um ao número de
palavras realmente lidas ou escritas por vector, dada a necessidade de se incluir uma palavra muda no fim do
vector, no caso de uma operação de escrita, ou à sua existência no início, no caso de uma operação de leitura.
2.2.3. REGISTO DE OPÇÕES DE CONFIGURAÇÃO (COR)
O registo COR é usado para definir as opções de configuração ilustradas na Figura 2.1 e definidas na
Tabela 2.3.
313029282726252423222120191817161514131211109876543210
DO
NE_PIPE
DR
IVE_D
ON
ESIN
GLE
OSC
FSEL
SSCLK
SRC
LOC
K_W
AIT
SHU
TD
OW
N
DO
NE_C
YCLE
LCK
_CYC
LE
GT
S_CYC
LE
GW
E_CYC
LE
GSR
_CYC
LE
x x xx x x xx x x xx x x xx x x xx x x xx x x xx x x 0x
Figura 2.1: Campos do registo de opções de configuração
da família Virtex da Xilinx 47
Símbolo Comando Código
Reservado - 0000b
WCFG Escrita de dados de configuração - usado antes da escrita dedados em FDRI 0001b
Reservado - 0010b
LFRM
Último vector escrito – carregado antes da escrita do últimovector de dados (vector mudo), se o sinal GHIGH_B estiveractivo; este comando não é necessário se GHIGH_B estiverinactivo, o que permite a sobreposição do último vector escritocom a libertação do sinal GHIGH_B
0011b
RCFG Leitura de dados de configuração – usado antes da leitura dedados de FDRO 0100b
START
Inicia sequência de arranque – este comando é também usadopara iniciar uma sequência de shutdown antes de umareconfiguração parcial; a sequência de arranque tem início apósa próxima verificação com sucesso do código de redundânciacíclica
0101b
RCAPColoca o sinal CAPTURE a zero – este comando deve ser usadoquando se realiza uma operação de captura em modo deamostragem única
0110b
RCRC Limpa o registo CRC 0111b
AGHIGH
Coloca o sinal GHIGH_B a nível lógico 1 – usado antes dareconfiguração para prevenir conflitos enquanto os novos dadosde configuração são escritos; todos os sinais e saídas dos CLBssão forçados a 1
1000b
SWITCH Altera a frequência de CCLK – usado quando em modo deconfiguração mestre-série 1001b
Reservado - 101xb
Reservado - 11xxb
Tabela 2.2: Comandos do registo CMD
2.2.4. REGISTO DE CONTROLO (CTL)
O registo CTL controla as seguintes funções internas, associadas aos campos representados na Figura 2.2:
• Persist Se 0, valor por omissão, todos os pinos de configuração passem a E/S genéricas após a configuração,
com as excepções de CCLK, PROG e DONE. Caso contrário, os pinos de configuração retêm a sua
função, mesmo após a configuração ter terminado. Esta função não afecta o TAP.
48 Descrição arquitectónica
• Security (SBITS) Os níveis de segurança restringem o acesso às operações de leitura e configuração. No
nível 0, o nível por omissão, todas as operações de leitura e escrita são permitidas. No nível 1 todas as
funções de leitura, quer na configuração SelectMAP, quer através do TAP, são interditadas. Nos níveis 2 e
3 todas as funções de configuração e leitura são interditadas, independentemente do modo. A única forma
de remover um nível de segurança é desconfigurando o componente, por colocação da linha PROG a
nível lógico 1, ou retirando-lhe a alimentação.
Campo Descrição Valor poromissão
DONE_PIPE
A FPGA atrasa ou não em um ciclo de relógio a transição para o estadoseguinte, após a passagem de DONE ao valor lógico 10: sem atraso1: com atraso
0
DRIVE_DONE 0: pino DONE em configuração colector-aberto1: pino DONE activo (não necessita de pull-up externo)
0
SINGLE A leitura é efectuada numa única amostragem 0
OSCFSEL Estabelece a frequência de CCLK na configuração em modo mestre-série 2
SSCLKSRC
Fonte de relógio para a sequência de arranque:00: CCLK01: UserClk1X: JTAGClk (TCK)
0
LOCK_WAIT Máscara de 4 bits que indica qual a DLL pela qual a sequência de arranquedeve esperar durante um LCK_CYCLE
0
SHUTDOWNIndica se se trata de uma sequência de arranque ou de paragem0: arranque1: paragem
0
DONE_CYCLE Especifica em que estado da sequência de arranque o pino DONE élibertado
3
LCK_CYCLE Especifica qual o estado em que a sequência de arranque deve pararquando espera por um lock da DLL
7
GTS_CYCLE Especifica em que estado da sequência de arranque as E/S abandonam oterceiro estado e assumem a configuração definida pelo utilizador
4
GWE_CYCLE Especifica em que estado da sequência de arranque a habilitação global deescrita é activada
5
GSR_CYCLE Especifica em que estado da sequência de arranque os flip-flops assumem oestado inicial definido pelo utilizador
5
Tabela 2.3: Descrição das opções de configuração
• GTS_USR_B Se 0 coloca todos as E/S em alta impedância. Desabilita as resistências de pull-up se
GTS_CFG_B também estiver activo.
da família Virtex da Xilinx 49
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GT
S_U
SR_B
x00 00xx 0x00 0000 0000 0000 0000 0000 0
Pers
ist
SBIT
S
Figura 2.2: Campos do registo de controlo
2.2.5. REGISTO DE MÁSCARA (MASK)
O registo MASK actua como um mecanismo de segurança, que controla quais os bits do registo CTL que
podem ser alterados. Um 1 no bit n da máscara permite a sua escrita no registo CTL. O valor por omissão da
máscara é 0.
2.2.6. REGISTO DE ENDEREÇO DO VECTOR (FAR)
O registo FAR especifica o endereço onde o próximo vector de dados de configuração deve ser escrito. Este
endereço está dividido em três partes, o Tipo de bloco, a parte alta do endereço e a respectiva parte baixa,
conforme se ilustra na Figura 2.3.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Tip
o de
blo
co
Part
e al
ta d
oen
dere
ço(C
olun
a de
CLB
s ou
RA
M)
000 0000 00xx xxxx xxxx xxxx xxx0 x000 0
Part
e ba
ixa
doen
dere
ço(e
nder
eço
dove
ctor
)
Figura 2.3: Campos do registo de endereço do vector
O Tipo de bloco indica qual o espaço de endereçamento a ser usado, CLB (00) ou bloco de memória RAM
(01). A parte alta do endereço selecciona qual a coluna de CLBs ou RAM, enquanto a parte baixa indica
qual o vector, dentro da coluna, a ser acedido. A parte baixa do endereço é incrementada de cada vez que um
vector completo é escrito ou lido, de ou para o registo de entrada ou saída de vectores de dados. Se o último
vector de uma coluna de CLBs for o seleccionado, esta operação conduz ao incremento da parte alta do
endereço e à colocação em zero da parte baixa. No caso do endereçamento de um bloco de RAM, a parte alta
não é, neste caso, incrementada automaticamente.
2.2.7. REGISTO DE ENTRADA DE VECTORES DE DADOS (FDRI)
O registo FDRI é usado para carregar vectores de dados de configuração. Trata-se de um registo de
deslocamento, no qual os dados são carregados antes de serem transferidos para a memória de configuração.
50 Descrição arquitectónica
A operação de escrita é realizada de modo a que enquanto um vector de dados é escrito na memória de
configuração, um segundo vector está já a ser deslocado. O último vector é sempre um vector mudo, que não
é escrito na memória de configuração, servindo apenas para “empurrar”8 o vector anterior.
Para uma operação de escrita, o registo de comandos deve ser carregado com o comando WCFG e
posteriormente o registo FDRI com pelo menos dois vectores, um vector de dados válidos (para serem escritos
na memória de configuração) e o outro mudo.
2.2.8. REGISTO DE SAÍDA DE VECTORES DE DADOS (FDRO)
O registo FDRO é usado para ler vectores de dados de configuração, ou dados capturados nos flip-flops e
blocos de memória RAM. O registo actua da forma descrita anteriormente para o FDRI, mas agora em
sentido contrário, como área temporária de transferência de dados. Para uma operação de leitura, o registo de
comandos deve ser carregado com o comando RCFG e posteriormente endereçado o FDRO com um
comando de leitura.
2.2.9. REGISTO DE SAÍDA DE DADOS PARA CONFIGURAÇÃO EM CADEIA (LOUT)
O registo LOUT é usado nos modos de configuração série para permitir a transferência de dados através da
cadeia de configuração. Os dados escritos em LOUT são serializados e aparecem no pino de saída DOUT.
2.2.10. REGISTO DE VERIFICAÇÃO POR REDUNDÂNCIA CÍCLICA (CRC)
O registo CRC, cuja estrutura interna está representada na Figura 2.4, proporciona um mecanismo de
detecção de erros. Aquando da escrita de qualquer registo de configuração (com excepção do registo LOUT)
é calculado, e guardado no registo CRC, um valor de verificação de 16 bit cobrindo quer o registo de dados
quer o de endereços. No final de uma série de operações de escrita, um valor de verificação pré-calculado
pode ser escrito no registo CRC. A lógica de configuração é colocada em modo ERRO (configuração abortada
e sinal de INIT a nível lógico 0) se o valor resultante for diferente de zero, sendo o bit CRC_ERROR acessível
através do registo de estado.
2.2.11. REGISTO DE ESTADO (STAT)
No registo STAT são mantidos os valores actuais de alguns dos sinais de controlo e de estado, podendo este
registo ser lido através de uma operação de leitura. A Figura 2.5 ilustra os diferentes campos do registo de
estado, estando a funcionalidade de cada um descrita na Tabela 2.4.
8 O deslocamento de um vector mudo para o registo obriga a que o vector anterior seja transferido para a memória deconfiguração. Se esta operação não tivesse lugar, o último vector permaneceria armazenado no registo, não sendotransferido para a memória. Este vector mudo serve assim apenas para “empurrar” o anterior, limpando o registo dedados válidos.
da família Virtex da Xilinx 51
0000 0000 0000 0000 CRC 16 bit
31:16 15:0
Registo CRC [31:0]
0 12 3 4 5 6 7 8 9 10 11 12 13 14
15
29 28 27 5 4 3 2 1 0
Palavra de dados de 32 bit
3 2 1 0 2631 30
Endereço
Desloca
Registo de cálculo
Registo de entrada de dados Entrada de dados
Figura 2.4: Estrutura interna do registo CRC
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
LOC
K
INIT
DO
NE
MO
DE
GT
S_C
FGIN
_ER
RO
R
CR
C_E
RR
OR
xxx xxxx xxxx xxx0 x000 0000 0000 0000 0
GSR
_BG
WE_
B
GH
IGH
_B
Figura 2.5: Campos do registo de estado
Nome Bit Descrição
DONE 14 Valor no pino DONE
INIT 13 Valor de INIT
MODE 12:10 Valor dos pinos de modo M2, M1 e M0
GHIGH_B 9 0: Todas as interligações estão forçadas a nível lógico1
GSR_B 8 0: Todos os flip-flops estão forçados ao seu estadoinicial
GWE_B 7 1: Escrita nos flip-flops e blocos de memória bloqueada
GTS_CFG 6 0: Todas as E/S se encontram em alta impedância
IN_ERROR 5 Assinala erro na entrada série de dados
LOCK 4:1 Indica se alguma DLL se encontra locked
CRC_ERROR 0 Indica ocorrência de erro na configuração
Tabela 2.4: Descrição dos bits do registo de estado
52 Descrição arquitectónica
2.3. O PROCESSO DE CONFIGURAÇÃO E LEITURA
O processo de configuração interna de uma Virtex segue o diagrama de fluxo ilustrado na Figura 2.6, sendo a
respectiva sequência de comandos listada na Tabela 2.5.
O primeiro conjunto de comandos prepara a lógica interna de configuração para a carga dos vectores de
configuração. Alguns ciclos do relógio de configuração, representados por palavras mudas, conduzem à
inicialização da lógica interna de configuração, enquanto que a palavra de sincronismo permite o
reconhecimento dos limites da palavra de 32 bit, sincronizando a transferência dos dados. Este procedimento
apenas é necessário no caso de uso do modo de configuração SelectMAP. O registo de verificação por
redundância cíclica é inicializado através da escrita do comando RCRC no registo de comandos. O tamanho
do vector de dados para o dispositivo é carregado no registo FLR e as opções de configuração no registo COR,
seguidas por dados para o registo CTL, se existirem. Embora a frequência de CCLK seja especificada no
registo COR, esta nova frequência só será assumida após o envio do comando SWITCH para o registo de
comandos. O envio deste comando é necessário apenas quando se usa o modo de configuração mestre-série.
A escrita na memória de configuração dos vectores de dados de configuração é efectuada no segundo
conjunto de comandos. A activação do circuito que vai efectuar a transferência dos dados escritos em FDRI
para as células da memória de configuração é efectivada carregando no registo CMD o comando WCFG. Para
se iniciar a carga dos vectores é necessário primeiro carregar o endereço de destino no registo FAR, seguido
do comando de escrita, que contém igualmente o número de palavras que vão ser enviadas, e posteriormente
dos vectores de dados para FDRI. O número de conjuntos de vectores é variável, sendo na Tabela 2.5
exemplificado para três conjuntos. Quando todos, à excepção do último vector, se encontram carregados, o
valor inicial de verificação é transferido para o registo CRC, após o que o comando LFRM é carregado no
registo CMD, seguido por um último comando de escrita e pelo último vector para FDRI.
Por último, o terceiro conjunto de comandos inicializa a sequência de arranque, por intermédio do comando
START, e termina o cálculo da palavra de verificação. As quatro palavras mudas finais são fornecidas ao
sistema,- para proporcionarem o número de ciclos de CCLK necessários à activação da FPGA.
A sequência descrita aplica-se na configuração inicial e completa da FPGA. No caso de reconfigurações
posteriores, totais ou parciais, a sequência é idêntica mas apresenta algumas cambiantes. Assim:
• Se existir a possibilidade dos vectores de dados a ser escritos causarem conflitos, o sinal GHIGH_B deve
ser colocado a nível lógico 1, através do envio do respectivo comando para o registo CMD;
• Envio do comando WCFG;
• Definição do endereço de início através dum comando FAR;
• Definição do número de palavras de configuração a ser escritas no registo FDRI;
• Envio dos vectores de dados;
da família Virtex da Xilinx 53
• Desactivação do sinal GHIGH_B através do envio do comando LFRM, caso tenha sido colocado a nível
lógico 1;
• Envio de um vector mudo.
Inicialização
Sincronização
Limpa CRC
Define tamanhodo vector
Inicializa opções
Inicializaparâmetros de
controlo
Inicializafrequência de
CCLK
Escreve vectoresna memória
Fim
Invocasequência de
arranque
Carrega CRC
Máximo de três ciclos deCCLK
Define os limites da palavrade 32 bit
Inicializa o cálculo do CRC
Uso interno
Assume opções e ConfigRateiniciais
Uso interno
Os vectores de dados sãoescritos na memória deconfiguração
Após o cálculo do CRC éinvocada a sequência dearranque
Se a verificação do CRCfalha, o arranque é abortado
A FPGA está operacional
Quando em modo mestre--série, o CCLK assumeo valor de configuração
Figura 2.6: Diagrama de fluxo do processo interno de configuração
Para se proceder a uma operação de leitura da configuração interna a sequência de comandos é a seguinte:
54 Descrição arquitectónica
• Envio do comando RCFG para o registo de comandos;
• Definição do endereço de início através dum comando FAR;
• Definição do número de palavras de configuração a ser lidas para o registo FDRO;
• Envio de um vector mudo;
• Leitura dos vectores de dados.
2.3.1. ORGANIZAÇÃO DUM PACOTE DE CONFIGURAÇÃO
A troca de informação entre a FPGA e o exterior, quer para envio de comandos, quer para a leitura ou escrita
de vectores de dados, pressupõem a definição de um protocolo que torne compreensível essa troca.
Os dados de configuração são organizados em palavras de 32 bit, contendo sempre dois comandos principais:
Leitura e Escrita, cujos códigos de operação (OP) se encontram listados na Tabela 2.6. A execução de um
comando de configuração ocorre sempre que o comando é lido ou escrito no registo de comandos apropriado
(ver Tabela 2.2).
Um comando é organizado como um pacote, com uma palavra de cabeçalho, e em opção, uma ou mais
palavras de dados. Esta palavra, dividida em vários campos conforme ilustrado na Figura 2.7, é a primeira a ser
escrita no registo de comandos apropriado, definindo à partida, através do seu campo ‘OP’, se se trata de uma
operação de leitura ou de escrita.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0Tipo
xxx xxxx xxx0 x0xx xx00 0000 000x 0x00 1
OP Endereço do registo RSV Número de palavras
Nota: Os valores lógicos '0' ou '1' indicados em alguns campos são obrigatórios.Um x indica que o valor é variável e deve ser definido.
Figura 2.7: Formato da palavra de cabeçalho dum pacote de comando
O campo ‘Endereço de registo’ define o registo interno de configuração a que se destina o comando, os quais
se encontram listados na Tabela 2.1. O campo ‘Número de palavras’ contém um inteiro entre 0 e 2047,
indicando o número de palavras subsequentes à palavra de cabeçalho. No caso de o número de palavras
subsequentes se situar entre 2048 e 1048575, o campo ‘Número de palavras’ da palavra de cabeçalho deve
conter 0, sendo essa palavra seguida de uma palavra de extensão de cabeçalho, cujo formato se ilustra na
Figura 2.8. O campo ‘OP’ é igual em ambas as palavras, enquanto o campo ‘Tipo’ é diferente para as duas,
001 no primeiro caso e 010 no segundo.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0Tipo
xxx xxxx xxxx xxxx xxxx x000 000x 0x10 0
OP Número de palavras
Nota: Os valores lógicos '0' ou '1' indicados em alguns campos são obrigatórios.Um x indica que o valor é variável e deve ser definido.
Figura 2.8: Formato da palavra de extensão de cabeçalho
da família Virtex da Xilinx 55
Tipo Nº de palavras
1º conjunto de comandos
Palavras mudas (somente no modo SelectMAP) 2
Palavra de sincronização (somente no modoSelectMAP) 1
Envia CMD (RCRC) 2
Define FLR 2
Define COR 2
Define MASK 2
Define CTL 2
Envia CMD (SWITCH) (somente no modo mestre--série) 2
2º conjunto de comandos
Escreve CMD (WCFG) 2
Escreve FAR 2
Escreve FDRI 2
Escreve FAR 2
Escreve FDRI 1
Escreve FAR 2
Escreve FDRI 1
Escreve CRC 2
Escreve CMD (LFRM) 2
Escreve FDRI 1
3º conjunto de comandos
Escreve CMD (START) 2
Escreve CRC 2
Palavras mudas 4
Total 40
Tabela 2.5: Sequência de escrita nos registos de configuração
56 Descrição arquitectónica
Operação Código
Leitura 01
Escrita 10
Tabela 2.6: Códigos de operação para Leitura e Escrita
2.4. ENDEREÇAMENTO E CONTEÚDO DO ESPAÇO DE CONFIGURAÇÃO
As FPGAs da família Virtex apresentam a possibilidade de serem escritas e lidas apenas parcialmente, o que
obriga ao conhecimento preciso da forma de endereçamento e da localização dos bits de configuração de CLBs
e blocos de RAM, bem como dos bits de estado, no caso de uma leitura em que se pretenda capturar o estado
dos flip-flops e os valores contidos nas células das memórias RAM, quer nos blocos quer nas LUT.
Os dados de configuração estão organizados em colunas de CLBs, que contêm, como visto anteriormente,
duas slices, contendo cada duas células lógicas. Cada coluna de CLBs possui dois IOBs em cima e em baixo,
que fazem parte do mesmo vector de configuração dos CLBs. Nos extremos esquerdo e direito existem três
IOBs por linha de CLBs, cujos dados de configuração estão organizados em colunas que percorrem o
componente de alto a baixo. De igual forma, os blocos de memória situam-se em duas colunas, uma de cada
lado da matriz de CLBs, sendo o número de blocos em cada coluna igual a ¼ do número de CLBs por coluna.
A Figura 2.9 apresenta de forma esquemática esta distribuição.
2.4.1. ORGANIZAÇÃO DA MEMÓRIA DE CONFIGURAÇÃO
A memória de configuração pode ser visualizada como uma matriz rectangular de bits, agrupados em vectores
verticais, com um bit de largura, os quais se estendem do topo ao fundo da matriz. O vector é a unidade
atómica de configuração, a mais pequena porção da memória de configuração que pode ser escrita e/ou lida.
Os vectores agrupam-se paralelamente em unidades maiores designadas colunas de configuração, constituídas
por um número de vectores variável consoante o seu tipo. A Tabela 2.7 lista os diferentes tipos de colunas de
configuração, o número de vectores que integra cada tipo e o número de colunas por tipo num componente.
Na Figura 2.10 é possível visualizar a forma como as colunas de configuração são atribuídas aos diferentes
recursos configuráveis, salientando-se a coluna central que inclui a configuração dos quatro pinos de relógio
global (GCLK), rodeada pelo conjunto formado pelas colunas de configuração de cada uma das colunas de
CLBs, e respectivos dois IOBs no topo e dois IOBs em baixo. Nos extremos, de ambos os lados, mais três
colunas de configuração, duas referentes à configuração dos blocos de RAM (uma para a configuração das
interligações e o outra relativa ao conteúdo de cada célula de memória) e uma à configuração das coluna
laterais de IOBs.
da família Virtex da Xilinx 57
RAM
RAM
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
IOB IOB
IOB IOB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
IOB IOB
IOB IOB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
IOB IOB
IOB IOB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
IOB IOB
IOB IOB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
IOB IOB
IOB IOB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
IOB IOB
IOB IOB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
IOB IOB
IOB IOB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
IOB IOB
IOB IOB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
IOB IOB
IOB IOB
RAM
RAM
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
Figura 2.9: Esquema da organização interna das Virtex
Tipo de coluna de configuração # de vectores da colunade configuração
# colunas de configuraçãopor componente
Central 8 1
CLB 48 # de colunas de CLBs
IOB 54 2
Interligações dos blocos de memória RAM 27
Conteúdo dos blocos de memória RAM 642
Tabela 2.7: Tipos de colunas de configuração
O espaço total endereçável está dividido em blocos de dois tipos:
• Tipo RAM, correspondente às colunas que contêm os dados constantes dos blocos de memória RAM
(exclui as de interligação);
• Tipo CLB, correspondente às colunas que contêm todos os dados de configuração de todos os elementos
programáveis dentro da FPGA (valores das LUT, elementos de controlo dos CLBs, IOBs e Blocos de
RAM e a totalidade do controlo das interligações).
58 Descrição arquitectónica
Ambos os espaços de endereçamento se encontram subdivididos em parte alta e parte baixa, designados
respectivamente por endereço maior e endereço menor. A cada coluna de cada tipo corresponde um único
endereço maior e a cada vector dentro de cada coluna um único endereço menor.
Coluna de IO
Bs do lado esquerdo(54 vectores)
Blocos de mem
ória RA
M\conteúdo
(64 vectores)
Blocos de mem
ória RA
M\interlig.
(27 vectores)
Coluna de IO
Bs do lado direito(54 vectores)
Coluna de C
LBs(48 vectores)
2IOBs
2IOBs
Coluna de C
LBs(48 vectores)
2IOBs
2IOBs
Coluna central(8 vectores)
2GCLK
2GCLK
Coluna de C
LBs(48 vectores)
2IOBs
2IOBs
Coluna de C
LBs(48 vectores)
2IOBs
2IOBs
Blocos de mem
ória RA
M\conteúdo
(64 vectores)
Blocos de mem
ória RA
M\interlig.
(27 vectores)
C0C1 C2 Cn Cn+4 Cn+2Cn-1 RAM0Cn+3RAM1Cn+1
n - nº de colunas de CLBs
Figura 2.10: Locação dos vectores aos recursos configuráveis
O espaço de endereçamento dos CLBs inicia-se com zero (endereço maior) na coluna central e alterna entre a
metade direita e esquerda do componente, para todas as colunas do tipo CLB. No espaço de endereçamento
da RAM, um 0 corresponde à coluna da esquerda e um 1 à da direita. Na Figura 2.11 encontram-se indicados
os endereços maiores para o caso da Virtex XCV50, que apresenta 24 colunas de CLBs.
Coluna de IO
Bs do lado direito(54 vectores)
Blocos de mem
ória RA
M/conteúdo
(64 vectores)
Blocos de mem
ória RA
M/interlig.
(27 vectores)
Coluna de IO
Bs do lado esquerdo(54 vectores)
Coluna de C
LBs(48 vectores)
2IOBs
2IOBs
Coluna de C
LBs(48 vectores)
2IOBs
2IOBs
Coluna central(8 vectores)
2GCLK
2GCLK
Coluna de C
LBs(48 vectores)
2IOBs
2IOBs
Coluna de C
LBs(48 vectores)
2IOBs
2IOBs
Blocos de mem
ória RA
M/conteúdo
(64 vectores)
Blocos de mem
ória RA
M/interlig.
(27 vectores)
End. maior
C0C1 C2 C24 BI0 IOesq.C23 RAM0BI1RAM1IOdir.
01 2 24 28 2623 027125
Figura 2.11: Endereços maiores da Virtex XCV50
2.4.2. VECTORES
Os vectores são, em cada operação, escritos ou lidos sequencialmente por ordem ascendente dos seus
endereços. Múltiplos vectores consecutivos são lidos com um único comando de configuração, sendo um
vector a mais pequena quantidade de dados que pode ser lida ou escrita. A totalidade da matriz de CLBs, mais
da família Virtex da Xilinx 59
os IOBs e as colunas que definem as interligações dos blocos de memória, podem ser escritos ou lidos com um
único comando. O conteúdo de cada coluna de memória tem de ser escrito ou lido separadamente.
Cada vector é constituído por um conjunto de bits agrupados em palavras de 32 bit, sendo os bits do topo da
coluna escritos ou lidos primeiro. O tamanho do vector depende do número de linhas de CLBs do
componente, sendo dado pela equação 2.1.
Equação 2.12)CLBs de linhas (# 18 vector do# +×=bits
A este resultado são acrescentados zeros no final, até perfazer um número inteiro de palavras. Uma palavra
muda adicional é acrescentada no final de cada vector, pelas mesmas razões que as apontadas para o caso dos
vectores mudos. A título de exemplo teríamos que para a Virtex XCV200, com 28 linhas, o número de
palavras por vector seria:
Equação 2.2( )
( )
vector por palavras18117
x a inferior não inteiro menor x 1732
540
54022818
=+
=
=+×
2.4.3. ORGANIZAÇÃO DOS VECTORES
Embora em cada coluna o vector se desenvolva verticalmente do topo para o fundo, por conveniência de
visualização, os vectores são apresentados na horizontal, correspondendo ao lado esquerdo o topo da coluna e
ao direito o fundo. A Figura 2.12 mostra a atribuição de bits de cada vector aos elementos de cada coluna de
CLBs, 18 bits por cada dois IOBs, no topo e no fundo, e 18 por cada CLB, completados com o número de bits
mudos necessários para perfazer um número inteiro de palavras, mais uma palavra muda. A Figura 2.13
mostra a atribuição de bits de cada vector aos elementos de cada coluna de IOBs, 18 bits por cada três linhas
de IOBs, completados com o número de bits mudos necessários para perfazer um número inteiro de palavras,
mais uma palavra muda.
2 IOBs dotopo
18
CLB L1
18
CLB L2
18
CLB Ln
18
2 IOBs dofundo
18
Palavramuda
32
bitsmudos
x
Figura 2.12: Organização do vector duma coluna de CLBs
3 IOBs
18
3 IOBs
18
3 IOBs
18
3 IOBs
18
3 IOBs
18
Palavramuda
32
bitsmudos
x
de cima para baixo
Figura 2.13: Organização do vector duma coluna de IOBs
60 Descrição arquitectónica
A Figura 2.14 mostra a atribuição de bits de cada vector aos blocos de memória, 18 bits mudos iniciais,
seguidos por grupos de 72 bits atribuídos a cada linha de RAM9, mais 18 bits mudos finais, completados com o
número de bits mudos necessários para perfazer um número inteiro de palavras, mais uma palavra muda.
bits mudos
18
RAM L0
72
RAM L1
72
RAM Ln
72
Palavramuda
3218
bits mudos
x
Figura 2.14: Organização do vector duma coluna de memória
2.4.4. LOCALIZAÇÃO DOS BITS DAS TABELAS DE CONSULTA
Relativamente ao início de cada vector, as posições relativas dos bits das tabelas de consulta no ficheiro de
configuração são as mesma para cada slice de cada CLB. Estes bits encontram-se espalhados por 16 vectores
com endereços menores consecutivos, isto é, para uma dada tabela de consulta, cada bit dessa tabela faz parte
de um vector diferente. Esses 16 vectores contêm todos os 16 bits de uma coluna de slices de uma CLB. É pois
necessário escrever ou ler os 16 vectores que contêm esses bits, para aceder à totalidade da tabela de consulta.
Note-se que os bits nas tabelas de consulta são guardados invertidos, ao contrário do que se passa com o valor
armazenado nos flip-flops. Aquando de uma operação de escrita ou leitura numa tabela de consulta, os dados
estão negados. Por exemplo, uma porta E (conjunção lógica) de quatro entradas tem como tabela de verdade
LUT[15:0]=1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0, que será armazenada internamente como
/LUT[15:0]=0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1. Esta organização é obviamente transparente para o
funcionamento da lógica implementada pelo utilizador, que lerá o valor lógico correcto.
2.4.5. LEITURA DOS DADOS DE CONFIGURAÇÃO
Os dados de configuração do dispositivo podem ser lidos a qualquer instante sem comprometer o seu
funcionamento, desde que tal seja permitido pela configuração presente no registo CTL. Sempre que se
processa uma operação de leitura, um vector mudo é lido primeiro que qualquer outro, como se ilustra na
Figura 2.15, pelo que deve ser incluído no número de palavras a ler do componente.
Vector mudo (n palavras)
Vector de dados 1 (n-1 palavras)Palavramuda
Vector de dados 2 (n-1 palavras)Palavramuda
Vector de dados x (n-1 palavras)Palavramuda
Figura 2.15: Leitura de vários vectores de configuração
9 De recordar que cada bloco de memória se estende por quatro CLBs, pelo que o número de linhas de memória RAM emcada coluna é igual ao número de linhas de CLBs a dividir por quatro.
da família Virtex da Xilinx 61
2.4.6. ESCRITA DOS DADOS DE CONFIGURAÇÃO
Para além da configuração inicial, as Virtex podem igualmente ser reconfiguradas, no todo ou em parte,
enquanto o dispositivo estiver em operação, desde que tal seja permitido pela configuração presente no registo
CTL. A reescrita dos mesmos dados de configuração não gera sinais transitórios, mas a reescrita de novos
dados pode conduzir ao seu aparecimento, especialmente se os valores presentes nas tabelas de consulta, ou o
encaminhamento dos sinais, forem alterados. Neste caso todas as células lógicas, bem como as que definem o
encaminhamento, podem ser colocadas num estado de contenção, pela colocação em nível lógico 1 do sinal
GHIGH_B. Aquando da escrita de dados de configuração na memória, cada vector de dados é sempre seguido
por uma palavra muda, terminando esta operação sempre com um vector mudo, conforme se ilustra na
Figura 2.16.
Vector mudo (n palavras)
Vector de dados x (n-1 palavras) Palavramuda
Vector de dados 2 (n-1 palavras) Palavramuda
Vector de dados 1 (n-1 palavras) Palavramuda
Figura 2.16: Escrita de vários vectores de configuração
2.4.7. ALTERAÇÃO DOS DADOS DE CONFIGURAÇÃO
As Virtex permitem que os dados armazenados nas células de memória das tabelas de consulta sejam
alterados através da infra-estrutura BS ou da interface do modo SelectMAP, no caso de esta ter sido retida. A
alteração dos dados em uma ou mais tabelas obriga a que todos os dados de configuração presentes nos
vectores sejam válidos, sendo que a melhor forma de garantir esta condição é alterando configurações válidas
retiradas de ficheiros de configuração, ou resultado da leitura de componentes devidamente configurados.
Note-se que um vector cobre uma coluna inteira de slices das CLBs ou IOBs, pelo que a alteração de um bit,
por exemplo o bit 0 de uma única slice 1 de uma CLB, implica que todos as posições correspondentes ao bit 0
de todas as slice 1 dessa coluna, sejam escritas com o mesmo comando. Como tal deve assegurar-se que, ou os
dados nas slices afectadas permanecem constantes durante o processo de leitura-alteração-reconfiguração, ou
são alterados pelo próprio processo. Um exemplo de incoerência dos dados é apresentado na Figura 2.17.
Neste caso pretendia-se alterar o guardado na tabela de consulta da linha 2, coluna 3, slice 1 (L2C3.S1), de
34h para D5h. No intervalo de tempo que decorre entre a leitura e a reescrita dos 16 vectores, o número
mínimo de vectores, não contando com os vectores mudos, que é necessário ler e reescrever para alterar a
totalidade do conteúdo de uma tabela de consulta, a tabela de consulta situada na linha 14, coluna 3, slice 1
(L14C3.S1), configurada como memória RAM, vê o seu conteúdo alterado de C3h para 14h. Aquando da
reescrita de L2C3.S1, L14C3.S1 é igualmente reescrito, mas com o valor que possuía na altura da leitura,
C3h, perdendo-se o valor entretanto escrito. Com o objectivo de salvaguardar tais situações devem as tabelas
de consulta configuradas como memória RAM, e como tal passíveis de serem alteradas a qualquer instante,
62 Descrição arquitectónica
ocupar, dentro de uma mesma coluna, slices com índice diferente daquelas em que se situem tabelas de
consulta cujo conteúdo deva ser reconfigurado externamente durante a operação do sistema.
2.4.8. LOCALIZAÇÃO DOS BITS NO FICHEIRO DE CONFIGURAÇÃO
A determinação da localização de um dado bit num ficheiro de configuração de uma FPGA da família Virtex
implica a definição de dois conjuntos de variáveis: um conjunto de variáveis independentes, ou atributos do
projecto, tais como o tamanho do componente e qual a CLB e, dentro desta, o bit a localizar, ou a linha e a
coluna do bloco RAM pretendido e o índice do bit dentro do bloco; e um conjunto de variáveis dependentes,
ou variáveis do projecto, nomeadamente valores que devem ser calculados para encontrar o bit pretendido. O
conjunto das variáveis independentes encontra-se listado na Tabela 2.8 e o das variáveis dependentes na
Tabela 2.9. A Tabela 2.10 apresenta a definição de três funções usadas nas equações de determinação da
localização dos bits.
Tabela de consultaL2C3.S1
34h
LUT RAML14C3.S1
C3h
Tabela de consultaL2C3.S1
34h
LUT RAML14C3.S1
14h
Tabela de consultaL2C3.S1
D5h
LUT RAML14C3.S1
C3h
Aquando da operaçãode leitura
Antes dareconfiguração Após a reconfiguração
Figura 2.17: Exemplo de conflito devido a reconfiguração parcial
As equações que permitem calcular os valores das variáveis dependentes variam consoante se pretenda
localizar um bit situado numa tabela de consulta dum CLB, o estado dum flip-flop dum CLB ou dum IOB, o
valor actual duma porta ou um bit num bloco de memória RAM. A Tabela 2.11 apresenta as equações para o
cálculo das variáveis dependentes que permitem localizar, num ficheiro de configuração, o bit pretendido
duma tabela de consulta. As equações que permitem localizar num ficheiro de configuração o valor
correspondente ao estado dum flip-flop dum CLB são apresentadas na Tabela 2.12.
Cada IOB possui quatro valores que podem ser capturados numa operação de leitura. Esses valores são:
• E – Estado do flip-flop de entrada
• S – Estado do flip-flop de saída
• T – Estado do flip-flop de terceiro estado
• P – Valor actual no porto de E/S
da família Virtex da Xilinx 63
Termo Definição
Chip_Cols # de colunas de CLBs do componente
Chip_Rows # de linhas de CLBs do componente
FL # de palavras de 32 bit num vector
RW 1 para leitura, 0 para escrita
CLB_Col Número da coluna do CLB pretendido
CLB_Row Número da linha do CLB pretendido
Slice 0 ou 1
FG 0 para a F-LUT, 1 para a G-LUT
lut_bit Bit pretendido dentro da LUT (nas LUTs os bits têm índices de 0 a 15)
XY 0 para o flip-flop X, 1 para o flip-flop Y
RAM_Col Número da coluna do bloco RAM pretendido
RAM_Row Número da linha do bloco RAM pretendido
ram_bit Bit pretendido dentro do bloco de RAM (os bits têm índices de 0 a 4095)
Tabela 2.8: Variáveis independentes
Termo Definição
MJA Endereço maior
MNA Endereço menor
fm_st_wd Índice da palavra dentro dum ficheiro de configuração que corresponde àpalavra de início do vector desejado. Um ficheiro completo de configuração édefinido como: 1) para CLB/IOB, todos os CLBs, IOBs e vectores dedefinição das interligações dos blocos RAM com início em MJA=0, MNA=0e; 2) para os blocos RAM, todo os vectores de conteúdo para uma dadacoluna de RAM.
fm_wd Índice da palavra de 32 bits dentro do vector que contém o bit pretendido. Anumeração das palavras dentro do vector começa em zero.
fm_wd_bit_idx Índice do bit pretendido dentro da palavra fm_wd. Ao bit mais à esquerdadentro da palavra corresponde o índice 31 e ao mais à direita o índice 0.
fm_bit_idx Índice do bit pretendido dentro do vector. A numeração dos bits começa emzero, correspondendo ao bit mais à esquerda, e continua ao longo de todas aspalavras dentro de um vector.
Tabela 2.9: Variáveis dependentes
64 Descrição arquitectónica
Função Definição
floor(x) Maior inteiro não superior a x (ex: floor(3,7)=3)
ceiling(x) Menor inteiro não inferior a x (ex: ceiling(3,7)=4)
¥ Resto da divisão (ex: 5¥2=1)
Tabela 2.10: Definição de funções
Termo Definição
MJASe (CLB_Col≤Chip_Cols/2),
então Chip_Cols−CLB_Col×2+2senão 2×CLB_Col−Chip_Cols−1
MNA lut_bit+32−Slice×(2×lut_bit+17)
fm_bit_idx 3+18×CLB_Row−FG+RW×32
fm_st_wd FL×(8+(MJA−1)×48+MNA)+RW×FL10
fm_wd floor(fm_bit_idx/32)
fm_wd_bit_idx 31+32×fm_wd−fm_bit_idx
Tabela 2.11: Equações para a localização de bits nas tabelas de consulta
Termo Definição
MJASe (CLB_Col≤Chip_Cols/2),
então Chip_Cols−CLB_Col×2+2senão 2×CLB_Col−Chip_Cols−1
MNA Slice×(12×XY−43)−6×XY+45
fm_bit_idx (18×CLB_Row)+1+(32×RW)
fm_st_wd FL×(8+(MJA−1)×48+MNA)+RW×FL
fm_wd floor(fm_bit_idx/32)
fm_wd_bit_idx 31+32×fm_wd−fm_bit_idx
Tabela 2.12: Equações para a localização dos bits de estado dos flip-flops dos CLBs
Uma vez que os IOBs do topo e do fundo do componente são parte integrante da coluna de CLBs do ponto de
vista dos vectores de configuração, a localização de bits nestes IOBs obedece a regras diferentes das aplicáveis
aos dos IOBs da esquerda e da direita, que só por si constituem colunas autónomas. Os IOBs são numerados
10 A diferença na posição relativa da palavra entre leitura e escrita deve-se ao facto de que o vector mudo e a palavramuda aparecem, respectivamente, no início e fim do ficheiro de configuração.
da família Virtex da Xilinx 65
no sentido dos ponteiros do relógio, partindo do porto 1 situado no topo, à esquerda, por cima da coluna de
CLBs mais à esquerda, conforme se ilustra na Figura 2.18. As equações para determinação da localização no
ficheiro dos bits de estado dos flip-flops dos IOBs são baseadas no número do porto, o qual, para um dado
tamanho da FPGA, é independente dos números dos pinos, os quais variam com o tipo de encapsulamento, e
na sua localização relativa dentro do componente. A Tabela 2.13 apresenta as equações que permitem
determinar qual a posição relativa do porto, enquanto a Tabela 2.14 lista as equações que permitem obter as
variáveis dependentes para os flip-flops dos IOBs. A variável n refere-se, nesta tabela, ao número do porto.
RAM
CLB
CLB
CLB
IOB IOB
CLB
CLB
IOB IOB IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
Porto 1
Figura 2.18: Numeração dos portos dos IOBs
Localização do porto Índice do porto
Topo 1≤n≤Chip_Cols×2
Direita Chip_Cols×2+1≤n≤Chip_Cols×2+Chip_Rows×3
Fundo Chip_Cols×2+Chip_Rows×3+1≤n≤Chip_Cols×4+Chip_Rows×3
Esquerda Chip_Cols×4+Chip_Rows×3+1≤n≤Chip_Cols×4+Chip_Rows×6
Tabela 2.13: Intervalo de localização dos portos dos IOBs em função do seu índice
As equações para localização no ficheiro dos bits correspondentes aos valores presentes nas células dos blocos
de memória RAM encontram-se listadas na tabela Tabela 2.15.
Aplicando sobre o ficheiro resultante da leitura da configuração de uma Virtex as várias equações vistas é
possível conhecer, para o instante de amostragem, os valores presentes em cada célula de armazenamento,
independentemente de se tratar de flip-flops ou células de memória.
66 Descrição arquitectónica
Termo Definição
TopoSe (n≤Chip_Cols),
então Chip_Cols-ceiling(n/2)×2+2senão 2×ceiling(n/2) −Chip_Cols−1
Direita Chip_Cols+1
FundoSe (n>3×(Chip_Cols+Chip_Rows)),
então 2×ceiling((n−3×Chip_Cols−3×Chip_Rows)/2)senão Chip_Cols−2×floor((n−2×Chip_Cols−3×Chip_Rows−1)/2)−1
MJA
Esquerda Chip_Cols+2
E −25×(n¥2)+45
S −13×(n¥2)+39
T −5×(n¥2)+35Topo
P −4×(n¥2)+25
E t=(n−2×Chip_Cols)¥3; MNA=27,5×t2−57,5×t+32
S t=(n−2×Chip_Cols)¥3; MNA=21,5×t2−51,5×t+38
T t=(n−2×Chip_Cols)¥3; MNA=17,5×t2−47,5×t+42Direita
P 50
E 25×((n−2×Chip_ Cols −3×Chip_Rows)¥2)+20
S 13×((n−2×Chip_ Cols −3×Chip_Rows)¥2)+26
T 5×((n−2×Chip_ Cols −3×Chip_Rows)¥2)+30Fundo
P 4×((n−2×Chip_ Cols −3×Chip_Rows)¥2)+21
E t=(n−4×Chip_Cols−3×Chip_Rows)¥3; MNA=17,5×t2−47,5×t+45
S t=(n−4×Chip_Cols−3×Chip_Rows)¥3; MNA=23,5×t2−53,5×t+39
T t=(n−4×Chip_Cols−3×Chip_Rows)¥3; MNA=27,5×t2−57,5×t+35
MNA
Esquerda
P 50
Topo 32×RW
E, S e T 18×(1+floor((n−2×Chip_Cols−1)/3))+32×RW
DireitaP
t=(n−2×Chip_Cols)¥3;fm_bit_idx=18×(1+floor((n−2×Chip_Cols−1)/3))+6×t2-17×t+15+32×RW
Fundo 18×(Chip_Rows+1)+32×RW
E, S e T 18×(Chip_Rows−floor((n−4×Chip_Cols-3×Chip_Rows−1)/3))+32×RW
fm_bit_idx
EsquerdaP
t=(n−4×Chip_Cols−3×Chip_Rows)¥3;fm_bit_idx=18×(Chip_Rows−floor((n−4×Chip_Cols−3×Chip_Rows−1)/3))−10,5×t2+21,5×t+4+32×RW
fm_st_wdSe (MJA>Chip_Cols+1),
então FL×(54×MJA−46+MNA−6×Chip_Cols)+RW×FLsenão FL×(8+(MJA−1)×48+MNA)+RW×FL
fm_wd floor(fm_bit_idx/32)
fm_wd_bit_idx 31+32×fm_wd−fm_bit_idx
Tabela 2.14: Equações para a localização dos bits de estado dos flip-flops dos IOBs
da família Virtex da Xilinx 67
Termo Definição
MJA RAM_Col
MNA1×floor(((ram_bit/64)¥64)/32)+2×floor(((ram_bit/64)¥32)/16)+4×floor(((ram_bit/64)¥16)/8)+8×floor(((ram_bit/64)¥8)/4)+16×floor(((ram_bit/64)¥4)/2)+32×floor(((ram_bit/64)¥2)/1)
fm_bit_idx 18+72×RAM_Row+bitpos (ver bitpos na Tabela 2.16)
fm_st_wd FL×MNA+RW×FL
fm_wd floor(fm_bit_idx/32)
fm_wd_bit_idx 31+32×fm_wd−fm_bit_idx
Tabela 2.15: Equações para a localização dos valores presentes nas células dos blocos de memória
ram
_bit¥
64
bitp
os
ram
_bit¥
64
bitp
os
ram
_bit¥
64
bitp
os
ram
_bit¥
64
bitp
os
ram
_bit¥
64
bitp
os
ram
_bit¥
64
bitp
os
ram
_bit¥
64
bitp
os
ram
_bit¥
64
bitp
os
0 42 8 45 16 29 24 26 32 43 40 44 48 28 56 27
1 58 9 61 17 13 25 10 33 59 41 60 49 12 57 11
2 41 10 46 18 30 26 25 34 40 42 47 50 31 58 24
3 57 11 62 19 14 27 9 35 56 43 63 51 15 59 8
4 50 12 53 20 21 28 18 36 51 44 52 52 20 60 19
5 49 13 54 21 22 29 17 37 48 45 55 53 23 61 16
6 66 14 69 22 5 30 2 38 67 46 68 54 4 62 3
7 65 15 70 23 6 31 1 39 64 47 71 55 7 63 0
Tabela 2.16: Posição do bit dentro de um dado bloco de memória
Com base num exemplo proposto em [Camilleri, 99], apresenta-se a forma de localizar um dado bit para uma
operação de leitura-alteração-reconfiguração. O objectivo é a implementação de um mecanismo de semáforo,
por intermédio de operações de leitura e escrita na lógica configurada, equivalente ao uso de registos
periféricos de controlo e de estado por um microprocessador. Através de um dos modos de configuração
(boundary-scan ou SelectMAP) o microprocessador escreve (controlo) e lê (estado) dados de duas posições
localizadas em duas LUT RAM (F-LUT e G-LUT) duma mesma slice (neste exemplo a L1C1.S0). O bit com o
índice 15 da G-LUT será usado pelo microprocessador para leitura do estado e o índice 14 da F-LUT para
escrita, conforme se ilustra na Figura 2.19:. Uma vez que uma operação de escrita implica que no mínimo seja
escrito um vector, e tendo em conta que cada vector contém bits referentes a outras LUTs da mesma coluna,
havendo a possibilidade desses bits, dependendo da aplicação, terem sido entretanto alterados, optou-se por,
68 Descrição arquitectónica
na tentativa de evitar o aparecimento de conflitos, alterar um vector previamente lido, ao invés de se partir
do ficheiro de configuração inicial. Tendo em conta tal, procede-se primeiro à leitura do vector que contém o
bit F-LUT[14], e posteriormente à sua alteração e reescrita.
µP
G
Estado
ControloSemáforos
FPGA
F
11
11
10
11
15
14
L1C1.S0
Figura 2.19: Implementação dum mecanismo de semáforo usando uma FPGA
Os atributos para esta implementação, em que se optou por usar uma FPGA XCV100 da Xilinx, um
componente com uma matriz de CLBs de 20 linhas e 30 colunas, encontram-se sumariados na Tabela 2.17. O
valor da variável FL é obtido a partir da Equação 2.2:
Equação 2.3( )
( )
vector por palavras14113
x a inferior não inteiro menor x 1332
396
39622018
=+
=
=+×
G-LUT[15] F-LUT[14]Atributo
Leitura Leitura Escrita
Chip_Rows 20
Chip_Cols 30
FL 14
CLB_Row 1
CLB_Col 1
Slice 0
FG 1 0
lut_bit 15 14
RW 1 1 0
Tabela 2.17: Lista das variáveis independentes respeitante a esta implementação
da família Virtex da Xilinx 69
As três operações a realizar, leitura do bit G-LUT[15] e leitura e escrita do bit F-LUT[14], implicam o cálculo
de algumas variáveis dependentes, apresentadas na Tabela 2.18. As equações usadas são as constantes da
Tabela 2.11.
Valor(es)
G-LUT[15] F-LUT[14]Variável Equação
Leitura Leitura Escrita
MJA 1≤(30/2)⇒30−1×2+2 30
MNA 15,14+32−0×(2×15,14+17) 47 46
fm_bit_idx 3+18×1−1,0,0+1,1,0×32 52 53 21
fm_st_wd 14×(8+(30−1)×48+47,46,46)+1,1,0×14 20 272 20 258 20 244
fm_wd floor(52, 53, 21/32) 1 1 0
fm_wd_bit_idx 31+32×1, 1, 0−52, 53, 21 11 10 10
Tabela 2.18: Lista das variáveis dependentes respeitante a esta implementação
Para a leitura do bit G-LUT[15] é necessário ler o vector com o endereço menor MNA=47, enquanto que
para a leitura e escrita do bit F-LUT[14] é necessário ler e escrever o vector com o endereço menor
MNA=46. Fundamental ter em atenção que a variável fm_st_wd é calculada assumindo a leitura da
totalidade da configuração, quando, no caso que está a ser apresentado, apenas um vector mudo e os vectores
de endereço maior 30 e endereços menores 46 e 47 são lidos. O bit desejado encontra-se pois no vector 1,
palavra 1, a qual corresponde à 15ª palavra lida.
Os comandos para a leitura de ambos os vectores (e do vector mudo) estão representados na Figura 2.20.
Dados
1 1 00 1 1 00 1 100 1 100 00 1 1 00 1 1 00 1 1 00 1 1
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 02 1
AA99 5566
3000 2001
003C 5800
3000 8001
0000 0004
2800 602A
0000 0000
HexInstrução
Palavra sincronização
Escreve próxima palavra (1) em FAR
CLB MJA=30, MNA=46
Escreve próxima palavra em CMD
Valor para o registo RCFG
Lê a partir de FDRO
Limpa o registo
(lê 42 palavras)
0 1 10 0 0 00 0 000 0 000 10 0 0 00 0 0 00 0 0 10 0 0
0 0 00 0 0 00 0 110 1 001 00 1 1 01 1 0 00 0 0 00 0 0
0 1 10 0 0 00 0 000 0 000 01 0 0 00 0 0 00 0 0 10 0 0
0 0 00 0 0 00 0 000 0 000 00 0 0 00 0 0 00 0 0 00 1 0
0 1 00 1 0 00 0 000 0 000 10 1 0 00 0 0 00 0 1 01 0 1
0 0 00 0 0 00 0 000 0 000 00 0 0 00 0 0 00 0 0 00 0 0
Nota: As linhas a traço grosso separam os diferentes campos.
Figura 2.20: Comandos para a leitura dos vectores MJA=30, MNA=46 e MNA=47
As 42 palavras lidas são apresentadas na Figura 2.21, estando referenciada a localização dos bits F-LUT[14] e
G-LUT[15]. De notar que F-LUT[14] apresenta um nível lógico alto, mas, devido ao facto de os bits nas LUT
70 Descrição arquitectónica
serem guardados invertidos (ver subcapítulo 2.4.4), o seu valor lógico é zero. Igual consideração se aplica ao
bit G-LUT[15].
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
Palavra 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 02 1Vector
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
1(MJA=
30;MNA=
46)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
2(MJA=
30;MNA=
47)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
1 1 11 1 1 11 1 111 1 111 11 1 1 11 1 1 11 1 1 11 1 1
0 0 00 0 0 00 0 000 0 000 00 0 0 00 0 0 00 0 0 00 0 0
0 0 00 0 0 00 0 000 0 000 00 0 0 00 0 0 00 0 0 00 0 0
VECTOR MUDO
PALAVRA MUDA
PALAVRA MUDA
1 0 00 0 0 00 0 000 1 000 10 1 0 01 1 0 00 0 0 00 0 0
1 1 11 1 1 10 0 000 1 111 10 0 1 11 1 0 01 1 0 00 0 0
0 0 00 1 1 11 1 110 0 000 00 0 0 10 0 1 01 1 1 01 1 0
0 0 00 0 0 00 1 111 0 000 00 0 0 00 0 0 10 0 1 01 1 1
1 0 01 1 0 01 0 000 1 001 11 0 1 00 0 0 00 0 0 10 0 1
1 1 01 1 0 01 0 000 1 011 11 1 0 11 0 1 00 0 0 00 0 0
0 1 10 1 1 01 1 001 0 110 00 0 0 11 1 1 11 0 1 00 0 0
0 0 00 0 1 10 1 011 0 000 00 0 0 00 0 0 11 1 1 11 0 1
0 0 00 0 0 00 0 110 0 000 01 1 0 00 0 0 00 0 0 11 1 1
1 1 10 0 0 00 0 000 1 110 11 1 0 01 1 0 00 0 0 00 0 0
1 1 11 1 1 10 0 000 1 111 10 0 1 11 1 0 01 1 0 00 0 0
0 0 00 1 0 11 1 110 0 000 00 0 0 10 0 1 01 1 1 00 0 0
0 0 00 0 1 10 0 101 0 000 00 0 0 00 0 0 00 0 0 00 0 0
1 1 00 0 0 00 0 100 1 010 11 1 0 01 1 0 00 0 0 00 0 0
0 0 00 1 1 11 1 111 0 000 00 0 0 10 0 0 11 1 1 01 1 0
1 1 11 1 1 11 0 000 1 111 10 0 1 11 1 1 01 1 0 00 0 0
0 0 00 0 0 00 1 111 0 000 00 0 0 00 0 0 10 0 1 11 1 1
1 0 01 0 0 00 0 000 1 001 11 1 1 10 0 0 00 0 0 10 0 1
1 1 11 1 0 01 0 000 1 111 11 1 1 11 1 1 00 0 0 00 0 0
0 1 10 1 1 11 1 001 0 110 00 0 0 11 1 1 11 1 1 00 0 0
0 0 00 0 1 10 1 111 0 000 00 0 0 00 0 0 11 1 1 11 1 1
0 0 00 0 0 00 0 110 0 000 01 1 0 00 0 0 00 0 0 11 1 1
0 0 00 0 1 01 0 111 0 000 00 0 0 00 0 0 00 0 0 00 0 0
1 1 11 0 0 00 0 000 1 111 11 1 1 01 1 0 00 0 0 00 0 0
1 1 11 1 1 11 0 000 1 111 10 0 1 11 1 1 01 1 0 00 0 0
0 0 00 1 0 11 1 111 0 000 00 0 0 10 0 1 01 1 1 01 0 0
F-LUT[14]
G-LUT[15]
Figura 2.21: Resultado da leitura dos vectores que contêm a informação relativa aos bits do semáforo
da família Virtex da Xilinx 71
Para a operação de escrita do semáforo na F-LUT, o vector a escrever será o 2º vector lido, em que as
palavras 1 a 13 alteram a sua numeração para 0 a 12, passando a 13ª palavra a ser uma palavra muda. Neste
novo vector optou-se por alterar o valor do semáforo de zero para um, pelo que o bit correspondente a
F-LUT[14] passou agora a ter um nível lógico baixo.. Os comandos apresentados na Figura 2.22 permitem
escrever este vector, e um vector mudo, na posição correcta.
Dados
1 1 00 1 1 00 1 100 1 100 00 1 1 00 1 1 00 1 1 00 1 1
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 02 1
AA99 5566
3000 2001
003C 5C00
3000 8001
0000 0001
2800 401C
8008 6C00
HexInstrução
Palavra sincronização
Escreve próxima palavra (1) em FAR
CLB MJA=30, MNA=46
Escreve próxima palavra em CMD
Valor para o registoWCFG
Escreve 28 palavras em FDRI
Palavra 0
0 1 10 0 0 00 0 000 0 000 10 0 0 00 0 0 00 0 0 10 0 0
0 0 00 0 0 00 0 110 1 001 00 1 1 01 1 0 00 0 0 00 0 0
0 1 10 0 0 00 0 000 0 000 01 0 0 00 0 0 00 0 0 10 0 0
0 0 00 0 0 00 0 000 0 000 00 0 0 00 0 0 00 0 0 10 0 0
0 1 00 1 0 00 0 000 0 000 00 1 0 00 0 0 10 0 0 01 1 0
1 0 00 0 0 00 0 000 1 000 10 1 0 01 0 0 00 0 0 00 0 0
FB0F 3EC0Palavra 1 1 1 11 1 1 10 0 000 1 111 10 0 1 11 1 0 01 1 0 00 0 0
0FB0 03ECPalavra 2 0 0 00 1 1 11 1 110 0 000 00 0 0 10 0 1 01 1 1 01 1 0
0000 0000Palavra 27 0 0 00 0 0 00 0 000 0 000 00 0 0 00 0 0 00 0 0 00 0 0
Nota: As linhas a traço grosso separam os diferentes campos.
F-LUT[14]
Figura 2.22: Comandos para a escrita do vector MJA=30, MNA=46
O exemplo apresentado permite consolidar os conhecimentos anteriormente expostos.
A arquitectura das Virtex foi posteriormente usada na nova família Spartan, a qual está disponível com
capacidades mais pequenas (tamanho da matriz lógica e número de blocos de E/S) e a um custo que permite a
sua consideração como opção ao desenvolvimento e fabrico de um ASIC.