From: Sebastien Bourdeauducq Date: Fri, 15 Nov 2013 10:25:07 +0000 (+0100) Subject: framebuffer: reset VTG X-Git-Tag: 24jan2021_ls180~2805 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6cb18f5ce3c9c63250cfbe738b84ec7beb1a9412;p=litex.git framebuffer: reset VTG --- diff --git a/misoclib/framebuffer/__init__.py b/misoclib/framebuffer/__init__.py index ec49dba2..7399e403 100644 --- a/misoclib/framebuffer/__init__.py +++ b/misoclib/framebuffer/__init__.py @@ -32,6 +32,7 @@ class Framebuffer(Module, AutoCSR): self.comb += [ self.fi.trigger.eq(self._enable.storage), self.dma.generator.trigger.eq(self._enable.storage), + vtg.enable.eq(self._enable.storage) ] class Blender(PipelinedActor, AutoCSR): @@ -104,6 +105,7 @@ class MixFramebuffer(Module, AutoCSR): setattr(self, "dma"+str(n), dma) vtg = VTG() + self.comb += vtg.enable.eq(self._enable.storage) g.add_connection(self.fi, vtg, sink_ep="timing") g.add_connection(self.blender, vtg, sink_ep="pixels") g.add_connection(vtg, self.driver) diff --git a/misoclib/framebuffer/format.py b/misoclib/framebuffer/format.py index 7e422453..fdfc6433 100644 --- a/misoclib/framebuffer/format.py +++ b/misoclib/framebuffer/format.py @@ -50,6 +50,7 @@ class FrameInitiator(spi.SingleGenerator): class VTG(Module): def __init__(self): + self.enable = Signal() self.timing = Sink([ ("hres", _hbits), ("hsync_start", _hbits), @@ -63,6 +64,8 @@ class VTG(Module): self.phy = Source(phy_layout) self.busy = Signal() + ### + hactive = Signal() vactive = Signal() active = Signal() @@ -81,33 +84,39 @@ class VTG(Module): ), generate_en.eq(self.timing.stb & (~active | self.pixels.stb)), - self.pixels.ack.eq(self.phy.ack & active), + self.pixels.ack.eq(~self.enable | (self.phy.ack & active)), self.phy.stb.eq(generate_en), self.busy.eq(generate_en) ] tp = self.timing.payload self.sync += [ - self.timing.ack.eq(0), - If(generate_en & self.phy.ack, - hcounter.eq(hcounter + 1), - - If(hcounter == 0, hactive.eq(1)), - If(hcounter == tp.hres, hactive.eq(0)), - If(hcounter == tp.hsync_start, self.phy.payload.hsync.eq(1)), - If(hcounter == tp.hsync_end, self.phy.payload.hsync.eq(0)), - If(hcounter == tp.hscan, - hcounter.eq(0), - If(vcounter == tp.vscan, - vcounter.eq(0), - self.timing.ack.eq(1) - ).Else( - vcounter.eq(vcounter + 1) - ) - ), + If(self.enable, + self.timing.ack.eq(0), + If(generate_en & self.phy.ack, + hcounter.eq(hcounter + 1), - If(vcounter == 0, vactive.eq(1)), - If(vcounter == tp.vres, vactive.eq(0)), - If(vcounter == tp.vsync_start, self.phy.payload.vsync.eq(1)), - If(vcounter == tp.vsync_end, self.phy.payload.vsync.eq(0)) + If(hcounter == 0, hactive.eq(1)), + If(hcounter == tp.hres, hactive.eq(0)), + If(hcounter == tp.hsync_start, self.phy.payload.hsync.eq(1)), + If(hcounter == tp.hsync_end, self.phy.payload.hsync.eq(0)), + If(hcounter == tp.hscan, + hcounter.eq(0), + If(vcounter == tp.vscan, + vcounter.eq(0), + self.timing.ack.eq(1) + ).Else( + vcounter.eq(vcounter + 1) + ) + ), + + If(vcounter == 0, vactive.eq(1)), + If(vcounter == tp.vres, vactive.eq(0)), + If(vcounter == tp.vsync_start, self.phy.payload.vsync.eq(1)), + If(vcounter == tp.vsync_end, self.phy.payload.vsync.eq(0)) + ) + ).Else( + self.timing.ack.eq(1), + hcounter.eq(0), + vcounter.eq(0) ) ]