framebuffer: work around dysfunctional Xst retiming
authorSebastien Bourdeauducq <sebastien@milkymist.org>
Thu, 13 Jun 2013 07:41:17 +0000 (09:41 +0200)
committerSebastien Bourdeauducq <sebastien@milkymist.org>
Thu, 13 Jun 2013 07:41:17 +0000 (09:41 +0200)
milkymist/framebuffer/__init__.py

index dff5817ae671fa58f33db49da2e7a19c8026836d..7911b32a946ab0b3fe8e4bdf19a1a57ecf6d4751 100644 (file)
@@ -53,7 +53,8 @@ class Framebuffer(Module):
 
 class Blender(PipelinedActor, AutoCSR):
        def __init__(self, nimages, latency):
-               self.sink = Sink([("i"+str(i), pixel_layout) for i in range(nimages)])
+               sink_layout = [("i"+str(i), pixel_layout) for i in range(nimages)]
+               self.sink = Sink(sink_layout)
                self.source = Source(pixel_layout)
                factors = []
                for i in range(nimages):
@@ -65,7 +66,10 @@ class Blender(PipelinedActor, AutoCSR):
 
                ###
 
-               imgs = [getattr(self.sink.payload, "i"+str(i)) for i in range(nimages)]
+               sink_registered = Record(sink_layout)
+               self.sync += If(self.pipe_ce, sink_registered.eq(self.sink.payload))
+
+               imgs = [getattr(sink_registered, "i"+str(i)) for i in range(nimages)]
                outval = Record(pixel_layout)
                for e in pixel_layout:
                        name = e[0]
@@ -85,7 +89,7 @@ class Blender(PipelinedActor, AutoCSR):
                                ]
 
                pipe_stmts = []
-               for i in range(latency):
+               for i in range(latency-1):
                        new_outval = Record(pixel_layout)
                        pipe_stmts.append(new_outval.eq(outval))
                        outval = new_outval