Vous êtes sur la page 1sur 141

Universidade Federal de Campina Grande

Centro de Engenharia Eltrica e Informtica


Programa de Ps-Graduao em Engenharia Eltrica

Dissertao de Mestrado

Nova Arquitetura de Multiplicador em GF (28)


Utilizando Portas de Limiar Linear

Mestrando
Marlo Andrade Santos

Orientador
Prof. Dr. Raimundo Carlos Silvrio Freire
Orientador
Prof. Dr. Francisco Marcos de Assis

Campina Grande Paraba Brasil,


Setembro de 2015
Universidade Federal de Campina Grande
Centro de Engenharia Eltrica e Informtica
Programa de Ps-Graduao em Engenharia Eltrica

Nova Arquitetura de Multiplicador em GF (28)


Utilizando Portas de Limiar Linear

Dissertao apresentada Coordenadoria


do Programa de Ps-Graduao em
Engenharia Eltrica da Universidade
Federal de Campina Grande, em
cumprimento s exigncias para obteno
do Grau de Mestre no Domnio da
Engenharia Eltrica.

rea de Concentrao: Processamento da Informao

Marlo Andrade Santos

Orientador
Prof. Dr. Raimundo Carlos Silvrio Freire
Orientador
Prof. Dr. Francisco Marcos de Assis

Campina Grande Paraba Brasil,


Setembro de 2015
Dedicatria

Dedico este trabalho aos meus pais, Antnio Bento e Maria Gilza Andrade, e aos
meus irmos, Gledson Andrade e Shirley Andrade.
Agradecimentos

Agradeo aos meus orientadores Professores Raimundo Carlos Silvrio Freire e


Francisco Marcos de Assis, pela oportunidade de trabalhar e desenvolver atividades de
pesquisa cientfica no Laboratrio de Instrumentao e Metrologia Cientficas, LIMC, e
no Instituto de Estudos em Computao e Informao Qunticas, IQuanta, na
Universidade Federal de Campina Grande.
A Vanderson Reis, Arthur Farias, Nelson Campos e Marconni Menezes.
Aos meus colegas da ps-graduao do Laboratrio de Instrumentao e
Metrologia Cientficas.
Ao Conselho Nacional de Desenvolvimento Cientfico e Tecnolgico e do
Programa de Ps-Graduao em Engenharia Eltrica PPgEE-Copele.
Resumo
Nesta dissertao so apresentados o desenvolvimento e implementao em
hardware de uma nova arquitetura de multiplicador em corpos finitos baseada no
multiplicador de Mastrovito. Nesta arquitetura so utilizadas as portas de limiar linear
como elemento bsico de processamento, que o elemento bsico de uma rede neural
discreta. As redes neurais discretas implementadas com portas de limiar permitem
reduzir a complexidade dos circuitos quando comparados com implementaes com
lgica tradicional (portas AND, OR e NOT). Por esta razo, estender e implementar
portas de limiar linear na aritmtica dos corpos finitos se torna atraente. Assim, com a
finalidade de comprovar a eficincia de tais portas como unidades bsicas de
processamento da arquitetura de multiplicadores em (2 ), foi projetado, na
linguagem de descrio de hardware Verilog, um multiplicador em (28 ) utilizando
portas de limiar linear. Foram desenvolvidos diversos nveis de abstrao e utilizado a
FPGA (Field-Programmable Gate Array), ferramenta Quartus II e a placa de
desenvolvimento EP2C35F672C6, da Altera. Os resultados do desenvolvimento so
apresentados. A partir deles apresentado o funcionamento prtico da nova arquitetura
proposta do multiplicador em (28 ). A partir dos resultados da operao de
multiplicao em corpos finitos, observou-se uma taxa de acerto de 90%., verificando-
se, entretanto, que o tempo de processamento e contagem de portas ficou abaixo do
valor esperado.

Palavras-chave: corpo finito, multiplicador, portas de limiar linear.


Abstract

This dissertation describes the design, the developing and the implementation in
hardware of a new architecture of multiplying finite fields based upon the Mastrovito
multiplier. Such architecture utilizes linear threshold ports as basic processing elements,
which are the basic elements of a discrete neural network. The discrete neural networks
implemented with threshold ports allow reduce the complexity of the circuits when they
are compared to implementations of traditional logics (AND, OR and NOT ports). For
this reason, extending and implementing linear threshold ports in the arithmetics of the
finite fields becomes an attractive activity. Thus, with the objective of proving the
efficiency of such ports as basic units of processing of the multiplying architecture in
(2 ), that it has been designed, in the hardware description language Verilog, a
(28 ) multiplier utilizing the linear threshold ports. Several levees of abstraction
have been developed. The FPGA (Field-Programmable Gate Array) Quartus II tool
and the developing Altera hardware EP2C35F672C6 have been utilized. The results of
the development which are presented indicate the practical functioning of the new
architecture proposed by the (28 ) multiplier. However, its efficiency in terms of
time processing and counting of ports is under what would be expected. From the
results the multiplication operation in finite fields was observed with an accuracy rate of
90%.

Key words: finite fields, multiplier, linear threshold gates.


ndice

1. Introduo....................................................................................................................13
1.1 Motivao......................................................................................................13
1.2 Objetivo da Dissertao.................................................................................14
1.3 Organizao do Trabalho...............................................................................15

2. Aritmtica de (2 ) em Hardware...........................................................................16
2.1 lgebra de Corpos Finitos.............................................................................16
2.1.1 Propriedades Bsicas.......................................................................16
2.1.2 Propriedades dos Corpos Finitos.....................................................19
2.1.3 Bases de Corpos Finitos..................................................................22

2.1.4 Operadores de Adio e Subtrao em (2 )..............................24


2.1.5 Aritmtica Modular com Anis de Polinmios...............................25

2.2 Multiplicao em (2 )..............................................................................27


2.1.1 Multiplicador de Mastrovito...........................................................28
2.3 Concluso.......................................................................................................38
3. Redes Neurais Artificiais.............................................................................................39
3.1 Introduo......................................................................................................39
3.2 Circuito de Limiar Linear..............................................................................43
3.3 Portas de Limiar Linear.................................................................................44
3.4 Funes Simtricas........................................................................................47
3.5 Construo de Circuitos de 2 e 3 camadas....................................................49
3.5.1 Circuitos de 2 camadas...................................................................50
3.5.2 Circuitos de 3 camadas...................................................................54
3.6 Concluso.......................................................................................................59

4. Multiplicador em (2 ) Utilizando Portas de Limiar Linear...................................60


4.1 Introduo......................................................................................................60
4.2 Multiplicador de Mastrovito Utilizando Porta de Limiar Linear...................61
4.2.1 Multiplicao Polinomial Ordinria................................................61

4.2.2 Reduo de Mdulo ()...............................................................62


4.3 Nova Arquitetura de Multiplicador................................................................62
4.4. Concluso......................................................................................................78

5. Implementaes de Multiplicadores em (2 )........................................................79

5.1 Implementao do Multiplicador de Mastrovito em (24 )........................81

5.2 Implementao do Multiplicador de Mastrovito (28 )..............................83

5.3 Multiplicador em (28 ) utilizando clulas de memria............................84

5.4 Multiplicador em (28 ) utilizando redes neurais discretas........................85


5.5 Concluses.....................................................................................................90
6. Consideraes Finais e Perspectivas...........................................................................91
Referncias
Apndice I
Apndice II
Apndice III
Apndice IV
ndice de Figuras

Figura 2.1 Portas lgicas para operaes de adio e multiplicao em GF(2)..............19

Figura 2.2 Operao de adio em (2) utilizando portas lgicas XOR.....................25


Figura 2.3 Diagrama de blocos do multiplicador de Mastrovito.....................................29

Figura 2.4 Multiplicao Polinomial ( ). ()............................................................30


Figura 2.5 Diagrama da implementao em hardware de multiplicadores em
(2 )............................................................................................................................34
Figura 3.1 Modelo de um neurnio por Rosemblett........................................................42
Figura 3.2 Representao do Modelo de Propagao Direta...........................................43
Figura 3.3 Modelo de uma porta de limiar linear............................................................44
Figura 3.4 Modelo simplificado das duas portas lgicas.................................................46
Figura 3.5 Implementao da porta lgica XOR.............................................................47
Figura 3.6 Separao de Regies por meio de uma reta..................................................48
Figura 3.7 Soluo para o problema do AND lgico utilizando uma porta de limiar
linear com 1 =2 = 1 e = 1,5. ................................................................................48
Figura 3.8 Paridade de quatro variveis utilizando portas de limiar linear.....................52
Figura 3.9 Paridade de quatro variveis com circuito de duas camadas aplicando a
tcnica telescpica...........................................................................................................54
Figura 3.10 Implementao de um circuito com 3 camadas para computar a
paridade...........................................................................................................................57
Figura 4.1 Comparativo do crescimento exponencial com o polinomial........................66
Figura 4.2 Funo Paridade com de 11 variveis em um circuito com 3
camadas...........................................................................................................................67
Figura 4.3 Diagrama de Blocos da implementao a partir das operaes AND e
XOR.................................................................................................................................68

Figura 4.4 Primeira camada para o multiplicador em (24 )........................................69

Figura 4.5 Diagrama da Porta de Limiar Linear para o multiplicador em (2 )


utilizando redes neurais discretas....................................................................................70

Figura 4.6 Diagrama de implementao do bit 0 para (24 )......................................70

Figura 4.7 Diagrama de implementao do bit 1 para (24 ) .....................................71

Figura 4.8 Diagrama de Implementao do bit 2 para (24 ) ....................................71

Figura 4.9 Diagrama da Implementao do bit 3 para (24 ) ....................................71


Figura 4.10 Multiplicador em (24 ) utilizando portas de limiar linear.......................72

Figura 4.11 Primeira camada para o multiplicador em (28 )......................................73

Figura 4.12 Diagrama da implementao do bit 0 para (28 )....................................74

Figura 4.13 Diagrama da implementao do bit 1 para (28 )....................................74

Figura 4.14 Diagrama da implementao do bit 2 para (28 )....................................74

Figura 4.15 Diagrama da implementao do bit 3 para (28 )....................................75

Figura 4.16 Diagrama da implementao do bit 4 para (28 )....................................75

Figura 4.17 Diagrama da implementao do bit 5 para (28 )....................................75

Figura 4.18 Diagrama da implementao do bit 6 para (28 )....................................76

Figura 4.19 Diagrama da implementao do bit 7 para (28 )....................................76

Figura 4.10 Multiplicador em (28 ) utilizando portas de limiar linear.......................77


Figura 5.1: Arquitetura FPGA Stratix.............................................................................80
Figura 5.2 Comparao entre Custo e Volume para Tecnologias em FPGA e
ASIC................................................................................................................................80
Figura 5.3 - Implementao em hardware do multiplicador de Mastrovito em
(24 ).............................................................................................................................81

Figura 5.4 - Simulao do multiplicador de Mastrovito em (24 )..............................82

Figura 5.5 - Simulao do multiplicador de Mastrovito em (28 )..............................83

Figura 5.6 - Implementao em hardware do multiplicador em (28 ) utilizando


clulas de memria..........................................................................................................84

Figura 5.7 - RTL Viewer do Multiplicador em (28 ) utilizando portas de limiar


linear................................................................................................................................88

Figura 5.8 - Mapa de Verificao do Multiplicador em (28 ).....................................90


ndice de Abreviaes
GF Galois Field

FPGA - Field-Programmable Gate Array

ASIC - Application-Specific Integrated Circuit

CLB - Configuration Logical Blocks

RAM - (Random Access Memory

DSP - Digital Signal Processor

PLL - Phase-Locked Loop

DLL - Delay-Locked Loop

PCI - Peripheral Component Interconnect

AON AND, OR and NOT

VLSI - Very Large Scale Integration

MOS - Metal Oxide Semiconductor

CMOS - Complementary Metal Oxide Semiconductor

NIST - National Institute of Standards and Technology

AON-T: Arquitetura Tradicional

AON-TG: Arquitetura Tradicional com Portas de Limiar

MAS-TG: Arquitetura de Mastrovito com Portas de Limiar

ARQ-PRO: Nova Arquitetura proposta com Portas de Limiar Linear


ndice de Quadros

Quadro 2.1 Operaes bsicas de adio e multiplicao em GF(2)..............................19

Quadro 2.2 Diferentes representaes de elementos de um corpo em (2).................21

Quadro 2.3 Polinmios primitivos sobre (2).............................................................21

Quadro 2.4 Diferentes representaes em (28 )..........................................................24

Quadro 2.5 Tabela da verdade relativa operao de adio no corpo (2)...............25

Quadro 2.6 Complexidade espacial e temporal de multiplicadores de base


polinomial........................................................................................................................29

Quadro 2.7: Resultado da multiplicao em (24 ) em hexadecimal...........................36

Quadro 2.8: Resultado da multiplicao em (24 ) em decimal...................................37

Quadro 3.1: Limiar das portas AND e OR......................................................................46

Quadro 3.2 Crescimento do nmero de portas para diferentes tamanhos de


corpo................................................................................................................................58

Quadro 4.1 Evoluo do nmero de portas com o tamanho do corpo.............................65

Quadro 5.1 - Cdigo em Verilog para a implementao do bit 0..................................85

Quadro 5.2 - Verificao da Paridade.............................................................................87

Quadro 5.3 - Complexidade Espacial, fan-out e correntes na implementao do


multiplicador em GF(28)..................................................................................................89

Quadro 5.4 - Tenso e Correntes de operao por bit de sada do multiplicador em


GF(28)..............................................................................................................................89
FICHA CATALOGRFICA ELABORADA PELA BIBLIOTECA CENTRAL DA UFCG

S237n Santos, Marlo Andrade.


Nova arquitetura de multiplicador em GF (28) utilizando portas
de limiar linear / Marlo Andrade Santos. -- Campina Grande, 2015.
134 f. : il.

Dissertao (Mestrado em Engenharia Eltrica) - Universidade


Federal de Campina Grande, Centro de Engenharia Eltrica e
Informtica, 2015.
"Orientao: Prof. Dr. Raimundo Carlos Silvrio Freire, Prof.
Dr. Francisco Marcos de Assis".
Referncias.

1. Multiplicador - Engenharia Eltrica. 2. Corpo Finito.


3. Portas de Limiar Linear. I. Freire, Raimundo Carlos Silvrio.
II. Assis, Francisco Marcos de. III. Ttulo.
CDU 621:004.315.5(043)
1. INTRODUO
13

1. Introduo

1.1 Motivao

Os corpos finitos ou campos de Galois, tem se mostrado til no desenvolvimento


de solues em diversas reas da engenharia, como na codificao para controle de
erros, em criptografia, em processamento digital de sinais, entre outras. Operaes
aritmticas em corpos finitos, tais como soma, multiplicao, diviso, clculo de inversa
e exponenciao, so de fundamental importncia para as reas mencionadas. Por
exemplo, as operaes de multiplicao e diviso so utilizadas nos codificadores e
decodificadores em sistemas RS de correo de erros. Por sua vez, a soma, a
multiplicao, o clculo de inversa e exponenciao so fundamentais para o
desenvolvimento de criptosistemas que operam com curvas elpticas [1].

Assim, so desejveis multiplicadores em corpos finitos cada vez mais eficientes


para a melhoria do desempenho dos sistemas que os utilizam em virtude da demanda
por altas velocidades para esses sistemas [2].

Multiplicadores podem ser desenvolvidos em software e hardware.


Implementaes em software tem a desvantagem da necessidade de grande quantidade
de memria e capacidade de armazenamento [3]. Pesquisas tem sido realizadas em
busca de mtodos de multiplicao em corpos finitos, implementados em hardware
mais eficientes e velozes. Esta eficincia depende fundamentalmente da forma de
representao do corpo [4].

Projetos em FPGA(Field Programmable Gate Array) tm sido amplamente


realizados [5-6]. Muitos deles so projetados utilizando portas AND, OR e NOT, ditas
portas tradicionais. Uma alternativa para obteno de arquiteturas de multiplicadores
mais eficientes a utilizao de portas com um potencial maior que as portas AON.

Os resultados tericos obtidos em [7] demonstraram que a utilizao de portas


de limiar linear em arquiteturas de multiplicao em corpos finitos justificada, j que
diminui consideravelmente a complexidade espacial e temporal do circuito do
multiplicador se comparado ao multiplicador com portas tradicionais. Desta forma,
torna-se necessrio implementao fsica da arquitetura proposta para comprovar sua
viabilidade.
14

A multiplicao uma operao elementar em diversas reas da engenharia,


destacando-se em processamento digital de sinais, criptografia e cdigos corretores de
erros. Alm das aplicaes descritas, uma operao utilizada para implementar outras
operaes mais complexas, como a exponenciao e diviso.

O uso da matemtica, em especial da lgebra de corpos finitos (ou campo de


Galois) desenvolvida pelo francs variste Galois, vem sendo de fundamental
importncia para o desenvolvimento de vrias reas da engenharia, em especial a
criptografia e os cdigos corretores de erros [8].

Modalidades importantes de processamento de sinais tais como codificao para


proteo de erros e a criptografia exigem a realizao de operaes aritmticas
envolvendo elementos de corpos finitos. Em alguns casos, dependendo da velocidade de
processamento que necessrio, utiliza-se hardware dedicado ou uma soluo mista
usando DSPs combinados com hardware dedicado [9].

Arquiteturas que fazem o uso das redes neurais tem se destacado em diversas
aplicaes [1-7-4-5-6-8], no que diz respeito complexidade computacional dos
circuitos. O elemento de processamento destas redes so portas que calculam uma
funo de limiar linear ou um elemento analgico que executa uma funo sigmoidal
[7]. Segundo [10-11], estas portas demonstram um excelente potencial, quando
comparadas com as portas tradicionais, em relao reduo de rea do chip e obteno
de maiores velocidades de operao.

1.2 Objetivo da Dissertao

O objetivo desta dissertao de mestrado consiste no estudo, desenvolvimento e


implementao de um circuito que realize a multiplicao em corpos finitos utilizando
portas de limiar linear como elemento bsico de processamento. O multiplicador
proposto e implementado em FPGA baseado na arquitetura de Mastrovito, pois esta
apresenta uma das melhores medidas de complexidade espacial quando comparada com
outras arquiteturas de multiplicadores paralelos de alto desempenho.
15

1.3 Organizao do Trabalho

Esta dissertao est organizada da seguinte maneira: no captulo 1 realizada


uma breve introduo, onde apresentada a motivao, objetivos e organizao do
trabalho.

No captulo 2 abordada a aritmtica em corpos finitos, bem como uma reviso


sobre estruturas algbricas e suas propriedades e a apresentao do multiplicador de
Mastrovito.

No captulo 3 so apresentadas as redes neurais discretas e algumas


caractersticas e propriedades das portas de limiar linear, dos circuitos de limiar linear e
da construo de circuitos de 2 e 3 camadas.

No captulo 4 apresentada uma nova arquitetura para multiplicadores em


(24 ) e (28 ) utilizando portas de limiar linear.

No captulo 5 so expostas e discutidas diferentes implementaes destes


multiplicadores, baseadas no multiplicador de Mastrovito e utilizando portas de limiar
linear.

Por fim, no captulo 6 so apresentadas as consideraes finais e sugestes de


trabalhos futuros para continuao da pesquisa.
2. ESTRUTURAS ALGBRICAS
16

2. Aritmtica de ( ) em Hardware

2.1. lgebra de Corpos Finitos

Unidades aritmticas em corpos finitos, como multiplicadores, somadores e


subtratores em ( ), se baseiam em estruturas algbricas e na teoria dos corpos
finitos. O objetivo deste captulo fornecer os fundamentos bsicos dessa lgebra, com
a finalidade de facilitar o entendimento do trabalho. Uma descrio pormenorizada
sobre a teoria dos corpos finitos encontrada nas referncias [12-16].

2.1.1 Propriedades Bsicas

A lgebra possui trs estruturas bsicas chamadas de: corpo, anel e grupo. A
partir desta construo, toda a teoria da Aritmtica de Corpos Finitos desenvolvida. As
estruturas consistem em conjuntos de objetos matemticos, como os nmeros inteiros e
nmeros reais, que so associados a regras de relao entre os elementos que os
constituem.

Definio 2.1 (Grupo) Um conjunto associado a uma operao binria


+ denominado um grupo se as condies seguintes forem satisfeitas:

A operao binria + associativa, ou seja, ( + ) + = + ( + ),


para todo , , G;
Existe um nico elemento identidade e este pertence a , tal que
+ = + = , para todo G;
Existe um nico elemento inverso G, tal que + = + = ,
para todo elemento G.

Se um grupo satisfaz a condio de que + = + , para todo , G, diz-se


que o grupo abeliano ou comutativo.

Definio 2.2 (Anel) Um conjunto associado a duas operaes binrias


+ denominado anel se as condies seguintes forem
satisfeitas:

constitui um grupo abeliano sob a operao binria +, chamada adio.


O elemento identidade com relao adio o 0, chamado elemento
zero;
17

A operao binria , chamada multiplicao, associativa, ou seja,


(b c) = ( b) c, para todo , , R;
A operao binria obedece a propriedade da distribuio, ou seja,
(b + c) = b + c e (b + c) = + c , para todo
, , R.

Um anel comutativo quando a multiplicao comutativa, quando b =


b , para todo , R. Um anel no necessariamente possui identidade na
multiplicao, assim como inversas de seus elementos. Caso um anel tenha identidade
na multiplicao, esta identidade nica. Alm disso, se b = 1 e c = 1, ento
= e dito ter uma nica inversa denotada por 1 . Um elemento que possua
inversa em um anel dito uma unidade [17].

Definio 2.3 (Corpo) Um conjunto associado a duas operaes binrias


+ denominado corpo se as condies seguintes forem
satisfeitas:

F constitui um grupo abeliano sob a operao binria +, chamada adio.


O elemento identidade com relao adio o 0, chamado elemento
zero;
O conjunto dos elementos de , excluindo o zero, forma um grupo sob a
operao binria , chamada multiplicao. O elemento identidade com
relao a multiplicao o 1, chamado elemento unidade;
A operao de multiplicao distributiva sobre a adio. Ou seja, para
, e F, tem-se que ( + ) = + .

Por exemplo, o conjunto {0,1,2,3,4,5,6} com adio e multiplicao mdulo 7 forma


um corpo, pois:

1) O conjunto fechado sobre a adio mdulo 7 .

