HITDAQ/FPGA_nios/hit_pat/inc/udpgen.h
2024-10-16 10:07:43 +02:00

62 lines
3.3 KiB
C

/******************************************************************************
* Copyright *
* Scintillating Fibre Beam Profile Monitor Software by Michal Dziewiecki, *
* Blake Leverington and Liqing Qin is licensed under CC BY 4.0 *
* https://creativecommons.org/licenses/by/4.0/ *
* funded by the Deutsche Forschungsgemeinschaft *
* (DFG, German Research Foundation) Projektnummer 419255448 *
* Project Leader: B.Leverington *
*******************************************************************************
* Create Date - Aug 7, 2019 *
* Author: M.Dziewiecki *
* Module - udpgen.h *
******************************************************************************/
#ifndef UDPGEN_H_
#define UDPGEN_H_
//UDP_GENERATOR_0_BASE
//byte offsets for registers
#define UDPGEN_REG_CSR 0 //16 bits 8 bits command + 8 bits status
#define UDPGEN_REG_SIZE 2 //16 bits payload size in words
#define UDPGEN_REG_SRCIP 4 //32 bits source IP, last octet first
#define UDPGEN_REG_DSTIP 8 //32 bits destination IP. last octet first
#define UDPGEN_REG_DSTPORT 12 //16 bits destination port
#define UDPGEN_REG_SRCPORT 14 //16 bits source port
#define UDPGEN_REG_DSTMAC 16 //2*32 bits destination MAC, last octet first
#define UDPGEN_REG_RES1 24 //32 bits reserved
#define UDPGEN_REG_RES2 28 //32 bits reserved
//csr bitmasks
#define UDPGEN_CSR_EN_BITMASK 0x0001
//Register access macros
void udpgen_command_bit(alt_u32 base, alt_u8 bitmask, alt_u8 state);
#define udpgen_command(base, val) IOWR_8DIRECT(base, UDPGEN_REG_CSR, val)
#define udpgen_set_size(base, val) IOWR_16DIRECT(base, UDPGEN_REG_SIZE, val)
#define udpgen_set_srcip(base, val) IOWR_32DIRECT(base, UDPGEN_REG_SRCIP, val)
#define udpgen_set_dstip(base, val) IOWR_32DIRECT(base, UDPGEN_REG_DSTIP, val)
#define udpgen_set_srcip_a(base, val) { for(int i = 0; i < 4; i++) IOWR_8DIRECT(base, UDPGEN_REG_SRCIP+i, val[3-i]); }
#define udpgen_set_dstip_a(base, val) { for(int i = 0; i < 4; i++) IOWR_8DIRECT(base, UDPGEN_REG_DSTIP+i, val[3-i]); }
#define udpgen_set_srcport(base, val) IOWR_16DIRECT(base, UDPGEN_REG_SRCPORT, val)
#define udpgen_set_dstport(base, val) IOWR_16DIRECT(base, UDPGEN_REG_DSTPORT, val)
#define udpgen_set_dstmac_a(base, val) { for(int i = 0; i < 6; i++) IOWR_8DIRECT(base, UDPGEN_REG_DSTMAC+i, val[5-i]); }
#define udpgen_status(base) IORD_16DIRECT(base, UDPGEN_REG_CSR)
#define udpgen_get_size(base, val) IORD_16DIRECT(base, UDPGEN_REG_SIZE)
#define udpgen_get_srcip(base, val) IORD_32DIRECT(base, UDPGEN_REG_SRCIP)
#define udpgen_get_dstip(base, val) IORD_32DIRECT(base, UDPGEN_REG_DSTIP)
#define udpgen_get_srcport(base, val) IORD_16DIRECT(base, UDPGEN_REG_SRCPORT)
#define udpgen_get_dstport(base, val) IORD_16DIRECT(base, UDPGEN_REG_DSTPORT)
#define udpgen_get_dstmac(base, val) { for(int i = 0; i < 6; i++) val[i] = IORD_8DIRECT(base, UDPGEN_REG_DSTMAC+i); }
//******************************************************
void udpgen_test(alt_u32 base);
#endif /* UDPGEN_H_ */