howtos:fpga

Ceci est une ancienne révision du document !


Comment utiliser le FPGA d'hackens (ULX3S)

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
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)
  • PACKAGES liste des dossiers dont les fichiers .bs et .bsv sont importés, le + représente la lib standard
  • Top est le fichier principale
  • mkTop est le module principale
  • keep-fires utilise le sceduling intuitif: active chaque règne dés que possible (moins les conflits)
  • aggressive-conditions je 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$
yosys -DULX3S -q -p "synth_ecp5 -abc9 -top mkTop -json mkTop.json" $(LIB)
  • LIB est la liste des fichiers verilog
  • mkTop est le module verilog principale
  • mkTop.json est la sortie de yosys
  • -abc9 est 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 -noabc9 semble marcher
nextpnr-ecp5 --85k --json mkTop.json \
	--lpf ulx3s.lpf \
	--textcfg mkTop.config
  • ulx3s.lpf fichier qui map les variables verilog sur les pins
  • --85k nombre de LUT du FPGA
  • on peut ajouter -gui pour avoir une interface graphique et voir le placement sur le FPGA
ecppack mkTop.config mkTop.bit
fujprog mkTop.bit

Il faut que le tty du fpga soit accessible par l'utilisateur courant!

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
    '';
}
  • howtos/fpga.1758373374.txt.gz
  • Dernière modification : 2025/09/20 13:02
  • de hackens-pub