Files
Jungfraujoch/fpga/host_library/jfjoch_pcie_status.cpp

78 lines
4.7 KiB
C++

// Copyright (2019-2023) Paul Scherrer Institute
#include <iostream>
#include <bitset>
#include "../common/NetworkAddressConvert.h"
#include "../common/JFJochException.h"
#include "JungfraujochDevice.h"
int main(int argc, char **argv) {
if (argc != 2) {
std::cout << "Usage: ./jfjoch_pcie_status <device name>" << std::endl;
exit(EXIT_FAILURE);
}
std::cout << "Device " << argv[1] << std::endl;
std::cout << std::endl;
try {
JungfraujochDevice device(argv[1], false);
auto fpga_status = device.GetDataCollectionStatus();
auto fpga_env_data = device.GetDeviceStatus();
std::cout << "PCIe/JFJoch card detected " << std::endl;
std::cout << "Git SHA1 " << std::hex << fpga_status.git_sha1 << std::endl;
std::cout << "Max modules " << std::dec << fpga_status.max_modules << std::endl;
std::cout << "NUMA node " << device.GetNumaNode() << std::endl;
std::cout << "Ethernet aligned " << (fpga_env_data.ethernet_aligned ? "Yes" : "No") << std::endl;
std::cout << "FPGA 12V rail current [A] " << fpga_env_data.fpga_pcie_12V_I_mA / 1000.0 << std::endl;
std::cout << "FPGA 12V rail voltage [V] " << fpga_env_data.fpga_pcie_12V_V_mV / 1000.0 << std::endl;
std::cout << "FPGA 3.3V rail current [A] " << fpga_env_data.fpga_pcie_3p3V_I_mA / 1000.0 << std::endl;
std::cout << "FPGA 3.3V rail voltage [V] " << fpga_env_data.fpga_pcie_3p3V_V_mV / 1000.0 << std::endl;
std::cout << "FPGA temperature " << fpga_env_data.fpga_temp_C << std::endl;
std::cout << "HBM temperature #0 " << fpga_env_data.hbm_0_temp_C << std::endl;
std::cout << "HBM temperature #1 " << fpga_env_data.hbm_1_temp_C << std::endl;
std::cout << "HBM size (MiB) " << fpga_status.hbm_size_bytes / static_cast<double>(1024 * 1024) << std::endl;
std::cout << "Data collection idle " << device.IsIdle() << std::endl;
std::cout << "Host writer idle " << (fpga_status.ctrl_reg & (1<<4)) << std::endl;
std::cout << "Data collection cancel " << (fpga_status.ctrl_reg & (1<<2)) << std::endl;
std::cout << "Full status register " << std::bitset<32>(fpga_status.ctrl_reg) << std::endl;
std::cout << "Stalls HBM " << fpga_status.pipeline_stalls_hbm << std::endl;
std::cout << "Stalls host mem " << fpga_status.pipeline_stalls_host << std::endl;
DataCollectionConfig cfg = device.GetConfig();
std::cout << "MAC address " << MacAddressToStr(device.GetMACAddress()) << std::endl;
std::cout << "IPv4 address " << IPv4AddressToStr(device.GetIPv4Address()) << std::endl;
std::cout << "Data collection mode (hex) " << std::hex << (cfg.mode & 0xFFFF) << std::dec << std::endl;
std::cout << "Data collection ID (hex) " << std::hex << ((cfg.mode & 0xFFFF0000) >> 16) << std::dec << std::endl;
std::cout << "Modules " << std::dec << cfg.nmodules << std::endl;
std::cout << "Frames int. pkt. gen. " << std::dec << cfg.nframes << std::endl;
std::cout << std::endl;
std::cout << "FPGA FIFO status: " << std::bitset<32>(fpga_status.fifo_status) << std::endl;
std::cout << std::endl;
std::cout << "Packet counters - ETH " << fpga_status.packets_eth << std::endl;
std::cout << " - UDP " << fpga_status.packets_udp << std::endl;
std::cout << " - SLS " << fpga_status.packets_sls << std::endl;
std::cout << " - ICMP " << fpga_status.packets_icmp << std::endl;
std::cout << " - JFJoch " << fpga_status.packets_processed << std::endl;
std::cout << std::endl;
std::cout << " - err. ETH " << fpga_status.udp_err_eth << std::endl;
std::cout << " - err. len. " << fpga_status.udp_err_len << std::endl;
std::cout << std::endl;
std::cout << "H2C descriptors:" << fpga_env_data.pcie_h2c_descriptors << " beats: " << fpga_env_data.pcie_h2c_beats
<< " status:" << fpga_env_data.pcie_h2c_status << std::endl;
std::cout << "C2H descriptors:" << fpga_env_data.pcie_c2h_descriptors << " beats: " << fpga_env_data.pcie_c2h_beats
<< " status:" << fpga_env_data.pcie_c2h_status << std::endl;
std::cout << std::endl;
} catch (const JFJochException &e) {
std::cout << e.what() << std::endl;
std::cout << std::endl;
}
}