Centro Universitário Positivo - UnicenP
Computação Configurável utilizando
Processamento Paralelo
Curitiba - PR
2004
Centro Universitário Positivo - UnicenP
Núcleo de Ciências Exatas e Tecnológicas – NCET
Engenharia da Computação
Rafael Nakatani Rucinski
Computação Configurável utilizando
Processamento Paralelo
Monografia de Projeto Final do Curso
de
Engenharia
da
Computação
(Matutino) do UnicenP.
Orientador: Prof. Edson Pedro Ferlin.
Curitiba - PR
2004
2
Termo de Aprovação
Rafael Nakatani Rucinski
Computação Configurável utilizando
Processamento Paralelo
Monografia aprovada como requisito parcial à conclusão
do Curso de Engenharia da Computação (Matutino) do Centro
Universitário Positivo, pela seguinte banca examinadora:
Prof. Edson Pedro Ferlin (Orientador)
Prof. Álvaro Cantieri
Prof. Valfredo Pilla Jr
3
Sumário
Lista de Figuras.............................................................................................................................. 06
Lista de Tabelas ............................................................................................................................. 08
Lista de Siglas e Abreviaturas........................................................................................................ 09
Resumo........................................................................................................................................... 10
Abstract .......................................................................................................................................... 11
1 – Introdução ................................................................................................................................ 12
2 – Estudo Teórico ......................................................................................................................... 14
2.1 – Processamento Paralelo .................................................................................................. 14
2.2 – Computação Configurável .............................................................................................. 21
2.3 – Fourier............................................................................................................................. 23
2.3.1 – A Série de Fourier .................................................................................................. 24
2.3.2 – A FFT e a DFT....................................................................................................... 26
3 – Descrição.................................................................................................................................. 29
3.1 – Descrição Geral............................................................................................................... 29
3.2 – Hardware......................................................................................................................... 30
3.3 – Etapas de Desenvolvimento ............................................................................................ 30
4 – Hardware.................................................................................................................................. 31
4.1 – Microntrolador 8031 ....................................................................................................... 34
4.1.1 – Sinais de Controle .................................................................................................. 35
4.2 – Kit de PLD da Altera ...................................................................................................... 39
4.2.1 – Diagrama em Blocos.............................................................................................. 41
5 – Software do Computador ......................................................................................................... 44
5.1 – Algoritmo FFT ................................................................................................................ 48
6 – Funcionamento do Sistema ...................................................................................................... 49
7 – Recursos Necessários............................................................................................................... 51
8 – Custos e Viabilidade ................................................................................................................ 52
9 – Testes e Validação do Projeto.................................................................................................. 54
10 – Resultado................................................................................................................................ 56
11 – Conclusão............................................................................................................................... 61
Referências Bibliográficas ............................................................................................................. 63
Anexo I – Fluxogramas.................................................................................................................. 65
Anexo II – Resumo do DataSheet dos demais Componentes........................................................ 73
4
Anexo III – Listagem dos Programas ............................................................................................ 77
Anexo IV – Artigo Técnico ........................................................................................................... 91
Anexo V – Manual do Usuário ...................................................................................................... 98
Anexo VI – Manual Técnico....................................................................................................... .103
5
Lista de Figuras
Figura 1 – Evolução dos diversos tipos de computadores no decorrer do tempo...........................14
Figura 2 – Arquitetura SISD (Single Instruction Single Data).......................................................16
Figura 3 – Arquitetura SIMD (Single Instruction Multiple Data)..................................................17
Figura 4 – Arquitetura MISD (Multiple Instruction Single Data)..................................................18
Figura 5 – Arquitetura MIMD (Multiple Instruction Multiple Data).............................................19
Figura 6 – Gráfico de exemplo da Lei da Amdahl..........................................................................20
Figura 7 – Estrutura básica de um sistema configurável ................................................................23
Figura 8a – Função seno .................................................................................................................24
Figura 8b – Função cosseno............................................................................................................24
Figura 9a – Soma das funções seno e cosseno................................................................................25
Figura 9b – Uma função periódica mais complexa.........................................................................25
Figura 10 – A Função f(x) representa a soma de todas as funções.................................................25
Figura 11 – Amostragem em função do tempo e seu espectro (DFT) ............................................26
Figura 12 – Estrutura geral do sistema lógico ................................................................................29
Figura 13 – Sistema Dual................................................................................................................30
Figura 14 – Estrutura Geral do Sistema..........................................................................................31
Figura 15 – Foto do Projeto Físico .................................................................................................32
Figura 16 – Esquemático do Projeto...............................................................................................33
Figura 17 – Pinagem do chip do microntrolador 8031 ...................................................................35
Figura 18 – Esquema de Multiplexação da porta P0 ......................................................................35
Figura 19 – Ilustração da utilização da porta P3.............................................................................36
Figura 20 – Ilustração da ligação da EPROM no 8031 ..................................................................37
Figura 21 – Kit do Altera ................................................................................................................39
Figura 22 – Diagrama de Blocos do PLD EPF10K20RC240-4......................................................41
Figura 23 – Diagrama em Blocos do Modelo Distribuído..............................................................42
Figura 24 – Diagrama em Blocos do Modelo Compartilhado ........................................................43
Figura 25 – Interface gráfica do software .......................................................................................44
Figura 26 – Fluxograma do Funcionamento Geral do Sistema ......................................................47
Figura 27 – Butterfly.......................................................................................................................48
Figura 28 – Exemplo 1 da Butterfly................................................................................................48
Figura 29 – Exemplo 2 da Butterfly................................................................................................48
Figura 30 – Cronograma do Projeto................................................................................................53
6
Figura 31 – Gráfico do desempenho entre os modelos de processamento .....................................57
Figura 32 – Gráfico do SpeedUP ....................................................................................................57
Figura 33 – Gráfico que demonstra a diferença entre o tempo real e o ideal .................................58
Figura 34 – Gráfico do SpeedUP entre os modelos duais ..............................................................59
Figura 35 – Tela do MatLab com o Resultado Obtido ...................................................................60
Figura 36 – Resultado obtido pelo software ...................................................................................60
7
Lista de Tabelas
Tabela 1 – Resumo das funções especiais do porta P3 ...................................................................37
Tabela 2 – Características dos PLDs ..............................................................................................40
Tabela 3 – Valores Correspondentes ..............................................................................................45
Tabela 4 – Custos do Projeto ..........................................................................................................52
Tabela 5 – Tempos obtidos para o cálculo da FFT.........................................................................56
Tabela 6 – Resultado do Sistema x MatLab ...................................................................................59
8
Lista de Siglas e Abreviaturas
A/D – Analógico/Digital
AHDL – Altera Hardware Description Language
ALU – Arithmetic Logic Unit
ASIC – Application-Specific Integrated Circuit
CPLD – Complex Programmable Logic Devices
CPU – Central Process Unit
E/S – Entrada/Saída
EPROM – Erasable Programmable Read-Only Memory
FFT – Fast Fourier Transform
FPGA – Field Programmable Gate Array
LAB – Logic Array Block
LE – Logic Element
MIMD – Multiple Instruction Multiple Data
MISD – Multiple Instruction Single Data
MMX – MultiMedia eXtention
NVRAM – Non-Volatile Random Access Memory
PAL – Programmable Array Logic
PIA – Programmable Interconnect Array
PLD – Programmable Logic Device
PROM – Programmable Read-Only Memory
RAM – Random Access Memory
ROM – Read-Only Memory
SIMD – Single Instruction Multiple Data
SISD – Single Instruction Single Data
VLSI – Very Large Scale Integration
9
Resumo
Ultimamente nota-se o crescente interesse na computação configurável, pois até pouco
tempo atrás só o software sofria alterações e o hardware estava limitado pela aplicação. O
desempenho dependia muito do software e agora com essa nova tecnologia pode se, por exemplo,
conseguir uma otimização do hardware devido ao fato de que podemos configurá-lo de acordo com
a necessidade.
Na área do processamento paralelo também há muita pesquisa, principalmente, pelo fato
de que se pode atingir um alto grau de processamento sem há necessidade de se criar um projeto
para um novo processador. O projeto se baseia no processamento da FFT (Fast Fourier Transform –
Transformada Rápida de Fourier), utilizando o processamento paralelo, com modelo distribuído ou
compartilhado da memória, e utiliza-se a computação configurável para comutar entre esses
modelos de configuração.
O sistema se compõe basicamente de dois microcontroladores 8031, um PLD
(Programmable Logic Device) da Altera e uma memória RAM (Random Access Memory). O PLD
promove a interligação dos componentes, bem como o controle de seu funcionamento. A
arquitetura utilizada para o processamento em paralelo é do tipo MIMD (Multiple Instruction
Multiple Data). O algoritmo de FFT e rotina de comunicação serial estarão armazenadas na
EPROM (Erasable Programmable Read Only Memory) a qual é acessada diretamente pelo
processador, os modelos de funcionamento do sistema, o distribuído e o compartilhado, são
configurados no PLD.
Mesclando-se as duas idéias, a da computação configurável e o do processamento
paralelo, têm-se inúmeras aplicações possíveis, tais como manipulação e processamento de imagens
digitais, compactação e compressão de dados, criptografia, entre outras e tudo isso com um custo
bem reduzido devido à possibilidade de se utilizar o mesmo hardware para diversas tarefas e um
alto poder de processamento sem a necessidade de se investir em um novo projeto de processador.
10
Abstract
Lately we have noticed a growing interest in configurable computing, because formerly
only the software was changed and the hardware was limited by application. The performance
relied on software e now with this new technology we could, for instance, achieve a hardware
optimization due the fact that we can configured it according to our need.
There is also a lot of research regarding parallel processing, mainly, by the fact that we
could achieve a massive processing without need to create a project to brand new processor. The
project is based on FFT’s (Fast Fourier Transform) processing, using parallel processing, with
distributed and shared model, and it uses configurable computing to change between the
configuration models.
The system consist basically of two 8031 microprocessors, a Altera’s PLD
(Programmable Logic Device) and a RAM (Random Access Memory). The PLD promote the
components interconnection, as well as its functioning control. The architecture used to the parallel
processing is MIMD (Multiple Instruction Multiple Data). The FFT algorithm and serial
communication routines are stored into the EPROM (Erasable Programmable Read Only Memory),
which is accessed directly by microprocessor, the system’s functioning models, the distributed and
shared, are configured into the PLD.
Merging both ideas, configurable computing and parallel processing, we have countless
possible applications, such as digital imaging processing and manipulation, data compression,
cryptography, and many more, and all of that with a reduced cost due the possibility to use the same
hardware to several tasks and a massive processing without need to invest in a project to a brand
new processor.
11
1 – Introdução
O tema principal do projeto é o desenvolvimento de um sistema de computação
configurável com dois processadores, usando microcontroladores 8031, configurável em dois
modos de compartilhamento da memória: compartilhada ou distribuída para executar aplicações em
paralelo. O sistema executará em paralelo um algoritmo o de FFT (Fast Fourier Transform). A
interconexão entre os processadores e a memória é realizada por PLDs (Programmable Logic
Devices) programados usando AHDL (Altera Hardware Description Language) da Altera.
Este projeto utiliza os conceitos de processamento paralelo, processadores, arquitetura de
computadores, lógica programável, séries de Fourier e as transformada de Fourier.
O sistema permitirá a reconfiguração rápida da arquitetura sem modificar o hardware em
termos físicos (ligações) apenas de forma lógica dentro do PLD. O elemento integrador de todos os
componentes do sistema é o PLD.
Este tipo de projeto [CARVALHO, 2002] é um dos segmentos que está tendo grande
enfoque atualmente na área da computação, pois utilizando-se o conceito de processamento paralelo
podemos aumentar o poder de processamento dos computadores. Com isso se evita o
desenvolvimento de um novo processador com tal capacidade de processamento diminuindo os
custos.
Com o advento da computação configurável, que permite a readequação dos sistemas
dinamicamente ou estaticamente, visando um melhor desempenho e um melhor aproveitamento da
arquitetura para uma determinada aplicação.
O ponto forte desse projeto é a utilização da computação configurável, pois através dela
pode-se adaptar a maneira de como o hardware se comporta de acordo com o problema encontrado
e também aumentar a vida útil na qual o produto permanece no mercado. Assim como nos sistemas
de softwares que recebem atualizações constantes, o hardware implementado em dispositivos
reconfiguráveis também pode usufruir desta estratégia, possibilitando uma melhor configuração e
como conseqüência um melhor desempenho.
12
Objetivo Geral
Objetivo geral do projeto é construir um sistema paralelo dual reconfigurável o qual
executa a transformada de Fourier.
O sistema é composto por dois processadores 8031, cada um com sua memória de
programa, configurável nos modos distribuído ou compartilhado de memória por meio de um
dispositivo lógico programável.
Os objetivos específicos são:
•
Dominar a tecnologia de sistemas reconfiguráveis;
•
Compreender o funcionamento interno do PLD bem como a representação das
estruturas de dados, a AHDL (Altera Hardware Description Language);
•
Entender e aplicar o conceito de processamento paralelo;
•
Aplicar o estudo de processamento de sinais com base na Transformada Rápida
de Fourier (FFT) para captação, aplicação do algoritmo de FFT e por fim a
função que representa o sinal;
•
Desenvolver um hardware capaz de captar um sinal analógico, aplicar um
algoritmo o de FFT, calculá-lo paralelamente utilizando os conceitos de
lógica configurável;
•
Criar um software capaz de interagir com o hardware e também como uma
interface amigável entre o usuário e o sistema.
13
2 - Estudo Teórico
Neste capítulo está sendo abordado todo o estudo inicial necessário para o
desenvolvimento do projeto e são eles, o conceito de processamento paralelo, uma explicação sobre
a computação configurável, estudo das Séries e Transformada de Fourier, o microcontrolador 8031,
o PLD da Altera, e bem como o estado da arte de cada tecnologia envolvida no projeto.
2.1 - Processamento Paralelo
Com a crescente demanda por mais poder de processamento recentemente optou-se por
construir computadores com mais de um processador, estes computadores tem um maior poder de
processamento sem a necessidade de um único "chip" potente, ou seja, pode-se obter um
computador com uma capacidade de processar um maior número de instruções sem ser necessário o
projeto de um processador revolucionário com tal capacidade.
Figura 1 – Evolução dos diversos tipos de computadores
Fonte: Parallel Computer Architecture [CULLER, 1999]
Como mostrado na figura 1 percebe-se que a desempenho dos microprocessadores vem
crescendo a uma taxa de 50% por ano desde metade da década de 80. Os mais tradicionais
mainframes e supercomputadores têm desempenho crescente em torno de 25% [CULLER, 1999] ao
ano neste mesmo período. Como resultado, estamos vendo que o processador é o que mais se
enquadra para o processamento paralelo e tornando se também o líder em desempenho.
Porém computadores com mais de um processador possuem arquiteturas mais complexas,
ou seja, há a necessidade de programas especificamente escritos para estes computadores de forma
14
a aproveitar todo o seu potencial, pois a maioria absoluta dos programas até hoje se destinam a
computadores com apenas um processador, ou seja, monoprocessados.
Os principais modelos de arquitetura de computadores paralelos são:
•
Computador com memória compartilhada, onde os processadores acessam uma
única memória compartilhada;
•
Computador com memória distribuída, onde cada processador possui sua
própria memória local.
No modelo de memória compartilhada, a mesma memória é acessível a múltiplos
processadores, contudo deve-se tomar o cuidado que para uma mesma posição na memória não seja
modificada enquanto outro processador a esteja acessando. O ponto forte do modelo compartilhado
é maior facilidade de programação.
No modelo de memória distribuída, a memória é fisicamente distribuída entre os
processadores, e cada memória local é acessível apenas pelo seu processador. Esta abordagem
implica na decomposição dos dados para cada processador, e um posterior agrupamento de dados e
grande vantagem dessa arquitetura é sua alta escalabilidade.
A vetorização de um determinado código deve ser realizada antes de se considerar a
paralelização. O alto desempenho de computadores vetoriais reside na capacidade de execução de
somas ou multiplicações simultaneamente. Para realizar essas operações não deve haver
dependência de dados.
Na primeira arquitetura toda memória do sistema pode ser acessada por cada processador
individualmente, na segunda cada processador possui a sua própria memória quando um
processador necessita de informações armazenadas na memória de outro processador estes "trocam
mensagens" usando pinos de controle para tal.
Segundo [FERLIN, 1998a] podemos dividir o processamento paralelo nas seguintes
formas quanto à programação:
•
Paralelização explícita, onde o programador é quem informa as tarefas que
podem ser executadas em paralelo, e a forma como elas devem trabalhar.
•
Paralelização implícita, onde o paralelismo é baseado apenas na semântica de
alguns comandos e construções.
•
Paralelização automática, onde o programador utiliza uma linguagem
seqüencial tradicional, e o compilador é responsável por extrair automaticamente o
paralelismo.
15
É muito difícil a tarefa de classificar computadores paralelos. Já foram feitas diversas
sugestões. Porém, a que trouxe melhores resultados e ainda hoje é usada, é a proposta por Flynn
[ZELENOVSKY, 2004]. Essa classificação está baseada em dois conceitos: fluxo de instruções e
fluxo de dados. O fluxo de instruções está relacionado com o programa que o processador executa,
enquanto que o fluxo de dados está relacionado com os operandos manipulados por essas
instruções. O fluxo de instruções e o fluxo de dados são considerados independentes e por isso
existem quatro combinações possíveis.
Nas figuras 2 a 5 apresentamos os diagramas de blocos para essas quatro combinações. A
sigla MM representa o “Módulo de Memória” e a sigla EP representa o “Elemento de
Processamento”, ou seja, o processador.
•
SISD - Instrução Única, Dado Único (Single Instruction Single Data)
Essa arquitetura é usada nos computadores chamados pessoais ou desktop, onde há
somente um processador, ou seja, o sistema é monoprocessado estas arquiteturas seguem o proposto
por Von Neumann [ZELENOVSKY, 2004] e é por isso denominada de “Arquitetura de Von
Neumann”, também chamado de computador serial. Temos um único fluxo de instruções (SI),
caracterizado pelo contador de programa do processador, que opera sobre um único dado (SD) por
vez. A figura 2 apresenta um diagrama de blocos ilustrativo desta arquitetura.
Figura 2 - Arquitetura SISD (Single Instruction Single Data)
16
•
SIMD - Única Instrução, Múltiplos Dados (Single Instruction Multiple Data)
A arquitetura mostrada na figura 3 apresenta N processadores (EP), sendo que cada
processador trabalha sobre um dado distinto, que vem de cada um dos N módulos de memória
(MD). O ponto importante é que todos os processadores (EPi) trabalham sincronizados e executam
todos a mesma instrução, ou seja, cada instrução é passada, ao mesmo tempo, para os N EPs.
Assim, os processadores executam a mesma instrução, porém sobre um dado diferente. Como é
fácil de concluir, um computador com essa arquitetura é capaz de operar um vetor de dados por vez.
Por esse motivo dá-se o nome de Computador Vetorial, ou “Array Processor”.
Figura 3 - Arquitetura SIMD (Single Instruction Multiple Data)
Um grande exemplo desta arquitetura são os famosos supercomputadores Cray [MORON,
2004]. Outro exemplo é o conjunto de instruções MMX (MultiMedia eXtension). Eles são muito
usados quando um mesmo programa deve ser executado sobre um grande volume de dados, como é
o caso de prospecção de petróleo. Note que essa arquitetura não sofre com problemas de
sincronização, pois existe um único programa em execução.
17
•
MISD - Múltiplas Instruções, Dado Único (Multiple Instruction Single Data)
Essa arquitetura é um pouco mais difícil de ser explicada. Tentemos imaginar como é que
se pode fazer múltiplas operações (MI) sobre um mesmo dado (SD). Os próprios pesquisadores têm
opiniões divergentes sobre esse assunto. De forma simples, vamos estudar a figura 4, onde pode ser
visto que, apesar de existir um único fluxo de dados, existem vários dados sendo operados ao
mesmo tempo. A figura 4 é conhecida na literatura especializada com o nome de “pipeline” ou linha
de produção.
A figura 4 mostra que N processadores operam sobre K diferentes dados. Podemos fazer
uma analogia com uma linha de montagem de carros, onde pessoas trabalham simultaneamente
sobre um mesmo carro. Voltando aos computadores temos um único fluxo de dados (SD), porém
vários instruções (MI) processam esses dados, ao mesmo tempo.
Figura 4 - Arquitetura MISD (Multiple Instruction Single Data)
•
MIMD - Múltiplas Instruções, Múltiplos Dados (Multiple Instruction Multiple Data)
Essa é a arquitetura que esperaríamos encontrar em um computador paralelo e é a qual
implantamos em nosso sistema. Temos vários dados (MD) sendo operados por vários instruções
(MI), simultaneamente. Essa é a arquitetura mais usada pelos modernos supercomputadores. Nesse
caso, é importante que os processadores possam se comunicar entre si para fazer a sincronização e
trocar informações. Além disso, é necessário ter uma memória, chamada de global, onde todos
processadores possam disponibilizar, para os demais, os resultados intermediários. A figura 5
apresenta uma solução genérica para essa arquitetura MIMD.
18
Figura 5 - Arquitetura MIMD (Multiple Instruction Multiple Data)
Note que agora temos N processadores e dois tipos de memória: a local e a global. A
memória global pode ser acessada por qualquer um dos processadores, por isso existe a chamada
“Estrutura de Comunicação”, que disponibiliza a memória global para qualquer um dos
processadores. Uma única memória global criaria um grande gargalo, pois só um processador
poderia acessá-la por vez. Por isso, a figura 5 apresenta duas memórias globais e, com isso, dois
processadores podem ser atendidos ao mesmo tempo.
Para evitar uma quantidade excessiva de acessos a essa memória, os processadores
possuem a chamada memória local, onde está a maioria das suas instruções e dos dados que devam
ser operados. Essa memória local evita que a estrutura de comunicação se transforme num enorme
gargalo. Os processadores precisam trocar informações e, no caso, a própria estrutura de
comunicação se encarrega desta tarefa.
Uma simples análise da arquitetura MIMD, a figura 5, mostra que agora existe um fluxo
de múltiplos dados (MD) sendo operado por um fluxo de múltiplas instruções (MI). Se já é difícil
escrever e depurar programas seriais, imagine fazer isso em um computador com, por exemplo,
1024 diferentes programas trabalhando sobre 1024 conjunto de dados diferentes.
Apesar do quanto promissor a computação paralela possa parecer, ela não é uma solução
para todo o problema de processamento. Existem tarefas que são eminentemente seqüenciais e que
não tiram proveito de um computador paralelo. Assim, é comum que as tarefas a serem executadas
possuam porções paralelizáveis e porções que precisam ser executadas de forma seqüencial. Note
que um computador paralelo operando de forma seqüencial é um grande desperdício, pois enquanto
um processador trabalha no trecho serial, todos os demais ficam ociosos.
19
Abordando esse tema, Amdahl propôs uma expressão para esse problema, que ficou
conhecida como Lei de Amdahl [ZELENOVSKY, 2004]. Imaginemos uma tarefa que executada em
um computador seqüencial gaste "T" segundos. Porém, quando preparada para execução em um
computador paralelo, ela tem uma porção que obrigatoriamente deve ser executada de forma serial.
Digamos que "p" represente a porção serial, em conseqüência "(1-p)" representa a porção
paralelizável. Quando executado em um computador paralelo com N processadores, o tempo gasto
será igual à pT + (1 – p) . T / N.
Somente o trecho paralelizável tira proveito dos "N" processadores, e o Ganho de
Processamento (GP) é dado pela equação (1):
GP =
1
T
ou GP =
(1 − p )
(1 − p ) ⋅ T
pT +
p+
N
N
(1)
que é a forma consagrada da Lei de Amdahl. Deve-se notar que estamos ignorando os custos de
sincronização e de troca de parâmetros entre os processadores.
Ganho no Processamento
100
1
90
2
80
70
1 - p=0%
2 - p=0,1%
3 - p=1%
60
3
50
4 - p=10%
40
30
20
4
10
0
0
20
40
60
80
Número de Processadores
100
Figura 6 – Gráfico de exemplo da Lei da Amdahl
O gráfico da figura 6 apresenta quatro curvas. A curva 1 é a de uma tarefa 100%
paralelizável, ou seja, p = 0. Nesse caso o aumento do número de processadores reflete linearmente
no desempenho. A curva 2 ilustra o caso de p = 0,001 ou 0,1%, ou seja, apenas 0,1 % das tarefas
não puderam ser paralelizadas. A curva 3 é para o caso onde 1% (p = 0,01) da tarefa precisa ser
executada de forma serial. Nota-se uma grande queda de desempenho para grande quantidade de
20
processadores. A curva 4 representa o caso de uma tarefa onde 10% (p = 0,1) precisam ser
executadas de forma serial. Nota-se que há uma saturação, e que o aumento de processadores, por
exemplo, de 50 para 100 processadores, pouca diferença traz para o desempenho.
Devem ser ressaltados dois pontos importantes. O primeiro é que, exceto para o caso de
p = 0, todos os demais casos apresentarão saturação em algum ponto. Se p é pequeno, a saturação só
ocorre com um elevado número de processadores. O segundo ponto é que, contrastando com o
gráfico da figura 6, a Lei de Amdahl não prevê queda no desempenho, no pior caso, ele fica fixo em
algum valor.
2.2 - Computação Configurável
O FPGA (Field Programmable Gate Array) é o resultado da convergência de duas
tecnologias, o PLD e o ASIC (Application-Specific Integrated Circuit). A história do PLD começou
com os primeiros dispositivos de PROM (Programmable Read-Only Memory) e adicionada à
versatilidade com o PAL (Programmable Array Logic) o qual permitiu um número muito maior de
entradas e a inclusão de registradores internos. Esses dispositivos continuam a crescer em tamanho
e quantidade de portas lógicas por mm2. Nesse período, o ASIC tem sido um dispositivo poderoso,
mas seu uso requer geralmente um investimento considerável de tempo e dinheiro. Tentativas para
reduzir isso foram conseguidas através da modularização dos elementos do circuito como nas
células base do ASIC e através da padronização das camadas de máscaras pela pioneira empresa
Ferranti Electronics [RIVER, 2004] com a Uncommitted Logic Array, um tipo de circuito integrado
semi-customizável nos quais as portas lógicas não estão interligadas, e estão são conectadas
conforme a aplicação de cada fabricante. O passo final foi combinar essas duas tecnologias com um
mecanismo que pudesse ser programado usando fusíveis, antifusíveis ou células de memória como
nos dispositivos Altera [VILLASENOR, 2004] no meio dos anos 80. Os circuitos resultantes são
muito parecidos em potencialidade e aplicação com os maiores PLDs. Além de computação
configurável, os PLDs são usados como controladores, codificadores, decodificadores, e para
prototipação de circuitos e microprocessador VLSI (Very Large Scale Integration) customizados.
O primeiro fabricante desses dispositivos foi a Xilinx e seus dispositivos permanecem um
dos mais populares entre companhias e grupos de pesquisa. Há mas outros fabricantes nessa área
incluem a Atmel, AMD e Motorola. Neste projeto utilizamos os dispositivos lógicos da Altera.
Pode notar-se o crescimento acentuado do interesse em computação configurável, este
interesse crescente tem sua causa atribuída diretamente ao também crescente nível de integração de
componentes em um circuito integrado VLSI. A flexibilidade proporcionada pela computação
21
configurável é outro fator relevante. Através dela pode-se adaptar a maneira de como o hardware se
comporta de acordo com o problema encontrado e também aumentar a vida útil na qual o produto
permanece no mercado por exemplo. Assim como nos sistemas de softwares que recebem
atualizações constantes, o hardware implementado em dispositivos reconfiguráveis também pode
usufruir desta estratégia se adequando melhor à aplicação.
Desde a sua introdução os PLDs baseados em RAM vem prometendo ao desenvolvimento
de hardware a mesma flexibilidade que o desenvolvimento de software. O advento e a vertiginosa
ascensão de complexidade e uso de dispositivos de hardware configurável geram a necessidade de
novos paradigmas de projeto em todos os níveis de abstração, desde os inferiores aos mais
abstratos. Sistemas reconfiguráveis são aqueles onde o hardware pode, após sua fabricação, ter
alterada, ainda que parcialmente, sua funcionalidade [CARVALHO, 2003].
Um PLD baseado em RAM é um dispositivo naturalmente configurável. De uma maneira
grosseira, pode-se pensar num PLD como um hardware customizável a cada instante pelo usuário
para executar diferentes funções, através do preenchimento dos bits da memória de controle. A este
processo de personalizar o hardware a cada instante, dá-se o nome de reconfiguração. Em um dado
instante, pode-se modificar o comportamento de um hardware mudando sua lógica interna,
realizando uma reconfiguração do hardware. Dessa forma, uma reconfiguração é o processo de
alterar uma dada configuração.
Os dois dos tipos de Dispositivos Lógicos Programáveis (Programmable Logic Devices PLDs) mais empregados são os CPLDs (Complex Programable Logic Devices) e os PLDs. Em
geral, PLDs são dispositivos de maior porte que CPLDs.
Genericamente, uma configuração em um dispositivo/sistema de hardware configurável é
um conjunto de bits carregado em posições de uma memória de controle interna do dispositivo
(FPGA/CPLD) para determinar as funções e a estrutura do hardware que se deseja construir.
Alguns dispositivos podem ser reconfigurados apenas totalmente, ou seja, todos os itens
configuráveis do dispositivo devem receber uma configuração antes deste poder ser utilizado.
Outros podem ser reconfigurados parcialmente, onde alguns dos bits de configuração, e não todos,
são alterados de cada vez. Estes são chamados dispositivos parcialmente reconfiguráveis.
As reconfigurações podem ser dinâmicas ou estáticas [RIVER, 2004]. Se o sistema não
necessita ter seu processamento interrompido para que uma reconfiguração seja realizada então ele
é dito dinâmico, caso contrário, é dito estático.
Pode-se classificar dispositivos reconfiguráveis de acordo com o tamanho do grão
configurável. Entende-se por grão a menor unidade configurável da qual um dispositivo é
22
composto. Modernamente, se as configurações se dão no nível de bits diz-se que o dispositivo
possui grau pequeno. Se estas se dão em unidades maiores, tais como os Uncommitted Logic
Arrays, diz-se que o dispositivo possui grau médio. Quando estas se dão em unidades ainda
maiores, tais como um microprocessador inteiro, diz-se que o dispositivo é de grau grande.
Os PLDs estão entre os dispositivos de mais alto grau de integração, ultrapassando
dezenas de milhões de transistores em um único chip (System-on-a-Chip ou SoC). Isto habilita que
eles sirvam de suporte a implementação de sistemas completos em um único chip. As vantagens do
uso de SoCs são: a diminuição do tempo de desenvolvimento que reduz o tempo para o produto
chegar ao mercado, o alto desempenho devido ao fato de todos os componentes do sistema estarem
no mesmo circuito integrado, onde os sinais são transmitidos mais rapidamente, pois as distâncias
são menores, o tamanho reduzido do produto e sua baixa potência dissipada. Para permitir a
implementação eficiente em termos de desenvolvimento de SoCs é necessário empregar ao máximo
técnicas de reutilização de hardware.
A estrutura geral de um sistema configurável [CARVALHO, 2002], como mostrado na
figura 7, é composta por três módulos principais: um Repositório de Configurações, um
Controlador de Configurações e uma Aplicação. De uma forma simplificada, o Controlador de
Configurações e responsável por gerenciar os modelos de configuração disponíveis, contidos no
Repositório de Configurações, o qual é memória principal ou secundária, onde ficarão armazenadas
as possíveis configurações do sistema, geralmente em um dispositivo como o PLD de acordo com a
execução da aplicação. O Controlador de Configurações pode ser implementado ou em hardware,
ou em software ou em um misto de hardware e software.
Repositório de
Configurações
Controlador de
Configurações
Aplicação
Figura 7 - Estrutura básica de um sistema configurável
2.3 – Fourier
A Transformada de Fourier (FFT) é uma ferramenta largamente empregada em
processamento de sinais, processamento de sons e em processamento de imagens. Denominada
assim em homenagem ao físico francês Jean Baptiste Joseph Fourier (1768-1830) [FOURIER,
2004a], a FFT decompõe um sinal em suas componentes elementares seno e cosseno. A FFT
aplicada, por exemplo, a uma imagem no domínio espacial gera uma informação no domínio da
freqüência, em que cada ponto, definido por um vetor, representa uma dada freqüência contida no
domínio espacial da imagem.
23
As aplicações referentes à FFT são inúmeras: filtragem, segmentação, reconhecimento de
padrões, descrição de imagens, compressão e reconstrução constituem algumas delas. A
transformada de Fourier representa a soma de uma série de formas de onda senoidais com diferentes
amplitudes, fase e freqüência.
2.3.1 – A Série de Fourier
A figura 8a mostra o gráfico da função sen(x), onde x é um ângulo medido em radianos.
Essa função é periódica, isto é, sua forma se repete a cada período. No caso da figura 8a, a função
seno se repete a cada período de 2π. O valor máximo da função é 1.
a)
b)
Figura 8 – a) Função seno, b) Função cosseno
A função cosseno, que é mostrada na figura 8b, também é periódica, com o mesmo
período e amplitude que o seno, mas é deslocada de π/2 em relação ao seno. Isso é fácil de constatar
examinando os gráficos. Tecnicamente, diz-se que as funções seno e cosseno diferem na fase e a
diferença de fase entre elas é de π/2.
Na figura 9a, vemos a soma das funções sen(x) e cos(x) e que é obtida traçando-se, em
cada ponto x, a soma dos valores de sen(x) e cos(x) nesse ponto. Por exemplo, o ponto da curva na
região x=5,5 é zero pois o valor de sen(x) é igual e de sinal oposto ao valor de cos(x) nesse ponto.
24
a)
b)
Figura 9 – a) Soma das funções seno e cosseno, b) Uma função periódica mais complexa
Uma função periódica pode ser bem mais complicada que uma senóide. Veja o exemplo
da função f(x) mostrada na figura 9b. Essa curva também é periódica, mas não é apenas um seno ou
um cosseno.
Fourier [FOURIER, 2004b] descobriu, no início do século 19 a função matemática dos
sinais. Segundo ele, qualquer função periódica, por mais complicada que seja, pode ser representada
como a soma de várias funções seno e cosseno com amplitudes, fases e períodos escolhidos
convenientemente.
Existem alguns requisitos para que essa afirmação seja totalmente verdadeira. Mas, eles
são tão poucos e especializados que podemos ignorá-los nesse relato simplificado.
A figura 10 mostra a mesma curva da figura acima juntamente com duas funções seno e
duas funções cosseno. A curva original é a soma dessas quatro funções. Note que as amplitudes e
períodos das ondas componentes são diferentes entre si.
Figura 10 – A função f(x) representa a soma de todas as funções
25
Matematicamente, a decomposição da função f(x) na curva acima é a equação (2).
f(x) = 2sen(x) + 7sen(2x) + 5cos(3x) + 4cos(5x)
(2)
Em resumo, qualquer função f(x) pode, segundo Fourier, ser escrita na forma da soma de
uma série de funções seno e cosseno conforme a equação (3).
f(x) = a0 + a1sen(x) + a2sen(2x) + ... + b1cos(x) + b2cos(2x) + ...
(3)
Resta obter uma forma de calcular os coeficientes a0, a1, ..., b0, b1, ..., de cada termo da
série. Esses coeficientes, como vemos, são as amplitudes de cada onda componente do
desenvolvimento em série. Pois foi isso que Fourier conseguiu fazer: achou uma forma simples e
elegante de calcular esses coeficientes.
2.3.2 – A Transformada Discreta de Fourier e a Transformada Rápida de Fourier
Bem como foi descrito acima as Séries de Fourier só valem para sinais periódicos, e como
quase nunca os sinais que trataremos serão períodos precisamos de algo mais abrangente que
funcione tanto com sinais periódicos quanto os não periódicos, e foi pensando nisso que Fourier
criou a Transformada as quais funcionam tanto para sinais periódicos ou não.
A essência do cálculo da Transformada Rápida de Fourier (FFT) é uma série de operações
matemáticas conhecidas como Transformada Discreta de Fourier (DFT) que é um conjunto m de
variáveis no domínio da freqüência a partir de um conjunto n de amostras no domínio do tempo. A
figura 11 ilustra um sinal x(n) com N amostras em intervalos de T segundos. Para n variando de 0 a
(N – 1), a duração do sinal é Tp = N.T.
Figura 11 - Amostragem em função do tempo e seu espectro (DFT)
26
A DFT de x(n) é definida pela soma finita na equação (4).
1
X ( m) =
N
n −1
∑ x ( n) ⋅ W
n−m
(4)
n =0
onde:
W = e − i 2π / N
(5)
A função X(m) gera m variáveis no domínio da freqüência com incremento F = 1/Tp. Para
x(n) real com N amostras, um único espectro pode ser computado para N/2 pontos da freqüência.
Na verdade, X(m) é uma função periódica em m com N pontos em cada período, mas apenas N/2
são únicos.
Observando a definição da DFT, verifica-se que são necessárias cerca de N multiplicações
e adições complexas para computar o espectro de cada m em particular e, se forem calculados N/2
componentes espectrais, o número de computações para o cálculo de todo o espectro é da ordem de
N2. Como foi demonstrado por Cooley e Tukey [FOURIER, 2004] pode-se calcular esta
transformada com um número de processos computacionais da ordem de N.log2(N), o que poupa
um grande esforço computacional. Este método é conhecido como Transformada Rápida de Fourier.
Os algoritmos de DFT funcionam melhor quando o número de pontos da amostra é uma
potência inteira de 2, ou seja: N = 2k, onde k é um inteiro positivo. Um programa que utiliza DFT
com a finalidade de análise espectral, apresenta certas particularidades na relação entre a DFT e a
transformada contínua de Fourier. Deve-se considerar que o tratamento matemático considera o
sinal como se ele fosse periódico, embora, na realidade, o sinal pode não ser periódico no sentido
matemático estrito.
Um algoritmo para o cálculo da DFT deve levar em consideração alguns fatores básicos.
Se tomarmos N = 2k, para k inteiro positivo, amostras em um período, e se T é o incremento entre
cada amostra, então o período Tp = 2k . T. O espectro obtido da DFT, também será periódico e
conterá 2k componentes espectrais. Entretanto, se a amostragem em função do tempo for real, pode
ser demonstrado que metade dos componentes são coincidentes, logo apenas N/2 componentes
espectrais complexos são significativos. Tais componentes são incrementados de F = 1/Tp; m = 0
corresponde a própria componente, m = 1 é a fundamental, m = 2 é o segundo harmônico, etc...
Para se evitar a sobreposição espectral, a taxa de amostragem deve ser maior ou igual ao dobro da
maior freqüência do espectro, ou seja, se a maior freqüência for fm, então de acordo com o
27
Teorema de Nyquist [SMITH, 2004] o máximo intervalo entre as amostras deve satisfazer a
equação (6):
T ≤ 1 /(2 ⋅ f m )
(6)
logo, se a maior freqüência do espectro for de 20KHz, por exemplo, o intervalo máximo entre as
amostras deve ser menor que 25µs. Devemos respeitar o Teorema de Nyquist, pois caso ele não seja
satisfeito o resultado obtido não será condizente com o real, pelo fato de ocorrer sobreposição de
espectro.
28
3 – Descrição
3.1 - Descrição Geral
O projeto consiste em uma arquitetura dual paralela configurável utilizando
microcontroladores 8031 para resolução do cálculo da Transforma de Fourier utilizando um
algoritmo de FFT, conforme apresentado na figura 12.
Para acessar a memória externa, nesse projeto foi utilizado o modelo distribuído, no qual
cada processador possui sua memória e o modelo compartilhado, onde existe apenas uma memória
física de acesso comum aos dois processadores, e para que não haja a necessidade de se construir
um projeto para cada modelo de memória, utilizamos um dispositivo lógico programável o PLD, o
qual é o elemento integrador do sistema, ele é o encarregado de controlar o acesso a memória
externa pelos processadores, ou seja, o mesmo hardware é capaz de trabalhar no modelo de
memória distribuído e compartilhado bastando apenas carregar o modelo desejado no PLD.
O cálculo da FFT é realizado com amostras de 16, 32, 64, 128, 256, 512 e 1024, os
processadores trabalham a 11,0592MHz, com a serial ajustada para 9600bps, podendo acessar até
64KB de memória externa. Para o sistema funcionar é necessário um computador com essas
características mínimas, Pentium III 500MHz, com 64MB de memória RAM, HD de 20GB, com
porta serial, o sistema operacional Windows 98 e o software da Altera Quartus II para realizar a
comutação entre os modelos de memória.
Serial
Serial
Modulo Adicional
Figura 12 – Estrutura geral do sistema lógico
29
3.2 - O Hardware
O sistema é composto por dois microcontroladores 8031, que trabalham paralelamente, ora
com a configuração de memória compartilhada, figura 13a, ora com distribuída, figura 13b, de
acordo com a opção escolhida inicialmente. Os dados são enviados pela porta serial do computador,
e ambos os processadores são interconectados a um PLD, que por sua vez é ligada a uma memória
que serve para armazenar os dados como mostra a figura 12, e para a conversão e tratamento do
sinal é utilizado um algoritmo de FFT.
a)
b)
Figura 13 – Sistema Dual - a) Sistema com Memória Compartilhada, b) Sistema com Memória Distribuída
3.3 – Etapas de Desenvolvimento
Etapa 1. Sistema básico com um microcontrolador 8031: com uma EPROM e um latch, um
programa para ler o dado da porta serial e reenviá-lo, após algum tempo, ao
computador pela porta serial;
Etapa 2. Incorporação do PLD: o PLD é programado para que o mesmo teste acima
mencionado seja realizado transparentemente, ou seja, que o sistema funcione
como se não houvesse o PLD;
Etapa 3. Incorporado o segundo sistema básico: com uma EPROM e um latch, o PLD é
reprogramado para dividir as tarefas entre os processadores utilizando-se dos dois
modelos de memória: o compartilha ou o distribuída.
Etapa 4. Testes: com o PLD programado foram enviados alguns dados pela porta serial do
computador e o PLD se encarrega de gravar os dados na memória e depois repassálos aos processadores para o processo de cálculo;
Etapa 5. Módulo Adicional: um módulo adicional seria implementado caso houvesse
tempo, ele receberia um sinal analógico e se encarregaria de enviar ao sistema os
coeficientes da série de Fourier para realizar o cálculo da FFT, porém não foi
implementado por falta de prazo.
30
4 - Hardware
O sistema é baseado em dois microcontroladores 8031, como mostra a figura 14,
trabalhando a freqüência de 11,0592MHz, ligados cada um a um latch modelo 74LS373 que por sua
vez é conectado a uma EPROM de 64Kbytes, pois é o máximo de memória que o este processador
pode trabalhar, modelo 27C512 todos esses dispositivos serão alimentados com uma tensão de
operação de 5 volts.
O processador Mestre é conectado a serial de um computador e o processador Escravo
seria ligado a um módulo adicional que se encarregaria de captar os coeficientes para o cálculo da
FFT, mas como não sobrou tempo para a realização do mesmo o módulo adicional não foi feito,
então os dados são simulados pelo próprio computador.
Foram utilizadas duas memórias NVRAM para dados, no caso não foi usada uma, porque
para que fosse possível ela deveria permitir acesso múltiplo de endereço e de dados, como esse tipo
de memória é cara, difícil de se encontrar e complicada para se trabalhar, foram utilizadas duas
memórias comuns, e emulando-as como se fossem apenas uma.
Porta Serial
Figura 14 – Diagrama em Blocos do Sistema
31
A EPROM, o qual conterá a programação bem como suas configurações inicias, é ligada
ao processador pelo latch, e é de uso privado de cada processador. O PLD se encarregará de
distribuir as tarefas entre os processadores e de acessar a EPROM de dados para os mesmos.
Para simular os coeficientes da Série de Fourier foi utilizado o próprio computador que
envia os coeficientes pela porta serial, a uma taxa de 9600bps, esta seria a tarefa do Módulo
Adicional.
Na figura 16 está o esquemático do sistema com todos os componentes utilizados, e logo
na seqüência vem a especificação e características gerais dos principais componentes empregados
nesse projeto. Na figura 15, tem-se o projeto físico montado com o Kit da Altera, os dois Kits com o
8031 e também a memória externa.
Kit Altera
Processador Escravo
Memória Externa
Processador Mestre
Kit Altera
Figura 15 – Foto do Projeto Físico
32
Figura 16 – Esquemático geral do sistema
33
4.1 – Microntrolador 8031
Um microcontrolador é um componente [NICOLOSI, 2000] que tem, num único chip,
além de um processador, elementos tais como memória, temporizadores, contadores, canais de
comunicação e conversores analógico-digitais. Esta característica diferencia os sistemas baseados
em microcontroladores daqueles baseados em microprocessadores, onde normalmente se utilizam
vários componentes para implementar essas funções. Com isso, os microcontroladores permitem a
implementação de sistemas mais compactos e baratos do que aqueles baseados em
microprocessadores.
Um microprocessador é um chip feito de silício, o qual contem uma CPU (Central Process
Unit) que por sua vez contem a ALU (Arithimetic Logic Unit) que é responsável pelos cálculos
aritméticos e operações lógicas e uma unidade de controle que realizará o controle do ciclo de
máquina, que será explicado a seguir, e o microprocessador pode também ter uma memória interna
para fins diversos.
Cada ação feita pelo microprocessador deve ser desdobrada em seus passos mais básicos.
Uma seqüência de passos, desde a busca da instrução até o resultado final desta instrução, se chama
ciclo de máquina, o qual consiste de uma seqüência de seis estados na família 8051. Cada estado
toma 2 períodos de clock e, portanto, um ciclo de máquina toma 12 períodos de clock ou 1µs sob
uma freqüência de 12MHz.
Um ciclo de máquina se divide da seguinte maneira:
1) Busca – Lê uma instrução da memória principal;
2) Decodifica – Interpreta a instrução;
3) Executa – Processa a instrução;
4) Armazena – Salva o resultado.
Em contrapartida, os processadores dos microcontroladores são, em geral, menos
poderosas do que os microprocessadores. Seu conjunto de instruções costuma se limitar às
instruções mais simples encontradas nestes, sua freqüência de clock é mais baixa e o espaço de
memória endereçável costuma ser bem menor. O campo de aplicação dos microcontroladores é
diferente daquele dos microprocessadores, e que um sistema que possa ser controlado por um
microcontrolador tende a ter menor complexidade e menor custo do que um sistema que exija a
capacidade de processamento de um microprocessador. A figura 17 detalha a pinagem do 8031 e a
sua descrição vem logo em seguida.
34
8031
Figura 17 - Pinagem do chip do microntrolador 8031
Fonte: [NICOLOSI, 2000]
4.1.1 - Sinais de Controle
ALE (Address Latch Enable): É o pino que comanda a demultiplexação das informações
de dados e endereços (menos significativo) da porta P0. Este sinal é automaticamente gerado pelo
8031, sem a interferência do programador.
O pino ALE (Address Latch Enable), que ligado a um chip latch, permite demultiplexar
externamente os dados e endereços no tempo, separando assim as informações. Isto é transparente
ao programador, isto é, você não precisa se preocupar com o comando desse pino ALE. Ele é
automaticamente gerenciado pelo microprocessador, você só liga o latch e o pino ALE no latch, e o
microcontrolador se encarrega de acionar o latch, como mostrado na figura 18.
Figura 18 – Esquemático de multiplexação da porta P0
Fonte: [NICOLOSI, 2000]
35
•
Porta P0: Porta de propósito geral, se não for utilizada memória externa. É porta de
utilização como via multiplexada no tempo, entre dados e endereços (só os endereços menos
significativos) quando usamos memória externa. Na mesma via, num dado tempo, apresentam-se
dados e em outro tempo, endereços. Foi uma maneira de economizar pinos no chip. Se não
multiplexasse dados com endereços, deveríamos ter uma porta para dados e outra porta para
endereços, o que acrescentariam 8 pinos ao chip.
•
Porta P1: Porta de propósito geral como "E/S" (Entrada e Saída). São oito bits de
comunicação de propósito geral. Via software, pode-se ler ou escrever nessa porta.
•
Porta P2: Porta de propósito geral, se não for utilizada nenhuma memória externa,
pode-se usar essa porta como E/S.
•
Porta P3: Porta de propósito geral de E/S, isto se não for utilizado nenhum
periférico interno ao chip, nenhuma interrupção externa e também se não utilizar memória externa.
Essa porta é utilizável como interface entre os periféricos internos do chip para fora do mesmo,
além de ter entradas programáveis, como interrupção e dois pinos que gerenciam uma memória
externa (pinos de Read - RD e Write - WR). Logo, essa porta também, em geral, é comprometido
parcialmente com alguma utilização que se deseja dos periféricos internos, interrupções, etc, como
demonstra a figura 19.
Figura 19 - Ilustração da utilização da porta P3
Fonte: [NICOLOSI, 2000]
36
A seguir, apresenta-se a tabela 1 que resume as funções especiais da porta P3:
Tabela 1 - Resumo das funções especiais da porta P3
Nome
Número Função
do Pino Especial
Função
Normal
Função Especial
Comentários da Função Especial
P3.0
10
RXD
E/S
RDX, Receive Data Usado como receptor de dados serial
P3.1
11
TXD
E/S
TXD, Transmit Data Usado como transmissor de dados serial
P3.2
12
INTO
E/S
Extemal interrupt O Usado para algum evento externo interromper o 8031
P3.3
13
INT1
E/S
Extemal interrupt 1
Usado para outro evento externo interromper o 8031
P3.4
14
T0
E/S
Timer/counter O:
Extemal input
Usado quando se quer que o timer zero se tome um
contador de eventos externos
P3.5
15
T1
E/S
Timer/counter 1:
External input
Usado quando se quer que o timer1 se tome um
contador de eventos externos
P3.6
16
WR
E/S
External data:
Usado quando se conecta RAM externa no chip.
Memory write strobe Sinaliza que o Mp vai "escrever" na RAM
P3.7
17
RD
E/S
External Data:
Usado quando se conecta a RAM externa no
Memory read strobe chip.Sinaliza que o Mp vai "ler" da RAM
•
PSEN (Program Store Enable): É um dos quatro pinos de controle do chip. Ele
aciona a ROM/EPROM externa (chamada de memória de código) quando o 8031 vai fazer uma
busca de instrução na ROM, para, em seguida, executá-la. Também é acionado (sempre
automaticamente) quando se faz uma consulta a alguma tabela fixa, gravada na ROM, por meio de
instrução especial para isto. Note que existe uma barra acima do nome PSEN, indicando que ele é
ativo em nível lógico 0. Ele vai automaticamente para zero toda vez que o 8031 está no estado de
busca de instrução (fetch) para, após isto, decodificá-la e executá-la.
Figura 20 - Ilustração da ligação da EPROM no 8031
Fonte: [NICOLOSI, 2000]
37
•
EA (External Access): É um pino de comando externo, que determina se vamos usar
a ROM / EPROM interna do chip ou se vamos ler somente uma ROM/EPROM externa ao chip. Se
o pino EA estiver em nível lógico 1, o chip lerá sua ROM/EPROM interna, e após acabar todo o
espaço de memória interna, trabalhará automaticamente com a memória ROM/EPROM externa, se
ela existir. Com o pino EA em 0, ele só enxerga memórias ROM/EPROM externas, como mostrado
na figura 20.
•
RST (Reset): É o disparador do chip quando se quer iniciar adequadamente sua
função. Esse pino deve estar no estado 1 por, ao menos, dois ciclos de máquina. Ele organiza os
valores internos do chip para iniciar o trabalho adequadamente e sempre da mesma maneira.
•
XTAL1 e XTAL2 (Cristal/Oscilador): Esse chip tem um sistema de oscilação
interna que só exige do exterior o cristal, de 12MHz no máximo, e dois capacitores para gerar a
oscilação, que se tornará o clock ou padrão de tempo para o microcontrolador trabalhar.
•
Vcc e Vss (Alimentação): É por onde se alimenta o chip: +5 Vdc em Vcc e terra em
Vss.
O microcontrolador 8031 é amplamente conhecido e usado para aplicações diversas, pois
possui uma pinagem simples, é de fácil manuseio e seu funcionamento interno é simplificado.
Porém, nada impede de que seja utilizado outro processador, pois como o sistema se
baseia em computação configurável, basta apenas alguns ajustes na lógica do PLD para que o
sistema funcione com um novo processador.
As principais características do 8031 são:
•
Freqüência máxima de clock de 12 MHz;
•
Até 64 KB de memória de dados externa;
•
128 bytes de RAM interna;
•
Até 64 KB de memória externa de programa;
•
4 portas bidirecionais de E/S, cada uma com 8 bits individualmente endereçáveis,
duas dessas portas (P0 e P2) e parte de uma terceira (P3) ficam comprometidas no
caso de se utilizar qualquer tipo de memória externa;
•
2 temporizadores / contadores de 16 bits;
•
1 canal de comunicação serial (full-duplex);
•
5 fontes de interrupção (dois timers, dois pinos externos e o canal de comunicação
serial) com 2 níveis de prioridade selecionáveis por software;
•
Oscilador de clock interno.
38
4.2 – PLD da Altera
A Altera Corporation é uma das maiores no segmento quando se trata em dispositivos
programáveis, tais como PLD, CPLD, FPGA. Existem inúmeras empresas que fabricam PLDs, mas
optamos pelo dispositivo da Altera principalmente pelo fato de que a UnicenP disponibiliza o Kit
Educacional da Altera, e também por já termos trabalhado com ele.
Utilizou-se um kit educacional EP-1 de PLDs da Altera, mostrada na figura 21, disponível
no Laboratório de Lógica Programável do Curso de Engenharia da Computação do UnicenP, que
contem uma placa pré-montada com dois PLDs (o FPGA EPF10K20R e o CPLD EPM7128S),
sendo que um deles é soldado na própria placa e o outro é removível, o que pode possibilitar a
utilização deste PLD em outra placa com uma outra aplicação. Ao kit também acompanha um cabo
para conexão com o computador através da porta paralela, para programar os PLDs.
Figura 21 – Kit Educacional EP-1 da Altera
Os PLDs que compõem esse kit são o FPGA EPF10K20R e o CPLD EPM7128S, as suas
principais características são descritas na tabela 2. O PLD utilizado em nosso projeto foi o
EPF10K20R devido ao fato dele possuir número suficientes de pinos de E/S, o que não acontece no
EPM7128S .
39
As principais características dos PLDs da Altera que acompanham o kit educacional estão
mostradas na tabela 2.
Tabela 2 – Características dos PLDs
Características
FPGA - FLEX
EPM10K20R
CPLD – MAX
EPM7128S
20000
2500
Pinos de E/S
189
68
tpd(ns)
4,5
6,0
tsu(ns)
2,8
3,4
tco1(ns)
3,1
4,0
222,2
147,1
Gates Disponíveis
fcnt(MHz)
A arquitetura do EPM7128 inclui quatro entradas dedicadas que podem ser usadas para
entrada de propósito geral ou como entradas de high-speed, sinais de controle global (clock, clear, e
dois sinais de output enable) para cada macro-célula e pino de E/S. O Logic Array Block (LAB)
consiste de 16 macro-células e os LABs são ligados entre si através do Programmable Interconnect
Array (PIA), um barramento global é alimentado por todas as entradas dedicadas, pinos de E/S e
macro-células. A macro-célula consiste de três blocos funcionais: o vetor lógico, o seletor da matriz
produto-termo e o registrador programável. Elas podem ser individualmente configuradas para uma
operação lógica seqüencial ou combinatória.
A arquitetura do EPF10K20R é mais complexa e possui uma estrutura mais densa, possui
um Embedded Array Block (EAB) que é um bloco flexível de RAM com registradores nas portas
entrada e saída, e é usado para implementar megafunções, por exemplo, memória eficiente e
funções lógicas especializadas. O EAB é também apropriado para funções como as multiplicações,
vetores escalares e para correção de circuitos, porque é denso e flexível. Essas funções podem ser
combinadas em aplicações, como filtros digitais.
O Logic Element (LE), é a menor unidade de lógica na arquitetura do EPF10K20R, tem
um tamanho compacto que fornece uma utilização mais eficiente. O LE contêm uma entrada com
quatro sinais Look-Up Table (LUT), que é um gerador de função que pode rapidamente computar
qualquer função de quatro variáveis. Cada LE contêm um flip-flop programável com synchronous
enable, um carry chain e um cascade chain.
40
Figura 22 - Diagrama de Blocos do PLD EPF10K20R
O PLD conterá toda a lógica de funcionamento do circuito, a forma como os
processadores trabalham, a forma de como eles acessarão a memória e como as tarefas são dividas
entre eles.
Para o funcionamento em paralelo o PLD se encarregará de controlar os processadores, e
se da desta forma: os microprocessadores fazem os pedidos de acesso à memória pelas portas P0 e
P2 e usando sinais de controle pela porta P3, o PLD recebe os sinais de leitura e escrita dos
processadores, verifica se a posição está livre ou se não está sendo acessada pelo outro processador,
caso sim procurar outra posição ou esperar até que o mesmo tenha liberado a posição, e então
retorna o dado pela porta multiplexada P0.
4.2.1 – Diagramas de Bloco dos Modelos de Memória
A seguir são apresentados os diagramas de bloco dos modelos de memória distribuído e o
compartilhado feitos no software da Altera, o Quartus II.
41
No modelo distribuído, mostrada na figura 23, cada processador possui sua memória, ou
seja, o controle é direto, pois o processador apenas indica qual posição deseja acessar e o PLD
interpreta essa posição seleciona o endereço na memória externa e retorna o dado.
Figura 23 – Diagrama em bloco do modelo distribuído
42
Já no modelo compartilhado, conforme mostrado figura 24, existe apenas uma memória
compartilhada entre os processadores, mas eles podem acessar a memória ao mesmo tempo, desde
que sejam posições diferentes, quando um processador tenta acessar uma posição que está sendo
acessado pelo outro processador ele deve aguardar até que o outro processador libere a posição de
memória.
Figura 24 – Diagrama em bloco do modelo compartilhado
43
5 – Software do computador
Foi desenvolvido um software para o computador (código para x86 for Windows),
utilizando a linguagem de programação C no ambiente Borland Builder, o qual comunicará o
mesmo com o sistema dual através da porta serial. Para a troca de funcionamento interno do PLD,
para modelo distribuído ou compartilhado, é necessário a utilização do software Quartus II da
Altera, para modificar o programa gravado internamente na mesma.
O software, em conjunto com o HyperTerminal, também serve para realizar testes de
comunicação entre o hardware e o computador, com isso é possível rapidamente saber se à parte de
comunicação entre todos os módulos do sistema estão funcionando corretamente e caso não
estejam, o problema é encontrado e solucionado com facilidade, graças a essa interação do sistema
com computador.
Figura 25 – Layout do software do computador
Através desse software o resultado final do cálculo é mostrado no monitor do computador,
como demonstra a figura 25, e sendo assim pode ser comparado o resultado obtido com o resultado
44
calculado por um software confiável e já existente no mercado, como por exemplo o MatLab, para a
análise do comportamento do sistema bem como sua validação.
O software tem quatro botões, um chamado “Random”, o qual gera os coeficientes
aleatoriamente, um outro “Abrir” onde o usuário escolhe um arquivo contendo os coeficientes a
serem calculados, um botão “Iniciar” que dá inicio ao processo de cálculo e por fim um chamado
“Fechar” o qual encerra o programa. Como trabalhamos com microprocessador de 8 bits os valores
possíveis para os coeficientes estarão entre 0 e 255, mas foi padronizado para valores entre -10 e 10,
para gerar resultados mais precisos, e para realizar isso usamos uma função que gerou a tabela 3,
que para cada valor entre 0 e 255 possui um representativo entre -10 e 10, por exemplo, se o
coeficiente a ser calculado é -4,769, então o software envia o valor 64, quando o processador ler o
valor 64, o passa por uma fórmula e por conseguinte identifica que o valor correspondente é -4,769.
Foi feito isso para que se pudessem gerar números negativos e também para criar
resultados mais precisos, pois, se fossem usados valores entre 0 e 255, não seria possível utilizá-lo
em uma aplicação em que se houvessem valores negativos e também os resultados não seriam bons
por não se poderem usar números reais e sim apenas inteiros positivos.
Tabela 3 – Conversão de valores reais para inteiros
Valor Inteiro
Valor Real
Valor Inteiro
Valor Real
Valor Inteiro
Valor Real
Valor Inteiro
Valor Real
0
-9,769
64
-4,846
128
0,077
192
5,000
1
-9,692
65
-4,769
129
0,154
193
5,077
2
-9,615
66
-4,692
130
0,231
194
5,154
3
-9,538
67
-4,615
131
0,308
195
5,231
4
-9,462
68
-4,538
132
0,385
196
5,308
5
6
-9,385
-9,308
69
70
-4,462
-4,385
133
134
0,462
0,538
197
198
5,385
5,462
7
-9,231
71
-4,308
135
0,615
199
5,538
8
-9,154
72
-4,231
136
0,692
200
5,615
9
-9,077
73
-4,154
137
0,769
201
5,692
10
11
-9,000
-8,923
74
75
-4,077
-4,000
138
139
0,846
0,923
202
203
5,769
5,846
12
-8,846
76
-3,923
140
1,000
204
5,923
13
-8,769
77
-3,846
141
1,077
205
6,000
14
-8,692
78
-3,769
142
1,154
206
6,077
15
-8,615
79
-3,692
143
1,231
207
6,154
16
17
-8,538
-8,462
80
81
-3,615
-3,538
144
145
1,308
1,385
208
209
6,231
6,308
18
-8,385
82
-3,462
146
1,462
210
6,385
19
-8,308
83
-3,385
147
1,538
211
6,462
20
-8,231
84
-3,308
148
1,615
212
6,538
21
22
-8,154
-8,077
85
86
-3,231
-3,154
149
150
1,692
1,769
213
214
6,615
6,692
23
-8,000
87
-3,077
151
1,846
215
6,769
24
-7,923
88
-3,000
152
1,923
216
6,846
25
-7,846
89
-2,923
153
2,000
217
6,923
26
-7,769
90
-2,846
154
2,077
218
7,000
45
27
-7,692
91
-2,769
155
2,154
219
7,077
28
-7,615
92
-2,692
156
2,231
220
7,154
29
30
-7,538
-7,462
93
94
-2,615
-2,538
157
158
2,308
2,385
221
222
7,231
7,308
31
-7,385
95
-2,462
159
2,462
223
7,385
32
-7,308
96
-2,385
160
2,538
224
7,462
33
-7,231
97
-2,308
161
2,615
225
7,538
34
-7,154
98
-2,231
162
2,692
226
7,615
35
36
-7,077
-7,000
99
100
-2,154
-2,077
163
164
2,769
2,846
227
228
7,692
7,769
37
-6,923
101
-2,000
165
2,923
229
7,846
38
-6,846
102
-1,923
166
3,000
230
7,923
39
-6,769
103
-1,846
167
3,077
231
8,000
40
41
-6,692
-6,615
104
105
-1,769
-1,692
168
169
3,154
3,231
232
233
8,077
8,154
42
-6,538
106
-1,615
170
3,308
234
8,231
43
-6,462
107
-1,538
171
3,385
235
8,308
44
-6,385
108
-1,462
172
3,462
236
8,385
45
-6,308
109
-1,385
173
3,538
237
8,462
46
47
-6,231
-6,154
110
111
-1,308
-1,231
174
175
3,615
3,692
238
239
8,538
8,615
48
-6,077
112
-1,154
176
3,769
240
8,692
49
-6,000
113
-1,077
177
3,846
241
8,769
50
-5,923
114
-1,000
178
3,923
242
8,846
51
52
-5,846
-5,769
115
116
-0,923
-0,846
179
180
4,000
4,077
243
244
8,923
9,000
53
-5,692
117
-0,769
181
4,154
245
9,077
54
-5,615
118
-0,692
182
4,231
246
9,154
55
-5,538
119
-0,615
183
4,308
247
9,231
56
-5,462
120
-0,538
184
4,385
248
9,308
57
58
-5,385
-5,308
121
122
-0,462
-0,385
185
186
4,462
4,538
249
250
9,385
9,462
59
-5,231
123
-0,308
187
4,615
251
9,538
60
-5,154
124
-0,231
188
4,692
252
9,615
61
-5,077
125
-0,154
189
4,769
253
9,692
62
63
-5,000
-4,923
126
127
-0,077
0,000
190
191
4,846
4,923
254
255
9,769
9,846
No sistema é utilizada a linguagem Assembly e C para 8051, usando o software Keil, para
a programação dos processadores e a linguagem AHDL para o PLD. Nos processadores estarão
todas as rotinas, como, por exemplo, rotina de receber os dados da serial, enviar dados para PLD,
executar o cálculo FFT e suas configurações iniciais, por sua vez no PLD estão rotinas de controle
de sinal dos processadores, de acesso à memória, de divisão de tarefas entre os processadores entre
outras. A figura 26 apresenta uma idéia geral e mais clara de como o sistema funciona.
46
Computador
Processador Mestre
Processador Escravo
Início
Envia “Iniciado”
pela Serial
Não
Espera
“Iniciado”
Sim
Enviar Dados
Gravar Dados
na Memória
Sincronizar
Escravo
Iniciar
Processador
Escravo
Receber Dados
Receber Dados
Algoritmo FFT
Algoritmo FFT
Receber
Resultado do
Processador
Escravo
Somar Resultados
Enviar para o
Computador
Não
Espera
Resultado
Sim
Mostra Resultado
no Computador
Fim
Figura 26 – Fluxograma de funcionamento geral do sistema
47
5.1 - O Algoritmo FFT
O algoritmo de FFT utilizado é o Butterfly, que também é um método gráfico de mostrar
as multiplicações e adições. A notação do fluxo do gráfico é usada aonde o círculo com setas
entrando representa uma adição de dois valores e no fim das setas multiplicado por uma constate. A
constante é um número que aparece ao lado da seta, se não existe um valor então a constante é
tomada como um. A figura 27 mostra um simples exemplo da multiplicação de duas entradas e
soma delas no fim da operação.
Figura 27 – Método gráfico da Butterfly
Usando essa notação podemos construir redes Butterfly que, juntas, realizam a FFT. A
figura 28 mostra o cálculo de duas multiplicações e duas adições complexas, enquanto a figura 29
demonstra uma multiplicação e duas adições complexas.
Figura 28 – Exemplo 1 de Butterfly
Figura 29 – Exemplo 2 de Butterfly
Os dados são enviados para a serial de um dos processadores, o qual se encarregará de
salvar os dados na memória e assim que o número de amostras for igual ao escolhido, o processo de
cálculo da FFT começa e cada processador se encarrega de calcular metade das amostras e assim
que o cálculo for finalizado o resultado é enviado para o computador.
48
6 – Funcionamento do Sistema
O sistema funciona basicamente da seguinte maneira:
1. Escolher a configuração de memória será utilizada, a distribuída ou compartilhada,
para isso se utiliza o software da Altera Quartus II;
2. Definir quais os coeficientes serão enviados, através do software que foi descrito
anteriormente, para o sistema realizar a cálculo da FFT;
3. Então os coeficientes são enviados pela serial, o processador mestre grava-os na
memória através do PLD;
4. Com os coeficientes gravados, então se dá inicio ao processo de cálculo, cada
processador requisita seus dados para realizar o cálculo da FFT;
5. O processador mestre se encarrega de somar o seu resultado com o do processador
escravo e o resultado final é enviado ao computador, que tem um software próprio
desenvolvido com o intuído de mostrar o resultado no monitor.
O PLD usado é o EPM10K20R, pois o EPM7128S possui apenas 68 pinos para serem
usados como E/S e para esse projeto são necessários 110 pinos e como o EPM10K20R possui 189
pinos será o mesmo utilizado.
A seguir segue a descrição dos pinos utilizados pelo PLD EPM10K20R:
•
No processador mestre os pinos da porta P0, P1, P2, P3, menos o RX e o TX que
são usados para a transmissão com o computador, e o pino reset, totalizando um
total de 31 pinos;
•
No microntrolador escravo os pinos da porta P0, P2, P3 e o pino de reset, a porta
P1 é seria utilizada pelo módulo adicional para o processamento dos coeficientes,
totalizando um total de 25 pinos;
•
Para a memória RAM os pinos de controle, de seleção de endereço e de dados
somando 27 pinos e como o sistema possui duas memórias, para poder trabalhar
no sistema distribuído, o total de pinos para as memórias são de 54 pinos;
•
Com isso o total de pinos usados pelo PLD são de 110 pinos como mencionado
anteriormente.
49
Inicialmente se define qual o modelo de memória será utilizado, compartilhado ou
distribuído, e então o modelo definido é gravado na PLD para a respectiva configuração, através do
Quartus II.
A configuração no hardware é a seguinte nos dois microcontroladores 8031, a interrupção
serial, a INT0 e a INT1 ativadas e a taxa da porta serial de 9600 bps funcionando de forma
assíncrona.
Inicialmente o software se encarregará de enviar os coeficientes pela porta serial, para o
processador Mestre, com a mesma taxa no qual os microprocessadores funcionaram, a 9600 bps.
Quando o dado for enviado para o processador é ativada a interrupção serial o qual conterá
uma rotina que se encarregará de captar de 8 bits pela porta P3.0 e repassá-lo para o PLD, ativando
a interrupção da porta P3.4, pela porta P1, assim o PLD seleciona uma posição na memória RAM,
ativa o bit de escrita e grava o dado na memória, esse processo se repetirá até que sejam gravados
1024 dados na memória. Quando esse número for alcançado o processador desativará a interrupção
da porta P3.4 e então o PLD começa a enviar os coeficientes pela porta P1 para os processadores,
no caso 512 amostras para cada, assim conforme os dados são enviados a interrupção INT0 e
ativada nos processadores, o qual conterá a rotina para o cálculo da transformada de Fourier, assim
que o todos os coeficiente forem enviados e processados e o cálculo for finalizado o processador
Mestre se encarregará de somar seu resultado com o resultado do processador Escravo e envia o
resultado final serialmente pela porta P3.1. O software do computador então capta o resultado que
foi calculado pelos processadores mostra na tela.
Para se alterar o número de amostras a serem processados pelo algoritmo de FFT deve-se
alterar um “define” chamado “NAmostras”, que se encontra no início do código do processador
Mestre e no início do código do processador Escravo, para o número de amostras desejados,
compilar o código e regrava-lo na EPROM.
O sistema se limita a processar dados reais de -10 a 10 conforme a tabela 4 e como
comentado anteriormente, a taxa de transmissão serial a 9600 bps e devido ao processador trabalhar
a 11,0592MHz a maior freqüência do espectro não deve ser maior que 5MHz, segundo o teorema de
Nyquist visto no capítulo 2 (estudo teórico), caso contrário o cálculo da FFT não será calculado de
maneira correta, pois haverá sobreposição espectral.
50
7 – Recursos Necessários
Os recursos utilizados estão disponíveis no Laboratório de Lógica Programável do Curso
de Engenharia da Computação do UnicenP.
Na realização desse projeto foram necessários os seguintes recursos:
1 – Hardware:
•
Microcomputador (Pentium III 500MHz, RAM 64MB);
•
Microcontroladores 8031;
•
Kit Educacional da Altera (EPM7128S e EPF10KR);
•
Componentes eletrônicos diversos.
2 – Software:
•
Ambiente de programação em C++ (Borland Builder C++ v5.0);
•
Ambiente para estudo e desenvolvimento das Séries de Fourier – DFT / FFT
(MatLAB v6.5);
•
Ambiente de desenvolvimento de lógica da Altera (Quartus II v4.1);
•
Ambiente para a programação em Assembly para 8051 (Keil v2.7);
•
Ambiente de desenvolvimento do esquemático (OrCad v10.0).
3 – Equipamentos:
•
Osciloscópio digital e analógico;
•
Multímetro digital e analógico;
•
Emulador de EPROM;
•
Apagador de EPROM;
•
Gravador de EPROM;
•
Ferro de Solda;
•
Protoboards.
51
8 – Custos e Viabilidade Econômica
Os custos calculados na tabela 4 se baseiam na construção de um sistema.
Tabela 4 – Custos do Projeto Físico
Descrição
Microcontroladores 8031 (2)
Preço (R$)
12,00
Kit Educacional Altera
570,00
EPROM 64Kbytes (2)
14,00
NVRAM 128Kbytes (2)
48,00
Latch 74LS373 (2)
Placa 8031/EPROM (2)
2,00
24,00
Cabo Serial (2)
8,00
Cristal 11,052MHz (2)
2,00
Capacitores Diversos
2,40
Resistores Diversos
2,40
Componentes Eletrônicos
TOTAL
15,00
R$ 699,80
Vemos que o custo do desenvolvimento do projeto ficaria em torno de R$ 700,00, o tempo
gasta para desenvolver o projeto foi em torno de 1000h, só para efeito de comparação uma placa
dual para um processador Pentium III custa perto de R$ 510,00, o que encarece muito o sistema é a
construção de apenas um sistema e também a utilização do kit educacional da Altera, que inclui
diversos componentes desnecessários ao nosso projeto, se ao invés fosse usado apenas o PLD e
feito uma construção em larga escala o circuito sairia por menos de R$ 350,00.
Na figura 30 temos o cronograma geral do projeto, com todas as fases e etapas descritas.
52
Figura 30 – Cronograma do projeto
53
9 – Testes e Validação do Projeto
A validação do projeto foi realizada em 5 etapas, listadas a seguir:
•
Teste da Comunicação:
Primeiramente foi testada a comunicação serial entre o computador e o
sistema, utilizando um software já existente, como HyperTerminal, o qual
envia um dado pela porta serial. Caso o sistema esteja funcionando
corretamente o mesmo responderá reenviando o dado para o computador, e
sendo assim passa-se para próxima fase de testes;
•
Teste Lógico do Software:
Para verificação do funcionamento do software do PLD e do software do
computador é utilizado o próprio ambiente de programação no caso o Quartus
II e o Borland Builder respectivamente, os quais nos dão total suporte para
testes, depuração e validação dos softwares. Quanto ao programa feito para o
computador não foi encontrado problema algum, porém em se tratando do
PLD tive grandes dificuldades, principalmente no modelo compartilhado o
qual requer uma lógica muito mais complexa e elaborada que a do modelo
distribuído;
•
Teste dos Processadores:
Para testar os processadores, são realizados testes de leitura e escrita, em cada
processador separadamente. Com um software já existente, um dado é escrito
na memória e depois o mesmo é lido, caso os dados sejam iguais e então é
validado o funcionamento do conjunto processador-memória bem como as
rotinas feitas em C para 8051 no software Keil. Já nesta parte de validação
ocorreram alguns problemas, como o programa compila o código C para
Assembly pode haver algum tipo de falha nessa conversão, em poucos casos
o programa funcionava corretamente quando depurado pelo próprio software,
54
mas quando foi testado o software no hardware algumas vezes ele não
funcionou corretamente, em torno de 10% das tentativas foram problemáticas.
•
Teste de Funcionamento:
Em seguida realizar os testes para checar o funcionamento dos processadores
rodando em no modo seqüencial e paralelo, neste utilizando-se a arquitetura
do modo com memória distribuída e em seguida com o modo de memória
compartilhado, para a troca do modelo de funcionamento é utilizado o
Quartus II, os resultados obtidos pelo modo seqüencial devem ser iguais aos
obtidos pelo modelo dual. Nesta parte do projeto o principal problema foi
sincronizar os dois processadores;
•
Teste de Operação (Resultados):
Para checar o resultado final, basta usar um programa que faça o cálculo da
transformada de Fourier corretamente, como o MatLab, aplicar um conjunto
de coeficientes e guardar o resultado. Depois usando os mesmos coeficientes
passá-los para que o sistema proposto faça o cálculo, e por fim analisar e
comparar os resultados, se forem encontrados resultados semelhantes o
sistema está validado. O principal problema aqui foi que às vezes os
resultados estavam certos e outras vezes não, grande parte do problema é a
falta de sincronismo entre os processadores, e/ou problemas na comunicação
serial e/ou erros no acesso a memória.
55
10 – Resultados
Os testes foram realizados a partir de um conjunto de dados já conhecido, e foram os
seguintes, uma função cujos valores são todos iguais a zero, outra com os valores iguais a um, uma
a qual se tem o primeiro valor igual a um e o restante igual a zero e uma última função randômica
na qual os valores são gerados aleatoriamente. Utilizando esses conjuntos de dados é possível obter
uma confirmação positiva do sistema e sendo assim, a sua possível validação.
Foi feita a alteração no número de amostras calculadas para que se fosse possível a análise
do comportamento e desempenho do sistema nos diferentes modelos. Para a mudança no número de
amostras é necessário que seja feita a alteração no firmware do processador Mestre e também na do
Escravo, e então recompilar o código e por fim gravá-lo na EPROM novamente.
No modelo monoprocessado foi usado o mesmo algoritmo de FFT, sendo alterado no
algoritmo apenas para que a tarefa não seja divida como ocorre no modelo dual.
Os resultados obtidos foram a partir dos cálculos da FFT no modelo seqüencial, no modelo
dual com modelo de memória compartilhado e também no modelo distribuído, com amostras
variando de 16 a 1024 amostras conforme mostra a figura 31 e tabela 5.
Tabela 5 – Tempos para o cálculo da FFT
MODELO \ NAMOSTRAS
16
32
64
128
256
512
1024
Monoprocessado
0,17s 0,37s 0,79s 1,69s 3,52s 7,19s 14,79s
Multiprocessado Dual - Distribuído
0,10s 0,22s 0,47s 1,01s 2,12s 4,35s
9,01s
Multiprocessado Dual - Compartilhado 0,10s 0,22s 0,47s 1,01s 2,12s 4,35s
9,01s
Os resultados obtidos variam um pouco, entre todos os modelos testados, de computador
para computador e, às vezes no mesmo computador, por diversos motivos como, por exemplo,
quando está executando outras atividades ou atendendo a uma interrupção, mas sempre variavam
menos que 5%, por essa razão o resultado aqui mostrado é uma média de várias amostras
calculadas.
56
16
Monoprocessado
14
Dual - Distribuído
Tempo(s)
12
Dual - Compartilhado
10
8
6
4
2
0
16
32
64
128
Amostras
256
512
1024
Figura 31 - Gráfico do desempenho entre os modelos de processamento
Como esperado o resultado obtido pelos modelos duais foram superiores, em geral perto de
60 a 70%, ao modelo seqüencial, e também como esperado o modelo dual compartilhado e o
distribuído tiveram o mesmo resultado, pois no modelo compartilhado um processador não invade a
memória do outro em algum momento, devido ao fato de como o algoritmo foi feito, portanto o
resultado é o mesmo e quase não é possível a sua percepção no gráfico, porque uma linha sobrepõe
a outra.
71
70
69
Ganho (%)
68
67
66
65
64
63
62
16
32
64
128
Amostras
256
512
1024
Figura 32 – Gráfico do Speed-UP
57
Com esses dados é possível traçar um gráfico de speed-up, como mostrado na figura 32,
entre os modelos monoprocessado e o dual, a função que resultou no gráfico é bem simples, basta
apenas dividir o tempo levado pelo modelo monoprocessado para o cálculo da FFT pelo tempo
levado pelo sistema dual. Pode-se notar que para 16 amostras temos um ganho em torno de 70% e
para 1024 amostras um ganho de 65%, o que demonstra que quanto maior o número de amostra
menos eficiente é o sistema.
16
Monoprocessado
Dual - REAL
Dual - IDEAL
14
Tempo (s)
12
10
8
6
4
2
0
16
32
64
128
256
512
1024
Amostras
Figura 33 – Gráfico que mostra a diferença entre o tempo real e o ideal
Com a figura 33, é possível perceber uma grande diferença, entre o tempo obtido com o
cálculo nos diversos modelos e o tempo ideal, o ideal seria o tempo onde não ocorrem atrasos de
comunicação, de sinais de controle, de sincronismo ou qualquer outro empecilho que venha a
prejudicar o desempenho do sistema, ou seja, o ganho seria linear e proporcional ao número de
processadores, porém isso não ocorre, pois o tempo que o processador consome pra calcular um
determinado número de amostras não é linear a este, e isto se agrava quando se está trabalhando
com processamento envolvendo mais de um processador, pois se gerar diversos tipos de atrasos
como mencionados acima.
Agora é possível traçar um gráfico, vide figura 34, entre o modelo dual real e o modelo
dual ideal, como no gráfico anterior de speed-up, este é calculado da seguinte maneira, basta dividir
o tempo levado pelo modelo dual ideal para o cálculo da FFT pelo tempo levado pelo sistema dual
real. Nota-se que para 16 amostras o modelo dual real comporta-se aproximadamente a 85% do
modelo dual ideal e para 1024 amostras um comportamento perto de 82%, o que demonstra que
quanto maior o número de amostra mais longe do ideal o sistema se parece.
58
86
Ganho (%)
85
84
83
82
81
80
16
32
64
128
Amostras
256
512
1024
Figura 34 – Gráfico de Speed-UP entre os Sistemas Duais
Para a avaliação do resultado foi utilizado o MatLab, foi analisado um conjunto de 16
amostras, foram repassados esse dados para o sistema aqui projetado e para MatLab, e os resultados
obtidos são demonstrados na tabela 6 e também na figura 35 e figura 36.
Tabela 6 – Resultado do Sistema x MatLab
Númedo da
Amostra
Coeficientes
Enviados
Resultado
Sistema
Resultado
MATLab
1
0,4615
16,5380
16,5385
2
9,6923
18,0840
18,0843
3
3,0000
36,3400
36,3401
4
8,6923
9,7560
9,7561
5
0,3077
5,7177
5,7177
6
-1,6154
9,6061
9,6063
7
0,0000
15,0190
15,0195
8
-6,1538
23,2710
23,2706
9
1,6154
36,0770
36,0769
10
8,0769
23,2710
23,2706
11
-0,3077
15,0190
15,0195
12
3,6154
9,6061
9,6063
13
-7,5385
5,7177
5,7177
14
-0,1538
9,7560
9,7561
15
-7,3077
36,3400
36,3401
16
4,1538
18,0840
18,0843
59
Com isso é possível analisar que o resultado obtido pelo sistema, figura 36, é muito
próximo ao obtido pelo MatLab, figura 35, sendo apenas diferenciado na quarta casa decimal, isso
demonstra que o todo o processo de acesso a memória, sincronismo entre os processados e as
rotinas de cálculo da FFT estão funcionando perfeitamente.
Figura 35 – Tela do MatLab com o resultado com um teste
Figura 36 – Resultado obtido pelo software
60
11 – Conclusão
Computação configurável é comprovadamente importante e viável, geralmente implicando
vantagens econômicas, a principal vantagem da utilização da computação configurável é que o
desempenho obtido é muito parecido com as implementações de soluções em hardware fixo com a
flexibilidade das implementações de soluções em hardware programável.
Entre as principais aplicações que tem se beneficiado com o uso da computação
configurável podemos destacar algumas aplicações como, manipulação de informação digitalizada,
manipulação e processamento de imagens digitais, compactação e compressão de dados e sinais,
criptografia, processamento de sinais, imagens e vídeos e reconhecimento de padrões.
Esperar pelo aumento da capacidade de processamento dos computadores pode não ser
viável, pois a razão de crescimento desta capacidade tem diminuído e chegará ao seu limite, devido
aos limites físicos dos materiais. Uma solução seria pensar em multiprocessamento, que nos últimos
anos vem crescendo muito em uso e em disponibilidade de recursos.
O uso do processamento paralelo e é uma ferramenta extremamente poderosa, possibilitando
o alcance de um alto poder de processamento em sistemas de baixo custo.
O projeto foi divido em várias etapas, a primeira delas foi o embasamento teórico, pois, para
a realização de um projeto desse porte, há a necessidade de se dominar o assunto e a tecnologia
envolvida, e como todos os assuntos envolvidos no projeto eram novos, essa parte do projeto tomou
muito tempo e empenho.
Na seqüência foi definido qual algoritmo FFT seria utilizado, foi um processo bem
demorado também, porque havia a necessidade de se utilizar um algoritmo simples e que fosse
eficiente e rápido para rodar no microcontrolador 8031, e o escolhido foi o butterfly devido o seu
bom desempenho e também pela fácil implementação, visto que o objetivo principal deste projeto
não o algoritmo, já com o algoritmo já definido então foi possível dar inicio a montagem física do
projeto.
Os problemas começaram a aparecer quando a parte do modelo compartilhado de memória
começou a ser desenvolvida, pois, este modelo é muito mais complexo e consumiu muito mais
tempo que o esperado. Outro problema também é quanto ao sincronismo entre os processadores,
que na teoria parece ser fácil de ser resolvido, mas quando é se passa para a parte da
implementação, a situação é totalmente outra.
61
Conforme os problemas eram solucionados, os resultados começaram a aparecer, e todo o
trabalho que se teve no decorrer do ano começa a valer a pena e consequentemente a ser validado, e
assim nota-se a importância de um trabalho como esse, não apenas pelos resultados obtidos, que
comprovam que a computação configurável e o processamento paralelo não são apenas viáveis, mas
como as novas tecnologias a serem utilizadas no dia-a-dia, mas sim pelo aprendizado que se obteve
no decorrer do ano.
O projeto poderia ter algumas melhorias tais como, ao invés de se utilizar uma memória
externa, se usar a própria memória interna do PLD, o que reduziria os custos e facilitaria no
desenvolvimento do projeto, outra melhoria seria a implementação dos dois modelos de memória de
uma vez no PLD, sendo assim a troca de funcionamento poderia ser realizado pelo próprio
software, sem que haja a necessidade da regravação do outro modelo de memória.
O módulo adicional que tem como finalidade agregar mais funções ao projeto caso este seja
finalizado antes do tempo previsto e que neste projeto o módulo adicional seria encarregado de
passar ao processador escravo os coeficientes a serem calculados pelo algoritmo de FFT não foi
implementado pela falta de prazo.
Para o futuro pode-se alterar esse projeto para um número maior de processadores, bem
como o processador em si, usando essa mesma estrutura é possível trabalhar com até quatro
processadores, bastante apenas utilizar os pinos de E/S que estiverem livres e também a lógica
interna ao PLD, caso se necessite um número maior de processadores e preciso alterar o PLD ou
integrar mais de um.
E possível também alterar a quantidade de amostras com que o sistema pode lidar, sendo
esse sistema capaz de trabalhar com até 8192 amostras para isso devesse alterar o algoritmo de FFT,
e se não for o suficiente pode-se também expandir o tamanho da memória de dados, tendo então que
se alterar a lógica do PLD bem como o algoritmo de FFT.
Com tantas mudanças possíveis e caso venham a ser efetuadas, há a possibilidade de se
atender uma gama maior de aplicações tornando assim o projeto muito interessante e viável.
62
Referências Bibliográficas
[CARVALHO, 2002] Carvalho, E. L. S. Reconfiguração Dinâmica e Parcial de Hardware:
Modelos, Classificações e Dispositivos. s.l. 2002.
[CARVALHO, 2003] Carvalho, E. L. S. RSCM: Controlador de Configurações para Sistema de
Hardware Reconfigurável . s.l. 2003.
[CHEN, 2000] Chen, C. Digital Signal Processing: Spectral Computation and Filter Design. s.l.
s.ed. 2000.
[CULLER, 1999] Culler, D. E. Parallel Computer Architecture: A Hardware/Software Approach.
s.l. s.ed. 1999.
[FERLIN, 1998a] Ferlin, E. P. O Processo de Paralelização Automática de Programas
Seqüenciais em Programas Paralelos. Curitiba, 1998.
[FERLIN, 1998b] Ferlin, E. P. Vantagens na Elaboração de Projetos Digitais Utilizando
Dispositivos Lógicos Programáveis. Curitiba, 1998.
[FOURIER, 2004a] Fourier and the Frequency Domain. http://www.spd.eee.strath.ac.uk/
~interact/fourier/fourier.html - 11/03/2004.
[FOURIER, 2004b] As Séries de Fourier - Departamento de Física da Universidade Federal do
Ceará. http://www.fisica.ufc.br/fourier/fourier1.htm - 20/03/2004.
[JACKSON, 1986] Jackson, L. B. – Digital Filters and Signal Processing. s.l. s.ed. 1986.
[KUO, 2001] Kuo, S. M.; Lee, B. H. Real-Time Digital Signal Processing: Implementations,
Applications and Experiments. s.l. s.ed. 2001.
[MARTINS, 2003] Martins, C. A. P. S.; Ordonez, E. D. M.; Corrêa, J. B. T.; Carvalho, M. B.
Computação Reconfigurável: Conceitos, Tendências e Aplicações. s.l. s.ed. 2003.
[MORON, 2004] Moron, C. E.; Saito, J. H.; Abib, S.; Mucheroni, M. L.; Furuya, N.; Battaiola, A.
Parallel
Architecture
Using
DSPs.
http://www.lac.inpe.br/~celso/pad/ufscar.html
-
23/03/2004.
[NICOLOSI, 2000] Nicolosi, D. E. C. Microcontrolador 8051 Detalhado. São Paulo. Érica, 2000.
[OPPENHEIM, 1998] Oppenheim, A. V.; Schafer, R. W.; Buck, J. R. Discrete-Time Signal
Processing. s.l. s.ed. 1998.
[QIAN, 1999] Qian, S. Joint Time-Frequency Analysis: Methods and Application. s.l. s.ed. 1999.
63
[RIVER,
2004]
River,
W.
Re-Configurable
Computing.
http://www.windriver.com/
whitepapers/reconfigurable_computing.html - 11/03/2004.
[SMITH, 2004] Smith, J. O. III Mathematics of the Discrete Fourier Transform. http://ccrmawww.stanford.edu/~jos/mdft/index.html - 21/03/2004.
[VILLASENOR, 2004] Villasenor, J.; Mangione-Smith, W. H. Configurable Computing.
http://xputers.informatik.unikl.de/reconfigurable_computing/ villasenor/0697villasenor.html
- 11/03/2004.
[YADAV, 1996] Yadav, N. S. Design of Dual i486 Processor Card. Department of Computer
Science and Engineering, Indian Institute of Tecnology, Bombay, Índia, 1996.
[ZELENOVSKY, 2004] Zelenovsky, R.; Mendonça, A. Processadores Para o Próximo Milênio.
http://www.clubedohardware.com.br/ milenio1.html - 23/03/2004.
[ZUIM, 2002] Zuim, R. L. Resolução de Problemas de Satisfabilidade Usando Arquiteturas
Reconfiguráveis. s.l. s.ed. 2002.
64
Download

Computação Configurável utilizando Processamento Paralelo