You are on page 1of 4

1180

IEEE LATIN AMERICA TRANSACTIONS, VOL. 10, NO. 1, JAN. 2012

VHDL Implementation of a Flexible and Synthesizable FFT Processor


I. S. Correa, L. C. Freitas, A. Klautau and J. C. W. A. Costa
Abstract This paper presents the current stage of development of a fast Fourier transform (FFT) processor in VHDL. This processor uses fixed-point as numeric representation, taking advantage of the facilities provided by the IEEE fixed point package. Its main advantages is that it is being developed as fully parameterizable processor, in a way that the number of bits, fixed point position and number of points computed in the FFT can be easily changed. It is also able to be used in several applications such as classification algorithms and communications systems. An open source prototype core has been developed and it can perform a complete FFT transform using radix-2 with decimation in time. Results and details of this implementation are presented. Keywords VHDL language, digital hardware design, FFT.

I. INTRODUO

RANSFORMADA de Fourier uma operao matemtica envolvendo exponenciais complexas que pode representar um sinal atravs de suas componentes de frequncia, permitindo a anlise de um sinal do domnio do tempo no domnio da frequncia [1]. A transformada de Fourier base de muitos estudos cientficos, como em Fsica no estudo do movimento de ondas eletromagnticas, com aplicaes em telecomunicaes, reconhecimento de voz e outros. Quando a anlise de um sinal no domnio da frequncia realizada utilizando um computador, a ferramenta para anlise de Fourier mais popular a chamada Discrete Fourier Transform (DFT) [1], que basicamente corresponde a multiplicar o sinal a ser analisado por uma matriz cujos elementos so nmeros complexos. Devido complexidade computacional encontrada nessas multiplicaes, em [3] foi proposto um algoritmo eficiente para o clculo da DFT. A partir desse algoritmo, vrios outros foram propostos e atualmente eles compem uma famlia de algoritmos chamada Fast Fourier Transform (FFT), a qual permite a execuo rpida e eficiente da DFT em computador. Para aplicaes que usam FFT e requerem resposta em tempo real a melhor alternativa a implementao de algoritmos de FFT em hardware dedicado (e no em um computador), por exemplo utilizando dispositivos lgicos programveis e linguagens de descrio de hardware. Esse
I. S. Correa, Federal University of Par (UFPA), Belm, Par, Brazil, ilan@ufpa.br L. C. Freitas, Federal University of Par (UFPA), Belm, Par, Brazil, liliancf@ufpa.br A. Klautau, Federal University of Par (UFPA), Belm, Par, Brazil, aldebaro@ufpa.br J. C. W. A. Costa, Federal University of Par (UFPA), Belm, Par, Brazil , jweyl@ufpa.br


tipo de implementao apresenta menor tempo de execuo quando comparado com as implementaes utilizando linguagens de programao tradicionais, pois so projetadas focando a execuo em hardware dedicado, se beneficiando do potencial de paralelizao do projeto de hardware. Dessa forma, este artigo apresenta o projeto de um processador de FFT utilizando a linguagem de descrio de hardware chamada VHSIC Hardware Description Language (VHDL) [4]. Tal linguagem projetada para tratar nativamente caractersticas inerentes dos circuitos lgicos que compem o hardware. O processador de FFT desenvolvido neste artigo utiliza ponto fixo como representao numrica dos dados, e foi projetado para ser flexvel o suficiente para permitir que parmetros como nmero de bits e nmero de pontos da FFT possam ser facilmente alterados, possibilitando que o mesmo processador de FFT possa ser utilizado em uma variedade de aplicaes. A FFT composta por vrias operaes elementares realizadas com todas as amostras de um sinal. Essa operao chamada butterfly e composta por multiplicaes e somas. A butterfly normalmente realizada com 2 ou 4 amostras de um sinal por vez, e so chamadas radix-2 [6] ou radix-4 [7], respectivamente. Nesse artigo foi implementado o algoritmo FFT com radix-2, devido sua simplicidade e seu baixo uso de recursos. Na literatura h muitos artigos descrevendo implementaes de FFT como em [2], [6] e [7], porm no disponibilizado o cdigo fonte dessas implementaes. Portanto uma das contribuies deste artigo disponibilizar uma implementao flexvel de FFT, que possa ser usada em grande variedade de aplicaes, bem como para fins de ensino. Este artigo est organizado da seguinte forma: a Seo II explica detalhes de como os dados so tratados e seu fluxo dentro do processador de FFT, a organizao de seus blocos internos e seus pinos de entrada e sada. A Seo III explica algumas questes de projeto relacionadas ao bloco principal do projeto. A Seo IV mostra alguns resultados obtidos a partir da implementao. A Seo V mostra resultados de desempenho. A Seo VI apresenta algumas concluses e trabalhos futuros. II. IMPLEMENTAO DO PROCESSADOR DE FFT O algoritmo usado na implementao em VHDL o chamado FFT com radix-2 e decimao no tempo [1]. O termo decimao no tempo indica que as amostras so ordenadas antes do clculo da FFT (ou seja, quando as amostras ainda esto no domnio do tempo). O algoritmo de ordenao, neste

