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