1 """ Example 5: Making use of PyRTL and Introspection. """
3 from nmigen
import Module
, Signal
4 from nmigen
.cli
import main
, verilog
7 from pipeline
import SimplePipeline
, ObjectProxy
10 class SimplePipelineExample(SimplePipeline
):
11 """ A very simple pipeline to show how registers are inferred. """
13 def __init__(self
, pipe
):
14 SimplePipeline
.__init
__(self
, pipe
)
15 self
._loopback
= Signal(4)
16 self
._obj
= ObjectProxy(pipe
)
17 self
._obj
.a
= Signal(4)
18 self
._obj
.b
= Signal(4)
22 self
.n
= ~self
._loopback
26 self
.n
= self
.n
+ self
.o
.a
33 self
._pipe
.comb
+= localv
.eq(2)
34 self
.n
= self
.n
<< localv
36 self
.o
.b
= self
.n
+ self
.o
.a
+ self
.o
.b
41 self
.o
.b
= self
.o
.b
+ self
.n
45 self
._pipe
.sync
+= self
._loopback
.eq(self
.n
+ 3 + self
.o
.b
)
51 self
.p
= SimplePipelineExample(self
.m
.d
)
53 def get_fragment(self
, platform
=None):
56 if __name__
== "__main__":
57 example
= PipeModule()
62 #print(verilog.convert(example, ports=[
63 # example.p._loopback,