Intel® Quartus® Prime Pro Edition User Guide: Design Optimization

ID 683641
Date 10/02/2023

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

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