Setting constraints for the Kria K26 SOM, or any SOM for that matter, differs to the simple 1-1 constraints we define for FPGA's and SoC's. The reason they differ is due to SOM's connecting to the outside world via external connectors to a carrier card instead of direct connections to the pins of the FPGA/SoC.
This can definitely be a source of confusion/headache for Engineers so let's demystify how this all comes together here!
Kria K26 SOM PCB and Block Diagram
Shown below is the K26 SOM and connector view of the PCB taken from the datasheet:
In the above we can see the 2 connectors on the left and right edges of the SOM.
Within the SOM itself we have an UltraScale+ MPSoC chip as well as integrated non-volatile memory including QSPI, eMMC, EEPROM and DDR4 memory as per the block diagram below:
How can we then describe the pins from the UltraScale+ MPSoC we wish to use for our SOM design? We need a way to relate the SOM connector pins back to the MPSoC pins. Taking a look at the connector descriptions in the datasheet we see entries such as:
Now the above tells us a description for each of the 240 pins of connector 1 which is useful information required for the PCB layout of a carrier card, however, this is not enough information to specify the constraints as Vivado expects constraints to be defined in terms of the MPSoC pins.
The secret sauce we need is the mapping from a SOM connector pin to an MPSOC pin and for this we need to look at the K26 SOM XDC file provided by Xilinx:
Aha, now we are getting somewhere! In the above we see PACKAGE_PIN A12 on the UltraScale+ maps to SOM connector 1 pin c24. All we need to then do is replace som240_1_c24 with the port name we have defined in our HDL code we wish to use as an input or output.
SOM Fan Constraints
Let's take the SOM fan connection as an example to illustrate how this works.
Firstly, we need to know which connector pin connects to the fan and it turns out that connector pin som240_1_c24 is the one we are after.
From here we can search for som240_1_c24 in the K26 SOM XDC file to find it maps to PACKAGE_PIN A12.
Assuming we have an output port named o_fan_enable within our entity/module we can then complete our constraints as follows:
This is how we handle constraints for the K26 SOM.