descrição arquitectónica das fpgas da família virtex da xilinx

71
Descrição arquitectónica das FPGAs da família Virtex da Xilinx

Upload: trannhu

Post on 09-Jan-2017

227 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

Descrição arquitectónica das FPGAs da família Virtex da

Xilinx

Page 2: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

2 Descrição arquitectónica

Page 3: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 4: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 5: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 6: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

6 Descrição arquitectónica

Page 7: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 8: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 9: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 10: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 11: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 12: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 13: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 14: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 15: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 16: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 17: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 18: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 19: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 20: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 21: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 22: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 23: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 24: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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:

Page 25: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 26: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 27: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 28: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 29: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 30: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 31: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 32: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 33: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 34: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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;

Page 35: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 36: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 37: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 38: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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);

Page 39: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 40: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 41: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 42: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 43: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 44: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 45: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 46: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 47: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 48: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 49: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 50: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 51: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 52: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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;

Page 53: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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:

Page 54: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 55: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 56: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 57: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 58: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 59: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 60: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 61: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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,

Page 62: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 63: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 64: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 65: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.

Page 66: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 67: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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,

Page 68: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 69: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 70: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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

Page 71: Descrição arquitectónica das FPGAs da família Virtex da Xilinx

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.