DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::timing::MasterDesign Class Reference

Base class for timing master designs. More...

#include <MasterDesign.hpp>

Inheritance diagram for dunedaq::timing::MasterDesign:
[legend]
Collaboration diagram for dunedaq::timing::MasterDesign:
[legend]

Public Member Functions

 MasterDesign (const uhal::Node &node)
 
virtual ~MasterDesign ()
 
std::string get_status (bool print_out=false) const override
 Get status string, optionally print.
 
void configure (ClockSource clock_source, TimestampSource ts_source) const override
 Prepare the timing master for data taking.
 
uint64_t read_master_timestamp () const override
 Read the current timestamp.
 
void sync_timestamp (TimestampSource source) const override
 Sync timestamp to current machine value.
 
uint32_t measure_endpoint_rtt (uint32_t address, bool control_sfp=true, int sfp_mux=-1) const override
 Measure the endpoint round trip time.
 
void apply_endpoint_delay (uint32_t address, uint32_t coarse_delay, uint32_t fine_delay, uint32_t phase_delay, bool measure_rtt=false, bool control_sfp=true, int sfp_mux=-1) const override
 Apply delay to endpoint.
 
void enable_periodic_fl_cmd (uint32_t channel, double rate, bool poisson=false) const override
 Configure fake trigger generator.
 
void enable_periodic_fl_cmd (uint32_t command, uint32_t channel, double rate, bool poisson=false) const override
 Configure fake trigger generator.
 
const MasterNodeInterfaceget_master_node_plain () const override
 Get master node pointer.
 
uint32_t read_firmware_version () const override
 Read master firmware version.
 
void validate_firmware_version () const override
 Validate master firmware version.
 
void get_info (timingfirmwareinfo::TimingDeviceInfo &mon_data) const override
 Give info to collector.
 
void get_info (timingfirmwareinfo::MasterMonitorData &mon_data) const override
 Give info to collector.
 
- Public Member Functions inherited from dunedaq::timing::TopDesign
 TopDesign (const uhal::Node &node)
 
virtual ~TopDesign ()
 
const IONodeget_io_node_plain () const override
 Get io node pointer.
 
void soft_reset_io () const override
 Reset timing node.
 
void reset_io (const std::string &clock_config_file) const override
 Reset timing node.
 
void reset_io (const ClockSource &clock_source) const override
 Reset timing node.
 
void configure (ClockSource clock_source) const override
 Prepare the timing device for data taking.
 
std::string get_hardware_info (bool print_out=false) const override
 Print hardware information.
 
void get_info (timingfirmwareinfo::TimingDeviceInfo &mon_data) const override
 Give info to collector.
 
- Public Member Functions inherited from dunedaq::timing::TopDesignInterface
 TopDesignInterface (const uhal::Node &node)
 
virtual ~TopDesignInterface ()
 
template<class IO >
const IO * get_io_node () const
 
- Public Member Functions inherited from dunedaq::timing::TimingNode
 TimingNode (const uhal::Node &node)
 
virtual ~TimingNode ()
 
std::map< std::string, uhal::ValWord< uint32_t > > read_sub_nodes (const uhal::Node &node, bool dispatch=true) const
 Read subnodes.
 
void reset_sub_nodes (const uhal::Node &node, uint32_t aValue=0x0, bool dispatch=true) const
 Reset subnodes.
 
- Public Member Functions inherited from dunedaq::timing::MasterDesignInterface
 MasterDesignInterface (const uhal::Node &node)
 
virtual ~MasterDesignInterface ()
 
template<class MST >
const MST * get_master_node () const
 
virtual void get_info (timingfirmwareinfo::TimingDeviceInfo &mon_data) const=0
 Give info to collector.
 

Detailed Description

Base class for timing master designs.

Definition at line 33 of file MasterDesign.hpp.

Constructor & Destructor Documentation

◆ MasterDesign()

dunedaq::timing::MasterDesign::MasterDesign ( const uhal::Node & node)
explicit

Definition at line 11 of file MasterDesign.cpp.

12 : TopDesignInterface(node)
14 , TopDesign(node)
15{}
TopDesign(const uhal::Node &node)
Definition TopDesign.hpp:41

◆ ~MasterDesign()

dunedaq::timing::MasterDesign::~MasterDesign ( )
virtual

Definition at line 19 of file MasterDesign.cpp.

20{}

Member Function Documentation

◆ apply_endpoint_delay()

void dunedaq::timing::MasterDesign::apply_endpoint_delay ( uint32_t address,
uint32_t coarse_delay,
uint32_t fine_delay,
uint32_t phase_delay,
bool measure_rtt = false,
bool control_sfp = true,
int sfp_mux = -1 ) const
overridevirtual

