Files
Jungfraujoch/receiver/host/HLSSimulatedDevice.h

71 lines
2.5 KiB
C++

// Copyright (2019-2022) Paul Scherrer Institute
// SPDX-License-Identifier: GPL-3.0-or-later
#ifndef JUNGFRAUJOCH_HLSSIMULATEDDEVICE_H
#define JUNGFRAUJOCH_HLSSIMULATEDDEVICE_H
#include <thread>
#include "datamover_model.h"
#include "../../common/DiffractionExperiment.h"
#include "FPGAAcquisitionDevice.h"
#include "../../jungfrau/jf_packet.h"
uint16_t checksum(const uint16_t *addr, size_t count);
class HLSSimulatedDevice : public FPGAAcquisitionDevice {
AXI_STREAM din_eth;
AXI_STREAM dout_eth;
ActionConfig cfg;
volatile bool idle;
std::vector<char> hbm_memory[10];
hls::stream<ap_uint<32> > work_request_stream;
hls::stream<ap_uint<32> > completion_stream;
std::thread action_thread;
Datamover<512> datamover_in;
Datamover<512> datamover_out;
ap_uint<1> run_data_collection;
ap_uint<1> cancel_data_collection;
volatile ap_uint<1> host_writer_idle;
uint32_t data_collection_counter;
uint64_t in_mem_location[LOAD_CALIBRATION_BRAM_SIZE];
static const uint64_t fpga_mac_addr = 0xCCAA11223344;
static const uint32_t fpga_ipv4_addr = 0x0132010A;
void HW_ReadActionRegister(ActionConfig *job) override;
void HW_WriteActionRegister(const ActionConfig *job) override;
void FPGA_StartAction() override;
void FPGA_EndAction() override;
bool HW_IsIdle() const override;
bool HW_ReadMailbox(uint32_t values[16]);
void HW_SetCancelDataCollectionBit() override;
bool HW_SendWorkRequest(uint32_t handle) override;
uint64_t HW_GetMACAddress() const override;
uint32_t HW_GetIPv4Address() const override;
void HW_GetStatus(ActionStatus *status) const override;
void HLSMainThread() ;
public:
HLSSimulatedDevice(uint16_t data_stream, size_t in_frame_buffer_size_modules, int16_t numa_node = -1);
~HLSSimulatedDevice();
void SendPacket(char *buffer, int len, uint8_t user = 0);
void CreatePacketJF(const DiffractionExperiment& experiment, uint64_t frame_number, uint32_t eth_packet,
uint32_t module_number, const uint16_t *data, bool trigger, int8_t adjust_axis = 0,
uint8_t user = 0);
void CreatePackets(const DiffractionExperiment& experiment, uint64_t frame_number_0, uint64_t frames,
uint32_t module_number, const uint16_t *data, bool trigger, int8_t adjust_axis = 0,
uint8_t user = 0);
void CreateFinalPacket(const DiffractionExperiment& experiment);
AXI_STREAM &OutputStream();
};
#endif //JUNGFRAUJOCH_HLSSIMULATEDDEVICE_H