2 5 7 _ mod _ 7 0 (2.1)

3 5 8 _ mod _ 7 1 (2.2)

2) O conjunto de todos os elementos diferentes de zero fechado sobre a


multiplicao mdulo 7.
18

3 4 12 _ mod _ 7 5 (2.3)

5 2 10 _ mod _ 7 3 (2.4)
3) Satisfaz a propriedade da distribuio, pois:

3(4 4) 27 _ mod _ 7 6 (2.5)

3 4 35 12 15 27 _ mod _ 7 6 (2.6)

Tambm so exemplos de corpos os conjuntos dos nmeros reais, dos nmeros


complexos e dos nmeros racionais. Os corpos com nmero finito de elementos so
chamados de corpos finitos ou corpos de Galois. Um corpo finito com elementos
denotado por (). Um subconjunto de um corpo dito subcorpo se constituir um
corpo sob as mesmas operaes inerentes ao conjunto. Assim, o corpo dito uma
extenso deste subcorpo.

A ordem de um corpo uma potncia de um nmero primo, ou seja, = ,


sendo primo. Alm disso, existe sempre um nico corpo de ordem para qualquer
primo e inteiro e positivo.

Definio 2.4 (Corpos Finitos) Corpos Finitos so denotados por (), onde
um nmero primo positivo e o conjunto {0, 1, 2, . . . , 1} e as operaes binrias
e + so a multiplicao e adio mdulo , respectivamente.

Em Sistemas Digitais so utilizados bits sequenciados a partir de 0 e 1, ento o


interesse maior na subclasse de corpos finitos de tal que este seja potncia de 2. O
menor inteiro positivo para o qual =1 1 = 0 em um corpo dito ser a caracterstica
do corpo.

Circuitos Digitais operam naturalmente sobre base binria e as arquiteturas de


implementao de hardware so baseadas em corpos de caracterstica 2. Ou seja, para
estes sistemas o foco em corpos de caracterstica 2. Em (2), a representao do
corpo finito mapeada convenientemente no domnio digital [1]. Utilizando a notao
(), a subclasse ser denotada por (2 ). Portanto, (2), (4), (8),
(16), etc so corpos finitos (2 ).

O campo de Galois (), em que primo, chamado de corpos primos.


Qualquer corpo no qual seja primo pode ter as operaes de adio e multiplicao
19

mdulo como duas operaes binrias. O campo de Galois ( ) chamado de


extenso de corpo com (), sendo corpo de base de ( ). O campo de Galois
(2) chamado de corpo binrio, pois contm o conjunto {0,1} e utiliza adio e
multiplicao mdulo 2. No Quadro 2.1 temos as operaes bsicas de adio e
multiplicao em (2) e na Figura 2.1 os smbolos das portas equivalentes das duas
operaes.

Quadro 2.1 - Operaes bsicas de adio e multiplicao em GF(2)

Multiplicao mod 2 Adio mod 2


00=0 0+0=0
01=0 0+1=1
10=0 1+0=1
11=1 1+1=0

A multiplicao mod 2 equivalente a porta AND e a adio mod 2


equivalente a porta XOR.

Figura 2.1 - Portas lgicas para operaes de adio e multiplicao em (2)

O polinmio em (2) pode ser representado como coeficientes de (2)


0 + 1 1 + 2 2 + 3 3 + + , em que = 0 1 para 0 . Um
polinmio de grau se no existir nenhum termo no polinmio com potncia maior
que .

2.1.2 Propriedades dos Corpos Finitos

Corpos finitos podem ser obtidos a partir de anis polinomiais. Considere [],
um anel polinomial sobre o corpo . Fazendo a escolha de qualquer polinmio () que
pertena a [], temos:
20

Teorema 2.1 Para qualquer polinmio mnico em , o anel dos polinmios


mdulo () o conjunto de todos os polinmios com grau menor que ( ) junto com
a adio e multiplicao polinomial mdulo (). Se o polinmio () for primo, o
anel de polinmios um corpo [1].

Assim, encontrando um polinmio primo () de grau em (), pode-se


construir um corpo de Galois com elementos. Um polinmio () de grau sobre
(2 ) um polinmio na forma:

p x p0 p1 x1 p2 x 2 p3 x3 pn x n ,
(2.7)
em que os coeficientes , para 0 , so elementos de (2) = {0,1}.

Polinmios em (2) podem ser adicionados, multiplicados, subtrados e


divididos na forma padro.

Teorema 2.2 Um polinmio () sobre (2) de grau dito irredutvel se


() no for divisvel por nenhum polinmio sobre (2) de grau menor que e
maior que zero [1].

Para realizar a extenso do corpo (2 ) preciso escolher um polinmio


mnico e irredutvel () de grau em (2). O conjunto de 2 polinmios de grau
menor que formado chamado de . A adio e a multiplicao destes polinmios
so tomados mdulo () e o conjunto forma um corpo com 2 elementos, denotado
por (2 ). (2 ) uma extenso de (2)[13]. Como exemplo e de forma anloga
temos a formao dos nmeros complexos a partir dos nmeros reais. No Quadro 2.2
podemos observar os diferentes tipos de representaes para os elementos de um corpo
em (2), dados pelo conjunto {0, 1, , 1 + }.
21

Quadro 2.2 - Diferentes representaes de elementos de um corpo em (2)

Notao Inteira Notao Binria Notao Polinomial Notao Exponencial


0 00 0 0
1 01 1 0
2 10 1
3 11 +1 2

Se () um polinmio primitivo de grau sobre (2), ento ele divide


+ 1, em que = 2 1 [1]. No Quadro 2.3 pode ser observada uma lista com
polinmios primitivos sobre (2).

Quadro 2.3 - Polinmios primitivos sobre (2)

Grau Polinmio Primitivo


3 1 + 1 + 3
4 1 + 1 + 4
5 1 + 2 + 5
6 1 + 1 + 6
7 1 + 1 + 7
8 1 + 2 + 3 + 4 + 8
9 1 + 4 + 9
10 1 + 3 + 10
11 1 + 2 + 11
12 1 + 1 + 4 + 6 + 12
13 1 + 1 + 3 + 4 + 13
14 1 + 1 + 6 + 10 + 14
15 1 + 1 + 15
16 1 + 1 + 3 + 12 + 16

Teorema 2.3 Para cada elemento no nulo () ( ) divide 1 [1].

Utilizando o algoritmo de Euclides para diviso, temos:


22

q 1 at r. (2.8)
q1 at r . (2.9)
q 1 at r . (2.10)

Como = 1 1 = 1, ento:

p x q x d x r x . (2.11)

Assim, = 1 e = 0.
Teorema 2.4 O grupo de elementos no nulos diferentes de GF(q) um grupo
cclico sobre a multiplicao [18].

Seja () um corpo e ( ) a sua extenso. Seja elemento de ( ). O


polinmio de menor grau tal que () = 0 chamado de polinmio mnimo de .
Este polinmio existe, nico, irredutvel e utilizado para gerar palavras-cdigo, pois
a palavra () s cdigo se e somente se (1 ) = 0.


Para (), seja o menor inteiro tal que = . Define-se conjugado de
1 2 3 4 5
o conjunto = {, , , , , , }.

Para representar os 2 elementos, o conceito de base ser introduzido na seo


2.1.3. A escolha da representao a ser utilizada em um corpo sobre uma base depende
da implementao a ser adotada.

2.1.3 Bases de Corpos Finitos

Existem diferentes tipos de bases para representar os elementos de um corpo


finito. As bases mais utilizadas para projetar operadores aritmticos sobre corpos finitos
so a base polinomial, tambm conhecida como base padro ou cannica, base normal e
base dual. Neste trabalho utiliza-se a base polinomial, pois o multiplicador proposto
baseado no multiplicador de Mastrovito e este um multiplicador em (2 ) de base
polinomial.

Um corpo extenso GF(2n ) de um corpo GF(q) pode ser visto como um espao
vetorial de dimenso sobre (). Cada elemento de (2 ) pode ser representado
pela combinao linear dos elementos de uma base, em que os coeficientes da
combinao linear so elementos de (). Em outras palavras, um conjunto de
23

elementos linearmente independentes = {0 , 1 , 2 , 3 , , 1 } em (2 )


chamado de base de (2 ) se um elemento (2 ) for representado unicamente
como uma soma ponderada desta base sobre (2).

Definio 2.5 (Base Polinomial) O conjunto {1, , 2 , 3 , , 1 }, em que


uma raiz do polinmio irredutvel () de grau em (), chamado base
polinomial, cannica ou padro [17].

A base polinomial bastante intuitiva, pois est relacionada diretamente


representao dos elementos do corpo de extenso como polinmios definidos em um
subcorpo. Um elemento que pertena a (2 ) representado pelo polinmio ( ) =
0 + 1 1 + 2 2 + + 1 1 , definido em (2), e cada elemento de (2 )
representa uma classe de resduo mdulo (). A representao polinomial ( )
equivalente a () = 0 + 1 1 + 2 2 + + 1 1 , sendo uma raiz de ( ).

Uma vantagem de se utilizar a base polinomial em multiplicadores que os


mesmos no requerem converso de base. Esta caracterstica torna o projeto de
multiplicadores em (2 ) mais simples e eficientes quando comparados com projetos
de multiplicadores utilizando outras bases [2].

Considerando (28 ) e o polinmio irredutvel em (2), sendo ( ) = 8 +


4 + 3 + 2 + 1, tomamos como a raiz de ( ). Ento
= {1, , 2 , 3 , 4 , 5 , 6 , 7 } forma a base polinomial. Todos os 256 elementos
podem ser representados como = 0 + 1 1 + 2 2 + 3 3 + 4 4 + 5 5 +
6 6 + 7 7 , em que (2).

No Quadro 2.4 so mostradas as diferentes formas de representao de 15 dos


256 elementos de (28 ).
24

Quadro 2.4 - Diferentes representaes em (28 )

Elemento de ( ). Representao Representao Vetorial


Polinomial
0 0 (0,0,0,0,0,0,0,1)
(0,0,0,0,0,0,1,0)
2 2 (0,0,0,0,0,1,0,0)
3 3 (0,0,0,0,1,0,0,0)
4 4 (0,0,0,1,0,0,0,0)
5 5 (0,0,1,0,0,0,0,0)
6 6 (0,1,0,0,0,0,0,0)
7 7 (1,0,0,0,0,0,0,0)
8 4 + 3 + 2 + 1 (0,0,0,1,1,1,0,1)
9 5 + 4 + 3 + (0,0,1,1,1,0,1,0)
10 6+ 5 + 4 + 2 (0,1,1,1,0,1,0,0)
11 7+ 6 + 5 + 3 (1,1,1,0,1,0,0,0)
12 7 + 6 + 3 + 2 +1 (1,1,0,0,1,1,0,1)
13 7+ 2 + (1,0,0,0,0,1,1,0)
14 4 + + 1 (0,0,0,1,0,0,1,1)

2.1.4 Operadores de adio e subtrao em ( )

Considere um corpo finito (2 ) e uma base = {0 , 1 , 2 , 3 , , 1 } para


este corpo. A operao de adio de dois elementos ( ) = 0 + 1 1 + 2 2 + +
1 1 e ( ) = 0 + 1 1 + 2 2 + + 1 1 pertencentes a este corpo
realizada adicionando seus coeficientes um a um. Ou seja, + = (0 + 0 ) +
(1 + 1 ) 1 + (2 + 2 ) 2 + + (1 + 1 ) 1 , sendo , (2). Esta
operao representada no Quadro 2.5, na forma de tabela da verdade e na Figura 2.2
na forma de portas lgicas.
25

Considerando apenas dois elementos, podemos utilizar uma porta lgica XOR
para realizar esta operao. Consequentemente, a adio + pode ser implementada
por um conjunto de portas XOR.

Quadro 2.5 - Tabela da verdade relativa operao de adio no corpo (2)

+ 0 1
0 0 1
1 1 0

Figura 2.2 - Operao de adio em (2) utilizando portas lgicas XOR [6]

Uma vez que a inversa aditiva de um elemento pertencente a (2 ) o


prprio, a operao de subtrao em corpos finitos de caracterstica 2 equivalente
operao de adio [13].

2.1.5 Aritmtica Modular com Anis de Polinmios

Seja um polinmio mnico, coeficiente dominante igual a 1, () de grau .


Todo polinmio () pode ser representado por:

p x q x d x r x (2.12)

sendo o grau de () < . Logo, o resto da diviso dos polinmios () e ()


denotado por:

r x p x mod d x (2.13)

O conjunto das possibilidades de restos polinomiais dado por:


26

Rp , m
r r x r x
0 1
1
2
2
rm1x m1 | r j P , 0 j m 1 (2.14)
As regras e leis da aritmtica polinomial so as mesmas para a aritmtica
modular.

Sendo () = () () e () = () (), ou seja, () =


() ()() () = () ()(), ento:

p x h x r x s x q x t x d x (2.15)

p x h x r x s x q x s x t x r x d x q x t x d 2 x (2.16)

Logo,

p x h x mod d x r x s x mod d x (2.17)

p x h x mod d x r x s x mod d x (2.18)

Sendo assim, as leis da adio e multiplicao polinomiais () so


definidas pelas equaes (2.19) e (2.20).

r x s x r x s x mod d x (2.19)

r x s x r x s x mod d x (2.20)

em que no lado esquerdo da equao, () e () so elementos do conjunto de restos


polinomiais ,, enquanto que no lado direito da equao, () e () correspondem a
polinmios ordinrios [13].

Hardware digital opera intrinsicamente em dois estados e com o cdigo binrio.


Uma extenso do corpo finito em , fazendo uma potncia de 2, pois o Campo de
Galois (2) mapeado diretamente no domnio digital. Uma subclasse denotada por
(2 ). Desta forma, um campo finito (16) ou 16 ou (24 ) pode ser
representado pelo conjunto de polinmios sobre 2 de grau menor que 4. A
representao da forma descrita na Equao (2.21).

F16 GF 24 {a3 x3 a2 x 2 a1 x1 a0 x 0 | ai 0,1} (2.21)


27

Alternativamente, cada polinmio 3 3 + 2 2 + 1 1 + 0 0 representado


pelo correspondente vetor de coeficientes (3 , 2 , 1 , 0 ) de dimenso 4, conforme a
equao (2.22).

F16 GF 24 { a3 , a2 , a1 , a0 | ai 0,1 } (2.22)

Esta ltima representao muito adequada para programas computacionais, j


que o polinmio 4 + + 1 irredutvel para 2 . Ou seja, () = 4 + + 1, da
forma geral () = + + 1, um polinmio primitivo em (24 ) e com ele pode-
se realizar operaes neste corpo com mdulo de (). Uma das operaes a
multiplicao.

O primeiro passo para realizar uma multiplicao em (24 ) realizar uma


multiplicao usual de polinmios, com a ressalva que os coeficientes sejam
(3 , 2 , 1 , 0 ), no qual {0,1}. Ento, uma reduo de coeficientes utilizando
2 necessria. O segundo passo fazer a reduo mod por um polinmio () =
4 + + 1 de (24 ).

O mesmo procedimento realizado para se obter a representao de um corpo


maior que 4. Por exemplo, a representao em (28 ).

F256 GF 28 {a7 x7 a6 x6 a5 x5 a4 x 4 a3 x3 a2 x 2 a1 x1 a0 x 0 | ai 0,1}. (2.23)

Alternativamente, cada polinmio 7 7 + 6 6 + 5 5 + 4 4 + 3 3 +


2 2 + 1 1 + 0 0 representado pelo correspondente vetor de coeficientes
(7 , 6 , 5 , 4, 3 , 2 , 1 , 0 ) de dimenso 8:

F256 GF 28 { a7 , a6 , a5 , a4, a3 , a2 , a1 , a0 | ai 0,1 }. (2.24)

2.2 Multiplicao em ( )

Considere um nmero primo. O conjunto de restos mdulo , () =


{0, 1, . . . , 1} um corpo finito chamado de corpo primo. Todo corpo finito possui
um elemento nulo, um elemento de unidade e uma extenso de grau finito de um
corpo primo. Os corpos finitos ou Campo de Galois so na forma ( ), em que
28

primo e um nmero inteiro e positivo. Logo, o corpo ( ) possui elementos


[9].

Para um corpo com caracterstica 2, temos = 2, (2 ) contem 2


elementos e seu corpo primo (2) = {0,1}. O seu grupo multiplicativo possui
2 1 elementos e um elemento , elemento primitivo, est contido nestes elementos
tal que todos os elementos de (2 ) {0} podem ser representados como potncias
de tal elemento. Assim, tem-se:

GF 2n 0 1 , 2 ,, 2 n2 , 2 n1 1 . (2.25)

Fazendo ( ) = 0, tem-se:

n Q qn1 n1 qn2 n2 q1 1 q0 . (2.26)

A equao (2.26) utilizada para representar todos os elementos do corpo como


uma combinao linear nica das potncias {1, , 2 , 3 , , 1 }. Logo, qualquer
elemento de (2 ) pode ser representado na forma polinomial em e grau . Ou seja,
qualquer elemento pertencente a (2 ) pode ser representado da seguinte forma:

n 1 (2.27)
A ai i .
i 0

Um vetor binrio com elementos pode ser utilizado para implementao de


operaes aritmticas em hardware, pois a representao polinomial pode ser realizada
na forma vetorial (1 , 2 , , 0 ). Os sinais lgicos 0 e 1 podem ser utilizados
para representar os elementos do campo, pois = 2. Assim, a operao de
multiplicao em (2 ) pode ser implementada utilizando portas lgicas AND.

2.2.1 Multiplicador de Mastrovito

Em [19], Mastrovito desenvolve um multiplicador em (2 ), paralelo de base


polinomial. Sua arquitetura apresenta baixa complexidade temporal e espacial em
comparao com outros multiplicadores de base Dual, Normal, Polinomial e de Paar
[2,9,19]. O multiplicador de Mastrovito e de base Polinomial possuem complexidade
muito prximas, mas o multiplicador Polinomial possui um retardo maior. O
multiplicador de Paar possui uma complexidade espacial menor que o de Mastrovito
para alguns especficos, como em (28 ). Mas para outros corpos sua complexidade
29

maior do que o Mastrovito [9]. Uma comparao do retardo mximo e do nmero de


portas AND e XOR necessrias para estes multiplicadores est apresentada no Quadro
2.6.

Quadro 2.6 - Complexidade espacial e temporal de multiplicadores de base polinomial

Dual Normal Polinomial Mastrovito Paar


AND XOR Retardo AND XOR Retardo AND XOR Retardo AND XOR Retardo AND XOR Retardo

