From 28c539302c131b77b3daba42a72b6d358ab0b63f Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Wed, 17 May 2023 08:26:11 +0200
Subject: [PATCH] Added ring control points usage.

---
 .../sdp_ring_settings_per_station.txt         | 228 ++++++++++++++++++
 1 file changed, 228 insertions(+)
 create mode 100644 applications/lofar2/doc/prestudy/sdp_ring_settings_per_station.txt

diff --git a/applications/lofar2/doc/prestudy/sdp_ring_settings_per_station.txt b/applications/lofar2/doc/prestudy/sdp_ring_settings_per_station.txt
new file mode 100644
index 0000000000..f145caafba
--- /dev/null
+++ b/applications/lofar2/doc/prestudy/sdp_ring_settings_per_station.txt
@@ -0,0 +1,228 @@
+###############################################################################
+# Title: Ring settings per station
+#
+# Author: Eric Kooistra
+# Date: 17 May 2023
+#
+###############################################################################
+
+Contents:
+1) SDP parameter definitions
+2) Ring configurations
+3) Ring setup control points
+4) Verify ring setup
+
+References:
+[1] https://support.astron.nl/confluence/display/L2M/L3+Station+Digital+Processor+Design+Document
+[2] https://support.astron.nl/confluence/display/L2M/L3+SDP+Decision%3A+SDP+Parameter+definitions
+[3] https://support.astron.nl/confluence/display/L2M/L2+STAT+Decision%3A+SC+-+SDP+OPC-UA+interface
+[4] https://support.astron.nl/confluence/display/L2M/L2+STAT+Decision%3A+SC+-+SDP+OPC-UA+interface+presentation
+
+
+1) SDP parameter definitions [2]:
+
+LB = Low Band
+HB = High Band
+
+UniBoard2 has 4 nodes (FPGAs)
+
+RN = Ring Node index (range 0:15)
+GN = Global Node index (range 0:255)
+
+O_rn is GN index of first node in ring
+N_rn is number of nodes in the ring
+P_sq = N_rn // 2 + 1 , is number of XST cells per node
+N_hop = P_sq - 1, is number of transport hops along the ring for XST packets
+
+
+2) Ring configurations
+The ring settings define where the cable connections between UniBoard2 are and
+depend on the station type and antenna band [1]:
+
+a) LB: same in all stations:
+
+* SDPTR instance with:
+  . O_rn = 0
+  . N_rn = 16
+  . P_sq = 9
+  . RN 0:15 = GN 0:15
+  . RN: 0 1 2 3 cable 4 5 6 7 cable 8 9 10 11 cable 12 13 14 15 cable back to 0
+
+b) HB: different per station
+- International station:
+  * SDPTR instance with:
+    . O_rn = 16
+    . N_rn = 16
+    . P_sq = 9
+    . RN 0:15 = GN 16:31
+    . RN: 0 1 2 3 cable 4 5 6 7 cable 8 9 10 11 cable 12 13 14 15 cable back to 0
+
+- Remote station
+  * SDPTR instance with:
+    . O_rn = 16
+    . N_rn = 8
+    . P_sq = 5
+    . RN 0:7 = GN 16:23
+    . RN: 0 1 2 3 cable 4 5 6 7 cable back to 0
+
+- Core station
+  * HB ear 0: SDPTR instance with
+    . O_rn = 0
+    . N_rn = 4
+    . P_sq = 3
+    . RN 0:3 = GN 16:19
+    . RN: 0 1 2 3 cable back to 0
+  * HB ear 1: SDPTR instance with:
+    . O_rn = 20
+    . N_rn = 4
+    . P_sq = 3
+    . RN 0:3 = GN 20:23
+    . RN: 0 1 2 3 cable back to 0
+
+
+3) Ring setup control points
+
+In general form:
+
+# Ring common:
+FPGA_ring_node_offset_RW = [O_rn]*N_rn
+FPGA_ring_nof_nodes = [N_rn]*N_rn
+
+# XST setup:
+FPGA_xst_ring_nof_transport_hops = [N_hops]*N_rn
+
+Specified per ring configuration:
+
+a) LB all stations
+
+# Ring common:
+FPGA_ring_node_offset_RW = [0]*16
+FPGA_ring_nof_nodes = [16]*16
+FPGA_ring_use_cable_to_next_rn = [False,False,False,True,False,False,False,True,False,False,False,True,False,False,False,True]
+FPGA_ring_use_cable_to_previous_rn = [True,False,False,False,True,False,False,False,True,False,False,False,True,False,False,False]
+
+# XST setup:
+FPGA_xst_ring_nof_transport_hops = [8]*16
+
+# BF setup:
+FPGA_xst_ring_nof_transport_hops [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0]
+
+
+b1) HB international station
+
+# Ring common:
+FPGA_ring_node_offset_RW = [16]*16
+FPGA_ring_nof_nodes = [16]*16
+FPGA_ring_use_cable_to_next_rn = [False,False,False,True,False,False,False,True,False,False,False,True,False,False,False,True]
+FPGA_ring_use_cable_to_previous_rn = [True,False,False,False,True,False,False,False,True,False,False,False,True,False,False,False]
+
+# XST setup:
+FPGA_xst_ring_nof_transport_hops = [8]*16
+
+# BF setup:
+FPGA_xst_ring_nof_transport_hops [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0]
+
+
+b2) HB remote station
+
+# Ring common:
+FPGA_ring_node_offset_RW = [16]*8
+FPGA_ring_nof_nodes = [8]*8
+FPGA_ring_use_cable_to_next_rn = [False,False,False,True,False,False,False,True]
+FPGA_ring_use_cable_to_previous_rn = [True,False,False,False,True,False,False,False]
+
+# XST setup:
+FPGA_xst_ring_nof_transport_hops = [4]*16
+
+# BF setup:
+FPGA_xst_ring_nof_transport_hops [1,1,1,1,1,1,1,0]
+
+
+
+b3) HB core station
+
+HB ear-0:
+
+# Ring common:
+FPGA_ring_node_offset_RW = [16]*4
+FPGA_ring_nof_nodes = [4]*4
+FPGA_ring_use_cable_to_next_rn = [False,False,False,True]
+FPGA_ring_use_cable_to_previous_rn = [True,False,False,False]
+
+# XST setup:
+FPGA_xst_ring_nof_transport_hops = [2]*4
+
+# BF setup:
+FPGA_xst_ring_nof_transport_hops [1,1,1,0]
+
+
+HB ear-1:
+
+# Ring common:
+FPGA_ring_node_offset_RW = [20]*4
+FPGA_ring_nof_nodes = [4]*4
+FPGA_ring_use_cable_to_next_rn = [False,False,False,True]
+FPGA_ring_use_cable_to_previous_rn = [True,False,False,False]
+
+# XST setup:
+FPGA_xst_ring_nof_transport_hops = [2]*4
+
+# BF setup:
+FPGA_xst_ring_nof_transport_hops [1,1,1,0]
+
+
+
+4) Verify ring setup
+
+SDP processing enable:
+FPGA_processing_enable [True]*N_rn
+
+XST processing enable/restart:
+FPGA_processing_enable [True]*N_rn
+
+Then check packet arrival latencies along the ring via:
+
+FPGA_xst_ring_rx_latency_RW for XST packets
+FPGA_bf_ring_rx_latency_RW for beamlet packets
+
+Expected XST crosslet packet arrival latencies (unit 5 ns) for LB with N_rn = 16:
+
+kooistra@dop386:~/git/sdptr$ sdp_rw.py --host 10.99.0.250 --port 4842 -r xst_ring_rx_latency
+read xst_ring_rx_latency:
+node 64:  -1   -1   -1   -1   -1   -1   -1   -1   1791 1569 1349 1150 927  661  462  264
+node 65:  257  -1   -1   -1   -1   -1   -1   -1   -1   1786 1566 1365 1142 876  680  479
+node 66:  471  248  -1   -1   -1   -1   -1   -1   -1   -1   1777 1579 1357 1090 890  694
+node 67:  694  468  262  -1   -1   -1   -1   -1   -1   -1   -1   1798 1569 1341 1103 920
+node 68:  921  679  479  256  -1   -1   -1   -1   -1   -1   -1   -1   1785 1566 1339 1142
+node 69:  1129 899  699  472  251  -1   -1   -1   -1   -1   -1   -1   -1   1787 1563 1356
+node 70:  1346 1122 921  697  469  263  -1   -1   -1   -1   -1   -1   -1   -1   1772 1570
+node 71:  1574 1347 1128 906  682  481  257  -1   -1   -1   -1   -1   -1   -1   -1   1793
+node 72:  1815 1589 1370 1151 908  707  484  287  -1   -1   -1   -1   -1   -1   -1   -1
+node 73:  -1   1804 1581 1363 1119 918  696  493  246  -1   -1   -1   -1   -1   -1   -1
+node 74:  -1   -1   1800 1579 1352 1134 909  707  460  255  -1   -1   -1   -1   -1   -1
+node 75:  -1   -1   -1   1794 1569 1345 1121 919  674  479  256  -1   -1   -1   -1   -1
+node 76:  -1   -1   -1   -1   1810 1589 1367 1145 901  705  484  283  -1   -1   -1   -1
+node 77:  -1   -1   -1   -1   -1   1795 1594 1352 1108 929  707  511  266  -1   -1   -1
+node 78:  -1   -1   -1   -1   -1   -1   1800 1576 1347 1147 919  718  489  247  -1   -1
+node 79:  -1   -1   -1   -1   -1   -1   -1   1801 1570 1353 1124 927  703  452  248  -1
+
+Expected beamlet packet arrival latencies (unit 5 ns) for LB with N_rn = 16:
+
+kooistra@dop386:~/git/sdptr$ sdp_rw.py --host 10.99.0.250 --port 4842 -r bf_ring_rx_latency
+read bf_ring_rx_latency:
+node 64:  -1
+node 65:  4884
+node 66:  6932
+node 67:  9000
+node 68:  11041
+node 69:  13094
+node 70:  15126
+node 71:  17178
+node 72:  19251
+node 73:  21269
+node 74:  23319
+node 75:  25366
+node 76:  27442
+node 77:  29471
+node 78:  31514
+node 79:  33574
-- 
GitLab