• Nenhum resultado encontrado

2.5 FPGAs (Field Programable Gate Array)

2.5.1 As Vantagens da FPGA

Esta secção faz uma apreciação a nível de flexibilidade e desempenho dos sistemas em FP- GAs face a outras tecnologias tais como sistemas baseados em CPUs (microprocessadores, micro- controladores e DSPs) e sistemas em ASICs que são dispositivos fabricados para uma aplicação específica.

Qualquer função pode ser programada para correr num CPU e de uma forma relativamente simples pois basta programar instruções que ficam armazenadas numa memória. No caso das FPGAS e ASICs é mais difícil, uma vez que isso implica o desenvolvimento de um circuito ló- gico capaz de exercer tal função. Em caso de necessidade de reprogramação, tanto o CPU como a FPGA permitem-no e mais uma vez, de uma forma simples no caso de utilização de um CPU. Para um ASIC é impossível pois, trata-se de hardware estático e uma reprogramação exige o fabrico de um novo produto. Assim, do ponto de vista da flexibilidade, os sistemas baseados em CPUs são sem duvidada a melhor opção. Já do ponto de vista da performance, os papeis invertem-se total- mente. A não necessidade de “fetch”, “decode” ou “memory access overhead” usado nos CPUs, num circuito lógico dedicado, torna este tipo de dispositivos mais rápidos e com um menor con- sumo. A implementação de algoritmos em hardware é particularmente eficiente para aplicações que trabalham com manipulação directa de bits, como por exemplo: compressão de dados, reco- nhecimento de padrões, criptografia, tratamento de imagens, processamento de sinais, etc. Estas

18 Estado de arte

vantagens são ainda maiores quando são usadas arquitecturas baseadas em paralelismo e pipeli- ningque é o caso da maioria dos algoritmos aplicados no processamento de imagens ou vídeos. A implementação de um circuito num ASIC exige uma densidade lógica menor em relação à im- plementação numa FPGA, o que faz dele um dispositivo mais rápido e com um consumo menor, sendo a melhor opção a nível de performance. O crescimento da densidade lógica e a integra- ção de PowerPCs nas FPGAs têm vindo a melhor estes dispositivos e em condições ideais, estes dispositivos tiram partido das melhores características tanto do software como do hardware. A Figura 2.20mostra o enquadramento ao nível da flexibilidade e performance das FPGAs face aos CPUs e ASICs.

Figura 2.20: Avaliação das FPGAs vs. CPUs vs. ASICs.

2.6

Reconfiguração dinâmica

Uma das principais qualidades dos dispositivos FPGAs é sua capacidade para serem repro- gramados dinamicamente. Actualmente, modelos tais como Virtex Series da Xilinx, AT4000 e AT6000 da Atmel já permitem reconfiguração dinâmica de alta velocidade. Uma FPGA é de- nominada como “dinamicamente reconfigurável” se permitir a reconfiguração de alguns blocos lógicos e segmentos de encaminhamento de ligações, enquanto outras partes asseguram um fun- cionamento contínuo do sistema. Esta reconfiguração de alta velocidade permite então que o hardwarese adapte a mudanças no sinal de entrada ou sinais externos, em tempo de execução. A este procedimento de reconfiguração em tempo de execução é chamado de Run Time Reconfigu- ration(RTR). Ao contrário dos computadores que trabalham as funções sequencialmente através de unidades de tempo, as arquitecturas reconfiguráveis funcionam com unidades configuradas no espaço. Perante estas características, a reconfiguração dinâmica revela vantagens importantes [27], pois além de garantir o funcionamento do serviço sem interrupções, permite a adaptabili- dade do sistema, que pode ser a nível do seu funcionamento, adaptando a sua lógica perante os sinais capturados, ou diminuindo o desempenho para o básico necessário melhorando assim o consumo. Com a reconfiguração dinâmica, os sistemas ficam ainda mais robustos e versáteis pois em determinados ciclos de tempo o sistema pode realizar uma auto-avaliação e fazer um restauro

2.6 Reconfiguração dinâmica 19

