Ceci est une ancienne révision du document !
FPGA ULX3S (EPC5-85F)
Un FPGA est un océan de portes reprogrammable. Plus puissant qu'un microcontrôlleur, on peut installer dessus un CPU ou du hardware spécialisé.
Pour un example d'utilisation voir:
Le board d'HackENS est un terrain de jeu avec plein d'IO :
- de la SDRAM
- une carte SD
- un ESP32
- des boutons
- des leds
- un port jack
- un port hdmi
- …
Génération des fichiers verilog à partir de Bluespec
PACKAGES = ./src/:+ bsc \ -verilog \ -vdir $(RTL) -bdir $(BUILD) -info-dir $(BUILD) \ -no-warn-action-shadowing -check-assert \ -keep-fires -aggressive-conditions -show-schedule \ -cpp +RTS -K128M -RTS -show-range-conflict \ -p $(PACKAGES) -g mkTop -u $(TOP)
PACKAGESliste des dossiers dont les fichiers .bs et .bsv sont importés, le + représente la lib standardTopest le fichier principalemkTopest le module principalekeep-firesutilise le sceduling intuitif: active chaque règne dés que possible (moins les conflits)aggressive-conditionsje pense que c'est: si $e_1$ est gardé par la condition $c_1$ et $e_2$ est gardé par la condition $c_2$ alors $(c ? e_1 : e_2)$ a pour condition de garde $(c ? c_1 : c_2)$ plutot que $c_1 \lor c_2$, les conditions sont plus difficile à calculer mais c'est plus intuitif et ne demande pas de faire deux règles pour scheduler $e_1$ et $e_2$
Génération des LUT (look-up-table) avec yosys
yosys -DULX3S -q -p "synth_ecp5 -abc9 -top mkTop -json mkTop.json" $(LIB)
LIBest la liste des fichiers verilogmkTopest le module verilog principalemkTop.jsonest la sortie de yosys-abc9est l'algorithme de génération des LUT par défault, parfois il crash (je pense à cause des inout qui ne sont pas entièrement supporter), dans ce cas utiliser-noabc9semble marcher
Rooting avec nextpnr
nextpnr-ecp5 --85k --json mkTop.json \ --lpf ulx3s.lpf \ --textcfg mkTop.config
ulx3s.lpffichier qui map les variables verilog sur les pins--85knombre de LUT du FPGA- on peut ajouter
-guipour avoir une interface graphique et voir le placement sur le FPGA
Génération du bitstream avec ecppack
ecppack mkTop.config mkTop.bit
Flash du fpga avec fujprog
fujprog mkTop.bit
Il faut que le tty du fpga soit accessible par l'utilisateur courant!
Nix
On peut tout installer avec ce nix-shell:
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
buildInputs = [
pkgs.bluespec
pkgs.verilator
pkgs.verilog
pkgs.gtkwave
pkgs.openfpgaloader
pkgs.yosys
pkgs.nextpnrWithGui
pkgs.trellis
];
shellHook = ''
export BLUESPECDIR=${pkgs.bluespec}/lib
'';
}