Skip to content

Commit

Permalink
Update TFM repo
Browse files Browse the repository at this point in the history
  • Loading branch information
Unai267 committed Sep 17, 2024
1 parent a1436dd commit b4b8734
Show file tree
Hide file tree
Showing 9 changed files with 480 additions and 10 deletions.
2 changes: 2 additions & 0 deletions Anexos/Codigo.tex
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@ \chapter{Código} % Título del Anexo
\label{Codigo} % Etiqueta \ref{Planos}

Aqui irá el código del diseño.

%Enlace al repo de github
3 changes: 3 additions & 0 deletions Capitulos/Conclusiones.tex
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,6 @@ \section{Conclusiones alcanzadas}
\section{Líneas futuras}

Aqui irán las líneas futuras.

%Externalizar por completo los calculos referentes a las RNAs y tener un un modelo completo de RNA computado por un enfoque distribuido. Mejorar la gestion de memoria. Hasta ahora hardcodeada. Posibilidad de usar la DDR (controlador ddr de litex) de la Arty, jtag, debug Usb (issue 38). La unica aproximación se ha hecho utilizando la spi (issue 47) relaizada con exito pero no nos vale (comentario de umarcor)
%Añadir la compilación de software a CI
227 changes: 226 additions & 1 deletion Capitulos/Desarrollo.tex

Large diffs are not rendered by default.

29 changes: 25 additions & 4 deletions Capitulos/Memoria.tex
Original file line number Diff line number Diff line change
Expand Up @@ -372,15 +372,32 @@ \section{Beneficios que aporta el trabajo}
Puesto que dicho artículo ha sido aceptado, se publicará en el IEEEXplore.
Se considera un beneficio aportado por este trabajo la contribución en dicha base de datos.

También, se considera un beneficio aportado por este trabajo la publicación del contenedor \cite{gh:conatiner-implarty} desarrollado para realizar la síntesis, implementación y generación de bitstream para las FPGAs Arty A7 35t y 100t mediante las herramientas \textit{Open Source}: GHDL + yosys + GHDL yosys plugin + nextpnr-xilinx + prjxray.
También, se considera un beneficio aportado por este trabajo la publicación del contenedor \cite{gh:conatiner-implarty} desarrollado para realizar la síntesis, implementación y generación de \textit{bitstream} para las FPGAs Arty A7 35T y 100T mediante las herramientas \textit{Open Source}: GHDL + yosys + GHDL yosys plugin + nextpnr-xilinx + prjxray.

En lo que respecta a los Objetivos de Desarrollo Sostenible (ODS), este trabajo de investigación pretende aportar beneficios en el marco del objetivo \textit{Industria, innovación e infraestructura} (ODS 9) y del objetivo \textit{Reducción de las desigualdades} (ODS 10).
Respecto al ODS 9, se considera que la investigación entorno al enfoque distribuido para realizar IA en el borde supone fomentar la innovación en lo que respecta a este ámbito.
Respecto al ODS 10, se considera que distribuir contenedores para facilitar el uso de herramientas \textit{Open Source}, así como contribuir a proyectos de hardware libre que puedan derivar a la fabricación de chips \textit{royalty-free}, fomenta la reducción de las desigualdades.

\section{Análisis del estado del arte}

Aqui irá un análisis del estado del arte.
Haciendo un repaso por las principales bases de datos de ámbito electrónico, se observan varios proyectos con una filosofía similar a la presentada en este trabajo de investigación.
Un ejemplo muy interesante es el encontrado en una publicación titulada \textit{Tiny Neuron Network System based on RISC-V Processor: A Decentralized Approach for IoT Applications} \cite{9942990}.
En dicho \textit{paper}, se presenta una investigación sobre un pequeño acelerador de redes neuronales en un SoC basado en RISC-V para acelerar una IA empleada en aplicaciones de IoT.
Este coprocesador implementa una MAC (multiplicador y acumulador) de precisión variable en bits o una MAC estocástica para reducir el área de hardware y el consumo de energía.
Es curioso el hecho de que se emplea la misma tecnología FPGA que en el presente proyecto, una Arty A7 100T.
Los resultados presentados en este trabajo son destacables, consiguiendo realizar con precisión de 8 bits redes neuronales convolucionales (CNN) con una precisión del 98,55\%.
En su caso, el método optado para acoplar los aceleradores ha sido una interfaz AXI.