4 16 15 3 28 24 3 16 15 4 16 15 3 12 18 4
6 36 35 4 66 60 4 36 35 6 36 35 4 27 37 5
8 64 77 7 160 160 5 64 77 11 64 90 5 48 62 5
10 100 99 6 180 180 5 100 99 12 100 99 6 75 95 7

Assim, o multiplicador de Mastrovito possui as melhores caractersticas dentre


os multiplicadores paralelos revistos. Sem ter atraso fixo este multiplicador requer
32 2 portas, cerca de metade do multiplicador de Massey-Omura [20].

Para o clculo do produto de dois elementos arbitrrios, considere


(), () () (2 ), com (2 ) escrito na forma polinomial. A
multiplicao realizada da seguinte forma:

C x A x .B x mod P x (2.28)

C x (an1 x n1 a0 bn1 x n1 b0 mod P x (2.29)

em que () o polinmio irredutvel de grau em (2). Este polinmio tem que ser
o melhor possvel, timo, no que diz respeito ao nmero de portas que se exige para a
multiplicao no campo. So utilizados polinmios na forma ( ) = + + 1, para
= 2,3,4,6,7,9,10,11,15 e ( ) = + 1 + + + 1 [20-21]. Mais
informaes sobre polinmios irredutveis so encontradas em [22]. A realizao da
multiplicao realizada em duas etapas, como na Figura 2.3.

Figura 2.3 - Diagrama de blocos do multiplicador de Mastrovito


30

Na etapa inicial feita uma multiplicao polinomial, ( ). ( ), como pode-se


observar na convoluo da Figura 2.4 e Equao (2.30).
C x A x .B x an 1 x n 1 a0 bn 1 x n 1 b0
C '( x) _ a0b0 a1b0 a0b1 x1 a2b0 a1b1 a0b2 x 2 an 1bn 1 x 2 n2 (2.30)

Figura 2.4 - Multiplicao Polinomial ( ). ()

Pode-se mostrar o resultado () da multiplicao como segue na equao


(2.31).
C x c '0 c '1 x1 c '2 x 2 c '2 n2 x 2n1 , (2.31)

em que:

c0 a0 b0 (2.32)
c '1 a1b0 a0 b1
c '2 a2 b0 a1b1 a0 b2
.
.
.
c '2 n 2 an 1bn 1 .

Utilizando a forma algbrica, tem-se (2.32):

j
ai b j 1 _, ____ se _ j n
i 0
c ' j n 1 (2.33)

i
ai b j 1 _, se _ n j 2n 2
j 1 n
31

Esta etapa requer 2 portas AND independentemente do polinmio escolhido e


2 2 + 1 portas XOR.
Para implementar a funo paridade com n variveis e fan-in ilimitado so
necessrias 21 + 1 portas AON e retardo constante igual a 2, em que
corresponde ao retardo de uma porta lgica tradicional [7]. Seja #AON o nmero de
portas AON. Como cada obtido a partir de uma soma de elementos, ento o
nmero de portas necessrias para obter os coeficientes :
n 1 2 n 3
# AON (2 j 1) (22 n j 2 1)
j 1 j n
n 1 2 n 3
# AON (n 1) 2 (n 2) 2
j 2n2
2 j

j 1 j n

22 n 2 1 2n 1
# AON (2n 3) 2n 2 22 n 2 ( n 1 ) (2.34)
2 2 n 3 2
2 n 1 2 n 1 n 1
# AON 2n 5 2 2 2 2 2
n

# AON 2n 7 2n 1 (2 1)
# AON 3.2n 1 2n 7
Considerando a operao AND bit a bit inicial, que necessidade de 2 portas, o
nmero total de portas para executar a multiplicao polinomial convencional :
# AON 3.2n1 n2 2n 7. (2.35)
O retardo da multiplicao polinomial de para o AND da multiplicao
bit a bit e 2 para as soma dos coeficientes.
A implementao da primeira etapa de um multiplicador em (24 ), com
( ) = 4 + + 1, realizada da seguinte forma:

C '( x) A( x).B( x)
C '( x) (a0 a1 x a2 x 2 a3 x 3 ).(b0 b1 x b2 x 2 b3 x 3 )
C '( x) a0b0 (a0b1 a1b0 ) x (a0b2 a1b1 a2b0 ) x 2 (2.36)
______ (a0b3 a1b2 a2b1 a3b0 ) x (a1b3 a2b2 a3b1 ) x
3 4

______ (a2b3 a3b2 ) x 5 a3b3 x 6


Assim, cada elemento de () dado por:
32

c '0 a0b0
c '1 a0b1 a1b0
c '2 a0b2 a1b1 a2b0
c '3 a0b3 a1b2 a2b1 a3b0 (2.37)
c '4 a1b3 a2b2 a3b1
c '5 a2b3 a3b2
c '6 a3b3
Para calcular a multiplicao polinomial convencional de dois elementos em
(24 ) so necessrias 16 portas que implementem as funes AND e 25 portas que
realizem a operao de soma. Esta etapa da multiplicao possui um retardo de 3 .
A implementao da primeira etapa de um multiplicador em (28 ), com
( ) = 8 + 4 + 3 + 2 + 1, realizada da seguinte forma:
C '( x) A( x).B( x)
C '( x) (a0 x 0 a1 x1 ... a6 x 6 a7 x 7 ).(b0 x 0 b1 x1 ... b6 x 6 b7 x 7 )
C '( x) a0b0 x 0 a0b1 a1b0 x1 a0b2 a1b1 a2b0 x 2
______ a0b3 a1b2 a2b1 a3b0 x 3 a0b4 a1b3 a2b2 a3b1 a4b0 x 4
______ a0b5 a1b4 a2b3 a3b2 a4b1 a5b0 x 5
______ a0b6 a1b5 a2b4 a3b3 a4b2 a5b1 a6b0 x 6
______ a0b7 a1b6 a2b5 a3b4 a4b3 a5b2 a6b1 a7b0 x 7 (2.38)
______ a1b7 a2b6 a4b4 a5b3 a6b2 a7b1 x 8

______ (a2b7 a3b6 a4b5 a5b4 a6b3 a7b2 ) x 9


______ a3b7 a4b6 a5b5 a6b4 a7b3 x10
______ a4b7 a5b6 a6b5 a7b4 x11 a5b7 a6b6 a7b5 x12
______ a6b7 a7b6 x13 a7b7 x14

Assim, cada elemento de de () dado por:


33

c '0 a0b0
c '1 a0b1 a1b0
c '2 a0b2 a1b1 a2b0
c '3 a0b3 a1b2 a2b1 a3b0
c '4 a0b4 a1b3 a2b2 a3b1 a4b0
c '5 a0b5 a1b4 a2b3 a3b2 a4b1 a5b0
c '6 a0b6 a1b5 a2b4 a3b3 a4b2 a5b1 a6b0
c '7 a0b7 a1b6 a2b5 a3b4 a4b3 a5b2 a6b1 a7b0
c '8 a1b7 a2b6 a3b5 a4b4 a5b3 a6b2 a7b1 (2.39)
c '9 a2b7 a3b6 a4b5 a5b4 a6b3 a7b2
c '10 a3b7 a4b6 a5b5 a6b4 a7b3
c '11 a4b7 a5b6 a6b5 a7b4
c '12 a5b7 a6b6 a7b5
c '13 a6b7 a7 b6
c '14 a7b7

Para calcular a multiplicao polinomial convencional de 2 elementos em


(28 ) so necessrias 64 portas que implementem a funo AND, multiplicao ,
e 393 portas para implementar as somas.
Na segura etapa feita uma reduo de mdulo, que depende do polinmio
irredutvel escolhido, para encontrar o resultado final (), pertencente a (2 ). Para
esta reduo so usadas 2 2 portas XOR [7] e a expresso final para ()
mostrada na equao (2.40).
C x c '0 c 'n c '1 c 'n c 'n 1 x1
______ cn2 c2n 2 c '2 n 3 x n 2 c 'n 1 c '2 n 2 x n 1 , (2.40)

Novamente, podemos rescreve-se a equao (2.40):


C x c0 c1 x1 c2 x 2 cn1 x n1 , (2.41)

em que:
c0 c '0 c 'n (2.42)
c1 c '1 c 'n c 'n 1
.
.
.
cn 1 c 'n 1 c '2 n 2 .
34

Na forma algbrica, tem-se:


c0 c '0 c 'n (2.43)
cn 1 c 'n 1 c '2 n 2
.
.
.
c j c ' j c ' j n 1 c ' j n ,

em que = 1,2,3, . . . , 2.
Calculando o nmero de portas para gerar cada termo da equao, tem-se:
n2
# AON 3 5 3
j 1

# AON 6 5(n 2) (2.44)


# AON 5n 4
O total de portas do multiplicador em (2 ), considerando a multiplicao
polinomial e a reduo de mdulo, dado por:
# AON 3.2n1 n2 7n 11 (2.45)
Para a multiplicao em (24 ) e (28 ) so necessrias 16 e 64 portas
lgicas AND, respectivamente, para a primeira etapa. Para a realizao da segunda
etapa, reduo de mdulo, o multiplicador em (24 ) e (28 ) necessita de 41 e 429
portas, respectivamente. No total, o multiplicador em (24 ) realiza a operao com
57 portas AON e o multiplicador em (28 ) com 493 portas AON. Na Figura 2.5
mostrado um diagrama de blocos do processo de multiplicao em corpos finitos em
hardware.
Figura 2.5 - Diagrama da implementao em hardware de multiplicadores em (2 )
35

Na implementao de multiplicadores utilizando a lgica tradicional geralmente


encontrado, na literatura, circuitos com fan-in limitado. Este procedimento realizado
para diminuir o tamanho do circuito, visto que a complexidade do circuito para o
multiplicador de Mastrovito exponencial e dado por 3. 21 + 2 + 7 11 [1]. Com
um fan-in ilimitado possvel reduzir o nmero de portas de um crescimento
exponencial para um crescimento polinomial. Assim, possvel obter uma arquitetura
do multiplicador de Mastrovito que fornea um nmero menor de portas, mas com a
desvantagem de o atraso no ser fixo [20].
Cada caminho atravs do multiplicador possui apenas uma porta AND e, no
mximo, 2 log portas XOR. Levando em considerao todas as portas e o atraso de
cada uma delas, o atraso total dado pela equao (2.46).
T AND 2 XOR log 2 n (2.46)

em que e so os atrasos correspondentes as duas portas lgicas. Dessa forma,


somando os retardos produzidos por cada camada do multiplicador obtido um retardo
total de 5 , para o AND bit a bit, 2 para a multiplicao polinomial e
2 para a reduo mdulo (). o tempo de atraso correspondente a uma
porta AON.
A multiplicao 15 com 15 em decimal, por exemplo, pode-se faz-la sob
diferentes representaes. Logo, pode-se escrever:
1510 1510 = 16 16 = 11112 11112 = ( 3 + 2 + 1 + 0 ) ( 3 +
2 1 + 0 ) (2.47)

Aplicando o primeiro passo, multiplicao e reduo por mod2, tem-se:

( 3 + 2 + 1 + 0 ) ( 3 + 2 + 1 + 0 ) = 6 + 2 5 + 3 4 + 4 3 +
3 2 + 2 + 1 (2.48)

( 3 + 2 + 1 + 0 ) ( 3 + 2 + 1 + 0 ) = 6 + 4 + 2 + 1 (2.49)

Aplicando o segundo passo, reduo mod por um polinmio primitivo de


(24 ), tem-se:

( 6 + 4 + 2 + 1) ( ) = ( 6 + 4 + 2 + 1) ( 4 + + 1) = 3
1 = 3 + 1 (2.50)
36

Portanto, esta multiplicao requer 57 portas tradicionais. O resultado pode ser


exposto nas diferentes representaes:

1010 = 16 = 10102 = 3 + 0 2 + 1 + 0 = 3 + 1 (2.51)

No Quadro 2.7 e 2.8, podem ser visualizados os resultados, em hexadecimal e


decimal, para a multiplicao dos elementos do (24 ), aplicando os passos descritos
nesta seo.

Quadro 2.7 - Resultado da multiplicao em (24 ) em hexadecimal

2 1 2 3 4 5 6 7 8 9 A B C D E F

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 0 1 2 3 4 5 6 7 8 9 A B C D E F
2 0 2 4 6 8 A C E 3 1 7 5 B 9 F D

3 0 3 6 5 C F A 9 B 8 D E 7 4 1 2

4 0 4 8 C 3 7 B F 6 2 E A 5 1 D 9

5 0 5 A F 7 2 D 8 E B 4 1 9 C 3 6

6 0 6 C A B D 7 1 5 3 9 F E 8 2 4
7 0 7 E 9 F 8 1 6 D A 3 4 2 5 C B

8 0 8 3 B 6 E 5 D C 4 F 7 A 2 9 1

9 0 9 1 8 2 B 3 A 4 D 5 C 6 F 7 E

A 0 A 7 D E 4 9 3 F 5 8 2 1 B 6 C

B 0 B 5 3 A 1 F 4 7 C 2 9 D 6 8 3
C 0 C B 7 5 9 E 2 A 6 1 D F 3 4 8

D 0 D 9 4 1 C 8 5 2 F B 6 3 E A 7

E 0 E F 1 D 3 2 C 9 7 6 8 4 A B 5

F 0 F D 2 9 6 4 B 1 E C 3 8 7 5 A
37

Quadro 2.8 - Resultado da multiplicao em (24 ) em decimal

2 1 2 3 4 5 6 7 8 9 A B C D E F
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 0 2 4 6 8 10 12 14 3 1 7 5 11 9 15 13
3 0 3 6 5 12 15 10 9 11 8 13 14 7 4 1 2
4 0 4 8 12 3 7 11 15 6 2 14 10 5 1 13 9
5 0 5 10 15 7 2 13 8 14 11 4 1 9 12 3 6
6 0 6 12 10 11 13 7 1 5 3 9 15 14 8 2 4
7 0 7 14 9 15 8 1 6 13 10 3 4 2 5 12 11
8 0 8 3 11 6 14 5 13 12 4 15 7 10 2 9 1
9 0 9 1 8 2 11 3 10 4 13 5 12 6 15 7 14
A 0 10 7 13 14 4 9 3 15 5 8 2 1 11 6 12
B 0 11 5 3 10 1 15 4 7 12 2 9 13 6 8 3
C 0 12 11 7 5 9 14 2 10 6 1 13 15 3 4 8
D 0 13 9 4 1 12 8 5 2 15 11 6 3 14 10 7
E 0 14 15 1 13 3 2 12 9 7 6 8 4 10 11 5
F 0 15 13 2 9 6 4 11 1 14 12 3 8 7 5 10

Aplicando o mesmo procedimento algbrico para (28 ) e utilizando uma


funo do Matlab, temos a tbua de multiplicao para esta extenso de (2). A
funo (, ) fornece todos os polinmios primitivos para qualquer .
Especificamente para = 8, tem-se 16 polinmios gerados.

>> primpoly(8,'all')
Primitive polynomial(s) =
D^8+D^4+D^3+D^2+1
D^8+D^5+D^3+D^1+1
D^8+D^5+D^3+D^2+1
D^8+D^6+D^3+D^2+1
D^8+D^6+D^5+D^1+1
D^8+D^6+D^5+D^2+1
D^8+D^6+D^5+D^3+1
D^8+D^6+D^5+D^4+1
D^8+D^7+D^2+D^1+1
D^8+D^7+D^3+D^2+1
D^8+D^7+D^5+D^3+1
D^8+D^7+D^6+D^1+1
D^8+D^7+D^6+D^3+D^2+D^1+1
38

D^8+D^7+D^6+D^5+D^2+D^1+1
D^8+D^7+D^6+D^5+D^4+D^2+1
D^8+D^6+D^4+D^3+D^2+D^1+1

Utilizando o polinmio primitivo 8 + 4 + 3 + 2 + 1 no algoritmo descrito


a seguir, gera-se a tbua de multiplicao para o (28 ). Para cada polinmio primitivo
diferente utilizado projetado um circuito diferente que realiza a mesma operao. Este
algoritmo computa todas as tbuas para qualquer tamanho de corpo a depender da
escolha do da varivel .

n = 8;
x = gf([0:2^n-1]',n);
multb = x * x'
multb = GF(2^8)
%polinomio_primitivo = D^8+D^4+D^3+D^2+1 (100011101b, 28510 e 11DHEX)

O resultado uma matriz simtrica com 256 linhas e 256 colunas e 65536
elementos, disponvel no Anexo 1.

2.3 Concluso

Neste captulo foi realizada uma reviso bibliogrfica da aritmtica em corpos


finitos e suas propriedades, bem como a definio dos operadores de adio, subtrao e
multiplicao neste campo. Uma breve reviso do Multiplicador de Mastrovito foi
realizada e sua escolha foi justificada baseada na comparao das complexidades
espaciais e temporais com outras arquiteturas de multiplicadores de base polinomial.
Assim, foi projetado o Multiplicador de Mastrovito em (24 ) e (28 ) e a tbua de
multiplicao para os dois casos. Logo, a implementao em hardware de operaes
aritmticas em corpos finitos uma boa alternativa em relao implementao via
software e pode ser realizada projetando e desenvolvendo circuitos VLSI (Very Large
Scale Integration) ou circuitos programveis, a exemplo do FPGA.
3. REDES NEURAIS ARTIFICIAIS
39

3. Redes Neurais Artificiais

O objetivo deste captulo introduzir importantes aspectos computacionais de uma rede


neural artificial e apresentar o modelo utilizado neste trabalho. Das muitas reas em que fazem
uso das redes neurais, concentra-se no estudo de modelos discretos, em que conjuntos discretos
na entrada e sada esto relacionados por meio de parmetros da rede. Discutem-se alguns
aspectos da computao neural, aprendizado e representao, assim como os conceitos em
computao neural discreta e complexidade.

Neste captulo introduzida a arquitetura das redes neurais discretas utilizadas ao longo
desta dissertao e apresentado o circuito de limiar, que desempenha a funo de uma porta
neural ou neurnio artificial. Na sequncia mostrado como construir circuitos de limiar com 2
e 3 camadas.

3.1 Introduo

O interesse no desenvolvimento de pesquisas sobre redes neurais artificiais surgiu da


convico que o crebro humano bastante superior aos computadores em resolver diversos
tipos de problemas, tais como reconhecimento de voz e imagens. Estas redes neurais podem ser
melhores descritas com redes de alto grau de interconexo com vrias unidades bsicas
chamadas de portas neurais, inspiradas no neurnio biolgico [1].

Os modelos podem ser classificados em duas categorias gerais. A primeira categoria


consiste em uma Rede de Propagao Direta, tais como circuitos de limiar e suas variantes. A
segunda categoria utiliza conexes de realimentao, como o modelo Hopfield de tempo
discreto. Os parmetros de uma rede neural residem nas foras de conexo entre os neurnios.
No modelo de propagao direta, os neurnios podem ser arranjados em camadas em que cada
elemento de uma camada computa apenas uma funo que depende apenas dos valores da
camada anterior. Um circuito de limiar um exemplo deste tipo de rede. Ou seja, cada elemento
em uma camada calcula uma funo de limiar que depende apenas dos valores das sadas da
camada anterior.

A arquitetura da rede neural discreta formada por portas de limiar linear, onde as
camadas mais prximas da entrada so atualizadas primeiramente. Cada neurnio um elemento
40

de limiar linear e um conjunto delas forma o circuito de limiar linear. O clculo de um circuito
de limiar pode ser considerado como um processo de propagao direta: as sadas dos neurnios
so atualizadas camada por camada, com a camada mais prxima s entradas sendo atualizada
primeiro. As sadas dos circuitos so tomadas como as sadas dos neurnios especificados na
ltima camada. Nesse sentido, o nmero de camadas corresponde ao tempo de computao
paralelo no circuito. Se as entradas so binrias, ento o circuito de limiar torna-se um circuito
combinacional booleano. Uma variante do modelo de circuito de limiar uma rede de
alimentao de entrada de elementos sigmoidais que computam funes contnuas, sendo a sada
uma funo degrau, caracterstica dos elementos de limiar lineares.

Outro modelo de redes neurais artificiais dizem respeito Rede Hopfield discreta no
tempo. Esta rede compreende a um conjunto de elementos inteiramente ligados aos elementos de
limiar lineares, onde a sada de cada elemento depende da sada de todos os outros elementos, tal
como determinados pela fora de conexo entre eles. Pode ser considerado como um circuito
booleano sequencial e, assim, difere da natureza combinatria de computao em um circuito de
limiar. As entradas para a rede so aplicadas como estados iniciais. A cada passo da computao
em tempo discreto os estados de um subconjunto dos elementos so atualizados. Para escolhas
apropriadas dos parmetros da rede, a rede passa por uma sucesso de estgios at atingir um
estado estvel, quando as sadas dos elementos permanecerem constantes. O clculo executado
pela rede pode ser visto como um processo de evoluo de um sistema dinmico.

As redes neurais artificiais surgiram, de forma expressiva, pelo trabalho de McCulloch e


Pitts (1943), em que propuseram um modelo artificial de um neurnio que funcionava de forma
discreta e era capaz de realizar vrias operaes lgicas [10]. Eles propuseram um modelo
matemtico do neurnio capaz de computar funes antes calculadas com a lgica booleana. A
sada desse modelo de neurnio artificial era 1 ou 0, refletindo o estado tudo-ou-nada do
neurnio biolgico. Neste estado, quando o total de entradas alcanasse nveis crticos, o
neurnio enviaria sua sada para outros neurnios no qual ele estaria conectado. Embora no seja
capaz de capturar toda complexidade de um neurnio biolgico, o modelo proposto alia
simplicidade com potencial, pois organizando neurnios em uma rede possvel obter estruturas
bem mais complexas. No entanto, esta simplicidade uma vantagem quando o objetivo
41

projetar computadores digitais. Um circuito booleano se as entradas e as sadas deste rede so


binrias.

Um aspecto importante das redes neurais a capacidade de aprendizagem. O mecanismo


de aprendizagem pode ser visto como um mecanismo de adaptao de parmetros, tornando
possvel que a rede resultante fornea o resultado esperado. A regra que governa como essas
mudanas ocorrem chamada de algoritmo de aprendizagem. O algoritmo de aprendizagem
quem faz o mapeamento da entrada para a sada atravs de alteraes de parmetros internos da
rede. Para isso necessrio assumir uma arquitetura inicial para a rede de forma que seja obtido
o mapeamento adequado, ou seja, o algoritmo de aprendizagem ir convergir para um resultado
satisfatrio. Quando no for possvel o trmino do algoritmo de aprendizagem, o mapeamento
desejado no poder ser representado pela arquitetura utilizada. Portanto, interessante utilizar
uma arquitetura adequada de forma que sempre seja possvel a representao do mapeamento.
Tambm possvel indicar uma arquitetura tima de tal forma que para representar certo
mapeamento seja necessrio um nmero mnimo de recursos como, por exemplo, o nmero de
portas neurais. Ao invs de utilizar arquiteturas baseadas em neurnios que de alguma forma
aprendem, possvel utilizar arquiteturas cujos neurnios j possuam seus parmetros
previamente calculados [2].

Rosemblett, em 1958, introduziu o conceito do perceptron, que mudava a abordagem para


o problema de reconhecimento de padres. Ele desenvolveu um algoritmo para ajuste dos pesos
(W1, W2, W3,...,Wn) e mostrou que a resposta convergia quando os padres so linearmente
separveis por um limiar -T ou W0 [10]. Na Figura 3.1, apresentado o modelo proposto por
Rosemblett, em que (X1, X2, X3,..., Xn) so as entradas, (W1, W2, W3,...,Wn) os pesos, -T ou W0 o
limiar, f(u) a funo de ativao e y a sada.
42

Figura 3.1- Modelo de um neurnio por Rosemblett

Por meio de portas de limiar linear possvel utilizar arquiteturas cujos neurnios
possuam parmetros previamente calculados, sem a necessidade de utilizar nenhum algoritmo de
aprendizagem. Dessa forma, podem-se projetar diretamente redes neurais discretas e timas para
representar certos mapeamentos.

Tradicionalmente, o multiplicador de Mastrovito tem sido usado como elemento bsico


na construo de calculadores em corpos finitos. Esta arquitetura normalmente supe a utilizao
de portas lgicas elementares AND, OR, NOT na sua implementao. Um dos objetivos do
estudo das arquiteturas de processadores a reduo da complexidade espacial e temporal. Estes
aspectos das complexidades relacionam-se diretamente com a rea do chip, quantidade de
transistores e com a dissipao de energia. Outro aspecto importante o retardo do circuito,
normalmente avaliado pelo nmero de camadas de portas elementares existentes na arquitetura
[1].

Tambm est estabelecido na literatura que os neurnios de limiar linear, definidos mais
adiante, exibem um poder de computao maior que as portas lgicas tradicionais AND, OR,
NOT [7] e cada neurnio modelado como um elemento de limiar linear com uma sada binria.

Em [1], foi demonstrada a vantagem em utilizar neurnios de limiar linear na construo


de um multiplicador de Mastrovito para elementos de (2 ). Esta implementao permite a
reduo em cerca de metade do nmero de portas em relao implementao com as portas
tradicionais. Alm dessa vantagem, tem-se que o retardo permanece constante com o aumento do
corpo, contrariamente lgica tradicional.
43

3.2 Circuito de Limiar Linear

A rede neural utilizada implementada por um circuito de limiar linear utilizando o


Modelo de Propagao Direta. Na Figura 3.2 tem-se a representao de uma rede com trs
camadas, = 1, = 2 = 3, sendo a direo da propagao da esquerda para a direita.

Figura 3.2 - Representao do Modelo de Propagao Direta

O nmero de portas necessrias para implementar determinada funo tem uma relao
direta com o tamanho do circuito. Quanto mais portas necessrias, maior o circuito. Como o a
propagao direta, o nmero de camadas (profundidade da rede) est relacionado com a
velocidade de execuo. O nmero de conexes na entrada de uma porta chamado de fan-in.
Analogamente, fan-out o nmero de conexes na sada de uma porta que pode alimentar a
entrada de outra, sem degradar o desempenho do circuito. A porta com a maior razo fan-in/fan-
out determina o fan-in/fan-out do circuito. Os circuitos MOS podem ser ligados a um nmero
44

grande de outras portas MOS sem degradao do sinal, mas o atraso aumenta com o nmero de
ligaes.

3.3 Portas de Limiar Linear

A demanda por alto desempenho de processadores em escala de integrao VLSI tem


impulsionado as pesquisas por sistemas que garantam alto desempenho utilizando pouca rea em
chip e que apresentem baixo consumo de potncia [2].

As portas lgicas de limiar vm sendo estudadas desde o decnio de 1960 e algumas


implementaes eficientes utilizando a tecnologia CMOS so descritas em [23-24]. Existem
muitas maneiras de implementar as portas de limiar linear, tambm chamadas de porta lgica de
limiar, em CMOS utilizando hardware e software. Fatores como velocidade, mxima soma dos
pesos, rea ocupada e dissipao de energia so levados em considerao. Tais portas podem
calcular funes que sejam separveis linearmente. A sua sada funo da soma ponderada
das entradas e do limiar. Na Figura 3.3, tem-se um modelo de um neurnio artificial que
descreve uma porta de limiar linear.

Figura 3.3 - Modelo de uma porta de limiar linear

Da Figura 3.3, tem-se que a soma dos sinais de entrada (1 , 2 , 3 , , )


multiplicados pelos respectivos pesos (1 , 2 , 3 , , ) e subtrados de um nvel DC, ou seja,
0 . Logo, tem-se dado pela expresso (3.1).

= 0 (3.1)
=1
45

O sinal submetido a uma funo de ativao (), que no caso de uma porta de limiar
linear a funo degrau unitrio. Para 0, () = 1 e para < 0, () = 0.

Assim, pode-se expressar a sada evidenciando o limiar de ativao 0 . Logo, a


equao (3.1) pode ser expressa como na equao (3.2):

1, 0
=1
= (1 , 2 , 3 , , ) = (3.2)
0, < 0 .
{ =1

Desta forma, uma porta de limiar linear realiza a comparao entre o valor do somatrio
das entradas multiplicadas pelos seus respectivos pesos e subtrados do valor limiar. Se este valor
for maior ou igual a 0 , tem-se uma sada 1. Caso o valor seja menor do que o limiar 0 , tem-se
uma sada 0. A porta de limiar linear a estrutura bsica da rede neural discreta e possui a porta
tradicional AON como um subconjunto. Logo, elas tm o comportamento, na pior hiptese, igual
ao da lgica tradicional [25]. Esta potencialidade das portas pode ser estendida a outros tipos de
sistemas numricos, como o Corpo Finito, amplamente usado em comunicao digital.

Pode ser observada no Quadro 3.1 uma soma aritmtica das variveis binrias de entrada
com os pesos unitrios pr-estabelecidos. O limiar da funo lgica AND igual a trs, 0 = 3,
e o limiar da funo lgica OR igual a um, 0 = 1. Desta forma, utilizando a funo
sigmoidal, pode-se escrever as funes lgicas pelas equaes 3.3 e 3.4.

(1 , 2 , 3 ) = (1 + 2 + 3 3). (3.3)

(1 , 2 , 3 ) = (1 + 2 + 3 1). (3.4)
46

Quadro 3.1 - Limiar das portas AND e OR

O modelo simplificado destas duas portas de limiar visualizado na Figura 3.4. A partir
do modelo da porta de limiar linear, tem-se os pesos unitrios nas entradas e os limiares das
portas AND e OR. Para a funo lgica AND a sada 1 quando a soma das entradas
multiplicadas pelo respectivo peso for igual ou maior do que 3. Caso contrrio, 0. Para a funo
lgica OR, quando a soma das entradas multiplicadas pelo respectivo pelo for maior ou igual a 1,
a sada tambm nvel alto. Caso contrrio, nvel baixo.

Figura 3.4 - Modelo simplificado das duas portas lgicas


47

Pelo fato de no ser possvel utilizar uma porta de limiar linear para implementar a lgica
XOR, ela um contraexemplo. Com apenas um limiar no possvel limitar os estgios lgicos
da sada. Na Figura 3.5, apresentada uma ilustrao grfica deste fato. As entradas 1 e 2
formam um plano com todas as combinaes possveis dos valores de entrada e no possvel,
apenas com uma reta, limitar as entradas 01 e 10. A estas entradas corresponderia a sada 1.

Figura 3.5 - Implementao da porta lgica XOR

Uma maneira de solucionar este problema a criao de uma rede neural discreta
multicamada. Assim, estas redes so capazes de delimitarem vrios outros limiares.

3.4 Funes Simtricas

Uma funo booleana dita simtrica se sua sada depende apenas do somatrio dos
seus valores de entrada. Portanto (1 , 2 , , ) = (1 , 2 , , ) , para qualquer permutao
de (1 , 2 , , ). A funo paridade um exemplo de funo simtrica, cuja sada 1 se a soma
das entradas for mpar e 0 se a soma das entradas for par [7].

As portas de limiar linear esto restritas s solues de problemas que sejam linearmente
separveis, ou seja, a problemas cuja soluo pode ser obtida pela separao de duas regies por
meio de uma reta (ou um hiperplano para o caso n-dimensional) [1]. A equao de separao
linear pode ser facilmente visualizada na Figura 3.6, para o caso bidimensional.
48

Figura 3.6 - Separao de Regies por meio de uma reta

Considere, como exemplo ilustrativo, um n com duas entradas 1 e 2 , pesos 1 e 2 e


w2, limiar e sada executando uma funo qualquer. A condio de disparo do n ( = 1)
ento definida por 1 1 + 2 2 = , que pode ser descrita na forma geral da equao de uma
reta em que 2 = (1 ), conforme mostrada na equao 3.5. Portanto, a superfcie de decises
de uma porta de limiar linear est restrita a uma reta. Na Figura 3.7 mostrada a soluo para o
problema do AND lgico por meio de uma porta de limiar linear.


2 = (1 ) 1 + ( ). (3.5)
2 2

Figura 3.7- (Soluo para o problema do AND lgico utilizando uma porta de limiar linear com 1 =2 =
1 e = 1,5) [2]
49

Para o caso particular em que {0,1} que restringe as entradas a valores binrios, tem-
se que {0,1} {0,1} para . Apesar de estarem limitadas resoluo de problemas

linearmente separveis, que corresponde a uma pequena parcela do total de 22 funes
booleanas possveis com entradas, as portas de limiar lineares so mais poderosas do que as
portas lgicas convencionais. Com uma mesma porta de limiar linear pode-se implementar
qualquer uma das funes AND, OR, NAND e NOR, entre outras, bastando mudar os
parmetros da porta [7].

3.5 Construo de Circuitos de 2 e 3 camadas

Projetar circuitos de limiar linear significa implementar funes booleanas. Dentre estas
funes de particular interesse as funes booleanas simtricas. Como as portas de limiar linear
esto restritas soluo de funes simtricas, o projeto de circuitos de limiar compreende a
implementaes de funes deste tipo.

Teorema 3.1. Toda funo booleana (1 , 2 , , ): {0,1} {0,1} pode ser computada
por um circuito de limiar com duas camadas e no mximo 21 + 1 portas de limiar linear [7]

Qualquer funo booleana pode ser escrita como uma SDP (Soma de Produtos) como se
segue:

(1 , 2 , , ) = 1 2 , (3.6)

em que o smbolo AND, o termo um produto implementado por esta funo de


variveis e 2 .

Analogamente, pode-se escrever a funo descrita em (3.6) como um PDS (Produto de


Somas) como se segue:

(1 , 2 , , ) = 1 2 , (3.7)

em que o smbolo OR, cada termo uma soma implementada por esta funo de
variveis e 2 .

Como + " = 2 , temos que 2 e 2 porque 2 o nmero mximo


possvel de somas ou de produtos com variveis booleanas. A primeira camada do circuito de
50

limiar ir implementar, para a SDP, os produtos e a segunda camada, utilizando a funo OR


implementar um PDS, utilizando 21 + 1 portas lgicas tradicionais. Como a porta tradicional
um subconjunto de uma porta neural, esta pode simular as portas AND e OR e implementar
qualquer funo booleana utilizando 21 + 1 portas neurais [26]. Nota-se que o crescimento do
nmero de portas com o tamanho do corpo exponencial. Por este motivo faz-se necessrio o
estudo de tcnicas que utilizem as redes neurais discretas para a construo de circuitos de limiar
que computem funes de maneira mais eficiente e que o crescimento do nmero de portas com
o tamanho do corpo seja polinomial. Nas duas subsees a seguir, 3.4.1 e 3.4.2, so apresentadas
tcnicas para a construo de circuitos de limiar de duas camadas que computam qualquer
funo booleana simtrica com, no mximo, + 1 portas e de trs camadas com 2 + 1
portas, em que o nmero de entradas do circuito

3.5.1 Circuitos de duas camadas

Seja = [1 , 2 , , ] a entrada booleana do circuito e uma funo booleana


simtrica. Como a funo depende somente da soma das entradas, existe um conjunto de
valores em =1 no qual a funo 1. Fazendo um agrupamento destes valores em
subintervalos de [0, ], tem-se os subintervalos dados a seguir.

[1 , 1 ], [2 , 2 ], , [ , ], (3.8)

em que e so inteiros, +1 > +1 e , de tal forma que (1 , 2 , , ) = 1, se e

somente se para algum , tal que:

[ , ]. (3.9)
=1

Na primeira camada do circuito, so necessrias 2s portas de limiar linear calculando:

= ( ) , (3.10)
=1
51

= ( ) , (3.11)
=1

em que = 1,2,3, . . . .

A segunda camada do circuito contm uma nica porta neural que calcula:

(1 , 2 , , ) = {( + ) 1}. (3.12)

=1

Para comprovar se a equao fornece a resposta certa, tem-se que para = 1,2,3, . . . , se

=1 [ , ], ento + = 1 para todos os . Assim:


{( + ) 1} = ( 1) = 0. (3.13)

=1

Caso =1 [ , ],ento + = 2 e + = 1 para . Assim:


{( + ) 1} = ( + 1 1) = 1. (3.14)

=1


A primeira camada da rede possui 2 portas. Como s no mximo e a segunda camada
2

possui apenas uma porta, o nmero total de portas de limiar linear utilizadas de + 1. Como
cda porta no circuito possui fan-in de no mximo , o nmero de conexes (2 )[2].

Por exemplo, na Figura 3.8 temos a implementao da funo paridade de quatro


variveis. Esta necessita de 5 portas de limiar linear. Utilizando a lgica tradicional so
necessrias 9 portas par a implementao, 8 portas AND e 1 porta OR.
52

Figura 3.8 - Paridade de quatro variveis utilizando portas de limiar linear

Utilizando uma tcnica chamada de Tcnica Telescpica possvel diminuir ainda mais o
nmero de portas de limiar linear.

Lema 3.1 Seja o intervalo [0, ] dividido em + 1 subintervalos [0 , 1 1], [1 , 2


1], , [1 , 1 1], [ , ], em que 0 = 0 < 1 < < < n [14].

Seja = (=1 ),para todo = 1, . . . , . Ento:

( 1 ) = . (3.15)
=1

Se =1 [ , 1 1], em que 0 = 0 e 1 , , so nmeros reais arbitrrios.

Prova: Como = (=1 ) = 1 se e somente se =1 , portanto, se

=1 [ , +1 ] ento 1 = 2 = = = 1 e +1 = = = 0. Dessa forma, tem-

se que:
53

( 1 ) = ( 1 ) = . (3.16)
=1 =1

Note que =1 [0 , 1 1], ou seja = 0, ento = 0 para todo = 1, . . . , e

consequentemente =1( 1 ) = 0 = 0 .

Utilizando o Lema 3.1, pode-se obter um circuito de limiar de duas camadas com no

mximo 2 + 1 portas que calculam funes simtricas.

Seja () uma funo simtrica de variveis. Seja um conjunto de inteiros, e , com


0 para = 1, . . . , e +1 < +1 para < , tal que () = 1 se e somente se
para algum com:

. (3.17)
=1

A primeira camada do circuito consiste de portas de limiar linear calculando =


(=1 ) para cada , sendo 1 . A segunda camada possui uma nica porta que
calcula a seguinte funo:

= {( 1 ) . (3.18)
=1 =1

Se () = 1, ento =1 e, portanto = ( =1 ) = 1. Por


outro lado, se () = 0, ento =1 +1 1 e, portanto, = (
=1 ) = 0.


O nmero de portas de limiar linear no circuito + 1. Como no mximo 2 , ento o

nmero mximo de portas de limiar de + 1. Por exemplo, na Figura 3.9 tem-se a
2

implementao da funo paridade de quatro variveis. Aplicada a tcnica, esta necessita de 3


portas de limiar linear.
54

Figura 3.9 - Paridade de quatro variveis com circuito de duas camadas aplicando a tcnica telescpica [7]

3.5.2 Circuitos de trs camadas

Generalizando a tcnica telescpica para construes de 3 camadas possvel uma


reduo do nmero de portas de limiar linear que calculem funes simtricas com 2 + 1
portas.

Utilizando um conjunto de inteiros e , em que = 1, . . . , , com +1 tal


que () = 1 se e somente se:

. (3.19)
=1

Dividindo o intervalo [0, ] em subintervalos consecutivos


[1 , 21 ], [2, 31 ], , [ , ] tal que cada subintervalo, exceto possivelmente o ltimo, contenha o

mesmo nmero l de inteiros e , em que . O i-simo subintervalo conter os inteiros
2

1 1 2 2 1 1 . A primeira camada do circuito consiste em elementos de


limiar linear calculando a seguinte funo:

= ( 1 ) , (3.20)
=1
55

para = 1, . . . .

Para cada = 1, , , so definidas duas somas telescpicas:

= 1 1 + (2 + 1 )2 + (3 + 2 )3 + + ( + 1 ) . (3.21)

= 1 1 + (2 + 1 )2 + (3 + 2 )3 + + ( + 1 ) . (3.22)

Observe que e so combinaes lineares das sadas da primeira camada. A segunda


camada consiste em 2l portas de limiar linear, cada uma utiliza os inteiros ou como valor
de limiar para o clculo de e definidos a seguir:

= ( ). (3.23)
=1

= ( ) . (3.24)
=1

A terceira camada nica e calcula a seguinte funo:

() = {( ) 2 1 . (3.25)
=1

Supondo que =1 pertence ao m-simo intervalo em s e utilizando o Lema 1, a soma


telescpica de e assume os seguintes valores:

= . (3.26)

= . (3.27)

Da Equao (3.19), por definio, () = 1 se, e somente se, para algum k obtm-se:

. (3.28)
=1
56

Na segunda camada =1 comparado com = e = , para cada k. Como


=1 , o valor da sada da segunda camada ( , ) pode ser visto como sendo:

2, =
+ = ( ) = { (3.29)
1, .

Logo, o elemento de sada da terceira camada :

{ 2( + ) 2 1 = (2 + 2 2 1) = 1. (3.30)
=1

Se () = 0, ento no existe um k tal que a inequao (3.28) seja satisfeita. Portanto,


+ = 1 para todo k e a porta da terceira camada calcula a seguinte expresso:

{ 2( + ) 2 1 = (2 2 1) = 0. (3.31)
=1

O circuito fornece a sada correta para qualquer entrada = [1 , 2 , , ]. A primeira



camada do circuito consiste em d elementos. A segunda camada possui 2 + 1 portas e a

terceira apenas uma porta. Como = , ento o tamanho do circuito de 3 camadas de 2+1
portas de limiar linear. Na Figura 3.10 mostrado um diagrama de implementao de um
circuito que computa a paridade de 4 variveis em um circuito de 3 camadas. Esta configurao
possui 5 portas de limiar linear. Para um nmero maior de variveis, a implementao utilizando
circuitos de 3 camadas tende a possuir menos portas de limiar linear quando comparado a
implementao utilizando circuitos de 2 camadas, embora o tempo de atraso aumente.
57

Figura 3.10 - Implementao de um circuito com 3 camadas para computar a paridade [7]

O crescimento do tamanho circuito 21 + 1 utilizando a lgica tradicional. Nota-se


que o crescimento do nmero de portas com o tamanho do corpo exponencial. Neste captulo
foram apresentadas tcnicas para a construo de circuitos de limiar de duas que computam

qualquer funo booleana simtrica com, no mximo, + 1 e + 1 e de trs camadas que
2

utilizam 2 + 1 portas. No Quadro 3.2 tem-se o comparativo do crescimento numrico do


nmero de portas para alguns valores de em projetos de circuitos com uma, duas e trs
camadas. O crescimento com apenas uma camada corresponde ao pior caso da implementao
utilizando a lgica neural, pois as portas tradicionais so subconjuntos das portas neurais.
Utilizando as portas neurais, aumentando o nmero de camadas e fazendo o uso da tcnica
telescpica, temos que o nmero de portas utilizadas para computar funes cada vez menor,
quando comparada com as outras implementaes.
58

Quadro 3.2 - Crescimento do nmero de portas para diferentes tamanhos de corpo

Entrada 1 Camada 2 Camadas 2 Camadas/Telescpica 3 Camadas/Telescpica



21 + 1 + +1 2 + 1
2
0 1 1 1 1
1 2 2 2 3
2 4 3 2 4
3 8 4 3 5
4 16 5 3 5
5 32 6 4 6
7 128 8 5 7
8 256 9 5 7
9 512 10 6 7
10 1024 11 6 8
11 2048 12 7 8
12 4096 13 7 8
13 8192 14 8 9
14 16384 15 8 9
15 32768 16 9 9
16 65536 17 9 9
59

3.6 Concluso

Neste captulo foi apresentada a rede neural utilizada para realizar a multiplicao em
corpos finitos e a estrutura bsica da mesma, as portas de limiar linear. Estas possuem a
vantagem de terem as portas tradicionais (AND, OR e NOT) como um subconjunto. Verifica-se
a diminuio da complexidade espacial de funes simtricas de um crescimento exponencial
para um crescimento polinomial. Com o uso de tcnicas algbricas, como a tcnica telescpica,
podemos extrair esta vantagem da porta de limiar linear e construir circuitos de limiar linear com

2 camadas utilizando + 1 e + 1 portas e de 3 camadas utilizando 2 + 1 portas, em
2

substituio ao circuito tradicional com 21 + 1 portas. Esta caracterstica pode ser aproveitada
para o projeto e implementao de circuitos utilizando redes neurais que realizem operaes
aritmticas em corpos finitos mais eficientes, j que esta caracterstica amplamente explorada
na computao de adio, multiplicao e diviso em aritmtica tradicional e aplicaes como
criptografia e cdigos corretores de erros. [27,28].
3. MULTIPLICADOR EM GF(2n)
UTILIZANDO PORTAS DE LIMIAR LINEAR
60

4. Multiplicador em () Utilizando Portas de Limiar Linear

Neste captulo apresenta-se uma nova arquitetura para multiplicadores em


(2 ) utilizando portas de limiar linear. Esta arquitetura mais eficiente do que a
apresentada na Seo 2.2.

A principal ideia realizar a operao da multiplicao polinomial e a reduo


de mdulo em um nico passo. Devido s caractersticas da porta de limiar linear, esta
arquitetura necessita de menos portas e torna o atraso constante para a operao com
qualquer corpo.

Ao final das sees, mostra-se o circuito de limiar linear correspondente


multiplicao em (24 ) e (28 ).

4.1 Introduo

Redes neurais artificiais de multicamadas podem ser usadas para construo do


multiplicador (2 ). No trabalho de Lidiano [1], foi projetada teoricamente a rede,
mostrando no apenas a viabilidade do ponto de vista tecnolgico, como tambm
melhorias em termos de consumo de hardware medida que o nmero de entradas for
crescendo.

Algumas funes booleanas, tais como adio e multiplicao, s podem ser


calculadas utilizando as portas AON com nmero de camadas fixas se o tamanho
aumentar exponencialmente. Isso resulta em uma rea de chip que tambm aumenta
exponencialmente [7]. Para que o tamanho do chip aumente polinomialmente
necessrio projetar circuitos com retardo no fixo, o que acarreta em circuitos mais
lentos. Portanto, so ineficientes para algumas aplicaes. Com o uso de redes neurais
possvel obter circuitos com profundidade fixa e tamanho polinomial.

Como algumas aplicaes a velocidade a prioridade, a utilizao de circuitos


cuja profundidade crescente em funo do nmero de entradas no desejada. Portanto,
de grande valia o compromisso entre o tamanho e a profundidade do circuito, de modo
que sejam obtidas operaes mais eficientes para determinada aplicao. Utilizando a
lgica neural possvel se obter arquiteturas, para a multiplicao, que tenha um
crescimento polinomial. Desta forma, possvel ter um baixo nmero de portas e um
circuito mais rpido.
61

4.2 Multiplicador de Mastrovito Utilizando Porta de Limiar Linear

Para o projeto deste multiplicador utiliza-se o multiplicador de Mastrovito,


descrito na Seo 2.2, como base. A diferena entre este e o apresentado que ao invs
de utilizar portas tradicionais sero utilizadas portas de limiar linear.

4.2.1 Multiplicao Polinomial Ordinria

Nesta subseo utilizado o mesmo procedimento utilizado para a multiplicao


em (2 ) na Seo 2.2. Para a primeira camada do multiplicador so necessrias as
mesmas 2 portas de limiar linear que seriam utilizadas na lgica tradicional, cada porta
realizando a operao AND bit a bit para o clculo da multiplicao de cada entrada
. Contudo, para a segunda camada, o quantitativo necessrio para realizar
operaes XOR pode ser dado utilizando a tcnica telescpica [2].

Na subseo 3.5.1, tem-se que circuitos de 2 camadas e variveis necessitam



de 2 + 1 portas de limiar com fan-in ilimitado. Seja # o nmero de portas de limiar

linear para implementar a multiplicao. Para > 2, temos:



# = 2. [( + 1) ( + 1)]. (4.1)
2 2
=2

Caso seja par, o nmero de portas dado por:



# = 2. [( + 1) + 2( 1) 1]. (4.2)
2 2
=2

2
# = 2. ( + 1) + 2( 1) 1. (4.3)
2 2 2

2 5
# = ( + 5). (4.4)
2 2

Caso seja mpar, o nmero de portas dado por:


1
# = 2. [( ) + 2( 1) 1] . (4.5)
2 2 2
=2

2 3 3 7
# = 2. ( + ) + . (4.6)
4 2 4 2 2
62

2 5
# = ( + 5). (4.7)
2 2

Logo, para qualquer , tem-se:


2 5
# = ( + 5). (4.8)
2 2

O atraso da operao de 3 . O retardo 2 gasto para realizar as somas


XOR e 1 necessrio para implementar a porta AND.

4.2.2 Reduo de Mdulo ()

Para realizar a reduo de mdulo () utilizada a Equao (2.34). Logo, o


nmero de portas de limiar linear dado por:

# = 2 + 3 + 2. (4.9)
=1

# = 2 + 3( 2) + 2. (4.10)

# = 3 2. (4.11)

Portanto, o nmero total de portas :


2 5
# = # + # = (3 2) + ( + 5). (4.12)
2 2
32 11
# = ( + 7). (4.13)
2 2

So necessrias 2 camadas para o clculo da reduo de mdulo (). Logo o


atraso de 2 para este segundo passo e de 5 o atraso total do multiplicador.

4.3 Nova Arquitetura de Multiplicador

Nesta seo apresentada uma nova arquitetura mais eficiente do que as


apresentadas nas sees 2.2 e 4.2. Utilizando a tcnica telescpica e devido s
caractersticas das portas de limiar linear possvel reduzir ainda mais a quantidade de
portas de limiar utilizadas e retardo total do multiplicador. A principal ideia est na
realizao da multiplicao polinomial e reduo de mdulo em um nico passo.
Considere que pode-se reescrever a equao (2.27) como segue:

( ) = ( ) ( ). (4.14)
63

( ) = ( 0 + ) + 2
=1 ( + +1 + + ) + ( 1 + 22 )
1
. (4.15)

Substituindo cada pelos seus respectivos valores, dados na Equao (2.31),


resulta na seguinte equao:

( ) = (0 0 + 1 )
=0
2 1 1

+ ( + +1 + + )
=1 =1 = =+1

+ [( 1 ) 1 + 1 1 ]. (4.16)
=0

O nmero de portas de limiar linear para o clculo de cada coeficiente da


equao (4.16) dado por:

#0 = 1 + 1 =

# = ( + 1) + 2 + 1 1 + 2 1 (4.17)
# = 2 , #1 = + 2 2 + 2 = + 1,

em que = 1,2, . . . , 2.

Assim, o nmero total de portas de limiar linear necessrias para a multiplicao


em corpos finitos dado por:

2
2 +1
# = ( ) + 1 + [( ) + 1] + ( ) + 1. (4.18)
2 2 2
=1

2
+1 2 +1
# = ( ) + [( ) + 1] + ( + 1) . (4.19)
2 2 2
=1

2
2
# = + 3 + [( ) + 1] + 1. (4.20)
2
=1

2
2
# = + 3 + ( 2) [( )] . (4.21)
2
=1
64

2
2
# = 2 + 1 + [( )] . (4.22)
2
=1

Para par, tem-se:

32
# = 2 + 1 + ( + 1). (4.23)
4

32
# = ( + ). (4.24)
4

Para mpar, tem-se:

32 3
# = 2 + 1 + ( + ). (4.25)
4 4

32 1
# = ( + + ). (4.26)
4 4

Somando os resultados das equaes (4.24) e (4.26) com o nmero de portas da


primeira camada, que 2 , tem-se o total de portas necessrias para a multiplicao em
(2 ):

7 2
+ ,
# = { 4 (4.27)
7 2 1
+ + ,
4 4

O atraso do Novo Multiplicador 3 , no importando o tamanho do corpo.

No Quadro 4.1 e na Figura 4.1 tem-se a evoluo do crescimento do nmero de


portas em relao ao tamanho do corpo.
65

Quadro 4.1 - Evoluo do nmero de portas com o tamanho do corpo

GF(2n) AON-T AON-TG MAS-TG ARQ-PRO

3. 21 + 2 + 7 11 32 2 3 2 11 7 2 1
+ 7 + +
2 2 4 4

1 0 1 0 3
2 13 10 10 9
3 31 25 23 19
4 57 46 39 32
5 97 73 58 49
6 163 106 80 69
7 279 145 105 93
8 493 190 133 120
9 901 241 164 151
10 1695 298 198 185
11 3259 361 235 223
12 6361 430 275 264
13 12541 505 318 309
14 24859 586 364 357
15 49475 673 413 409
16 98661 766 465 464

Em que:

AON-T: Arquitetura Tradicional;


AON-TG: Arquitetura Tradicional com Portas de Limiar;
MAS-TG: Arquitetura de Mastrovito com Portas de Limiar;
ARQ-PRO: Nova Arquitetura proposta com Portas de Limiar Linear;
: Tamanho do corpo.
66

Figura 4.1 - Comparativo do crescimento exponencial com o polinomial

Na Figura 4.1, a curva construda em azul representa uma implementao


utilizando as portas tradicionais AON. A curva plotada em verde representa a
implementao do limiar linear em portas tradicionais AON. A curva plotada em
vermelho (MAS-TG), uma implementao usando portas de limiar conforme
Mastrovito [19]. J a curva em preto, para uma implementao otimizada de MAS-
TG, conforme em [26]. Pode-se perceber o crescimento exponencial para as portas
AON e um comportamento polinomial para implementaes que fazem uso do limiar
linear e da rede neural discreta. Logo, conclui-se que medida que o nmero
aumenta, as diferenas em termos de portas se tornam extremamente elevadas. Logo,
para = 8, temos uma diferena no que se refere ao nmero de portas utilizadas na
67

implementao do multiplicador utilizando portas tradicionais e utilizando a arquitetura


proposta.

possvel, como mostrado em [7], com a utilizao de redes neurais discretas e


ao tornar a profundidade ilimitada, reduzir o tamanho dos circuitos de exponencial para
polinomial. Assim, possvel a utilizao de arquiteturas de multiplicadores em corpos
finitos projetados com portas de limiar linear cujo tamanho no cresa
exponencialmente com o nmero de entradas.

Na Figura 4.2 ilustra-se o procedimento para a realizao da funo paridade de


11 variveis. A sada da funo paridade 1 caso =1 seja mpar. Fazendo 1 =
1 = 1, 2 = 2 = 3, 3 = 3 = 5, 4 = 4 = 7, 5 = 5 = 9 6 = 6 = 11.
Utilizando a definio de construo de circuitos de 3 camadas apresentada na seo
3.5.2 e as equaes da mesma seo, temos 11 = 1, 21 = 5 e 31 = 9, escolhendo
= 3. Logo, temos, em outras palavras:

11 = 11 = 1 < 12 = 12 = 3;

21 = 21 = 5 < 22 = 22 = 7; (4.28)

31 = 31 = 9 < 32 = 32 = 11;

Baseado nessas escolhas, a realizao da funo paridade de 11 variveis pode


ser visualizada na Figura 4.2. Esta configurao de 3 camadas exige o portas de limiar
linear. Uma implementao com 2 camadas exige 7 portas de limiar linear.

Figura 4.2 - Funo Paridade com de 11 variveis em um circuito com 3 camadas.


68

Entretanto, com o crescimento do nmero de variveis a eficincia do projeto


com 3 camadas se torna evidente. Por exemplo, para a realizao da funo paridade de
36 variveis em um circuito com 2 camadas requer 10 portas. J na configurao em
circuitos de 3 camadas, requer 13 portas. A implementao destes circuitos e da funo
paridade realizada a partir de portas AND e XOR, multiplicao e soma em um corpo
finito, como ilustrada no diagrama de blocos da Figura 4.3 para (28 ).

Figura 4.3 - Diagrama de Blocos da implementao a partir das operaes AND e XOR

O multiplicador (28 ) projetado a partir do desenvolvimento das equaes


(4.16) e (4.29), para = 8 e 1 6.

( ) = (0 0 + 1 )
=0
6 7 7

+ ( + +1 + + )
=1 =1 = =+1

+ [( 1 ) 7 + 1 1 ]. (4.29)
=0

Resolvendo todos os termos, temos a sada () representada na Equao (4.30)


como uma combinao das entradas :
69

C ( x) _(a0 b0 a0 b7 a1b7 a2 b7 a3b7 a4 b7 a5 b7 a6 b7 a7 b7 ) x 0


______ (a1b0 a1b7 a2 b6 a3b5 a4 b4 a5 b3 a6 b2 a7 b1 ) x1
______ (a1b1 a2 b0 a2 b7 a3b6 a4 b5 a5 b4 a6 b3 a7 b2 a3b7 a4 b6 a5 b5 a6 b4 a7 b3 ) x 2
______ (a1b2 a2 b1 a3b0 a3b7 a4 b6 a5 b5 a6 b4 a7 b3 a4 b7 a5 b6 a6 b5 a7 b4 ) x 3
______ (a1b3 a2 b2 a3b1 a4 b0 a4 b7 a5 b6 a6 b5 a7 b4 a5 b7 a6 b6 a7 b5 ) x 4
______ a1b4 a2 b3 a3b2 a4 b1 a5 b0 a5 b7 a6 b6 a7 b5 a6 b7 a7 b6 x 5 (4.30)
______ a1b5 a2 b4 a3b3 a4 b2 a5 b1 a6 b0 a6 b7 a7 b6 a7 b7 x
6

______ a0 b7 a1b6 a2 b5 a3b4 a4 b3 a5 b2 a6 b1 a7 b0 a7 b7 x 7 .

Repetindo o desenvolvimento das equaes (4.16) e (4.29), tem-se, para = 4


e 1 2, tem-se a sada () para o multiplicador em (24 ):

C ( x) _(a0 b0 a1b3 a2 b2 a3b1 ) x 0


______ (a1b3 a2 b2 a2 b3 a3b1 a3b2 ) x1
______ (a0 b2 a1b1 a2 b0 a2 b3 a3b2 a3b3 ) x 2
______ (a0 b3 a1b2 a2 b1 a3b0 a3b3 ) x 3 .
(4.31)

Eq.(4.30) pode ser implementada utilizando circuitos analgicos e circuitos


digitais, utilizando as mais diversas tcnicas. Uma delas realizando a funo paridade
em uma rede neural discreta, definida como 0 se o somatrio das suas entradas for par e
1 caso contrrio.

Figura 4.4 - Primeira camada para o multiplicador em (24 )

Para (24 ) so necessrias 16 portas de limiar que calculam um AND bit a bit
para o clculo de cada da primeira camada. So necessrias 16 e 64 portas lgicas
para a realizao da primeira camada do multiplicador em (24 ) e (28 ),
70

respectivamente. A segunda e terceira camada um circuito que computa a paridade


com relao aos coeficientes de cada sada. So necessrias 16 e 51 portas de
limiar para o clculo de todos os coeficientes da expresso de sada. Cada paridade
calculada utilizando portas de limiar linear em um circuito de limiar, como se pode
verificar na Figura 4.5.

Figura 4.5 - Diagrama da Porta de Limiar Linear para o multiplicador em (2 ) utilizando redes neurais
discretas

Para o clculo da multiplicao de todos os utilizado o mesmo conjunto


de portas da figura 4.4. Nas figuras 4.6, 4.7 e 4.8 so mostrados os diagramas da
implementao de cada bit de ().

Figura 4.6 - Diagrama de implementao do bit 0 para (24 )


71

Figura 4.7 - Diagrama de implementao do bit 1 para (24 )

Figura 4.8 - Diagrama de Implementao do bit 2 para (24 )

Figura 4.9 - Diagrama da Implementao do bit 3 para (24 )


72

Como pode ser observado na figura 4. 10, o multiplicador em (24 ) possui 3


camadas. A primeira camada realiza a multiplicao bit a bit , para = 0, . . . ,3 e
= 0, . . . ,3. A segunda e terceira camadas um circuito que calcula a paridade em
relao aos coeficientes de cada . O diagrama geral do multiplicador em (24 )
utilizando portas de limiar pode ser visualizado na Figura 4.10.

Figura 4.10 - Multiplicador em (24 ) utilizando portas de limiar linear


73

A primeira camada do multiplicador em (28 ) computada por 64 portas


lgicas que computam um AND bit a bit, como pode ser visto na Figura 4.11.

Figura 4.11 - Primeira camada para o multiplicador em (28 )

Nas figuras 4.12, 4.13 e 4.14, 4.15, 4.16, 4.17, 4,18 e 4.19 so mostrados os
diagramas da implementao de cada bit de ( ), em que computam a funo
paridade de 8, 10, 10, 11, 12 e 13 variveis de entrada.
74

Figura 4.12 - Diagrama da implementao do bit 0 para (28 )

Figura 4.13 - Diagrama da implementao do bit 1 para (28 )

Figura 4.14 - Diagrama da implementao do bit 2 para (28 )


75

Figura 4.15 - Diagrama da implementao do bit 3 para (28 )

Figura 4.16 - Diagrama da implementao do bit 4 para (28 )

Figura 4.17 - Diagrama da implementao do bit 5 para (28 )


76

Figura 4.18 - Diagrama da implementao do bit 6 para (28 )

Figura 4.19 - Diagrama da implementao do bit 7 para (28 )

Como pode ser observado na figura 4. 20, o multiplicador em (28 ) possui 3


camadas. A primeira camada realiza a multiplicao bit a bit , para = 0, . . . ,7 e
= 0, . . . ,7. A segunda e terceira camadas um circuito que calcula a paridade em
relao aos coeficientes de cada . Os pesos das conexes e os limiares das portas
foram previamente calculadores utilizando a tcnica descrita na seo 5.5.1, construo
de circuitos de 2 camadas e o Lema 3.1, tcnica telescpica. Os pesos da primeira
camada so iguais a 1 e os da segunda camada iguais a 2. O diagrama geral, com
entradas, sadas, conexes, pesos e limiares, do multiplicador em (28 ) utilizando
portas de limiar pode ser visualizado na Figura 4.20.
77

Figura 4.10 - Multiplicador em (28 ) utilizando portas de limiar linear


78

4.4 Concluso

Na implementao de projetos de multiplicadores utilizando a lgica tradicional,


geralmente encontrado nas referncias circuitos com fan-in ilimitado. Isto justificado
para diminuir o tamanho do circuito, j que este cresce exponencialmente com o nmero
de entradas. Como mostrado em [7], possvel, com a utilizao de redes neurais
discretas e ao tornar a profundidade do circuito ilimitada, reduzir o tamanho dos
circuitos de exponencial para polinomial.

Assim, utilizando estas arquiteturas de multiplicadores em corpos finitos com o


uso das portas de limiar linear descritas neste captulo, possvel obter circuitos cujo
tamanho no aumenta exponencialmente com o nmero de entradas, como pode ser
observado nas equaes 4.13 e 4.27, Quadro 4.1, Figura 4.1, no desenvolvimento do
multiplicador (24 ) e (28 ) e seus respectivos circuitos de limiar lineares.
5. IMPLEMENTAES DE
MULTIPLICADORES EM GF(2n)
79

5. Implementaes de Multiplicadores em ( )

Neste captulo se concentram a implementao e anlise de arquiteturas para


unidades aritmticas em corpos finitos de caracterstica 2, em especial a multiplicao
corpos finitos em (24 ) e (28 ). Estas unidades so a base para a implementao de
circuitos mais complexos codificadores e decodificadores de canal. A restrio para
corpos de caracterstica 2 se deve natureza binria dos circuitos digitais.

Muitas aplicaes exigem a determinao e obteno de polinmios irredutveis


sobre os Corpos Finitos (). No caso mais simples, = 2, tem-se definido o Corpo
Binrio (2). Em (2) a representao dos elementos bastante simplificada e as
operaes aritmticas bsicas de adio e multiplicao mdulo-2 so implementadas a
partir de tcnicas e estruturas lgicas baseadas na lgebra booleana e lgebra em corpos
finitos.

A FPGA (Field-Programmable Gate Array) um dispositivo lgico


programvel que possui uma arquitetura baseada em blocos lgicos configurveis,
chamados de CLBs (Configuration Logical Blocks). Os CLBs so formados por look-up
tables, multiplexadores e flip-flops que implementam funes lgicas. As FPGAs
tambm so compostas por estruturas chamadas de blocos de entrada e sadas (IOB
Blocks), os quais so responsveis pela interface entre as entradas e sadas provenientes
das combinaes de CLBs.

As FPGAs modernas alm dos blocos lgicos configurveis, tambm tem em


sua estrutura blocos de memria RAM (Random Access Memory) de alta profundidade,
blocos DSP (Digital Signal Processor) que realizam operaes aritmticas em centenas
de megahertz, PLL (Phase-Locked Loop) e DLL (Delay-Locked Loop) que gerenciam
os sinais de relgio e blocos com aplicao especfica como interface PCI Express
(Peripheral Component Interconnect Express) implementado em circuito dedicado.
Como exemplo est mostrado na Figura 5.1 [29], a estrutura de uma FPGA da famlia
Stratix do fabricante Altera.
80

Figura 5.1 - Arquitetura FPGA Stratix

O mercado de FPGA ocupado em 80% por dois principais fabricantes, que so


Xilinx e Altera. As FPGAs tambm so utilizadas para prototipagem de ASICs,
devido a possibilidade de inmeras regravaes. Elas tambm so usadas na produo
de equipamentos em baixa escala distribudos em diversas reas como equipamentos
mdicos, setor automotivo, comunicaes com e sem fio, rea militar entre outras. As
principais vantagens do uso de FPGA so o alto desempenho, reduo do tempo de
projeto, possibilidade de reconfigurao do dispositivo depois de implantado e
possibilidade de utilizao de linguagens com alto nvel de abstrao para configurao
do comportamento do circuito. A principal desvantagem em relao aos ASICs o
maior custo por unidade, dependendo da demanda, como pode-se observar na Figura 5.2
[30].
Figura 5.2 - Comparao entre Custo e Volume para Tecnologias em FPGA e ASIC [30]
81

O uso da FPGA, em computao de alto desempenho, est cada vez mais


relevante, visto que podem acelerar segmentos crticos em diversas aplicaes. Isso tem
aumentado o uso deste processamento na implementao sobre corpos finitos em
(2 ), embora seja uma rea que ainda no se tenha avanado muito.
Nas prximas sees apresenta-se diferentes implementaes de projetos de
multiplicadores em (24 ) e (28 ), a ltima delas, na seo 5.4, a implementao e
anlise de parmetros do multiplicador em (28 ) utilizando redes neurais discretas,
objetivo final da dissertao.

5.1 Implementao do Multiplicador de Mastrovito em ( )

Utilizando a Equao (2.23) pode-se escrever a sada do multiplicador de


Mastrovito em funo das entradas considerando = 4 o tamanho do corpo.
Como a sada uma combinao de portas lgicas AND realizando a operao de
multiplicao e a porta lgica XOR realizando a operao de adio, ambas em corpos
finitos, tem-se a implementao realizada utilizando circuitos digitais, representada na
Figura 5.3 e 5.4.

Figura 5.3 - Implementao em hardware do multiplicador de Mastrovito em (24 )


82

Figura 5.4 - Simulao do multiplicador de Mastrovito em (24 )

Em termos de portas lgicas utilizadas, o resultado esperado, considerando a


complexidade espacial do multiplicador de Mastrovito utilizando um polinmio timo,
era de 31 portas lgicas. Obtivemos, nesta implementao, o total de 31 portas lgicas
(15 portas XOR e 16 portas AND) para realizar a operao.

5.2 Implementao do Multiplicador de Mastrovito ( )

Utilizando a mesma Equao (2.23) podemos escrever a sada do multiplicador


de Mastrovito em funo das entradas considerando = 8 o tamanho do corpo.
Como a sada uma combinao de portas lgicas AND realizando a operao de
multiplicao e a porta lgica XOR realizando a operao de adio, ambas em corpos
finitos, tem-se a implementao realizada utilizando circuitos digitais, representada na
Figura 5.5.
83

Figura 5.5 - Simulao do multiplicador de Mastrovito em (28 )

Em termos de portas lgicas utilizadas, o resultado esperado, considerando a


complexidade espacial do multiplicador de Mastrovito utilizando o polinmio
irredutvel ( ) = + 1 + + + 1, era de 127 portas lgicas. Obteve-se, nesta
implementao, com clock de 40 MHz, o total de 141 portas lgicas para realizar a
operao.
84

5.3 Multiplicador em ( ) utilizando clulas de memria

Utilizando o cdigo descrito na Seo 2.2.1, gera-se uma matriz simtrica com
256 linhas e colunas, totalizando 65536 elementos. A partir desta tbua de multiplicao
em corpo finito, insere-se todos os elementos possveis em diferentes posies de
memria do FPGA (Field Programmable Gate Array) utilizando o simulador lgico e
programvel Quartus II, desenvolvido pela Altera.

A partir da seleo de entrada, dada por , e do clock, em 35 MHz, fez-se a


correspondncia e busca na matriz simtrica obtida em cada posio de memria. Na
Figura 5.6 temos a implementao da multiplicao utilizando as clulas de memria do
dispositivo.

Figura 5.6 - Implementao em hardware do multiplicador em (28 ) utilizando clulas de memria.

Estas implementaes, utilizando circuitos digitais tradicionais, foram realizadas


no sentido de validar a operao, a tbua de multiplicao e de se obter uma maior
familiaridade com o projeto do desenvolvimento da nova arquitetura do multiplicador,
pois o multiplicador de Mastrovito utilizado como base para a o novo multiplicador
proposto utilizando portas de limiar linear.

5.4 Multiplicador em ( ) utilizando redes neurais discretas

Descrevendo o circuito de limiar linear da Figura 4.20 em Verilog, de acordo


com o cdigo descrito no Apndice I, temos 8 mdulos distintos que calculam a
paridade de diferentes variveis de entrada e utilizando limiares previamente calculados
85

utilizando as tcnicas descritas na seo 3.5.1 e Lema 3.1. Para o bit de sada 0 , por
exemplo, tem-se em linguagem de descrio de hardware explicitada no Quadro 5.1.

Quadro 5.1 - Cdigo em Verilog para a implementao do bit 0


Bit: C0
//a0b0; a0b0; a1b7; a2b7; a3b7; a4b7; a5b7; a6b7; a7b7;
//find: a([0-9])b([0-9]);
//repl: \t\t\tL0_COMP_OUT[\1*GFM_IN_LENGTH+\2],\n

parameter L1_ADDER0_IN_LENGTH = 9;
parameter L1_ADDER0_OUT_LENGTH = 4;

wire [L1_ADDER0_OUT_LENGTH-1:0] L1_ADDER0_OUT;

defparam L1_ADDER0.input_length = L1_ADDER0_IN_LENGTH;


defparam L1_ADDER0.output_length = L1_ADDER0_OUT_LENGTH;

bitadder L1_ADDER0
(
.in
(
{
L0_COMP_OUT[0*GFM_IN_LENGTH+0],
L0_COMP_OUT[0*GFM_IN_LENGTH+7],
L0_COMP_OUT[1*GFM_IN_LENGTH+7],
L0_COMP_OUT[2*GFM_IN_LENGTH+7],
L0_COMP_OUT[3*GFM_IN_LENGTH+7],
L0_COMP_OUT[4*GFM_IN_LENGTH+7],
L0_COMP_OUT[5*GFM_IN_LENGTH+7],
L0_COMP_OUT[6*GFM_IN_LENGTH+7],
L0_COMP_OUT[7*GFM_IN_LENGTH+7]
}
),
.out
(
{
L1_ADDER0_OUT
}
)
);

//assign LEDR = L1_ADDER0_OUT; // TP LVL1 ADDER0 RESULT

wire [L1_ADDER0_IN_LENGTH/2:0] L1_COMP0;

generate

genvar L1_COMP0_GEN_I;

for
(
L1_COMP0_GEN_I = 0;
(L1_COMP0_GEN_I*2+1) <= L1_ADDER0_IN_LENGTH;
L1_COMP0_GEN_I = L1_COMP0_GEN_I + 1
)
begin : L1_COMP0_GENBLOCK
assign L1_COMP0[ L1_COMP0_GEN_I ] = ( L1_ADDER0_OUT >=
L1_COMP0_GEN_I*2+1 )?1'b1:1'b0;
end
86

endgenerate

//assign LEDR = L1_COMP0; // TP LVL1 COMP0 RESULT

parameter L2_ADDER0_OUT_LENGTH = L1_ADDER0_OUT_LENGTH;

wire [L2_ADDER0_OUT_LENGTH-1:0] L2_ADDER0_OUT;

bitadder L2_ADDER0
(
.in(L1_COMP0),
.out(L2_ADDER0_OUT)
);

wire [L2_ADDER0_OUT_LENGTH-1:0] PARITY_SUB0 = {L2_ADDER0_OUT, 1'b0}-


L1_ADDER0_OUT;

assign GFM_OUT[0] = ( PARITY_SUB0 >= 1 )?1'b1:1'b0;

Foram implementados no total 8 mdulos, em que cada um deles corresponde a


diferentes sadas, compondo o vetor 0, 1 , 2 , 3 , 4 , 5 , 6, 7. Cada mdulo calcula a
paridade da soma das variveis de entrada atravs das comparaes com os limiares e
multiplicaes pelos pesos de cada conexo. Para todas as possibilidades de soma das
variveis nas entradas de cada mdulo foram testados o funcionamento do clculo da
funo paridade, como pode ser visualizado na verificao a seguir. A varivel IN so
as possibilidades de entradas, PC0 fornece o somatrio dos bits de entrada, COMP0 o
valor limiar com o qual ser realizada a comparao, PC1 a soma dos bits de COMP e
OUT a sada da realizao da paridade. No Quadro 5.2 tem-se as possibilidades de
entrada do circuito de limiar, que varia de 8 a 13 variveis, e o resultado da verificao
da paridade utilizando a estrutura descrita na Figura 4.20.

Quadro 5.2 - Verificao da Paridade

IN: 0000000000000; PC0: 0; COMP0: 0000000000000; PC1: 0; OUT: 0;


IN: 0000000000001; PC0: 1; COMP0: 0000000000001; PC1: 0; OUT: 1;
IN: 0000000000011; PC0: 2; COMP0: 0000000000001; PC1: 1; OUT: 0;
IN: 0000000000111; PC0: 3; COMP0: 0000000000011; PC1: 2; OUT: 1;
IN: 0000000001111; PC0: 4; COMP0: 0000000000011; PC1: 2; OUT: 0;
IN: 0000000011111; PC0: 5; COMP0: 0000000000111; PC1: 2; OUT: 1;
IN: 0000000111111; PC0: 6; COMP0: 0000000000111; PC1: 3; OUT: 0;
IN: 0000001111111; PC0: 7; COMP0: 0000000001111; PC1: 3; OUT: 1;
IN: 0000011111111; PC0: 8; COMP0: 0000000001111; PC1: 4; OUT: 0;
IN: 0000111111111; PC0: 9; COMP0: 0000000011111; PC1: 4; OUT: 1;
IN: 0001111111111; PC0: 10; COMP0: 0000000011111; PC1: 5; OUT: 0;
IN: 0011111111111; PC0: 11; COMP0: 0000000111111; PC1: 5; OUT: 1;
IN: 0111111111111; PC0: 12; COMP0: 0000000111111; PC1: 6; OUT: 0;
IN: 1111111111111; PC0: 13; COMP0: 0000000111111; PC1: 6; OUT: 1;
- NeuralParityCheck_TestBench.v:14: Verilog $finish
- NeuralParityCheck_TestBench.v:14: Verilog $finish
- NeuralParityCheck_TestBench.v:14: Second verilog $finish, exiting
87

A frequncia de operao da FPGA de 50 MHz. O menor atraso de


propagao, tempo mnimo entre a propagao do dado da entrada para a sada, foi de
2,640 s, da chave SW[10] para o HEX6[0]. O maior atraso de propagao obtido foi
de 9,609 s. No Apndice III temos os atrasos mnimos de propagao para todas as
entradas e sadas.

O software de desenvolvimento Quartus II a ferramenta da Altera


Corporation [30] para a sntese lgica de projetos digitais, que suporta toda a sua
linha de dispositivos lgicos programveis (FPGAs), e que tambm permite o projeto
de ASICs. O Quartus II integra diversas funes, tais como:

Entrada e edio de projetos atravs de diagramas de bloco, AHDL, VHDL e


Verilog HDL;
Combinao de diferentes tipos de arquivos de projeto;
Simulao funcional e temporizada;
Localizao automtica de erros;
Funes de localizao e roteamento, verificao e programao de
dispositivos;
Anlise e clculo dos tempos de propagao;
Capacidade de otimizao automtica do consumo de energia do projeto;
Criao e otimizao de blocos de projeto de forma independente.

Das diversas funcionalidades apresentadas, utilizamos uma ferramenta que exibe


um diagrama esquemtico do circuito projetado, o RTL Viewer, que fornece a estrutura
do cdigo em nvel de transferncia de registrador. RTL o nvel de abstrao mais alto
usado no fluxo tradicional de projeto de sistemas digitais. Na Figura 5.7 temos o maior
nvel de abstrao do multiplicador em (28 ), gerado a partir da descrio de
hardware do Apndice I.
88

Figura 5.7 - RTL Viewer do Multiplicador em (28 ) utilizando portas de limiar linear

O bloco GF8Multiplier:comb_115 o bloco principal, onde toda a descrio do


circuito de limiar aplicada. Os demais nveis de abstrao podem ser visualizados no
Apndice IV.

Para a multiplicao em (28 ) utilizando portas de limiar implementada em


FPGA, obteve-se um total de 296 portas lgicas necessrias para computar a operao,
menos que 1% da capacidade do dispositivo EP2C35F672C6. A potncia fornecida pela
ferramenta de sntese foi de 132,58 mW. Parmetros como o total de portas utilizadas,
fan-out, mximo fan-out, potncia trmica total, correntes necessrias para o clculo de
cada coeficiente utilizando a funo paridade, tenso de operao e corrente total na
implementao so mostradas nos Quadros 5.3 e 5.4. Detalhes adicionais dos resultados
gerados na sntese do Quartus II podem ser encontrados no Apndice III.
89

Quadro 5.3 - Complexidade Espacial, fan-out e correntes na implementao do multiplicador em


GF(28)

Total de Fan-out Mximo Potncia Corrente Corrente


Portas Fan-out Total I/O Operao
Utilizadas
296 1090 44 132,58 mW 11,39 mA 79,16 mA

Quadro 5.4 - Tenso e Correntes de operao por bit de sada do multiplicador em GF(28)

I/O Tenso (V) Corrente (mA)


1 3,3 V 1,44 mA
2 3,3 V 1,32 mA
3 3,3 V 1,15 mA
4 3,3 V 1,15 mA
5 3,3 V 1,82 mA
6 3,3 V 1,79 mA
7 3,3 V 1,44 mA
8 3,3 V 1,30 mA

A partir dos resultados experimentais obtidos e da tbula de multiplicao em


(28 ) obtida com o algoritmo no Matlab na seo 2.2.1, fez-se um mapa de
verificao da operao com a finalidade de comparar o resultado da multiplicao
terico e o obtido com a implementao na FPGA utilizando portas de limiar linear. No
Apndice II tem-se o algoritmo que fornece a diferena entre os resultados e este
mapeamento. Na Figura 5.8 pode-se ver esta comparao pelo mapa de verificao, em
que a cor verde, regio mais uniforme, representa a operao realizada corretamente e a
cor azul a representao de uma falha na operao. Para o clculo realizado, obteve-se
uma taxa de acerto de aproximadamente 90%. Portanto, faz-se necessria uma
depurao do projeto algbrico e uma anlise sobre o tempo de processamento, pois
algumas computaes podem estar sendo realizadas antes que os bits estejam
disponveis, de modo que este erro seja eliminado.
90

Figura 5.8 - Mapa de Verificao do Multiplicador em (28 )

5.5 Concluses

Nesse captulo foram descritos os passos desenvolvidos para a implementao


do multiplicador em (28 ) utilizando portas de limiar linear como elemento bsico de
processamento em uma rede neural discreta que realiza o clculo da funo paridade.
Tambm foram apresentados os resultados das simulaes de diferentes
implementaes, desde circuitos digitais convencionais, circuitos em FPGA utilizando
clulas de memria e implementao, objeto de final de estudo, do multiplicador em
(28 ) utilizando portas de limiar linear. Com isso, o objetivo de comprovar o
funcionamento prtico da arquitetura do multiplicador em (28 ) foi cumprido.
Entretanto, sua eficincia, em termos de tempo de processamento e contagem de portas
est abaixo do esperado. Em termos de resultados da operao de multiplicao em
corpos finitos, observa-se uma taxa de acerto de 90%.
5. CONSIDERAES FINAIS E
PERSPECTIVAS
91

6. Consideraes Finais e Perspectivas

Neste trabalho foram apresentadas diferentes implementaes em hardware para


multiplicadores em corpos finitos utilizando portas de limiar linear. Devido as
potencialidades destas portas foram obtidos resultados satisfatrios. Para a nova
arquitetura proposta foram previstas um total de 120 portas para realizar a operao. Na
implementao obtivemos um total de 296 portas, com a ressalva que este nmero pode
ser reduzido com a otimizao da descrio em HDL Verilog. No entanto, este valor
menor que o nmero total de portas do multiplicador tradicional, 493. Portanto, obteve-
se uma reduo de 40% das portas. O tempo de atraso da operao, de 2,0 a 10 ns, foi
similar ao encontrado nas implementaes em outras referncias de multiplicadores
paralelos de alto desempenho, como mostrado em [31-37]. A porta de limiar linear o
elemento bsico de uma rede neural discreta, cuja utilizao visa diminuir a
complexidade espacial e temporal dos circuitos para multiplicao em corpos finitos.
Para a realizao do projeto, foi necessrio um estudo dos conceitos relacionados
multiplicao em corpos finitos, bem como as arquiteturas existentes para
implementao em hardware. Desse modo, o projeto e implementao de
multiplicadores em corpos finitos, que utilizam portas de limiar como elemento de
processamento, se torna bem promissor.

A seguir so feitas algumas sugestes para a continuao das atividades de pesquisa


e alguns trabalhos publicados.

Utilizar mtodos computacionais para determinao de polinmios () de


forma que se tenha uma reduo da complexidade espacial;
Busca por um mtodo geral para gerao automtica do diagrama do
multiplicador para qualquer corpo na base (2) para polinmios irredutveis
diferentes;
Projetar o multiplicador em GF(28) utilizando 3 camadas;
Analisar o tempo de processamento dos multiplicadores implementados neste
trabalho;
Implementao analgica e comparativo, em termos de contagem de portas,
potncia, atraso e custo, com a implementao digital;
92

Projetar um multiplicador maior, como o GF(2 233), multiplicador padro


proposto pela NIST (National Institute of Standards and Technology);
Implementao em ASIC do modelo proposto neste trabalho.

Santos M. A., Freire R. C. S, Assis F. M, Reis V. L., Albuquerque T. C.


Implementao em Hardware do Multiplicador de Mastrovito em GF (2 4).
Encom2015. Campina Grande, 2015.

Santos M. A., Freire R. C. S, Assis, F. M, Reis, V. L., Arajo A. F. Multiplicador em


GF (28) em FPGA utilizando clulas de memria. VIII Colquio de Matemtica.
Campina Grande, 2015.

Santos M. A., Freire R. C. S, Assis, F. M, Reis, V. L., Albuquerque T. C. GF (28)


Multiplier on Hardware using Discrete Neural Network.IsCAS2016. Montreal, 2015.
93

Referncias

[1] Lidiano A. N. Oliveira. Multiplicador em corpo finito utilizando redes neurais


discretas, Dissertao de Mestrado, Universidade Federal de Campina Grande,
Campina Grande, PB, Brasil, Outubro de 2000.

[2] Cristvo M. de O. Lima F. Circuito Integrado para Multiplicao em GF(2 4)


Utilizando Portas de Limiar Linear" Dissertao de Mestrado, Universidade Federal de
Campina Grande, Campina Grande-PB, Brasil, 2010.

[3] Hasan M. A.. Look-up table-based large finite field multiplication in memory
constrained cryptosystems, IEEE Transactions on Computers, vol. 49, no. 7, pp. 749
758, July 2000.

[4] Imaa J. L., Snchez J. M. Multiplicadores cannicos sobre campos GF(2 m)


generados por um tipo de trinmios irreducibles implementados em hardware
reconfigurable, III Jornadas sobre Computacion Reconfigurable y Aplicaciones
JCRA2003, pp. 6572, 2003.

[5] Edgar F., Bollman D., Moreno O. A fast finite field multiplier, Reconfigurable
Computing: Architectures , Tools and Applications, Third International Workshop,
ARC 2007, Mangaratiba, Brazil, pp. 238246, March 2007.

[6] Ashkan H. Namin, Huapeng Wu, Majid Ahmadi. High speed word-parallel bitserial
normal basis finite field multiplier and its FPGA implementation, Proc. 39th Asilomar
Conf. Signals, Systems, and Computers, pp. 13381341, November 2005.

[7] Kailath, Siu and Roychaudhury Discrete Neural Computation, a Thearetical


Foundation MC-Gral-Hill, 1995.

[8] Todd K. Moon. Error Correction Coding: Mathematical methods and algoritms,
John Wiley and Sons, New Jersey, 2005.

[9] Paar, Chistof. A New Architecture for a Parallel Finite Field Multiplier with Low
Complexity Based on Composite Fields, IEEE Transaction on Computers, Vol 45, No.
7, July 1996.

[10] Peter Celinski, Sorin D. Cotofana, and Derek Abbot, Threshold logic parallel
counters for 32-bit multipliers, Proceedings of SPIE, vol. 4935, pp. 205214, 2002.
94

[11] Y. Leblebici, H. zdemir, A. Kepkep, and U. ilingiroglu. A compact high-speed


(31,5) parallel counter circuit based on capacitive threshold-logic gates, IEEE Journal
of Solid-State Circuits, vol. SC-31, pp. 11771183, 1996.

[12] David W. Ash, Ian F. Blake, e Scott A. Vanstone. Low Complexity Normal
Bases. In Discrete Applied Mathematics, volume 25, pp. 191210. North-Holland:
Elsevier Science Publishers, 1989.

[13] Richard E. Blahut. Theory and Practice of Error Control Codes. Reading, MA:
Addison-Wesley, 1983.

[14] Rudolf Lidl; Harald Niederreiter. Finite Fields. In Encyclopedia of Mathematics


and Its Applications. Cambridge: University Press, 1997.

[15] Shu Lin; Daniel J. Costello. Error Control Coding: Fundamentals and
Applications. Englewood Cliffs, NJ: Prentice-Hall, 1983.

[16] Alfred J. Menezes, editor. Applications of Finite Fields. Boston: Kluwer


Academic Publishers, 1993.

[17] Leocarlos Bezerra da Silva Lima. Architecture de dcodage pour codes


algbriques gomtriques bass sur des courbes dHermite. Tlcom ParisTech, 2004.

[18] S. Lin; D. J. Costello. Error Control Coding: Fundamentals and Applications.


Prentice-Hall International, Inc., May 1983.

[19] Mastrovito E. D. VLSI architectures for computation in Galois field, PhD thesis,
Linkoping Univ., Linkoping, Sweden, 1991.

[20] Oliveira, L. A. N. ; Francisco Assis . A New Architecture for Multipliers in


GF(2 ) Using Discrete Neural Networks. In: III Congresso Brasileiro de Redes
Neurais, 1997, Florianoplis. Anais do III Congresso Brasileiro de Redes Neurais,
1997. v. 1. p. 12-15.

[21] Halbutogullari A. and Koc C . K.. Mastrovito Multiplier for General Irreducible
Polynomials". IEEE Transactions on Computers, Vol. 49, No. 5, pp. 503{518, May
2000.
95

[22] S. Lin and D. J. Costello. Error Control Coding: Fundamentals and Applications.
Prentice-Hall International, Inc., May 1983.

[23] Shibata T. and Ohmi T., An intelligent MOS transistor featuring gate-level
weighted sum and threshold operation, IEDM, Technical Digest, IEEE, New York,
December 1991.

[24] Padure M., Cotofana S., and Vassiliadis S., A low-power threshold logic
family, in Proc. IEEE International Conference on Electronics, Circuits and Systems,
pp. 657 66, 2002.

[25] Celinski P.,. Cotofana S. D.,. Lpez J. F, l-Sarawi S., Abbott D., State-of-art in
CMOS threshold-logic VLSI gate implementations and applications, Proceedings of
the VLSI Circuits and Systems Conference, vol. 5117, Spain, pp. 5364, 2003.

[26] Bruck J. and Smolensky R.. Polynomial Threshold Functions, AC 0 Functions and
Spectral Norms". In Proc. 31st IEEE Symposium on Foundations of Computer Science,
Vol. 44, pp. 632{641, February 1990.

[27] Paterson M., Pippenger N., and U. Zwick, Faster circuits and shorter formulae for
multiple addition, multiplication and symmetric Boolean functions, In Proceedings of
the 31st Annual Symposium on Foundations of Computer Science, pp. 642-650, 1990.

[28] Paturi R. and Saks M., On threshold circuits for parity, In Proceedings of the
31st Annual Symposium on Foundations of Computer Science, pp. 397-404, 1990.

[29] Altera. About Stratix Series High-end FPGAs. 2010.

[30] Flynn Michael M.J. , Luk W., Computer System Design: System-on-Chip, August
2011, Wiley.
[31] Rong-Jian Chen, Jhen-Wun Fan and Chin-Hao Liao, Reconfigurable Galois
Multiplier.International Symposium on Biometrics and Security Technologies
(ISBAST), 2014.
[32] Retheesh. D, Analysis on FPGA Designs of Parallel High Performance
Multipliers. International Journal of Communication and Computer Technologies
Volume 02 No.12, 2014.
96

[33] Garcia-Martinez M.A, Posada-Gomez R., Morales-Luna G., Rodriguez-Henriquez


F. FPGA implementation of an efficient multiplier over finite fields GF(2m).
International Conference on Reconfigurable Computing and FPGAs. 2005.
[34] P. Kitsos, G. Theodoridis, O. Koufopavlou. An efficient reconfigurable multiplier
for Galois Field GF(2m). Microelectronics Journal. Vol 34, pp 975-980. 2003.
[35] Lakhendra K., Sudha K.L., Implementation of Galois Field Arithmetic Unit on
FPGA, International Journal of Innovative Research in Computes and Communication
Engineering, Vol. 2, Issue 6, June 2014.
[36] Maheswari M. U., S. Baskar, G.M. Keerthi, High Speed Finete Field Multiplier
GF(2m) for Cryptographic Applications. International Journal of Advanced Research in
Electronics and Communication Engineering (IJARECE) Volume 3, Issue 11,
November 2014.
[37] Ajitha S.S., D. Retheesh.D, Efficient Implementation of bit parallel finie fild
multipliers. IJRET: International Journal of Research in Engineering and Technology,
2015.
97

Apndice I

Este apndice tem por objetivo descrever explicitamente os cdigos dos mdulos
e Test Bench da descrio em Verilog referente ao clculo da paridade de funes com
8, 9, 10, 11, 12 e 13 variveis de entrada projetadas para composio do multiplicador
em (28 ), como na Equao 4.30 e Figura 4.20 do Captulo 4 do texto,

Sada: C0

//a0b0; a0b0; a1b7; a2b7; a3b7; a4b7; a5b7; a6b7; a7b7;


//find: a([0-9])b([0-9]);
//repl: \t\t\tL0_COMP_OUT[\1*GFM_IN_LENGTH+\2],\n

parameter L1_ADDER0_IN_LENGTH = 9;
parameter L1_ADDER0_OUT_LENGTH = 4;

wire [L1_ADDER0_OUT_LENGTH-1:0] L1_ADDER0_OUT;

defparam L1_ADDER0.input_length = L1_ADDER0_IN_LENGTH;


defparam L1_ADDER0.output_length = L1_ADDER0_OUT_LENGTH;

bitadder L1_ADDER0
(
.in
(
{
L0_COMP_OUT[0*GFM_IN_LENGTH+0],
L0_COMP_OUT[0*GFM_IN_LENGTH+7],
L0_COMP_OUT[1*GFM_IN_LENGTH+7],
L0_COMP_OUT[2*GFM_IN_LENGTH+7],
L0_COMP_OUT[3*GFM_IN_LENGTH+7],
L0_COMP_OUT[4*GFM_IN_LENGTH+7],
L0_COMP_OUT[5*GFM_IN_LENGTH+7],
L0_COMP_OUT[6*GFM_IN_LENGTH+7],
L0_COMP_OUT[7*GFM_IN_LENGTH+7]
}
),
.out
(
{
L1_ADDER0_OUT
}
)
);

//assign LEDR = L1_ADDER0_OUT; // TP LVL1 ADDER0 RESULT

wire [L1_ADDER0_IN_LENGTH/2:0] L1_COMP0;

generate

genvar L1_COMP0_GEN_I;

for
(
L1_COMP0_GEN_I = 0;
(L1_COMP0_GEN_I*2+1) <= L1_ADDER0_IN_LENGTH;
98

L1_COMP0_GEN_I = L1_COMP0_GEN_I + 1
)
begin : L1_COMP0_GENBLOCK
assign L1_COMP0[ L1_COMP0_GEN_I ] = ( L1_ADDER0_OUT >=
L1_COMP0_GEN_I*2+1 )?1'b1:1'b0;
end

endgenerate

//assign LEDR = L1_COMP0; // TP LVL1 COMP0 RESULT

parameter L2_ADDER0_OUT_LENGTH = L1_ADDER0_OUT_LENGTH;

wire [L2_ADDER0_OUT_LENGTH-1:0] L2_ADDER0_OUT;

bitadder L2_ADDER0
(
.in(L1_COMP0),
.out(L2_ADDER0_OUT)
);

wire [L2_ADDER0_OUT_LENGTH-1:0] PARITY_SUB0 = {L2_ADDER0_OUT, 1'b0}-


L1_ADDER0_OUT;

assign GFM_OUT[0] = ( PARITY_SUB0 >= 1 )?1'b1:1'b0;

Sada: C1

//a1b0; a1b7; a2b6; a3b5; a4b4; a5b3; a6b2; a7b1;


//find: a([0-9])b([0-9]);
//repl: \t\t\tL0_COMP_OUT[\1*GFM_IN_LENGTH+\2],\n

parameter L1_ADDER1_IN_LENGTH = 9;
parameter L1_ADDER1_OUT_LENGTH = 4;

wire [L1_ADDER1_OUT_LENGTH-1:0] L1_ADDER1_OUT;

defparam L1_ADDER1.input_length = L1_ADDER1_IN_LENGTH;


defparam L1_ADDER1.output_length = L1_ADDER1_OUT_LENGTH;

bitadder L1_ADDER1
(
.in
(
{
L0_COMP_OUT[1*GFM_IN_LENGTH+0],
L0_COMP_OUT[1*GFM_IN_LENGTH+7],
L0_COMP_OUT[2*GFM_IN_LENGTH+6],
L0_COMP_OUT[3*GFM_IN_LENGTH+5],
L0_COMP_OUT[4*GFM_IN_LENGTH+4],
L0_COMP_OUT[5*GFM_IN_LENGTH+3],
L0_COMP_OUT[6*GFM_IN_LENGTH+2],
L0_COMP_OUT[7*GFM_IN_LENGTH+1]
}

),
.out
(
{
99

L1_ADDER1_OUT
}
)
);

//assign LEDR = L1_ADDER1_OUT; // TP LVL1 ADDER1 RESULT

wire [L1_ADDER1_IN_LENGTH/2:0] L1_COMP1;

generate

genvar L1_COMP1_GEN_I;

for
(
L1_COMP1_GEN_I = 0;
(L1_COMP1_GEN_I*2+1) <= L1_ADDER1_IN_LENGTH;
L1_COMP1_GEN_I = L1_COMP1_GEN_I + 1
)
begin : L1_COMP1_GENBLOCK
assign L1_COMP1[ L1_COMP1_GEN_I ] = ( L1_ADDER1_OUT >=
L1_COMP1_GEN_I*2+1 )?1'b1:1'b0;
end

endgenerate

//assign LEDR = L1_COMP1; // TP LVL1 COMP1 RESULT

parameter L2_ADDER1_OUT_LENGTH = L1_ADDER1_OUT_LENGTH;

wire [L2_ADDER1_OUT_LENGTH-1:0] L2_ADDER1_OUT;

bitadder L2_ADDER1
(
.in(L1_COMP1),
.out(L2_ADDER1_OUT)
);

wire [L2_ADDER1_OUT_LENGTH-1:0] PARITY_SUB1 = {L2_ADDER1_OUT, 1'b0}-


L1_ADDER1_OUT;

assign GFM_OUT[1] = ( PARITY_SUB1 >= 1 )?1'b1:1'b0;

Sada:C2

// a1b1; a2b0; a2b7; a3b6; a3b7; a4b5; a4b6; a5b4; a5b5; a6b3; a6b4;
a7b2; a7b3
//find: a([0-9])b([0-9]);
//repl: \t\t\tL0_COMP_OUT[\1*GFM_IN_LENGTH+\2],\n

parameter L1_ADDER2_IN_LENGTH = 9;
parameter L1_ADDER2_OUT_LENGTH = 4;

wire [L1_ADDER2_OUT_LENGTH-1:0] L1_ADDER2_OUT;

defparam L1_ADDER2.input_length = L1_ADDER2_IN_LENGTH;


defparam L1_ADDER2.output_length = L1_ADDER2_OUT_LENGTH;

bitadder L1_ADDER2
(
.in
100

(
{

L0_COMP_OUT[1*GFM_IN_LENGTH+1],
L0_COMP_OUT[2*GFM_IN_LENGTH+0],
L0_COMP_OUT[2*GFM_IN_LENGTH+7],
L0_COMP_OUT[3*GFM_IN_LENGTH+6],
L0_COMP_OUT[3*GFM_IN_LENGTH+7],
L0_COMP_OUT[4*GFM_IN_LENGTH+5],
L0_COMP_OUT[4*GFM_IN_LENGTH+6],
L0_COMP_OUT[5*GFM_IN_LENGTH+4],
L0_COMP_OUT[5*GFM_IN_LENGTH+5],
L0_COMP_OUT[6*GFM_IN_LENGTH+3],
L0_COMP_OUT[6*GFM_IN_LENGTH+4],
L0_COMP_OUT[7*GFM_IN_LENGTH+2],
L0_COMP_OUT[7*GFM_IN_LENGTH+3]
}
),
.out
(
{
L1_ADDER2_OUT
}
)
);

//assign LEDR = L1_ADDER2_OUT; // TP LVL1 ADDER2 RESULT

wire [L1_ADDER2_IN_LENGTH/2:0] L1_COMP2;

generate

genvar L1_COMP2_GEN_I;

for
(
L1_COMP2_GEN_I = 0;
(L1_COMP2_GEN_I*2+1) <= L1_ADDER2_IN_LENGTH;
L1_COMP2_GEN_I = L1_COMP2_GEN_I + 1
)
begin : L1_COMP2_GENBLOCK
assign L1_COMP2[ L1_COMP2_GEN_I ] = ( L1_ADDER2_OUT >=
L1_COMP2_GEN_I*2+1 )?1'b1:1'b0;
end

endgenerate

//assign LEDR = L1_COMP2; // TP LVL1 COMP2 RESULT

parameter L2_ADDER2_OUT_LENGTH = L1_ADDER2_OUT_LENGTH;

wire [L2_ADDER2_OUT_LENGTH-1:0] L2_ADDER2_OUT;

bitadder L2_ADDER2
(
.in(L1_COMP2),
.out(L2_ADDER2_OUT)
);

wire [L2_ADDER2_OUT_LENGTH-1:0] PARITY_SUB2 = {L2_ADDER2_OUT, 1'b0}-


L1_ADDER2_OUT;
101

assign GFM_OUT[2] = ( PARITY_SUB2 >= 1 )?1'b1:1'b0;

Sada: C3

//a1b2;a2b1;a3b0;a3b7;a4b6;a4b7;a5b5;a5b6;a6b4;a6b5;a7b3;a7b4;
//find: a([0-9])b([0-9]);
//repl: \t\t\tL0_COMP_OUT[\1*GFM_IN_LENGTH+\2],\n

parameter L1_ADDER3_IN_LENGTH = 9;
parameter L1_ADDER3_OUT_LENGTH = 4;

wire [L1_ADDER3_OUT_LENGTH-1:0] L1_ADDER3_OUT;

defparam L1_ADDER3.input_length = L1_ADDER3_IN_LENGTH;


defparam L1_ADDER3.output_length = L1_ADDER3_OUT_LENGTH;

bitadder L1_ADDER3
(
.in
(
{
L0_COMP_OUT[1*GFM_IN_LENGTH+2],
L0_COMP_OUT[2*GFM_IN_LENGTH+1],
L0_COMP_OUT[3*GFM_IN_LENGTH+0],
L0_COMP_OUT[3*GFM_IN_LENGTH+7],
L0_COMP_OUT[4*GFM_IN_LENGTH+6],
L0_COMP_OUT[4*GFM_IN_LENGTH+7],
L0_COMP_OUT[5*GFM_IN_LENGTH+5],
L0_COMP_OUT[5*GFM_IN_LENGTH+6],
L0_COMP_OUT[6*GFM_IN_LENGTH+4],
L0_COMP_OUT[6*GFM_IN_LENGTH+5],
L0_COMP_OUT[7*GFM_IN_LENGTH+3],
L0_COMP_OUT[7*GFM_IN_LENGTH+4]

}
),
.out
(
{
L1_ADDER3_OUT
}
)
);

//assign LEDR = L1_ADDER3_OUT; // TP LVL1 ADDER3 RESULT

wire [L1_ADDER3_IN_LENGTH/2:0] L1_COMP3;

generate

genvar L1_COMP3_GEN_I;

for
(
L1_COMP3_GEN_I = 0;
(L1_COMP3_GEN_I*2+1) <= L1_ADDER3_IN_LENGTH;
L1_COMP3_GEN_I = L1_COMP3_GEN_I + 1
102

)
begin : L1_COMP3_GENBLOCK
assign L1_COMP3[ L1_COMP3_GEN_I ] = ( L1_ADDER3_OUT >=
L1_COMP3_GEN_I*2+1 )?1'b1:1'b0;
end

endgenerate

//assign LEDR = L1_COMP3; // TP LVL1 COMP3 RESULT

parameter L2_ADDER3_OUT_LENGTH = L1_ADDER3_OUT_LENGTH;

wire [L2_ADDER3_OUT_LENGTH-1:0] L2_ADDER3_OUT;

bitadder L2_ADDER3
(
.in(L1_COMP3),
.out(L2_ADDER3_OUT)
);

wire [L2_ADDER3_OUT_LENGTH-1:0] PARITY_SUB3 = {L2_ADDER3_OUT, 1'b0}-


L1_ADDER3_OUT;

assign GFM_OUT[3] = ( PARITY_SUB3 >= 1 )?1'b1:1'b0;

Sada C4:

//a1b3; a2b2; a3b1; a4b0; a4b7; a5b6; a5b7; a6b5; a6b6; a7b4; a7b5;

//find: a([0-9])b([0-9]);
//repl: \t\t\tL0_COMP_OUT[\1*GFM_IN_LENGTH+\2],\n

parameter L1_ADDER4_IN_LENGTH = 9;
parameter L1_ADDER4_OUT_LENGTH = 4;

wire [L1_ADDER4_OUT_LENGTH-1:0] L1_ADDER4_OUT;

defparam L1_ADDER4.input_length = L1_ADDER4_IN_LENGTH;


defparam L1_ADDER4.output_length = L1_ADDER4_OUT_LENGTH;

bitadder L1_ADDER4
(
.in
(
{
L0_COMP_OUT[1*GFM_IN_LENGTH+3],
L0_COMP_OUT[2*GFM_IN_LENGTH+2],
L0_COMP_OUT[3*GFM_IN_LENGTH+1],
L0_COMP_OUT[4*GFM_IN_LENGTH+0],
L0_COMP_OUT[4*GFM_IN_LENGTH+7],
L0_COMP_OUT[5*GFM_IN_LENGTH+6],
L0_COMP_OUT[5*GFM_IN_LENGTH+7],
L0_COMP_OUT[6*GFM_IN_LENGTH+5],
L0_COMP_OUT[6*GFM_IN_LENGTH+6],
L0_COMP_OUT[7*GFM_IN_LENGTH+4],
L0_COMP_OUT[7*GFM_IN_LENGTH+5]

}
103

),
.out
(
{
L1_ADDER4_OUT
}
)
);

//assign LEDR = L1_ADDER4_OUT; // TP LVL1 ADDER4 RESULT

wire [L1_ADDER4_IN_LENGTH/2:0] L1_COMP4;

generate

genvar L1_COMP4_GEN_I;

for
(
L1_COMP4_GEN_I = 0;
(L1_COMP4_GEN_I*2+1) <= L1_ADDER4_IN_LENGTH;
L1_COMP4_GEN_I = L1_COMP4_GEN_I + 1
)
begin : L1_COMP4_GENBLOCK
assign L1_COMP4[ L1_COMP4_GEN_I ] = ( L1_ADDER4_OUT >=
L1_COMP4_GEN_I*2+1 )?1'b1:1'b0;
end

endgenerate

//assign LEDR = L1_COMP4; // TP LVL1 COMP4 RESULT

parameter L2_ADDER4_OUT_LENGTH = L1_ADDER4_OUT_LENGTH;

wire [L2_ADDER4_OUT_LENGTH-1:0] L2_ADDER4_OUT;

bitadder L2_ADDER4
(
.in(L1_COMP4),
.out(L2_ADDER4_OUT)
);

wire [L2_ADDER4_OUT_LENGTH-1:0] PARITY_SUB4 = {L2_ADDER4_OUT, 1'b0}-


L1_ADDER4_OUT;

assign GFM_OUT[4] = ( PARITY_SUB4 >= 1 )?1'b1:1'b0;

Sada: C5

//a1b4; a2b3; a3b2; a4b1; a5b0; a5b7; a6b6; a6b7; a7b5; a7b6;
//find: a([0-9])b([0-9]);
//repl: \t\t\tL0_COMP_OUT[\1*GFM_IN_LENGTH+\2],\n

parameter L1_ADDER5_IN_LENGTH = 9;
parameter L1_ADDER5_OUT_LENGTH = 4;

wire [L1_ADDER5_OUT_LENGTH-1:0] L1_ADDER5_OUT;

defparam L1_ADDER5.input_length = L1_ADDER5_IN_LENGTH;


defparam L1_ADDER5.output_length = L1_ADDER5_OUT_LENGTH;
104

bitadder L1_ADDER5
(
.in
(
{
L0_COMP_OUT[1*GFM_IN_LENGTH+4],
L0_COMP_OUT[2*GFM_IN_LENGTH+3],
L0_COMP_OUT[3*GFM_IN_LENGTH+2],
L0_COMP_OUT[4*GFM_IN_LENGTH+1],
L0_COMP_OUT[5*GFM_IN_LENGTH+0],
L0_COMP_OUT[5*GFM_IN_LENGTH+7],
L0_COMP_OUT[6*GFM_IN_LENGTH+6],
L0_COMP_OUT[6*GFM_IN_LENGTH+7],
L0_COMP_OUT[7*GFM_IN_LENGTH+5],
L0_COMP_OUT[7*GFM_IN_LENGTH+6]

}
),
.out
(
{
L1_ADDER5_OUT
}
)
);

//assign LEDR = L1_ADDER5_OUT; // TP LVL1 ADDER5 RESULT

wire [L1_ADDER5_IN_LENGTH/2:0] L1_COMP5;

generate

genvar L1_COMP5_GEN_I;

for
(
L1_COMP5_GEN_I = 0;
(L1_COMP5_GEN_I*2+1) <= L1_ADDER5_IN_LENGTH;
L1_COMP5_GEN_I = L1_COMP5_GEN_I + 1
)
begin : L1_COMP5_GENBLOCK
assign L1_COMP5[ L1_COMP5_GEN_I ] = ( L1_ADDER5_OUT >=
L1_COMP5_GEN_I*2+1 )?1'b1:1'b0;
end

endgenerate

//assign LEDR = L1_COMP5; // TP LVL1 COMP5 RESULT

parameter L2_ADDER5_OUT_LENGTH = L1_ADDER5_OUT_LENGTH;

wire [L2_ADDER5_OUT_LENGTH-1:0] L2_ADDER5_OUT;

bitadder L2_ADDER5
(
.in(L1_COMP5),
.out(L2_ADDER5_OUT)
);

wire [L2_ADDER5_OUT_LENGTH-1:0] PARITY_SUB5 = {L2_ADDER5_OUT, 1'b0}-


L1_ADDER5_OUT;
105

assign GFM_OUT[5] = ( PARITY_SUB5 >= 1 )?1'b1:1'b0;

Sada: C6

//a1b5;a2b4;a3b3;a4b2;a5b1;a6b0;a6b7;a7b6;a7b7;
//find: a([0-9])b([0-9]);
//repl: \t\t\tL0_COMP_OUT[\1*GFM_IN_LENGTH+\2],\n

parameter L1_ADDER6_IN_LENGTH = 9;
parameter L1_ADDER6_OUT_LENGTH = 4;

wire [L1_ADDER6_OUT_LENGTH-1:0] L1_ADDER6_OUT;

defparam L1_ADDER6.input_length = L1_ADDER6_IN_LENGTH;


defparam L1_ADDER6.output_length = L1_ADDER6_OUT_LENGTH;

bitadder L1_ADDER6
(
.in
(
{
L0_COMP_OUT[1*GFM_IN_LENGTH+5],
L0_COMP_OUT[2*GFM_IN_LENGTH+4],
L0_COMP_OUT[3*GFM_IN_LENGTH+3],
L0_COMP_OUT[4*GFM_IN_LENGTH+2],
L0_COMP_OUT[5*GFM_IN_LENGTH+1],
L0_COMP_OUT[6*GFM_IN_LENGTH+0],
L0_COMP_OUT[6*GFM_IN_LENGTH+7],
L0_COMP_OUT[7*GFM_IN_LENGTH+6],
L0_COMP_OUT[7*GFM_IN_LENGTH+7]

}
),
.out
(
{
L1_ADDER6_OUT
}
)
);

//assign LEDR = L1_ADDER6_OUT; // TP LVL1 ADDER6 RESULT

wire [L1_ADDER6_IN_LENGTH/2:0] L1_COMP6;

generate

genvar L1_COMP6_GEN_I;

for
(
L1_COMP6_GEN_I = 0;
(L1_COMP6_GEN_I*2+1) <= L1_ADDER6_IN_LENGTH;
L1_COMP6_GEN_I = L1_COMP6_GEN_I + 1
)
begin : L1_COMP6_GENBLOCK
assign L1_COMP6[ L1_COMP6_GEN_I ] = ( L1_ADDER6_OUT >=
L1_COMP6_GEN_I*2+1 )?1'b1:1'b0;
end
106

endgenerate

//assign LEDR = L1_COMP6; // TP LVL1 COMP6 RESULT

parameter L2_ADDER6_OUT_LENGTH = L1_ADDER6_OUT_LENGTH;

wire [L2_ADDER6_OUT_LENGTH-1:0] L2_ADDER6_OUT;

bitadder L2_ADDER6
(
.in(L1_COMP6),
.out(L2_ADDER6_OUT)
);

wire [L2_ADDER6_OUT_LENGTH-1:0] PARITY_SUB6 = {L2_ADDER6_OUT, 1'b0}-


L1_ADDER6_OUT;

assign GFM_OUT[6] = ( PARITY_SUB6 >= 1 )?1'b1:1'b0;

Sada: C7

//a0b7;a1b6;a2b5;a3b4;a4b3;a5b2;a6b1;a7b0;a7b7;
//find: a([0-9])b([0-9]);
//repl: \t\t\tL0_COMP_OUT[\1*GFM_IN_LENGTH+\2],\n

parameter L1_ADDER7_IN_LENGTH = 9;
parameter L1_ADDER7_OUT_LENGTH = 4;

wire [L1_ADDER7_OUT_LENGTH-1:0] L1_ADDER7_OUT;

defparam L1_ADDER7.input_length = L1_ADDER7_IN_LENGTH;


defparam L1_ADDER7.output_length = L1_ADDER7_OUT_LENGTH;

bitadder L1_ADDER7
(
.in
(
{
L0_COMP_OUT[0*GFM_IN_LENGTH+7],
L0_COMP_OUT[1*GFM_IN_LENGTH+6],
L0_COMP_OUT[2*GFM_IN_LENGTH+5],
L0_COMP_OUT[3*GFM_IN_LENGTH+4],
L0_COMP_OUT[4*GFM_IN_LENGTH+3],
L0_COMP_OUT[5*GFM_IN_LENGTH+2],
L0_COMP_OUT[6*GFM_IN_LENGTH+1],
L0_COMP_OUT[7*GFM_IN_LENGTH+0],
L0_COMP_OUT[7*GFM_IN_LENGTH+7]

}
),
.out
(
{
L1_ADDER7_OUT
}
)
);

//assign LEDR = L1_ADDER7_OUT; // TP LVL1 ADDER7 RESULT


107

wire [L1_ADDER7_IN_LENGTH/2:0] L1_COMP7;

generate

genvar L1_COMP7_GEN_I;

for
(
L1_COMP7_GEN_I = 0;
(L1_COMP7_GEN_I*2+1) <= L1_ADDER7_IN_LENGTH;
L1_COMP7_GEN_I = L1_COMP7_GEN_I + 1
)
begin : L1_COMP7_GENBLOCK
assign L1_COMP7[ L1_COMP7_GEN_I ] = ( L1_ADDER7_OUT >=
L1_COMP7_GEN_I*2+1 )?1'b1:1'b0;
end

endgenerate

//assign LEDR = L1_COMP7; // TP LVL1 COMP7 RESULT

parameter L2_ADDER7_OUT_LENGTH = L1_ADDER7_OUT_LENGTH;

wire [L2_ADDER7_OUT_LENGTH-1:0] L2_ADDER7_OUT;

bitadder L2_ADDER7
(
.in(L1_COMP7),
.out(L2_ADDER7_OUT)
);

wire [L2_ADDER7_OUT_LENGTH-1:0] PARITY_SUB7 = {L2_ADDER7_OUT, 1'b0}-


L1_ADDER7_OUT;

assign GFM_OUT[7] = ( PARITY_SUB7 >= 1 )?1'b1:1'b0;

module bitadder
(

input [input_length-1:0] in,


output [output_length-1:0] out

);

parameter input_length = 8;
parameter output_length = 4; // floor(log2(input_length)+1);

wire [output_length:0] sum [input_length:0];

genvar i;
generate for (i=0;i<input_length;i = i+1) begin : genblock
assign sum[i+1] = sum[i]+in[i];
end endgenerate

assign out = sum[input_length];


108

endmodule

TestBench_Paridade

#include "VNeuralParityCheck_TestBench.h"
#include "verilated.h"

//vcd traces
#include "verilated_vcd_c.h"

//cout
#include <iostream>

VNeuralParityCheck_TestBench *top; // Instantiation of module

unsigned int main_time = 0; // Current simulation time

double sc_time_stamp () { // Called by $time in Verilog


return main_time;
}

int main(int argc, char** argv) {


Verilated::commandArgs(argc, argv);
top = new VNeuralParityCheck_TestBench;

while (!Verilated::gotFinish()) {
top->clk = ~top->clk;
top->eval(); // Evaluate model
main_time++; // Time passes...
} //while

delete top;
exit(0);
}

/* verilator lint_off UNSIGNED */


/* verilator lint_off WIDTH */
module Test (

input reg clk

);

parameter bitlength = 13;


parameter deepness = 2**bitlength;

reg [3:0] clk_counter;


reg [bitlength:0] counter;
wire result;

initial begin

counter = 0;

end
109

//always@(posedge clk) begin


// clk_counter = clk_counter + 1;
//end

always@( posedge clk ) begin

if ( counter >= deepness )


$finish;
else
begin
$display("%d %d", counter, result);
counter = counter + 1;
end

end
defparam NPC0.IN_LENGTH = bitlength;
NeuralParityCheck NPC0 ( .IN(counter), .OUT(result) );

endmodule

TestBench Multiplicador ( )

#include "VGF8Multiplier_TestBench.h"
#include "verilated.h"

//vcd traces
#include "verilated_vcd_c.h"

//cout
#include <iostream>

VGF8Multiplier_TestBench *top; // Instantiation of module

unsigned int main_time = 0; // Current simulation time

double sc_time_stamp () { // Called by $time in Verilog


return main_time;
}

int main(int argc, char** argv) {


Verilated::commandArgs(argc, argv);
top = new VGF8Multiplier_TestBench;

while (!Verilated::gotFinish()) {
top->clk = ~top->clk;
top->eval(); // Evaluate model
main_time++; // Time passes...
} //while

delete top;
exit(0);
}
110

Validao Multiplicador ( )

/* verilator lint_off UNSIGNED */


/* verilator lint_off WIDTH */
module Test (

input reg clk

);

reg [31:0] main_counter;


reg [31:0] A;
reg [31:0] B;
wire [31:0] P;

initial begin

A = 0;
B = 0;

end

always@(posedge clk) begin

if ( A < 256 && B < 256 )


$display("%d %d %d", A, B, P);
else if ( B == 256 )
$finish;

A = A + 1;

if ( A == 256 )
begin
B = B+1;
A = 0;
end

end

GF8Multiplier GF8M0 ( .A(A), .B(B), .P(P) );

endmodule
111

Apndice II

Este apndice tem por objetivo descrever explicitamente os cdigo em Matlab


utilizados para validao e verificao do funcionamento dos mdulos de cada paridade
e do multiplicador em GF(28).

Verificao da Paridade:

clear; clc;

!make -j -f NeuralParityCheck_TestBench.mk clean


!make -j -f NeuralParityCheck_TestBench.mk
!make -j -f NeuralParityCheck_TestBench.mk test

NeuralParityCheck_Validator_GenerateReference
NeuralParityCheck_Validator_ImportRawResult

if (any((npc_result_vector-npc_reference_vector) == 0))
fprintf('Validation: Ok! All results are equal to reference.\n');
else
fprintf('Validation: Failed!\n');
end

gf8_diff_matrix = gf8_reference_matrix-gf8_result_matrix;
gf8_diff_matrix_offseted = gf8_diff_matrix-min(min(gf8_diff_matrix));
gf8_diff_matrix_scaled =
uint8(255/max(max(gf8_diff_matrix_offseted))*gf8_diff_matrix_offseted)
;
gf8_diff_matrix_spones = full(spones(gf8_diff_matrix));
gf8_diff_matrix_spones_scaled = uint8(255*gf8_diff_matrix_spones);

figure;

sbp1 = subplot(2,2,1);
imshow(uint8(gf8_reference_matrix));
title('GF8 Field Result From Matlab');
colorbar('peer', sbp1);

sbp2 = subplot(2,2,2);
imshow(uint8(gf8_result_matrix));
title('GF8 Field Result From Verilog (Using Verilator)');
colorbar('peer', sbp2);

sbp3 = subplot(2,2,3);
imshow(gf8_diff_matrix_scaled);
title('Difference Between Fields');
colorbar('peer', sbp3);

sbp4 = subplot(2,2,4);
imshow(gf8_diff_matrix_spones_scaled);
title('Elements Difference (Blue: Not Equal, Green: Equal)');
colorbar('peer', sbp4);
colormap('Winter');
112

Verificao do Multiplicador:
clear; clc;

!make -j -f GF8Multiplier_TestBench.mk clean


!make -j -f GF8Multiplier_TestBench.mk
!make -j -f GF8Multiplier_TestBench.mk test

GF8Multiplier_Validator_GenerateReference
GF8Multiplier_Validator_ImportRawResult

gf8_diff_matrix = gf8_reference_matrix-gf8_result_matrix;
gf8_diff_matrix_offseted = gf8_diff_matrix-min(min(gf8_diff_matrix));
gf8_diff_matrix_scaled =
uint8(255/max(max(gf8_diff_matrix_offseted))*gf8_diff_matrix_offseted)
;
gf8_diff_matrix_spones = full(spones(gf8_diff_matrix));
gf8_diff_matrix_spones_scaled = uint8(255*gf8_diff_matrix_spones);

figure;

sbp1 = subplot(2,2,1);
imshow(uint8(gf8_reference_matrix));
title('GF8 Field Result From Matlab');
colorbar('peer', sbp1);

sbp2 = subplot(2,2,2);
imshow(uint8(gf8_result_matrix));
title('GF8 Field Result From Verilog (Using Verilator)');
colorbar('peer', sbp2);

sbp3 = subplot(2,2,3);
imshow(gf8_diff_matrix_scaled);
title('Difference Between Fields');
colorbar('peer', sbp3);

sbp4 = subplot(2,2,4);
imshow(gf8_diff_matrix_spones_scaled);
title('Elements Difference (Blue: Not Equal, Green: Equal)');
colorbar('peer', sbp4);
colormap('Winter');
113

Apndice III

Neste apndice apresentamos os resultados fornecidos pela ferramenta de


descrio, sntese e verificao Quartus II em termos de nmero de portas utilizadas,
potncia, tenso e corrente e tempo mnimo de atraso de propagao necessrio para
realizar a operao de multiplicao em corpo finito.

PowerPlay Power Analyzer Status Successful - Mon Sep 21 19:28:27 2015


Quartus II 64-Bit Version 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition
Revision Name Project
Top-level Entity Name TopLevel
Family Cyclone II
Device EP2C35F672C6
Power Models Final
Total Thermal Power Dissipation 132.58 mW
Core Dynamic Thermal Power Dissipation 0.00 mW
Core Static Thermal Power Dissipation 80.85 mW
I/O Thermal Power Dissipation 51.73 mW
Power Estimation Confidence Low: user provided insufficient toggle rate data

Portas Utilizadas e Fan-Out


114

Corrente Total

Corrente em cada pino de entrada e sada

Corrente Total no conjunto de pinos


115

Tempo mnimo de atraso de propagao


116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131

Apndice IV

Neste apndice apresentamos os diferentes nveis de abstraes obtidos do RTL


Viewer da Figura 5.8 e da descrio de hardware em Verilog do Apndice I.
132
133
134

Vous aimerez peut-être aussi