Optimal ECO Strategy: Combining Automatic and Manual Modes for Resource-Limited Metal-Only ECOs

Abstract

Lockup latches or flops are used in scan chains to fix hold time issues and ensure correct timing during shift operations. These latches do not interfere with the non-scan functional behavior of a design. However, if not managed properly during functional ECO flow, they can inadvertently affect the outcome of an ECO, particularly in metal-only ECO scenarios. An optimal ECO requires special handling of lockup latches to avoid introducing redundant or unnecessary logic.

Use case: Lockup handling in metal only ECO

In this use case, the RTL changes involve updates to a gated clock enable signal logic. Figure 1 illustrates the reference design where modifications have been made to the gated clock enable logic. When implementing the design, the ECO process should apply a corresponding patch to this logic.

Figure 1 Reference design has gated clock enable signal logic modification

However, in the implementation design, the gated clock driving the logic also drives additional lockup latches that are not present in the reference design, as shown in Figure 2.

Figure 2 Implementation design drives extra lockup latches

Without special handling of these lockup latches during the ECO process, redundant logic, such as new gated clock cells and duplicated enable signal logic, can be introduced. Automatic ECO tools, GOF ECO, or Conformal ECO will generate the same issue. In Figure 3, the redundant logic is shown in orange.

Figure 3 Redundant ECO logic created for the lockup latches

In this particular metal-only ECO case, due to the unavailability of spare gated clock cells, the introduction of 16 multiplexers (MUXs) would be required to handle the clock conversion. This significantly increases resource usage and leads to a lack of spare gates necessary to complete the job, as shown in Figure 4.

Figure 4 Gated clock converted in metal only ECO

The optimal solution is to temporarily disconnect the lockup latches before applying the automatic ECO. After the ECO process completes, the lockup latches are reconnected. This method prevents the creation of unnecessary logic, reduces resource consumption, and ensures a clean and efficient ECO outcome.

Figure 5 Solution to the lockup latches

ECO script to handle lockups

# GofCall ECO script, run_metal_only_lockup_example.pl
# Lockup latches are treated specially
use strict;  
undo_eco;  # Discard previous ECO operations
# Setup ECO name, had better be unique to avoid naming confliction
setup_eco("eco_example");  

read_library("art.90nm.lib"); # Read in standard library
read_design("-ref", "reference.gv");  # Read in the Reference Netlist
read_design("-imp", "implementation.gv");  # Read in the implementation Netlist Which is under ECO

# Disconnect lockup latches' clock pins before automatic fix

set_top("state_control");  # Set to module 'state_control'
my @locks = get_cells("lockup*"); # Get all cells with 'lockup' string
my $oldcons = {};
foreach my $lock (@locks){
  my @drv = get_driver("$lock/CK", "-nonbuf");
  $oldcons->{$lock} = \@drv;
  change_pin("$lock/CK", "");
}

fix_design();

# Connect back lockup latches' clock pins

set_top("state_control");  # Set to module 'state_control'
foreach my $lock (@locks){
  my ($inst, $pin, $dtype) = @{$oldcons->{$lock}};
  change_pin("$lock/CK", "$inst/$pin");
}


set_top("topmod");  # Set to the most top module

# Now we need to map all new added ECO gates to spare type instances 
read_def("topmod.def");   # Read Design Exchange Format file, optional. 
# Specify spare cell pattern, when 'map_spare_cells' is done,
#  a new updated spare list file will be written out. 
# The updated spare list file has default name 'spare_cells_script_name.list'.
# Click 'get_spare_cell' below for more usage detail
get_spare_cells("*/*_SPARE*"); 
# Comment the above line and use the following line to use spare list file
# if the spare list file has been generated already and gone through other ECOs
# get_spare_cells("-file", "spare_list_file.txt");
map_spare_cells(); 

report_eco();   # ECO report
write_verilog("eco_verilog.v"); # Write out ECO result in Verilog
write_soce("eco_soce.tcl"); # Write out TCL script for SOC Encounter 

exit; # Exit when the ECO is done, comment it out to go to interactive mode when 'GOF >' appears

Conclusion

To achieve the best ECO results, combining Automatic and Manual ECO modes is the ideal approach. This is especially crucial in Metal-Only ECOs, where resources are highly constrained.


Follow us:
© 2024 NanDigits Design Automation. All rights reserved.