`include "combpm.vh" // Auto generated from FWK

/* default values of defined variables */
`ifndef C_ID
`define C_ID 0x507E1710
`endif

addrmap combpm {
    name="BPM protocol decoder controller";
    desyrdl_interface = "AXI4L";


    reg {
        desc="Module Identification Number";
        default sw = r; default hw = r;
        field {} data[32] = `C_ID;
    } ID @0x00;

    reg {
        desc="Module version.";
        field {hw=w;sw=r;} data[32];
    } VERSION @0x04;

    reg {
        desc="SFP module status";
        desyrdl_data_type="bitfields";

        field {desc="RX lost signal";hw=w;sw=r;
        } RXLOS;
        field {desc="Module is absent";hw=w;sw=r;
        } MODABS;
    } SFP;

    reg {
        desc="GT transceivers status";
        desyrdl_data_type="bitfields";
        default sw = r; default hw = w;
        field {desc="Powergood signal";} POWERGOOD;
        field {desc="PLL lock signal";} QPLLLOCK;
        field {desc="RX clk active signal";} RXCLKACTIVE;
        field {desc="RX CDR lock signal";} RXCDRLOCK;
        field {desc="RX reset done signal";} RXRESETDONE;
        field {desc="RX byte is aligned signal";} RXBYTEISALIGNED;
        field {desc="RX byte realign signal";} RXBYTEREALIGN;
        field {desc="RX comma detected signal";} RXCOMMADET;
    } GT_STATUS;

    reg {
        desc="GT transceivers control";
        desyrdl_data_type="bitfields";
        default sw = rw; default hw = r;
        field {desc="RX comma detection enable signal";} RXCOMMADETEN = 1;
        field {desc="Reset RX datapath";} RXRSTDATAPATH = 1;
        field {desc="Reset RX PLL and datapath";} RXRSTPLLDATAPATH = 1;
    } GT_CONTROL;

    reg {
        desc="BPM protocol status and control";
        desyrdl_data_type="bitfields";
        default sw = r; default hw = w;
        field {desc="Frame error";} FRAMEERROR;
        field {desc="Sequence frame count mismatch";} SEQFRAMECNTERROR;
        field {desc="Sequence frame discontinuity";} SEQFRAMEDISCONT;
    } PROTOCOL_ERROR;

    reg  {
        default sw = rw; default hw = r;
        field {desc="Reset error flags";} SOFTRESET;
    } RESET_ERROR;

    reg  {
        default sw = rw; default hw = r;
        field {desc="Soft reset";} SOFTRESET;
    } RESET;

    reg {
        desc="BPM protocol valid frame counters";
        field {hw=w;sw=r;} data[32];
    } VALIDFRAMECNT;

    reg {
        desc="BPM protocol invalid frame counters";
        field {hw=w;sw=r;} data[32];
    } INVALIDFRAMECNT;

    reg {
        desc="BPM protocol valid frame rate";
        field {hw=w;sw=r;} data[32];
    } VALIDFRAMERATE;

    reg {
        desc="BPM protocol invalid frame rate";
        field {hw=w;sw=r;} data[32];
    } INVALIDFRAMERATE;

    reg {
        desc="BPM protocol frame sequence";
        field {hw=w;sw=r;} data[16];
    } FRAMESEQ;

    external mem {
        desc = "BPM filter table";
        memwidth = 32;
        mementries = 2**`C_W_ADDR_TABLE;
    } FILTERTABLE;

};