Apply delay to endpoint.

Implements dunedaq::timing::MasterDesignInterface.

Reimplemented in dunedaq::timing::MasterMuxDesign.

Definition at line 74 of file MasterDesign.cpp.

81{
82 get_master_node_plain()->apply_endpoint_delay(address, coarse_delay, fine_delay, phase_delay, measure_rtt, control_sfp);
83}
const MasterNodeInterface * get_master_node_plain() const override
Get master node pointer.
virtual void apply_endpoint_delay(uint32_t address, uint32_t coarse_delay, uint32_t fine_delay, uint32_t phase_delay, bool measure_rtt=false, bool control_sfp=true) const =0
Apply delay to endpoint.

◆ configure()

void dunedaq::timing::MasterDesign::configure ( ClockSource clock_source,
TimestampSource ts_source ) const
overridevirtual

Prepare the timing master for data taking.

Implements dunedaq::timing::MasterDesignInterface.

Reimplemented in dunedaq::timing::OuroborosDesign.

Definition at line 39 of file MasterDesign.cpp.

40{
41 // Hard resets
42 TopDesign::configure(clock_source);
43
44 this->sync_timestamp(ts_source); // keep previous behaviour for now, TODO: pass through correct parameter
45}
void sync_timestamp(TimestampSource source) const override
Sync timestamp to current machine value.
void configure(ClockSource clock_source) const override
Prepare the timing device for data taking.
Definition TopDesign.hpp:81

◆ enable_periodic_fl_cmd() [1/2]

void dunedaq::timing::MasterDesign::enable_periodic_fl_cmd ( uint32_t channel,
double rate,
bool poisson = false ) const
overridevirtual

Configure fake trigger generator.

Implements dunedaq::timing::MasterDesignInterface.

Definition at line 88 of file MasterDesign.cpp.

89{
90 auto dts_clock_frequency = this->get_io_node_plain()->read_firmware_frequency();
91 get_master_node_plain()->enable_periodic_fl_cmd(channel, rate, poisson, dts_clock_frequency);
92}
virtual uint32_t read_firmware_frequency() const
Read the word identifying the frequency [units of Hz] of the firmware in the FPGA.
Definition IONode.cpp:78
virtual void enable_periodic_fl_cmd(uint32_t channel, double rate, bool poisson, uint32_t clock_frequency_hz) const
Configure fake trigger generator.
const IONode * get_io_node_plain() const override
Get io node pointer.
Definition TopDesign.hpp:48

◆ enable_periodic_fl_cmd() [2/2]

void dunedaq::timing::MasterDesign::enable_periodic_fl_cmd ( uint32_t command,
uint32_t channel,
double rate,
bool poisson = false ) const
overridevirtual

Configure fake trigger generator.

Implements dunedaq::timing::MasterDesignInterface.

Definition at line 97 of file MasterDesign.cpp.

98{
99 auto dts_clock_frequency = this->get_io_node_plain()->read_firmware_frequency();
100 get_master_node_plain()->enable_periodic_fl_cmd(command, channel, rate, poisson, dts_clock_frequency);
101}

◆ get_info() [1/2]

void dunedaq::timing::MasterDesign::get_info ( timingfirmwareinfo::MasterMonitorData & mon_data) const
inlineoverridevirtual

Give info to collector.

Implements dunedaq::timing::MasterDesignInterface.

Definition at line 118 of file MasterDesign.hpp.

119 {
120 get_master_node_plain()->get_info(mon_data);
121 }
virtual void get_info(timingfirmwareinfo::MasterMonitorData &mon_data) const =0
Give info to collector.

◆ get_info() [2/2]

void dunedaq::timing::MasterDesign::get_info ( timingfirmwareinfo::TimingDeviceInfo & mon_data) const
overridevirtual

Give info to collector.

Implements dunedaq::timing::TopDesignInterface.

Definition at line 136 of file MasterDesign.cpp.

137{
138 TopDesign::get_info(mon_data);
139 get_info(mon_data.master_info);
140}
void get_info(timingfirmwareinfo::TimingDeviceInfo &mon_data) const override
Give info to collector.
void get_info(timingfirmwareinfo::TimingDeviceInfo &mon_data) const override
Give info to collector.

◆ get_master_node_plain()

const MasterNodeInterface * dunedaq::timing::MasterDesign::get_master_node_plain ( ) const
inlineoverridevirtual

Get master node pointer.

Implements dunedaq::timing::MasterDesignInterface.

