Está en la página 1de 10

Implementación de filtros digitales tipo

FIR simétricos en un chip FPGA

Demian Rosas-Ham, Víctor-Gonzalo Rodríguez-Tapia

Área de Sistemas Digitales y Computadoras


Universidad Autónoma Metropolitana Unidad Azcapotzalco, UAM Azc.
e-mail:{ al99304664@alumnos.azc.uam.mx , vgrt@correo.azc.uam.mx }
Av. San Pablo No. 180, Col. Reynosa Tamaulipas C.P. 02200, México, D.F. Tel:
(52 55) 53189000

Resúmen. Los filtros digitales son dispositivos que intervienen en varios campos de la
electrónica, en consecuencia, se han desarrollado diferentes formas para su implementación.
La tendencia principal para la construcción de filtros digitales se dirige hacia la
implementación de los mismos en hardware sobre dispositivos de lógica programable como
los FPGAs. En este artículo se describen las etapas a seguir para implementar filtros
digitales de tipo FIR simétrico en un chip FPGA, mediante aritmética de punto fijo
utilizando VHDL, dichas etapas abarcan la especificación, cuantización, algoritmos de
comunicación y arquitectónicos, simulación, y finalmente la implementación y
caracterización de dichos filtros digitales.

Abstract. The digital filters are devices which work on many fields of electronics, in
consequence, different ways to their implementation have been developed. The main
tendency for the construction of digital filters is going to the implementation of themselves
in hardware over programable logic devices as FPGAs. In this paper are described the stages
to follow in order to implant digital filters of symmetric FIR type over a chip FPGA, by
means of fixed point arithmetic using VHDL, these stages include the specification,
quantization, communication and architectural algorithms, simulation and finally the
implementation and characterization of these digital filters.

Palabras clave: Filtro Digital, VHDL, FPGA

1. Introducción

Los filtros son sistemas que tienen la función de modificar el contenido espectral
de una señal, es decir, reciben una señal de entrada, bloquean o atenúan ciertos
componentes de frecuencia especificados previamente, y en su salida entregan una
señal similar a la original, menos aquellas componentes de frecuencia que fueron
bloqueadas.

El diseño de un filtro digital consiste en el cálculo de sus coeficientes, y la


cuantización de sus parámetros, con lo cual, dicho filtro tendrá una determinada
respuesta en frecuencia. Posteriormente se requiere de un sistema que haga uso de
los datos obtenidos del diseño. Este sistema puede ser implementado mediante
software, en un DSP (Digital Signal Processor) o mediante hardware en un FPGA
(Field-Programable Gate Array).
M. Arias, R. Cumplido, C. Feregrino (Eds.): International Conference on Reconfigurable Computing and FPGAs
ReConFig’04, Colima, México, September 20-21, 2004.
© Sociedad Mexicana de Ciencia de la Computación
152
Los filtros digitales implementados en FPGAs son extraordinariamente eficientes;
esto es porque el procesamiento de los datos de una señal se realiza de forma
paralela.

En el presente trabajo se aborda el diseño e implementación de filtros digitales tipo


FIR simétricos en un FPGA utilizando VHDL. El hardware del sistema se
implementó en un FPGA XC4010 de Xilinx, y se diseñó utilizando el software
Xilinx Foundation Series versión 4.1.

2. Estructura del proyecto

Este proyecto, ilustrado en la Fig. 1 consta de los siguientes bloques principales


que se describen a continuación:

Convertidor Analógico-Digital. Este bloque se encarga de la conversión A/D de


las señales que se aplican en sus entradas, es decir, toma muestras de dichas
señales y las envía en formato binario de signo complemento a 2 a la Interfaz de
Entrada.

Interfaz de Entrada. Este bloque se encarga de acoplar el Convertidor A/D con el


bloque de Filtrado Digital. Esta parte del diseño se conforma básicamente por un
registro de corrimiento, mismo que tiene una entrada serial de un bit y una salida
paralela de veinte bits, es controlado por las señales que se generarán en el bloque
de Lógica de Control, teniendo un estricto control sobre la sincronía, es decir, la
Interfaz de Entrada sincroniza la captura en serie desde el convertidor A/D y una
vez tomada la muestra completa, la envia hacia el filtro tan solo cuando éste está
listo para recibir, sin perder ninguna muestra, ni permitir sobreflujo. La
comunicación entre esta interfaz y el filtro digital se hace por medio de un
protocolo de handshaking.

Filtrado Digital. Este bloque recibe las muestras provenientes de la interfaz de


