ECO Retargeting
ECO retargeting is to run ECO on the block level netlist and dump the ECO script. The ECO script is retargeted to the post-layout netlist by applying changes on the block in the large netlist. The ECO script is in Perl syntax written out by 'write_perl' command.
Figure 1: ECO Retargeting in Functional Netlist ECO
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_example_eco_retarget1.pl
use strict;
undo_eco;
# Discard previous ECO operations
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_example_eco_retarget2.pl
use strict;
undo_eco;
# Discard previous ECO operations
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 this rare 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.
Check GOF Manual for more detail
Follow us:
NanDigits.com US |
NanDigits.cn China
© 2023 NanDigits Design Automation. All rights reserved.