22-Mar-2019 ----------- First, it helps to categorize the functionality one would use A) MGT channel setup/management This is just about setting up TX and RX for serial communication (IBERT or not). These registers and functionalities would presumably be useful for all future FW. B) IBERT setup This is about setting up TX and RX for transmitting and receiving IBERT patterns C) IBERT error rate testing This is about doint the Bit Error Test, i.e. <= X errors out of 10^N bits D) IBERT eye diagram This is about requesting and retrieving eye diagram data --------------------------- And at a minimal one would like to control these aspects. A) MGT channel setup/management 1) MGT TX - Polarity default should be channel specific, if not initially, at least eventually - swing/drive level default value TBD - pre-cursor emphasis default value = code for 0 dB - post-cursor emphasis default value = code for 0 dB - reset MGT TX - payload select: 8B/10B user data vs IBERT pattern will need this eventually but can start with always IBERT 2)MGT RX - Polarity default should be channel specific, if not initially, at least eventually - DFE control on/off or hardwire to disabled - receiver sync status - reset RX - payload select: 8B/10B user data vs IBERT pattern will need this eventually but can start with always IBERT B) IBERT setup 1) MGT TX - select PRBS pattern default value = code for PRBS31 2) MGT RX - select PRBS pattern - IBERT sync status - reset IBERT logic C) IBERT error rate testing 1) MGT TX - inject one-bit error 2) MGT RX - 64 bit counter of bits received - 32 bit (or less) counter of errors - reset the counters unless this is always and only part of resetting IBERT logic? D) IBERT eye diagram 1) MGT TX nothing here 2) MGT RX - control X/Y granularity - initiate start collection - watch collection progress status - retrieve array of values much to be understood here The goal would be to have 80 sets of identically named registers to control/monitor all of the above, one set of register for each TX/RX MGT channel pair. How we name each channel and each register will also have to be pinned down.