You are on page 1of 16

Relat´orio sobre o Hardware para Fast Fourier Transform

Matheus Leor Lopes de Lima Marrocos

Summary

  • 1 Introdu¸c˜ao

1

Implementa¸c˜ao no MATLAB

2

  • 2 Fast Fourier Transform em System Verilog

4

  • 3 Controlador de Entrada/Sa´ıda

7

  • 4 Hardware Completo

10

  • 5 Testes

12

  • 6 Coment´arios adicionais e Cronologia

15

  • 7 Fontes

15

  • 8 Anexos

16

  • 1 Introdu¸c˜ao

Este documento explica o processo de desenvolvimento, da concep¸c˜ao `a imple- menta¸c˜ao, de um hardware que possui um mecanismo de controle de entrada (input valid), recebe 16 entradas externas (4 a cada clock), executa uma FFT com raiz 2, fica com sa´ıda (output) v´alida por um clock. Al´em disso, o proced- imento aqui adotado pode ser generalizado para ”n” entradas, o que tamb´em ser´a explicado. O esquema do hardware desenvolvido ´e mostrado abaixo, na Figura 1.

1

Figure 1: Hardware Desenvolvido Implementa¸c˜ao no MATLAB Para melhor pensar como realizar o hardware, visualizando como

Figure 1: Hardware Desenvolvido

Implementa¸c˜ao no MATLAB

Para melhor pensar como realizar o hardware, visualizando como este deve- ria funcionar efetivamente, foi desenvolvido um estudo sobre FFT (conforme o anexo evidencia) e, a partir do aprendizado ao se fazer os c´alculos manualmente, elaborou-se um algoritmo (em est´agio prim´ario) e testou sua funcionalidade no software MATLAB, comparando os resultados obtidos aos resultados corretos (adquiridos por meio da fun¸c˜ao embutida, ”fft”, do MATLAB). O c´odigo, que evidencia o algoritmo desenvolvido e praticado manualmente ´e mostrado abaixo, nas figuras 2 e 3, para a FFT de 4 e 8 sa´ıdas. O algoritmo para 16 sa´ıdas ´e o mesmo, s´o muda a quantidade de termos e ser´a evidenciado na explica¸c˜ao do hardware. Nota-se que, nesse primeiro momento, n˜ao havia dom´ınio da ferramenta e por isso os coeficientes foram colocados manualmente para cada caso, o que ser´a corrigido no c´odigo do hardware (em system verilog).

2

Figure 2: Algoritmo para FFT de 4 Sa´ıdas Figure 3: Algoritmo para FFT de 8 Sa´ıdas

Figure 2: Algoritmo para FFT de 4 Sa´ıdas

Figure 2: Algoritmo para FFT de 4 Sa´ıdas Figure 3: Algoritmo para FFT de 8 Sa´ıdas

Figure 3: Algoritmo para FFT de 8 Sa´ıdas

3

  • 2 Fast Fourier Transform em System Verilog

Com o pro´osito de se construir a FFT de 16 sa´ıdas, foi testado o algoritmo feito no MATLAB para 2 sa´ıdas, 4, 8, 16. Os dois primeiros e o ultimo ´ hardware ser˜ao mostrados nesta se¸c˜ao.

F.F.T. de 2 componentes

Primeiro foi observado que na FFT de 2 componentes h´a um entrela¸camento (ilustrado no anexo) e isso foi representado no c´odigo que ´e demonstrado abaixo. Tamb´em se pensou na entrada complexa, que foi representada como um array, onde o primeiro componente era a parte real e o segundo a parte imagin´aria.

2 Fast Fourier Transform em System Verilog Com o pro´osito de se construir a FFT de

Figure 4: Hardware Desenvolvido para FFT de 2 Sa´ıdas

F.F.T. de 4 componentes

Neste segundo momento, foi percebido que a l´ogica da FFT em hardware ´e:

1 o Divide xn em componentes pares e ´ımpares, passa para o hardware que ´e metade do que se est´a trabalhando, gerando os termos que se quer trabalhar (neste exemplo: X20, X21, X22, X23)

2

o

3

o

Calcula-se a constante conforme a divis˜ao do c´ırculo limitado em j/-j e

1/-1.

Percebe-se que o primeiro termo (por exemplo, X40) ´e igual ao termo que ´e metade do seu ´ındice (nesse caso, X20) somado ao termo que ´e metade do seu ´ındice + metade do seu ´ındice/10 (nesse caso, X20+2 = X22).

4 o Percebe que metade do´ındice (2, se aqui o´ındice for representado por 4) de termos ser´a dado pelo termo inicial (explicado em 3) + 1 nos ´ındices

4

de cada componente. A outra metade come¸car´a do primeiro ´ındice (0) + o n´umero de termos passados (neste caso, 0+2 = 2, come¸ca em X42) e possuir´a o valor dado pelas mesmas equa¸c˜oes da outra metade, com exce¸c˜ao de que o ”+” do meio vira -

Esse algoritmo ´e melhor visualizado na descri¸c˜ao de hardware abaixo.

de cada componente. A outra metade come¸car´a do primeiro ´ındice (0) + o n´umero de termos

Figure 5: Hardware Desenvolvido para FFT de 4 Sa´ıdas

F.F.T. de 16 componentes

Usando a l´ogica explicada para a FFT de 4 componentes, foi feita a FFT de 8 componentes e posteriormente a FFT de 16 componentes. A primeira imagem abaixo ilustra a chamada da FFT anterior (FFT de 8) com os componentes divididos em pares e ´ımpares.

5

Figure 6: Chamada da FFT de 8 Sa´ıdas pela FFT de 16 Sa´ıdas A pr´oxima imagem

Figure 6: Chamada da FFT de 8 Sa´ıdas pela FFT de 16 Sa´ıdas

A pr´oxima imagem mostra as constantes, obtidas a partir do c´ırculo trigonom´etrico com 16 divis˜oes.

Figure 6: Chamada da FFT de 8 Sa´ıdas pela FFT de 16 Sa´ıdas A pr´oxima imagem

Figure 7: Constantes da FFT de 16 Sa´ıdas

6

A pr´oxima imagem mostra o terceiro passo descrito para a FFT de 4 sa´ıdas

aplicado `a FFT de 16 sa´ıdas.

