Configurable transceiver enable
I need to enable transceiver channels in groups based on a board parameter read during board start-up. If the parameter is '0', channels 1 and 2 are enabled, channels 3 and 4 are disabled. If the parameter is '1', channels 3 and 4 are enabled and 1 and 2 are disabled. I want to explicitly disable the unused channels to save power and prevent them from driving outputs.
The only way to disable channels that I've figured out is to hold the input reset of the reset controller asserted. Then I'll need 2 reset controllers, one for each group of 2 channels. I'll also need 2 PLLs since they are interconnected with the reset controller.
Is this the way to do it or is there a better way?
Best regards,
Julia
My understanding of "board‑level transceiver parameters are static at power‑up", implied they are compile‑time only. In practice, changing these parameters would require IP regeneration and a full FPGA recompilation, rather than being something that can be altered dynamically at runtime (i.e., they behave similarly to localparam settings).
With that in mind, let me rephrase my understanding of a possible implementation approach:
- Only 2 channels would be active in normal operation.
- The remaining channels would be treated as unused channels
- Only 1 bitstream
Based on the transceiver reset architecture described in the Cyclone 10 GX Transceiver PHY User Guide, you may want to consider this conceptual approach to instantiate a 4‑channel transceiver, and control which channel is active using the four independent reset ports per channel:
- tx_analogreset
- tx_digitalreset
- rx_analogreset
- rx_digitalreset

For the unused channels, the handling would be:
- Assert TX analog reset
- Assert RX analog reset
- Keep TX and RX digital reset asserted as well
This would prevent the unused channels from calibrating, transmitting, or receiving data, while keeping the configuration static and avoiding any runtime reconfiguration complexity.