ECO retargeting involves automatically applying ECO to one netlist by referencing the Reference netlist and exporting the resulting ECO script to be used on another netlist. This process offers two distinct benefits based on the types of ECO netlists:
Simplified Handling of hierarchical netlists: When the ECO is performed on a block-level netlist and the ECO script is applied to a full hierarchical netlist, it simplifies the task of dealing with the large and intricate full netlist. This streamlines the ECO implementation and makes it more manageable.
Streamlined ECO for netlists with complicated logic: The second benefit comes into play when the ECO is executed on a prelayout netlist that has not undergone retiming or DFT insertion. The generated ECO script can then be applied to the netlist that has undergone retiming or DFT insertion. By doing this, the ECO process avoids the need to handle the retimed netlist, which would typically require an SVF file. Additionally, it eliminates the need to deal with the DFT netlist, which requires DFT constraints.
The ECO script is written in Perl syntax using the 'write_perl' command.
Figure 1: Block level ECO retargeting to hierarchical netlist
As shown in Figure 1, B0 is the block level reference netlist which is synthesized after RTL change; B1 is the block level pre-layout netlist which doesn't have boundary optimized done by the back-end tool; B2 is the block inside the large post-layout netlist. B1 and B2 are equivalent, but they maybe different in structure due to the optimization done by the back-end tool.
Synthesizing the full design to get the large complete new netlist would take long time, the block level B0 is much easier to be generated through synthesis. Doing ECO between B0 and B1 is much faster than between the two full netlists.
The first round ECO is run on block level to generate block level ECO script:
# GofCall ECO script, run_block_eco_retarget1.pl use strict; setup_eco("eco_example");# Setup ECO name read_library("tsmc.lib");# Read in standard library read_svf("-ref", "reference.svf.txt"); # Optional, must be loaded before read_design, must be in text format read_svf("-imp", "implementation.svf.txt"); # Optional, must be loaded before read_design, must be in text format read_design('-ref', 'mpu_block_new_syn.v');# Read in block level Reference Netlist, B0 in Figure 1 read_design('-imp', 'mpu_block_pre.v');# Read in prelayout block level Implementation Netlist, B1 in Figure 1 set_top('MPU');# Set the top module to MPU set_ignore_output("scan_out*"); # The block level DFT signals may have different names set_pin_constant("scan_enable", 0); set_pin_constant("scan_mode", 0); fix_design; save_session("current_eco_name"); # Save a session for future restoration write_perl('mpu_block.gpl'); # ECO script will apply to large post-layout netlist exit;
The second round ECO is to apply block level ECO script to the large top level post-layout netlist:
# GofCall ECO script, run_block_eco_retarget2.pl use strict; setup_eco("eco_example");# Setup ECO name read_library("art.5nm.lib");# Read in standard library # Read in Implementation Netlist Which is under ECO, B2 is the block inside shown in Figure 1 read_design("-imp", "top_level_implementation.gv"); set_top('MPU'); # Set the top module to sub-block MPU # Run the ECO script, S0 in Figure 1. S0 is now retargeted on the sub-block MPU in the large post-layout netlist run('mpu_block.gpl'); set_top("SOC_TOP"); # Set the top module to the most top report_eco(); # ECO report check_design("-eco");# Check if the ECO causes any issue, like floating write_verilog("eco_verilog.v");# Write out ECO result in Verilog exit;# Exit when the ECO is done, comment it out to go to interactive mode when 'GOF >' appears
One issue with the retargeting flow is some instances appeared in the ECO script 'mpu_block.gpl' may have been optimized away by back-end tool. In such case, the ECO script should be manually adjusted and apply it to the netlist again.
To debug and search for the right instance or net in the netlist, GOF Incremental Schematic feature can be used. Refer to Incremental Schematic for more detail.
Currently, to facilitate the process of logic equivalence checking on retiming netlists and DFT netlists, multiple intermediate netlists are utilized. Logic equivalence checkers are executed between these netlists in a staged manner.
Figure 2: Stage by stage logic equivalence checker for complicated netlist
The challenge of performing Functional ECO lies in ensuring accurate logic equivalence checkers for all intermediate netlists. However, the introduction of GOF ECO retargeting technology has significantly simplified this process. Initially, automatic ECO is applied to the first-stage netlist, which does not have retiming and DFT logic. The resulting ECO script is then extended to the subsequent retiming and DFT netlists in the subsequent stages. This approach efficiently avoids the complexities of handling logic in the retiming netlist and DFT logic, leading to a substantial acceleration of the ECO process. Nevertheless, there is a prerequisite for this method to be successful: the retiming and DFT netlists must maintain consistent instance naming from the initial stage synthesized netlist.
Figure 3: Retargeting ECO to netlists with complicated logic
There is a variation to the process described above when the ECO script encounters numerous missing object errors caused by P&R (Place and Route) optimization in the post-layout netlist. In such cases, the N3 ECO Netlist can be utilized as the Reference Netlist to rectify the last-stage P&R netlist, the N4 Netlist, as illustrated in Figure 4.
Figure 4: Variation to the retargeting ECO
The first round ECO is run on simple prelayout netlist by use the N1E Netlist as reference:
# GofCall ECO script, run_hier_eco_retarget1.pl use strict; setup_eco("eco_retarget1");# Setup ECO name read_library("tsmc.lib");# Read in standard library read_design('-ref', 'N1E_NETLIST.v');# Read in synthesized new netlist without retiming/DFT read_design('-imp', 'N1_NETLIST.v');# Read in the original N1 Netlist set_top('SOC_TOP');# Set the top module fix_design; write_perl('N1_ECO.gpl'); # ECO script will apply to late stage netlists exit;
Then ECO is run on the late stage netlists:
# GofCall ECO script, run_hier_eco_retarget2.pl use strict; setup_eco("eco_retarget2");# Setup ECO name read_library("tsmc.lib");# Read in standard library read_design('-ref', 'N1_NETLIST.v');# Load N1 Netlist for reference on schematic read_design('-imp', 'N2_NETLIST.v');# and do the same to N3_NETLIST.v and N4_NETLIST.v set_top('SOC_TOP');# Set the top module run('N1_ECO.gpl'); # Apply the ECO script dumped out in the first round write_verilog('N2_ECO.v'); # ECO netlist exit; # Comment it out for schematic debug
Check GOF Manual for more detail