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

Class for the FIB board. More...

#include <FIBV2IONode.hpp>

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

Public Member Functions

 FIBV2IONode (const uhal::Node &aNode)
 
virtual ~FIBV2IONode ()
 
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 reset (const ClockSource &clock_source) const override
 Reset IO, with clock file look up.
 
void reset_pll () const override
 Reset PLL.
 
std::string get_sfp_status (uint32_t sfp_id, bool print_out=false) const override
 Print status of on-board SFP.
 
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)
 
void switch_sfp_tx (uint32_t sfp_id, bool turn_on) const override
 Switch on or off the SFP tx laser via the I2C IO expander controlling the sfp tx disable pin. aOn=1: laster transmitting, tx disable pin = 0; aOn=0: laster NOT transmitting, tx disable pin = 1.
 
bool clocks_ok () const override
 Clocks ready?
 
std::string get_pll_status (bool print_out=false) const override
 Print status of on-board PLL.
 
float read_board_temperature () const
 Read data from on-board temperature monitor.
 
void get_info (timinghardwareinfo::TimingPLLMonitorData &mon_data) const override
 
- 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::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 set_up_io_infrastructure () const
 Set up i2c buses, enable ICs.
 
- 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
 Get the PLL chip.
 
void reset (const std::string &) const override
 No config file for FIB v2.
 
std::unique_ptr< const SI534xSlave > get_pll () const override
 Get the PLL chip.
 
void configure_pll (const std::string &clock_config_file="") const override
 Configure clock chip.
 

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 FIB board.

Definition at line 35 of file FIBV2IONode.hpp.

Constructor & Destructor Documentation

◆ FIBV2IONode()

dunedaq::timing::FIBV2IONode::FIBV2IONode ( const uhal::Node & aNode)
explicit

Definition at line 23 of file FIBV2IONode.cpp.

23 :
24 IONode(aNode, "i2c", "i2c", "SI5345", {"PLL", "BKP DATA"}, {"i2c_sfp0", "i2c_sfp1", "i2c_sfp2", "i2c_sfp3", "i2c_sfp4", "i2c_sfp5", "i2c_sfp6", "i2c_sfp7"}) {
25}
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

◆ ~FIBV2IONode()

dunedaq::timing::FIBV2IONode::~FIBV2IONode ( )
virtual

Definition at line 30 of file FIBV2IONode.cpp.

30 {
31}

Member Function Documentation

◆ clocks_ok()

bool dunedaq::timing::FIBV2IONode::clocks_ok ( ) const
inlineoverridevirtual

Clocks ready?

Implements dunedaq::timing::IONode.

Definition at line 82 of file FIBV2IONode.hpp.

82{return true;} //TODO measure clock freq.

◆ configure_pll()

void dunedaq::timing::FIBV2IONode::configure_pll ( const std::string & clock_config_file = "") const
overrideprivatevirtual

Configure clock chip.

Reimplemented from dunedaq::timing::IONode.

Definition at line 44 of file FIBV2IONode.cpp.

45{
46 TLOG() << "No text config for CDCLVD110";
47}
#define TLOG(...)
Definition macro.hpp:22

◆ get_info()

void dunedaq::timing::FIBV2IONode::get_info ( timinghardwareinfo::TimingPLLMonitorData & mon_data) const
overridevirtual

Reimplemented from dunedaq::timing::IONode.

Definition at line 168 of file FIBV2IONode.cpp.

169{
170 mon_data.lol = false; // no monitoring of this in CDCLVD110
171 mon_data.los = false;
172}

◆ get_pll()

std::unique_ptr< const SI534xSlave > dunedaq::timing::FIBV2IONode::get_pll ( ) const
inlineoverrideprivatevirtual

Get the PLL chip.

Returns
{ description_of_the_return_value }

Reimplemented from dunedaq::timing::IONode.

Definition at line 127 of file FIBV2IONode.hpp.

127{return nullptr;}

◆ get_pll_status()

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

Print status of on-board PLL.

Reimplemented from dunedaq::timing::IONode.

Definition at line 177 of file FIBV2IONode.cpp.

178{
179 std::stringstream status;
180 status << "No status yet for CDCLVD110 on FIBv2";
181
182 if (print_out)
183 TLOG() << status.str();
184
185 return status.str();
186}

◆ get_sfp_status()

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

Print status of on-board SFP.

Reimplemented from dunedaq::timing::IONode.

Definition at line 111 of file FIBV2IONode.cpp.

111 { // NOLINT(build/unsigned)
112 std::stringstream status;
113
114 validate_sfp_id(sfp_id);
115
116 std::string sfp_i2c_bus = "i2c_sfp" + std::to_string(sfp_id);
117 auto sfp = get_i2c_device<I2CSFPSlave>(sfp_i2c_bus, "SFP_EEProm");
118 status << "FIB V2 SFP " << sfp_id << ":" << std::endl;
119 status << sfp->get_status();
120
121 if (print_out)
122 TLOG() << status.str();
123
124 return status.str();
125}
void validate_sfp_id(uint32_t sfp_id) const
Get the PLL chip.
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_status()

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

Get status string, optionally print.

Implements dunedaq::timing::TimingNode.

Definition at line 52 of file FIBV2IONode.cpp.

