usb3_core: continue integration

This commit is contained in:
Florent Kermarrec 2019-11-22 16:18:25 +01:00
parent 8732c59a57
commit 492a617dd9
3 changed files with 8 additions and 3 deletions

View File

@ -62,6 +62,7 @@ class USB3Core(Module, AutoCSR):
u0_timer = ResetInserter()(u0_timer)
self.submodules += u0_timer
self.comb += u0_timer.wait.eq(1)
self.comb += u0_timer.reset.eq(self.reset)
LT_POLLING_IDLE = 15
LT_POLLING_U0 = 16

View File

@ -9,6 +9,7 @@ from usb3_pipe.lfps import LFPSUnit
from usb3_pipe.training import TSUnit
from usb3_pipe.ltssm import LTSSM
from usb3_pipe.scrambling import Scrambler, Descrambler
from usb3_pipe.serdes import RXWordAligner
# USB3 PIPE ----------------------------------------------------------------------------------------
@ -47,12 +48,15 @@ class USB3PIPE(Module):
If(ltssm.polling.tx_ready, scrambler.source.connect(serdes.sink))
]
aligner = RXWordAligner(check_ctrl_only=True) # FIXME: can we avoid alignment here?
self.submodules.aligner = aligner
descrambler = Descrambler()
descrambler = CEInserter()(descrambler)
self.comb += descrambler.ce.eq(ltssm.polling.rx_ready)
self.submodules.descrambler = descrambler
self.comb += [
If(ltssm.polling.rx_ready, serdes.source.connect(descrambler.sink)),
If(ltssm.polling.rx_ready, serdes.source.connect(aligner.sink)),
aligner.source.connect(descrambler.sink),
descrambler.source.connect(self.source),
]
else:

View File

@ -85,7 +85,7 @@ class RXSkipRemover(Module):
# RX Aligner ---------------------------------------------------------------------------------------
class RXWordAligner(Module):
def __init__(self):
def __init__(self, check_ctrl_only=False):
self.enable = Signal(reset=1)
self.sink = sink = stream.Endpoint([("data", 32), ("ctrl", 4)])
self.source = source = stream.Endpoint([("data", 32), ("ctrl", 4)])
@ -107,7 +107,7 @@ class RXWordAligner(Module):
for i in reversed(range(4)):
self.comb += [
If(sink.valid & sink.ready,
If(sink.ctrl[i] & (sink.data[8*i:8*(i+1)] == COM.value),
If(sink.ctrl[i] & (check_ctrl_only | (sink.data[8*i:8*(i+1)] == COM.value)),
alignment.eq(i)
)
)