Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| howtos:fpga [2025/09/20 13:02] – hackens-pub | howtos:fpga [2025/09/20 14:04] (Version actuelle) – hackens-pub | ||
|---|---|---|---|
| Ligne 24: | Ligne 24: | ||
| ## Génération des fichiers verilog à partir de Bluespec | ## Génération des fichiers verilog à partir de Bluespec | ||
| - | ```make | + | Bluespec est un langage de description de hardware de haut niveau, il permet de décrire des circuits sous forme d'un ensemble de règles que le compilateur ordonnance. |
| - | PACKAGES | + | On peut ainsi faire clignoter une LED avec le programme suivant : |
| + | |||
| + | ```bsc | ||
| + | interface Top; | ||
| + | (* always_ready, | ||
| + | method Bit#(8) led; | ||
| + | endinterface | ||
| + | |||
| + | (* synthesize *) | ||
| + | module mkTop(Top); | ||
| + | Reg# | ||
| + | |||
| + | rule incr_counter; | ||
| + | counter <= counter | ||
| + | endrule | ||
| + | |||
| + | method led = truncateLSB(counter); | ||
| + | endmodule | ||
| + | ``` | ||
| + | et le compiler sous forme de fichiers verilog avec cette commande: | ||
| + | |||
| + | ```bash | ||
| bsc \ | bsc \ | ||
| -verilog \ | -verilog \ | ||
| - | -vdir | + | -vdir |
| -no-warn-action-shadowing | -no-warn-action-shadowing | ||
| -keep-fires -aggressive-conditions -show-schedule \ | -keep-fires -aggressive-conditions -show-schedule \ | ||
| -cpp +RTS -K128M -RTS -show-range-conflict \ | -cpp +RTS -K128M -RTS -show-range-conflict \ | ||
| - | -p $(PACKAGES) | + | -p :+ -g mkTop -u Main.bsv |
| ``` | ``` | ||
| - | - ``` PACKAGES``` liste des dossiers dont les fichiers .bs et .bsv sont importés, le + représente la lib standard | + | - ``` -p :+``` liste des dossiers dont les fichiers .bs et .bsv sont importés, le + représente la librarie |
| - ``` Top``` est le fichier principale | - ``` Top``` est le fichier principale | ||
| - ``` mkTop``` est le module principale | - ``` mkTop``` est le module principale | ||
| - | - ``` keep-fires``` utilise le sceduling intuitif: active chaque | + | - ``` keep-fires``` utilise le sceduling intuitif: active chaque |
| - | - ``` aggressive-conditions``` | + | - ``` aggressive-conditions``` |
| ## Génération des LUT (look-up-table) avec yosys | ## Génération des LUT (look-up-table) avec yosys | ||
| ```make | ```make | ||
| - | yosys -DULX3S -q -p " | + | yosys -DULX3S -q -p " |
| ``` | ``` | ||
| - | - ``` LIB``` est la liste des fichiers verilog | + | - ``` rtl/mkTop.v``` est la liste des fichiers verilog, dans ce cas le fichier générer par Bluespec |
| - ``` mkTop``` est le module verilog principale | - ``` mkTop``` est le module verilog principale | ||
| - ``` mkTop.json``` est la sortie de yosys | - ``` mkTop.json``` est la sortie de yosys | ||
| Ligne 63: | Ligne 84: | ||
| - ``` --85k``` nombre de LUT du FPGA | - ``` --85k``` nombre de LUT du FPGA | ||
| - on peut ajouter ``` -gui``` pour avoir une interface graphique et voir le placement sur le FPGA | - on peut ajouter ``` -gui``` pour avoir une interface graphique et voir le placement sur le FPGA | ||
| + | |||
| + | Pour cet exemple, | ||
| + | |||
| + | ``` | ||
| + | BLOCK RESETPATHS; | ||
| + | BLOCK ASYNCPATHS; | ||
| + | ## ULX3S v2.0 and v2.1 | ||
| + | |||
| + | # The clock " | ||
| + | LOCATE COMP " | ||
| + | IOBUF PORT " | ||
| + | FREQUENCY PORT " | ||
| + | |||
| + | # JTAG and SPI FLASH voltage 3.3V and options to boot from SPI flash | ||
| + | # write to FLASH possible any time from JTAG: | ||
| + | SYSCONFIG CONFIG_IOVOLTAGE=3.3 COMPRESS_CONFIG=ON MCCLK_FREQ=62 MASTER_SPI_PORT=ENABLE SLAVE_SPI_PORT=DISABLE SLAVE_PARALLEL_PORT=DISABLE; | ||
| + | # write to FLASH possible from user bitstream, not possible form JTAG: | ||
| + | # SYSCONFIG CONFIG_IOVOLTAGE=3.3 COMPRESS_CONFIG=ON MCCLK_FREQ=62 MASTER_SPI_PORT=DISABLE SLAVE_SPI_PORT=DISABLE SLAVE_PARALLEL_PORT=DISABLE; | ||
| + | |||
| + | LOCATE COMP " | ||
| + | IOBUF PORT " | ||
| + | |||
| + | ## LED indicators " | ||
| + | LOCATE COMP " | ||
| + | LOCATE COMP " | ||
| + | LOCATE COMP " | ||
| + | LOCATE COMP " | ||
| + | LOCATE COMP " | ||
| + | LOCATE COMP " | ||
| + | LOCATE COMP " | ||
| + | LOCATE COMP " | ||
| + | IOBUF PORT " | ||
| + | IOBUF PORT " | ||
| + | IOBUF PORT " | ||
| + | IOBUF PORT " | ||
| + | IOBUF PORT " | ||
| + | IOBUF PORT " | ||
| + | IOBUF PORT " | ||
| + | IOBUF PORT " | ||
| + | ``` | ||
| ## Génération du bitstream avec ecppack | ## Génération du bitstream avec ecppack | ||