Definition at line 95 of file MasterDesign.hpp.

95{ return dynamic_cast<const MasterNodeInterface*>(&uhal::Node::getNode("master")); }

◆ get_status()

std::string dunedaq::timing::MasterDesign::get_status ( bool print_out = false) const
overridevirtual

Get status string, optionally print.

Implements dunedaq::timing::TimingNode.

Reimplemented in dunedaq::timing::MasterMuxDesign, dunedaq::timing::OuroborosDesign, and dunedaq::timing::OuroborosMuxDesign.

Definition at line 25 of file MasterDesign.cpp.

26{
27 std::stringstream status;
29 status << get_master_node_plain()->get_status();
30
31 if (print_out)
32 TLOG() << status.str();
33 return status.str();
34}
virtual std::string get_pll_status(bool print_out=false) const
Print status of on-board PLL.
Definition IONode.cpp:288
virtual std::string get_status(bool print_out=false) const =0
Get the status string of the timing node. Optionally print it.
#define TLOG(...)
Definition macro.hpp:22

◆ measure_endpoint_rtt()

uint32_t dunedaq::timing::MasterDesign::measure_endpoint_rtt ( uint32_t address,
bool control_sfp = true,
int sfp_mux = -1 ) const
overridevirtual

Measure the endpoint round trip time.

Returns
{ description_of_the_return_value }

Implements dunedaq::timing::MasterDesignInterface.

Reimplemented in dunedaq::timing::MasterMuxDesign.

Definition at line 66 of file MasterDesign.cpp.

67{
69}
virtual uint32_t measure_endpoint_rtt(uint32_t address, bool control_sfp=true) const =0
Measure the endpoint round trip time.

◆ read_firmware_version()

uint32_t dunedaq::timing::MasterDesign::read_firmware_version ( ) const
overridevirtual

Read master firmware version.

Returns
{ description_of_the_return_value }

Implements dunedaq::timing::TopDesignInterface.

Definition at line 106 of file MasterDesign.cpp.

107{
108 auto firmware_version = this->get_master_node_plain()->getNode("global.version").read();
109 uhal::Node::getClient().dispatch();
110
111 return firmware_version.value();
112}

◆ read_master_timestamp()

uint64_t dunedaq::timing::MasterDesign::read_master_timestamp ( ) const
overridevirtual

Read the current timestamp.

Returns
{ description_of_the_return_value }

Implements dunedaq::timing::MasterDesignInterface.

Definition at line 50 of file MasterDesign.cpp.

51{
53}
virtual uint64_t read_timestamp() const =0
Read the current timestamp word.

◆ sync_timestamp()

void dunedaq::timing::MasterDesign::sync_timestamp ( TimestampSource source) const
overridevirtual

Sync timestamp to current machine value.

Implements dunedaq::timing::MasterDesignInterface.

Definition at line 58 of file MasterDesign.cpp.

59{
61}
virtual void sync_timestamp(TimestampSource source) const =0
Set timestamp, enable transmission.

◆ validate_firmware_version()

void dunedaq::timing::MasterDesign::validate_firmware_version ( ) const
overridevirtual

Validate master firmware version.

Implements dunedaq::timing::TopDesignInterface.

Definition at line 117 of file MasterDesign.cpp.

118{
119 auto firmware_version = read_firmware_version();
120
121 uint32_t major_firmware_version = (firmware_version >> 16) & 0xff;
122 uint32_t minor_firmware_version = (firmware_version >> 8) & 0xff;
123 uint32_t patch_firmware_version = (firmware_version >> 0) & 0xff;
124
125 if (major_firmware_version != get_master_node_plain()->get_required_major_firmware_version())
126 ers::error(IncompatibleMajorMasterFirmwareVersion(ERS_HERE, major_firmware_version, get_master_node_plain()->get_required_major_firmware_version()));
127 if (minor_firmware_version != get_master_node_plain()->get_required_minor_firmware_version())
128 ers::warning(IncompatibleMinorMasterFirmwareVersion(ERS_HERE, minor_firmware_version, get_master_node_plain()->get_required_minor_firmware_version()));
129 if (patch_firmware_version != get_master_node_plain()->get_required_patch_firmware_version())
130 ers::warning(IncompatiblePatchMasterFirmwareVersion(ERS_HERE, patch_firmware_version, get_master_node_plain()->get_required_patch_firmware_version()));
131}
#define ERS_HERE
uint32_t read_firmware_version() const override
Read master firmware version.
void warning(const Issue &issue)
Definition ers.hpp:115
void error(const Issue &issue)
Definition ers.hpp:81

The documentation for this class was generated from the following files: