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

Class for the timing FMC board. More...

#include <MIBIONode.hpp>

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

Public Member Functions

 MIBIONode (const uhal::Node &node)
 
virtual ~MIBIONode ()
 
std::string get_uid_address_parameter_name () const override
 Get the UID address parameter name.
 
std::string get_status (bool print_out=false) const override
 Get status string, optionally print.
 
void configure_pll (const std::string &clock_config_file="") const override
 Configure clock chip.
 
std::string get_pll_status (bool print_out=false) const override
 Print status of on-board PLL.
 
void reset (const std::string &clock_config_file) const override
 Reset MIB IO.
 
std::string get_sfp_status (uint32_t sfp_id, bool print_out=false) const override
 Switch the SFP mux channel.
 
void switch_sfp_soft_tx_control_bit (uint32_t sfp_id, bool turn_on) const override
 control tx laser of on-board SFP softly (I2C command)
 
bool clocks_ok () const override
 Clocks ready?
 
void switch_sfp_tx (uint32_t, bool) const override
 control tx laser of on-board SFP
 
virtual void reset (const ClockSource &clock_source) const
 Reset IO, with clock file look up.
 
- Public Member Functions inherited from dunedaq::timing::IONode
 IONode (const uhal::Node &node, std::string uid_i2c_bus, std::string pll_i2c_bus, std::string pll_i2c_device, std::vector< std::string > clock_names, std::vector< std::string > sfp_i2c_buses)
 
virtual ~IONode ()
 
virtual uint32_t read_board_type () const
 Read the word identifying the timing board.
 
virtual uint32_t read_carrier_type () const
 Read the word identifying the FPFA carrier board.
 
virtual uint32_t read_design_type () const
 Read the word identifying the firmware design in the FPGA.
 
virtual uint32_t read_firmware_frequency () const
 Read the word identifying the frequency [units of Hz] of the firmware in the FPGA.
 
virtual uint64_t read_board_uid () const
 Read the word containing the timing board UID.
 
virtual BoardRevision get_board_revision () const
 Read the word identifying the timing board.
 
virtual std::string get_hardware_info (bool print_out=false) const
 Print hardware information.
 
virtual std::string get_full_clock_config_file_path (const ClockSource &clock_source) const
 Get the full config path.
 
template<class T >
std::unique_ptr< const T > get_i2c_device (const std::string &i2c_bus_name, const std::string &i2c_device_name) const
 Get the an I2C chip.
 
virtual std::unique_ptr< const SI534xSlave > get_pll () const
 Get the PLL chip.
 
virtual std::vector< double > read_clock_frequencies () const
 Read frequencies of on-board clocks.
 
virtual std::string get_clock_frequencies_table (bool print_out=false) const
 Print frequencies of on-board clocks.
 
virtual void soft_reset () const
 Reset timing node.
 
virtual void get_info (timinghardwareinfo::TimingPLLMonitorData &mon_data) 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.
 

Private Member Functions

void validate_sfp_id (uint32_t sfp_id) const
 Fill hardware monitoring structure.
 
void validate_amc_slot (uint32_t amc_slot) const
 

Additional Inherited Members

- Static Public Member Functions inherited from dunedaq::timing::IONode
static const std::map< BoardType, std::string > & get_board_type_map ()
 
static const std::map< CarrierType, std::string > & get_carrier_type_map ()
 
static const std::map< BoardRevision, std::string > & get_board_revision_map ()
 
static const std::map< uint64_t, BoardRevision > & get_board_uid_revision_map ()
 
static const std::map< DesignType, std::string > & get_design_type_map ()
 
static const std::map< std::string, std::string > & get_clock_config_map ()
 
static const std::vector< BoardType > & get_library_supported_boards ()
 
static const std::vector< DesignType > & get_library_supported_designs ()
 
- Protected Member Functions inherited from dunedaq::timing::IONode
virtual void write_soft_reset_register () const
 Write soft reset register.
 
- Static Protected Member Functions inherited from dunedaq::timing::IONode
static std::string clock_source_to_string (const ClockSource &source)
 
- Protected Attributes inherited from dunedaq::timing::IONode
const std::string m_uid_i2c_bus
 
const std::string m_pll_i2c_bus
 
const std::string m_pll_i2c_device
 
const std::vector< std::string > m_clock_names
 
const std::vector< std::string > m_sfp_i2c_buses
 
- Static Protected Attributes inherited from dunedaq::timing::IONode
static const std::map< BoardType, std::string > board_type_map
 
static const std::map< CarrierType, std::string > carrier_type_map
 
static const std::map< BoardRevision, std::string > board_revision_map
 
static const std::map< DesignType, std::string > design_type_map
 
static const std::map< uint64_t, BoardRevisionboard_uid_revision_map
 
static const std::map< ClockSource, std::string > clock_source_map
 
