gen/genlib/cdc/gearbox: add more margin on pointers (for cases where clocks are not perfectly aligned)

This commit is contained in:
Florent Kermarrec 2017-05-31 12:10:06 +02:00
parent 4bc6cf6165
commit ff2a9c2176
1 changed files with 4 additions and 3 deletions

View File

@ -224,11 +224,12 @@ class Gearbox(Module):
]
self.clock_domains += cd_write, cd_read
storage = Signal(lcm(iwidth, owidth))
# TODO: optimize storage/resets for lowest ressource usage / lowest latency
storage = Signal(2*lcm(iwidth, owidth))
wrchunks = len(storage)//iwidth
rdchunks = len(storage)//owidth
wrpointer = Signal(max=wrchunks, reset=0 if iwidth > owidth else wrchunks-1)
rdpointer = Signal(max=rdchunks, reset=rdchunks-1 if iwidth > owidth else 0)
wrpointer = Signal(max=wrchunks, reset=0 if iwidth > owidth else wrchunks//2)
rdpointer = Signal(max=rdchunks, reset=rdchunks//2 if iwidth > owidth else 0)
self.sync.write += \
If(wrpointer == wrchunks-1,