SOUSA CORREA et al.: VHDL IMPLEMENTATION OF

1181

caso, segue a ordem reversa dos bits da posio de memria das amostras de entrada. Por exemplo, os bits da posio de memria 001, so invertidos, dessa forma ser lida a amostra da posio de memria 100. J o termo radix-2 indica que a DFT foi decomposta em duas operaes que so realizadas paralelamente, as butterflies da FFT sero realizadas usando duas amostras de cada vez. Decimao no tempo e radix-2 so termos resultantes das manipulaes matemticas que transformam a DFT em FFT, primeiramente proposto em [3]. O processador de FFT utiliza ponto fixo como representao numrica [8]. O nmero de bits reservado para a parte inteira e para a parte decimal so parmetros passados antes da compilao. Para usar esse tipo de representao numrica a implementao do processador de FFT usa o pacote VHDL de ponto fixo chamado IEEE fixed point [9], que disponibiliza ferramentas para trabalhar com ponto fixo, bem como operaes matemticas e rotinas de converso para outras representaes numricas. O nmero de pontos de FFT que o processador desenvolvido utiliza pode ser especificado antes da compilao. No atual estgio de desenvolvimento desta implementao este nmero deve ser uma potncia de 2 e menor que 512. Essa limitao existe porque necessrio ter previamente armazenado o conjunto de exponenciais complexas no cdigo da FFT. Atualmente esto armazenadas exponenciais complexas para at 512 pontos. Vale destacar que essa limitao pode ser facilmente resolvida, desenvolvendo um programa que automaticamente gere um conjunto de exponenciais para um nmero maior de pontos. A descrio do processador de FFT em VHDL adotou a organizao dos componentes internos, mostrado na Fig. 1. As prximas subsees descrevem as funes de cada um desses componentes.

processador quando iniciar sua operao. x RE_DATA e IM_DATA: um conjunto de pinos de entrada que representam a parte real e imaginria dos dados de entrada. O nmero de pinos correspondente ao nmero de bits dos dados e pode ser alterado antes da compilao. Antes de iniciar a transferncia dos dados h um perodo de inicializao dos componentes internos. Aps esse perodo, uma amostra lida e armazenada na memria interna do processador a cada ciclo de clock. x RE_OUT e IM_OUT: um conjunto de pinos de sada por onde a parte real e imaginria dos dados resultantes so transferidos. Os dados da memria interna do processador so transferidos a cada ciclo de clock. B. Blocos internos Esses blocos foram projetados como mquinas de estados, pois essa tcnica permite boa previsibilidade das questes encontradas no projeto hardware [10]. x INPUT: o bloco responsvel por armazenar os dados de entrada na memria interna. Ao incio da operao o bloco ARBITER sinaliza para esse bloco iniciar sua operao. Ele recebe os dados e gera o endereo correto para armazenar na memria, ou seja, esse bloco realiza a decimao no tempo. Futuramente esse bloco ser implementado com um protocolo, para melhorar a portabilidade do projeto. x BUTTERFLY: esse bloco o ncleo do processador, ele capaz de fazer transformadas de qualquer tamanho. Mais detalhes sobre este bloco so dados na Seo III. x OUTPUT: aps a execuo do algoritmo de FFT esse bloco inicia o processo de transferncia dos dados resultantes, transferindo um dado por ciclo de clock. x MEMORY: composto por dois blocos de armazenamento, um para a parte real e outro para a parte imaginria dos dados. Ele foi implementado de forma que a ferramenta de sntese mapeie o cdigo automaticamente para a memria interna do FPGA. Para isso, utilizou-se a ferramenta de sntese chamada Altera Quartus II [11]. x ARBITER: somente um bloco deve estar em operao de cada vez. Dessa forma, esse bloco responsvel por gerenciar os outros blocos com sinais de incio, recebendo seus sinais de trmino e fazendo o interfaceamento com a memria. Por exemplo, quando o pino START est em nvel lgico alto o ARBITER sinaliza para o INPUT iniciar sua operao, e o ARBITER espera o fim da operao do INPUT. O mesmo feito para o bloco BUTTERFLY e OUTPUT. Durante o tempo que o ARBITER est esperando o trmino da operao de um determinado bloco, somente os sinais de controle daquele bloco sero repassados para a memria, desse modo somente um bloco est em operao e somente ele pode acessar a memria.

Figura 1. Organizao interna do processador de FFT.