em caso de faltas detectadas, caso este seja necessário. Permite também a partilha dos recursos da FPGA. A Reconfiguração dinâmica oferece então importantes benefícios para obter alta per- formance, enquanto minimizamos os recursos de hardware requeridos nas implementações de muitas aplicações. A implementação de sistemas que exigem flexibilidade, alto desempenho, alta taxa de transferência de dados e eficiência no consumo de energia são agora possíveis com esta tecnologia. Isto inclui aplicações de televisão digital, processamento de imagem em tempo real e sinais adaptáveis, comunicações sem fios reconfiguráveis, sistemas de computação de alto desem- penho, produtos para consumo actualizáveis remotamente, etc. A reconfiguração de uma FPGA pode ser total onde o dispositivo reconfigurável é inteiramente alterado, ou apenas parcial em que a configuração permite apenas que uma porção da área seja reconfigurada [total ou parcial]. Uma reconfiguração parcial pode ser não disruptiva, quando as porções do sistema que não são recon- figuradas permanecem completamente funcionais durante o ciclo de reconfiguração permitindo assim o funcionamento contínuo do sistema [28,29,30]. Quando a reconfiguração parcial afecta outras partes do sistema tipicamente implica uma paragem no sistema inteiro. Reconfiguração parcial não disruptiva é frequentemente abreviada para reconfiguração parcial. Em resumo, a re- configuração dinâmica, também chamada de run-time reconfiguration, on-the-fly reconfiguration ou in-circuit reconfiguration, termos estes, normalmente associados à reconfiguração do disposi- tivo sem que este interrompa a sua execução. Uma forma de expressar a reconfiguração parcial não disruptiva que implica não haver necessidade de reiniciar o circuito ou remover elementos durante a reconfiguração.

2.6.1 Virtex II

A Virtex-II Pro [2] trata-se de uma plataforma de FPGAs com uma vasta gama de unidades que, no que diz respeito às estruturas de lógia interna, vão desde baixa densidade, 3168 células lógicas no caso do modelo XC2VP2, até alta densidade, 99216 células lógias no caso do modelo XC2VP100. O estudo em particular desta família de dispositivos deve-se ao facto de ser um modelo que permite a reconfiguração dinâmica e que a FPGA disponível para a elaboração deste trabalho faz parte desta família de placas. A placa em questão é o modelo XC2VP30 que possui dois PowerPCs e uma densidade de 30816 células lógicas, o que equivale a 13696 slices.

Os blocos lógicos configuráveis (CLB) desta placa estão organizados num conjunto e são usados para implementar circuitos lógicos e síncronos. Cada elemento CLB está ligado a uma switch matrixpara ter acesso à rede de interconexões programável como mostra a figura 2.21. Cada elemento CLB possui quatro slices iguais com ligação rápida ao CLB. Os quatro slices estão divididos em duas colunas de dois elementos com a cadeia lógica de carry independente e uma cadeia de shift comum. Cada slice contem 2 geradores de funções de quatro entradas cada, carry lógico, portas lógicas aritméticas, multiplexadores e dois elementos de armazenamento. Como mostra a figura 2.22cada função geradora de funções pode ser programada para ser uma LUT de quatro entradas, memória RAM de 16bit ou shift register.

O processo de configuração da virtex necessita de carregar os dados de configuração numa memória SDRAM Static Random Access Memory interna do dispositivo [31]. Os únicos modos

20 Estado de arte

Figura 2.21: Diagrama geral do CLB. Retirada de [2]

Figura 2.22: Vista do Slice em detalhe. Retirada de [2]

que permitem a reconfiguração dinâmica parcial é o selectMAP que funciona em modo paralelo usando um barramento de dados de 8bit bidireccional e o modo Boundary-Scan [32] cuja configu- ração é feita em série usando unicamente o TAP. Neste modo, através do registo de configuração, os dados são carregados pelo TDI e convertidos em pacotes de dados para o canal de configuração interno.

Capítulo 3

Projecto

Este capítulo enumera, descreve e explica o funcionamento dos módulos que fazem parte do projecto que será implementado na FPGA. Neles estão incluídos os filtros que fazem parte da biblioteca de módulos reconfiguráveis, um módulo que permite guardar imagens numa memória SDRAM e que permite usa-las como entrada para os filtros ou guardar como resultados destes. Descreve também os passos que foram necessários para testar uma cadeia de filtros, o qual envol- veu uma divisão do projecto em dois para implementação em duas placas Spartan3.

3.1

O Projecto

