X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fadd%2Fpipeline_example.py;h=799caf6d15064b1e80fdb669df537ef9b38baeaf;hb=6bff1a997f3846872cf489c24b5c01426c4dc97c;hp=922355d64522344322f77158ca4dadebd87ac75a;hpb=f6ea2df8fab038595ab49aaceec8ef5cb1b06782;p=ieee754fpu.git diff --git a/src/add/pipeline_example.py b/src/add/pipeline_example.py index 922355d6..799caf6d 100644 --- a/src/add/pipeline_example.py +++ b/src/add/pipeline_example.py @@ -79,31 +79,32 @@ class PipeModule: self.m = Module() self.p = ObjectBasedPipelineExample(self.m) - def get_fragment(self, platform=None): + def elaborate(self, platform=None): return self.m class PipelineStageExample: def __init__(self): - self._loopback = Signal(4) + self._loopback = Signal(4, name="loopback") - def get_fragment(self, platform=None): + def elaborate(self, platform=None): m = Module() with PipeManager(m, pipemode=True) as pipe: - with pipe.Stage("first", ispec=[self._loopback]) as (p, m): - p.n = ~self._loopback + ispec={'loopback': self._loopback} + with pipe.Stage("first", ispec=ispec) as (p, m): + p.n = ~p.loopback with pipe.Stage("second", p) as (p, m): #p.n = ~self._loopback + 2 - p.n = p.n + 2 + p.n = p.n + Const(2) with pipe.Stage("third", p) as (p, m): #p.n = ~self._loopback + 5 localv = Signal(4) m.d.comb += localv.eq(2) - p.n = p.n << localv + 1 + p.n = p.n << localv + Const(1) #p.m = p.n + 2 print (pipe.stages) @@ -113,16 +114,16 @@ class PipelineStageExample: class PipelineStageObjectExample: def __init__(self): - self._loopback = Signal(4) + self.loopback = Signal(4) - def get_fragment(self, platform=None): + def elaborate(self, platform=None): m = Module() o = ObjectProxy(None, pipemode=False) o.a = Signal(4) o.b = Signal(4) - self._obj = o + self.obj = o localv2 = Signal(4) m.d.sync += localv2.eq(localv2 + 3) @@ -130,19 +131,20 @@ class PipelineStageObjectExample: #m.d.comb += self.obj.a.eq(localv2 + 1) #m.d.sync += self._loopback.eq(localv2) - ispec= [self._loopback, self._obj] + ispec= {'loopback': self.loopback, 'obj': self.obj} with PipeManager(m, pipemode=True) as pipe: - with pipe.Stage("first", - ispec=ispec) as (p, m): - p.n = ~self._loopback - p.o = self._obj + with pipe.Stage("first", ispec=ispec) as (p, m): + p.n = ~p.loopback + p.o = p.obj with pipe.Stage("second", p) as (p, m): - #p.n = ~self._loopback + 2 - p.n = p.n + Const(2) + #p.n = ~self.loopback + 2 + localn = Signal(4) + m.d.comb += localn.eq(p.n) o = ObjectProxy(None, pipemode=False) - o.c = p.n - o.d = p.o.b + p.n + Const(5) + o.c = localn + o.d = p.o.b + localn + Const(5) + p.n = localn p.o = o with pipe.Stage("third", p) as (p, m): #p.n = ~self._loopback + 5 @@ -163,7 +165,7 @@ class PipelineStageObjectExample2: def __init__(self): self._loopback = Signal(4) - def get_fragment(self, platform=None): + def elaborate(self, platform=None): m = Module() @@ -194,8 +196,9 @@ if __name__ == "__main__": f.write(rtlil.convert(example, ports=[ example._loopback, ])) + #exit(0) example = PipelineStageObjectExample() with open("pipe_stage_object_module.il", "w") as f: f.write(rtlil.convert(example, ports=[ - example._loopback, + example.loopback, ]))