static const std::map< std::string, std::string > clock_config_map
 
static const std::vector< BoardTypelibrary_supported_boards
 
static const std::vector< DesignTypelibrary_supported_designs
 

Detailed Description

Class for the timing FMC board.

Definition at line 33 of file MIBIONode.hpp.

Constructor & Destructor Documentation

◆ MIBIONode()

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

Definition at line 20 of file MIBIONode.cpp.

21 : IONode(node, "i2c", "i2c", { "PLL" }, { "PLL", "CDR 0", "CDR 1" }, { "i2c" })
22{
23}
IONode(const uhal::Node &node, std::string uid_i2c_bus, std::string pll_i2c_bus, std::string pll_i2c_device, std::vector< std::string > clock_names, std::vector< std::string > sfp_i2c_buses)
Definition IONode.cpp:25

◆ ~MIBIONode()

dunedaq::timing::MIBIONode::~MIBIONode ( )
virtual

Definition at line 27 of file MIBIONode.cpp.

27{}

Member Function Documentation

◆ clocks_ok()

bool dunedaq::timing::MIBIONode::clocks_ok ( ) const
overridevirtual

Clocks ready?

Implements dunedaq::timing::IONode.

Definition at line 102 of file MIBIONode.cpp.

103{
104 TLOG() << "clock check needs to be implemented";
105 return false;
106}
#define TLOG(...)
Definition macro.hpp:22

◆ configure_pll()

void dunedaq::timing::MIBIONode::configure_pll ( const std::string & clock_config_file = "") const
overridevirtual

Configure clock chip.

Reimplemented from dunedaq::timing::IONode.

Definition at line 55 of file MIBIONode.cpp.

56{
57 // enable pll channel (#3) only
58 auto i2c_switch = get_i2c_device<I2C9546SwitchSlave>("i2c", "TCA9546_Switch");
59 i2c_switch->set_channels_states(8);
60 IONode::configure_pll(clock_config_file);
61}
virtual void configure_pll(const std::string &clock_config_file="") const
Configure clock chip.
Definition IONode.cpp:247
std::unique_ptr< const T > get_i2c_device(const std::string &i2c_bus_name, const std::string &i2c_device_name) const
Get the an I2C chip.
Definition IONode.hxx:6

◆ get_pll_status()

std::string dunedaq::timing::MIBIONode::get_pll_status ( bool print_out = false) const
overridevirtual

Print status of on-board PLL.

Reimplemented from dunedaq::timing::IONode.

Definition at line 66 of file MIBIONode.cpp.

67{
68 // enable pll channel (#3) only
69 auto i2c_switch = get_i2c_device<I2C9546SwitchSlave>("i2c", "TCA9546_Switch");
70 i2c_switch->set_channels_states(8);
71 return IONode::get_pll_status(print_out);
72}
virtual std::string get_pll_status(bool print_out=false) const
Print status of on-board PLL.
Definition IONode.cpp:288

◆ get_sfp_status()

std::string dunedaq::timing::MIBIONode::get_sfp_status ( uint32_t sfp_id,
bool print_out = false ) const
overridevirtual

Switch the SFP mux channel.

Read the active SFP mux channel

Switch the SFP mux channel

Read the active SFP mux channel

Print status of on-board SFP.

Reimplemented from dunedaq::timing::IONode.

Definition at line 156 of file MIBIONode.cpp.

156 { // NOLINT(build/unsigned)
157 std::stringstream status;
158
159 validate_sfp_id(sfp_id);
160
161 // enable i2c path for sfp
162 auto i2c_switch = get_i2c_device<I2C9546SwitchSlave>("i2c", "TCA9546_Switch");
163 i2c_switch->set_channels_states(1UL << sfp_id);
164
165 auto sfp = get_i2c_device<I2CSFPSlave>(m_sfp_i2c_buses.at(0), "SFP_EEProm");
166
167 status << "SFP " << sfp_id << ":" << std::endl;
168
169 try
170 {
171 status << sfp->get_status();
172 }
173 catch(...)
174 {
175 i2c_switch->set_channels_states(8);
176 throw;
177 }
178
179 i2c_switch->set_channels_states(8);
180
181 if (print_out)
182 TLOG() << status.str();
183
184 return status.str();
185}
const std::vector< std::string > m_sfp_i2c_buses
Definition IONode.hpp:204
void validate_sfp_id(uint32_t sfp_id) const
Fill hardware monitoring structure.

◆ get_status()

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

Get status string, optionally print.

Implements dunedaq::timing::TimingNode.

Definition at line 40 of file MIBIONode.cpp.

