Add a tclink_channel_controller to help with initialisation, monitoring, and recovery of TCLink channels
I trimmed down the additional interface signals to a minimum:
Inputs (in the tr_core_ctrl record):
-
channel_fsm_reset
: To reset the channel controller state machine. -
channel_fsm_enable
: To enable/disable the channel controller state machine. When disabled, the state machine just sits in the idle state and does not touch anything. -
channel_fsm_gentle
: To choose between 'full' and 'gentle' reset modes. Basically: 'full' reset mode also resets the TX/RX PLLs, while 'gentle' reset mode resets the data paths only.
Outputs (in the tr_core_stat record):
-
channel_fsm_running
: Indicates whether the channel controller is operational or not. (I.e., reports whether the FSM is in the idle state or not.) -
channel_fsm_state
: Indicates the precise channel controller FSM state, for monitoring/diagnostics. -
channel_ready
: Indicates that the channel controller considers the channel ready for operation.
In principle all the user needs to do is:
- Perform the
mgt_reset_all
reset for all MGT quads once after FPGA configuration. (Not necessary if the channel controller is not in 'gentle reset' mode.) - Enable the TCLink channel controller.
- Wait for channels to report as ready.
All these signals are also available in the example designs in the VIO controls.