entrada, filtra dichas muestras por medio de multiplicaciones y sumas que emplean
aritmética serial distribuida (SDA) con la técnica de consulta de tablas (LUTs), y
por último envía las muestras filtradas a la interfaz de salida. La comunicación
entre las interfaces de entrada y salida y el filtro digital se hace por medio de un
protocolo de handshaking. Este sistema es el más robusto en términos de hardware,
y tiene que correr a velocidades mucho mayores que el resto del sistema (por lo
que la selección de la técnica de multiplicación es tal que nos permite poder
realizar el ciclo completo de filtrado en tiempos menores al del muestreo), de ahí la
necesidad de los protocolos de comunicación, ya que mientras procesa cada
muestra, no acepta ni entrega nada a las interfaces de entrada o salida.

Interfaz de Salida. Este bloque acopla el bloque de Filtrado Digital con el


Convertidor Digital-Analógico. Esta parte del diseño está conformada básicamente
por un registros de corrimiento que tiene una entrada paralela de veinte bits y una
salida serial de un bit. su funcionamiento es muy similar al de la interfaz de
entrada.
153
Convertidor Digital-Analógico. Este bloque se encarga de la conversión D/A de
las palabras binarias que recibe en sus entradas, es decir, que toma éstas palabras y
las convierte a sus niveles de voltaje correspondientes; mismos que en conjunto
forman las señales de salida que en un principio entraron al sistema, pero ya
filtradas.

Lógica de Control. Este bloque genera las señales que se encargan de controlar el
flujo de información entre los distintos bloques del diseño, evitando así que el
sistema se colapse, pierda sincronía entre algunos de sus bloques o que se pierda
alguna muestra de las señales que entren al sistema.

Los bloques que fueron diseñados para la realización de este proyecto son: la
Interfaz de Entrada, el Filtrado Digital, la Interfaz de Salida y la Lógica de Control.
mismos que fueron descritos en hardware a nivel de transferencia entre registros
(RTL), escritos en código VHDL, simulados con el software de Xilinx Foundation
Series, e implementados en el chip FPGA que se utilizó en este trabajo. El sistema
resultante es capaz de filtrar señales de audio esteroefónicas.

Fig. 1. Diagrama de bloques del sistema completo conformado


por un FPGA XC4010 y el chip CODEC AK4520A
154

3. Diseño, especificación, cuantización y simulación

El diseño de los filtros de referencia y los filtros cuantizados se realizó utilizando


el “Filter Design & Analisis Tool (FDATool)” y el "Fixed Point Block Set" del
software Matlab, de este proceso se obtuvo el conjunto de coeficientes cuantizados
para una estructura FIR simétrica de cada filtro implementado. En esta etapa se
puso especial atención en el dimensionamiento de los parámetros de los filtros, ya
que éstos se reflejan directamente en los recursos de hardware necesarios para su
implementación. Después de caracterizar y cuantizar los filtros digitales, se realizó
una simulación de su comportamiento en un ambiente semejante al de su
implantación, para estar seguros de que el filtro a implementar trabajara
satisfactoriamente (de otra manera nunca se estaría seguro de que lo hiciera)
mediante un sistema configurado en el software Simulink de Matlab.

4. Algoritmos aritméticos implementados en los filtros digitales

Las muestras provenientes del proceso de conversión analógico / digital están en


formato de signo-complemento a 2, es por eso que se emplearon algoritmos
aritméticos que permitieran el manejo de números con este tipo de formato. Así,
fueron implementados un algoritmo para realizar la suma de dos números
(tomando salvedades para el caso de sobreflujo y el signo de los resultados), y un
algoritmo para realizar 'n' multiplicaciones de 'j' muestras de 'k' bits por 'm'
coeficientes de 'l' bits de forma simultánea, y que obtiene el resultado de la suma
de los productos de las multiplicaciones realizadas.

Para implementar el algoritmo de la multiplicación de variables por constantes en


hardware se utilizaron bloques de memoria, en los cuales se almacenan en forma
de lista todas las posibles sumatorias de un determinado número de constantes;
dichas sumatorias son los resultados parciales que se obtienen conforme se van
realizando las 'n' multiplicaciones, siguiendo las reglas de multiplicación serial con
aritmética distribuida.

El filtro digital que se implementó en este proyecto es de orden 19, es decir, que
opera con 10 coeficientes cuantizados, lo que implica que realiza 10
multiplicaciones de forma simultánea, entonces se dividió a los 10 coeficientes
cuantizados en dos grupos de 5, de tal forma que primero se calcula la sumatoria de
productos correspondiente a cada grupo y luego se suman para obtener la
sumatoria de productos total. El beneficio que trae esta solución es que en vez de
requerir de una memoria de 1 Kbyte para hacer las 10 multiplicaciones, solo se
necesitan 2 memorias de 32 localidades cada una, con lo que se evitó un
desperdicio de recursos del FPGA.
155

5. Diseño de hardware del proyecto

El filtro digital diseñado en este proyecto (Fig. 2) está formado por un conjunto de
subsistemas llamados “componentes”, cada una de las cuales cumple una función
especifica dentro del manejo de las muestras digitalizadas de la señal que entra al
filtro. Las componentes que conforman el filtro se describen a continuación.

Dato.- Esta componente captura los 16 bits más significativos de las muestras
digitalizadas de provenientes desde la interfaz de entrada en forma paralela, es
decir, los 16 bits a la vez. Una vez que una muestra es capturada, ésta se envía a la
siguiente componente, en este caso “Registros”; dicho envío se hace de forma
serial, comenzando con el bit menos significativo y terminando con el más
significativo. Esta primera etapa del filtro se comunica con la interfaz de entrada
utilizando un protocolo de “handshaking”.

Registros.- Esta componente recibe las muestras provenientes de “Dato” y las va


almacenando en un banco de 20 registros de corrimiento de 16 bits cada uno, al
mismo tiempo que va sumando las muestras previamente almacenadas mediante
sumadores completos de un bit. Los resultados de la suma de cada uno de los bits
de las muestras almacenadas son los que forman las direcciones de los bloques de
memoria que conforman la etapa siguiente del filtro.

Mem_uno y Mem_dos.- Estas componentes son dos bloques de memoria ROM de


32 localidades de 8 bits cada una. En cada localidad de memoria se encuentra
grabado un número, que esencialmente es la sumatoria de algunos coeficientes
cuantizados del filtro digital, cada uno de estos números es determinado mediante
un algoritmo matemático.

Acumuladores.- Esta componente está formada por dos subsistemas iguales, cada
uno de los cuales se encarga de capturar y procesar los datos provenientes de uno
solo de los bloques de memoria de la etapa precedente. Cada subsistema está
formado por un registro de corrimiento de 19 bits y un sumador de 9 bits, los
cuales en conjunto acumulan las sumatorias de productos parciales para que
cuando se hayan procesado todos los bits de una muestra, se obtenga una sumatoria
de productos total.

Resultado.- Esta componente toma los dos resultados provenientes de


“Acumuladores” y los suma para obtener la sumatoria de productos total
correspondiente a la muestra que se procesó, que es precisamente ésta muestra ya
filtrada, misma que se envía en paralelo a la interfaz de salida. Esta componente se
comunica con la interfaz de salida por medio de un protocolo de “handshaking”.
156

Fig. 2 Diagrama de bloques del filtro digital escrito en VHDL e implementado en el FPGA.

5.1 Construcción de las pilas de registros de corrimiento con memorias RAM

La componente "Registros" (Fig 3),está formada por dos partes principales; la


primera es un conjunto de 20 registros de corrimiento de 16 bits cada uno, en los
cuales se almacenan las muestras de la señal que se va a filtrar, y la segunda es un
conjunto de 10 sumadores completos de 1 bit que se encargan de sumar bit a bit las
muestras que se almacenan dentro de los registros. Cada sumador tiene un flip-flop
que almacena el acarreo que se genera en cada suma, esto con el fin de poder
considerar dicho acarreo en la suma siguiente.

Cada registro está construido con un bloque de memoria RAM de 16 localidades


de 1 bit cada una (RAM16X1S); con lo que se optimizó el diseño en términos de
los recursos del FPGA utilizados, ya que de no haber empleado esta técnica, es
muy probable que no hubiera sido posible realizar la implementación del sistema
en el FPGA utilizado.

5.2 MEM_UNO y MEM_DOS

Tanto MEM_UNO como MEM_DOS se implementaron mediante la utilización de


la herramienta “Logiblox Module Generator” que forma parte del software “Xilinx
Foundation”, mismo que se utilizó para el diseño del hardware durante el
desarrollo de este proyecto.
157

Fig. 3 Banco de registros de corrimiento de 16 bits y sumadores


completos de 1 bit de la componente "Registros"

6. Implementación del sistema

El hardware del sistema fue desarrollado con lenguaje VHDL e implementado en


un FPGA XC4010 de Xilinx; los convertidores A/D y D/A forman parte del chip
AK4520A que viene incluido en la tarjeta XStend V1.3, misma que junto con la
tarjeta XS40 V1.3 de Xess fueron utilizadas para la realización de este proyecto.

Cabe mencionar que como se filtran las señales de audio de dos canales
independientes, se construyó un filtro por cada canal; mismos que pueden ser
idénticos, o que pueden tener características diferentes en cuanto a sus
especificaciones se refiere.