A. Sinais de entrada e sada x CLK: o pino de entrada que serve como sincronizador, ou base de tempo para o processador. x RST: um pino de entrada que reinicia a operao a qualquer momento. Quando este pino est em nvel alto (nvel lgico 1) os registradores so assumem seus valores iniciais e as mquinas de estados que compem os componentes vo para seus estados iniciais. x START: um pino de entrada usado para sinalizar ao

1182

IEEE LATIN AMERICA TRANSACTIONS, VOL. 10, NO. 1, JAN. 2012

III. MAIS SOBRE AS OPERAES INTERNAS NO BLOCO BUTTERFLY A implementao usando FFT com radix-2 e decimao no tempo proposta neste artigo resulta no fluxo de dados mostrado na Fig. 2, na qual possvel observar uma FFT de oito pontos, sendo que as setas indicam somas e os termos ao longo das setas so multiplicaes. Wxy so exponenciais complexas na forma e-j2y/x, chamadas de twiddle factor. A decimao no tempo tambm mostrada atravs da realizao das operaes nos dados de entrada seguindo a ordem reversa dos bits.

256 e 512 pontos, com tamanho de dados de 16 bits, sendo 8 bits para a parte inteira e 8 bits para a parte decimal. Em ambos os casos utilizou-se o conjunto de twiddle factors, especfico para 512 pontos. Observou-se que o uso de recursos permanece quase o mesmo para ambos. Isso acontece porque o bloco BUTTERFLY continua o mesmo (executa o mesmo algoritmo), a diferena que utiliza mais bits para controlar as operaes, pois haver mais estgios e mais iteraes na execuo. O nico bloco que significativamente alterado o MEMORY que dimensionado para armazenar 256 e 512 dados de 16 bits. A Tabela 1 mostra a porcentagem do uso de recursos das verses para 256 e 512 pontos, usando o mesmo conjunto de twiddle factor para ambos.
TABELA 1 RESULTADOS DE SNTESE USANDO O FPGA CYCLONE II EP2C70F896I8 PARA 256 E 512 PONTOS.

V. DESEMPENHO
Figura 2. Uma FFT de 8 pontos usando radix-2 e decimao no tempo.

O algoritmo foi descrito em VHDL como uma mquina de estados. Dessa forma possvel ter o algoritmo funcional com as particularidades dos projetos de hardware. Por exemplo, ao fim de uma operao o resultado armazenado em um registrador. Esse resultado estar disponvel depois da prxima subida (ou descida) do clock. Esse comportamento pode ser modelado como estados de uma mquina de estados, onde em um estado uma operao feita e o resultado preparado para ser armazenado. Na subida do clock o valor efetivamente armazenado e o estado alterado, ento no prximo estado o valor pode ser usado. O algoritmo FFT composto por vrios estgios e em cada um desses estgios as operaes de butterflies so realizadas. O nmero de estgio o logaritmo base 2 do nmero de pontos da FFT. O bloco BUTTERFLY independente dos outros e pode ser adicionado em outro sistema e trabalhar como bloco interno. Por exemplo, em um sistema onde h um elemento que armazena dados na memria, o endereo desses dados passado para o bloco BUTTERLFY que realiza sua operao e sinaliza ao trmino de sua operao, assim os dados resultantes ficam disponveis na memria. IV. RESULTADOS DE SNTESE O processador de FFT foi sintetizado para o FPGA Cyclone II EP2C70F896I8, usando o software Altera Quartus II. Nesta Seo os resultados so mostrados para o clculo de FFT de

Atravs da ferramenta de sntese Altera Quartus II foi possvel obter informaes para calcular a frequncia mxima de clock que o processador de FFT pode operar. A partir da sntese para o FPGA Cyclone II EP2C70F986I8 foi calculada a frequncia mxima de operao de 43.072 MHz. A partir dessa mxima frequncia de clock, simulaes foram realizadas para verificar o tempo necessrio para o clculo de uma FFT. Ao fim da simulao foi obtido o tempo total, para o processador de FFT completo e somente para o bloco BUTTERFLY, que foram de 0.7 ms e 0.6 ms, respectivamente. A Tabela 2 apresenta um resumo dos dados mostrados nesta Seo.
TABELA 2 ANLISE DE DESEMPENHO

VI. CONCLUSES Este artigo apresentou a implementao, os resultados de sntese e detalhes a respeito das operaes internas de um processador de FFT de propsito geral. Esse processador de FFT foi desenvolvido para compor um algoritmo de classificao. Porm devido a sua vasta

SOUSA CORREA et al.: VHDL IMPLEMENTATION OF

1183

