1.5. ECO Command Limitations
The ECO commands have the following limitations due to connection dependencies within Intel FPGA devices.
Create a new LUT in an exact location
- You cannot use ECO commands to modify dedicated connections.
- You cannot modify dedicated connections within a single ALM. This limitation applies to direct connections between LUT and flip-flop nodes.
- You can connect from or to a Hyper-Register. However, you cannot remove connections from or to a Hyper-Register because removing a connection from a Hyper-Register would leave the routing dangling. As an alternative, you can use make_connection to change a Hyper-Register connection immediately, without removing the previous connection first.
- Use of the place_node command with location arguments does not overwrite Partial Reconfiguration region constraints.
- If a LAB already has the maximum number of legal connections where a node is placed, the place_node or make_connection commands can fail, preventing the connection to the first placed node that cannot be legalized. You can then either move the original node to a different location, or move other nodes from the LAB to free up routing resources.
- The Fitter may fail to apply some I/O related ECO modifications, such as modify_io_slew_rate, modify_io_current_strength, and modify_io_delay_chain, if called using a command-line Tcl script or in interactive context. That is, any case that calls the eco_load_design command directly. To ensure all I/O modifications are applied successfully, use the standard ECO Tcl script approach this document describes.
The recommended order for creating and placing new LUTs or new flipflops is:
- Create the node by using the create_new_node command.
- Make connections to and from the node by using the make_connection command.
- Update the lutmask by using the modify_lutmask command.
- Place the node by using the place_node command.
This flow ensures that analysis includes all routing requirements when determining a legal placement for the new node. For example:
set lut_name new_lut
create_new_node –name $lut_name –type lut
make_connection –from input1 –to $lut_name –port DATAA
make_connection –from input2 –to $lut_name –port DATAB
make_connection –from $lut_name –to output_dest –port DATAD
modify_lutmask –to $lut_name –eqn {A&B}
place_node –name $lut_name –location “X80 Y80 X85 Y95”
Create a new Flipflop in an exact location
set ff_name new_ff
create_new_node –name $ff_name –type ff
make_connection –from input1 –to $ff_name –port DATAA
make_connection –from input2 –to $ff_name –port DATAB
make_connection –from $ff_name –to output_dest –port DATAD
modify_lutmask –to $ff_name –eqn {A&B}
place_node –name $ff_name –location “X80 Y80 X85 Y95”
Note: To minimize issues with name matching caused by escaped characters, it can be useful to surround entity names with {} characters, instead of "". This technique is particularly useful if entity names contain backslashes or any other special characters.