serwb/phy: improve/cleanup init

This commit is contained in:
Florent Kermarrec 2018-05-12 01:35:34 +02:00
parent b6ab59fb80
commit 0a6d4ccd85

View File

@ -104,6 +104,9 @@ class _SerdesMasterInit(Module):
NextState("ERROR") NextState("ERROR")
).Else( ).Else(
NextValue(delay_min_found, 0), NextValue(delay_min_found, 0),
NextValue(delay_min, 0),
NextValue(delay_max_found, 0),
NextValue(delay_max, 0),
NextValue(bitslip, bitslip + 1) NextValue(bitslip, bitslip + 1)
), ),
NextValue(delay, 0), NextValue(delay, 0),
@ -118,10 +121,12 @@ class _SerdesMasterInit(Module):
If((delay_min == 0) | If((delay_min == 0) |
(delay_max == (taps - 1)) | (delay_max == (taps - 1)) |
((delay_max - delay_min) < taps//16), ((delay_max - delay_min) < taps//16),
NextValue(delay_min_found, 0), # switch to next bitslip
NextValue(delay_max_found, 0), NextValue(delay, taps - 1),
NextState("WAIT_STABLE") NextState("INC_DELAY_BITSLIP")
).Else( ).Else(
NextValue(delay, 0),
serdes.rx_delay_rst.eq(1),
NextState("CONFIGURE_SAMPLING_WINDOW") NextState("CONFIGURE_SAMPLING_WINDOW")
), ),
serdes.tx_comma.eq(1) serdes.tx_comma.eq(1)
@ -131,16 +136,7 @@ class _SerdesMasterInit(Module):
NextState("READY") NextState("READY")
).Else( ).Else(
NextValue(delay, delay + 1), NextValue(delay, delay + 1),
serdes.rx_delay_inc.eq(1), serdes.rx_delay_inc.eq(1)
NextState("WAIT_SAMPLING_WINDOW")
),
serdes.tx_comma.eq(1)
)
fsm.act("WAIT_SAMPLING_WINDOW",
timer.wait.eq(1),
If(timer.done,
timer.wait.eq(0),
NextState("CONFIGURE_SAMPLING_WINDOW")
), ),
serdes.tx_comma.eq(1) serdes.tx_comma.eq(1)
) )
@ -225,6 +221,9 @@ class _SerdesSlaveInit(Module, AutoCSR):
NextState("ERROR") NextState("ERROR")
).Else( ).Else(
NextValue(delay_min_found, 0), NextValue(delay_min_found, 0),
NextValue(delay_min, 0),
NextValue(delay_max_found, 0),
NextValue(delay_max, 0),
NextValue(bitslip, bitslip + 1) NextValue(bitslip, bitslip + 1)
), ),
NextValue(delay, 0), NextValue(delay, 0),
@ -239,10 +238,12 @@ class _SerdesSlaveInit(Module, AutoCSR):
If((delay_min == 0) | If((delay_min == 0) |
(delay_max == (taps - 1)) | (delay_max == (taps - 1)) |
((delay_max - delay_min) < taps//16), ((delay_max - delay_min) < taps//16),
NextValue(delay_min_found, 0), # switch to next bitslip
NextValue(delay_max_found, 0), NextValue(delay, taps - 1),
NextState("WAIT_STABLE") NextState("INC_DELAY_BITSLIP")
).Else( ).Else(
NextValue(delay, 0),
serdes.rx_delay_rst.eq(1),
NextState("CONFIGURE_SAMPLING_WINDOW") NextState("CONFIGURE_SAMPLING_WINDOW")
), ),
serdes.tx_idle.eq(1) serdes.tx_idle.eq(1)
@ -253,20 +254,13 @@ class _SerdesSlaveInit(Module, AutoCSR):
).Else( ).Else(
NextValue(delay, delay + 1), NextValue(delay, delay + 1),
serdes.rx_delay_inc.eq(1), serdes.rx_delay_inc.eq(1),
NextState("WAIT_SAMPLING_WINDOW") ),
) serdes.tx_idle.eq(1)
)
fsm.act("WAIT_SAMPLING_WINDOW",
timer.wait.eq(1),
If(timer.done,
timer.wait.eq(0),
NextState("CONFIGURE_SAMPLING_WINDOW")
)
) )
fsm.act("SEND_PATTERN", fsm.act("SEND_PATTERN",
If(~serdes.rx_comma,
timer.wait.eq(1), timer.wait.eq(1),
If(timer.done, If(timer.done,
If(~serdes.rx_comma,
NextState("READY") NextState("READY")
) )
), ),