cli: new module, for basic design generaton/simulation.

This commit is contained in:
whitequark 2018-12-22 23:56:02 +00:00
parent 621dddebfd
commit cf79738744
10 changed files with 112 additions and 61 deletions

View file

@ -1,5 +1,5 @@
from nmigen import *
from nmigen.back import rtlil, verilog
from nmigen.cli import main
class ALU:
@ -23,7 +23,6 @@ class ALU:
return m.lower(platform)
alu = ALU(width=16)
frag = alu.get_fragment(platform=None)
# print(rtlil.convert(frag, ports=[alu.sel, alu.a, alu.b, alu.o, alu.co]))
print(verilog.convert(frag, ports=[alu.sel, alu.a, alu.b, alu.o, alu.co]))
if __name__ == "__main__":
alu = ALU(width=16)
main(alu, ports=[alu.sel, alu.a, alu.b, alu.o, alu.co])

View file

@ -1,5 +1,5 @@
from nmigen import *
from nmigen.back import rtlil, verilog
from nmigen.cli import main
class Adder:
@ -53,7 +53,6 @@ class ALU:
return m.lower(platform)
alu = ALU(width=16)
frag = alu.get_fragment(platform=None)
# print(rtlil.convert(frag, ports=[alu.op, alu.a, alu.b, alu.o]))
print(verilog.convert(frag, ports=[alu.op, alu.a, alu.b, alu.o]))
if __name__ == "__main__":
alu = ALU(width=16)
main(alu, ports=[alu.op, alu.a, alu.b, alu.o])

View file

@ -1,5 +1,5 @@
from nmigen import *
from nmigen.back import rtlil, verilog
from nmigen.cli import main
class ClockDivisor:
@ -14,8 +14,8 @@ class ClockDivisor:
return m.lower(platform)
ctr = ClockDivisor(factor=16)
frag = ctr.get_fragment(platform=None)
frag.add_domains(ClockDomain("sync", async_reset=True))
# print(rtlil.convert(frag, ports=[ctr.o]))
print(verilog.convert(frag, ports=[ctr.o]))
if __name__ == "__main__":
ctr = ClockDivisor(factor=16)
frag = ctr.get_fragment(platform=None)
frag.add_domains(ClockDomain("sync", async_reset=True))
main(frag, ports=[ctr.o])

View file

@ -1,10 +1,10 @@
from nmigen import *
from nmigen.back import rtlil, verilog
from nmigen.cli import main
i, o = Signal(name="i"), Signal(name="o")
m = Module()
m.submodules += MultiReg(i, o)
frag = m.lower(platform=None)
# print(rtlil.convert(frag, ports=[i, o]))
print(verilog.convert(frag, ports=[i, o]))
if __name__ == "__main__":
main(m.lower(platform=None), ports=[i, o])

View file

@ -1,5 +1,5 @@
from nmigen import *
from nmigen.back import rtlil, verilog, pysim
from nmigen.cli import main, pysim
class Counter:
@ -14,13 +14,6 @@ class Counter:
return m.lower(platform)
ctr = Counter(width=16)
frag = ctr.get_fragment(platform=None)
# print(rtlil.convert(frag, ports=[ctr.o]))
print(verilog.convert(frag, ports=[ctr.o]))
with pysim.Simulator(frag,
vcd_file=open("ctr.vcd", "w")) as sim:
sim.add_clock(1e-6)
sim.run_until(100e-6, run_passive=True)
ctr = Counter(width=16)
if __name__ == "__main__":
main(ctr, ports=[ctr.o])

View file

@ -1,6 +1,6 @@
from types import SimpleNamespace
from nmigen import *
from nmigen.back import rtlil, verilog, pysim
from nmigen.cli import main
class GPIO:
@ -16,16 +16,14 @@ class GPIO:
return m.lower(platform)
# TODO: use Record
bus = SimpleNamespace(
adr=Signal(max=8),
dat_r=Signal(),
dat_w=Signal(),
we=Signal()
)
pins = Signal(8)
gpio = GPIO(Array(pins), bus)
frag = gpio.get_fragment(platform=None)
# print(rtlil.convert(frag, ports=[pins, bus.adr, bus.dat_r, bus.dat_w, bus.we]))
print(verilog.convert(frag, ports=[pins, bus.adr, bus.dat_r, bus.dat_w, bus.we]))
if __name__ == "__main__":
# TODO: use Record
bus = SimpleNamespace(
adr =Signal(name="adr", max=8),
dat_r=Signal(name="dat_r"),
dat_w=Signal(name="dat_w"),
we =Signal(name="we"),
)
pins = Signal(8)
gpio = GPIO(Array(pins), bus)
main(gpio, ports=[pins, bus.adr, bus.dat_r, bus.dat_w, bus.we])

View file

@ -1,5 +1,5 @@
from nmigen import *
from nmigen.back import rtlil, verilog
from nmigen.cli import main
class System:
@ -11,7 +11,7 @@ class System:
def get_fragment(self, platform):
m = Module()
m.submodules += Instance("CPU",
m.submodules.cpu = Instance("CPU",
p_RESET_ADDR=0xfff0,
i_d_adr =self.adr,
i_d_dat_r=self.dat_r,
@ -21,7 +21,6 @@ class System:
return m.lower(platform)
sys = System()
frag = sys.get_fragment(platform=None)
# print(rtlil.convert(frag, ports=[sys.adr, sys.dat_r, sys.dat_w, sys.we]))
print(verilog.convert(frag, ports=[sys.adr, sys.dat_r, sys.dat_w, sys.we]))
if __name__ == "__main__":
sys = System()
main(sys, ports=[sys.adr, sys.dat_r, sys.dat_w, sys.we])

View file

@ -1,5 +1,5 @@
from nmigen import *
from nmigen.back import rtlil, verilog
from nmigen.cli import main
class RegisterFile:
@ -24,7 +24,6 @@ class RegisterFile:
return m.lower(platform)
rf = RegisterFile()
frag = rf.get_fragment(platform=None)
# print(rtlil.convert(frag, ports=[rf.adr, rf.dat_r, rf.dat_w, rf.we]))
print(verilog.convert(frag, ports=[rf.adr, rf.dat_r, rf.dat_w, rf.we]))
if __name__ == "__main__":
rf = RegisterFile()
main(rf, ports=[rf.adr, rf.dat_r, rf.dat_w, rf.we])

View file

@ -1,5 +1,5 @@
from nmigen import *
from nmigen.back import rtlil, verilog
from nmigen.cli import main
class ParMux:
@ -24,7 +24,6 @@ class ParMux:
return m.lower(platform)
pmux = ParMux(width=16)
frag = pmux.get_fragment(platform=None)
# print(rtlil.convert(frag, ports=[pmux.s, pmux.a, pmux.b, pmux.c, pmux.o]))
print(verilog.convert(frag, ports=[pmux.s, pmux.a, pmux.b, pmux.c, pmux.o]))
if __name__ == "__main__":
pmux = ParMux(width=16)
main(pmux, ports=[pmux.s, pmux.a, pmux.b, pmux.c, pmux.o])