Otro ejemplo muy interesante es el expuesto en una publicación titulada \textit{CNN Specific ISA Extensions Based on RISC-V Processors} \cite{9802445}.
En ella, se presenta una extensión de instrucciones basada en la ISA RISC-V destinada a aumentar la eficiencia computacional de las CNN en dispositivos en el borde.
En su caso emplean el core RISC-V \textit{Open Source} Zero-riscy \cite{8106976} \cite{gh:zero-riscy}.
Con objeto de evaluar el efecto de la extensión de instrucciones propuesta, se realiza una serie de cargas de trabajo en el núcleo de referencia y en el ampliado.
Se obtinen un ratio de aceleración de 1,5× cuando se ejecuta una CNN, y alcanza 2,48×-2,82× cuando sólo se realizan los cálculos de convolución.
Los resultados obtenidos en este \textit{paper} demuestran que las extensiones de ISA propuestas pueden mejorar eficazmente el rendimiento de las CNN.

Los casos mencionados, así como otros de gran interés, se encuentran recogidos en una publicación titulada \textit{A Review of Edge Intelligence Applications Based on RISC-V} \cite{10336594}.
En ella se resume el uso de RISC-V en aplicaciones de IA en el borde desde un punto de vista hardware y software.
Además, a lo largo de la \textit{review} se analizan varios aceleradores, coprocesadores, compiladores y \textit{toolchains} basados en RISC-V, así como las principales aplicaciones software de la IA en el borde.

\section{Análisis de alternativas}

Expand All @@ -402,7 +419,11 @@ \section{Análisis de alternativas}
Este hecho no impide integrar en él código en otros HDLs.
De igual modo, es común generar diseños de LiteX en HDLs más tradicionales, como verilog.

%Quizá otra alternativa más
Por último, se encuentra la alternativa de comenzar la aproximación de IA a en el borde mediante la externalización a hardware específico de otro cálculo relativo a las RNAs.
Esta alternativa es bastante diversa y podría ir desde acelerar la activación mediante otra función disponible en el coprocesador configurable y programable basado en CRI hasta elegir otra operación para ser acelerada.
Un ejemplo de esta última propuesta es la detallada en una publicación titulada \textit{A Soft RISC-V Vector Processor for Edge-AI} \cite{9885953}.
En ella se presenta una unidad vectorial basada en un \textit{array} sistólico que está estrechamente integrada en el pipeline de un núcleo RISC-V de 32 bits.
Tras evaluar el rendimiento de este enfoque distribuido en una FPGA Xilinx Virtex 7, se concluye un aumento de velocidad de hasta 40,7 veces con respecto al núcleo escalar RISC-V en tareas de reconocimiento de imágenes, a costa de un aumento en el consumo energético y en los recursos hardaware de 1,2 y 1,8 veces respectivamente.

\section{Descripción de la solución propuesta}

Expand All @@ -412,7 +433,7 @@ \section{Descripción de la solución propuesta}
Este hecho tiene como objetivo simplificar la gestión computacional en pos de implementar un primera aproximación de IA en el borde.
En este sentido, se propone utilizar un coprocesador basado en la método CRI y acoplarlo a un procesador RISC-V.
Mediante los argumentos descritos en la sección \ref{Selec} se elige el microcontrolador NEORV32.
Con objeto de generar un criterio de selección de modo de acoplamiento, se propone realizar una caracterización del rendimiento de los principales métodos de conexión con los que cuenta este microcontrolador.
Con objeto de generar un criterio de selección del modo de acoplamiento, se propone realizar una caracterización del rendimiento de los principales métodos de conexión con los que cuenta este microcontrolador.
Esta caracterización se detalla en la sección \ref{Carac}.
Por último, se acopla el coprocesador encargado de acelerar el cálculo de la FA sigmoide basado en CRI al NEORV32.
Además, se verifica el beneficio de emplear este tipo de enfoque distribuido comparándolo con realizar los mismos cálculos utilizando únicamente el microcontrolador.
Expand Down
6 changes: 2 additions & 4 deletions Capitulos/Metodologia.tex
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,10 @@ \section{Diagrama de Gantt}

