mirror of
https://github.com/fpganinja/taxi.git
synced 2026-04-08 04:58:43 -07:00
eth: Add APB register interface to US/US+ transceiver wrappers
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
@@ -28,6 +28,7 @@ from cocotb.regression import TestFactory
|
||||
|
||||
from cocotbext.eth import XgmiiFrame, PtpClockSimTime
|
||||
from cocotbext.axi import AxiStreamBus, AxiStreamSource, AxiStreamSink, AxiStreamFrame
|
||||
from cocotbext.axi import ApbBus, ApbMaster
|
||||
|
||||
try:
|
||||
from baser import BaseRSerdesSource, BaseRSerdesSink
|
||||
@@ -51,6 +52,8 @@ class TB:
|
||||
cocotb.start_soon(Clock(dut.stat_clk, 8, units="ns").start())
|
||||
cocotb.start_soon(Clock(dut.xcvr_gtrefclk00_in, 6.206, units="ns").start())
|
||||
|
||||
self.apb_ctrl = ApbMaster(ApbBus.from_entity(dut.s_apb_ctrl), dut.xcvr_ctrl_clk, dut.xcvr_ctrl_rst)
|
||||
|
||||
self.serdes_sources = []
|
||||
self.serdes_sinks = []
|
||||
|
||||
@@ -179,6 +182,24 @@ class TB:
|
||||
await RisingEdge(self.dut.xcvr_ctrl_clk)
|
||||
|
||||
|
||||
async def run_test_regs(dut):
|
||||
tb = TB(dut)
|
||||
await tb.reset()
|
||||
|
||||
data = await tb.apb_ctrl.read(0x00000, 2)
|
||||
data = await tb.apb_ctrl.read(0x04000, 2)
|
||||
data = await tb.apb_ctrl.read(0x08000, 2)
|
||||
data = await tb.apb_ctrl.read(0x0C000, 2)
|
||||
|
||||
data = await tb.apb_ctrl.read(0x10000, 2)
|
||||
data = await tb.apb_ctrl.read(0x14000, 2)
|
||||
data = await tb.apb_ctrl.read(0x18000, 2)
|
||||
data = await tb.apb_ctrl.read(0x1C000, 2)
|
||||
|
||||
for k in range(10):
|
||||
await RisingEdge(dut.xcvr_ctrl_clk)
|
||||
|
||||
|
||||
async def run_test_rx(dut, port=0, payload_lengths=None, payload_data=None, ifg=12):
|
||||
|
||||
if dut.DATA_W.value == 64:
|
||||
@@ -915,6 +936,9 @@ def cycle_en():
|
||||
|
||||
if getattr(cocotb, 'top', None) is not None:
|
||||
|
||||
factory = TestFactory(run_test_regs)
|
||||
factory.generate_tests()
|
||||
|
||||
for test in [run_test_rx, run_test_tx]:
|
||||
|
||||
factory = TestFactory(test)
|
||||
|
||||
@@ -75,6 +75,12 @@ localparam RX_USER_W = (PTP_TS_EN ? PTP_TS_W : 0) + 1;
|
||||
logic xcvr_ctrl_clk;
|
||||
logic xcvr_ctrl_rst;
|
||||
|
||||
// transceiver control
|
||||
taxi_apb_if #(
|
||||
.ADDR_W(24),
|
||||
.DATA_W(16)
|
||||
) s_apb_ctrl();
|
||||
|
||||
logic xcvr_gtpowergood_out;
|
||||
logic xcvr_gtrefclk00_in;
|
||||
logic xcvr_qpll0pd_in;
|
||||
@@ -276,6 +282,11 @@ uut (
|
||||
.xcvr_ctrl_clk(xcvr_ctrl_clk),
|
||||
.xcvr_ctrl_rst(xcvr_ctrl_rst),
|
||||
|
||||
/*
|
||||
* Transceiver control
|
||||
*/
|
||||
.s_apb_ctrl(s_apb_ctrl),
|
||||
|
||||
/*
|
||||
* Common
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user