aplicabilidade, o mesmo foi desenvolvido para ser genrico e altamente parametrizvel. Trata-se de um cdigo open source que pode ser utilizado em muitas aplicaes alm de classificao, por exemplo, o mesmo cdigo tem sido usado, pelos autores, em um prottipo de um modem DSL gigabit. Melhorias nesta implementao j esto sendo realizadas, objetivando diminuir o tempo de execuo. Dentre estas, destaca-se o uso de outras arquiteturas de butterfly mais eficientes, como a radix-4. Alm disso, o nvel de paralelizao pode ser aumentado, atravs do uso de um nmero maior de butterflies (a atual arquitetura utiliza apenas uma butterfly). Dessa forma, uma futura implementao poderia ter como parmetro de configurao o nvel de paralelizao, o que afetaria diretamente o uso de recursos e tempo de clculo da FFT. AGRADECIMENTOS Este trabalho contou com o apoio financeiro do Conselho Nacional de Desenvolvimento Cientfico e Tecnolgico (CNPq), Brasil. REFERNCIAS
Alan V. Oppenheim, Ronald W. Schafer and John R. Buck, DiscreteTime Signal Processing, Prentice Hal, second edition, 1999. [2] Mandeep Singh Balwinder Singh Pawan Verma, Harpreet Kaur, VHDL implementation of FFT/IFFT blocks for OFDM, International Conference on Advances in Recent Technologies in Communication and Computing, 2009. [3] James W. Cooley and John W. Tukey, An algorithm for the machine calculation of complex fourier series, Math Comput., pp. 297 301, 1965. [4] Volnei A. Pedroni, Circuit Design with VDHL, MIT Press, ISBN 0262-16224-5, 2004. [5] T. Starr, M. Sorbara, J. M. Cioffi and P. J. Silveramn, DSL Advances, Prentice Hall, 2003. [6] Rd. J.; Ordaz-Moreno A.; Vite-Frias, J. A.; Romero-Troncoso, VHDL core for 1024-point radix-4 fft computation, International Conference on Reconfigurable Computing and FPGAs 2005, ReConFig 2005, pp. 4 24, 9 2005. [7] A. lvarez-Marquina E. Martinez de Icaya C. Gonzalz- Consejero, V. Rodellar and P. Gonzalez-Vilda, A portable hardware design of a FFT algorithm, Latin American Applied Research, 2007. [8] Randy Yates, Fixed-point arithmetic: An introduction, 2009, http://www.digitalsignallabs.com. [9] David Bishop, Fixed point package users guide. [10] Frank Vahid, Digital Design with RTL Design, VDHL and Verilog, John Wiley and Sons, second edition, 2011. [11] Altera, Altera Corporation, 2011, http://www.altera.com. Ilan Sousa Correa was born in Par, Brazil, on July 25, 1990. He is a student of Computer Engineering at Federal University of Par (UFPA). He works at the Laboratory of Applied Electromagnetism (LEA) and Laboratory of Sensors and Embedded Systems (LASSE) since 2009, where he has been developing projects in wireless sensors networks and digital systems design with emphasis on FPGA. Lilian Coelho de Freitas received the BSc degree in Computer Engineering from UFPA (Federal University of Par) - Brazil in March 2007. She received the MSc. degree in Electrical Engineering from UFPA. Nowadays she is doing a doctorate in UFPA. Since 2003, she has been developing research in the wireless sensor network area for environmental and industrial monitoring application. Her research interests include wireless sensor networks and cognitive radio. [1]

Aldebaro Barreto da Rocha Klautau Jnior received the Ph.D. degree from the University of California, San Diego, in 2003. In 1995, he was a Faculty Member with the Federal University of Santa Catarina, Florianpolis, Brazil. Since 1996, he has been with the Federal University of Par, Belm, Brazil, where he is affiliated with the Computer Science. He also directs the Signal Processing Laboratory and the Embedded Systems Laboratory. His research interests include machine learning for signal processing, with applications including speech recognition, DSL, power systems and software/cognitive radio, and the algorithm to its implementation on eld-programmable gate array or application-specic integrated circuits. Joo Crisstomo Weyl Albuquerque Costa. He received the title Engenheiro Eletricista - Eletrnico, from the Federal University of Par (UFPA), Brazil, in 1981, the Geophysics Pos Graduated, from the UFPA, Brazil, in 1983, the M. Sc. Degree (with thesis) in Electrical Engineering (telecommunication) in 1989 from PUC-RJ, Brazil, and received the Doctor in Electric Engineering degree in Electric Engineering in 1994, from the State University of Campinas, So Paulo, Brazil. Since 1994 he is with the Federal University of Par (UFPA), Brazil, Department of Electrical and Computer Engineering. Presently, his research areas are the modeling of devices and systems for optical and mobile communications, including access networks. He is aresearcher of the Brazilian Research Funding Agency (CNPq) since 1994.

You might also like