Quartus® Prime Pro Edition User Guide: Design Optimization

ID 683641
Date 4/01/2024
Document Table of Contents

7.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:

  1. Create the node by using the create_new_node command.
  2. Make connections to and from the node by using the make_connection command.
  3. Update the lutmask by using the modify_lutmask command.
  4. 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.