Implementación eficiente de controladores difusos
en FPGA basados en síntesis de alto nivel
Efficient Fuzzy Controllers for FPGA using High Level Synthesis
Luca Sarramone
#1
, Martín Vázquez
*2
, Lucas Leiva
*3
#
Departamento de computación y sistemas, UNICEN
Tandil, Bs. As., Argentina
1
lsarramone@intia.exa.unicen.edu.ar
*
Laboratorio Sistemas Embebidos, INTIA, UNICEN
Tandil, Bs. As., Argentina
Facultad de Ingeniería - Universidad Nacional de Tres de Febrero
Caseros, Buenos Aires, Argentina
2
mvazquez@labset.exa.unicen edu.ar
3
lleiva@labset.exa.unicen edu.ar
Resumen— Los sistemas de control basado en lógica difusa
(FLC, Fuzzy Logic Controller) poseen ventajas, ya que no
requieren modelado matemático y además son útiles cuando se
necesita del conocimiento de un experto para el manejo de
datos imprecisos. Resulta interesante para la implementación
de un FLCs la utilización de la tecnología FPGA. Esta
tecnología presenta ventajas respecto a la velocidad de
procesamiento, consumo de potencia, flexibilidad de diseño y
reconfiguración. Este trabajo presenta una herramienta
basada en HLS para generar FLCs sobre FPGA. Durante su
desarrollo también se analizaron las directivas de síntesis con
mayor impacto sobre la performance de los algoritmos.
Además se desarrollaron tres problemas de lógica difusa para
verificar el funcionamiento de la herramienta.
Palabras clave: FLC; FPGA; HLS.
Abstract— Fuzzy Logic Controllers (FLC) are control
systems commonly used on problems where data is not
accurate or its domain is not well-known. This is because
instead of using complex mathematical models to work, they
use a set of rules to evaluate data. To implement this kind of
controllers one interesting option is FPGA. This technology has
advantages based on reconfigurability, performance, energy
usage and design flexibility. This work presents a tool based on
HLS and FPGA that allows users to generate Fuzzy Logic
Controllers from abstract descriptions. Also the most
impactful synthesis directives for optimizing the different
stages of a FLC are detailed. Finally, three case studies are
presented to evaluate the tool.
Keywords: FLC; FPGA; HLS.
I. INTRODUCTION
La lógica difusa (FL, Fuzzy Logic) es una lógica
alternativa a la lógica clásica que pretende introducir un
grado de vaguedad a las funciones que evalúa. Su objetivo
es incluir en el resultado el grado de incertidumbre que la
mayoría de los fenómenos presentan en la descripción de su
naturaleza [1,2]. Las funciones de pertenencia dentro de la
teoría de conjuntos difusos pueden adquirir valores en el
rango 0 a 1, a diferencia de la teoría de conjuntos clásicos
donde únicamente se devuelven valores binarios.
Un sistema de inferencia difusa [3] es un controlador
basado en lógica difusa (FLC). A diferencia de los sistemas
de control clásicos, los FLC no requieren de modelos de
procesos físicos ya sean analíticos como experimentales.
Los FLC son especialmente adecuados para procesos
complejos y mal definidos, para los cuales es complejo
conseguir un modelo analítico que los describa. Los FLCs
consisten básicamente en cuatro unidades: i) fusificador,
encargado de combinar valores actuales, o crisp, con datos,
mediante funciones de pertenencia para producir valores de
entradas difusos; ii) base de reglas difusas, almacena las
reglas difusas que describen el funcionamiento del
controlador difuso; iii) motor de inferencia difusa, realiza el
cálculo mediante la asociación de variables de entrada con
reglas difusas; iv) defusificador, cuya funcionalidad es
obtener un valor numérico representativo de todas las
salidas (Fig. 1).
Para la implementación de sistemas de control en
general, en los últimos años tuvo gran aceptación el uso de
microcontroladores, DSPs (Digital Signal Processors) y
FPGAs [4]. Los FPGAs se han usado de manera exitosa
como soluciones de diseño de hardware en control
industrial. El diseño en FPGA posee mucha flexibilidad y
potencia, en donde en este último tiempo, la tendencia es el
co-diseño de plataformas Hardware/Software basado en
descripciones y síntesis de alto nivel [5,6]. Los avances
sobre esta tecnología posibilitan una gran potencia de
cálculo con un uso eficiente de energía. La utilización de
FPGAs para la implementación de FLCs es una alternativa
auspiciosa, no solo en lo que respecta a la velocidad de
procesamiento, sino principalmente a la flexibilidad de
diseño y reconfigurabilidad. Esta capacidad de
reconfiguración permite a los usuarios evaluar diferentes
diseños directamente sobre el dispositivo, y realizar ajustes
de manera ágil hasta que el funcionamiento sea el esperado.
Recibido: 01/03/22; Aceptado: 04/05/22
Creative Commons License - Attribution-NonCommercial-
NoDerivatives 4.0 International (CC BY-NC-ND 4.0)
https://doi.org/10.37537/rev.elektron.6.1.148.2022
Original Article
Revista elektron, Vol. 6, No. 1, pp. 20-28 (2022)
ISSN 2525-0159
20
De esta manera, las imprecisiones propias de los problemas
de lógica difusa pueden ser resueltas de manera sencilla
mediante prueba y error.
En este contexto surge la síntesis de alto nivel (HLS),
que pretende generar implementaciones RTL a partir de
lenguajes de alto nivel tipo C, lo que permite a los
programadores concentrarse en el comportamiento de los
algoritmos, evitar errores y disminuir el tiempo de
implementación [7, 8]. Esta nueva tendencia de desarrollo
queda demostrada en las diferentes herramientas que hoy
día se encuentran en el mercado, tales como HLS Compiler
de Intel, Synopsys Synphony C Compiler de Microsemi o
Vivado HLS de Xilinx.
Este trabajo realiza contribuciones en las áreas de
desarrollo de controladores, tales como robótica y
aceleración de procesos, donde la lógica difusa es utilizada
con frecuencia. El objetivo es proveer una herramienta de
software libre que permita a los desarrolladores agilizar los
procesos de diseño, implementación y, especialmente,
calibración de controladores difusos. Para ello se explotan
las capacidades de reconfiguración de la tecnología FPGA y
la facilidad de desarrollo que provee la síntesis en alto nivel.
Según el conocimiento de los autores no existen
desarrollos de FLCs mediante el uso de HLS. Algunos
trabajos presentan herramientas para desarrollar
automáticamente implementaciones en HDL de FLC [9-12],
pero ninguno analiza y explora la utilización eficiente de los
recursos disponibles en los dispositivos FPGAs actuales. En
[9] se presentan resultados sobre dispositivos FPGAs de
Xilinx obsoletos. En [10] no se muestran detalles de
implementación, solo se presenta el modelo VHDL
generado. En lo que respecta a [11 y 12], si bien las
herramientas generan FLCs modelados en VHDL que
podrían sintetizarse en FPGA, las implementaciones se
efectuaron en ASICs.
Fig 1. Diagrama de componentes de un FLC.
II. SÍNTESIS DE ALTO NIVEL DE UN FLC
El propósito de este trabajo es hallar la mejor
combinación de directivas y optimizaciones que permitan
generar FLCs eficientes, mediante el uso de Vivado HLS.
Las directivas son instrucciones que se aplican sobre un
fragmento de código específico, indicando el tipo de
optimización que se debe utilizar.
Para alcanzar esta meta, lo primero que se tuvo en
cuenta son las tres etapas: fusificación, evaluación de reglas
y defusificación. Cada una de ellas se implementó como
métodos separados, lo que posibilita aplicar mejoras
específicas en lugar de mejoras generales que pierden
eficacia al abarcar todo el código. Habiendo establecido
esto, se realizaron pruebas sobre todas las etapas de forma
individual para determinar las directivas óptimas
A. Fusificación
Respecto al fusificador surgen dos estrategias de
implementación: la orientada a memoria o la orientada a
cálculo. La primera precalcula los resultados de cada posible
entrada y los almacena en memoria, mientras que la segunda
los calcula en tiempo de ejecución. Si bien ambas opciones
son válidas y la elección de alguna de ellas depende del
contexto del problema, implementar ambos enfoques resulta
costoso. Por esta razón, y siendo que el fusificador orientado
a memoria tiene una complejidad especial alta para el tipo
de problemas que se busca atacar inicialmente, se optó por
desarrollar controladores con fusificadores orientados a
cálculo.
Dado que existen una gran variedad de algoritmos
disponibles para la fusificación, el primer paso fue tomar un
número reducido de casos para el análisis. Se seleccionaron
los tipos de funciones más comunes: Triangular,
Trapezoidal, Singleton, Forma S y Forma Z. Cada una de
ellas fue reescrita de forma conveniente, ya que las fórmulas
usadas en la literatura para calcular sus valores utilizan
divisiones, lo que resulta costoso. Las fórmulas usadas en
este trabajo tienen la forma:
(1)𝑓(𝑥) =𝑃
1
*(𝑥−𝑎)
(2)𝑓(𝑥) =𝑃
2
*(𝑎−𝑥)
donde P
1
y P
2
son las pendientes constantes de las rectas que
forman a cada función.
A continuación se realizaron diferentes pruebas, donde
se determinó que Pipeline es la directiva con mayor
impacto, reduciendo la latencia y el intervalo entre
respuestas sucesivas al mínimo posible. El problema reside
en que el fusificador se compone de varias instancias de
funciones fusificadoras, por lo que se generó un método
extra donde se invocan de forma ordenada. Esto implica que
cualquier pragma aplicado sobre el método general no se
traslada a las invocaciones. Para solucionarlo, se decidió
que cada llamado a función sea reemplazado por el cuerpo
de la función invocada. De esta manera, la concurrencia se
aplica sobre todas las instrucciones, indistintamente del
método al que pertenezcan.
Por último, como las entradas deben ser convertidas
previamente a valores digitales por conversores A/D, usar
variables de tipo double o float para almacenar los valores
fusificados es ineficiente. En su lugar, se utilizó un tipo de
variable nuevo (llamado fixed_int) de tipo entero, y cuya
cantidad de bits depende directamente de la cantidad de bits
de los conversores usados. Esto significa que si se tiene un
conversor de n bits, las variables utilizadas en la fusificación
tendrán n bits de ancho.
B. Evaluación de reglas
La evaluación de reglas toma el resultado de la etapa
anterior y calcula los valores de pertenencia para cada
variables de salida, usando una base de reglas. Existen gran
cantidad de algoritmos disponibles para esta etapa pero, al
igual que con el caso anterior, se decidió analizar el más
usado. El mismo es conocido como método Mamdani o
MinMax, por la forma en la que calcula los resultados.
Nuevamente surgen dos estrategias de implementación.
Una de ellas se basa en el uso de matrices, donde para cada
Revista elektron, Vol. 6, No. 1, pp. 20-28 (2022)
ISSN 2525-0159
21
http://elektron.fi.uba.ar