Aqui irá el diagrama de Gantt.

\section{Algoritmos}

Aqui irán los algoritmos.

\section{Análisis de los resultados}

Aqui irá un análisis de los resultados.

%capturas resultados en CI de github


Binary file added Figuras/cutecom_cmd_upload.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Figuras/workflow.pdf
Binary file not shown.
18 changes: 17 additions & 1 deletion main.tex
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,13 @@
\usepackage[skip=4pt plus1pt, indent=15pt]{parskip}
\usepackage{pdfpages}
\usepackage{amsmath}
\usepackage[
left = \flqq{},%
right = \frqq{},%
leftsub = \flq{},%
rightsub = \frq{} %
]{dirtytalk}
\usepackage{minted}

%----------------------------------------------------------------------------------------
% MARGIN SETTINGS
Expand Down Expand Up @@ -225,10 +232,19 @@
\textbf{ReLU} & \textbf{Re}ctified \textbf{L}inear \textbf{U}nit\\
\textbf{FOSS} & \textbf{F}ree and \textbf{O}pen \textbf{S}ource \textbf{S}oftware\\
\textbf{ODS} & \textbf{O}bjetivos de \textbf{D}esarrollo \textbf{S}ostenible\\
\textbf{MAC} & \textbf{M}ultiply–\textbf{AC}cumulate\\
\textbf{CNN} & \textbf{C}onvolutional \textbf{N}eural \textbf{N}etwork\\
\textbf{DRAM} & \textbf{D}ynamic \textbf{R}andom \textbf{A}ccess \textbf{M}emory\\
\textbf{PCI} & \textbf{P}eripheral \textbf{C}omponent \textbf{I}nterconnect\\
\textbf{SATA} & \textbf{S}erial \textbf{A}dvanced \textbf{T}echnology \textbf{A}ttachment\\

\textbf{EDA} & \textbf{E}lectronic \textbf{D}esign \textbf{A}utomation\\
\textbf{FLOS} & \textbf{F}ree/\textbf{L}ibre and/or \textbf{O}pen \textbf{S}ource\\
\textbf{FPGAIF} & \textbf{FPGA} \textbf{I}nterchange \textbf{F}ormat\\
\textbf{ASIC} & \textbf{A}pplication-\textbf{S}pecific \textbf{I}ntegrated \textbf{C}ircuit\\
\textbf{GCC} & \textbf{G}NU \textbf{C}ompiler \textbf{C}ollection\\
\textbf{ILA} & \textbf{I}ntegrated \textbf{L}ogic \textbf{A}nalyzer\\
\textbf{IMEM} & \textbf{I}nstruction \textbf{MEM}ory\\

\end{abbreviations}

%----------------------------------------------------------------------------------------
Expand Down
205 changes: 205 additions & 0 deletions references.bib
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,76 @@ @misc{gh:migen
commit = {832a7240ba32af9cbd4fdd519ddcb4f912534726}
}

@INPROCEEDINGS{9942990,
author={Nguyen, Ngo-Doanh and Bui, Duy-Hieu and Tran, Xuan-Tu},
booktitle={2022 International Conference on Advanced Technologies for Communications (ATC)},
title={Tiny Neuron Network System based on RISC-V Processor: A Decentralized Approach for IoT Applications},
year={2022},
volume={},
number={},
pages={98-103},
keywords={Power demand;Neurons;AI accelerators;Hardware;System-on-chip;Internet of Things;Servers},
doi={10.1109/ATC55345.2022.9942990}
}