41{
42 std::stringstream status;
43
44 auto subnodes = read_sub_nodes(getNode("csr.stat"));
45 status << format_reg_table(subnodes, "MIB IO state");
46
47 if (print_out)
48 TLOG() << std::endl << status.str();
49 return status.str();
50}
std::map< std::string, uhal::ValWord< uint32_t > > read_sub_nodes(const uhal::Node &node, bool dispatch=true) const
Read subnodes.
std::string format_reg_table(T data, std::string title, std::vector< std::string > headers)
Format reg-value table.
Definition toolbox.hxx:166

◆ get_uid_address_parameter_name()

std::string dunedaq::timing::MIBIONode::get_uid_address_parameter_name ( ) const
overridevirtual

Get the UID address parameter name.

Returns
{ description_of_the_return_value }

Implements dunedaq::timing::IONode.

Definition at line 32 of file MIBIONode.cpp.

33{
34 return "UID_PROM";
35}

◆ reset() [1/2]

void dunedaq::timing::IONode::reset ( const ClockSource & clock_source) const
virtual

Reset IO, with clock file look up.

Reimplemented from dunedaq::timing::IONode.

Definition at line 179 of file IONode.cpp.

315{
316 // Find the right pll config file
317 std::string clock_config = get_full_clock_config_file_path(clock_source);
318 reset(clock_config);
319}
virtual std::string get_full_clock_config_file_path(const ClockSource &clock_source) const
Get the full config path.
Definition IONode.cpp:167
void reset(const std::string &clock_config_file) const override
Reset MIB IO.
Definition MIBIONode.cpp:77

◆ reset() [2/2]

void dunedaq::timing::MIBIONode::reset ( const std::string & clock_config_file) const
overridevirtual

Reset MIB IO.

Implements dunedaq::timing::IONode.

Definition at line 77 of file MIBIONode.cpp.

78{
80
81 millisleep(1000);
82
83 // Upload config file to PLL
84 configure_pll(clock_config_file);
85
86 // Reset mmcm
87 getNode("csr.ctrl.rst").write(0x1);
88 getNode("csr.ctrl.rst").write(0x0);
89
90 getNode("io_select.csr.ctrl.amc_out").write(0xfff);
91 getNode("io_select.csr.ctrl.amc_in").write(0x0);
92 getNode("io_select.csr.ctrl.usfp_src").write(0x0);
93
94 getClient().dispatch();
95
96 TLOG() << "Reset done";
97}
virtual void write_soft_reset_register() const
Write soft reset register.
Definition IONode.cpp:296
void configure_pll(const std::string &clock_config_file="") const override
Configure clock chip.
Definition MIBIONode.cpp:55
void millisleep(const double &time_in_milliseconds)
Definition toolbox.cpp:83

◆ switch_sfp_soft_tx_control_bit()

void dunedaq::timing::MIBIONode::switch_sfp_soft_tx_control_bit ( uint32_t sfp_id,
bool turn_on ) const
overridevirtual

control tx laser of on-board SFP softly (I2C command)

Reimplemented from dunedaq::timing::IONode.

Definition at line 190 of file MIBIONode.cpp.

190 { // NOLINT(build/unsigned)
191 validate_sfp_id(sfp_id);
192
193 auto i2c_switch = get_i2c_device<I2C9546SwitchSlave>("i2c", "TCA9546_Switch");
194 i2c_switch->set_channels_states(1UL << sfp_id);
195 auto sfp = get_i2c_device<I2CSFPSlave>(m_sfp_i2c_buses.at(0), "SFP_EEProm");
196 sfp->switch_soft_tx_control_bit(turn_on);
197 i2c_switch->set_channels_states(8);
198}

◆ switch_sfp_tx()

void dunedaq::timing::MIBIONode::switch_sfp_tx ( uint32_t ,
bool  ) const
inlineoverridevirtual

control tx laser of on-board SFP

Implements dunedaq::timing::IONode.

Definition at line 112 of file MIBIONode.hpp.

113 {
114 TLOG() << "Not implemented in MIB v1 firmware";
115 }

◆ validate_amc_slot()

void dunedaq::timing::MIBIONode::validate_amc_slot ( uint32_t amc_slot) const
private

Definition at line 283 of file MIBIONode.cpp.

283 { // NOLINT(build/unsigned)
284 if (amc_slot < 1 || amc_slot > 12) {
285 throw InvalidAMCSlot(ERS_HERE, format_reg_value(amc_slot, 10));
286 }
287}
#define ERS_HERE
std::string format_reg_value(T reg_value, uint32_t base)
Definition toolbox.hxx:117

◆ validate_sfp_id()

void dunedaq::timing::MIBIONode::validate_sfp_id ( uint32_t sfp_id) const
private

Fill hardware monitoring structure.

Give info to collector.

Definition at line 273 of file MIBIONode.cpp.

273 { // NOLINT(build/unsigned)
274 // on this board we have 3 upstream SFPs
275 if (sfp_id > 2) {
276 throw InvalidSFPId(ERS_HERE, format_reg_value(sfp_id));
277 }
278}

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