A pr´oxima imagem mostra o terceiro passo descrito para a FFT de 4 sa´ıdas aplicado `a

Figure 8: Passo 3 da resolu¸c˜ao da FFT de 16 Sa´ıdas

A pr´oxima imagem mostra o quarto passo descrito para a FFT de 4 sa´ıdas

aplicado `a FFT de 16 sa´ıdas.

A pr´oxima imagem mostra o terceiro passo descrito para a FFT de 4 sa´ıdas aplicado `a

Figure 9: Passo 4 da resolu¸c˜ao da FFT de 16 Sa´ıdas

  • 3 Controlador de Entrada/Sa´ıda

´

Por ultimo,

foi desenvolvido o hardware abaixo, que seria integrado ao hardware

final. Basicamente ´e um hardware que recebe 16 entradas, de 4 em 4, envia essas

7

entradas junto ao sinal de output v´alido e tem controle de input v´alido.

entradas junto ao sinal de output v´alido e tem controle de input v´alido. Figure 10: Hardware

Figure 10: Hardware de Controle de Entrada e Sa´ıda V´alidas

Para se testar esse hardware passo a passo, foi usada a fun¸c˜ao ”monitor”,

que tem sintaxe como se mostra a seguir.

entradas junto ao sinal de output v´alido e tem controle de input v´alido. Figure 10: Hardware

Figure 11: Mecanismo Usado para Testar o Hardware

O c´odigo da implementa¸c˜ao completa deste hardware em system verilog est´a

demonstrado abaixo.

8

Figure 12: Hardware de Controle de Entrada e Sa´ıda V´alidas

9

  • 4 Hardware Completo

O hardware completo, mostrado na primeira se¸c˜ao, ´e simplesmente a uni˜ao do

hardware que faz FFT com 16 sa´ıdas com o hardware que controla as entradas

e sa´ıdas v´alidas.

Suas entradas e sa´ıdas est˜ao ilustradas abaixo.

4 Hardware Completo O hardware completo, mostrado na primeira se¸c˜ao, ´e simplesmente a uni˜ao do hardware

Figure 13: Entradas e Sa´ıdas do Hardware Completo

Na imagem seguinte s˜ao mostrados os componentes adicionais para se fazer

conex˜oes (entre o m´odulo de controle e o m´odulo de c´alculo).

10

Figure 14: Componentes de Liga¸c˜ao do Hardware Completo Ent˜ao, mostra-se a chamada dos m´odulos. Figure 15:

Figure 14: Componentes de Liga¸c˜ao do Hardware Completo

Ent˜ao, mostra-se a chamada dos m´odulos.

Figure 14: Componentes de Liga¸c˜ao do Hardware Completo Ent˜ao, mostra-se a chamada dos m´odulos. Figure 15:

Figure 15: Chamada de M´odulos no M´odulo Completo

11

Finalmente, ´e mostrado o que o m´odulo completo faz, ou seja, espera o

output ser v´alido para calcular a nova FFT, ficando com input n˜ao v´alido nesse

momento, e, caso isso n˜ao ocorra, mant´em o valor que foi calculado enquanto

esse c´alculo novo n˜ao for requisitado novamente.

Finalmente, ´e mostrado o que o m´odulo completo faz, ou seja, espera o output ser v´alido

Figure 16: Funcionamento do M´odulo Completo

5

Testes

Os testes para o funcionamento geral (incluindo o controle de output e input)

est˜ao em anexo. Aqui ser´a mostrado apenas a compara¸c˜ao dos resultos no

hardware com os resultados no MATLAB para dois conjuntos de valores.

Teste 1

Valores de x = [0, 1*j, 2*j, 3*j, 4*j, 5*j, 6*j, 7*j, 8*j, 9*j, 10*j, 11*j, 12*j, 13*j,

14*j, 15*j];

Resultados obtidos no hardware:

12

Figure 17: Resultados Obtidos em Hardware para o Teste 1 Resultados obtidos no Matlab: Figure 18:

Figure 17: Resultados Obtidos em Hardware para o Teste 1

Resultados obtidos no Matlab:

Figure 17: Resultados Obtidos em Hardware para o Teste 1 Resultados obtidos no Matlab: Figure 18:

Figure 18: Resultados Obtidos no MATLAB para o Teste 1

Comparando, percebe-se que os resultados foram praticamente iguais, a

menos de algumas aproxima¸c˜oes.

13

Teste 2

Valores de x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];

Resultados obtidos no hardware:

Teste 2 Valores de x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,

Figure 19: Resultados Obtidos em Hardware para o Teste 2

Resultados obtidos no Matlab:

Teste 2 Valores de x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,

Figure 20: Resultados Obtidos no MATLAB para o Teste 2

14

Comparando, percebe-se que os resultados foram praticamente iguais, a

menos de algumas aproxima¸c˜oes.

  • 6 Coment´arios adicionais e Cronologia

Pode-se expandir facilmente a FFT de 16 para 128 usando o algoritmo explicado

para a FFT de 4 sa´ıdas. Pode-se converter esse algoritmo em uma estrutura

parametrizada em hardware ou usar C++ (ou outra linguagem) e criar um

gerador de c´odigo.

O trabalho (descrito neste relat´orio) foi feito conforme o flowchart abaixo

demonstra.

Comparando, percebe-se que os resultados foram praticamente iguais, a menos de algumas aproxima¸c˜oes. 6 Coment´arios adicionais

Figure 21: M´etodo de A¸c˜ao para Resolver o Problema

  • 7 Fontes

A teoria sobre FFT foi aprendida no dia 11 de Fevereiro de 2018 no endere¸co:

https://www.youtube.com/watch?v=BXghmsH-mKYlist=PL4K9r9dYCOoqmykdiyCq2jyAb0zwO0p-

b

15

A utiliza¸c˜ao de ”monitor” foi aprendida no dia 12 de Fevereiro no endere¸co:

http://www.asic-world.com/verilog/verilog o ne d ay4.html

O restante utilizado neste relat´orio foi aprendido nas aulas do professor Mar-

cos Ricardo Alcˆantara Morais, professor da Universidade Federal de Campina

Grande, e na aula de Felipe Gon¸calves Assis.

8

Anexos

Nas pr´oximas p´aginas est˜ao o texto com a descri¸c˜ao do hardware (os m´odulos)

e a descri¸c˜ao do m´odulo top que foi usado para testar o sistema.

Tamb´em s˜ao mostrados os resultados obtidos para esse teste, assim como os

desenhos feitos enquanto se estudava o problema e os c´odigos do MATLAB.

16