mirror of
https://github.com/enjoy-digital/usb3_pipe.git
synced 2025-01-04 10:18:41 +08:00
usb3_core: continue integration
This commit is contained in:
parent
8732c59a57
commit
492a617dd9
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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)
|
||||
)
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user