El estilo de escritura permite la parametrización del filtro, de manera que si se trata


de construir otro con características diferentes, pero semejante en lo esencial, el
hardware se adapta fácilmente a la nueva situación.

El sistema emplea un reloj externo a 25Mhz, a partir del cual generamos relojes
secundarios hacia las diferentes subsistemas. El subsistema filtro necesita correr a
esas velocidades para realizar filtraje en los rangos de audio.
158

7. Pruebas del sistema

El sistema implementado se sometió a prueba utilizando un analizador de espectros


MOD E4411B serie ESA-L marca Agilent, y como referencia se implementó un
sistema de caracterización conformado por un generador de funciones Mod.
CFG250 marca Tektronics, la tarjeta de sonido que viene incluída en la PC HP
Pavilion 7862 y un sistema configurado en el software "Simulink" incluido en el
software Matlab versión 6.5.0.1 8091 3a Release 13, con el objetivo de hacer una
serie de mediciones preliminares.

8. Resultados
Se obtuvo un sistema capaz de filtrar dos canales de audio simultáneamente. Los
recursos del hardware empleados fueron de alrededor de 12,000 gates de las 20,000
existentes en el FPGA. Los filtros implementados son de orden 19 y procesan
muestras de 16 bits (de los cuales 15 representan la mantisa y 1 el signo de cada
muestra), utilizando coeficientes de 8 bits (de los cuales 7 representan la mantisa y
1 el signo de cada coeficiente). Dichos filtros arrojaron los resultados esperados en
la implementación de filtros pasa-bajas y pasa-banda en el intervalo de frecuencias
de audio 20 Hz a 20 KHz, para el cual funcionan los convertidores A/D y D/A
utilizados. El hardware del sistema trabaja con una frecuencia de 25 MHz. En las
figuras 4, 5 y 6 se muestran los resultados de algunas de las mediciones realizadas.

Fig. 4 Respuesta en frecuencia de las interfaces de entrada y salida implementadas


en el FPGA sin una etapa de filtrado colocada entre ambas interfaces.
159

Fig. 5 Respuesta en frecuencia de un filtro pasa-bajas


con una frecuencia de corte de 12.5 KHz.

Fig. 6 Respuesta en frecuencia de un filtro pasa-banda con una frecuencia de corte


inferior de 8.5 KHz y una frecuencia de corte superior de 12.5 KHz.
160

9. Conclusiones

Se diseñó e implementó un sistema con dos filtros digitales tipo FIR simétricos de
orden 19 cada uno en un chip FPGA XC4010 de Xilinx, este sistema trabaja dentro
del intervalo de frecuencias de audio (20 Hz a 20 KHz).

Las pilas de registros de corrimiento fueron construidas utilizando componentes


de memoria RAM de 16 localidades de 1 bit cada una (RAM16X1S) con lo que se
optimizó el diseño en términos de los recursos de hardware del FPGA utilizado.

Las operaciones de multiplica y acumula se construyeron mediante la técnica de


tablas de consulta (LUTs), lo que permitió un ahorro enorme de recursos del
FPGA.

El diseño del hardware de los filtros se realizó con VHDL, de tal manera que el
orden de los filtros digitales puede ser incrementado solamente con modificar el
código que los describe.

La frecuencia de trabajo del núcleo del filtro resultó de alrededor de 25Mhz,


impuesta por los niveles de lógica resultante en el diseño, principalmente los
retardos debidos a las LUTs y al acumulador. Se pueden reducir estos tiempos si se
modifican dichas partes empleando estructuras en 'pipeline', por lo que el método
de diseño da para filtraje de señales que estén por encima del espectro de audio,
aún empleando este tipo de FPGAs, los cuales llegan a soportar diseños de
alrededor de 100 Mhz (lo que permitiría filtraje de señales cercanas a 100Khz)

Referencias

[1] Gerardo Mohad Aguilar "Consola digital de audio utilizando las tarjetas XS40 y
XStend" Universidad Autónoma Metropolitana..

[2] Francisco Torres V. "Implementación de Filtros Digitales en FPGA's" Universidad


Autónoma de Guadalajara.

[3] Mario Vera-Lizcano, Gustavo Bejarano, Jaime Velasco-Medina "Diseño de funciones


DSP usando VHDL y DSP's-FPGA's" Universidad del Valle, Grupo de Bioelectrónica y
Nanoelectrónica, Colombia

[4] Leland B. Jackson "Digital Filters and Signal Procesing" Third Edition Kluwer
Academic Publishers U.S.A. 1996

También podría gustarte