mirror of
https://github.com/EttusResearch/uhd.git
synced 2026-10-25 17:36:10 +00:00
Increase the control SeqNum field width from 6 bits to 8 bits. See the updates to rfnoc_fpga.md for details.
195 lines
6.2 KiB
Python
195 lines
6.2 KiB
Python
#
|
|
# Copyright 2020 Ettus Research, a National Instruments Brand
|
|
#
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
#
|
|
from uhd import chdr
|
|
from chdr_resource import rfnoc_packets_data
|
|
from chdr_resource import rfnoc_packets_ctrl_mgmt
|
|
|
|
CHDR_W = chdr.ChdrWidth.W64
|
|
|
|
def make_control_packet0():
|
|
header = chdr.ChdrHeader()
|
|
header.pkt_type = chdr.PacketType.CTRL
|
|
header.length = 20
|
|
header.dst_epid = 2
|
|
payload = chdr.CtrlPayload()
|
|
payload.src_epid = 1
|
|
payload.set_data([])
|
|
payload.req_size = 1
|
|
payload.op_code = chdr.CtrlOpCode.READ
|
|
return chdr.ChdrPacket(CHDR_W, header, payload)
|
|
|
|
def make_control_packet1():
|
|
header = chdr.ChdrHeader()
|
|
header.pkt_type = chdr.PacketType.CTRL
|
|
header.length = 24
|
|
header.dst_epid = 1
|
|
payload = chdr.CtrlPayload()
|
|
payload.src_epid = 2
|
|
payload.is_ack = True
|
|
payload.set_data([0x12C60100])
|
|
payload.req_size = 1
|
|
payload.op_code = chdr.CtrlOpCode.READ
|
|
return chdr.ChdrPacket(CHDR_W, header, payload)
|
|
|
|
def make_mgmt_packet0():
|
|
header = chdr.ChdrHeader()
|
|
header.pkt_type = chdr.PacketType.MGMT
|
|
header.length = 48
|
|
header.seq_num = 2
|
|
payload = chdr.MgmtPayload()
|
|
payload.set_header(1, (1 << 8) | (0 << 0), chdr.ChdrWidth.W64)
|
|
hop1 = chdr.MgmtHop()
|
|
hop1.add_op(chdr.MgmtOp(chdr.MgmtOpCode.NOP))
|
|
payload.add_hop(hop1)
|
|
hop2 = chdr.MgmtHop()
|
|
hop2.add_op(chdr.MgmtOp(chdr.MgmtOpCode.INFO_REQ, chdr.MgmtOpNodeInfo(0, 0, 0, 0)))
|
|
hop2.add_op(chdr.MgmtOp(chdr.MgmtOpCode.RETURN))
|
|
payload.add_hop(hop2)
|
|
hop3 = chdr.MgmtHop()
|
|
hop3.add_op(chdr.MgmtOp(chdr.MgmtOpCode.NOP))
|
|
payload.add_hop(hop3)
|
|
return chdr.ChdrPacket(CHDR_W, header, payload)
|
|
|
|
def make_mgmt_packet1():
|
|
header = chdr.ChdrHeader()
|
|
header.pkt_type = chdr.PacketType.MGMT
|
|
header.length = 48
|
|
header.seq_num = 3
|
|
payload = chdr.MgmtPayload()
|
|
payload.set_header(1, (1 << 8) | (0 << 0), chdr.ChdrWidth.W64)
|
|
hop1 = chdr.MgmtHop()
|
|
hop1.add_op(chdr.MgmtOp(chdr.MgmtOpCode.NOP))
|
|
payload.add_hop(hop1)
|
|
hop2 = chdr.MgmtHop()
|
|
hop2.add_op(chdr.MgmtOp(chdr.MgmtOpCode.CFG_WR_REQ, chdr.MgmtOpCfg(0x1, 0x2)))
|
|
hop2.add_op(chdr.MgmtOp(chdr.MgmtOpCode.RETURN))
|
|
payload.add_hop(hop2)
|
|
hop3 = chdr.MgmtHop()
|
|
hop3.add_op(chdr.MgmtOp(chdr.MgmtOpCode.NOP))
|
|
payload.add_hop(hop3)
|
|
return chdr.ChdrPacket(CHDR_W, header, payload)
|
|
|
|
def make_mgmt_packet2():
|
|
header = chdr.ChdrHeader()
|
|
header.pkt_type = chdr.PacketType.MGMT
|
|
header.length = 56
|
|
header.seq_num = 6
|
|
payload = chdr.MgmtPayload()
|
|
payload.set_header(1, (1 << 8) | (0 << 0), chdr.ChdrWidth.W64)
|
|
hop1 = chdr.MgmtHop()
|
|
hop1.add_op(chdr.MgmtOp(chdr.MgmtOpCode.NOP))
|
|
payload.add_hop(hop1)
|
|
hop2 = chdr.MgmtHop()
|
|
hop2.add_op(chdr.MgmtOp(chdr.MgmtOpCode.SEL_DEST, chdr.MgmtOpSelDest(3)))
|
|
payload.add_hop(hop2)
|
|
hop3 = chdr.MgmtHop()
|
|
hop3.add_op(chdr.MgmtOp(chdr.MgmtOpCode.INFO_REQ, 0))
|
|
hop3.add_op(chdr.MgmtOp(chdr.MgmtOpCode.RETURN, 0))
|
|
payload.add_hop(hop3)
|
|
hop4 = chdr.MgmtHop()
|
|
hop4.add_op(chdr.MgmtOp(chdr.MgmtOpCode.NOP, 0))
|
|
payload.add_hop(hop4)
|
|
return chdr.ChdrPacket(CHDR_W, header, payload)
|
|
|
|
def make_strs_packet0():
|
|
header = chdr.ChdrHeader()
|
|
header.pkt_type = chdr.PacketType.STRS
|
|
header.length = 40
|
|
header.dst_epid = 2
|
|
payload = chdr.StrsPayload()
|
|
payload.capacity_bytes = 163840
|
|
payload.src_epid = 3
|
|
payload.capacity_pkts = 16777215
|
|
return chdr.ChdrPacket(CHDR_W, header, payload)
|
|
|
|
def make_strs_packet1():
|
|
header = chdr.ChdrHeader()
|
|
header.pkt_type = chdr.PacketType.STRS
|
|
header.length = 40
|
|
header.dst_epid = 2
|
|
payload = chdr.StrsPayload()
|
|
payload.capacity_bytes = 163840
|
|
payload.src_epid = 3
|
|
payload.xfer_count_pkts = 1
|
|
payload.capacity_pkts = 16777215
|
|
payload.xfer_count_bytes = 8000
|
|
return chdr.ChdrPacket(CHDR_W, header, payload)
|
|
|
|
def make_strc_packet0():
|
|
header = chdr.ChdrHeader()
|
|
header.pkt_type = chdr.PacketType.STRC
|
|
header.length = 24
|
|
header.dst_epid = 3
|
|
payload = chdr.StrcPayload()
|
|
payload.num_pkts = 16777215
|
|
payload.op_code = chdr.StrcOpCode.INIT
|
|
payload.src_epid = 2
|
|
payload.num_bytes = 5120
|
|
return chdr.ChdrPacket(CHDR_W, header, payload)
|
|
|
|
def make_strc_packet1():
|
|
header = chdr.ChdrHeader()
|
|
header.pkt_type = chdr.PacketType.STRC
|
|
header.length = 24
|
|
header.dst_epid = 3
|
|
payload = chdr.StrcPayload()
|
|
payload.num_pkts = 21
|
|
payload.op_code = chdr.StrcOpCode.RESYNC
|
|
payload.src_epid = 2
|
|
payload.num_bytes = 168000
|
|
return chdr.ChdrPacket(CHDR_W, header, payload)
|
|
|
|
def make_data_packet0():
|
|
header = chdr.ChdrHeader()
|
|
header.pkt_type = chdr.PacketType.DATA_WITH_TS
|
|
header.length = 8000
|
|
header.dst_epid = 3
|
|
header.seq_num = 1
|
|
timestamp = 0x7C40C83
|
|
data_src = rfnoc_packets_data.peer1_9
|
|
data = bytes(data_src[(2 * 8) :])
|
|
return chdr.ChdrPacket(CHDR_W, header, data, timestamp)
|
|
|
|
def make_data_packet1():
|
|
header = chdr.ChdrHeader()
|
|
header.pkt_type = chdr.PacketType.DATA_WITH_TS
|
|
header.length = 4252
|
|
header.dst_epid = 3
|
|
header.eob = True
|
|
header.seq_num = 1716
|
|
timestamp = 0x21452B97
|
|
data_src = rfnoc_packets_data.eob_packet
|
|
data = bytes(data_src[(2 * 8) :])
|
|
return chdr.ChdrPacket(CHDR_W, header, data, timestamp)
|
|
|
|
packets = [
|
|
(make_control_packet0(), rfnoc_packets_ctrl_mgmt.peer0_19),
|
|
(make_control_packet1(), rfnoc_packets_ctrl_mgmt.peer1_17),
|
|
(make_mgmt_packet0(), rfnoc_packets_ctrl_mgmt.peer0_2),
|
|
(make_mgmt_packet1(), rfnoc_packets_ctrl_mgmt.peer0_3),
|
|
(make_mgmt_packet2(), rfnoc_packets_ctrl_mgmt.peer0_6),
|
|
(make_strs_packet0(), rfnoc_packets_data.peer0_5),
|
|
(make_strs_packet1(), rfnoc_packets_data.peer0_8),
|
|
(make_strc_packet0(), rfnoc_packets_data.peer1_5),
|
|
(make_strc_packet1(), rfnoc_packets_data.peer1_29),
|
|
(make_data_packet0(), rfnoc_packets_data.peer1_9),
|
|
(make_data_packet1(), rfnoc_packets_data.eob_packet),
|
|
]
|
|
|
|
names = [
|
|
"Control_Packet_0",
|
|
"Control_Packet_1",
|
|
"Management_Packet_0",
|
|
"Management_Packet_1",
|
|
"Management_Packet_2",
|
|
"Stream_Status_Packet_0",
|
|
"Stream_Status_Packet_1",
|
|
"Stream_Command_Packet_0",
|
|
"Stream_Command_Packet_1",
|
|
"Data_Packet_0",
|
|
"Data_Packet_1",
|
|
]
|