53{
54 std::stringstream status;
55 auto subnodes = read_sub_nodes(getNode("csr.stat"));
56 status << format_reg_table(subnodes, "FIB IO state") << std::endl;
57
58 status << "Board temperature: " << read_board_temperature() << " [C]" << std::endl;
59
60 if (print_out)
61 TLOG() << status.str();
62
63 return status.str();
64}
float read_board_temperature() const
Read data from on-board temperature monitor.
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::FIBV2IONode::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 36 of file FIBV2IONode.cpp.

37{
38 return "UID_PROM";
39}

◆ read_board_temperature()

float dunedaq::timing::FIBV2IONode::read_board_temperature ( ) const

Read data from on-board temperature monitor.

Definition at line 191 of file FIBV2IONode.cpp.

192{
193 auto temp_mon = get_i2c_device<LM75Node>(m_pll_i2c_bus, "TEMP_MON");
194 return temp_mon->read_temperature();
195}
const std::string m_pll_i2c_bus
Definition IONode.hpp:211

◆ reset() [1/2]

void dunedaq::timing::FIBV2IONode::reset ( const ClockSource & clock_source) const
overridevirtual

Reset IO, with clock file look up.

Reimplemented from dunedaq::timing::IONode.

Definition at line 69 of file FIBV2IONode.cpp.

69 {
70
71 // Soft reset
73
74 millisleep(1000);
75
76 getNode("csr.ctrl.rst").write(0x1);
77 getNode("csr.ctrl.rst").write(0x0);
78
79 getClient().dispatch();
80
81 getNode("csr.ctrl.clk_enable").write(0x0);
82
83 if (clock_source == kInput0)
84 {
85 getNode("csr.ctrl.clk_select").write(0x0);
86 }
87 else if (clock_source == kInput1)
88 {
89 getNode("csr.ctrl.clk_select").write(0x1);
90 }
91 else
92 {
93 // TODO :throw something here
94 }
95
96 getClient().dispatch();
97
98 TLOG() << "Reset done";
99}
virtual void write_soft_reset_register() const
Write soft reset register.
Definition IONode.cpp:287
void millisleep(const double &time_in_milliseconds)
Definition toolbox.cpp:83

◆ reset() [2/2]

void dunedaq::timing::FIBV2IONode::reset ( const std::string & ) const
inlineoverrideprivatevirtual

No config file for FIB v2.

Implements dunedaq::timing::IONode.

Definition at line 120 of file FIBV2IONode.hpp.

120{}

◆ reset_pll()

void dunedaq::timing::FIBV2IONode::reset_pll ( ) const
overridevirtual

Reset PLL.

Implements dunedaq::timing::IONode.

Definition at line 103 of file FIBV2IONode.cpp.

104{
105}

◆ switch_sfp_soft_tx_control_bit()

void dunedaq::timing::FIBV2IONode::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 130 of file FIBV2IONode.cpp.

130 { // NOLINT(build/unsigned)
131 validate_sfp_id(sfp_id);
132
133 // on this board the 8 downstream sfps have their own i2c bus
134 std::string sfp_i2c_bus = "i2c_sfp" + std::to_string(sfp_id);
135 auto sfp = get_i2c_device<I2CSFPSlave>(sfp_i2c_bus, "SFP_EEProm");
136 sfp->switch_soft_tx_control_bit(turn_on);
137}

◆ switch_sfp_tx()

void dunedaq::timing::FIBV2IONode::switch_sfp_tx ( uint32_t sfp_id,
bool turn_on ) const
overridevirtual

Switch on or off the SFP tx laser via the I2C IO expander controlling the sfp tx disable pin. aOn=1: laster transmitting, tx disable pin = 0; aOn=0: laster NOT transmitting, tx disable pin = 1.

Implements dunedaq::timing::IONode.

Definition at line 142 of file FIBV2IONode.cpp.

142 { // NOLINT(build/unsigned)
143
144 validate_sfp_id(sfp_id);
145
146 auto sfp_tx_control_flags = getNode("csr.ctrl.sfp_tx_disable").read(); // NOLINT(build/unsigned)
147 getClient().dispatch();
148
149 uint8_t current_sfp_tx_control_flags=sfp_tx_control_flags.value();
150 uint8_t new_sfp_tx_control_flags; // NOLINT(build/unsigned)
151
152 if (turn_on)
153 {
154 new_sfp_tx_control_flags = current_sfp_tx_control_flags & ~(1UL << sfp_id);
155 }
156 else
157 {
158 new_sfp_tx_control_flags = current_sfp_tx_control_flags | (1UL << sfp_id);
159 }
160
161 getNode("csr.ctrl.sfp_tx_disable").write(new_sfp_tx_control_flags);
162 getClient().dispatch();
163}

◆ validate_sfp_id()

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

Get the PLL chip.

Returns
{ description_of_the_return_value }

Fill hardware monitoring structure.

Give info to collector.

Definition at line 208 of file FIBV2IONode.cpp.

208 { // NOLINT(build/unsigned)
209 // on this board we have 8 downstream SFPs
210 if (sfp_id > 7) {
211 throw InvalidSFPId(ERS_HERE, format_reg_value(sfp_id));
212 }
213}
#define ERS_HERE
std::string format_reg_value(T reg_value, uint32_t base)
Definition toolbox.hxx:117

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