@INPROCEEDINGS{9802445,
author={Yu, Xiang and Yang, Zhijie and Peng, Linghui and Lin, Bo and Yang, Wenjing and Wang, Lei},
booktitle={2022 5th International Conference on Circuits, Systems and Simulation (ICCSS)},
title={CNN Specific ISA Extensions Based on RISC-V Processors},
year={2022},
volume={},
number={},
pages={116-120},
keywords={Performance evaluation;Microarchitecture;Program processors;Convolution;Image edge detection;Data transfer;Pattern recognition;RISC-V;ISA extensions;CNN accelerating},
doi={10.1109/ICCSS55260.2022.9802445}
}

@INPROCEEDINGS{8106976,
author={Davide Schiavone, Pasquale and Conti, Francesco and Rossi, Davide and Gautschi, Michael and Pullini, Antonio and Flamand, Eric and Benini, Luca},
booktitle={2017 27th International Symposium on Power and Timing Modeling, Optimization and Simulation (PATMOS)},
title={Slow and steady wins the race? A comparison of ultra-low-power RISC-V cores for Internet-of-Things applications},
year={2017},
volume={},
number={},
pages={1-8},
keywords={Multicore processing;Open source software;Program processors;Signal processing algorithms;Sensors;RISC-V;energy efficiency;area optimized;ultra-low-power;open-source;core;microprocessor;internet-of-things},
doi={10.1109/PATMOS.2017.8106976}
}

@misc{gh:zero-riscy,
author = {Gautschi, Michael and Wegmann, Markus and Schiavone, Davide},
title = {{zero-riscy CPU Core )}},
year = {2017},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\href{https://github.com/tom01h/zero-riscy}{tom01h/zero-riscy}},
commit = {6f5711fa7020e9306c322afb9acec6c12a68fdf6}
}

@INPROCEEDINGS{10336594,
author={Wei, Qian and Cui, Enfang and Gao, Yue and Li, Tianzheng},
booktitle={2023 2nd International Conference on Computing, Communication, Perception and Quantum Technology (CCPQT)},
title={A Review of Edge Intelligence Applications Based on RISC-V},
year={2023},
volume={},
number={},
pages={115-119},
keywords={Trusted computing;Systematics;Image edge detection;Software algorithms;Computer architecture;Software;Hardware;RISC-V;edge intelligence;AI;energy efficiency},
doi={10.1109/CCPQT60491.2023.00025}
}

@INPROCEEDINGS{9885953,
author={Chander, V. Naveen and Varghese, Kuruvilla},
booktitle={2022 35th International Conference on VLSI Design and 2022 21st International Conference on Embedded Systems (VLSID)},
title={A Soft RISC-V Vector Processor for Edge-AI},
year={2022},
volume={},
number={},
pages={263-268},
keywords={Deep learning;Image edge detection;Neural networks;Benchmark testing;Very large scale integration;Hardware;Systolic arrays},
doi={10.1109/VLSID2022.2022.00058}
}

