add test, temporary comb variable to stage2
[ieee754fpu.git] / src / add / pipeline_example.py
1 """ Example 5: Making use of PyRTL and Introspection. """
2
3 from nmigen import Module, Signal
4 from nmigen.cli import main, verilog
5
6
7 from pipeline import SimplePipeline
8
9
10 class SimplePipelineExample(SimplePipeline):
11 """ A very simple pipeline to show how registers are inferred. """
12
13 def __init__(self, pipe):
14 SimplePipeline.__init__(self, pipe)
15 self._loopback = Signal(4)
16 self._setup()
17
18 def stage0(self):
19 self.n = ~self._loopback
20
21 def stage1(self):
22 self.n = self.n + 1
23
24 def stage2(self):
25 localv = Signal(4)
26 self._pipe.comb += localv.eq(2)
27 self.n = self.n << localv
28
29 def stage3(self):
30 self.n = ~self.n
31
32 def stage4(self):
33 self._pipe.sync += self._loopback.eq(self.n + 3)
34
35 class PipeModule:
36
37 def __init__(self):
38 self.m = Module()
39 self.p = SimplePipelineExample(self.m.d)
40
41 def get_fragment(self, platform=None):
42 return self.m
43
44 if __name__ == "__main__":
45 example = PipeModule()
46 main(example, ports=[
47 example.p._loopback,
48 ])
49
50 #print(verilog.convert(example, ports=[
51 # example.p._loopback,
52 # ]))