tese 1,9 mb
TRANSCRIPT
Aceleração por Hardware de Cálculos Matriciais para
Aplicações de Comunicação Sem Fios
Eugénio Filipe Nogueira Costa
Dissertação para obtenção do Grau de Mestre em
Engenharia Electrotécnica
Júri
Presidente: Prof. Doutor Nuno Cavaco Gomes Horta
Orientador: Prof. Doutor Horácio Cláudio de Campos Neto
Co-Orientadora: Prof.ª Doutora Maria Helena da Costa Matos Sarmento
Vogal: Prof. Doutor Nuno Filipe Valentim Roma
Janeiro 2012
i
ii
Agradecimentos
Dedico este espaço a todos que de alguma forma deram a sua contribuição, não só na
elaboração na presente dissertação, mas também no decurso do Mestrado que agora termina,
incluindo aqueles que, por equívoco meu, me olvide referir.
Agradeço aos meus orientadores, Professor Horácio Neto e Professora Helena Sarmen-
to, pela sua disponibilidade, colaboração e valiosos contributos científicos.
Agradeço em especial o esforço, a paciência, a disponibilidade e a dedicação do Profes-
sor Horácio Neto, que esteve sempre envolvido em todas as fases de execução e permitiu que
esta dissertação fosse concluída com sucesso.
Aos meus camaradas Renato Vieira, Ricardo Pereira, Carlos Ruivo e João Mendes,
pelas imensas horas passadas na troca de ideias, partilha de angústias, dúvidas e incertezas.
Aos meus camaradas de curso “Chakais” por manterem sempre presente um espírito de
camaradagem e união.
Agradeço a todos os meus amigos pelo apoio que directa ou indirectamente me deram
no decorrer deste trabalho e do curso que agora termina.
Por último mas nem por isso menos importante, um agradecimento muito especial à
minha família. Aos meus Pais, a quem devo tudo o que sou hoje e à minha irmã. Apesar da
distância, reconheço o vosso carinho e preocupação constantes.
A todos os elementos presentes neste texto de agradecimento, o meu sincero e profundo
Obrigado.
iii
iv
Resumo
As aplicações de comunicações sem fios destinadas a sistemas multi-antena envolvem
problemas de inversão e decomposição matricial que exigem operações computacionais efi-
cientes. A inversão matricial constitui, ao mesmo tempo, um processo computacional intensivo.
Esta dissertação apresenta uma arquitectura eficiente e escalável para inversão de
matrizes quadradas, com elementos complexos. O projecto foi baseado no método de decom-
posição QR, com recurso ao algoritmo de ortogonalização Gram-Schmidt Modificado. O uso do
Gram-Schmidt Modificado permitiu o desenvolvimento de uma arquitectura numericamente
estável e com elevada precisão para o processamento de matrizes bem condicionadas não
singulares. Foi realizada uma exploração arquitectural detalhada, com base na decomposição
do algoritmo num conjunto de fases e operações, que permitiu obter uma implementação efi-
ciente com um elevado nível de paralelismo.
Os resultados obtidos mostram que a arquitectura desenvolvida consegue desempenhos
superiores aos dos trabalhos desenvolvidos em FPGA, anteriormente propostos. O multipro-
cessador obteve um tempo total de execução de 2,9 µs, a uma frequência de relógio de
167MHz, para inverter matrizes complexas de ordem 8 no dispositivo da Xilinx Virtex-6
XC6VLX760.
A arquitectura desenvolvida permite ainda processar matrizes de ordem inferior a 8 e
implementações com diferentes níveis de risco de erro associado. A arquitectura do projecto é
também facilmente extensível para o processamento de matrizes de dimensões superiores.
Palavras-chave:
Hardware, FPGA, inversão matricial, Gram-Schmidt Modificado, comunicações sem fios,
MIMO.
v
vi
Abstract
Wireless communication applications for multi-antenna systems require the efficient com-
putation of matrix inversion and decomposition problems. Matrix inversion is also a
computationally intensive process.
This paper presents an efficient and scalable architecture for the inversion of square ma-
trices with complex elements. The design is based on the QR decomposition algorithm with
modified Gram-Schmidt orthogonalization. The use of modified Gram-Schmidt makes this archi-
tecture numerical stable and accurate for well-conditioned non-singular matrices. An
optimization technique is proposed, such that the algorithm is split in several stages and opera-
tions, which can be efficiently parallelized.
The results obtained show that the proposed architecture is significantly faster than pre-
viously published FPGA implementations. The matrix inversion core can achieve a throughput
of up to 0.34M updates per second, for 8 by 8 matrices of complex values, on a Xilinx Virtex-6
XC6VLX760 executing at 167MHz.
The proposed architecture can also process smaller matrices and it supports different er-
ror risk levels. Further, this new architecture is easily extendable for other matrix sizes.
Keywords:
Hardware, FPGA, matrix inversion, Modified Gram-Schmidt, wireless communications, MIMO.
vii
viii
Índice
Agradecimentos ................................................................................................................... ii
Resumo ............................................................................................................................... iv
Abstract ............................................................................................................................... vi
Índice ................................................................................................................................. viii
Lista de Figuras ................................................................................................................... x
Lista de Tabelas ................................................................................................................. xii
Lista de Abreviaturas ........................................................................................................ xiv
Lista de Símbolos .............................................................................................................. xvi
1 Introdução .................................................................................................................. 1
1.1 Contexto e Enquadramento .................................................................................. 1
1.2 Motivação .............................................................................................................. 2
1.3 Objectivos .............................................................................................................. 4
1.4 Metodologia ........................................................................................................... 5
1.5 Estrutura do Documento........................................................................................ 6
2 Sistemas Multi-Antena e Algoritmos de Inversão Matricial ....................................... 7
2.1 Sistemas Multi-Antena........................................................................................... 7
2.2 Métodos de Inversão Matricial ............................................................................ 10
2.2.1 Métodos de aproximação analíticos ............................................................ 10
2.2.2 Decomposição LU e decomposição Cholesky ............................................ 12
2.2.3 Decomposição QR ...................................................................................... 12
2.3 Implementação em Hardware de Algoritmos de Inversão Matricial .................... 15
2.4 Conclusão ............................................................................................................ 17
3 Ortogonalização Gram-Schmidt e Representação Aritmética ................................ 19
3.1 Inversão de matrizes com recurso à decomposição QR utilizando a
ortogonalização Gram-Schmidt ............................................................................................... 19
3.2 Inversão de matrizes com o algoritmo Modified Gram-Schmidt ......................... 22
3.3 Aritmética de vírgula fixa ..................................................................................... 25
3.4 Conclusão ............................................................................................................ 27
4 Especificação e Optimização do MGS .................................................................... 29
4.1 Especificação do MGS para inversão de matrizes complexas de ordem 8 ........ 29
ix
4.1.1 Fase 1 – Cálculo das colunas da matriz Q (Qi), da diagonal da matriz R (Rii)
e das colunas das matrizes U ............................................................................................. 29
4.1.2 Fase 2 – Cálculo da matriz W ..................................................................... 31
4.1.3 Fase 3 – Cálculo da matriz B ...................................................................... 32
4.2 Modelo e optimização.......................................................................................... 33
4.3 Análise de Erro .................................................................................................... 38
4.4 Conclusão ............................................................................................................ 42
5 Projecto e Implementação da Arquitectura de Processamento .............................. 43
5.1 Dependências e conflitos de dados .................................................................... 43
5.2 Arquitectura ......................................................................................................... 44
5.2.1 Armazenamento de dados .......................................................................... 45
5.2.2 Subtractor vectorial ...................................................................................... 48
5.2.3 Multiplicador simples ................................................................................... 49
5.2.4 Multiplicador vectorial .................................................................................. 50
5.2.5 Recíproco .................................................................................................... 51
5.2.6 Raiz quadrada ............................................................................................. 53
5.3 Conclusão ............................................................................................................ 55
6 Resultados ............................................................................................................... 57
6.1 Recursos e Desempenho .................................................................................... 57
6.2 Análise de erro e Precisão .................................................................................. 60
6.3 Conclusão ............................................................................................................ 66
7 Conclusões e trabalho futuro .................................................................................. 67
7.1 Satisfação dos objectivos .................................................................................... 67
7.2 Trabalho futuro .................................................................................................... 68
Referências ....................................................................................................................... 69
Anexos .............................................................................................................................. 73
A1 Diagrama Interno do multiplicador vectorial ........................................................ 73
A2 Circuito de Demonstração ................................................................................... 75
x
Lista de Figuras
Figura 1.1 – Crescimento da utilização da internet nos últimos 16 anos. .......................... 3
Figura 2.1 – Multiplexagem do fluxo de dados num sistema MIMO com 4 antenas
emissoras. ..................................................................................................................................... 8
Figura 2.2 – Diagrama de blocos de um sistema de comunicações sem fios MIMO-
OFDM. Fonte: ................................................................................................................................ 9
Figura 2.3 – Fases constituintes da inversão matricial com recurso à decomposição QR.
Fonte: Irturk et al., 2009 [3]. ........................................................................................................ 13
Figura 2.4 – Comparação entre o número de operações exigido pelo MGS e GR para m,
n Є [1;8]: análise tridimensional em função de m e n. ................................................................ 14
Figura 2.5 – Comparação entre o número de operações exigido pelo MGS e GR para m,
n Є [1;8]: análise 2D para m ≥ 2n/3, fazendo variar m em função de n (a) e fazendo variar m em
função de n (b). ........................................................................................................................... 15
Figura 3.1 – Visualização do método de ortogonalização Gram-Schmidt. Fonte: Irturk,
2007 [18]. ..................................................................................................................................... 21
Figura 3.2 – Algoritmos de decomposição QR de matrizes quadradas de ordem n:
CGS(a) e MGS(b). Fonte: Persson, 2007 [13]. ........................................................................... 23
Figura 3.3 – Comparação entre o algoritmo MGS genérico (a) e a respectiva adaptação
ao domínio complexo (b). ............................................................................................................ 24
Figura 3.4 – Algoritmo de inversão de uma matriz triangular superior R. Fonte: Irturk et al.
2009 [3]. ....................................................................................................................................... 25
Figura 3.5 – Representação de uma palavra binária com vírgula fixa e complemento para
2. .................................................................................................................................................. 26
Figura 4.1 – Evolução da fase 1, relativamente à manipulação e cálculo das matrizes U,
Q e R. .......................................................................................................................................... 31
Figura 4.2 – Blocos e ligações principais da unidade de dados da arquitectura do modelo
funcional. ..................................................................................................................................... 33
Figura 4.3 – Blocos e ligações principais da unidade de dados da arquitectura do modelo
2. .................................................................................................................................................. 35
Figura 4.4 – Blocos e ligações principais da unidade de dados da arquitectura do modelo
final. ............................................................................................................................................. 36
Figura 5.1 – Diagrama das unidades principais do projecto. ............................................ 44
Figura 5.2 – Ligações (E/S) de cada unidade de armazenamento de dados. ................. 45
Figura 5.3 – Disposição dos blocos RAM memX.............................................................. 45
Figura 5.4 – Disposição dos blocos RAM memY.............................................................. 46
Figura 5.5 – Disposição dos blocos RAM memZ. ............................................................. 47
Figura 5.6 – Diagrama de ligações (E/S) do subtractor vectorial. .................................... 48
Figura 5.7 – Diagrama interno do bloco de subtracção vectorial. .................................... 48
Figura 5.8 – Diagrama de ligações (E/S) do multiplicador simples. ................................. 49
xi
Figura 5.9 – Diagrama interno do bloco multiplicação simples. ....................................... 49
Figura 5.10 – Diagrama de ligações (E/S) do multiplicador vectorial. .............................. 50
Figura 5.11 – Diagrama de ligações (E/S) da unidade recíproco. .................................... 51
Figura 5.12 – Diagrama interno do bloco recíproco. ........................................................ 53
Figura 5.13 – Diagrama de ligações (E/S) da unidade raiz quadrada. ............................. 53
Figura 5.14 – Diagrama interno do bloco raiz quadrada. ................................................. 55
Figura 6.1 – Distribuição do erro relativo para 5% de risco de overflow. ......................... 63
Figura 6.2 – Distribuição do erro relativo para 1% de risco de overflow. ......................... 63
Figura 6.3 – Distribuição do erro relativo para 0,1% de risco de overflow. ...................... 64
Figura 6.4 – Comparação do erro relativo do módulo para os três níveis de risco de
overflow. ...................................................................................................................................... 64
Figura 6.5 – Comparação do erro relativo da parte real para os três níveis de risco de
overflow. ...................................................................................................................................... 65
Figura 6.6 – Comparação do erro relativo da parte imaginária para os três níveis de risco
de overflow. ............................................................................................................................. 65
Figura A.1 – Diagrama interno do cálculo da parte real do multiplicador vectorial. ......... 73
Figura A.2 – Diagrama interno do cálculo da parte imaginária do multiplicador vectorial.
..................................................................................................................................................... 74
Figura A.3 – Configuração da porta série do PC. ............................................................. 75
Figura A.4 – Diagrama de blocos do circuito de demonstração com o fluxo de dados
entre a FPGA e o PC. ................................................................................................................. 76
Figura A.5 – Matriz de entrada na disposição que é introduzida nas memXi. ................. 77
Figura A.6 – Matriz inversa ideal, obtida em MATLAB. .................................................... 78
Figura A.7 – Matriz inversa obtida em simulação (simulador do ISE). ............................. 78
Figura A.8 – Matriz inversa obtida no Hyper Terminal, após implementação na FPGA. . 79
xii
Lista de Tabelas
Tabela 2.1 – Decisões e resultados de implementação de métodos de inversão de
matrizes de ordem 4 em FPGAs da família Virtex-4. .................................................................. 16
Tabela 2.2 - Decisões e resultados de implementação de métodos de inversão de
matrizes de ordem 4 em tecnologia 0.18µm CMOS, desenvolvidos em VLSI. .......................... 17
Tabela 4.1 – Comparação entre os resultados obtidos dos três modelos desenvolvidos.
..................................................................................................................................................... 37
Tabela 4.2 – Distribuição dos valores máximos obtidos para o resultado das 10
operações e respectivo número de bits necessário para a representação da parte inteira, no
universo de 5000 ensaios. .......................................................................................................... 38
Tabela 4.3 – Número de ensaios que apresenta a distribuição da Tabela 4.2. ............... 39
Tabela 4.4 – Avaliação do risco de erro de overflow à entrada da raiz quadrada. .......... 40
Tabela 4.5 – Avaliação do risco de erro de overflow para os elementos da matriz R. .... 40
Tabela 4.6 – Avaliação do risco de erro de overflow para os elementos da matriz W . ... 40
Tabela 4.7 – Avaliação do risco de erro de overflow para os elementos da matriz Q. .... 40
Tabela 4.8 – Avaliação do risco de erro de overflow para os elementos da matriz . .... 40
Tabela 4.9 – Avaliação do risco de erro de overflow para à saída da OP8. ..................... 41
Tabela 4.10 – Avaliação do risco de erro de overflow para os elementos da matriz B. ... 41
Tabela 4.11 – Formato das palavras binárias utilizadas na representação das matrizes.
..................................................................................................................................................... 41
Tabela 5.1 – Recursos utilizados pelo multiplicador vectorial. ......................................... 50
Tabela 6.1 – Recursos consumidos pelo multiprocessador. ............................................ 57
Tabela 6.2 – Resultados de desempenho para os diferentes dispositivos testados. ....... 58
Tabela 6.3 – Total de ciclos de relógio necessários para o processamento das diferentes
dimensões das matrizes. ............................................................................................................. 58
Tabela 6.4 – Comparação entre os resultados obtidos neste projecto, e os resultados
obtidos por outros autores, mencionados na Tabela 2.1. ........................................................... 59
Tabela 6.5 – Aumento dos recursos do projecto com o incremento de uma unidade na
ordem das matrizes. ................................................................................................................ 60
Tabela 6.6 – Descrição estatística do erro para 5% de risco de overflow. ....................... 61
Tabela 6.7 – Descrição estatística do erro para 1% de risco de overflow. ....................... 61
Tabela 6.8 – Descrição estatística do erro para 0,1% de risco de overflow. .................... 62
xiii
xiv
Lista de Abreviaturas
ASIC Aplication –Specific Integrated Circuit
(Especificação e Aplicação de Circuitos Integrados)
BRAM Block Random Access Memory
(Bloco de Memória de Acesso Aleatório)
CGS Classic Gram-Schmidt
(Gram-Schmidt Clássico)
FPGA Field Programable Gate Array
FF Flip-Flop
FFT Fast Fourier Transform
(Transformada Rápida de Fourier)
DSP Digital Signal Processor
(Processador de Sinal Digital)
ESDA Electronic System Design and Automation
(Projecto e Automação de Sistemas Electrónicos)
GPS Global Positioning System
(Sistema de Posicionamento Global)
GR Givens Rotation
(Rotação de Givens)
HDL Hardware Description Language
(Linguagem de Descrição de Hardware)
HR Householder Reflections
(Reflexões Householder)
ICI Inter Carrier Interference
(Interferência Inter-Canal)
IEEE Institute of Electrical and Electronics Engineers
(Instituto de Engenheiros Electricistas e Electrónicos)
INESC-ID Instituto de Engenharia de Sistemas e Computadores – Investigação e
Desenvolvimento em Lisboa
ISE Integrated Software Environment
(Ambiente de Software Integrado)
ISI Inter Symbol Interference
(Interferência Inter-Simbólica)
LMS Least Mean Squares
(Média dos Mínimos Quadrados)
LS Least Squares
(Mínimos Quadrados)
xv
LUT Look-Up Table
(Tabela de Consulta)
MGS Modified Gram-Schmidt
(Gram-Schmidt Modificado)
MIMO Multiple Input Multiple Output
(Multiplas Entradas e Múltiplas Saídas)
MMSE Mininum Mean Square Error
(Mínimo Erro Médio Quadrático)
Ne Número de Antenas Emissoras
Nr Número de Antenas Receptoras
OFDM Orthogonal Frequency-Division Multiplexing
(Multiplexagem por Divisão Ortogonal da Frequência)
RAW Read after Write
(Leitura após Escrita)
RLS Recursive Least Squares
(Algoritmo Recursivo de Minimos Quadrados)
SMI Sample Matrix Inversion
(Inversão da Matriz de Amostragem)
WAR Write after Read
(Escrita após Leitura)
WAW Write after Write
(Escrita após Escrita)
USB Universal Serial Bus
(Barramento Série Universal)
VHDL VHSIC Hardware Description Language
(Linguagem de Descrição de Hardware VHSIC)
VHSIC Very-High-Speed Integrated Circuit
(Circuito Integrado de Alto Desempenho)
VLSI Very-Large-Scale Integration
(Integração em Grande Escala)
ZF Zero Forcing
xvi
Lista de Símbolos
Conjunto de números Naturais
Conjunto de números Reais
Conjunto de números Complexos
Componente real de um elemento do domínio complexo
Componente imaginária de um elemento do domínio complexo
Erro relativo
Erro absoluto
xvii
1
1 Introdução
Os cálculos matriciais são comuns em aplicações de comunicações sem fios. O tema
desta dissertação diz respeito à especificação, projecto e implementação de um multiprocessa-
dor dedicado para a inversão de matrizes quadradas complexas, de dimensões iguais ou
inferiores a 8x8, em Field Programmable Gate Array (FPGA).
No presente capítulo é feito um enquadramento e contextualização desta dissertação,
partindo depois para a demonstração da relevância deste tema. Feita a contextualização e o
enquadramento, este capítulo prossegue com as causas que conduziram a esta dissertação.
Segue-se depois uma apresentação dos objectivos que se pretendem atingir e por último uma
descrição geral da estrutura do documento.
1.1 Contexto e Enquadramento
Devido à sua robustez na selecção da frequência de fading, elevada eficiência espectral
e baixa complexidade computacional, a tecnologia Orthogonal Frequency Division Multiplexing
(OFDM) é uma das mais promissoras nos sistemas de comunicação sem fios, particularmente
em elevadas taxas de transmissão de dados. Habitualmente utilizados em conjunto com os
sistemas OFDM, os sistemas Multiple Input Multiple Output (MIMO) melhoram a eficiência dos
sistemas de comunicações sem fios, utilizando múltiplas antenas emissoras e receptoras,
resultando num aumento da capacidade do canal e numa redução da interferência inter-
simbólica (Intersymbolic Interference - ISI). Cada receptor do sistema MIMO-OFDM tem a
necessidade de equalizar o sinal recebido, com o objectivo de retirar o efeito do canal sobre o
sinal. O processo de equalização envolve operações de inversão matricial, onde o tamanho
das matrizes depende da quantidade de antenas emissoras e receptoras [3][4]. O elevado
número de operações, em conjunto com as taxas de transmissão exigidas em tempo real, tor-
nam-se factores determinantes no desenvolvimento do projecto e na escolha da plataforma.
Os sistemas de hardware reconfiguráveis dedicados oferecem grandes vantagens, em
aplicações que apresentam requisitos computacionais elevados, dificilmente suportados por
sistemas de software. São várias as plataformas de hardware que têm capacidade para imple-
mentação de algoritmos de elevado desempenho na área dos sistemas multi-antena. Podem
distinguir-se quatro categorias: processadores genéricos, processadores de sinal digital (Digital
Signal Processors - DSPs), circuitos integrados para aplicações específicas (Aplication – Speci-
fic Integrated Circuits - ASICs) e FPGAs.
Uma FPGA é um dispositivo semi-condutor composto por componentes e ligações com
lógica reconfigurável. A lógica pode ser configurada de modo a melhorar o desempenho de
operações booleanas básicas como AND, OR ou NOT, até funções combinatórias mais com-
plexas como é o caso das operações matriciais. As FPGAs dispõem ainda de componentes
optimizados, como memórias, DSPs e outros blocos de hardware dedicados, assim como,
2
interfaces USB, Ethernet e suporte para memórias externas. As principais vantagens das
FPGAs passam pela capacidade de um projecto ser desenvolvido, testado e implementado
num espaço de tempo reduzido (particularmente importante quando o tempo para o desenvol-
vimento do projecto é limitado). Se a aplicação tiver como dispositivo alvo a FPGA, a distância
entre o protótipo e o produto final é insignificante. O custo de desenvolvimento em FPGA é
consideravelmente inferior ao desenvolvimento em ASIC. O elevado número de empresas que
actualmente desenvolve e vende ferramentas para optimização e projecto em FPGA, constitui
também uma mais-valia.
Aliando o alto desempenho da execução em hardware dedicado à flexibilidade da pro-
gramação em software, a FPGA torna possível acelerar significativamente o processamento de
cálculos intensivos [18].
A FPGA constitui assim o dispositivo alvo deste trabalho. O caminho crítico, a latência e
área de hardware são estimados e definidos com recurso a ferramentas da Xilinx [21] após
synthesyzing e place & route do projecto, em FPGA Virtex-4, 5 e 6 (a primeira apenas para
demonstração).
Tendo sido realizada num ambiente Institucional, esta dissertação apresenta um interes-
se teórico e prático para Organização proponente. O Instituto de Engenharia de Sistemas e
Computadores – Investigação e Desenvolvimento (INESC-ID) é uma organização sem fins
lucrativos e de interesse público, voltada para a investigação e desenvolvimento nas áreas da
electrónica, telecomunicações e tecnologias de informação [1]. Na componente dos sistemas
electrónicos, encontra-se um grupo de pesquisa, denominado por Electronic Systems Design
and Automation (ESDA). Os objectivos do grupo ESDA focam-se nos aspectos de investigação
e projecto de sistemas electrónicos, assim como no desenvolvimento de algoritmos e ferramen-
tas que contribuam para a automatização do projecto, actualmente com destaque para a
computação com recurso a hardware reconfigurável [2]. O grupo ESDA é por estes motivos o
órgão que acolhe esta dissertação.
1.2 Motivação
Desde a sua existência, o ser humano procura comunicar entre si, o que conduziu à
criação e desenvolvimento de sistemas de comunicação, cada vez com maior capacidade,
expedição e eficiência. Em 1876, surgiu o primeiro sistema de comunicação de longa distância
da era moderna - o telefone. A tecnologia evoluiu, os materiais condutores utilizados na trans-
missão de sinal sofreram alterações na constituição, tamanho, peso, custo e disponibilidade,
conduzindo a uma redução das perdas e consequente eficiência nas comunicações. Em 1970
surge a primeira fibra óptica com perdas de atenuação inferiores a 20dB/Km e grande largura
de banda.
Em 1980 aparece a internet, que vem evidenciar ainda mais a necessidade de sistemas
de comunicação eficientes. Desde então, a utilização da internet tem crescido a um ritmo sem
3
precedentes. Inevitavelmente, a tecnologia que suporta toda a transmissão de dados vê-se
obrigada a acompanhar essa evolução.
Em 1997, o Institute of Electrical and Electronics Engineers (IEEE), aprovou a norma de
comunicações sem fios, que viria a ser a base dos protocolos de comunicações sem fios
actuais – o IEEE 802.11, com taxas de transmissão nominais que atingiam os 2 Mbps [5].
Na Figura 1.1 encontra-se a evolução da utilização de internet nos últimos dezasseis
anos.
Figura 1.1 – Crescimento da utilização da internet nos últimos 16 anos. Fonte: http://www.internetworldstats.com/emarketing.htm [6]
Como se pode observar na Figura 1.1, a quantidade de utilizadores de internet tem
aumentado exponencialmente a cada ano que passa, sendo que, de acordo com dados estatís-
ticos, a ultima recolha data de Junho de 2011 e aponta para 2110 milhões de utilizadores [6]. O
actual tráfego na internet exige um grande desempenho, dos meios de comunicação, nas com-
ponentes de velocidade e capacidade.
Apesar de ainda estarmos no inicio da revolução dos sistemas de comunicações móveis,
as comunicações sem fios estão a crescer a um ritmo elevado. O futuro das comunicações
móveis e redes sem fios será caracterizado pela globalidade, omnipresença e acessibilidade,
de modo a eliminar as barreiras espaço-temporais, ainda existentes actualmente. Assim, prevê-
se que a próxima geração de comunicações móveis, também referida como 4G, venha combi-
nar e integrar as comunicações sem fios com tecnologia da informação e multimédia, fazendo
com que o número de dispositivos portáteis, como smartphones, laptops e outros aparelhos de
comunicação móvel, exceda o número de desktops ligados à Internet. Estes terminais móveis
irão aceder e partilhar serviços de multimédia para todo o tipo de dados (mensagens, voz,
vídeo, Internet, GPS, rádio, TV, etc.). São vários os potenciais beneficiários desta evolução,
sendo que a área que apresenta maior crescimento é a do entretenimento [17].
O crescente uso dos sistemas de comunicação sem fios, exige taxas de transmissão
com grande fiabilidade. Por este motivo, nos últimos anos, os sistemas MIMO têm sido alvo de
grande interesse de pesquisa. Os sistemas MIMO têm desempenhado um papel significativo
1
10
100
1000
10000
1994 1996 1998 2000 2002 2004 2006 2008 2010 2012
Milh
õe
s d
e U
tiliz
ado
res
Ano
4
na investigação de várias normas de comunicações sem fios, como é o caso do IEEE 802.11n
e do IEEE 802.16e. Estes sistemas de comunicações sem fios baseados na tecnologia OFDM,
são limitados, relativamente ao número máximo de antenas suportado (a norma IEEE 802.11n,
por exemplo, suporta apenas 4 antenas emissoras e receptoras). A próxima geração de siste-
mas de comunicação sem fios é actualmente grande objecto de pesquisa e desenvolvimento,
e, combina os sistemas MIMO com a tecnologia OFDM [7][8].
Em suma, com a emergência dos sistemas MIMO-OFDM, e a necessidade de taxas de
transmissão elevadas com grande fiabilidade, o número de antenas emissoras e receptoras
tende a aumentar, exigindo deste modo um processamento de cálculos extremamente intensi-
vo, nomeadamente na tarefa de inversão das matrizes.
Neste contexto, considerando os exigentes requisitos nas taxas de transmissão em tem-
po real (throughputs superiores a 1KHz [10][15]), o projecto em software verifica-se insuficiente,
sendo necessário migrar para o projecto em hardware.
1.3 Objectivos
Considerando a emergência dos sistemas multi-antena MIMO-OFDM referida e a conse-
quente necessidade de computação intensiva de cálculos no processo de inversão de matrizes
complexas, os objectivos da dissertação passam pela investigação e avaliação de algoritmos
de inversão de matrizes, com posterior especificação e implementação do algoritmo, que
demonstrar melhor cumprimento dos requisitos.
Apurado o método que melhor preenche os requisitos de desempenho, área de hardwa-
re ocupada e consumo de energia, este será estudado e optimizado com vista a uma primeira
implementação em MATLAB (modelo de auxilio), e posterior especificação em VHDL (Very high
speed integrated circuits Hardware Description Language), tendo como dispositivo alvo a
FPGA.
O processo de optimização do algoritmo passa por diferentes fases, desde o dimensio-
namento das palavras binárias, passando pelo estudo de erro de overflow e de precisão, até à
implementação de pipeline e maximização do paralelismo.
A especificação em VHDL, estende-se desde a arquitectura a implementar até ao
desenvolvimento de unidades de processamento de dados, com especial atenção para as uni-
dades de cálculo de raiz quadrada e recíproco.
Resumidamente, pretende-se projectar e concretizar em hardware reconfigurável um
multiprocessador dedicado, capaz de acelerar o processo de inversão de matrizes quadradas
complexas de dimensões até 8x8, para aplicações de comunicações sem fios multi-antena.
5
1.4 Metodologia
A metodologia adoptada nesta dissertação envolve um conjunto de tarefas, que passam
pela compreensão do problema em estudo, revisão bibliográfica relacionada com os tópicos
envolvidos, análise de mecanismos existentes para resolução de problemas semelhantes e
estudo e implementação de uma solução para o problema.
As tarefas realizadas foram:
1. Estudo do problema de inversão de matrizes complexas no âmbito de sistemas de comuni-
cação sem fios multi-antena.
2. Pesquisa de trabalhos existentes (com especial atenção dada aos métodos de decomposi-
ção ou factorização);
3. Estudo dos mecanismos usados nos trabalhos encontrados em 2, e breve revisão dos
mecanismos utilizados em operações elementares;
4. Elaboração de uma solução para o problema em estudo, usando alguns dos mecanismos
vistos em 2 e 3;
5. Desenvolvimento de ferramentas de suporte em MATLAB, para definir estratégias de esca-
lonamento, dimensionamento das palavras binárias e definição de margens de erro;
6. Especificação da solução proposta em VHDL;
7. Modelização e optimização em VHDL;
8. Testes de precisão à aplicação desenvolvida em 6;
9. Implementação em FPGA.
6
1.5 Estrutura do Documento
Esta dissertação é organizada em sete capítulos.
Neste capítulo foi enquadrado o trabalho realizado no âmbito da investigação científica
do INESC-ID. Foram ainda apresentadas as motivações que influenciam o desenvolvimento do
trabalho assim como o objectivo que se visa alcançar.
No capítulo 2 é efectuada uma revisão à literatura existente, de modo a compreender os
requisitos impostos pelas aplicações de comunicações sem fios, para posterior análise aos
algoritmos de inversão matricial existentes, de modo a definir a melhor solução.
No capítulo 3 é realizada uma análise pormenorizada à inversão matricial com recurso
ao método de decomposição QR baseado na ortogonalização Gram-Schmidt e uma análise
aos métodos de representação aritmética ao nível computacional.
No capítulo 4 é especificado o método Modified Gram-Schmidt para matrizes complexas
de ordem 8, são descritos os modelos e os passos de optimização considerados, com base no
algoritmo, nos recursos, no desempenho e na análise de erro.
O capítulo 5 descreve a arquitectura do projecto, desde as dependências e conflitos de
dados até à estrutura interna de cada unidade de processamento de dados, passando pela
análise e explicação de algoritmos utilizados no desenvolvimento de unidades específicas.
No capítulo 6 são apresentados os resultados obtidos, relativos aos recursos consumi-
dos, ao desempenho e à precisão dos resultados.
Por último, no capítulo 7 são apresentadas as conclusões finais, bem como possíveis
extensões e/ou alterações ao trabalho desenvolvido.
7
2 Sistemas Multi-Antena e Algoritmos de Inversão
Matricial
Neste capítulo descrevem-se os trabalhos existentes relativos à implementação em
hardware, de algoritmos de inversão matricial.
É também apresentada uma revisão da tecnologia de comunicações sem fios multi-
antena, enquanto alvo do estudo desenvolvido, procurando contextualizar e precisar a impor-
tância dos estudos teóricos.
A primeira parte deste capítulo centra-se numa análise aos sistemas multi-antena e res-
pectivos requisitos. Segue-se a análise dos métodos existentes de inversão de matrizes, com
especial atenção para a decomposição QR, enquanto método que melhor se adequa aos
requisitos de dimensão e complexidade exigidos. Por fim são identificados os algoritmos utili-
zados por outros autores, assim como as respectivas opções de implementação.
2.1 Sistemas Multi-Antena
O espectro de frequências reservado para as comunicações sem fios é limitado, com a
agravante de na última década se ter tornado um recurso bastante precioso. Deste modo, a
evolução nas taxas de transmissão de dados passa obrigatoriamente pelo projecto e aplicação
de técnicas avançadas de comunicação baseadas em sistemas multi-antena, que implicam
algoritmos computacionalmente complexos. Os sistemas multi-antena são constituídos por
duas ou mais antenas no emissor e/ou no receptor. Existem duas classes de sistemas multi-
antena: SMART e MIMO [17].
Um sistema SMART é constituído por múltiplas antenas no emissor ou no receptor
(nomeadamente sistemas multiple input – single output (MISO) e single input – multiple output
(SIMO)), onde os sinais das várias antenas são combinados segundo algoritmos específicos.
Este sistema pode ser utilizado para aumentar a capacidade e cobertura de um sistema de
comunicações móvel (beamforming), para melhorar a qualidade do canal (filtragem) e/ou para
diminuir o atraso de dispersão.
O beamforming é um tema importante nas comunicações sem fios. Para formar a estru-
tura básica de um radar beamforming é necessária uma matriz de antenas uniformemente
distribuídas. Esta técnica é utilizada com o objectivo de alcançar a máxima capacidade de
recepção numa determinada direcção sob a presença de ruído. No processo de comunicação,
os sinais provenientes de cada antena são multiplicados por um conjunto de coeficientes com-
plexos e posteriormente transmitidos. Os coeficientes são usados para estimar a chegada do
sinal proveniente de uma direcção pretendida, enquanto os restantes sinais da mesma fre-
quência, mas provenientes de outras direcções são rejeitados (possuem coeficientes
diferentes).
8
Os coeficientes são calculados de modo iterativo, através de algoritmos complexos como
o Least Mean Squares (LMS), Sample Matrix Inversion (SMI) e Recursive Least Squares (RLS).
O RLS é normalmente preferível devido às suas propriedades numéricas (estabilidade) e
rápida convergência. O algoritmo RLS procura encontrar um conjunto de coeficientes que
minimize a soma do erro quadrático. Considerando:
(2.1)
em que é a matriz que contém a informação observada com ruído, é a training sequence e
é o coeficiente a calcular de modo a minimizar o erro de cada vector. A aplicação do RLS
pode ser vista com o cálculo de
(2.2)
em que a obtenção de implica um problema de inversão matricial [18].
Os sistemas MIMO apresentam múltiplas antenas no emissor (Ne) e no receptor (Nr). O
número de antenas não precisa de ser o mesmo no emissor e no receptor, no entanto, neste
estudo consideram-se números iguais de antenas. Os sistemas MIMO vêm acrescentar às
capacidades dos sistemas SMART a multiplexagem espacial. A multiplexagem espacial permite
melhorar a capacidade do canal, ao transmitir simultaneamente vários fluxos de dados parale-
los que são enviados pelas várias antenas como se verifica no exemplo da Figura 2.1.
Figura 2.1 – Multiplexagem do fluxo de dados num sistema MIMO com 4 antenas emissoras.
Contudo, a utilização da multiplexagem espacial com elevadas taxas de transferência,
torna os canais MIMO selectivos no que respeita à frequência. Para resolver este problema
surge a combinação da tecnologia OFDM com os sistemas MIMO, que transforma os canais
num conjunto de frequências planas, diminuindo a complexidade no receptor.
A tecnologia OFDM aplicada aos sistemas MIMO envolve Transformadas Rápidas de
Fourrier (Fast Fourrier Transform - FFT), de modo a tornar possível o processamento dos
Unidade de
MultiplexagemFluxo de Dados
...S8 S7 S6 S5 S4 S3 S2 S1
...S5 S1
...S6 S2
...S7 S3
...S8 S4
9
dados no domínio da frequência, e, cyclic prefix ou guard interval com o objectivo de remover a
interferência inter-simbólica (Intersymbol Interference - ISI) e a interferência inter-portadoras
(Intercarrier Interference - ICI) [9].
No emissor, os dados a transmitir passam primeiro por um processo prévio de modula-
ção, segue-se a codificação espaço-temporal, a FFT inversa e o cyclic prefix, após o que, os
dados são transmitidos pelas Ne antenas. No receptor é removido o cyclic prefix, efectuada a
FTT, realiza-se a desmultiplexagem espacial, através da estimação do canal, e por fim, a des-
modulação.
O diagrama de blocos do sistema é apresentado na Figura 2.2.
Figura 2.2 – Diagrama de blocos de um sistema de comunicações sem fios MIMO-OFDM. Fonte: Chang et al. 2009 [8].
O modelo do processo de transmissão pode ser descrito pela expressão:
(2.3)
em que representa a matriz complexa obtida no receptor, representa a matriz complexa da
portadora, representa a matriz transmitida através de uma modulação complexa e repre-
senta o ruído branco Gaussiano, também sob a forma complexa.
De modo a estimar os dados complexos transmitidos, a Eq. (2.3) pode ser explorada
como um problema de mínimos quadrados (Least Squares - LS). A solução para o problema de
LS pode ser obtida através de técnicas como Minimum Mean Square Error (MMSE) ou equali-
zação Zero Forcing (ZF). Qualquer uma destas técnicas exige inversões matriciais [8][10].
Geração
de Dados
Modulação
Estimação do canal
Recepção de
Dados
Desmodulação
.
.
.
.
.
.
h1,1
hNe,Nr
hNr,1
h1,Ne
x1(t)
xNe(t)
y1(t)
yNr(t)
Co
dific
açã
o
Esp
aço
-Te
mp
ora
l
De
sco
dific
açã
o
Te
mp
ora
l
IFFT/
CP
ReCP/
FFT
IFFT/
CP
ReCP/
FFT
NrNe
10
2.2 Métodos de Inversão Matricial
A inversão de matrizes é um problema frequente na matemática computacional, existin-
do por isso bastantes publicações relacionadas com o tema.
A inversa de uma matriz quadrada é representada por e verifica a condição:
, (2.4)
em que é a matriz identidade. O processo explícito de inversão de matrizes é um método
computacionalmente intensivo, principalmente quando a sua dimensão ultrapassa valores resi-
duais (sensivelmente para dimensões superiores a 4x4).
Para matrizes de pequenas dimensões são habitualmente utilizados métodos de aproxi-
mação analítica, como inversão directa por matriz adjunta, inversão por blocos ou inversão por
eliminação de Gauss-Jordan. Qualquer um dos métodos mencionados apresenta um cresci-
mento da complexidade computacional muito rápido, com o aumento da dimensão das
matrizes [3][11]. Uma análise mais detalhada destes métodos consta na secção 2.2.1.
Existem métodos estáveis de decomposição ou factorização que simplificam o proces-
samento computacional, mesmo quando a dimensão das matrizes aumenta, como é o caso da
decomposição LU, decomposição Cholesky e decomposição QR. A escolha do método,
depende das características das matrizes a inverter, contudo, a decomposição QR oferece uma
maior estabilidade e flexibilidade face às diferentes características das matrizes a processar,
inclusive a capacidade para factorizar matrizes , com [3][4]. Pelos motivos men-
cionados, estes métodos serão alvo de análise nos pontos que se seguem. A decomposição
QR apresenta ainda uma mais-valia, pois é um recurso habitual noutras transformações matri-
ciais podendo assim ser reutilizada, economizando na área de hardware [17].
2.2.1 Métodos de aproximação analíticos
Existem aproximações analíticas que permitem o cálculo expedito da inversa de uma
matriz, quando as dimensões das matrizes são relativamente pequenas (inferiores a 4x4). De
seguida serão explorados os métodos de inversão directa por matriz adjunta, inversão por blo-
cos e inversão por eliminação de Gauss-Jordan.
A inversa de uma matriz pode ser obtida com o auxílio da matriz adjunta e do determi-
nante da matriz dada.
(2.5)
onde denota a transposta da matriz dos cofactores de . A matriz inversa apresenta-se
na Eq. (2.6).
11
(2.6)
Por exemplo, para uma matriz de ordem 2, a matriz inversa é obtida do seguinte modo:
(2.7)
Uma alternativa ao cálculo da inversa de uma matriz, é a decomposição da matriz dada
em quatro submatrizes/blocos mais pequenos e calcular a inversa baseada nesses blocos.
Este método pode ser utilizado como complemento a outros métodos. Por exemplo, para uma
matriz de ordem 4:
(2.8)
onde denotam as submatrizes de , todas elas de ordem 2. As operações
baseiam-se na inversa de duas matrizes de ordem 2 e outras operações matriciais básicas
também de ordem 2 [11].
Outro método de obter a inversa de uma matriz é recorrer à eliminação de Gauss-
Jordan. Este método é uma extensão do algoritmo de eliminação Gaussiana, onde, em cada
passo do algoritmo o elemento pivot é forçado a 1 e os restantes elementos da mesma coluna
são forçados a 0. Dada uma matriz quadrada de ordem n e a matriz identidade também de
ordem n, define-se uma matriz de dimensão , que resulta da concatenação da matriz
dada com a matriz identidade. O processo baseia-se na transformação da matriz, de acordo
com uma sequência de operações elementares sobre as duas matrizes, até o lado esquerdo da
matriz se tornar na matriz identidade e por conseguinte, o lado direito torna-se na matriz
[19].
(2.9)
12
2.2.2 Decomposição LU e decomposição Cholesky
Se uma matriz A for quadrada e todas as suas submatrizes principais forem não-
singulares, a matriz pode ser decomposta no produto de uma matriz triangular inferior (Lower -
L) por uma matriz triangular superior (Upper - U):
(2.10)
A inversão da matriz ( ), através da decomposição LU, apresenta-se como:
(2.11)
O método envolve quatro processos distintos. O primeiro processo é o que exige maior
complexidade computacional e consiste na decomposição da matriz dada, segue-se a inversão
das matrizes triangulares inferior e superior, e por fim, a multiplicação das duas matrizes (os
três últimos processos são relativamente simples, devido à estrutura triangular das matrizes)
[3][4].
A decomposição Cholesky, à semelhança da decomposição LU, tem também como
requisito matrizes quadradas, neste caso simétricas positivas definidas. Este método decom-
põe a matriz dada numa matriz triangular inferior com a diagonal positiva ( ), resultando na
expressão:
, (2.12)
onde é a transposta da matriz . A inversão da matriz é expressa na Eq. (2.13):
(2.13)
Este método divide-se também em quatro processos, começando pela decomposição da
matriz dada numa matriz triangular inferior, passando pela inversão das matrizes triangulares e
terminando com a multiplicação das matrizes triangulares invertidas [3][4].
2.2.3 Decomposição QR
A decomposição QR é uma operação elementar estável, que pode ser aplicada a qual-
quer tipo de matriz [3] e consiste na factorização de uma matriz dada em duas matrizes, uma
matriz ortogonal e uma matriz triangular superior. Assim a decomposição QR de uma matriz
é apresentada como o produto de uma matriz ortogonal ( ) por uma matriz triangular superior
( ), ficando:
(2.14)
13
Note-se que, é uma matriz ortogonal e portanto verifica:
e
(2.15)
A solução da inversão da matriz é dada por:
(2.16)
Generalizando de para , a matriz diz-se unitária com as características
evidenciadas a seguir:
e
(2.17)
onde denota a matriz transconjugada ou, da literatura Inglesa, “hermitian transpose” de . A
solução da inversão da matriz no domínio complexo vem da Eq. (2.16) sendo apresentada
como:
(2.18)
O método apresenta três fases distintas, sendo a primeira a que apresenta maior com-
plexidade computacional (decomposição QR), a segunda fase consiste na inversão da matriz
triangular superior e a última fase passa pela multiplicação da matriz triangular invertida pela
matriz unitária transconjugada. A inversão da matriz é um processo relativamente simples
devido à sua estrutura triangular, sendo calculado através de substituição inversa ou da litera-
tura inglesa “back-substitutuion” com recurso à matriz identidade:
(2.19)
A matriz não requer qualquer cálculo, exige apenas manipulação de memória [4]. Na
Figura 2.3 está descrito o fluxograma de operações do método de inversão com recurso à
decomposição QR.
Figura 2.3 – Fases constituintes da inversão matricial com recurso à decomposição QR. Fonte: Irturk et al., 2009 [3].
Decomposição
QR
Inversão da Matriz
RR-1
= I
Multiplicação
Matricial (R-1
QT)
R-1
Q
I
R
A A-1
14
Existem três métodos distintos de decomposição QR: Ortogonalização de Gram-Schmidt
(Classical Gram-Schmidt – CGS), Rotações de Givens (Givens Rotations – GR) e Reflexões
Householder (Householder Reflections - HR). Posteriormente foi desenvolvido outro método de
ortogonalização baseado no CGS, que se destaca pela estabilidade e precisão numéricas,
denominado Gram-Schmidt Modificado (Modified Gram-Schmidt – MGS).
Tendo em conta a elevada complexidade do método baseado nas reflexões Householder
(relativamente aos restantes métodos de decomposição QR) [8], recentemente o MGS e o GR,
métodos numericamente equivalentes têm recebido especial atenção para a implementação
em hardware reconfigurável, apresentando alto desempenho, estabilidade, precisão e conside-
rável redução de área de hardware ocupada. Contudo, no que diz respeito ao número de
operações exigidas por cada um destes métodos, para matrizes de dimensão , destaca-
se o MGS com uma complexidade de face ao GR com complexidade . Mes-
mo para , o MGS requer menos operações que o GR.
A análise à complexidade dos algoritmos é ilustrada na Figura 2.4 e na Figura 2.5.
Figura 2.4 – Comparação entre o número de operações exigido pelo MGS e GR para m, n Є [1;8]: análise tridimensional em função de m e n.
15
a) b)
Figura 2.5 – Comparação entre o número de operações exigido pelo MGS e GR para m, n Є [1;8]: análise 2D para m ≥ 2n/3, fazendo variar n em função de m (a) e fazendo variar m em função de n (b).
Como se pode verificar na Figura 2.5, para o MGS é sempre inferior ao GR, no
que diz respeito à quantidade de operações exigidas. Para matrizes , temos que o número
de operações do . Este facto proporciona, ao MGS, uma vantagem significativa,
quer ao nível da área de hardware, quer ao nível do tempo total de execução [8][10].
2.3 Implementação em Hardware de Algoritmos de Inversão Matricial
Singh et al. 2007 [10] implementaram a decomposição QR baseada no MGS, numa
arquitectura VLSI, para inversão de matrizes reais de ordem 4. Chang et al. 2009 [8] implemen-
taram, no âmbito dos sistemas MIMO, a decomposição QR baseada no MGS numa
arquitectura VLSI, para inversão de matrizes reais de ordem 4. Irturk et al. 2008 [7] desenvolve-
ram uma ferramenta em MATLAB que permite analisar o desempenho e complexidade dos
algoritmos de decomposição QR, LU e Cholesky e implementaram os mesmos algoritmos em
FPGA Virtex-4. Irturk et al. 2009 [3] implementaram em FPGA a decomposição QR baseada no
MGS, para inversão de matrizes reais de ordem 4, com palavras binárias de diferentes dimen-
sões. Karkooti e Cavallaro 2006 [4] implementaram em FPGA a decomposição QR com
recurso ao RLS baseada no algoritmo GR, para inversão de matrizes complexas de ordem 4.
Eilert et al. 2007 [11] implementaram em FPGA e em ASIC, métodos de inversão matricial
directos, por matriz adjunta e por partição em blocos, para matrizes reais de ordem 4, tendo
como alvo sistemas MIMO. Luethi et al. 2008 [16] efectuaram uma comparação entre os méto-
0 2 4 6 80
100
200
300
400
500
600
700
n(m)
Nº
de O
pera
ções
Modified Gram-Schmidt
Givens Rotations
0 2 4 6 80
100
200
300
400
500
600
700
m(n)
Nº
de O
pera
ções
Modified Gram-Schmidt
Givens Rotations
16
dos de decomposição QR baseados nos algoritmos Givens Rotations e Modified Gram-Shmidt,
para matrizes reais de ordem 4.
Relativamente aos requisitos de desempenho, verifica-se a necessidade de operações
de inversão matricial, para equalização de sinal nos sistemas MIMO-OFDM, em intervalos de
tempo da ordem de grandeza dos milissegundos [10][15].
A Tabela 2.1 resume os dados obtidos pelos autores, cujas implementações foram em
FPGAs, ao passo que a Tabela 2.2 resume as escolhas e resultados dos autores que optaram
por implementações em VLSI.
Tabela 2.1 – Decisões e resultados de implementação de métodos de inversão de matrizes de ordem 4 em FPGAs da família Virtex-4.
Irturk et al.
2009 [3]
Irturk et al.
2008 [7]
Karkooti e
Cavallaro
2006 [4]
Eilert et al.
2007 [11]
Algoritmo MGS QR LU Cholesky GR Matriz
Adjunta
Partição
em Blocos
Domínio Real Real Complexo Real
Aritmética Vírgula Fixa Vírgula Fixa Vírgula
Flutuante
Vírgula flutuante
Nº bits 19 26 32 20 20 16 20
Tempo total
de execução
(µs)
5,56 7,14 9,09 4,34 3,12 3,33 7,69 0,96 1,20
Slices 2415 4656 5640 11644 9117 1561 1716
DSPs 12 12 22 0 8
BRAMs 1 1 9 NR1
1 Não referido na bibliografia.
17
Tabela 2.2 - Decisões e resultados de implementação de métodos de inversão de matrizes de ordem 4 em tecnologia 0.18µm CMOS desenvolvidos em VLSI.
Singh et al.
2007 [10]
Chang et al.
2009 [8]
Luethi et al.
2008 [16]
Eilert et al.
2007 [11]
Algoritmo MGS MGS MGS GR Matriz
Adjunta
Partição
em Blocos
Domínio Real Real Complexo Real
Aritmética Vírgula Fixa Vírgula Fixa Vírgula Flutuante Vírgula Flutuante
Nº bits 16 14 20 13 16 20
Tempo total de
execução (µs)
0,21 0,087 0,64 0,48 0,18 0,18
Área (Kgate) 72 55,3 61,8 48,7 23 43
Da análise às tabelas retira-se que apenas Karkooti e Cavallaro 2006 [4] e Luethi et al.
2008 [16] desenvolveram processadores com suporte para matrizes complexas. Verifica-se que
o MGS é algoritmo adoptado por mais autores, o que demonstra algum consenso na escolha
do algoritmo que melhor satisfaz os requisitos, mesmo para matrizes de ordem 4. Um aspecto
interessante é o reduzido tempo total de execução e o reduzido consumo de recursos (em
FPGA e em VLSI) obtido pelos métodos de aproximação analíticos, apresentados por Eilert et
al. 2007 [11]. Estes resultados devem-se sobretudo à reduzida ordem das matrizes, pois como
foi referido na secção 2.2, estes métodos atingem uma complexidade computacional superior
aos métodos de decomposição, para matrizes de maiores dimensões. Os tempos de execução
relativos às implementações em ASIC são em média quinze vezes inferiores aos tempos de
execução relativos às implementações em FPGA, o que é expectável dada a natureza dos
dispositivos (sendo a FPGA direccionada essencialmente para a prototipagem).
2.4 Conclusão
Neste capítulo foi evidenciada a necessidade de algoritmos de inversão matricial nas
tecnologias de comunicações sem fios actuais, nomeadamente nos sistemas multi-antena
baseados na tecnologia MIMO-OFDM.
Dos algoritmos de inversão matricial existentes, destaca-se o Modified Gram-Schmidt
com maior estabilidade e capacidade de paralelismo e menor complexidade relativa à quanti-
dade de operações. Verificou-se ainda que os métodos de aproximação analíticos
(decomposição em blocos e inversão por matriz adjunta) apresentam resultados de área de
hardware e desempenho superiores aos restantes métodos para matrizes de ordem até 4, con-
tudo, tendem a perder para os restantes métodos com o aumento da dimensão das matrizes.
18
Dos trabalhos analisados, os que mais influenciaram o trabalho desenvolvido foram os
de Irturk et al. 2009 [3], Chang et al. 2009 [8] e Edman 2006 [17]. Para além de apresentarem
abordagens eficientes à implementação de métodos de inversão matricial em hardware permiti-
ram compreender melhor a necessidade e o objectivo da inversão matricial nos sistemas multi-
antena baseados na tecnologia MIMO-OFDM.
19
3 Ortogonalização Gram-Schmidt e Representação
Aritmética
Neste capítulo é primeiramente efectuada uma abordagem teórica ao método de ortogo-
nalização Gram-Schmidt. Posteriormente é analisado o algoritmo MGS com ênfase para as
alterações face ao CGS e consequentes melhorias. Por fim é realizada uma revisão às repre-
sentações aritméticas existentes e as opções tomadas neste trabalho, nessa área.
3.1 Inversão de matrizes com recurso à decomposição QR utilizando a
ortogonalização Gram-Schmidt
A ortogonalização Gram-Schmidt é um método directo de determinar as matrizes e .
Considerem-se as seguintes notações matriciais em vector coluna da matriz genérica de
dimensões :
(3.1)
O método consiste num processo iterativo para obtenção de uma base ortogonal
de um subespaço vectorial a partir da base de
(3.2)
onde designa a projecção ortogonal de sobre o vector no subespaço vectorial
de
(3.3)
sendo que denota o produto interno de x com y.
Para uma matriz com as colunas linearmente independentes, fazendo
, com podem reescrever-se as Eq. (3.2) como:
20
(3.4)
Estas igualdades podem ser resumidas à igualdade matricial , onde
(3.5)
Assim, ficamos com:
(3.6)
Fazendo
(3.7)
obtemos a forma reduzida . Onde é uma matriz e tem as colunas ortonormadas
e é uma matriz quadrada de ordem n, triangular superior e não singular [12].
No final, os vectores ortogonais de obtidos através da ortogonalização de Gram-
Schmidt podem ser escritos em função dos seguintes projectores [13]:
(3.8)
onde é um projector ortogonal com as seguintes características:
(3.9)
com
(3.10)
e satisfaz os seguintes requisitos:
é ortogonal a ;
cada pertence à base ;
cada
21
O algoritmo CGS é construído com base na Eq. (3.8) e permite uma implementação de
memória eficiente, devido à grande capacidade de paralelismo e à capacidade da matriz
reescrever as colunas da matriz original . Segue-se, numa forma simplificada, a expressão
que permite obter cada coluna da matriz [14]:
(3.11)
onde
(3.12)
e
(3.13)
Na Figura 3.1 pode visualizar-se o método de ortogonalização.
Figura 3.1 – Visualização do método de ortogonalização Gram-Schmidt. Fonte: Irturk, 2007 [18].
22
Contudo, na presença de erros de arredondamento (erro entre a aproximação calculada
computacionalmente e o respectivo valor exacto/real), durante a computação com precisão
fixa, não é possível garantir a ortogonalidade de , sendo esta por vezes completamente per-
dida. Tendo em conta a instabilidade da ortogonalidade e por conseguinte, da precisão, a
ortogonalização de Gram-Schmidt não é habitualmente aplicada à decomposição QR na sua
forma clássica, mas sim numa versão alterada denominada Modified Gram-Schmidt.
3.2 Inversão de matrizes com o algoritmo Modified Gram-Schmidt
Aplicando pequenas alterações ao algoritmo CGS, obtém-se o algoritmo MGS. O MGS
ultrapassa as limitações do CGS, substituindo pelo intermediário nas combinações linea-
res de , durante processo de cálculo dos vectores ortogonais. Assim, o MGS torna-se mais
estável (menos susceptível a erros de arredondamento) [10][14]. As alterações evidenciam-se
a seguir na Eq. (3.18).
O projector da Eq. (3.9) pode ser reescrito como:
(3.14)
onde
(3.15)
Assim, quando no CGS, um vector ortogonal , é calculado segundo a Eq. (3.16)
(3.16)
no MGS passa a ser calculado do seguinte modo:
(3.17)
Finalmente temos
(3.18)
Os algoritmos de decomposição QR baseados no CGS e no MGS encontram-se na Figura 3.2.
23
a) b)
Figura 3.2 – Algoritmos de decomposição QR de matrizes quadradas de ordem n: CGS(a) e MGS(b). Fonte: Persson, 2007 [13].
Cada decomposição começa com o armazenamento da matriz numa matriz temporária
(inst.: 1). Cada elemento da diagonal da matriz é obtido através da norma euclidiana das
colunas da matriz (inst.: 2)
(3.19)
onde representa a coluna i da matriz temporária obtida após cada iteração k, uma vez que
a matriz é dinâmica e portanto actualizada a cada iteração do ciclo principal.
A matriz resulta da divisão das colunas da matriz pela respectiva norma euclidiana
(inst.: 3)
(3.20)
Os elementos com são obtidos através do produto interno das colunas pelas
colunas da matriz temporária (inst.: 4)
(3.21)
(1)
(2)
(3)
(4)
(5)
24
Por fim, em (inst.: 5), as colunas da matriz temporária são actualizadas.
,
,
(3.22)
Cada iteração i, do ciclo principal, corresponde à obtenção de:
uma coluna ;
uma linha ;
colunas de .
Transpondo o algoritmo MGS para o domínio complexo , podem ter-se em considera-
ção certas propriedades das matrizes complexas, nomeadamente, o facto de a matriz ser
unitária, permitindo algumas alterações no algoritmo, que contribuem significativamente para a
sua simplificação. Essas alterações estão assinaladas na Figura 3.3, onde é efectuada uma
comparação com o algoritmo da Figura 3.2 b).
a) b)
Figura 3.3 – Comparação entre o algoritmo MGS genérico (a) e a respectiva adaptação ao domínio com-plexo (b).
O maior impacto das alterações do algoritmo, verifica-se na (inst.: 1), uma vez que da
operação vai resultar um valor com componente imaginária nula e componente real positi-
va, e por conseguinte, as operações de raiz quadrada e recíproco realizar-se-ão no domínio
real ( ). Este facto vai reduzir o número de operações, a área de hardware e consequentemen-
te, o erro propagado. No final, a multiplicação matricial, apresenta o formato expresso na Eq.
(2.18).
(1)
(2)
25
A inversão da matriz triangular superior é realizada por substituição inversa. O algorit-
mo de inversão da matriz encontra-se na Figura 3.4.
Figura 3.4 – Algoritmo de inversão de uma matriz triangular superior R. Fonte: Irturk et al. 2009 [3].
O cálculo da inversão da matriz é efectuado coluna-a-coluna. A matriz inversa ( )
vai passar a ser identificada como matriz . Os elementos da diagonal da matriz invertida ( )
são calculados na (inst.: 1), e resultam do recíproco dos elementos da diagonal da matriz origi-
nal ( ). Os restantes elementos da matriz são obtidos através de um processo iterativo de
multiplicação e adição (inst.: 2), com posterior negação e multiplicação por na (inst.: 3). Por
fim, é realizada a multiplicação matricial , ou de acordo com as alterações identificadas na
Figura 3.3 b, .
3.3 Aritmética de vírgula fixa
Os algoritmos considerados requerem processos computacionais complexos e numeri-
camente exigentes. Soluções eficientes e flexíveis são, por isso, cada vez mais importantes.
Por outro lado, o baixo consumo de energia e a área de hardware ocupada são também carac-
terísticas a ter em conta, quer nos dispositivos emissores, quer nos dispositivos receptores. A
implementação da aritmética de vírgula fixa satisfaz ambos os requisitos.
Existem dois tipos de representação numérica em notação binária: representação em
vírgula fixa e em vírgula flutuante. A representação em vírgula fixa permite definir números num
intervalo limitado e reduzido (tão mais reduzido quanto menor for o número de bits disponível),
mas com uma precisão absoluta constante. A aritmética de vírgula flutuante recorre a um factor
de escala exponencial, o que torna possível a representação de números em intervalos muito
superiores, contudo, a precisão da sua aritmética é relativa, pois diminui com o aumento do
intervalo a suportar. Para representação de intervalos conhecidos, considerando igual número
de bits, a utilização de vírgula flutuante torna-se dispendiosa, no que diz respeito ao hardware,
o que conduz a projectos pouco eficientes, particularmente nas implementações em FPGA. A
implementação de vírgula fixa, com um conhecimento prévio dos intervalos de valores a supor-
(1)
(2)
(3)
26
tar, baseado num cuidadoso estudo de overflow, permite projectos de hardware estáveis e
eficientes [15].
Neste projecto, a representação adoptada em vírgula fixa é o complemento para dois,
pois apresenta a vantagem de possuir uma representação única para o número zero e dispõe
das mesmas regras para as operações de adição e subtracção. Nesta representação, a palavra
binária é constituída por um bit de sinal, uma parte inteira e uma parte fraccionária, como ilustra
a Figura 3.5.
Figura 3.5 – Representação de uma palavra binária com vírgula fixa e complemento para 2.
A aritmética de vírgula fixa pode ser representada como , onde representa o
número de bits da palavra binária e representa o número de bits reservados para a parte
fraccionária. Por exemplo, caracteriza uma palavra binária com 14 bits reservados
para a parte fraccionária, 5 bits reservados para a parte inteira e 1 bit de sinal.
O intervalo a que um número racional está confinado na representação binária é:
,
(3.23)
Para obter um número racional proveniente da representação em virgula fixa basta
fazer:
, (3.24)
onde i representa o índice do bit e representa o respectivo estado (0 ou 1).
No cálculo computacional, mais especificamente, no projecto desenvolvido, as opera-
ções aritméticas a realizar passam pela adição, subtracção, multiplicação, divisão e raiz
quadrada. As operações de adição e subtracção são consideravelmente simples. A incorpora-
ção de blocos DSP nas FPGAs actuais conduziu também à simplificação das operações de
multiplicação. Seguem-se algumas propriedades elementares da aritmética de vírgula fixa para
operações de adição e multiplicação:
A posição da vírgula, nas operações de adição e subtracção tem
que ser a mesma e é salvaguardada;
Bit de
SinalBits Reservados à parte Fraccionária
Bits Reservados à parte
Inteira
27
O número de bits a reservar para uma operação de adição ou subtracção
é ;
Uma operação de multiplicação resulta numa palavra binária
com o formato .
No entanto, as operações de divisão e raiz quadrada são complexas e susceptíveis de
erros de precisão significativos, uma vez que afectam consideravelmente o tamanho das pala-
vras binárias resultantes (e/ou a posição da virgula), conferindo dinamismo ao processo, com a
agravante de lidar com valores complexos [3][16]. A análise e estratégia de implementação
destas operações constam no capítulo 5.
A quantidade de operações aumenta com a dimensão das matrizes a inverter, e por con-
sequência, o erro propagado. A aritmética de vírgula fixa reduz assim a precisão, acarretando
erros de overflow e erros de truncamento. Os erros de overflow surgem quando os bits disponí-
veis para o resultado de uma operação são insuficientes (erro associado á dinâmica entre os
bits reservados ás partes inteira e fraccionária). Os erros de truncamento devem-se ao número
limitado de bits para a representação dos resultados.
Estes problemas devem ser analisados cuidadosamente, caso a caso, de modo a evitar
resultados incorrectos, no decorrer dos cálculos, que podem alterar por completo o resultado
final. Por este motivo, são imprescindíveis análises de erro, que tenham em consideração as
vulnerabilidades mencionadas.
Com o objectivo de minimizar erros de overflow e obter um maior controlo sob o tamanho
das palavras binárias a reservar, os valores de input são inicialmente normalizados. Este pro-
cesso de normalização consiste na divisão de todos os valores pelo maior número encontrado.
Assim, os dados de input são considerados no intervalo [-1,1].
De modo a obter um controlo constante sobre os intervalos, minimizando o risco de over-
flow, e maximizando a precisão, foram realizadas simulações em MATLAB para determinar os
máximos absolutos, em todas as fases do projecto, definindo assim a posição da vírgula nas
palavras binárias, ou por outras palavras, o número de bits fraccionários. Assim, a posição da
vírgula varia ao longo do projecto, de acordo com as diferentes circunstâncias. Esta análise
encontra-se no capítulo 4.
3.4 Conclusão
Neste capítulo foi efectuada uma análise ao processo de ortogonalização de Gram-
Schmidt no âmbito da decomposição QR e posteriormente efectuada uma análise à represen-
tação em vírgula fixa.
Verificou-se que a ortogonalização de Gram-Schmidt tem um comportamento instável,
que por vezes, conduz à imprecisão dos resultados, não sendo por isso habitualmente aplicada
à decomposição QR na sua versão original, mas sim numa versão modificada, dando origem
28
ao Modified Gram-Schidt. De seguida foi analisado o MGS e identificadas as operações consti-
tuintes. O algoritmo foi ainda transposto para o domínio complexo, considerando algumas
simplificações resultantes das propriedades da matriz .
Por fim, foram comparadas as formas de representação em vírgula fixa e vírgula flutuan-
te, em que se destacou a vírgula fixa, ao manter uma precisão absoluta constante, para
intervalos de valores limitados e conhecidos. Foram ainda identificadas as propriedades das
operações em vírgula fixa e os cuidados a ter na previsão de erros de overflow e truncamento.
29
4 Especificação e Optimização do MGS
Neste capítulo é descrita a solução adoptada para o problema proposto. Esta solução
baseia-se na aplicação do MGS e abarca dois aspectos fundamentais: modelação do problema
e optimização dos modelos. Inicialmente, o algoritmo será decomposto em fases genéricas,
onde são identificadas as operações elementares e as respectivas dependências. De seguida
será descrita, nos aspectos mais relevantes, a evolução que o projecto sofreu desde a versão
funcional até à versão optimizada, que apresentou melhores resultados na relação desempe-
nho/recursos. Por fim, serão apresentados os resultados das simulações realizadas em
MATLAB relativos à análise de erro de overflow, que sustentam o dimensionamento da versão
final do projecto.
4.1 Especificação do MGS para inversão de matrizes complexas de
ordem 8
De modo a melhorar a compreensão no que respeita à quantidade de operações, res-
pectiva sequência e dependência de resultados, o algoritmo foi decomposto em três fases
principais e dez operações fundamentais designadas por , tendo em consi-
deração o alvo principal – matrizes complexas de ordem 8. Para matrizes de ordem inferior, a
estrutura mantém-se, verificando-se apenas uma redução na repetição de operações.
Na primeira fase é obtida a matriz ortogonal , a matriz triangular , e, as matrizes
dinâmicas temporárias . Na segunda fase é calculada a matriz triangular ,
através da inversão da matriz ( ). Na terceira e última fase é obtida a matriz invertida
, através da multiplicação da matriz pela matriz .
4.1.1 Fase 1 – Cálculo das colunas da matriz Q (Qi), da diagonal da matriz R (Rii) e das
colunas das matrizes U
Determinar colunas
Cálculo de :
– Aplicação da multiplicação vectorial ao cálculo do produto interno:
(4.1)
( , onde representa a matriz a inverter)
30
– Aplicação da raiz quadrada, que resulta nos elementos da diagonal :
(4.2)
– Aplicação do recíproco:
(4.3)
– Cálculo de através da multiplicação vectorial aplicada ao produto por escalar:
(…)
(4.4)
Determinar linhas (parâmetros )
– Aplicação da multiplicação vectorial ao cálculo do produto interno:
(…)
(4.5)
Determinar colunas da matriz temporária
Geração de parâmetros temporários através da multiplicação vectorial aplicada ao pro-
duto por escalar ( ), seguida da operação de subtracção , que gera os valores
actualizados de :
Coluna
(apenas para )
(…)
Coluna
(…)
(…) Coluna
(…)
31
(4.6)
A Figura 4.1 ilustra os principais passos do processamento da fase 1.
Figura 4.1 – Evolução da fase 1, relativamente à manipulação e cálculo das matrizes U, Q e R.
4.1.2 Fase 2 – Cálculo da matriz W
Determinar diagonal ( )
– Aplicação do recíproco:
(4.7)
Determinar linhas ( )
Aplicação da Multiplicação vectorial para o cálculo do produto interno ( ), gerando um
valor temporário, seguido pelo produto por escalar , que gera elementos da matriz :
A U1
Q1
R1
Q8
R8
Q2
R2
Q8
R8
Q1
R1
U2
U3
U1
A
Iteração i=1 Iteração i=2 Iteração i=8
32
Linha
(…)
(4.8)
Linha
(…)
(4.9)
(…) Linha (elemento )
(4.10)
4.1.3 Fase 3 – Cálculo da matriz B
A terceira fase do processo aplica a multiplicação vectorial ao cálculo do produto interno
( ), para a obtenção do resultado final ( ).
Coluna
(…)
Coluna
(…)
(…) Coluna
(…)
(4.11)
33
4.2 Modelo e optimização
O desenvolvimento do projecto passou por um processo contínuo de optimização, onde
foram identificados três modelos arquitectónicos distintos.
O primeiro modelo desenvolvido teve uma natureza essencialmente funcional e foi defi-
nido com palavras binárias de 32 bits de estrutura fixa . O modelo baseou-se num
elevado nível de partilha de recursos, no que diz respeito a unidades de dados. A partilha de
recursos tem dois inconvenientes: baixa escalabilidade da arquitectura e incapacidade de
implementação de pipeline. Apesar da precisão obtida com a utilização de 32 bit, a dimensão
das palavras binárias apresentava também dois problemas: espaço excessivo em memória,
necessário para alocar os resultados temporários e elevado número de DSPs exigidos nos
processos de multiplicação. O armazenamento de dados foi implementado com blocos RAM de
36Kb de duplo porto. Este modelo foi desenvolvido sem análise prévia de overflow e segue a
sequência de operações identificada na secção 4.1. Na Figura 4.2 encontram-se ilustrados os
principais blocos e ligações da unidade de dados da arquitectura do modelo funcional/modelo
1.
Figura 4.2 – Blocos e ligações principais da unidade de dados da arquitectura do modelo funcional.
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
X
7 X
8
X
6
X
5
X
4
X
3
X
2
X
1
BRAMs X
(8X8 U e Q)
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
Y
7 Y
8
Y
6
Y
5
Y
4
Y
3
Y
2
Y
1
BRAMs Y
(8X8 Q e W)
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
Z
7 Z
8
Z
6
Z
5
Z
4
Z
3
Z
2
Z
1
BRAMs Z
(8X8 R e B)
Reciproco
Complexo
Reciproco
Real
x
1
Raíz Quadrada
Complexa
Raíz Quadrada
Real
x
SUBTRACTOR
VECTORIAL
UNIDADES DE
MULTIPLICAÇÃO
UNIDADES
DE SOMA
UNIDADES DE
SUBTRACÇÃO
REGISTOS
MULTIPLICADOR SIMPLES
(a1 +jb1)x(a2 +jb2)
MU
LT
IPL
ICA
DO
R V
EC
TO
RIA
L
(1 a
nd
ar m
ultip
lica
do
res +
4 a
nd
are
s s
om
ad
ore
s)
MU
X
Barramentos de
8 x 2 x 32 Bit
Barramentos de
2 x 32 Bit
Registos
Registos
16
MU
Xs
16
MU
Xs
34
Como se pode verificar na Figura 12, todas as sub-unidades de processamento de
dados (multiplicador vectorial, multiplicador simples, subtractor vectorial, raiz quadrada e reci-
proco) partilham os recursos entre si. Os barramentos simples contêm 64 bits (32 bits para a
parte real e 32 bits para a parte imaginária). Os barramentos em negrito contêm 8x64 bits (vec-
tores correspondentes a linhas ou colunas das matrizes respectivas, com 64 bits por elemento).
Para armazenamento de dados, no total foram utilizados 24 BRAMs 36Kb.
Considerando as FPGAs com tecnologia igual ou superior à disponibilizada pela família
Virtex-5 [23], os DSPs (DSP48E) apresentam uma estrutura rectangular com capacidade para
a multiplicação de 25 por 18 bits, ou mesmo, 26 por 19 bits com recurso a LUTs. Deste modo,
cada multiplicador de 32 por 32 bits consumia 4 DSPs.
Considerando o modelo desenvolvido, respeitando apenas as dependências de dados e
os acessos a memória, foi efectuada para referência, uma minoração do número total de ciclos
de relógio, que resultou em 342 como o número mínimo de ciclos de relógio, necessário para a
conclusão do processamento.
Posteriormente, tendo em conta a quantidade de BRAMs e DSPs dispendidos e o
throughput do primeiro modelo, foi desenvolvido um segundo modelo que utilizou palavras
binárias de diferentes dimensões e com posição variável da vírgula. Para tal foi efectuada uma
análise em MATLAB, de modo a minimizar o erro de overflow e maximizar a precisão. Este
modelo teve em vista a utilização de um único DSP por multiplicador, o que conduziu à redução
do número de blocos RAM. Assim, passaram a ser utilizadas palavras de 18 e 26 bits para
alocar os parâmetros das matrizes nos blocos RAM de 36Kb (26 bits para os parâmetros da
matriz , visto ser a matriz envolvida no maior número de operações e 18 bits para os parâme-
tros das matrizes restantes). Tendo em conta a utilização intensiva do multiplicador vectorial e
respectiva latência (7 ciclos de relógio), este foi modificado de modo a tornar possível o seu
uso em pipeline. Para minimizar o caminho crítico, foi ainda implementado um andar de pipeli-
ne nos DSPs. O multiplicador simples foi também utilizado em pipeline. Foram ainda eliminadas
redundâncias como o recálculo dos valores , nas fases 1 e 2 ( ), que eliminou 8 opera-
ções de recíproco de complexos. De modo a maximizar o paralelismo, a fase 2 do algoritmo foi
encadeada na sequência da fase 1, reduzindo substancialmente o número total de ciclos de
relógio (os dados constam na Tabela 4.1).
A Figura 4.3 regista as alterações da arquitectura do primeiro para o segundo modelo.
35
Figura 4.3 – Blocos e ligações principais da unidade de dados da arquitectura do modelo 2.
No diagrama de blocos verifica-se a redução das BRAMs utilizados, assim como a redu-
ção do número de bits das palavras binárias. Identificam-se os 7 andares do pipeline no
multiplicador vectorial e 3 andares no multiplicador simples. Deixa de existir partilha de recur-
sos entre as diferentes unidades de dados. O número de bits indicado nos barramentos da
Figura 4.3 refere-se aos bits por palavra reservados para cada componente (real/imaginário) de
cada parâmetro na forma .
O modelo final (modelo 3) resultou de algumas alterações subtis, mas significativas,
baseadas na aplicação da transconjugada, referidas na secção 3.2 e visíveis na Figura 3.3 b.
Estas alterações têm como principal consequência a transformação das unidades de raiz qua-
drada e recíproco complexas em operações no domínio real afectando assim e .
Indirectamente, são também afectadas as operações , e . Outra modificação verifi-
cou-se na implementação de registos à saída de alguns sinais de controlo, de modo a
minimizar os atrasos das ligações aos blocos RAM. Na Figura 4.4 encontra-se representado o
diagrama de blocos e as ligações principais da arquitectura da unidade de dados que constitui
o modelo final do projecto. No capítulo 5 será efectuada uma análise detalhada à arquitectura
implementada.
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
X
7 X
8
X
6
X
5
X
4
X
3
X
2
X
1
BRAMs X
(8X8 U e Q)
BRAM
BRAM
BRAM
BRAM
Y
4
Y
3
Y
2
Y
1
BRAMs Y
(8X8 Q e W)
BRAM
BRAM
BRAM
BRAM
Z
4
Z
3
Z
2
Z
1
BRAMs Z
(8X8 R e B)
Reciproco
Complexo
Reciproco
Real
x
1
Raíz Quadrada
Complexa
Raíz Quadrada
Real
x
SUBTRACTOR
VECTORIAL
16
MU
Xs
MULTIPLICADOR SIMPLES
(a1 +jb1) x (a2 +jb2)
MU
LT
IPL
ICA
DO
R V
EC
TO
RIA
L
(1 a
nd
ar m
ultip
lica
do
res +
4 a
nd
are
s s
om
ad
ore
s)
1 2 3 4 5 6 7
32 32 32 32
36 36
18
18 18
18
18
18
18
26
26
19
19
18
18
18
26
26
18
1
26
Barramentos de
8 x 2 palavras
Barramentos de
2 palavras
26
16
MU
Xs
2
3
36
Figura 4.4 – Blocos e ligações principais da unidade de dados da arquitectura do modelo final.
Em consequência das alterações mencionadas no modelo 3, foram efectuadas as
seguintes modificações ao nível das operações:
– Aplicação da multiplicação vectorial ao cálculo do produto interno, com o conjuga-
do de um dos vectores:
(4.12)
– Aplicação da raiz quadrada real, que resulta nos elementos da diagonal :
(4.13)
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
X
7 X
8
X
6
X
5
X
4
X
3
X
2
X
1
BRAMs X
(8X8 U e Q)
BRAM
BRAM
BRAM
BRAM
Y
4
Y
3
Y
2
Y
1
BRAMs Y
(8X8 Q e W)
BRAM
BRAM
BRAM
BRAM
Z
4
Z
3
Z
2
Z
1
BRAMs Z
(8X8 R e B)
Reciproco
Real
x
1
Raíz Quadrada
Real
x
SUBTRACTOR
VECTORIAL
16
MU
Xs
MU
LT
IPL
ICA
DO
R V
EC
TO
RIA
L
(1 a
nd
ar m
ultip
lica
do
res +
4 a
nd
are
s s
om
ad
ore
s)
32
18
18 18
18
18
18
18
26
26
19
19
18
18
18
26
26
18
26
Barramentos de
8 x 2 palavras
Barramentos de
2 palavras
26
16
MU
Xs
32
Conjugação da Transposta nas OP1,6,10
MULTIPLICADOR SIMPLES
(a +jb) x c
1
2
3
1 2 3 4 5 6 7
37
– Aplicação do recíproco real:
(4.14)
– Geração de parâmetros temporários através da multiplicação vectorial aplicada ao
produto por escalar conjugado:
(4.15)
– Aplicação da multiplicação vectorial ao cálculo do produto interno, para a obten-
ção do resultado final ( ):
(4.16)
A Tabela 4.1 resume os principais aspectos dos três modelos desenvolvidos.
Tabela 4.1 – Comparação entre os resultados obtidos dos três modelos desenvolvidos.
Modelo Flip-Flops LUTs DSP48Es BRAMs Ciclos de
relógio
Caminho crítico
(ns)
1 1311 7576 130 27 1077 22,231
2 6464 9332 47 19 571 7,682
3 5776 8748 36 19 485 6,155
Os valores constantes da Tabela 4.1 foram obtidos nas mesmas condições, para imple-
mentação numa FPGA Virtex-5 XC5VLX330T [23]. Como se pode verificar pela análise da
tabela, a principal evolução está presente na quantidade de DSPs dispendida e consequente-
mente redução do caminho crítico. Graças à implementação de pipeline, o número de ciclos de
relógio necessários para inverter uma matriz complexa de ordem 8 diminuiu também para
menos de metade.
38
4.3 Análise de Erro
No âmbito do dimensionamento das palavras binárias, de modo a minimizar o risco de
overflow e maximizar a precisão dos resultados foram realizadas simulações em MATLAB [26],
com o objectivo de avaliar os resultados das operações elementares mencionadas na secção
4.1 e escolher a dimensão mais adequada para as palavras binárias. Nesta fase, a simulação
em MATLAB foi baseada no modelo 3, mas com vírgula flutuante de precisão dupla (definida
por omissão no MATLAB). Estes ensaios tiveram um universo de 5000 matrizes complexas de
ordem 8. Seguem-se as tabelas com a distribuição dos valores máximos absolutos, obtidos
para o resultado das operações, no universo total e por ensaio.
Tabela 4.2 – Distribuição dos valores máximos obtidos para o resultado das 10 operações e respectivo número de bits necessário para a representação da parte inteira, no universo de 5000 ensaios.
Intervalo <0.5 ]0.5, 1[ ]1, 2[ ]2, 4[ ]4, 8[ ]8, 16[ ]16, 32[ ]32, 64[ ]64, 128[ >128
Bits parte
inteira - 0 1 2 3 4 5 6 7 +7
- 13877 13761 12269 93 0
- 27448 12552 0
- 38204 1367 315 88 21 3 2 0
177520 16948 0
- 139951 49 0
317778 56946 325 0
364904 503277 41370 0
- 139072 867 60 1 0
- 132769 5055 1657 413 87 13 6 0
- 309012 8326 2185 429 47 1 0
A Tabela 4.2 apresenta a quantidade de resultados de cada operação ( ) incluídas no
intervalo . Por sua vez, cada intervalo , com e , diz respeito ao
acréscimo de 1 bit à esquerda da vírgula da palavra binária (bits para a representação da parte
inteira), necessária para a representação do valor do resultado.
39
Tabela 4.3 – Número de ensaios que apresenta a distribuição da Tabela 4.2.
Intervalo <0.5 ]0.5, 1[ ]1, 2[ ]2, 4[ ]4, 8[ ]8, 16[ ]16, 32[ ]32, 64[ ]64, 128[ >128
Bits parte
inteira - 0 1 2 3 4 5 6 7 +7
- 4993 4884 4926 91 0
- 5000 4944 0
- 5000 1321 312 88 21 3 2 0
5000 4911 0
- 5000 49 0
5000 4994 302 0
5000 5000 4980 0
- 5000 441 32 1 0
- 5000 2015 730 197 46 7 2 0
- 5000 4998 1124 297 79 10 1 0
A Tabela 4.3 surge no seguimento da Tabela 4.2 e visa reflectir a quantidade de ensaios
(cada ensaio corresponde a uma inversão matricial) que apresenta resultados nos intervalos
referidos. Esta abordagem tem como objectivo descriminar os dados, de modo a que um
ensaio isolado que apresente uma grande percentagem de resultados num determinado inter-
valo, não influencie, isoladamente, os resultados gerais.
Através da análise da Tabela 4.3 foi possível definir a estrutura das palavras binárias
(posição da vírgula) para as diferentes matrizes a salvaguardar nos BRAMs, de acordo com a
quantidade de bits necessários para a representação da parte inteira do resultado de cada
operação.
Considerando os resultados obtidos e tendo em conta a influência da quantidade de bits
representativos da parte fraccionária das palavras, na precisão dos resultados finais, foram
considerados três níveis de risco de erro de overflow, com os quais o projecto foi implementa-
do: 5%, 1% e 0,1%.
As tabelas que se seguem (Tabela 4.4 – Tabela 4.10) são constituídas com base na
informação da Tabela 4.3 e apresentam a relação entre o número de ensaios e a quantidade
de bits necessários para a representação da parte inteira, para concentrações inferiores a 5%
do número total de ensaios (250 ensaios), 1% do número total de ensaios (50 ensaios) e 0,1%
do número total de ensaios (5 ensaios). A separação/reunião das operações ( ) é realizada
com base no destino dos valores resultantes das mesmas (mesmos destinos implicam mesmo
formato das palavras binárias). Deste modo é obtido um melhor rendimento das palavras biná-
rias, introduzindo dinamismo na posição da vírgula das mesmas.
40
Tabela 4.4 – Avaliação do risco de erro de overflow à entrada da raiz quadrada.
5% 1% 0,1%
Nº Ensaios (5000) 91
Nº Bits - parte inteira 4
Tabela 4.5 – Avaliação do risco de erro de overflow para os elementos da matriz R.
5% 1% 0,1%
Nº Ensaios (5000) 4944
Nº Bits - parte inteira 2
Nº Ensaios (5000) 49
Nº Bits - parte inteira 2
Tabela 4.6 – Avaliação do risco de erro de overflow para os elementos da matriz W .
5% 1% 0,1%
Nº Ensaios (5000) 88 21 3
Nº Bits - parte inteira 3 4 5
Nº Ensaios (5000) 197 46 7
Nº Bits - parte inteira 3 4 5
Tabela 4.7 – Avaliação do risco de erro de overflow para os elementos da matriz Q.
5% 1% 0,1%
Nº Ensaios (5000) 4911
Nº Bits - parte inteira 0
Tabela 4.8 – Avaliação do risco de erro de overflow para os elementos da matriz .
5% 1% 0,1%
Nº Ensaios (5000) 302
Nº Bits - parte inteira 1
Nº Ensaios (5000) 4980
Nº Bits - parte inteira 1
41
Tabela 4.9 – Avaliação do risco de erro de overflow para à saída da OP8.
5% 1% 0,1%
Nº Ensaios
(5000)
441 32 1
Nº Bits - parte
inteira
2 3 4
Tabela 4.10 – Avaliação do risco de erro de overflow para os elementos da matriz B.
5% 1% 0,1%
Nº Ensaios (5000) 79 10 1
Nº Bits - parte inteira 3 4 5
Como se pode verificar da análise das tabelas, apenas os elementos constituintes das
matrizes e (Tabela 4.6 e Tabela 4.10) apresentam distribuições dos ensaios susceptíveis
da aplicação dos três níveis de risco de erro de overflow (5%, 1% e 0,1%). O número de bits
assinalado nessas tabelas é o que assegura um número de ensaios inferior à respectiva per-
centagem de risco.
As Tabela 4.4, Tabela 4.5, Tabela 4.7 e Tabela 4.8 apresentam a necessidade de igual
número de bits para os três níveis de risco de erro de overflow considerados. A Tabela 4.9
apresenta uma variação do número de bits para a parte inteira com o nível de risco de erro de
overflow, contudo, como designa resultados temporários, que não são armazenados em
BRAMs, dispensa truncamentos.
Em suma o formato das palavras binárias utilizadas para representar os elementos de
cada matriz é:
Tabela 4.11 – Formato das palavras binárias utilizadas na representação das matrizes.
Matriz 5% 1% 0,1%
U
Q
R
W
B
42
O tamanho das palavras binárias mencionado na Tabela 4.11 (26 para os elementos da
matriz U e 18 bits para os elementos das restantes matrizes) visa tirar o máximo rendimento
dos DSPs.
4.4 Conclusão
Neste capítulo foram primeiramente identificadas as operações fundamentais do algorit-
mo MGS e as respectivas dependências dos resultados, de modo a dimensionar a arquitectura
das unidades de dados, agilizar a alocação e os acessos a memória e explorar a capacidade
de paralelismo. Neste âmbito foram identificadas três fases, dez operações elementares e cin-
co diferentes tipos de operações a realizar.
De seguida, foram apresentados três modelos, resultantes de um processo de optimiza-
ção arquitectural sucessiva que visou diminuir a utilização de determinados recursos (BRAMs e
DSPs) e aumentar o desempenho (número total de ciclos de relógio e caminho crítico). O resul-
tado final obteve as seguintes melhorias: o número de BRAMs diminuiu 30%; o número de
DSPs diminuiu 72%; o número total de ciclos de relógio diminuiu 55% e o caminho crítico dimi-
nuiu 72%. Os principais responsáveis pelos resultados obtidos foram a redução e flexibilidade
na quantidade de bits das palavras reservadas para a salvaguarda dos valores e os andares de
pipeline implementados juntamente com o elevado grau de paralelismo conseguido.
Por fim, com recurso ao MATLAB, foi analisado o risco de overflow relativo ao resultado
de cada operação principal, de modo a definir a posição da vírgula nas palavras binárias reser-
vadas para alocar os diferentes valores. Neste sentido, foram definidos três níveis distintos de
risco de erro de overflow (5%, 1% e 0.1%), posteriormente implementados, com influência
directa na precisão dos resultados (quanto menor for o risco de erro de overflow, menor será a
precisão dos resultados).
43
5 Projecto e Implementação da Arquitectura de
Processamento
5.1 Dependências e conflitos de dados
Para perceber e maximizar o paralelismo inerente a um programa é fundamental identifi-
car onde, quando e como é que uma determinada instrução depende de outra(s). Duas
instruções consideram-se paralelas, quando podem ser executadas em simultâneo, ou em
pipeline, sem causar nenhum stall. Duas instruções consideram-se dependentes, quando têm
de ser executadas de acordo com uma determinada sequência. Existem três tipos de depen-
dências: dependências de dados; dependências de nome e dependências de controlo.
As dependências de dados verificam-se quando uma instrução produz um resultado que
vai ser utilizado por outra instrução, de modo directo ou indirecto (isto é, podem existir terceiras
instruções envolvidas). Duas instruções envolvidas numa dependência de dados não podem
ser executadas simultaneamente. A identificação de uma dependência de dados implica a exe-
cução das instruções por uma determinada ordem, caso contrário, poderão existir conflitos de
dados.
As dependências de nome ocorrem quando duas instruções utilizam o mesmo registo ou
a mesma posição em memória. Existem dois tipos de dependências de nome: antidependência
e dependência de saída. Uma antidependência entre duas instruções ocorre quando uma ins-
trução utiliza um registo que outra instrução vai ler. A sequência deve ser preservada, para
assegurar que a segunda instrução lê o valor correcto. Uma dependência de saída ocorre
quando duas instruções escrevem no mesmo registo. A sequência deve ser preservada, para
assegurar que o valor final do registo seja o correcto. As dependências de nome podem ser
resolvidas com a introdução de novos registos.
As dependências de controlo resultam de processos de decisão sobre condições. Uma
dependência de controlo ocorre quando uma instrução é executada, ou não, consoante o resul-
tado produzido por outra instrução.
Quando uma dependência entre instruções não é resolvida, surgem conflitos de dados.
Existem três tipos de conflitos de dados, classificados de acordo com a ordem de leitura e
escrita: RAW (read after write); WAR (write after read) e WAW (write after write). Um conflito
RAW ocorre quando uma instrução tenta ler um valor antes de este ter sido escrito, lendo
assim um valor incorrecto. Um conflito WAR ocorre quando uma instrução escreve um valor
antes da leitura de outra instrução, a segunda instrução vai ler um valor novo e incorrecto. Um
conflito WAW ocorre quando uma instrução escreve um valor antes de outro valor ser escrito
por outra instrução, o que resulta em valores incorrectos, no final das duas instruções.
Os conflitos RAW podem ser evitados, executando as instruções apenas quando os ope-
radores estão disponíveis. Os conflitos WAW e WAR (resultantes de dependências de nome)
44
são eliminados pela introdução de novos registos, sempre que possível, deixando nesse caso
de importar a sequência em que são executadas as instruções.
5.2 Arquitectura
Esta secção aborda a caracterização da arquitectura das unidades de armazenamento e
das unidades de processamento de dados. A unidade de dados, é constituída por cinco unida-
des aritméticas principais: subtractor vectorial; multiplicador simples; multiplicador vectorial;
recíproco e raiz quadrada. As unidades de armazenamento de dados baseiam-se em blocos
RAM de 36K bits de duplo porto e alojam todas as matrizes envolvidas no processo. Todas as
unidades do projecto funcionam com uma única frequência de relógio, com sensibilidade edge-
triggered positivo e são geridas ao nível combinatório e sequencial, por uma única unidade de
controlo, baseada numa máquina de Moore. No diagrama da Figura 5.1 encontram-se as uni-
dades principais do projecto.
Figura 5.1 – Diagrama das unidades principais do projecto.
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
BRAM
X
7 X
8
X
6
X
5
X
4
X
3
X
2
X
1
BRAMs X
(8X8 U e Q)
BRAM
BRAM
BRAM
BRAM
Y
4
Y
3
Y
2
Y
1
BRAMs Y
(8X8 Q e W)
BRAM
BRAM
BRAM
BRAM
Z
4
Z
3
Z
2
Z
1
BRAMs Z
(8X8 R e B)Reciproco
Real
x
1
Raíz Quadrada
Real
x
SUBTRACTOR
VECTORIAL
MU
LT
IPL
ICA
DO
R V
EC
TO
RIA
L
(1 a
nd
ar m
ultip
lica
do
res +
4 a
nd
are
s s
om
ad
ore
s)
MULTIPLICADOR SIMPLES
(a +jb) x c
1
2
3
1 2 3 4 5 6 7
CONTROLO
Armazenamento de Dados Processamento de Dados
45
5.2.1 Armazenamento de dados
Para o armazenamento de dados, nomeadamente salvaguarda de matrizes de entrada,
saída e temporárias, são utilizados BRAMs de 36Kb com duplo porto. As ligações das unidades
de memória estão descritas na Figura 5.2.
Figura 5.2 – Ligações (E/S) de cada unidade de armazenamento de dados.
A matriz a inverter e normalizada ( ), é inicialmente alojada em oito BRAMs de 36Kb
denominadas (memX1, memX2, memX3, memX4, memX5, memX6, memX7, memX8). Cada
BRAM endereça 1024 posições de 36 bits (32 bits + 4 bits de paridade), sendo que são apenas
utilizados 16 posições para alojar as palavras de 26 bits constituintes de cada coluna da matriz
U (8 endereços para a parte real e 8 endereços para a parte imaginária). Para endereçar as 16
posições de memória são necessários 4 bits, contudo, todos os BRAMs possuem um segundo
andar de 16 posições, para armazenar vectores (linhas/colunas) temporários, proporcionado
por um quinto bit de endereçamento.
A disposição adoptada foi a seguinte:
Clock Write Enable
Port A
Write Enable
Port B
Data Input Port B
Data Input Port A
Data Output Port A
Data Output Port B
[4:0]
[35:0]
[35:0]
[35:0]
[35:0]
Address Port A
Address Port B[4:0]
BLOCK RAM 36K: 32K+4K
DUAl-PORT
memXi(0) [25 downto 0]U1ia memXi(1) [25 downto 0]U1ib
memXi(2) [25 downto 0]U2ia memXi(3) [25 downto 0]U2ib
memXi(4) [25 downto 0]U3ia memXi(5) [25 downto 0]U3ib
memXi(6) [25 downto 0]U4ia memXi(7) [25 downto 0]U4ib
memXi(8) [25 downto 0]U5ia memXi(9) [25 downto 0]U5ib
memXi(A) [25 downto 0]U6ia memXi(B) [25 downto 0]U6ib
memXi(C) [25 downto 0]U7ia memXi(D) [25 downto 0]U7ib
memXi(E) [25 downto 0]U8ia memXi(F) [25 downto 0]U8ib
Figura 5.3 – Disposição dos blocos RAM memX.
46
O índice „i‟ está associado ao número da coluna/BRAM em questão ( ). A leitu-
ra/escrita da parte real de cada elemento (endereços pares) é efectuada pelo porto A, ao passo
que a leitura/escrita da parte imaginária de cada elemento (endereços impares) é efectuada
pelo porto B.
É necessário alocar memória para três matrizes temporárias e para a matriz de saída
(com o respectivo resultado final), respectivamente , , e que são também alojadas em
dois conjuntos de BRAMs de 36Kb (memYi e memZi), mas agora com palavras de 18 bit, o que
permite a redução do número de BRAMs para metade, ao alojar a parte imaginária e a parte
real numa só palavra de 36 bit:
memYk(0) [17 downto 0]Q1ia/W1ia memYk(0) [35 downto 18]Q1ib/W1ib
memYk(2) [17 downto 0]Q2ia/W2ia memYk(2) [35 downto 18]Q2ib/W2ib
memYk(4) [17 downto 0]Q3ia/W3ia memYk(4) [35 downto 18]Q3ib/W3ib
memYk(6) [17 downto 0]Q4ia/W4ia memYk(6) [35 downto 18]Q4ib/W4ib
memYk(8) [17 downto 0]Q5ia/W5ia memYk(8) [35 downto 18]Q5ib/W5ib
memYk(A) [17 downto 0]Q6ia/W6ia memYk(A) [35 downto 18]Q6ib/W6ib
memYk(C) [17 downto 0]Q7ia/W7ia memYk(C) [35 downto 18]Q7ib/W7ib
memYk(E) [17 downto 0]Q8ia/W8ia memYk(E) [35 downto 18]Q8ib/W8ib
memYk(1) [17 downto 0]Q1ja/W1ja memYk(1) [35 downto 18]Q1jb/W1jb
memYk(3) [17 downto 0]Q2ja/W2ja memYk(3) [35 downto 18]Q2jb/W2jb
memYk(5) [17 downto 0]Q3ja/W3ja memYk(5) [35 downto 18]Q3jb/W3jb
memYk(7) [17 downto 0]Q4ja/W4ja memYk(7) [35 downto 18]Q4jb/W4jb
memYk(9) [17 downto 0]Q5ja/W5ja memYk(9) [35 downto 18]Q5jb/W5jb
memYk(B) [17 downto 0]Q6ja/W6ja memYk(B) [35 downto 18]Q6jb/W6jb
memYk(D) [17 downto 0]Q7ja/W7ja memYk(D) [35 downto 18]Q7jb/W7jb
memYk(F) [17 downto 0]Q8ja/W8ja memYk(F) [35 downto 18]Q8jb/W8jb
i = {1,3,5,7}; j = i+1; k = j/2;
Figura 5.4 – Disposição dos blocos RAM memY.
47
Neste caso, em cada porto é efectuada a leitura/escrita do valor complexo (parte real e
parte imaginária) de cada elemento da coluna/linha da respectiva matriz. Ao contrário das res-
tantes matrizes, a matriz é guardada por linhas (de modo a facilitar as operações matriciais
da fase 2). Nas memXi é ainda salvaguardada a transposta da matriz Q, imediatamente antes
da fase 3.
memZk(0) [17 downto 0]Ri1a/B1ia memZk(0) [35 downto 18]Ri1b/B1ib
memZk(2) [17 downto 0]Ri2a/B2ia memZk(2) [35 downto 18]Ri2b/B2ib
memZk(4) [17 downto 0]Ri3a/B3ia memZk(4) [35 downto 18]Ri3b/B3ib
memZk(6) [17 downto 0]Ri4a/B4ia memZk(6) [35 downto 18]Ri4b/B4ib
memZk(8) [17 downto 0]Ri5a/B5ia memZk(8) [35 downto 18]Ri5b/B5ib
memZk(A) [17 downto 0]Ri6a/B6ia memZk(A) [35 downto 18]Ri6b/B6ib
memZk(C) [17 downto 0]Ri7a/B7ia memZk(C) [35 downto 18]Ri7b/B7ib
memZk(E) [17 downto 0]Ri8a/B8ia memZk(E) [35 downto 18]Ri8b/B8ib
memZk(1) [17 downto 0]Rj1a/B1ja memZk(1) [35 downto 18]Rj1b/B1jb
memZk(3) [17 downto 0]Rj2a/B2ja memZk(3) [35 downto 18]Rj2b/B2jb
memZk(5) [17 downto 0]Rj3a/B3ja memZk(5) [35 downto 18]Rj3b/B3jb
memZk(7) [17 downto 0]Rj4a/B4ja memZk(7) [35 downto 18]Rj4b/B4jb
memZk(9) [17 downto 0]Rj5a/B5ja memZk(9) [35 downto 18]Rj5b/B5jb
memZk(B) [17 downto 0]Rj6a/B6ja memZk(B) [35 downto 18]Rj6b/B6jb
memZk(D) [17 downto 0]Rj7a/B7ja memZk(D) [35 downto 18]Rj7b/B7jb
memZk(F) [17 downto 0]Rj8a/B8ja memZk(F) [35 downto 18]Rj8b/B8jb
i = {1,3,5,7}; j = i+1; k = j/2;
Figura 5.5 – Disposição dos blocos RAM memZ.
48
5.2.2 Subtractor vectorial
A unidade de subtracção vectorial foi projectada para subtrair vectores de complexos,
com dimensões até 8 elementos, com palavras de 26 bits. A unidade é constituída por 16 sub-
tractores aritméticos e 16 registos de saída. Com apenas um andar, esta unidade faz parte da
pipeline do processador. Na Figura 5.6 encontram-se as ligações e na Figura 5.7 apresenta-se
uma descrição pormenorizada da unidade.
Figura 5.6 – Diagrama de ligações (E/S) do subtractor vectorial.
Figura 5.7 – Diagrama interno do bloco de subtracção vectorial.
Clock
real(Input A)8x[25:0]
8x[25:0]
8x[25:0]
8x[25:0]
subVimag(Input A)
real(Input B)
imagl(Input B)
8x[25:0]
8x[25:0]
real(Output)
imag(Output)
stage 1
R
real(Input_A1)
real(output_1)
real(Input_B1)
R
imag(Input_A1)
imag(output_1)
imag(Input_B1)
R
real(Input_A2)
real(output_2)
real(Input_B2)
R
imag(Input_A2)
imag(output_2)
imag(Input_B2)
R
real(Input_A8)
real(output_8)
real(Input_B8)
R
imag(Input_A8)
imag(output_8)
imag(Input_B8)
26
26
26 26
R26
26
26 26
R26
26
26 26
R26
26
26 26
R26
26
26 26
R26
26
26 26
49
5.2.3 Multiplicador simples
A unidade de multiplicação simples foi projectada para realizar multiplicações de valores
complexos por escalares reais. De modo a conseguir realizar multiplicações com um bloco DSP
e apenas uma LUT adicional, o valor complexo foi dimensionado com 26 bits por palavra (parte
real e parte imaginária), ao passo que o escalar foi dimensionado com 19 bits. O resultado é
truncado a 36 bits por palavra. Esta unidade utiliza dois multiplicadores e 7 registos (dois regis-
tos de 26 bits e um registo de 19 bits à entrada da unidade, e, quatro registos de 45 bits à
saída dos multiplicadores). Os DSPs dos multiplicadores encontram-se estruturados com dois
andares de pipeline. A unidade de multiplicação simples é utilizada na fase 2, com a explora-
ção de pipeline. Os diagramas de ligações e processamento interno encontram-se na Figura
5.8 e Figura 5.9, respectivamente.
Figura 5.8 – Diagrama de ligações (E/S) do multiplicador simples.
Figura 5.9 – Diagrama interno do bloco multiplicação simples.
Clock
real(Input A)[25:0]
[25:0]
[18:0]multS
imag(Input A)
Input B
[35:0]
[35:0]
real(Output)
imag(Output)
R
real(Input_A)
Input_B
R
imag(Input_A)
Input_B
real(output)
imag(output)
R
R
R
R
R
R
stage 2 stage 3
45
45
stage 1
26
19
26
19
45
45
36
36
50
5.2.4 Multiplicador vectorial
A unidade de multiplicação vectorial foi projectada de modo a proporcionar dois tipos de
operações: multiplicações entre vectores complexos e multiplicações de vectores complexos
por escalares complexos. À semelhança da unidade de multiplicação simples, é utilizado um
bloco DSP com dois andares de pipeline por multiplicador, o primeiro operando tem 26 bits, o
segundo operando tem 19 bits e o resultado é truncado a 36 bits por palavra. Tendo sido
dimensionada para vectores de oito elementos, a multiplicação entre vectores está dividida em
7 andares de pipeline, ao passo que o resultado da multiplicação de vectores por escalares
está disponível à saída do quarto andar. A capacidade de processamento de vectores com
dimensões inferiores é considerada, mantendo contudo, a estrutura referida. Os recursos utili-
zados na unidade de multiplicação vectorial encontram-se na Tabela 5.1.
Tabela 5.1 – Recursos utilizados pelo multiplicador vectorial.
Multiplicadores Somadores/Subtractores Somadores Registos
32 16 14
26 bits 19 bits 45 bits 36 bits
16 16 64 30
O diagrama de ligações encontra-se na Figura 5.10, ao passo que, a análise interna da
unidade aritmética está disponível no anexo A1.
Figura 5.10 – Diagrama de ligações (E/S) do multiplicador vectorial.
Clock Select Conjugate
real(Input A) [35:0]8x[25:0]
8x[25:0]
8x[18:0]
8x[18:0]
[35:0]
multVimag(Input A)
real(Input B)
imagl(Input B)
real(Output)
imag(Output)
8x[35:0]
8x[35:0]
real(Output)
imag(Output)
51
5.2.5 Recíproco
A unidade de cálculo do recíproco foi projectada para processar palavras com 32
bits. Utiliza uma aproximação polinomial de 1ª ordem, por troços, com os coeficientes armaze-
nados em tabela. Esta unidade apresenta uma latência de 8 ciclos de relógio e inclui um sinal
de start, para controlar o armazenamento do resultado em registo no decorrer da fase 1 do
algoritmo. Na Figura 5.11 encontra-se o respectivo diagrama de ligações.
Figura 5.11 – Diagrama de ligações (E/S) da unidade recíproco.
Conforme referido, a função recíproco é calculada usando um polinómio de 1ª ordem:
(5.1)
cujo erro de aproximação é:
(5.2)
Este método estima a solução da função recíproco, para um intervalo , onde a
função é diferenciável. Foi escolhido o polinómio minimax, que é o polinómio que apresenta o
menor erro máximo de aproximação no intervalo. O polinómio minimax de 1ª ordem, num inter-
valo , apresenta erro máximo nos pontos e (extremos) e num ponto interno
(com sinal contrário)
(5.3)
(5.4)
(5.5)
Clock
Input[31:0]
Recip_Unit[31:0]
Output
Start
52
Das Eq. (5.3) e (5.4) resulta
(5.6)
O erro máximo no ponto é o ponto em que a derivada da Eq.(5.2) é nula:
(5.7)
Substituindo as Eq. (5.6) e (5.7) em (5.5) ficamos com
(5.8)
Das Eq. (5.3) e (5.4) resulta
(5.9)
Os coeficientes e do polinómio minimax de 1ª ordem que aproxima a função recí-
proco (Eq. (5.1)) são definidas pelas Eq. (5.6) e (5.9), respectivamente.
Calculados os coeficientes, foi preenchida uma tabela para consulta (look-Up table), utili-
zando para tal um bloco RAM de 36K bits. A tabela foi preenchida com 1024 coeficientes e
, com 23 e 13 bits, respectivamente, totalizando 1024 palavras de 36 bits. O intervalo consi-
derado para a tabela foi , o coeficiente com 23 bits fraccionários, mais 1 bit fixo-a-1
para a parte inteira, juntamente com 13 bits (com a estrutura ) para o coeficiente ,
apresentam erros máximos teóricos com precisão de 22 bits fraccionários [20].
O processo para o cálculo do recíproco passa por quatro fases:
Normalização do valor de entrada (operando ) para o intervalo ;
Endereçamento da tabela com , de modo a obter os coeficientes e para o inter-
valo;
Cálculo do polinómio de 1ª ordem conforme Eq. (5.1);
Desnormalização de , para obter o valor correcto de saída.
O processo de normalização consiste no cálculo do valor absoluto e na eliminação dos
zeros à esquerda da palavra binária (corresponde a uma multiplicação por um factor de esca-
la), com posterior adaptação (truncagem ou concatenação de zeros à direita) da palavra
53
resultante, tal que . O processo de desnormalização restitui o factor de escala e o
sinal original (±). Na Figura 5.12 encontra-se o diagrama interno do bloco recíproco.
Figura 5.12 – Diagrama interno do bloco recíproco.
5.2.6 Raiz quadrada
A unidade de raiz quadrada foi projectada para processar palavras com 32 bits,
baseando-se, à semelhança da unidade de recíproco, no polinómio minimax, para obter uma
aproximação linear por troços. Esta unidade apresenta também uma latência de 8 ciclos de
relógio e inclui um sinal de start. Na Figura 5.13 encontra-se o respectivo diagrama de ligações.
Figura 5.13 – Diagrama de ligações (E/S) da unidade raiz quadrada.
O polinómio minimax de 1ª ordem para aproximar a função raiz quadrada, num intervalo
, foi obtido do mesmo modo que para a função recíproco:
Rinputn
orm
aliz
er
Lo
ok-U
p ta
ble
xi
x
x
x0
x0
R
Ry0
m
R
dx
R
R
de
no
rma
lize
r
outputR
|x|
Sign
stage 4stage 1 stage 2 stage 3 stage 7stage 5 stage 6 stage 8
32 31
23
13
20
31
31 31 32
10
Clock
Input[31:0]
SQRT_Unit[31:0]
Output
Start
54
O erro de aproximação de
(5.10)
é:
(5.11)
Este método estima a solução da função raiz quadrada, para um intervalo , onde a
função é diferenciável. Segue-se a dedução dos coeficientes e , através do método adop-
tado. Os erros máximos nos pontos e (extremos) e num ponto interno (com sinal
contrário) são dados por:
(5.12)
(5.13)
(5.14)
Das Eq. (5.12) e (5.13) resulta
(5.15)
O erro máximo no ponto é o ponto em que a derivada da Eq. (5.11) é nula:
(5.16)
Das Eq. (5.12) e (5.16) resulta
(5.17)
Os coeficientes e do polinómio minimax de 1ª ordem que aproxima a função raiz
quadrada (Eq. (5.10)) são definidos pelas Eq. (5.15) e (5.17), respectivamente.
Os coeficientes foram armazenados em duas tabelas, com recurso a duas BRAMs de
36Kb. A utilização de uma segunda tabela, deveu-se ao facto de a função raiz quadrada não
variar linearmente, com o factor de escala ( em binário), mas sim exponencialmente ( em
binário). Assim, numa das tabelas estão alojados os coeficientes correspondentes às aproxi-
mações com factor de escala com expoentes ímpares (2, 8, 32, 128, …) e na outra tabela
estão alojados os coeficientes correspondentes às aproximações com factor de escala com
expoentes pares (4, 16, 64, 256, …).
55
Cada tabela armazena 1024 coeficientes e , com 23 e 13 bits, respectivamente (
com 23 bits fraccionários e com a estrutura ). Os erros máximos teóricos resultantes
desta implementação detêm uma precisão de 26 bits fraccionários [20].
Na Figura 5.14 encontra-se o diagrama interno do bloco de cálculo da raiz quadrada.
Figura 5.14 – Diagrama interno do bloco raiz quadrada.
5.3 Conclusão
Neste capítulo, depois de definidas as dependências de dados e possibilidades de confli-
tos, foram descritas as arquitecturas das unidades de processamento de dados, com ênfase
nas unidades de armazenamento de dados, na unidade de multiplicação vectorial e nas unida-
des de cálculo de recíproco e raiz quadrada.
As unidades de armazenamento de dados baseadas em BRAMs foram a escolha mais
adequada, dada a quantidade de dados a salvaguardar. Considerando o acesso simultâneo
aos dados, que se reflecte na partilha de espaço em memória (as matrizes Q e W e as matrizes
R e B partilham o espaço em memória), para a salvaguarda das matrizes principais (sem con-
siderar variáveis temporárias isoladas), são necessárias 384 palavras binárias, para
representar três matrizes complexas de ordem 8. De modo a retirar melhor rendimento dos
blocos DSP, os elementos da matriz envolvida em mais operações (matriz U) são representa-
dos por palavras de 26 bits, o que implica a utilização de 8 BRAMs para o armazenamento das
8 colunas. Os elementos das restantes matrizes são representados por palavras binárias de 18
bits, permitindo a redução do número de BRAMs para metade, considerando a capacidade de
endereçamento de palavras de 36 bits.
A unidade de multiplicação vectorial consiste num multiplicador de vectores complexos
de 8 elementos. Devido à elevada utilização da unidade, justificou-se a sua implementação
Lo
ok-U
p ta
ble
1
x
x0
x0
R
Ry0
m
R
dx
stage 4
Lo
ok-U
p ta
ble
2
x0
mu
xm
ux
Rinput
no
rma
lize
r
xi
x
|x|
stage 1 stage 2 stage 3
32 31
10
R
R
de
no
rma
lize
r
outputRreal/
imag
stage 7stage 6 stage 8
31
31 31 32
stage 5
13
20
23
56
com suporte para pipeline e consequente área de hardware ocupada (32 blocos DSP, 4585 flip-
flops e 6008 LUTs).
A unidade de multiplicação vectorial merece destaque por dois motivos: é a unidade que
mais recursos consome e ao mesmo tempo, a unidade mais utilizada ao longo de todo o pro-
cesso.
As unidades de cálculo de recíproco e raiz quadrada são as menos utilizadas (ambas as
unidades são utilizadas oito vezes durante todo o processo), contudo, exigiram algoritmos de
aproximação, que mereceram um estudo/pesquisa aprofundado. Ambas as unidades utilizam
algoritmos de aproximação linear por troços (baseados no polinómio minimax), que permitiram
obter precisões de 22 e 26 bits fraccionários, para os resultados dos cálculos do recíproco e
raiz quadrada, respectivamente. Relativamente aos recursos consumidos, destaca-se a utiliza-
ção de três BRAMs (uma para o cálculo do recíproco e duas para o cálculo da raiz quadrada) e
um bloco DSP por unidade.
57
6 Resultados
No capítulo anterior foram descritas a arquitectura e as opções assumidas na implemen-
tação do multiprocessador. No presente capítulo são apresentados e analisados os resultados
obtidos ao nível de ocupação de recursos dos dispositivos, desempenho do circuito e precisão
dos dados à saída.
6.1 Recursos e Desempenho
O ambiente de projecto utilizado foi o Xilinx Integrated Software Environment (ISE) 13.2
[21]. Foram analisados os desempenhos do sistema projectado quando mapeado em dispositi-
vos Virtex-4 (XC4VLX25 com speed grade -12), 5 (XC5VLX330T com speed grade -2) e 6
(XC6VLX760 com speed grade -2).
Para a implementação na Virtex-4 foram realizados alguns ajustes, considerando a sua
limitação ao nível dos recursos [24]. Os ajustes passaram principalmente, pela substituição das
BRAMs de 36Kb por BRAMs de 18Kb (nos casos das unidades de recíproco e raiz quadrada,
foram colocadas BRAMs em paralelo) e compensação com LUTs na unidade de multiplicação
vectorial, face à diminuição de blocos DSP. Isto, porque os dispositivos da família Virtex-4 dis-
põem de blocos DSP48 com suporte apenas para multiplicações 18x18, o que implica a
utilização de dois blocos DSP por cada multiplicador da arquitectura desenvolvida, ultrapas-
sando assim o número total de blocos DSP disponíveis do dispositivo XC4VLX25 (48) [25].
A Tabela 6.1 sumariza os recursos consumidos pelas unidades principais do projecto e
os recursos totais utilizados pelo multiprocessador (dispositivo XC5VLX330T). Na Tabela 6.2
encontram-se os resultados de desempenho, baseados na análise do caminho crítico, obtidos
para os diferentes dispositivos após place & route. A Tabela 6.3 indica o número total de ciclos
de relógio necessários para processar matrizes de diferentes dimensões.
Tabela 6.1 – Recursos consumidos pelo multiprocessador.
Unidade Flip-flops LUTs BRAMS DSP48Es
Subtractor Vectorial 0 896 0 0
Multiplicador Simples 161 209 0 2
Multiplicador Vectorial 4585 6008 0 32
Recíproco 233 393 1 1
Raíz Quadrada 234 467 2 1
Total
(Multiprocessador) 5776 9918 19 36
58
Tabela 6.2 – Resultados de desempenho para os diferentes dispositivos testados.
Virtex-6 Virtex-5 Virtex-4
Caminho crítico (ηs) 5,98 6,23 8,37
Frequência máxima (MHz) 167,1 162,5 119,5
Tempo de Execução (µs) 2,90 3,02 4,06
Tabela 6.3 – Total de ciclos de relógio necessários para o processamento das diferentes dimensões das matrizes.
Dimensão da Matriz 2x2 3x3 4x4 5x5 6x6 7x7 8x8
Ciclos de Relógio 120 178 236 298 360 422 485
Em suma, no que diz respeito aos recursos dispendidos, o projecto utiliza 5776 flip-flops,
9918 LUTs, 19 BRAMs (das quais, 16 são utilizadas para armazenamento de variáveis) e 36
DSPs. A frequência máxima obtida após place & route foi 167MHz, 162.5MHz e 119.5MHz, na
Virtex-6, Virtex-5 e Virtex-4, respectivamente.
De modo a obter máxima flexibilidade, o projecto foi desenvolvido para permitir a inver-
são de matrizes quadradas com diferentes dimensões. O número de recursos é fixo para
matrizes de dimensão até 8x8, contudo, o número de ciclos pode ser modificado. Assim, depois
de seleccionada a dimensão da matriz, aquando da síntese do circuito são activa-
das/desactivadas determinadas instruções, o que conduz à adição/eliminação de estados na
máquina de controlo e por consequência, ciclos de relógio.
Como se pode verificar na Tabela 6.3, o número de ciclos de relógio necessário para
completar uma inversão matricial, varia linearmente com a dimensão das matrizes, com um
rácio de aproximadamente 60 ciclos de relógio por número de linhas/colunas da matriz.
O tempo total de execução, obtido através da multiplicação do período mínimo pelo
número de ciclos de relógio necessários para inverter uma matriz de ordem 8, para as Virtex-6
e Virtex-5 é de 2,90µs e 3,02µs, respectivamente. Para a Virtex-4, considerando a adaptação
da arquitectura, o tempo total de execução é de 4,06µs.
A Tabela 6.4 apresenta uma análise comparativa entre os resultados obtidos neste pro-
jecto e os resultados obtidos noutros trabalhos, com implementações em FPGA, referidos
anteriormente na Tabela 2.1. São considerados factores tais como os diferentes formatos utili-
zados, o domínio complexo ou real e a ordem das matrizes que podem ser processadas.
59
Tabela 6.4 – Comparação entre os resultados obtidos neste projecto, e os resultados obtidos por outros autores, mencionados na Tabela 2.1.
Slices DSP48s BRAMs Tempo Total de
Execução (µs)
Este
Trabalho
Virtex-6 - 8x8 2575
362 19
2,90
Virtex-6 - 4x4 1,41
Virtex-5 - 8x8 2788
3,02
Virtex-5 - 4x4 1,47
Virtex-4 - 8x8 8108 48 22
4,06
Virtex-4 - 4x4 1,98
Irturk et al.
2009 [3]
19 bits 2415
12 1
5,56
26 bits 4656 7,14
32 bits 6540 9,09
Irturk et al.
2008 [7]
QR
11644 12 1
4,34
LU 3,12
Cholesky 3,33
Karkooti e Cavallaro
2006 [4] 9117 22 9 7,69
Eilert et al.
2007 [11]
Matriz Adjunta 1561 0 NR
3
0,96
Partição em Blocos 1716 8 1,20
Analisando os resultados, verifica-se que apenas as implementações de Eilert et al. [11]
apresentam melhor tempo total de execução, mas estas consideram apenas matrizes reais de
ordem 4, com palavras binárias com dimensão de 16 e 20 bits. As restantes implementações
em FPGA, apresentam um tempo total de execução superior ao obtido neste trabalho (2,9µs
para matrizes de ordem 8, no dispositivo XC6VLX760). Relativamente aos recursos utilizados,
considerando a duplicação da ordem das matrizes, a diferença mais significativa verifica-se no
aumento de BRAMs. O baixo número de slices deve-se ao uso considerável de blocos DSP e
BRAMs. O número DSPs deste projecto (36 DSP48Es), considera-se aceitável, tendo em conta
a duplicação da ordem das matrizes, o domínio complexo das mesmas e a diminuição do tem-
po total de execução.
Os factores com maior influência no tempo total de execução obtido foram: o elevado
paralelismo implementado (o número de DSPs utilizados e a sua utilização em pipeline são
exemplo disso); a redução do caminho crítico, ao ponto da implementação de andares de pipe-
line nos DSPs; a salvaguarda dos valores das matrizes em BRAMs, evitando uma utilização
excessiva de registos, mantendo um atraso reduzido no acesso a memória e os métodos de
2 DSP48Es
3 Não referido na bibliografia.
60
cálculo de recíproco e raiz quadrada, baseados em aproximações por polinómios de primeira
ordem (outros autores, como Irturk 2007 [18], utilizam métodos iterativos que atingem as deze-
nas de ciclos de relógio).
O projecto é facilmente extensível a matrizes de maiores dimensões. Para tal existe um
custo associado ao número de ciclos de relógio (com implicações na unidade de controlo), cujo
aumento segue a relação obtida na Tabela 6.3, com o acréscimo de um ciclo de relógio/andar
de pipeline na unidade de multiplicação vectorial, sempre que a ordem da matriz passa por
(uma vez que a unidade é utilizada em pipeline, o acréscimo é residual). Outro
custo inerente ao aumento da capacidade matricial do projecto diz respeito ao aumento dos
recursos. A Tabela 6.5 apresenta o aumento dos recursos das unidades de dados afectadas
por incremento de uma unidade na ordem das matrizes a processar.
Tabela 6.5 – Aumento dos recursos do projecto com o incremento de uma unidade na ordem das matrizes.
DSP48Es Add_36 Sub_26 Reg_45 Reg_36 BRAMs
Multiplicador Vectorial 4 4 0 4 4 0
Subtractor Vectorial 0 0 1 0 0 0
Armazenamento de Memória 0 0 0 0 0 2
Verifica-se que, por exemplo, a passagem do modelo actual (com suporte para matrizes
de ordem 8), para um modelo com suporte para matrizes de ordem 9 implica um aumento de:
11% do número de DSP48Es;
13% do número de somadores de 36 bits;
6% do número de subtractores de 26 bits;
6% do número de registos de 45 bits;
13% do número de registos de 36 bits;
11% do número de BRAMs.
6.2 Análise de erro e Precisão
Para determinar a precisão dos resultados, foi desenvolvido um modelo em MATLAB,
que obedece à estrutura e critérios definidos no capítulo 4, desde a implementação de vírgula
fixa, dimensão das palavras binárias e truncamentos até à implementação de réplicas das uni-
dades de recíproco e raiz quadrada, referidas nas secções 5.2.5 e 5.2.6, respectivamente.
Depois de verificada a conformidade dos resultados obtidos em simulações comporta-
mentais do multiprocessador, com recurso ao simulador do ISE, com os resultados obtidos no
modelo em MATLAB, foi elaborado um pacote de testes, com o objectivo de avaliar o erro
61
absoluto e o erro relativo dos resultados (parte real, parte
imaginária e módulo) obtidos pelo processador. Os valores dos erros foram obtidos por compa-
ração dos resultados obtidos pelo modelo do processador ( ) com os valores de referência
obtidos através da função do MATLAB, e calculados com precisão dupla ( ).
Nos testes foram consideradas 500 matrizes de entrada, para as implementações com
os três níveis de risco de overflow (5%, 1% e 0,1%) referidos na secção 4.3. A descrição esta-
tística do erro, para os diferentes riscos de overflow está indicada nas Tabela 6.6, Tabela 6.7 e
Tabela 6.8.
Tabela 6.6 – Descrição estatística do erro para 5% de risco de overflow.
Módulo Parte Real Parte Imaginária
εabsoluto εrelativo εabsoluto εrelativo εabsoluto εrelativo
Média 0,173 0,0197 0,111 0,0376 0,110 0,0357
Mediana 0,402E-04 0,00102 3,64E-04 0,00164 3,71E-04 0,00167
Desvio Padrão 2,11 0,112 1,49 0,707 1,49 0,598
Variância 4,46 0,0126 2,24 0,499 2,24 0,358
Total Resultados Analisados 32000
Tabela 6.7 – Descrição estatística do erro para 1% de risco de overflow.
Módulo Parte Real Parte Imaginária
εabsoluto εrelativo εabsoluto εrelativo εabsoluto εrelativo
Média 0,00251 0,00256 0,00210 0,0114 0,00208 0,00998
Mediana 4,20E-04 0,00103 3,82E-04 0,00166 3,82E-04 0,00163
Desvio Padrão 0,0262 0,00947 0,0193 0,143 0,020 0,111
Variância 6,86E-04 8,96E-05 3,72E-04 0,0203 3,82E-04 0,0124
Total Resultados Analisados 32000
62
Tabela 6.8 – Descrição estatística do erro para 0,1% de risco de overflow.
Módulo Parte Real Parte Imaginária
εabsoluto εrelativo εabsoluto εrelativo εabsoluto εrelativo
Média 0,0339 0,00838 0,0226 0,0449 0,0229 0,0312
Mediana 8,09E-04 0,00202 7,48E-04 0,00333 7,26E-04 0,00333
Desvio Padrão 0,431 0,046 0,308 1,833 0,309 0,676
Variância 0,186 0,00211 0,0952 3,36 0,0957 0,457
Total Resultados Analisados 32000
Tendo em conta que o erro absoluto pode induzir em conclusões erradas, a análise recai
sobre a percentagem de erro relativo. As 500 matrizes de entrada produziram 32000 resultados
para cada objecto a analisar (módulo, parte real e parte imaginária) em cada nível de risco de
overflow. Como se pode verificar em qualquer uma das tabelas, o erro do módulo dos elemen-
tos de saída é significativamente inferior ao erro dos elementos singulares (partes real e
imaginária), enquanto os últimos dois apresentam distribuições similares para cada nível de
risco de overflow. Verifica-se também que os valores médios não seguem o padrão esperado.
Este fenómeno deve-se ao aumento dos casos de overflow e consequentemente o aumento da
quantidade de erros relativos superiores a 100%, assumindo assim um peso significativo e
falacioso para a média do erro. Por este motivo, considera-se a mediana o dado estatístico que
fornece melhor informação sobre os resultados obtidos. O módulo dos elementos de saída,
obteve uma mediana de erro relativo de 0,102%, 0,103% e 0,202%, para 5%, 1% e 0,1% de
risco de overflow, respectivamente. Os resultados da mediana de erro relativo da parte real
foram 0,164%, 0,166% e 0,333%, para 5%, 1% e 0,1% de risco de overflow, respectivamente.
Por fim, o erro relativo da parte imaginária, apresenta uma mediana de 0,167%, 0,163% e
0,333%. Em todos os casos verifica-se que a variação dos resultados entre os 5% e 1% de
risco de overflow é mínima.
Nas Figura 6.1, Figura 6.2 e Figura 6.3 encontram-se as comparações das distribuições
dos erros relativos do módulo, parte real e parte imaginária. As distribuições encontram-se com
um nível de confiança de 95% e escala logarítmica no eixo do erro relativo, de modo a melho-
rar a legibilidade dos dados.
63
Figura 6.1 – Distribuição do erro relativo para 5% de risco de overflow.
Figura 6.2 – Distribuição do erro relativo para 1% de risco de overflow.
10-6
10-5
10-4
10-3
10-2
10-1
0
100
200
300
400
500
600
700
800
900
Erro Relativo
Fre
qu
ên
cia
Parte Real
Parte Imaginária
Módulo
10-6
10-5
10-4
10-3
10-2
10-1
0
50
100
150
200
250
300
350
400
Erro Relativo
Fre
qu
ên
cia
Parte Real
Parte Imaginária
Módulo
64
Figura 6.3 – Distribuição do erro relativo para 0,1% de risco de overflow.
Como se pode verificar pelas figuras, os erros relativos singulares apresentam compor-
tamentos similares, ao passo que a quantidade do erro relativo do módulo demonstra uma
distribuição mais uniforme e tende para zero, para valores de erro consideravelmente mais
baixos. Nas Figura 6.4, Figura 6.5 e Figura 6.6 encontram-se as comparações das distribuições
dos erros relativos para os três níveis de risco de overflow considerados. Pelos mesmos moti-
vos de legibilidade dos dados, as distribuições encontram-se também com um nível de
confiança de 95% e escala logarítmica no eixo do erro relativo.
Figura 6.4 – Comparação do erro relativo do módulo para os três níveis de risco de overflow.
10-6
10-5
10-4
10-3
10-2
10-1
0
50
100
150
200
250
300
350
400
450
Erro Relativo
Fre
qu
ên
cia
Parte Real
Parte Imaginária
Módulo
10-6
10-5
10-4
10-3
10-2
10-1
0
50
100
150
200
250
300
Erro Relativo
Fre
qu
ên
cia
0.1%
1%
5%
65
Figura 6.5 – Comparação do erro relativo da parte real para os três níveis de risco de overflow.
Figura 6.6 – Comparação do erro relativo da parte imaginária para os três níveis de risco de overflow.
Como seria de prever, os três gráficos apontam para uma maior ocorrência de baixo erro
relativo (valores compreendidos entre 10E-4 e 10E-3), quando o risco de overflow é de 5%. Isto
deve-se ao facto das palavras possuírem mais bits para a parte fraccionária, o que proporciona
mais precisão aos resultados.
O comportamento das curvas dos erros associados aos riscos de overflow de 0,1% e 1%
é relativamente diferente do esperado. As curvas de erro relativo para o risco de overflow de
0,1% atingem valores de erro mais elevados (como seria de esperar tendo em conta o deslo-
10-5
10-4
10-3
10-2
10-1
0
100
200
300
400
500
600
700
800
900
Erro Relativo
Fre
qu
ên
cia
0.1%
1%
5%
10-5
10-4
10-3
10-2
10-1
0
100
200
300
400
500
600
700
800
900
Erro Relativo
Fre
qu
ên
cia
0.1%
1%
5%
66
camento da vírgula para a direita e consequente perda de bits fraccionários), contudo, para
valores de erro reduzido, as curvas continuam sobrepostas às curvas associadas ao risco de
overflow de 1%. Isto deve-se ao facto do erro associado ao risco de 0,1% de risco de overflow
ter um comportamento mais linear na parte esquerda do gráfico (possuem maiores concentra-
ções de erro reduzido mas em pontos mais espaçados). É importante ainda salientar que as
curvas associadas ao risco de 1% de erro de overflow atingem ocorrências de erros relativos
mais baixos ( 10E-5) que as curvas de erro de precisão associadas ao risco de 0,1% de erro
de overflow.
6.3 Conclusão
O projecto foi mapeado em dispositivos das famílias Virtex-4, 5 e 6, tendo sido obtidos
diferentes resultados consoante as capacidades das FPGAs.
No que diz respeito aos recursos utilizados pelo processador destacam-se os 19 blocos
RAM e os 36 blocos DSP48E, reflectindo a opção por blocos dedicados. Os tempos totais de
execução vão desde os 1,98µs até aos 2,90µs, para processamento de matrizes de ordem 4
implementado em Virtex-4 e matrizes de ordem 8 implementado em Virtex-6, respectivamente.
Considerando os resultados obtidos nos outros trabalhos e os requisitos de tempo da ordem
dos milissegundos, os tempos totais de execução obtidos são extremamente satisfatórios. A
flexibilidade do processador na inversão de matrizes de diferentes ordens e a facilidade de
extensão a matrizes de ordem superior são também aspectos que merecem destaque.
Relativamente aos resultados retirados da análise de precisão, em suma, as medianas
para o risco de 1% e 5% de erro de overflow são bastante próximas, ao mesmo tempo, os ele-
vados valores obtidos para o erro médio com 5% de risco de erro de overflow, indicam não só a
ocorrência de bastantes casos de overflow (previsível), como níveis de erro muito elevados
(superiores a 100%). Tendo em conta todos os aspectos considera-se o risco de 1% de erro de
overflow o mais adequado (permanecendo a capacidade de opção, aquando da síntese do
circuito, conforme os requisitos de utilização).
67
7 Conclusões e trabalho futuro
Neste capítulo são apresentadas as conclusões finais, as limitações e as contribuições
do trabalho desenvolvido. Em segundo plano são também apresentadas algumas sugestões de
alteração ou complemento, para trabalho futuro.
7.1 Satisfação dos objectivos
O objectivo deste trabalho passava pela especificação, projecto e implementação em
FPGA de um multiprocessador, para inversão de matrizes quadradas complexas, com ordem
igual ou inferior a 8, para aplicar a sistemas de comunicações sem fios multi-antena.
Foram identificados vários algoritmos de inversão matricial. Considerando a melhor satis-
fação de requisitos foi adoptado o algoritmo de decomposição QR baseado no método MGS.
Para a representação aritmética dos valores optou-se pela utilização de vírgula fixa, com com-
plemento para dois para a representação números com sinal. A especificação do MGS foi
meticulosamente articulada, de modo a permitir uma arquitectura optimizada, eficiente, com
elevado nível de paralelismo, de pipeline e de escalabilidade. Foi também realizada uma análi-
se ao erro de overflow que permitiu obter elevada robustez. O tamanho das palavras binárias
armazenadas em memória varia entre 18 e 26 bits, estando o número de bits directamente
relacionado com o tipo de BRAMs e blocos DSP utilizados.
O projecto foi implementado em três dispositivos distintos: XC4VLX25, XC5VLX330T e
XC6VLX760, das famílias Virtex-4, 5 e 6 respectivamente. A quantidade de recursos consumi-
dos pelo dispositivo XC6VLX760 foi: 2575 slices; 36 DSPs e 19 BRAMs. Comparando com
outros trabalhos desenvolvidos, baseados em matrizes com dimensões 4x4, a quantidade de
recursos apresentada é perfeitamente aceitável. A frequência máxima de relógio obtida foi de
167,1MHz na XC6VLX760 e o número total de ciclos de relógio para matrizes de ordem 8 foi
485, totalizando 2,9µs para a conclusão do processamento. O tempo total de execução conse-
guido é substancialmente inferior aos requisitos (na ordem dos milissegundos), considerando a
periodicidade de equalização dos sistemas MIMO-OFDM e é também melhor do que os tempos
obtidos por outros autores, pelo que se pode considerar um resultado extremamente satisfató-
rio.
Qualquer unidade ou conjunto de unidades têm ainda a valência de poderem ser utiliza-
das no processamento de outras operações (desde operações elementares como
multiplicações vectoriais até decomposições QR).
A flexibilidade no processamento de matrizes de diferentes dimensões e a escalabilidade
da arquitectura ao nível dos recursos e dos ciclos de relógio (unidade de dados e unidade de
controlo) conferem também uma mais-valia ao projecto.
Por fim, foi analisada a precisão dos resultados, onde se destacou a implementação com
risco de erro de overflow de 1%, pelo equilíbrio entre o erro de overflow e o erro de precisão,
conseguindo medianas do erro relativo de 0,16% para as componentes reais e imaginárias.
68
7.2 Trabalho futuro
O trabalho desenvolvido pode ser alvo de modificações em dois aspectos distintos. Um
dos aspectos diz respeito à melhoria da precisão dos resultados. O outro aspecto diz respeito
ao aumento da capacidade do processador.
A precisão dos resultados pode ser melhorada, para tal é necessária a utilização de
palavras binárias com maior número de bits. Consequentemente são afectados o número de
blocos DSP e o número de blocos RAM. No sentido de acompanhar a melhoria na precisão dos
resultados, o desempenho das unidades de cálculo do recíproco e da raiz quadrada também
pode ser melhorado com recurso a aproximações por polinómios de ordem superior.
Quanto à capacidade do processador, como foi referido no capítulo 6, a arquitectura
desenvolvida é facilmente escalável a matrizes de ordem superior, com os respectivos custos
de área de hardware e ciclos de relógio.
69
Referências
[1] “Inesc-ID”, http://www.inesc-id.pt/, Outubro 2011.
[2] “ESDA”, http://esda.inesc-id.pt/~hcn/, Outubro 2011.
[3] A. Irturk, S. Shahnam, R. Kastner, “An Efficient FPGA Implementation of Scalable Matrix
Inversion Core using QR Decomposition”, UCSD Technical report, San Diego, Março 2009.
[4] M. Karkooti, J. Cavallaro, “FPGA Implementation of Matrix Inversion Using QRD-RLS Algo-
rithm”, Signals, Systems and Computers, 2005. Conference Record of the Thirty-Ninth
Asilomar Conference on, Houston, Março 2006.
[5] F. Henriques, “Transmission of OFDM-UWB radio signals along multimode fiber in in-
building networks”, IST, Lisboa, Dezembro 2010.
[6] “Internt World Stats – Usage and Population Estatistics”,
http://www.internetworldstats.com/emarketing.htm, 2011-10-14.
[7] A. Irturk, B. Benson, A. Arfaee, R. Kastner, “Automatic Generation of Decomposition based
Matrix Inversion Architectures”, ICECE Technology, 2008. FPT 2008. International Confe-
rence on , San Diego, Dezembro 2008.
[8] R.Chang, C. lin, K. Lin, C. Huang, F. Chen, “Iterative QR Decomposition Architecture Using
the Modified Gram-Schmidt Algorithm for MIMO Systems”, Circuits and Systems, 2009.
ISCAS 2009. IEEE International Symposium on, Taiwan, Junho 2009.
[9] “Wireless Communication – Mathematica description of OFDM”,
http://wireless.per.nl/reference/chaptr05/ofdm/ofdmmath.htm#fourier, 2011-10-14.
[10] C. Singh, S. Prasad, P. Balsara, “VLSI Architecture for Matrix Inversion using Modified
Gram-Schmidt based QR Decomposition”, VLSI Design, 2007. Held jointly with 6th Interna-
tional Conference on Embedded Systems., 20th International Conference on, Dallas, Fevereiro
2007.
[11] J. Eilert, D. Wu, D. Liu, “Efficient Complex Matrix Inversion for MIMO Software Defined
Radio”, Circuits and Systems, 2007. ISCAS 2007. IEEE International Symposium on, Linkop-
ing, Junho 2007.
70
[12] J. Teles, L. Vicente, “Apontamentos de Complementos de Álgebra Linear e Geometria Analí-
tica”, FCTUC, Coimbra, pp. 15-22; 50-56, Maio 2005.
[13] P. Persson, “Introdution to Numerical Methods - Gram-Schmidt Orthogonalization”, MIT,
Massachusetts, Setembro 2007.
[14] G. H. Golub, C. F. V. Loan, “Matrix Computations”. The Johns Hopkins University Press,
Maryland, pp. 223-236, 1983.
[15] M. Mehlhose, Stefan Schiffermuller, “Efficient Fixed-Point Implementation of Linear Equali-
zation for Cooperative MIMO Systems”, EUSIPCO 17th European Signal Processing
Conference, Berlin, Agosto 2009.
[16] P. Luethi, C. Studer, S. Deutsch, E. Zgraggen, H. Kaeslin, N. Felber, W. Fichtner, “Gram-
Schmidt-based QR Decomposition for MIMO Detection: VLSI Implementation and Compara-
tion”, Circuits and Systems, 2008. APCCAS 2008. IEEE Asia Pacific Conference on, Zurique,
Dezembro 2008.
[17] F. Edman, “Digital Hardware Aspects of Multiantenna Algorithms”, Lund University, Lund,
Janeiro 2006.
[18] A. Irturk, “Implementation of QR Decomposition Algorithm using FPGAs”, University of
California, Santa Barbara, Junho 2007.
[19] R. Duarte, H. Neto e M. Véstias, “Double-precision Gauss-Jordan Algorithm with Pivoting on
FPGAs”, Digital System Design, Architectures, Methods and Tools, 2009. DSD '09. 12th Eu-
romicro Conference on, Agosto 2009.
[20] H. Neto, “Polinómio minimax”, IST, Lisboa, Abril 2011.
[21] Xilinx inc.”, http://www.xilinx.com/.
[22] Xilinx, “Virtex-5 Family Overview – DS100 (v5.0)”,
http://www.xilinx.com/support/documentation/data_sheets/ds100.pdf, Fevereiro 2009.
[23] Xilinx, “Virtex-5 FPGA XtremeDSP Design Considerations User Guide – UG193 (v3.4)”,
http://www.xilinx.com/support/documentation/user_guides/ug193.pdf, Junho 2010.
[24] Xilinx, “Virtex-4 Family Overview – DS112 (v3.1)”,
http://www.xilinx.com/support/documentation/data_sheets/ds112.pdf, Agosto 2010.
71
[25] Xilinx, “XtremeDSP for Virtex-4 FPGAs User Guide – UG073 (v2.7)”,
http://www.xilinx.com/support/documentation/user_guides/ug073.pdf, Maio 2008.
[26] “Mathworks, MATLAB”, http://www.mathworks.com/.
72
73
Anexos
A1 Diagrama Interno do multiplicador vectorial
Figura A.1 – Diagrama interno do cálculo da parte real do multiplicador vectorial.
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
stage 4 stage 5 stage 6 stage 7
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
stage 2 stage 3
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
stage 1
real(Input_A1)
real(Input_B1)
imag(Input_A1)
imag(Input_B1)
real(Input_A2)
real(Input_B2)
imag(Input_A2)
imag(Input_B2)
real(Input_A3)
real(Input_B3)
imag(Input_A3)
imag(Input_B3)
real(Input_A4)
real(Input_B4)
imag(Input_A4)
imag(Input_B4)
real(Input_A5)
real(Input_B5)
imag(Input_A5)
imag(Input_B5)
real(Input_A6)
real(Input_B6)
imag(Input_A6)
imag(Input_B6)
real(Input_A7)
real(Input_B7)
imag(Input_A7)
imag(Input_B7)
real(Input_A8)
real(Input_B8)
imag(Input_A8)
imag(Input_B8)
±
±
±
±
±
±
±
±
Output real
real(Out_1)
real(Out_2)
real(Out_3)
real(Out_4)
real(Out_5)
real(Out_6)
real(Out_7)
real(Out_8)
74
Figura A.2 – Diagrama interno do cálculo da parte imaginária do multiplicador vectorial.
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
stage 4 stage 5 stage 6 stage 7
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
stage 2 stage 3
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
stage 1
±
±
±
±
±
±
±
±
Output imag
imag(Out_1)
imag(Out_2)
imag(Out_3)
imag(Out_4)
imag(Out_5)
imag(Out_6)
imag(Out_7)
imag(Out_8)
real(Input_A1)
imag(Input_B1)
imag(Input_A1)
real(Input_B1)
real(Input_A2)
imag(Input_B2)
imag(Input_A2)
real(Input_B2)
real(Input_A3)
imag(Input_B3)
imag(Input_A3)
real(Input_B3)
real(Input_A4)
imag(Input_B4)
imag(Input_A4)
real(Input_B4)
real(Input_A5)
imag(Input_B5)
imag(Input_A5)
real(Input_B5)
real(Input_A6)
imag(Input_B6)
imag(Input_A6)
real(Input_B6)
real(Input_A7)
imag(Input_B7)
imag(Input_A7)
real(Input_B7)
real(Input_A8)
imag(Input_B8)
imag(Input_A8)
real(Input_B8)
75
A2 Circuito de Demonstração
Este circuito foi concretizado para verificação do funcionamento na FPGA. Ao projecto
desenvolvido foi acrescentada uma interface RS-232, de modo a visualizar no PC (com recurso
ao Hyper Terminal) os dados das memórias de saída do multiprocessador. A FPGA utilizada
nesta fase foi a Virtex-4 XC4VLX25 (FF668 com speed grade de -12).
O processo de configuração e realização da demonstração é resumido nos seguintes
passos:
1. Através de um cabo série straight-through, ligar a FPGA à porta série do PC;
2. Ligar o cabo de programação JTAG do PC à FPGA;
3. Configurar uma aplicação de comunicação (por exemplo o Hyper Terminal) como indi-
ca a Figura A.3.
Figura A.3 – Configuração da porta série do PC.
4. Ligar a fonte de alimentação da FPGA;
5. Com o ISE aberto, abrir a aplicação iMPACT;
6. Seleccionar “create a new project (.ipf)” (definir um nome para o projecto), clicar em
“OK” e por fim em “Finish”;
7. Na janela “Assign New Configuration File”, clicar em “Bypass” e seleccionar o ficheiro
do circuito de demonstração “demo.bit” gerado pelo ISE;
76
8. Na janela “Device Programming Properties” seleccionar “Device X (FPGA, xc4vlx25)” e
clicar em “OK”;
9. Na janela principal, clicar com o botão direito do rato sobre V4 e seleccionar “Program”;
10. Depois do iMPACT reportar “Program Succeeded”:
a. Premir o botão RESET (SW3);
b. Premir o botão START (SW4);
11. Visualizar o resultado da inversão matricial, proveniente das BRAMs memZi, na sessão
do Hyper Terminal.
NOTA:
Os valores dos elementos das matrizes de entrada são inicializados directamente nas
memX1, memX2, memX3, memX4, memX5, memX6, memX7 e memX8, através de uma atri-
buição genérica (para efeitos de teste). Para visualizar no Hyper Terminal os resultados da
inversão de outras matrizes, basta alterar o generic map das memXi, refazer o “Implement
Design” e o “Generate Programming File” no ISE, e, regressar ao passo 7.
O circuito de demonstração especificado envia os dados através do sinal TXD e lê-os
das memórias de saída (memZ1, memZ2, memZ3 e memZ4). Os dados enviados são lidos das
memórias de saída através dos seus portos A. Na Figura A.4 encontra-se o diagrama de blocos
do circuito e o fluxo de dados entre a FPGA e o PC.
Figura A.4 – Diagrama de blocos do circuito de demonstração com o fluxo de dados entre a FPGA e o PC.
CircuitUART
Component
RS-232
Encode
Hexa Chars
MUX
36 to 4
Hyper Terminal
48 36
PC
Virtex-4 XC4VLX25
12FF668
dataFromMemOutdataTOpc dataFromMemOut_9
TXD
Reset Start
SW3 SW4FPGA pin# [L3] FPGA pin# [T1]
FPGA pin# [AB1]
814E7F6EFF3A2C643
052910E6003CADB9A
0065C...
77
Os dados são recebidos como uma sequência de caracteres hexadecimais. O multiple-
xer MUX 36:4 tem como função decompor as palavras de 36 bits, provenientes dos portos A de
saída das memZs, em 9 palavras de 4 bits para posterior codificação. A unidade Encode Hexa
Chars converte as palavras hexadecimais de 4 bits em bytes, segundo a representação ASCII,
para posterior expedição byte-a-byte através da unidade UART.
O botão de pressão SW4 (RESET) reinicializa a máquina de estados. O botão de pres-
são SW5 (START) inicia o processamento dos dados. O envio dos dados para o PC é
realizado sequencialmente, imediatamente após o término da inversão da matriz.
Segue-se um exemplo de inversão de uma matriz complexa de ordem 8, para uma tole-
rância de 5% de erro overflow, com os respectivos resultados ideais (função do
MATLAB), resultados obtidos no simulador ISE e resultados obtidos no Hyper Terminal, após
implementação na FPGA (os dados encontram-se todos em representação hexadecimal). A
matriz a inverter encontra-se no formato , as matrizes de saída encontram-se no for-
mato .
Figura A.5 – Matriz de entrada na disposição que é introduzida nas memXi.
00aef34d009b7803000b645a00a5c91d0064bc6a00304ea5003126e900575254
00332ca5006793de00c4d6a1008b3d0800609d4900516f0000d25aee00d786c2
00b43958007339c100c1412000add2f200abe0df0049999a00238ef3009b7e91
006831270072ca58002ad42c00b8937500374bc7001e83e4006e0ded00d538ef
00713a9300756d5d003e282400a2c3ca00bdc5d60017525400b240b800311340
00bfaace005da51200dcac080085c28f00ca57a800f096bc00e346dc0041a36e
0005048100a972470071412000f1f8a100852546009381d80018034700bd07c8
00d35a8600c374bc00fd6a1600fe632000f3055300a5460b006425af009d0e56
0054b5dd00c5326100b013a900357a78005902de00aef34d0086809d003e2824
00ca3d7100a0be0e0083afb80037fcb90053dd98007ac08300c4e3bd00950b0f
006c9eed0059a6b5005bf48800b594af00266666008bedfa0087c1be00eadaba
0051893700c5a1cb00e2617c001b15b500abda5100a3a92a006594af008a6b51
0045326100a978d500bc7e28003c779a00960aa6006cfaad00dc710d0044e3bd
0088bac700eed2890096872b001c154d00704817008b717600cef9db00deb1c4
00327525006a8c1500650b0f001e9100004318fc00a4f766007c226800c3f7cf
00170a3d00f902de0027a0f90010481700d5604200a5b57400c14e3c0043c9ef
{{
{ {{ {
{{
real(A11)imag(A11)
imag(A18) real(A18)
real(A81)
real(A88)
imag(A81)
imag(A88)
{{ real(A14)imag(A14)
{ {imag(A15) real(A15)
Colunas 8-5
Colunas 4-1
Linha 2
Linha 3
Linha 5
Linha 7
Linha 6
Linha 8
Linha 4
78
Figura A.6 – Matriz inversa obtida em MATLAB.
Figura A.7 – Matriz inversa obtida em simulação (simulador do ISE).
fe6efe41a006e0192ef1cac0c5b0ee6402c9f5787db94fe5ec18ed0bb63d21afd9f423ae
034702a3f00aa3dabb01ff3db7ef5aa40f4013ef054ad0c0d3efd5e807bd73e0172801eb
09c5806bdf7a300e7bfedb82db201caff7b0f5e3c01ae068c3f12afdd0fdee5ff033f579
fee17f1d7f7e0c03de0405c25cf0d083dc6bf936c26aeeeb33db4f0025ffea405d681729
f34001c4e03bec057dfc227dc51fd86c1354fcf4bd303100fc25240d2f01205f46c7e986
fc1cfcfc800754080f01f2c25acfc067efa8052dffcaffd1ac2147051d40f77f7d1ff337
fa48817310bb800a08084640d6cf8dcff9fafed7033d1fedb7dea4f38a3cd3a086380dc2
09b67f076fc463faa0014abd016fa0cc0df201d77d1b1f16e812b6056c8668608c6ff21a
{{ real(A-1
11)imag(A-1
11)
{ {imag(A-1
88) real(A-1
88)
{{ real(A-1
18)imag(A-1
18)
Linha 2
Linha 3
Linha 5
Linha 7
Linha 6
Linha 8
Linha 4
{ {imag(A-1
81) real(A-1
81)
Linha 1
{{ real(A-1
11)imag(A-1
11)
{{ real(A-1
18)imag(A-1
18)
{ {
imag(A-1
88) real(A-1
88)
{ {
imag(A-1
81) real(A-1
81)
Linha 2
Linha 3
Linha 5
Linha 7
Linha 6
Linha 8
Linha 4
Linha 1
79
Figura A.8 – Matriz inversa obtida no Hyper Terminal, após implementação na FPGA.
Na Figura A.5 encontra-se a matriz complexa de ordem 8 de entrada, segundo a disposi-
ção em que é escrita nas memórias de entrada memXi (uma linha por memória). Na Figura A.6
encontra-se a matriz inversa obtida no MATLAB, com uma disposição propositadamente igual à
disposição obtida na simulação (simulador do ISE). Na Figura A.7 encontra-se a matriz inversa
obtida no simulador do ISE. Como se pode verificar, os valores obtidos na simulação do circuito
são bastante próximos dos valores obtidos no MATLAB. Por exemplo, para o primeiro elemento
da matriz inversa, (parte imaginária concatenada com a parte real) temos X„FE6EFE41A‟ e
X‟FE6F7E418‟, no MATLAB e na simulação, respectivamente. Por fim, na Figura A.8 encontra-
se a matriz inversa obtida no Hyper Terminal. Constata-se que todos os valores coincidem com
os resultados obtidos em simulação. Note-se ainda que os dados obtidos no Hyper Terminal
vêm com uma disposição Hexadecimal simétrica com intervalos de 36 bits, devido ao modo de
leitura das memórias. Por exemplo, o primeiro elemento da matriz (X‟FE6F7E418‟) aparece
como X„814E7F6EF‟.
{{ imag(A-1
11)real(A-1
11) {{ imag(A-1
18)real(A-1
18)
{real(A-1
88) imag(A-1
88)real(A
-181) imag(A
-181){{ {