1
0
Fork 0

cxp downconn: cleanup debug csr

This commit is contained in:
morgan 2024-08-23 16:02:19 +08:00
parent 7e6d4e186f
commit 679b430d74
1 changed files with 31 additions and 38 deletions

View File

@ -12,6 +12,7 @@ from operator import add
class CXP_DownConn(Module, AutoCSR): class CXP_DownConn(Module, AutoCSR):
def __init__(self, refclk, pads, sys_clk_freq, debug_sma, pmod_pads): def __init__(self, refclk, pads, sys_clk_freq, debug_sma, pmod_pads):
nconn = len(pads)
self.rx_start_init = CSRStorage() self.rx_start_init = CSRStorage()
self.rx_restart = CSR() self.rx_restart = CSR()
@ -19,9 +20,7 @@ class CXP_DownConn(Module, AutoCSR):
self.tx_restart = CSR() self.tx_restart = CSR()
self.txenable = CSRStorage() self.txenable = CSRStorage()
self.txinit_phaligndone = CSRStatus() self.rx_ready = CSRStatus(nconn)
self.rxinit_phaligndone = CSRStatus()
self.rx_ready = CSRStatus()
self.qpll_reset = CSR() self.qpll_reset = CSR()
self.qpll_locked = CSRStatus() self.qpll_locked = CSRStatus()
@ -36,7 +35,6 @@ class CXP_DownConn(Module, AutoCSR):
] ]
nconn = len(pads)
for i in range(nconn): for i in range(nconn):
if i != 0: if i != 0:
@ -65,9 +63,6 @@ class CXP_DownConn(Module, AutoCSR):
for gtx in self.gtxs: for gtx in self.gtxs:
self.sync += [ self.sync += [
self.txinit_phaligndone.status.eq(gtx.tx_init.Xxphaligndone),
self.rxinit_phaligndone.status.eq(gtx.rx_init.Xxphaligndone),
self.rx_ready.status.eq(gtx.rx_ready),
gtx.txenable.eq(self.txenable.storage[0]), gtx.txenable.eq(self.txenable.storage[0]),
gtx.tx_restart.eq(self.tx_restart.re), gtx.tx_restart.eq(self.tx_restart.re),
@ -78,7 +73,6 @@ class CXP_DownConn(Module, AutoCSR):
self.comb += gtx.dclk.eq(ClockSignal("sys")) self.comb += gtx.dclk.eq(ClockSignal("sys"))
self.sync += [ self.sync += [
gtx.den.eq(0), gtx.den.eq(0),
gtx.dwen.eq(0), gtx.dwen.eq(0),
If(self.gtx_dread.re, If(self.gtx_dread.re,
@ -90,6 +84,12 @@ class CXP_DownConn(Module, AutoCSR):
gtx.daddr.eq(self.gtx_daddr.storage), gtx.daddr.eq(self.gtx_daddr.storage),
gtx.din.eq(self.gtx_din.storage), gtx.din.eq(self.gtx_din.storage),
), ),
]
# TODO: deal with 4 GTX instance of outpus
for n, gtx in enumerate(self.gtxs):
self.sync += [
self.rx_ready.status[n].eq(gtx.rx_ready),
If(gtx.dready, If(gtx.dready,
self.gtx_dready.w.eq(1), self.gtx_dready.w.eq(1),
self.gtx_dout.status.eq(gtx.dout), self.gtx_dout.status.eq(gtx.dout),
@ -115,6 +115,9 @@ class CXP_DownConn(Module, AutoCSR):
self.pll_dout = CSRStatus(16) self.pll_dout = CSRStatus(16)
self.pll_dready = CSRStatus() self.pll_dready = CSRStatus()
self.txinit_phaligndone = CSRStatus()
self.rxinit_phaligndone = CSRStatus()
for n, gtx in enumerate(self.gtxs): for n, gtx in enumerate(self.gtxs):
self.comb += [ self.comb += [
gtx.txpll_reset.eq(self.txpll_reset.storage), gtx.txpll_reset.eq(self.txpll_reset.storage),
@ -124,7 +127,8 @@ class CXP_DownConn(Module, AutoCSR):
gtx.pll_din.eq(self.pll_din.storage), gtx.pll_din.eq(self.pll_din.storage),
gtx.pll_dwen.eq(self.pll_dwen.storage), gtx.pll_dwen.eq(self.pll_dwen.storage),
self.txpll_locked.status.eq(gtx.txpll_locked), self.txinit_phaligndone.status.eq(gtx.tx_init.Xxphaligndone),
self.rxinit_phaligndone.status.eq(gtx.rx_init.Xxphaligndone), self.txpll_locked.status.eq(gtx.txpll_locked),
self.pll_dout.status.eq(gtx.pll_dout), self.pll_dout.status.eq(gtx.pll_dout),
self.pll_dready.status.eq(gtx.pll_dready), self.pll_dready.status.eq(gtx.pll_dready),
] ]
@ -169,38 +173,29 @@ class CXP_DownConn(Module, AutoCSR):
gtx.encoder.k[3].eq(0), gtx.encoder.k[3].eq(0),
] ]
self.rxdata_0 = CSRStatus(10) for i in range(4):
self.rxdata_1 = CSRStatus(10) gtx.decoders[i].input.attr.add("no_retiming")
self.rxdata_2 = CSRStatus(10) gtx.decoders[i].d.attr.add("no_retiming")
self.rxdata_3 = CSRStatus(10) gtx.decoders[i].k.attr.add("no_retiming")
self.decoded_data_0 = CSRStatus(8)
self.decoded_data_1 = CSRStatus(8) rxdata_name = "rxdata_" + str(i)
self.decoded_data_2 = CSRStatus(8) rxdata_csr = CSRStatus(10, name=rxdata_name)
self.decoded_data_3 = CSRStatus(8) setattr(self, rxdata_name, rxdata_csr)
self.decoded_k_0 = CSRStatus()
self.decoded_k_1 = CSRStatus() decoded_name = "decoded_data_" + str(i)
self.decoded_k_2 = CSRStatus() decoded_csr = CSRStatus(8, name=decoded_name)
self.decoded_k_3 = CSRStatus() setattr(self, decoded_name, decoded_csr)
k_name = "rxdata_" + str(i)
k_csr = CSRStatus(1, name=k_name)
setattr(self, k_name, k_csr)
self.sync.cxp_gtx_rx += [ self.sync.cxp_gtx_rx += [
self.rxdata_0.status.eq(gtx.decoders[0].input), rxdata_csr.status.eq(gtx.decoders[i].input),
self.decoded_data_0.status.eq(gtx.decoders[0].d), decoded_csr.status.eq(gtx.decoders[i].d),
self.decoded_k_0.status.eq(gtx.decoders[0].k), k_csr.status.eq(gtx.decoders[i].k),
self.rxdata_1.status.eq(gtx.decoders[1].input),
self.decoded_data_1.status.eq(gtx.decoders[1].d),
self.decoded_k_1.status.eq(gtx.decoders[1].k),
self.rxdata_2.status.eq(gtx.decoders[2].input),
self.decoded_data_2.status.eq(gtx.decoders[2].d),
self.decoded_k_2.status.eq(gtx.decoders[2].k),
self.rxdata_3.status.eq(gtx.decoders[3].input),
self.decoded_data_3.status.eq(gtx.decoders[3].d),
self.decoded_k_3.status.eq(gtx.decoders[3].k),
] ]
class QPLL(Module, AutoCSR): class QPLL(Module, AutoCSR):
def __init__(self, refclk, sys_clk_freq): def __init__(self, refclk, sys_clk_freq):
self.clk = Signal() self.clk = Signal()
@ -392,8 +387,6 @@ class Comma_Checker(Module):
rxfsm.act("WAIT_COMMA", rxfsm.act("WAIT_COMMA",
If(self.comma_det, If(self.comma_det,
# # start aligner early, so word aligned will fall
# self.aligner_en_rxclk.eq(1),
NextState("ALIGNING"), NextState("ALIGNING"),
) )
) )