DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
timing
python
timing
cli
align.py
Go to the documentation of this file.
1
from
__future__
import
print_function
2
import
click
3
import
time
4
from
io
import
StringIO
5
import
traceback
6
7
# PDT imports
8
import
timing.cli.toolbox
as
toolbox
9
import
timing.common.definitions
as
defs
10
11
from
click
import
echo, style, secho
12
from
timing.common.definitions
import
kBoardSim, kBoardFMC, kBoardPC059, kBoardMicrozed, kBoardTLU, kBoardFIB, kBoardMIB
13
from
timing.common.definitions
import
kCarrierEnclustraA35, kCarrierKC705, kCarrierMicrozed
14
from
timing.common.definitions
import
kDesignMaster, kDesignOuroboros, kDesignOuroborosSim, kDesignEndpoint, kDesignFanout
15
from
timing.common.definitions
import
kBoardNameMap, kCarrierNameMap, kDesignNameMap
16
from
timing.common.definitions
import
kLibrarySupportedBoards
17
18
from
.master
import
master
19
20
# ------------------------------------------------------------------------------
21
@master.group('align', short_help='Endpoint alignment command group.')
22
@click.pass_obj
23
def
align(obj):
24
lDevice = obj.mDevice
25
lMaster = obj.mMaster
26
obj.mGlobal = lMaster.getNode(
'global'
)
27
#obj.mACmd = lMaster.getNode('acmd')
28
#obj.mEcho = lMaster.getNode('echo')
29
#bj.mIO = lDevice.getNode('io')
30
# ------------------------------------------------------------------------------
31
32
33
# ------------------------------------------------------------------------------
34
@align.command('apply-delay', short_help="Send delay adjust command endpoint")
35
@click.argument('addr', type=toolbox.IntRange(0x0,0xffff)
)
36
@click.argument('cdelay', type=toolbox.IntRange(0x0,0xf)
)
37
@click.argument('fdelay', type=toolbox.IntRange(0x0,0xfff)
)
38
@click.option('--mux', '-m', type=click.IntRange(0,12)
, help=
'Mux select'
)
39
@click.option('--force', '-f', is_flag=True, default=False, help='Skip RTT measurement')
40
@click.pass_obj
41
@click.pass_context
42
def
applydelay
(ctx, obj, addr, cdelay, fdelay, mux, force):
43
44
lDevice = obj.mDevice
45
lBoardType = obj.mBoardType
46
lTopDesign = obj.mTopDesign
47
48
# Are we working with a board with a return path mux (i.e. a fanout board)?
49
if
lBoardType
in
[kBoardPC059, kBoardFIB]:
50
if
mux
is
None
:
51
if
force ==
True
:
52
lTopDesign.apply_endpoint_delay(addr, cdelay, fdelay, 0,
not
force,
True
, 0)
53
else
:
54
raise
RuntimeError(
'MUX board: please supply an SFP mux channel'
)
55
else
:
56
lTopDesign.apply_endpoint_delay(addr, cdelay, fdelay, 0,
not
force,
True
, mux)
57
58
else
:
59
lTopDesign.apply_endpoint_delay(addr, cdelay, fdelay, 0,
not
force,
True
)
60
# ------------------------------------------------------------------------------
61
62
63
# ------------------------------------------------------------------------------
64
@align.command('measure-delay', short_help="Measure endpoint round trip time")
65
@click.argument('addr', type=toolbox.IntRange(0x0,0xffff)
)
66
@click.option('--mux', '-m', type=click.IntRange(0,12)
, help=
'Mux select (fanout only)'
)
67
@click.option('--sfp-control/--no-sfp-control', default=True, help='Control SFP or not')
68
@click.pass_obj
69
@click.pass_context
70
def
measuredelay
(ctx, obj, addr, mux, sfp_control):
71
72
lDevice = obj.mDevice
73
lBoardType = obj.mBoardType
74
lTopDesign = obj.mTopDesign
75
76
# or a different type of fanout board
77
if
lBoardType
in
[kBoardPC059, kBoardFIB]
and
sfp_control ==
True
:
78
if
mux
is
not
None
:
79
echo(
"Endpoint (adr: {}, mux: {}) RTT: {}"
.format(addr,mux,lTopDesign.measure_endpoint_rtt(addr, sfp_control, mux)))
80
else
:
81
raise
RuntimeError(
'MUX board: please supply an SFP mux channel'
)
82
else
:
83
echo(
"Endpoint (adr: {}) RTT: {}"
.format(addr,lTopDesign.measure_endpoint_rtt(addr, sfp_control)))
84
# ------------------------------------------------------------------------------
85
86
87
# ------------------------------------------------------------------------------
88
@align.command('toggle-tx', short_help="Control the endpoint SFP Tx laser")
89
@click.argument('addr', type=toolbox.IntRange(0x0,0xffff)
)
90
@click.option('--on/--off', default=True, help='enable/disable tx')
91
@click.pass_obj
92
def
toggletx
(obj, addr, on):
93
94
lMaster = obj.mMaster
95
lMaster.switch_endpoint_sfp(addr, on)
96
# ------------------------------------------------------------------------------
97
98
99
# ------------------------------------------------------------------------------
100
@align.command('scan-mux', short_help="Scan SFP mux for transmitting SFPs")
101
@click.pass_obj
102
def
scanmux
(obj):
103
104
lDevice = obj.mDevice
105
lTopDesign = obj.mTopDesign
106
lBoardType = obj.mBoardType
107
108
if
lBoardType
in
[kBoardPC059, kBoardFIB]:
109
lTopDesign.scan_sfp_mux()
110
else
:
111
raise
RuntimeError(
'Mux scan is only available on MUX boards'
)
112
# ------------------------------------------------------------------------------
113
114
115
# ------------------------------------------------------------------------------
116
@align.command('switch-n-lock', short_help="Wait for RTT endpoint to become ready")
117
@click.option('--mux', '-m', type=click.IntRange(0,12)
, help=
'Mux select (fanout only)'
)
118
@click.pass_obj
119
def
switchnlock
(obj, mux):
120
121
lDevice = obj.mDevice
122
lTopDesign = obj.mTopDesign
123
lBoardType = obj.mBoardType
124
lMaster = obj.mMaster
125
126
# or a different type of fanout board
127
if
lBoardType
in
[kBoardPC059, kBoardFIB]:
#TODO: don't include fib v2
128
if
mux
is
not
None
:
129
lTopDesign.switch_mux(mux)
130
lMaster.enable_upstream_endpoint()
131
else
:
132
raise
RuntimeError(
'MUX board: please supply an SFP mux channel'
)
133
else
:
134
lMaster.enable_upstream_endpoint()
135
# ------------------------------------------------------------------------------
timing.cli.align.applydelay
applydelay(ctx, obj, addr, cdelay, fdelay, mux, force)
Definition
align.py:42
timing.cli.align.switchnlock
switchnlock(obj, mux)
Definition
align.py:119
timing.cli.align.scanmux
scanmux(obj)
Definition
align.py:102
timing.cli.align.measuredelay
measuredelay(ctx, obj, addr, mux, sfp_control)
Definition
align.py:70
timing.cli.align.toggletx
toggletx(obj, addr, on)
Definition
align.py:92
timing.cli.toolbox
Definition
toolbox.py:1
timing.common.definitions
Definition
__init__.py:1
Generated on
for DUNE-DAQ by
1.17.0