Nesta fase desenvolveram-se os módulos, que fazem parte da biblioteca, individualmente e sem preocupações relativamente ao suporte para a reconfiguração dinâmica. Este desenvolvimento foi elaborado para a placa Spartan3 da digilent, não só por motivos de logística, mas também pela disponibilidade de um projecto já funcional nesta placa que permitiu uma boa base de trabalho.

Um outro módulo foi desenvolvido para usar a memória SRAM da placa e guardar imagens que podem ser usadas como entrada para os filtros, ou guardar imagens que resultam destes. De forma a permitir o envio de dados para configurar os filtros foi elaborado um programa de comu- nicação com a FPGA através da porta serie.

Numa fase seguinte, com o objectivo de testar o encadeamento de filtros de forma a podermos usar vários níveis de filtragem, dividiu-se o projecto em dois, pois uma FPGA não possui recursos suficientes para a implementação de uma cadeia. Uma das placas fará a recepção de vídeo através da câmara e terá parte da cadeia de filtros, a outra, para além da outra parte da cadeia de filtros terá também a saída de vídeo para o monitor.

As ferramentas que foram necessárias para esta fase do projecto foram as seguintes:

• Xilinx ISE Design Suite 10.1 - trata-se de um conjunto de ferramentas de software, for- necidas pela Xilinx que suporta as várias fases de um projecto, desde a sua criação, desen- volvimento, algum teste, sintetização e implementação. Deste conjunto os programas mais

22 Projecto

usados foram o Project Navigator, usado para a criação, desenvolvimento e sintetização do projecto; o CORE Generator que permitiu a criação de alguns módulos, nomeadamente os DCM’s necessários; por fim o iMPACT que permite a implementação do bit stream na FPGA usando um cabo JTAG. Este software encontra-se disponível em [33].

• ModelSim XE III 6.1e - Esta ferramenta de software, fornecida pela Mentor Graphics, permite a simulação e teste dos módulos criados para o projecto. Disponível em [34]. • Spartan-3 Starter Board da digilent - [35] é uma placa, apresentada na figura 3.1com o

chip XC3S200-FT256 onde o projecto será inicialmente implementado. • Câmara digital - Câmara [36], que faz a aquisição de vídeo para a FPGA.

• Módulo de vídeo - este modulo é o interface entre a FPGA e o monitor, ele faz o armaze- namento e controlo de imagem e para tal usa 3 FIFO’s, uma para cada canal do RGB e um VDAC que converte o sinal digital para analógico.

• Osciloscópio digital - Usado para análise dos sinais entre a placa com a FPGA e os perifé- ricos câmara e módulo de vídeo.

Figura 3.1: Fotografia do dispositivo Spartan-3 com os periféricos ligados

O projecto base, que permitiu o arranque deste trabalho foi disponibilizado na disciplina de PSDI (Projecto de Sistemas Digitais) pelos Professores José Carlos Alves e António José Araújo cuja cadeia de vídeo tem a constituição ilustrada na figura 3.2

Trata-se de um projecto funcional para a placa Spartan3, que adquire o vídeo através de uma câmara e reproduz num monitor, deixando condições para a criação de módulos que efectuem processamento do vídeo, nomeadamente, filtros. O projecto trabalha o vídeo com uma resolução

3.1 O Projecto 23

Figura 3.2: Representação da cadeia de vídeo.

de 640x480 píxeis e uma escala de 256 níveis de cinza por pixel. A chegada de pixéis é sequencial e percorre a frame linha a linha da esquerda para a direita e de cima para baixo. A frequência de chegada destes ao módulo é de 12,5MHz e a frequência base do projecto é de 100MHz, deixando assim uma margem de oito clocks de 10ns para efectuar o cálculo do pixel de saída. O cumpri- mento deste tempo para o cálculo na projecção dos módulos é vital pois de outro modo o filtro iria acumular um atraso que levaria a perda de informação. O projecto inclui também um módulo de interface com um computador, para que este possa enviar dados para os módulos dos filtros, possibilitando assim, configurações externas.

A tabela 3.1mostra as entradas disponíveis e as saídas essenciais que um módulo de proces- samento de imagem, designado por filtro, possui.

24 Projecto

Tabela 3.1: Pinos do Filtro Pino Tipo Descrição