@misc{gh:neorv32-tool,
author = {Nolting, Stephan and {Contributors}},
title = {{Prebuilt RISC-V GCC toolchains for x64 Linux.}},
Expand Down Expand Up @@ -419,3 +489,138 @@ @misc{neorv32-ug
year = {2020}
}

@misc{gh:rapid,
author = {{AMD Research and Advanced Development}},
title = {{RapidWright}},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\href{https://github.com/Xilinx/RapidWright}{gh:Xilinx/RapidWright}},
commit = {158ec6ac460230a3b1bcd01c3ea16f021de35223}
}

@misc{contest,
author = {{AMD}},
title = {{Runtime-First FPGA Interchange Routing Contes}},
year = {2024},
publisher = {AMD},
journal = {Web page},
howpublished = {\href{https://xilinx.github.io/fpga24_routing_contest/index.html}{xilinx.github.io/fpga24 \_routing\_contest/index}}
}

@misc{FPGAIF,
author = {{CHIPS Alliance}},
title = {{FPGA Interchange Format}},
year = {2020},
publisher = {CHIPS Alliance},
journal = {Web page},
howpublished = {\href{http://www.rapidwright.io/docs/FPGA_Interchange_Format.html}{rapidwright.io/docs/FPGA\_Interchange \_Format}}
}

@misc{osvvm,
author = {Lewis, Jim and {Contributors}},
title = {{Open Source VHDL Verification Methodology}},
year = {2013},
publisher = {OSVVM},
journal = {Web page},
howpublished = {\href{https://osvvm.org/}{osvvm.org}}
}

@misc{uvvm,
author = {Tallaksen, Espen and {Contributors}},
title = {{Universal VHDL Verification Methodology }},
year = {2013},
publisher = {UVVM},
journal = {Web page},
howpublished = {\href{https://www.uvvm.org/}{uvvm.org}}
}

@misc{wilson-research,
author = {{Siemens}},
title = {{The 2022 Wilson Research Group Functional Verification Study}},
year = {2022},
publisher = {Siemens},
journal = {Web page},
howpublished = {\href{https://blogs.sw.siemens.com/verificationhorizons/2022/11/21/part-6-the-2022-wilson-research-group-functional-verification-study/}{blogs.sw. siemens.com/verificationhorizons/2022/11/21/part-6-the-2022-wilson-research-group-functional-verification-study/}}
}

@misc{gh:ghdl,
author = {Gingold, Tristan and {Contributors}},
title = {{GHDL - VHDL 2008/93/87 simulator}},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\href{https://github.com/ghdl/ghdl}{gh:ghdl/ghdl}},
commit = {f6e6df2d4909f6672673384ace215514de60ab8d}
}

@misc{gh:yosys,
author = {Xenia Wolf, Claire and {Contributors}},
title = {{YOSYS - Yosys Open SYnthesis Suite}},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\href{https://github.com/YosysHQ/yosys}{gh:YosysHQ/ yosys}},
commit = {855ac285f49277ba9007f5808f5350ec656db852}
}

@misc{gh:ghdl-plugin,
author = {Gingold, Tristan and {Contributors}},
title = {{ghdl-yosys-plugin: VHDL synthesis (based on GHDL and Yosys)}},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\href{https://github.com/ghdl/ghdl-yosys-plugin}{gh:ghdl/ghdl-yosys-plugin}},
commit = {511412f984d64ed7c46c4bdbd839f4b3c48f6fa5}
}

@misc{gh:nextpnr,
author = {Shah, David and {Contributors}},
title = {{Nextpnr-Xilinx - Experimental flows using nextpnr for Xilinx devices}},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\href{https://github.com/gatecat/nextpnr-xilinx}{gh:gatecat/nextpnr-xilinx}},
commit = {f79387599b420bfadf3dc218e55e1e77b1edb304}
}

@misc{gh:prjxray,
author = {{Project X-Ray Contributors}},
title = {{Documenting the Xilinx 7-series bit-stream format}},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\href{https://github.com/f4pga/prjxray}{gh:f4pga/prjxray}},
commit = {5d682fac45c7b52b0ec1a68c68450cee5834bb28}
}

@misc{gh:openFPGALoader,
author = {Goavec-Merou, Gwenhael and {Contributors}},
title = {{openFPGALoader: Universal utility for programming FPGA}},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\href{https://github.com/trabucayre/openFPGALoader}{gh:trabucayre/openFPGALoader}},
commit = {81422b6ca3d05a7b7ab6964ccaf2c88bf7d59aff}
}

@misc{gh:vunit,
author = {Asplund, Lars and Kraigher, Olof and {Contributors}},
title = {{VUnit - Testing framework for VHDL/ SystemVerilog}},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\href{https://github.com/VUnit/vunit}{gh:VUnit/vunit}},
commit = {3032da050f11bdf038053f67fc664c39ee19f9f6}
}

@misc{gh:cutecom,
author = {Neundorf, Alexander and {Contributors}},
title = {{CuteCom - A graphical serial terminal}},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\href{https://github.com/neundorf/CuteCom}{gh:neundorf/ CuteCom}},
commit = {efc3f0efb72f9fc7d6506f6908ca83d689a09fe1}
}

0 comments on commit b4b8734

Please sign in to comment.