Escolar Documentos
Profissional Documentos
Cultura Documentos
UNICENP/NCET
Curitiba
2007
TERMO DE APROVAÇÃO
O circuito simulado (circuito evoluído) é um amplificador de baixo ruído (LNA – Low Noise
Amplifier) que usa tecnologia de circuitos integrados CMOS e modelagem de transistores
MOSFET do tipo enriquecimento com base em corrente. Valores e dimensões de componentes
são utilizadas como variáveis no projeto do circuito a fim de obter um desempenho adequado do
amplificador para a freqüência central de operação. Foram determinados quatro parâmetros para
avaliação de desempenho: impedância do circuito, potência dissipada, diferença de fase e
linearidade de operação.
ABSTRACT
The project consists on a system capable of evolving (through the use of Genetic Algorithms) a
circuit. This system is formed by three main modules: genetic algorithm (embedded on FPGA),
evolvable module (simulated on SMASH software) and assessment module (C++ developed
software). The assessment module runs on a personal computer and has an interface with the
genetic algorithm (GA) embedded on a FPGA.
The project main objective is to embed a variation of a specific GA (the compact genetic
algorithm) on a FPGA. The hardware evolution is used to validate the search power of the
embedded GA to solve a complex problem.
The simulated circuit (evolvable circuit) is a Low Noise Amplifier (LNA) based on CMOS
integrated circuit technology and MOSFET transistor modeling. Values and dimensions of
components are used as variables on circuit design project to obtain an amplifier adequate
performance on a central operation frequency. Four parameters are used to assess performance:
circuit impedance, dissipated power, phase difference and operating linearity.
AG – Algoritmo Genético
AGC – Algoritmo Genético Compacto
CE – Computação Evolutiva
EA – Algoritmo Evolutivo
FPGA – Field Programmable Gate Array
HE – Hardware Evolutivo
LNA – Low noise amplifier
NCET- Núcleo de Ciências Exatas e Tecnológicas
PC – Computador Pessoal
PLD – Programmable logic device
UNICENP – Centro Universitário Positivo
LISTA DE TABELAS
Para estes circuitos eletrônicos são pesquisadas diversas formas de manutenção remota visando
minimizar o problema de acesso. Entretanto, há aplicações em que não é possível prever ou
calcular as alterações necessárias em um circuito eletrônico, como o desgaste de componentes
em satélites artificiais devido às oscilações térmicas e tempo de utilização.
Motivado pela necessidade específica destas aplicações eletrônicas este trabalho tem por objetivo
embarcar um algoritmo genético em um dispositivo de hardware de baixo consumo de energia.
Este algoritmo através de variáveis pré-definidas irá evoluir um circuito para que sua
funcionalidade esteja dentro do esperado. Através de soluções de computação evolutiva como
esta (algoritmos genéticos), soluções de hardware evolutivo podem ser criadas de forma que
circuitos eletrônicos não precisem de monitoramento de variáveis, cálculos de otimização ou
intervenção humana para sua manutenção (TETSUYA HIGUCHI, et al, 1999).
1.1 Motivação
10
1.2 Definição do Trabalho
11
CAPÍTULO 2 – FUNDAMENTAÇÃO TEÓRICA
A fundamentação teórica está divida em três partes, de forma a abranger estes três tópicos
fundamentais do projeto (PLD, AG e HE) e suportar as escolhas tomadas para a utilização de um
tipo específico de cada tecnologia.
Quando soluções inovadoras para problemas difíceis de projeto de hardware são necessárias,
programação com algoritmos genéticos pode ser usada para criar projetos de hardware em
termos de linguagem de descrição de hardware. A estrutura de um dispositivo de hardware
reconfigurável pode ser alterada quantas vezes forem necessárias realizando no dispositivo o
download de string de bits, chamado de bits de configuração. FPGAs são um exemplo típico de
dispositivos reconfiguráveis de hardware (HIOGUCHI et al, 1999).
As FPGAs são uma classe específica de PLDs. Uma FPGA é um dispositivo semicondutor que
contém componentes de lógica programável e interconexões programáveis. Os componentes de
12
lógica programável podem ser configurados para duplicar a funcionalidade de portas lógicas
básicas como AND, OR, XOR, NOT ou funções combinacionais mais complexas como decoders
ou funções matemáticas simples. Na maioria das FPGAs estes elementos lógicos programáveis
(ou blocos lógicos, na linguagem de FPGA) também incluem elementos de memória, que podem
ser simples flip-flops ou blocos de memória mais completos.
A hierarquia das interconexões programáveis permite que blocos lógicos de uma FPGA estejam
interconectados conforme necessário de acordo com o sistema de elaboração de projeto. Estes
blocos lógicos e interconexões podem ser programados após a fabricação pelo cliente /
desenvolvedor (por isto o termo field programmable, de programável em campo) de forma que a
FPGA possa realizar qualquer função lógica necessária.
Um algoritmo evolutivo (AE) utiliza alguns mecanismos inspirados na evolução biológica como:
reprodução, mutação, recombinação, seleção natural e sobrevivência do mais apto. Soluções
candidatas para o problema de otimização fazem o papel de indivíduos em uma população e a
função de custo determina o ambiente em que a solução “vive” (VAN ZUBEN, 2000).
Uma extensão dos algoritmos genéticos, denominada programação genética, foi introduzida por
Koza (1992), e tem por objetivo básico evoluir programas de computador usando os princípios
13
da evolução natural. Atualmente a programação genética tem sido aplicada a uma grande
variedade de problemas, como na síntese de circuitos elétricos analógicos e na definição de
arquiteturas de redes neurais artificiais (VAN ZUBEN, 2000).
O algoritmo evolutivo mantém uma população de indivíduos P(t ) = {x1t ,..., xnt } na iteração
(geração) t. Cada indivíduo representa um candidato à solução do problema em questão e, em
qualquer implementação computacional, assume a forma de alguma estrutura de dados S. Cada
solução xit é avaliada e produz alguma medida de adaptação, ou fitness.
Uma nova população é formada na iteração t + 1 pela seleção dos indivíduos mais adaptados.
Alguns indivíduos da população são submetidos a um processo de alteração por meio de
operadores genéticos para formar novas soluções. Após um número de gerações, a condição de
parada deve ser atendida, a qual geralmente indica a existência, na população, de um indivíduo
que represente uma solução aceitável para o problema, ou quando o número máximo de gerações
foi atingido (VAN ZUBEN, 2000).
14
originais encontrados em sistemas naturais. Os algoritmos genéticos utilizam os operadores de
crossover e mutação.
Algoritmos genéticos constituem, assim, uma classe de métodos de busca de propósito geral que
apresentam um balanço notável entre aproveitamento de melhores soluções e exploração do
espaço de busca. Embora apresentem etapas não-determinísticas em seu desenvolvimento, os
algoritmos genéticos não são métodos de busca puramente aleatórios, pois combinam variações
aleatórias com seleção, polarizada pelos valores de adequação (fitness) atribuídos a cada
indivíduo. Outra propriedade importante dos algoritmos genéticos (assim como de todos os
algoritmos evolutivos) é que eles mantêm uma população de soluções candidatas enquanto que
os métodos alternativos processam um único ponto no espaço de busca a cada instante (VAN
ZUBEN, 2000).
15
“boas” se reproduzem, enquanto que soluções relativamente “ruins” são eliminadas. Para fazer a
distinção entre diferentes soluções, é empregada uma função de avaliação ou de adaptabilidade
(fitness) que simula o papel da pressão exercida pelo ambiente sobre o indivíduo (VAN ZUBEN,
2000).
Uma maneira em que memória significativa (e, portanto, potência e espaço) pode ser
economizada em AEs baseados em hardware é representar populações de soluções candidatas
como vetores de probabilidade ao invés de grupos de strings de bits. Um AG padrão representa
uma população candidata como um grupo de genomas de string de bits, necessitando de espaço
de memória RAM embarcada proporcional a LN onde L é o comprimento do genoma e N é o
número de candidatos da população. Um método baseado em vetor de probabilidades representa
a população como um único vetor de probabilidades em que cada bit em cada string de bits de
um candidato teria o valor de zero ou um. Adotando a interpretação da freqüência relativa de
probabilidade, cada elemento no vetor de probabilidades representa a proporção de membros de
uma população simulada que tem um ou zero na posição do bit correspondente. Presumindo uma
16
representação de probabilidade binária de precisão fixa seria necessário L(log 2 N ) bits de
memória para representar uma população de tamanho L com strings de N bits. Para genomas de
mesmo tamanho, AGs padrão iriam precisar memória de O (N ) , enquanto um AG baseado em
vetor de probabilidades precisaria de O (log 2 N ) .
Pelo menos dois AE que empregam codificação de população em vetores de probabilidade têm
sido explorados na literatura. Destes, o algoritmo genético compacto (AGC) é de interesse
particular porque ele simula algumas propriedades do SGA e porque já há na literatura uma
implementação em hardware elegante (GALLAGHER et al. 2004).
Segundo GALLAGHER et al (2004), o AGC simples não tem poder de busca suficiente para uso
em diversos projetos de HE. Portanto, para solucionar o problema do circuito evolutivo no
presente trabalho foi utiliza-se uma variável de uma família de AGC proposta por JOHN
GALLAGHER et al (2004) e a implementação de hardware também proposta no mesmo artigo.
Os fundamentos deste AGC são encontrados no modelo original de GOLDBERG et al. (1999).
Este modelo é descrito na Figura 3.
17
Fig. 3 - Pseudocódigo do Algoritmo Genético Compacto
A família de AGC proposta por GALLAGHER et al. (2004) sobre o modelo de GOLDBERG et
al. (1999) e utilizada neste projeto possui duas modificações em relação ao AGC padrão:
elitismo e mutação.
Hardware evolutivo é uma área de pesquisa que objetiva construir, por exemplo, circuitos
eletrônicos cujo modelamento ou operação são definidos através de um processo de evolução.
Hardware evolutivo é um novo campo que relaciona hardware reconfigurável, inteligência
artificial e sistemas autônomos e tolerantes a falhas. Hardware evolutivo se refere ao hardware
que pode mudar sua arquitetura e comportamento dinamicamente e autonomamente pela
interação com seu ambiente.
Na sua forma fundamental um AE manipula uma população de indivíduos onde cada indivíduo
descreve como construir um circuito candidato. A cada circuito é associado um fitness, que
indica quão bem o circuito candidato satisfaz a especificação de projeto. O AE usa operadores
aleatórios para evoluir novas configurações de circuitos a partir de configurações existentes.
Feito corretamente, o AE irá ao longo do tempo evoluir uma configuração de circuito que exibe
comportamento desejável.
Cada candidato pode ser tanto simulado quanto fisicamente implementado em um dispositivo
reconfigurável. Dispositivos reconfiguráveis típicos são FPGAs (para projetos digitais) ou field
programmabel analog arrays (FPAAs, para projetos analógicos).
Há diversas razões para evoluir circuitos. Em muitos casos os métodos convencionais (ex.
fórmulas) de projeto podem ser utilizados para desenhar circuitos. Mas em outros casos a
especificação de projeto não fornece informação suficiente para permitir o uso de métodos
convencionais. Por exemplo, a especificação pode somente estabelecer o comportamento do
hardware em questão. Em outros casos o circuito deve adaptar-se (ex: modificar sua
configuração) para compensar falhas ou talvez uma mudança operacional no ambiente.
18
Hardware evolutivo é um novo conceito no desenvolvimento de máquinas adaptativas on-line.
Em contraste com o hardware convencional onde a estrutura é irreversivelmente fixada no
processo de desenho, HE é designado para se adaptar a mudanças nos requisitos das tarefas ou
mudanças no ambiente através da sua habilidade de reconfigurar sua própria estrutura de
hardware on-line (dinamicamente) e autonomamente. Esta capacidade de adaptação, atingida por
AEs (como os AGs) tem grande potencial para desenvolvimento de aplicações industriais
inovadoras (HIGUCHI et al. 1999).
O fitness de um circuito evoluído pode ser medido através do quão bem ele está de acordo com a
especificação do projeto. O fitness em problemas de HE é determinado por dois métodos:
• Evolução extrínseca: todos os circuitos são simulados para avaliar seu desempenho;
• Evolução intrínseca: testes físicos são realizados em hardware.
19
CAPÍTULO 3 – ESPECIFICAÇÃO DO PROJETO
O hardware do projeto é composto por dois módulos principais: kit didático da FPGA e
computador pessoal. A Figura 4 ilustra a separação entre o os módulos do hardware.
O módulo de avaliação dos indivíduos (desenhos de circuitos) gerados pelo algoritmo genético
está implementado em um computador. Apenas o processamento do AG é realizado na FPGA,
conforme diagrama em blocos do projeto (Figura 5).
20
Algoritmo genético implementado em FPGA para evolução de hardware - Blocos funcionais
Geração de indivíduos Avaliação dos indivíduos Apresentação do Resultado
Início
Incremento/
Algoritmo Genético (FPGA)
decremento do
vetor de
Não probabilidades
Gerador de
números
aleatórios
Número de Geração do
Comparação com indivíduos Sim indivíduo
o vetor de atingido? final
probabilidades e
geração do novo
inivíduo
Recebimento dos
dados (indivíduo)
Arquivo com
resultado da
Módulo Avaliador (PC)
simulação
Arquivo
texto com
parâmetros Cálculo do fitness.
do indivíduo
Envio de dados
Software Smash (fitness)
Circuito Evolutivo (PC)
Recebimento dos
dados (indivíduo)
Arquivo
texto com
parâmetros
do indivíduo
Conversão dos
dados para
formato texto
padrão dos
parâmetros
Fim
21
com comando de simulação, recebe a resposta por meio de arquivo de simulação do SMASH,
calcula o fitness e o envia para a FPGA.
Não há interação do usuário com o software do projeto. A simulação e evolução de hardware são
simuladas em software para facilitar a implementação e substituir o hardware que realizaria estas
funções.
A comunicação entre a FPGA e o software é realizada por meio da porta paralela do PC. O
software foi desenvolvido na linguagem de programação C++ e o computador pessoal utiliza o
sistema operacional Windows XP.
22
CAPÍTULO 4 – DESENVOLVIMENTO E IMPLEMENTAÇÃO
4.1 Hardware
Com exceção do módulo de avaliação, todo o algoritmo genético está implementado em FPGA.
Para elaborar o circuito foi utilizado o software Quartus II da Altera. Os blocos elaborados, suas
funções e equipamentos utilizados estão descritos nos próximos tópicos.
MUX2x1
23
A cada ciclo de clock o RNG gera um novo número aleatório, seja ele utilizado ou não no fluxo
de dados do AGC. O número aleatório do diagrama é composto por 8 bits para uma
representação de um número entre 0 e 1 com ponto fixo.
Registrador do bit de elite (E_REG): O registrador do bit de elite indica qual registrador do
buffer contém o bit de elite (indivíduo campeão). Este componente do AGC é compartilhado por
todos os bits do genoma, ou seja, há apenas um registrador “E”. O pino <e_bit> é configurado
24
pelo módulo de avaliação, que após calcular o fitness, altera o valor do pino de acordo com o slot
em que se encontra o indivíduo melhor avaliado. O pino <e_load> é controlado pela unidade de
controle do AGC.
Comparador (CMP_2_1): O comparador desta estrutura de AGC possui duas entradas e uma
saída. As entradas são de 8 bits, utilizando a mesma representação de número com ponto fixo do
RNG e B_PBR. Se o valor da entrada do RNG é maior que a entrada do B_PBR (ou M_PBR) o
valor de saída é 0, caso contrário o valor de saída é 1.
Função de fitness (FUNCAO): O módulo de função de fitness é o componente que a partir dos
dados do barramento com os bits do indivíduo calcula o fitness. Sua saída <fitness> possui
largura y, dependendo de qual resolução se deseja do valor do fitness. O pino <r_write> indica
para o módulo quando o indivíduo já está disponível no barramento para que seja calculado seu
fitness. O pino <fit_ready> indica para o módulo controlador da avaliação que o resultado do
fitness do indivíduo já foi calculado e está disponível no barramento <fitness>.
Controlador do AGC (CTRL): O componente foi omitido na Figura 6 por possuir muitas
conexões com os demais módulos, o que poderia poluir visualmente o diagrama. Ele é
responsável por gerenciar todo o fluxo de informações através dos demais componentes por meio
da ativação dos pinos de controle dos módulos. Este módulo possui uma máquina de estados
para determinar as ativações dos pinos de controle. Os estados, pinos de entrada e pinos de saída
do controlador do AGC estão descritos no capítulo 4 no tópico 4.2.3 (diagrama de estados do
controlador do AGC).
25
Outros componentes: A estrutura do AGC ainda é composta por dois multiplexadores (um de
quatro entradas e outro de duas entradas) e uma porta XOR simples.
4.1.2 Materiais
Da família de FPGAs de baixo custo Cyclone II, o modelo EP2C35 é um modelo intermediário e
contêm 33216 blocos lógicos, 105 blocos de RAM e máximo de 475 pinos utilizáveis pelo
usuário (Tabela 1). Este kit foi o escolhido para desenvolvimento do projeto porque facilita a
configuração da FPGA e sua comunicação com o PC por meio dos barramentos de expansão.
26
Não foi utilizado nenhum componente já disponível no kit para comunicação ou mesmo o
processador NIOS. Apenas a porta USB Blaster foi utilizada para a configuração da FPGA. Toda
a arquitetura do AGC e comunicação com o PC foram implementadas diretamente no chip
através de lógica desenvolvida em linguagem de descrição de hardware da Altera (AHDL).
A comunicação entre a FPGA e o computador através da porta paralela foi estabelecida através
de um cabo (Figura 8) montado para realizar esta ligação.
Foram utilizados os oito pinos de dados da porta paralela e os pinos wait, write e ground,
totalizando onze pinos. A conexão do cabo com a porta paralela do computador foi realizada por
meio do conector padrão DB25. A conexão entre o cabo e a placa DE2, conforme exibido pela
Figura 9, foi realizada por meio dos conectores do cabo ao barramento de pinos de expansão da
placa.
27
Fig. 9 -Conexão entre a placa DE2 e o cabo que liga à porta paralela
4.2 Software
O software no computador tem o objetivo de comunicar-se com a FPGA para obter os valores
dos indivíduos, simular o circuito no software SMASH, calcular o fitness e enviar o valor para a
FPGA.
28
seguida, no estado i01, os registradores do gerador de números aleatórios são inicializados com
um valor pré-definido no gerador e os registradores de probabilidade de mutação são
inicializados de acordo com um valor definido de mutação (valores configurados no código em
AHDL).
Passo 3) O módulo de avaliação dos indivíduos (FEV) recebe sinal para avaliar o indivíduo do
slot campeão do buffer. O FEV envia sinal para o módulo FUNCAO iniciar o cálculo do fitness
do indivíduo. Ao fim deste processo o FEV recebe um sinal indicando o término da avaliação e
armazena o resultado no registrador interno indicado pelo bit de campeão. Este passo
corresponde aos estados g01 e g02 do CTRL.
Passo 5) O módulo de avaliação dos indivíduos (FEV) recebe sinal para avaliar o indivíduo do
slot competidor do buffer. O FEV envia sinal para o módulo FUNCAO iniciar o cálculo do
fitness do indivíduo. Ao fim deste processo o FEV recebe um sinal indicando o término da
avaliação e armazena o resultado no registrador interno diferente do bit indicador de campeão.
Este passo corresponde aos estados a00 e a01 do CTRL.
Passo 6) O FEV gera o bit correspondente ao slot do buffer que contém o indivíduo de melhor
fitness e o CTRL envia o sinal para o registrador E atualizar seu valor. Este passo corresponde ao
estado a01 do CTRL.
Passo 7) As linhas de ajuste de B_PBR (<b_inc> e <b_dec>) são ativadas de acordo com as
necessidades de ajuste calculadas pelo módulo INC/DEC. Este módulo é um circuito
combinacional e realiza ajuste no vetor de probabilidade fazendo com que ele sofra uma
alteração na direção do indivíduo campeão em um determinado bit caso ele seja diferente entre o
campeão e o competidor. Este passo corresponde ao estado c00 do CTRL.
29
Passo 8) Um indivíduo é gerado pelo comparador utilizando números aleatórios do RNG e
probabilidades do M_PBR. Os bits desse indivíduo passam por uma porta lógica XOR com os
bits do indivíduo do slot campeão do buffer. O indivíduo resultante é gravado no slot de
competidor do buffer. Este passo corresponde ao estado m00 do CTRL.
Passo 9) O módulo de avaliação dos indivíduos (FEV) recebe sinal para avaliar o indivíduo do
slot competidor do buffer. O FEV envia sinal para o módulo FUNCAO iniciar o cálculo do
fitness do indivíduo. Ao fim deste processo o FEV recebe um sinal indicando o término da
avaliação e armazena o resultado no registrador interno diferente do bit indicador de campeão.
Este passo corresponde aos estados m01 e m02 do CTRL.
Passo 10) O FEV gera o bit correspondente ao slot do buffer que contém o indivíduo de melhor
fitness e o CTRL envia o sinal para o registrador E atualizar seu valor. Este passo corresponde ao
estado m02 do CTRL.
Após o passo 10 é verificado se o processo de evolução chegou ao fim. Podem existir diversas
condições de parada como, por exemplo: número de gerações, convergência parcial do vetor de
probabilidades, convergência total do vetor de probabilidades, fitness mínimo atingido, etc.
Caso seja verificado que o processo de evolução não chegou ao fim o controlador executa
novamente o processo a partir do passo três. Nos casos descritos como teste do CGA a condição
de parada (quantidade de indivíduos desejada) foi determinada em software.
30
Início
BUF[0], BUF[1], E ← 0
RNG(load)
B_PBR ← 0,5
M_PBR ← Taxa de Mutação
1
FEV(E) ← FUNCAO(BUF[E])
3
FEV(!E) ← FUNCAO(BUF[!E])
5
E ← FEV(BIT_E)
6
Não
BUF[!E] ← XOR(CMP(RNG, M_PBR), BUF[E])
8
FEV(!E) ← FUNCAO(BUF[!E])
9
E ← FEV(BIT_E)
10
Fim do processo?
Sim
Fim
31
4.2.2 Diagrama de fluxo de dados do software avaliador
O software responsável pelo cálculo do fitness dos indivíduos gerados pelo AGC na FPGA foi
completamente desenvolvido em linguagem de programação C++ com o uso do compilador
Borland C++ Builder 6.0. O programa não possui interface com o usuário e não é orientado a
objetos. Antes de executar o software o usuário já deve ter ligado a placa com a FPGA contendo
a programação do AGC. Ao chamar o programa de cálculo do fitness o mesmo já inicia a
comunicação com o AGC conforme o diagrama da Figura 12. Não há indicadores do andamento
do processo. Ao final das avaliações dos indivíduos (o programa está configurado para avaliar
301 indivíduos por execução) o programa é encerrado automaticamente e gera um arquivo texto
de log contendo as informações dos indivíduos gerados e dos fitness calculados na execução.
32
contendo as configurações do circuito (arquivo .nsx) e os sinais de entrada (arquivo .pat). O
SMASH é chamado por linha de comando utilizando estes dois arquivos como parâmetros para
simulação e retorna dois arquivos com os resultados (arquivos com extensões .op e .dat). A
Figura 11 contém trechos de código do software com funções de configuração dos arquivos e
chamada do software SMASH com os parâmetros necessários para a simulação com os arquivos
configurados.
33
4.2.3 Diagrama de Estados do Controlador do AGC
A máquina de estados que controla o fluxo de informações entre os componentes do AGC está
no controlador do AGC. A Tabela 2 lista e descreve todos os estados, suas entradas e saídas. O
processo de evolução do AGC está dividido em 4 etapas: inicialização, geração de indivíduos,
avaliação dos indivíduos, ajustes no vetor de probabilidades e mutação.
Entradas Saídas
f_evaluate
incdec_fix
mux2_sel
rng_load
all_clear
mux4_1
mux4_0
b_write
f_finished
Processo Comentários
e_load
b_sel
m_inc[]
Estado
Estado
e_bit
S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
34
4.2.4 Diagrama de Estados do componente de comunicação
Uma máquina de estados controla a comunicação entre a FPGA e o PC. Toda a comunicação é
feita um byte por vez. Todos os parâmetros do projeto são de um byte, inclusive o fitness. Desta
forma a FPGA envia n bytes para a o PC, no qual n é o número de parâmetros do indivíduo, e
recebe um byte relativo ao fitness do indivíduo avaliado. Os estados e suas descrições estão
comentados na Tabela 3.
reg_write
reg_read
Processo Comentários
rd_end
estado
r_write
estado
ct_en
write
wait
35
Fig. 13 - Código da função de comunicação do computador com a FPGA
36
CAPÍTULO 5 – VALIDAÇÃO E RESULTADOS
Uma simulação do AGC foi realizada no software Quartus II para validar seu funcionamento e
convergência para busca do indivíduo ótimo de um problema simples. Foi elaborada uma função
em linguagem de descrição de hardware que possui entrada de doze bits e conta a quantidade de
bits 1. A saída da função possui largura de quatro bits, pois o menor resultado possível é zero
(indivíduo com todos os doze bits iguais a zero) e o maior resultado possível é doze (indivíduo
com todos os doze bits iguais a um).
Com esta configuração do AGC para avaliação do fitness foi simulada no Quartus II a sua
execução para verificar se o algoritmo convergia para um indivíduo com todos os bits iguais a
um. Na simulação realizada o algoritmo obteve um indivíduo com todos os bits iguais a um no
quadragésimo segundo indivíduo gerado (somando indivíduos gerados a partir do vetor de
probabilidades e mutações) e convergiu o vetor de probabilidades após 95 indivíduos avaliados.
Para correção no vetor de probabilidades após as avaliações foi utilizado um valor igual a 32
para incremento ou decremento. O vetor de probabilidades possui um byte de resolução para
cada bit, permitindo 256 níveis diferentes de probabilidade para cada bit. Com ajuste de valor 32
o AGC possuiu oito níveis diferentes de probabilidade para cada bit do indivíduo.
37
A Tabela 4 relaciona cada estado do AGC (descritos no tópico 4.2.3) e quantidade de ciclos de
clock observada na simulação. Para cada processo inteiro de geração de indivíduo a partir do
vetor de probabilidades até a mutação e avaliação da mutação são necessários nove ciclos.
Para cada avaliação de indivíduo gerado pela FPGA os valores de x e y foram recebidos no PC e
normalizados. Após a normalização o cálculo do resultado da função foi realizado, foi
38
normalizado e enviado para a FPGA. O objetivo das simulações realizadas foi verificar que o
AGC encontraria o indivíduo com o valor máximo da equação.
Para as diversas simulações realizadas uma grande parte encontrou o indivíduo ótimo (f(x,y)
igual a 93) com sessenta ou menos indivíduos gerados. Para as demais simulações os resultados
obtidos eram próximos ao ideal, entretanto, identificamos um problema devido a forma de
codificação do indivíduo. Como os valores das variáveis estavam em representação binária cada
bit representava o dobro de valor do bit a sua direita. Quando um indivíduo com fitness quase
ótimo era gerado pelo AGC e com valores de x e y muito próximos aos da representação dos bits
(ex.: 127, 128, 64) o mesmo encontrava dificuldades para convergir para o indivíduo ótimo. Isto
ocorreu porque para haver a mudança de um valor de 127 para 128, por exemplo, é necessário
que todos os bits sejam alterados, contrariando a tendência do vetor de probabilidades que
convergia para um determinado valor de acordo com os últimos indivíduos gerados e avaliados.
Em algumas situações o indivíduo ótimo não era obtido por causa deste problema da
representação do indivíduo, mas ocorreram também algumas situações em que a mutação
conseguiu gerar o indivíduo com as modificações necessárias para que este fosse melhor que o
anterior e não convergir prematuramente.
Para estas simulações foi utilizado incremento e decremento do vetor de probabilidades igual a
32 (possibilitando oito níveis de probabilidade) e mutação também igual a 32 (probabilidade de
um de cada oito bits sofrer mutação).
O software descrito no tópico 5.2 foi substituído pelo software final (conforme descrito no tópico
4.2.2) para validar o AGC com um problema de evolução de hardware. O objetivo desta
simulação é validar se o AGC é capaz de encontrar uma solução ótima para um problema
complexo, que neste caso é a evolução de um circuito. Esta evolução pode ser classificada como
off-line pois cada indivíduo (configuração de circuito) não é implementada, apenas a versão final
com a melhor configuração do circuito seria implementada.
O circuito escolhido para ser evoluído é um projeto de um amplificador de baixo ruído (LNA –
Low Noise Amplifier). Para saber o quanto o circuito evoluído está perto do circuito ótimo e
também para definir a função de fitness foi utilizada a metodologia proposta por BARONCINI e
39
GOUVEIA FILHO (2004) que usa tecnologia de circuitos integrados CMOS e modelagem de
transistores MOSFET do tipo enriquecimento com base em corrente. Foram utilizados os
resultados do relatório de PILLA JR. (2006), que contém os passos e valores obtidos para
desenho do circuito de acordo com a metodologia de BARONCINI, para comparação com os
resultados obtidos do AGC.
O circuito do LNA (Figura 14) possui diversos componentes eletrônicos, entretanto, de acordo
com a metodologia utilizada apenas alguns parâmetros são configuráveis e os resultados do
circuito devem respeitar algumas restrições.
40
TABELA 5 Restrições dos parâmetros do LNA
Parâmetro Descrição Restrição
Pdc Potência dissipada no LNA Menor que 30 mW
IIP3 Linearidade de resposta em 1GHz Maior que -10dB
ZMI Impedância do circuito Mais próximo possível de 50 ohms
ZFI Diferença de fase em 1GHz Mais próximo possível de zero graus
41
algumas simulações geraram indivíduos com parâmetros não aceitáveis conforme descrito na
Tabela 5.
42
CAPÍTULO 6 - CONCLUSÃO
Devido à avaliação dos indivíduos ser realizada no computador (ao invés da FPGA ou outro
circuito) o tempo necessário para o sistema encontrar uma solução aceitável de configuração de
circuito não permite que o mesmo seja utilizado para aplicações que exijam respostas rápidas.
Para utilização prática do sistema em aplicações reais e on-line de evolução de hardware se faz
necessário o desenvolvimento de um circuito com interfaces digitais de configuração de
parâmetros e um circuito de avaliação com tempo de resposta mínimo para que o sistema inteiro
opere em tempo real, se adequando instantaneamente a mudanças de operação que possam
surgir.
Melhorias podem ser realizadas no AGC implementado com modificações que ajudem no
refinamento das soluções encontradas, por exemplo, mudanças individuais nas taxas de mutações
dos bits ou taxas de mutação diferentes de acordo com o progresso da execução das simulações.
43
CAPÍTULO 7 - REFERÊNCIAS BIBLIOGRÁFICAS
GOLDBERG, D. E.; HARIK, G. R.; LOBO, F. G. The Compact Genetic Algorithm. IEEE
Transactions on Evolutionary Computation. VOL. 3, N. 4, November of 1999.
HIGUCHI, T., et al. Real-World Applications of Analog and Digital Evolvable Hardware. IEEE
Transactions on Evolutionary Computation. VOL. 3, N. 3, September of 1999.
Altera DE2 Development and Education Board User Manual, Altera Corporation, 2006.
BARONCINI, V. H. V.; GOUVEIA FILHO, O. C.. Design of RF CMOS Low Noise Amplifiers
Using a Current Based MOSFET Model. Proceedings of 17th Symposium on Integrated
Circuits and Systems Design. Porto de Galinhas. New York: ACM press, 2004. v. 1, p. 82-87.
PILLA JR., VALFREDO. Projeto de um amplificador de baixo ruído (LNA – Low noise
amplifier). Programa de pós-graduação em engenharia elétrica, Universidade Federal do Paraná.
Curitiba, Brasil, 2006.
44