Laboratorium 1: wprowadzenie do nMigen

Data: 20.10.2020

nMigen

nMigen jest narzędziem do tworzenia układów logicznych w języku Python. Nie jest ściśle rzecz biorąc językiem opisu sprzętu, choć w praktyce może być tak używany.

Aby opisać układ logiczny w narzędziu nMigen, należy stworzyć klasę dziedziczącą z typu Elaboratable, która ma metodę elaborate, która zwróci instancję klasy Module zawierającą naszą logikę. Takie klasy mogą rekurencyjnie instancjonować inne klasy (i moduły), by stworzyć hierarchiczny układ logiczny.

Mając taką klasę, możemy ją zinstancjonowac by stworzyć nasz układ logiczny i użyć go na jeden z kilku sposobów:

  • przekonwertować go na język Verilog, by użyć go z narzędzami producenta

  • spiąć nMigen z syntezatorem yosys, by móc używać modułów nMigena z kodu napisanego w Verilogu (i na odwrót)

  • uruchomić symulator wbudowany w nMigen i testować nasz moduł za pomocą kodu Pythona

Instalacja narzędzi

Instalujemy gtkwave i xdot (powinno być w repozytorium paczek dystrybucji).

Instalujemy yosysa w wersji 0.9 lub z gita:

git clone git@github.com:YosysHQ/yosys.git
cd yosys
make -j4
sudo make install

Instalujemy nMigen:

pip3 --user install nmigen

Przykład

Przykładowy moduł nMigena wraz z przykładowym użyciem symulatora można znaleźć tutaj: counter.py.

Generowanie Veriloga:

python counter.py verilog > counter.v

Generowanie RTLIL:

python counter.py rtlil > counter.il

Wizualizacja (yosys):

yosys counter.il -p 'proc; clean; show'

Synteza na Xilinxa (yosys):

yosys counter.il -p 'synth_xilinx -edif counter.edif'

Uruchomienie symulacji:

python counter.py simulate

Wizualizacja symulacji:

gtkwave ctr.vcd