Skip to content

Commit

Permalink
phy/pcs_1000basex/PCS: Cleanup checker signal names, avoid ceil on ti…
Browse files Browse the repository at this point in the history
…mer values since this level of precision is not relevant.
  • Loading branch information
enjoy-digital committed Oct 15, 2024
1 parent 01b91a3 commit fe69248
Showing 1 changed file with 16 additions and 19 deletions.
35 changes: 16 additions & 19 deletions liteeth/phy/pcs_1000basex.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
# Copyright (c) 2024 Florent Kermarrec <[email protected]>
# SPDX-License-Identifier: BSD-2-Clause

from math import ceil

from migen import *
from migen.genlib.fsm import *
from migen.genlib.cdc import PulseSynchronizer
Expand Down Expand Up @@ -297,25 +295,24 @@ def __init__(self, lsb_first=False, check_period=6e-3, more_ack_time=10e-3):
self.comb += self.source.last.eq(~self.rx.source.valid & rx_source_valid_d)

# Seen Valid Synchronizer.
seen_valid_ci = PulseSynchronizer("eth_rx", "eth_tx")
self.submodules += seen_valid_ci
self.seen_valid_ci = seen_valid_ci = PulseSynchronizer("eth_rx", "eth_tx")
self.comb += seen_valid_ci.i.eq(self.rx.seen_valid_ci)

# Checker.
checker_max_val = ceil(check_period*125e6)
checker_counter = Signal(max=checker_max_val+1)
checker_tick = Signal()
checker_ok = Signal()
checker_max = int(check_period*125e6)
checker_count = Signal(max=checker_max + 1)
checker_tick = Signal()
checker_error = Signal()
self.sync.eth_tx += [
checker_tick.eq(0),
If(checker_counter == 0,
If(checker_count == 0,
checker_tick.eq(1),
checker_counter.eq(checker_max_val)
checker_count.eq(checker_max)
).Else(
checker_counter.eq(checker_counter-1)
checker_count.eq(checker_count - 1)
),
If(seen_valid_ci.o, checker_ok.eq(1)),
If(checker_tick, checker_ok.eq(0))
If(seen_valid_ci.o, checker_error.eq(0)),
If(checker_tick, checker_error.eq(1))
]

# Control if tx_config_reg should be empty.
Expand Down Expand Up @@ -351,9 +348,9 @@ def __init__(self, lsb_first=False, check_period=6e-3, more_ack_time=10e-3):
rx_config_reg_ack = PulseSynchronizer("eth_rx", "eth_tx")
self.submodules += rx_config_reg_abi, rx_config_reg_ack

self.more_ack_timer = more_ack_timer = ClockDomainsRenamer("eth_tx")(WaitTimer(ceil(more_ack_time*125e6)))
self.more_ack_timer = more_ack_timer = ClockDomainsRenamer("eth_tx")(WaitTimer(more_ack_time*125e6))
# SGMII: use 1.6ms link_timer
self.sgmii_ack_timer = sgmii_ack_timer = ClockDomainsRenamer("eth_tx")(WaitTimer(ceil(1.6e-3*125e6)))
self.sgmii_ack_timer = sgmii_ack_timer = ClockDomainsRenamer("eth_tx")(WaitTimer(1.6e-3*125e6))

self.fsm = fsm = ClockDomainsRenamer("eth_tx")(FSM())
# AN_ENABLE
Expand All @@ -372,7 +369,7 @@ def __init__(self, lsb_first=False, check_period=6e-3, more_ack_time=10e-3):
If(rx_config_reg_abi.o,
NextState("AUTONEG_WAIT_ACK")
),
If((checker_tick & ~checker_ok) | rx_config_reg_ack.o,
If((checker_tick & checker_error) | rx_config_reg_ack.o,
self.restart.eq(1),
NextState("AUTONEG_BREAKLINK")
)
Expand All @@ -384,7 +381,7 @@ def __init__(self, lsb_first=False, check_period=6e-3, more_ack_time=10e-3):
If(rx_config_reg_ack.o,
NextState("AUTONEG_SEND_MORE_ACK")
),
If(checker_tick & ~checker_ok,
If(checker_tick & checker_error,
self.restart.eq(1),
NextState("AUTONEG_BREAKLINK")
)
Expand All @@ -399,15 +396,15 @@ def __init__(self, lsb_first=False, check_period=6e-3, more_ack_time=10e-3):
(~is_sgmii & more_ack_timer.done),
NextState("RUNNING")
),
If(checker_tick & ~checker_ok,
If(checker_tick & checker_error,
self.restart.eq(1),
NextState("AUTONEG_BREAKLINK")
)
)
# LINK_OK
fsm.act("RUNNING",
self.link_up.eq(1),
If((checker_tick & ~checker_ok) | linkdown,
If((checker_tick & checker_error) | linkdown,
self.restart.eq(1),
NextState("AUTONEG_BREAKLINK")
)
Expand Down

0 comments on commit fe69248

Please sign in to comment.