clock Entrada sinal de relógio para o funcionamento síncrono com o projecto reset Entrada sinal que ordena um reset.

Pin Entrada barramento de 8bit com a informação do nível da intensidade do pixel. O valor mais baixo representa o preto e o mais alto repre- senta o branco

hrefin Entrada sinal de sincronismo que permite a sincronização horizontal da imagem, indicando o inicio e fim das linhas.

vsyncin Entrada sinal de sincronismo que permite a sincronização vertical da ima- gem, indicando o inicio e fim das imagens

pclken Entrada flag que indica a disponibilidade de um novo pixel no Pin. abus, bbus,

..., pbus

Entrada barramentos que ligam o filtro ao módulo de interface da porta serie permitindo assim a entrada de valores provenientes de um computador para configurar os filtros.

sw0,..., sw7 Entrada interruptores

X e Y Entrada barramentos de 10 e 9 bits que indicam, numa matriz de 640x480, a posição do pixel que está no barramento Pin.

Pout Saída barramento de 8bit com a informação do nível da intensidade do pixel filtrado.

hrefout Saída sinal para sincronização horizontal da imagem, indicando o inicio e fim das linhas de píxeis de saída do filtro

vsyncout Saída sinal para sincronização vertical da imagem, indicando o inicio e fim da imagem com os píxeis de saída do filtro

3.2

Filtros

Uma vez que o interesse neste projecto é processar a segmentação de vídeo em tempo real, os filtros que foram escolhidos para serem implementados, são os que para o cálculo do pixel de saída é usado apenas o pixel original ou os seus vizinhos. Deste modo o atraso do resultado em relação à entrada do filtro será no máximo o tempo de processamento de algumas linhas de uma frame e os recursos exigidos de hardware não são elevados. Assim, dos filtros estudados, os que melhor encaixam neste perfil e por tanto os escolhidos para este projecto, foram um filtro de threshold que pertence à classe dos filtros baseados em histograma, um filtro de detecção de bordas, um de convolução, e um morfológico. Uma vez que o funcionamento teórico de alguns destes filtros foi explicado no estado de arte deste documento, nesta secção será descrita apenas a sua implementação e funcionamento.

3.2 Filtros 25

3.2.1 Filtro de threshold

Este filtro enquadra-se nos filtros baseados em histograma da imagem, mas ao contrário da maioria dos filtros deste género, não necessita de analisar o histograma da imagem inteira. É um filtro que trabalha localmente, ou seja, pixel a pixel, não sendo necessária a análise dos restantes píxeis. A função que define este filtro é a seguinte:

Pout= (

0 if Pin ≤ k 255 if Pin > k

O Valor de k representa o nível de threshold que é o nível de decisão entre os 256 níveis de cinzento do pixel à entrada. Se os píxeis tiverem valores mais altos que este nível de decisão, o pixel calculado assume valor máximo de brilho, que é 255 e representa o branco. Se estiverem a baixo do valor de k, os píxeis calculados assumem o valor 0, ou seja, preto. Como resultado a imagem à saída será binária como mostra a figura 3.3que nos mostra uma imagem original e o resultado deste filtro para vários níveis diferentes de threshold. Este valor é configurado através da interface com o computador. O utilizador para o alterar terá somente de o enviar pela porta série, usando para o efeito, o programa “Hsender” que está em descrito em 4.1.

26 Projecto

3.2.2 Detecção de bordas

Este filtro é baseado no operador gradiente de Roberts, método não-linear, que realiza um procedimento simples e rápido de calcular. Em teoria, o operador consiste numa pequena operação de convolução de uma matriz de 2x2, em que uma máscara é simplesmente a outra, mas com uma rotação de 90◦. " +1 0 0 −1 # " 0 +1 −1 0 #

Para determinar se o pixel avaliado é ou não um pixel de borda, é usado o seguinte cálculo:

|G| =pGx2· Gy2 (3.1)

Embora normalmente, uma magnitude aproximada é calculada usando:

|G| = |Gx| + |Gy| (3.2)

Que é muito mais simples de calcular.

Para a implementação é necessário um módulo de memória, cuja estrutura é explicada na secção 3.2.5. Embora nessa secção descreva uma memória de tamanho 3x3, neste filtro apenas é necessário disponibilizar uma matriz 2x2, cujas coordenadas são as seguintes:

"

x0y0 x1y0 x0y1 x1y1

#

O cálculo que substitui o valor do pixel é:

x0y00= 2 · (x0y0 − x1y1) + 2 · (x0y1 − x1y0) (3.3) A arquitectura deste filtro, ilustrada na figura 3.4, para efectuar este cálculo necessita apenas de quatro dos oito ciclos de relógio disponíveis. O diagrama representado na figura 3.5 mostra máquina de estados que efectua o cálculo. A imagem que resulta deste filtro apresenta a des- vantagem de depender da direcção e certas bordas, ou seja, certas bordas são mais realçadas que outras.

O módulo de sincronismo atrasa os sinais href e vsync de forma a compensar o tempo neces- sário para o armazenamento de pixéis na memória e cálculo do pixel. No caso deste filtro o atraso será relativo ao tempo de chegada de uma linha inteira de pixéis, mais um pixel.

Como resultado da aplicação deste filtro, obtém-se uma imagem com valores de nível altos, em regiões de limites bem definidos e valores baixos em regiões de limites suaves. Para regiões de nível constante, o valor do pixel é zero, ou seja ele destaca regiões de alta frequência espacial,

3.2 Filtros 27

Figura 3.4: Representação da arquitectura do filtro detecção de bor- das.

Figura 3.5: Máquina de estados do cálculo.

que de certa forma correspondem às bordas. O efeito deste filtro pode ser visualizado na fig 3.6 que são imagens retiradas da implementação deste filtro.

28 Projecto

3.2.3 Filtro de convolução

O módulo a desenvolver para este filtro é composto por três blocos: um de memória que armazena e disponibiliza o pixel a calcular e os seus vizinhos; um para o cálculo e outro que efectua o sincronismo da imagem, uma vez que haverá um atraso criado pela memória e pelo cálculo, tal como no filtro explicado anteriormente. A figura 3.7mostra como estes blocos estão relacionados.

Figura 3.7: Representação da arquitectura do filtro de convolução

O módulo funciona com uma mascara de tamanho 3x3. Assumindo x e y, a posição do pixel a calcular, segundo a convenção dos eixos, como foi descrito no capítulo sobre representação de imagens digitais, a sua relação com a matriz convolução, neste caso representada por matriz h, será segundo a seguinte formula:

Pout(x, y) = 1 2N · N−1

i=0 N−1

j=0 f(x + i, y + j) · h(i, j) (3.4)

O valor a dividir na formula, deverá ser o valor mais próximo do somatório dos valores da matriz h, como foi explicado na secção 2.4.2. A divisão feita desta forma será muito mais simples em termos de implementação de hardware pois traduz-se num shift-register.

O cálculo funciona como uma máquina de estados, de forma a explorar e aproveitar o facto de haver disponibilidade de oito ciclos de relógio para que o resultado esteja disponível. Poderiam ser usados menos ciclos e o cálculo ficar mais rápido, mas desta forma e, uma vez que, o próximo cálculo só inicia após oito ciclos na mesma, são usados menos recursos relativos ao espaço e con- sumo na FPGA. Como se pode ver no esquema representado na figura 3.8as nove multiplicações entre os pixéis da máscara e os da imagem estão distribuídas pelos oito estados disponíveis para o cálculo. O resultado vai sendo acumulado num registo, no penúltimo ciclo faz-se a divisão usando

3.2 Filtros 29

um simples shift-register e por fim, no último ciclo, é verificado se o valor calculado sofreu um over-flowe corrige limitando os valores superiores e inferiores válidos para um pixel.

Figura 3.8: Representação da máquina de estados no módulo cálculo.

Os efeitos deste filtro podem ser os mais variados. As amostras deste filtro apresentados na figura 3.9são apenas algumas das mais usuais configurações neste tipo de filtros, que podem ser consultadas na secção 2.4.2.

30 Projecto

3.2.4 Filtro morfológico

Este filtro baseia-se apenas na troca do pixel a calcular pelo próprio ou por um dos seus vizi- nhos. Os nove píxeis de uma matriz de tamanho 3x3 são ordenados de forma crescente e troca-se o pixel central por um dos vizinhos, escolhendo o pixel de valor mais baixo, mais alto ou mediano.

Documentos relacionados