diff --git a/src_en/man.geco_multiflops.txt b/src_en/man.geco_multiflops.txt new file mode 100644 index 0000000000000000000000000000000000000000..9247bab8c4b324d9f2201954cacacb71e78acc09 --- /dev/null +++ b/src_en/man.geco_multiflops.txt @@ -0,0 +1,89 @@ +

2.2.7 Multibit flops in ECO

+

Multibit flops can pose a challenge in logic equivalence check and ECO due to the different naming conventions used by various synthesis tools. For example, as depicted in Figure 5, a four-bit multibit flop has a different naming style in Cadence Genus compared to Synopsys Design Compiler after name changing. Additionally, backend tools may split some multibit flops into single bit flops to address timing issues. These factors make key point mapping a complex task.

+

In logic equivalence check, multibit flops need to be mapped to single flops. However, the mapping of single flops to multibit flops from the Reference Netlist may differ from the Implementation Netlist. For instance, in Figure 5, the Implementation Netlist has a four-bit multibit flop instance named 'a_reg_0_2_4_', whereas the Reference Netlist after Synthesis may have two-bit multibit flops named 'a_reg_0_1_' and 'a_reg_2_4_'. Depending solely on naming conventions may not lead to the correct multibit to single bit mapping. Although LEC and ECO tools can handle some limited multibit to single bit mapping using comprehensive algorithms, there is no guarantee of complete successful mapping.

+
+

Figure 5: Multibit flop naming in synthesis tools

+

GOF provides support for accurate and reliable key point mapping through the use of text mode SVF files from Design Compiler. These SVF files are encrypted by default, but can be converted to text mode when using Formality to read the encrypted file. Additionally, GOF can convert backend multibit flop split/merge information into an SVF file. By reading both the synthesis SVF and the converted SVF file, GOF is able to completely resolve the mapping of multibit flops to single bit flops.

+

For instance, Innovus generates a multi_bit_pin_mapping file to store split and merge information. This file can be converted to an SVF text file using a GOF script.

+

Here is an example script for converting an Innovus multi_bit_pin_mapping file:

+
read_library("libdir/art.lib");
+set_multibit_blasting(0); # Disable multibit blasting
+read_design('-imp', "imp_net.v");
+set_top("the_top");
+
+open(FIN, "./multi_bit_pin_mapping");
+my $mbit_split = {};
+my $mbit_merge = {};
+while(<FIN>){
+  my ($from, $to) = (m/(\S+)\s+(\S+)/);
+  $from =~ s/\/\w+$//; # remove the pin
+  $to =~ s/\/\w+$//; 
+  my ($module, $to_inst) = get_resolved($to);
+  my ($from_inst) = ($from =~ m/([^\/]+)$/);
+  my $libcell = get_ref($to);
+  gprint("get ref of $to as $libcell\n");
+  my $is_ff = is_seq($libcell, "-ff");
+  if($is_ff){
+    if(is_seq($libcell, "-bank")==0){
+      if(!exists $mbit_split->{$module}{$from_inst}){
+	$mbit_split->{$module}{$from_inst} = [];
+      }
+      if(grep($_ eq $to_inst, @{$mbit_split->{$module}{$from_inst}})==0){
+	gprint("Multibit split in $module $from_inst to $to_inst\n");
+	push @{$mbit_split->{$module}{$from_inst}}, $to_inst;
+      }
+    }else{
+      # Bank
+      if(!exists $mbit_merge->{$module}{$to_inst}){
+	$mbit_merge->{$module}{$to_inst} = [];
+      }
+      if(grep($_ eq $from_inst, @{$mbit_merge->{$module}{$to_inst}})==0){
+	gprint("Multibit merge in $module $from_inst to $to_inst\n");
+	push @{$mbit_merge->{$module}{$to_inst}}, $from_inst;
+      }
+    }
+  }
+}
+close(FIN);
+
+my $svf = "";
+foreach my $module (keys %$mbit_merge){
+  $svf .= "guide_multibit -design $module -type { svfMultibitTypeBank } \\\n";
+  $svf .= "  -groups { \\\n";
+  foreach my $mbit_inst (keys %{$mbit_merge->{$module}}){
+    my $i_st = "";
+    my $cnt = 0;
+    foreach my $s_bit (@{$mbit_merge->{$module}{$mbit_inst}}){
+      $i_st .= " $s_bit 1";
+      $cnt++;
+    }
+    $i_st .= " $mbit_inst $cnt";
+    $svf .= "\t{ $i_st } \\\n";
+  }
+  $svf .= "    }\n";
+}
+foreach my $module (keys %$mbit_split){
+  $svf .= "guide_multibit -design $module -type { svfMultibitTypeSplit } \\\n";
+  $svf .= "  -groups { \\\n";
+  foreach my $mbit_inst (keys %{$mbit_split->{$module}}){
+    my $i_st = "";
+    my $cnt = 0;
+    foreach my $s_bit (@{$mbit_split->{$module}{$mbit_inst}}){
+      $i_st .= " $s_bit 1";
+      $cnt++;
+    }
+    $i_st = " $mbit_inst $cnt $i_st";
+    $svf .= "\t{ $i_st } \\\n";
+  }
+  $svf .= "    }\n";
+}
+open(FOUT, ">backend_multibit.svf.txt");
+print FOUT $svf;
+close(FOUT);
+
+

Two SVF files for Implementation are loaded in the implementation read_svf:

+
read_svf("-ref", "reference.svf.txt");       
+read_svf("-imp", "implementation.svf.txt", "backend_multibit.svf.txt");  # Two SVF files are loaded
+read_design("-ref", "reference.gv");# Read in Reference Netlist
+read_design("-imp", "implementation.gv");# Read in Implementation Netlist Which is under ECO
+
diff --git a/src_en/man.geco_noexactpinmatch.txt b/src_en/man.geco_noexactpinmatch.txt new file mode 100644 index 0000000000000000000000000000000000000000..4a4fc1fe5068079b34696f218421e1f348b95d10 --- /dev/null +++ b/src_en/man.geco_noexactpinmatch.txt @@ -0,0 +1,34 @@ +

2.2.11 No Exact Pin Match

+

Physical Synthesis is more and more popular in logic synthesis. Physical Synthesis tool, Design Compiler Topographical(DCT) or Design Compiler Graphical(DCG) for example, may add hierarchical pins that are not in RTL code and it may cause mapping issue when Implementation Netlist is comparing with Reference Netlist in ECO.

+

For example, DCT may add 'IN0', 'IN1', 'IN2', 'IN2_BAR' ... to hierarchical modules. The new added pins are not necessarily matching to each other in Implementation Netlist and Reference Netlist. That is, IN0 in module A in Reference Netlist maybe a different signal from IN0 in module A in Implementation Netlist.

+
+

Figure 12: No Exact Pin Match

+These pins are randomly named in each run. They won't affect logic equivalence check, but they need to be excluded in pin matching in ECO. Otherwise, the ECO tool would insert redundant logic or wrong logic.

+

API set_noexact_pin_match can be used to resolve the mapping issue between Implementation Netlist and Reference Netlist.

+

By adding the port naming regular expression in the API argument, set_noexact_pin_match('\bIN\d+(_BAR)?\b'), these ports will be remapped.

+

Note: This API should be run before reading designs.

+
+# GOF ECO script, run_example_noexact_pin_match.pl
+use strict;
+undo_eco;# Discard previous ECO operations
+setup_eco("eco_example");# Setup ECO name
+read_library("art.90nm.lib");# Read in standard library
+set_noexact_pin_match('\bIN\d+(_BAR)?\b'); # The argument is in REGEX format to detect IN0/IN0_BAR/IN1...
+# Note: set_noexact_pin_match API should be run before reading designs!
+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", "reference.gv");# Read in Reference Netlist
+read_design("-imp", "implementation.gv");# Read in Implementation Netlist Which is under ECO
+set_top("SOC_TOP"); # Set the top to the most top module SOC_TOP
+set_ignore_output("scan_out*");
+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
+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
+ +
+

diff --git a/src_en/man.geco_noteinrtlmod.txt b/src_en/man.geco_noteinrtlmod.txt new file mode 100644 index 0000000000000000000000000000000000000000..4af266d73904f8b3ecadff2c94ff05b3d89b7bcb --- /dev/null +++ b/src_en/man.geco_noteinrtlmod.txt @@ -0,0 +1,15 @@ +

2.2.16 Note in RTL modification and re-synthesis

+

When modifying RTL and do re-synthesis, care should be taken to maintain the database as much alike Implementation Netlist as possible.

+

2.2.16.1 Keep sequential signal name

+

A common problem in modifying RTL is having sequential signal name changed, which appears in Reference Netlist as a different flop instance. For example

+
+always @(posedge clk) abc <= abc_next; +
+

It creates a flop instance 'abc_reg' in synthesis. If the ECO in RTL change this to

+
+always @(posedge clk) abc_new <= abc_next; +
+

After synthesis, a new flop instance 'abc_new_reg' is created. GOF may fail to find that 'abc_new_reg' being able to merge with 'abc_reg', due to other non-equivalent points present, which brings a redundant fix in the new register creation.

+

So it is highly recommended to keep the sequential signal names in re-synthesis.

+

2.2.16.2 Use the same synthesis constraints

+

When do re-synthesis, the same constraints should be used as what has been used in Implementation Netlist synthesis. If any hierarchy is not present in Implementation Netlist, it's better to flatten the module in synthesis to maintain the same hierarchies.

diff --git a/src_en/man.geco_phaseinvert.txt b/src_en/man.geco_phaseinvert.txt new file mode 100644 index 0000000000000000000000000000000000000000..9d9b95e24c413dbbe98efcce1e7af034d353a21d --- /dev/null +++ b/src_en/man.geco_phaseinvert.txt @@ -0,0 +1,31 @@ +

2.2.12 Flip-flop Phase Inverted

+

During the pre-mask design stage, transitioning a flip-flop from resettable to settable type or vice versa is a relatively straightforward task. However, making such changes during the post-mask design stage can be challenging because it can be difficult to locate an available spare flip-flop to replace the original one. To overcome this challenge, a common approach is to add inverters to the input and output pins of the flip-flop while maintaining its original set/reset type.

+

Aside from resolving the issue of locating spare flip-flops, adding inverters to the flip-flop input and output pins can also address timing or power-related concerns. In some cases, this technique can help with timing closure or reduce power consumption.

+

It is essential to note, however, that implementing such changes can lead to challenges during logic equivalence checking. Incorrectly addressing these changes can result in false non-equivalent points, leading to design uncertainty. As such, appropriate measures should be taken to ensure that the changes made to the flip-flop type do not affect logic equivalence checking.

+
+

Figure 13: Flip-flop Phase Inverted

+

To address this issue, the GOF platform provides an API command to configure these cases. The set_mapping_method('-phase') API is utilized to handle such situations and ensure that the changes made to the flop type do not cause false non-equivalent result.

+
+# GOF ECO script, run_example_ff_phase_inverted.pl
+use strict;
+undo_eco;# Discard previous ECO operations
+setup_eco("eco_example");# Setup ECO name
+read_library("art.90nm.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", "reference.gv");# Read in Reference Netlist
+read_design("-imp", "implementation.gv");# Read in Implementation Netlist Which is under ECO
+set_top("SOC_TOP"); # Set the top to the most top module SOC_TOP
+set_mapping_method('-phase'); # Check flop phase during LEC
+set_ignore_output("scan_out*");
+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
+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
+ +
+

diff --git a/src_en/man.geco_reporttimingapi.txt b/src_en/man.geco_reporttimingapi.txt new file mode 100644 index 0000000000000000000000000000000000000000..9d756a2f05e1d98a7eb7282d4ca2c7c06e0e6af7 --- /dev/null +++ b/src_en/man.geco_reporttimingapi.txt @@ -0,0 +1,17 @@ +

2.10 Report Timing

+

Timing can be reported before or after ECO by report_timing API.

+

2.10.1 Report Timing APIs

+

Timing report related APIs are these:

+
+create_clock: Timing command and GOF Formal command. Create clock for fault verification
+set_initial_trans: Timing command. Set initial transition for clock
+set_input_delay: Timing command. Set input delay
+set_output_delay: Timing command. Set output delay
+set_output_load: Timing command. Set output load to all output ports
+set_input_transition: Timing command. Set input transition to all input ports
+set_false_path: Timing command. Set false path
+set_clock_uncertainty: Timing command. Set clock uncertainty
+report_timing: Timing command. Report timing
+list_wireload: Timing command. List all wireload defined in the liberty files
+set_wireload: Command for Timing Report. Set wireload for one liberty library
+
diff --git a/src_en/man.geco_rundebugautoeco.txt b/src_en/man.geco_rundebugautoeco.txt new file mode 100644 index 0000000000000000000000000000000000000000..83c331876a21e920baa6db47cc5313052b5d8913 --- /dev/null +++ b/src_en/man.geco_rundebugautoeco.txt @@ -0,0 +1,6 @@ +

2.2.4 Run and debug in automatic functional ECO

+

The ECO Script can be run by '-run' option.

+
+gof -run run_example.pl +
+

Check Run and debug ECO script section in User Manual for more detail

diff --git a/src_en/man.geco_script4gatearray.txt b/src_en/man.geco_script4gatearray.txt new file mode 100644 index 0000000000000000000000000000000000000000..91e016ef69019f1e36244432670c010c3a33bb6e --- /dev/null +++ b/src_en/man.geco_script4gatearray.txt @@ -0,0 +1,33 @@ +

2.4.5 Example GOF script for gate array cells ECO flow

+

GOF script has the exact same syntax of Perl script. It runs the exported commands that access the netlist database and modify the netlist.

+
+# GOF ECO script, run_gate_array_cells_eco_example.pl
+use strict;
+undo_eco;# Discard previous ECO operations
+# Setup ECO name
+setup_eco("eco_gate_array_example" );
+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", "reference.gv");# Read in Reference Netlist
+read_design("-imp", "implementation.gv");# Read in Implementation Netlist Which is under ECO
+set_top("topmod");# Set the top module that ECO is working on
+set_ignore_output("scan_out*");
+set_pin_constant("scan_enable", 0);
+set_pin_constant("scan_mode", 0);
+read_lef("tsmc.lef"); # Read LEF
+read_def("topmod.def"); # Read Design Exchange Format file
+fix_design;
+save_session("current_eco_name"); # Save a session for future restoration
+# Specify gate array cells, spare and functional
+# set_dont_use command can be used to exclude some gate array cells
+get_spare_cells("-gate_array", "G*", "-gate_array_filler", "GFILL*"); # Gate array cells extraction
+map_spare_cells();
+report_eco(); # ECO report
+check_design();# Check design
+write_verilog("eco_verilog.v");# Write out ECO result in Verilog
+write_tcl("eco_icc.tcl");# Write out TCL script for ICC
+exit;# Exit when the ECO is done, comment it out to go to interactive mode when ’GOF >’ appears
+ +
+

diff --git a/src_en/man.geco_script4manualeco.txt b/src_en/man.geco_script4manualeco.txt new file mode 100644 index 0000000000000000000000000000000000000000..4e56077242d19f5a11307cc62d9cc168754226af --- /dev/null +++ b/src_en/man.geco_script4manualeco.txt @@ -0,0 +1,20 @@ +

2.6.4 Example GOF script for Manual ECO

+
+# GOF ECO script, run_example.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_design("-ref", "reference.gv");# Read in Reference Netlist
+read_design("-imp", "implementation.gv");# Read in implementation Netlist Which is under ECO
+set_top("topmod");# Set the scope to the module that ECO is working on
+# The following API adds a mux in flop 'state_reg_0_' D input pin,
+# and connect up the original connection to pin 'A',
+# pin 'B' connect to net 'next_state[7]', and pin 'S' to net 'sel_mode'
+# the net can be replaced by format of 'instance/pin' , E.G. '.S(state_reg_2_/Q)'
+change_pin("state_reg_0_/D", "MX2X4", "", ".A(-),.B(next_state[7]),.S0(sel_mode)");
+report_eco();
+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
+ +
diff --git a/src_en/man.geco_script4manualmetalonly.txt b/src_en/man.geco_script4manualmetalonly.txt new file mode 100644 index 0000000000000000000000000000000000000000..a939cd9102751981fb9d3a21190f99c31ec4476c --- /dev/null +++ b/src_en/man.geco_script4manualmetalonly.txt @@ -0,0 +1,39 @@ +

2.7.2 Example GOF script for Manual Metal Only ECO

+
+# Manual Metal Only ECO, manual_metal_eco.pl
+use strict;
+undo_eco;
+setup_eco("metal_eco0123");
+set_log_file("metal_eco0123.log");
+read_library("/prj/lib/tsmc40.lib");
+read_design("-imp", "/prj/netlist/imp_net.v");
+set_top("mtop");

+new_port("nout7", "-output");# Create a new port 'nout7'
+# Place the port to 60000, 1000000. It's approximate position, the main purpose is for
+# spare instances selection
+place_port("nout7", 60000, 100000);
+new_port("nout8", "-output");# Create another port
+place_port("nout8", 120000, 81000);
+# 'nout8' is driven by an invert first, and the invert's input is driven by pin 'cmpmod/rego/QN'
+change_port("nout8", "INV_X1M", "", "cmpmod/rego/QN");
+# Drive the 'nout7' by 'INV_X1M' and leave the input unconnected, but the mapped
+# spare instance name is returned.
+my $inst = change_port("nout7", "INV_X1M", "", "");
+# Drive the new instance's input by a flop, and specify the flop's connection in the 4th argument
+change_pin("$inst/A", "SDFFRPQ_X4M", "", \n".CK(cmpmod/rego/CK),.D(cmpmod/rego/QN),.R(1'b0),.SE(1'b0),.SI(1'b0)");

+read_def("/prj/def/imp_net.def");
+get_spare_cells("Spare_*/*_SPARE_GATE*");
+# Before mapping to spare gates, set a large number in buffer distance, so that GOF does not
+# add buffers for long connections.
+set_buffer_distance(9999999);
+# The following 'map_spare_cells' command maps the three new ECO instances to the optimal
+# spare instances.
+map_spare_cells;

+report_eco;
+write_verilog("imp_eco0123.v");
+ +
+

diff --git a/src_en/man.geco_script4metaleco.txt b/src_en/man.geco_script4metaleco.txt new file mode 100644 index 0000000000000000000000000000000000000000..c7a327c62473b0d394551bf0b7a123bdd86eee5d --- /dev/null +++ b/src_en/man.geco_script4metaleco.txt @@ -0,0 +1,40 @@ +

2.3.6 Example GOF script for Metal Only ECO

+

GOF script has the exact same syntax of Perl script. It runs the exported commands that access the netlist database and modify the netlist.

+

The following shows an example of an automatic Metal Only ECO:

+
+# GOF ECO script, run_metal_only_example.pl
+use strict;
+undo_eco;# Discard previous ECO operations
+# Setup ECO name
+setup_eco("eco_metalonly_example " );
+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", "reference.gv");# Read in Reference Netlist
+read_design("-imp", "implementation.gv");# Read in Implementation Netlist Which is under ECO
+set_top("topmod");# Set the top module that ECO is working on
+set_ignore_output("scan_out*");
+set_pin_constant("scan_enable", 0);
+set_pin_constant("scan_mode", 0);
+read_def("topmod.def");# Read Design Exchange Format file, optional. Loading DEF file before fix_design makes ECO physical aware
+fix_design;
+save_session("current_eco_name"); # Save a session for future restoration
+# The following is metal ECO related
+# Specify spare cell pattern, when 'map_spare_cells' is done, a new spare list file is written out
+# with updated spare list.
+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");
+# set_constraints("-num", "and<20"); # set_constraints is optional to control AND cell usage under 20 counts
+map_spare_cells();
+# Use one of the following lines if external Synthesis Tool is used
+#map_spare_cells ( "-syn", "rc" );
+#map_spare_cells ( "-syn", "dc_shell" );
+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
+ +
+

diff --git a/src_en/man.geco_scriptmodemanualeco.txt b/src_en/man.geco_scriptmodemanualeco.txt new file mode 100644 index 0000000000000000000000000000000000000000..ac4d52aa5ca94eded2568539574004f449d45a60 --- /dev/null +++ b/src_en/man.geco_scriptmodemanualeco.txt @@ -0,0 +1,13 @@ +

2.7 Script Mode Metal Only Manual ECO Flow

+

In Manual Metal Only ECO, any new added gates are automatically mapped to spare gate instances by 'map_spare_cells' command. A Design Exchange Format file has to be loaded for the tool to find optimal spare instances. If the file is not present, the mapping is skipped.

+

2.7.1 Files and data requirements in Metal Only Manual ECO

+ +

diff --git a/src_en/man.geco_scriptmodmanulaeco.txt b/src_en/man.geco_scriptmodmanulaeco.txt new file mode 100644 index 0000000000000000000000000000000000000000..7e3a5dfa40b8b32fb64115ee8044097460673641 --- /dev/null +++ b/src_en/man.geco_scriptmodmanulaeco.txt @@ -0,0 +1,3 @@ +

2.6 Script Mode Full Layers Manual ECO Flow

+

In many cases, the ECO operations are well known by users. They can be inserting buffers to a 128bits bus, or adding isolation AND gates to all outputs of a module. In these cases, manual ECO by scripts is more efficient and resource saving.

+

GOF exports many APIs for ECO operations in GOF script.

diff --git a/src_en/man.geco_sparegatesnumanddis.txt b/src_en/man.geco_sparegatesnumanddis.txt new file mode 100644 index 0000000000000000000000000000000000000000..c07502f5469b5b67631e1ee19af2ad524352c03f --- /dev/null +++ b/src_en/man.geco_sparegatesnumanddis.txt @@ -0,0 +1,13 @@ +

2.3.3 Spare Gates Number and Distribution

+

Spare gates are incorporated into the design and their percentage relative to the entire digital area is usually dependent on the design maturity. For instance, the first version of a design typically requires a higher percentage of spare cells, usually around 8-10% of the entire digital area. As the design progresses to the second version, a lower percentage of spare cells, approximately 4-5% of the total digital area, is sufficient. By the third version, less than 3% additional spare cells may be necessary. Additionally, during the backend placement process, any remaining empty space can be filled with extra spare gates.

+

Besides the spare gate area percentage, the proportion of various spare gate types is also crucial. For example, a design with 126K instances may have spare gates in different categories, as depicted in the following figure:

+
+

Figure 19: Spare Gates numbers and distribution

+

Usually, spare gates are uniformly distributed on the floor plan, as shown in figure 19. Nevertheless, if accessible, users can adjust the distribution based on historical metal-only ECO data. Blocks that are prone to design changes may require more spare gates, while mature logic may require fewer spare gates.

diff --git a/src_en/man.geco_sparegatessyn.txt b/src_en/man.geco_sparegatessyn.txt new file mode 100644 index 0000000000000000000000000000000000000000..d652de68a532a74d5ce2e2dcc36f6520d9a742b7 --- /dev/null +++ b/src_en/man.geco_sparegatessyn.txt @@ -0,0 +1,4 @@ +

2.3.2 Spare Gates Synthesis

+

GOF ECO utilizes a heuristic method that employs constraints to identify the optimal mapping of spare gates. The process involves setting constraints to restrict the types of NAND/NOR/AND/OR gates to be considered, and then conducting a mapping exercise to identify the nearest available spare gates. The cost of the mapping is determined by adding the distance between the measured location and the actual location of the spare gate. For example, if a NAND gate needs to be mapped in a metal-only ECO, and the measured location is (100, 100), while the closest spare gate (spare_0) is located at (120, 120), then the cost is calculated as (120-100)+(120-100)=40. The method involves multiple iterations, and the optimal solution is selected based on the lowest cost.

+

To ensure that new instances are accurately mapped to the nearest spare gate instances, it is necessary to have a Design Exchange Format (DEF) file. Without loading the DEF file, the GOF process will use spare gate types without precise mapping to exact spare instances. However, P&R tools like SOC Encounter will map new instances in the new netlist to the closest spare gates.

+

During the 'fix_design' command, GOF examines the top-level module and its sub-modules to identify any non-equivalent points and optimize the logic cone to create a patch circuit with the minimum number of gates.

diff --git a/src_en/man.geco_specialcharacters.txt b/src_en/man.geco_specialcharacters.txt new file mode 100644 index 0000000000000000000000000000000000000000..a8c80c89f43a157c1fd2afb47ae019e6479c090e --- /dev/null +++ b/src_en/man.geco_specialcharacters.txt @@ -0,0 +1,12 @@ +

2.6.7 Special characters

+

The special character '-' is used to represent existing connection. For example

+
+change_pin("U0/A", "BUFFX1", "eco_buf","-"); +
+

A buffer is inserted into A pin of instance U0. The old existing net drives the new buffer now.

+

The special character '.' is used in ECO new instance name if the new instance needs to be in the same hierarchy as the ECO spot.

+
+change_pin("u_qcif/u_num2/u_spare1/B", "AOI21X2",".", "net1,net2,net3"); +
+

If the instance is empty, GOF creates 'AOI21X2' in the current top level. With ".", GOF creates 'AOI21X2' new instance in hierarchy "u_qcif/u_num2/u_spare1".

+

diff --git a/src_en/man.geco_standcellmapping.txt b/src_en/man.geco_standcellmapping.txt new file mode 100644 index 0000000000000000000000000000000000000000..edfa58d72ddab4c42ff2b8186f2c2ec3249447a2 --- /dev/null +++ b/src_en/man.geco_standcellmapping.txt @@ -0,0 +1,14 @@ +

In Metal Only ECO, the design has completed place and route. Any new gates added should map to spare gates that located in the design. GOF supports Standard Spare Cells and Metal Configurable Gate Array Spare Cells post-mask metal only ECO.

+
+

Figure 17: Metal Only ECO

+

2.3.1 Standard Cells Spare Gates Mapping

+

GOF employs an internal synthesis engine to map patch logic onto spare gates. These spare gates must consist of the following spare type combinations.

+
    +
  1. Two ports 'and/or' gates, 'inv' gates and flops, 'mux' is optional.
  2. +
  3. Two ports 'nand/nor' gates, 'inv' gates and flops, 'mux' is optional.
  4. +
  5. Two ports 'nand/nor/and/or' gates, 'inv' gates and flops, 'mux' is optional.
  6. +
+

Out of the three combinations, the second combination has the least area and the third combination has the best performance in metal only EOC.

+

In Figure 18, the circuit produced by ECO on the left-hand side contains arbitrary standard cells. During the mapping process, gates of type MUX and flop are mapped directly onto the spare gates, as they have a one-to-one correspondence with the spare gate list. However, for more complex cell types such as AO32, they must be synthesized and mapped onto three AND gates and one NOR gate.

+
+

Figure 18: Standard Cells Spare Gates Mapping

diff --git a/src_en/man.geco_stepstodofullfuneco.txt b/src_en/man.geco_stepstodofullfuneco.txt new file mode 100644 index 0000000000000000000000000000000000000000..abde871a05c8adb99f86fabc3278b3678e75114b --- /dev/null +++ b/src_en/man.geco_stepstodofullfuneco.txt @@ -0,0 +1,16 @@ +

2.2.2 Steps to do automatic functional ECO

+

Steps for an automatic functional ECO:

+ diff --git a/src_en/man.geco_stepstodomanecoscript.txt b/src_en/man.geco_stepstodomanecoscript.txt new file mode 100644 index 0000000000000000000000000000000000000000..09e7ad0a9ba466778e1f889e24460e936412c782 --- /dev/null +++ b/src_en/man.geco_stepstodomanecoscript.txt @@ -0,0 +1,17 @@ +

2.6.2 Steps to do Manual ECO In Scripts

+

A typical situation for a Manual ECO:

+ +

diff --git a/src_en/man.geco_stepstorungatearray.txt b/src_en/man.geco_stepstorungatearray.txt new file mode 100644 index 0000000000000000000000000000000000000000..22a71e5bece147dcb2efe7bfbe3cf3f4d26ac74d --- /dev/null +++ b/src_en/man.geco_stepstorungatearray.txt @@ -0,0 +1,20 @@ +

2.4.4 Steps to do gate array spare cells ECO

+

A typical process for gate array spare cells ECO:

+ diff --git a/src_en/man.geco_stepstorunmetaleco.txt b/src_en/man.geco_stepstorunmetaleco.txt new file mode 100644 index 0000000000000000000000000000000000000000..9507e61e62fe7b3002112246b824a50e24c09cad --- /dev/null +++ b/src_en/man.geco_stepstorunmetaleco.txt @@ -0,0 +1,20 @@ +

2.3.5 Steps to do automatic Metal Only ECO

+

A typical process for an automatic Metal Only ECO:

+ diff --git a/src_en/man.geco_svffilessupport.txt b/src_en/man.geco_svffilessupport.txt new file mode 100644 index 0000000000000000000000000000000000000000..b94cafe354d96a06ae185be333293d5262633a13 --- /dev/null +++ b/src_en/man.geco_svffilessupport.txt @@ -0,0 +1,2 @@ +

2.2.6 SVF files support

+

When working with designs that include multibit flops or significant name changes, SVF files can be a valuable tool for facilitating key point mapping. Although multibit flops are used to reduce silicon area and power consumption, the different combinations of single bit flop instances in each multibit flop instance can create challenges for key point mapping, especially when combined with name changes. Additionally, backend tools may split or merge multibit flops, further complicating the process. To avoid these challenges and ensure accurate key point mapping, it's highly recommended to load SVF files when working with multibit flops. For more information on this topic, please refer to the Multibit Flops in ECO section.

diff --git a/src_en/man.geco_synsubmod.txt b/src_en/man.geco_synsubmod.txt new file mode 100644 index 0000000000000000000000000000000000000000..bc1eb354f4f56e20618fded61ae804df718b23cb --- /dev/null +++ b/src_en/man.geco_synsubmod.txt @@ -0,0 +1,54 @@ +

2.2.5 Synthesize sub-modules only

+

Performing a complete top-level netlist synthesis can be time-consuming. GOF provides APIs enabling the integration of newly synthesized sub-modules into the original pre-layout netlist, along with updates to the top-level SVF file. This incremental approach allows the generation of the large top-level netlist and the top-level SVF file, resulting in significant time and effort savings. At the RTL level, designers identify modified RTL modules during ECO and synthesize them to create netlist and SVF files. Some altered RTL modules, particularly sub-parent modules with only sub-module instantiations, may not require synthesis.

+

In Figure 4, only two sub-modules, SUB_MOD31 and SUB_MOD32, require re-synthesis in the extensive SOC_TOP design. Their parent module has only experienced connection changes and remains in netlist format, eliminating the need for synthesis. The example below illustrates how to process these files and generate a new SOC_TOP level netlist and SVF file.

+
+

Figure 4: Sub-modules to be synthesized

+

Step 1: Add missing DFT ports

+

The newly synthesized sub-modules may lack certain ports present in the original netlist. Notably, ports essential for scan in and scan out are typically added by the DFT tool. Since the DFT process is not applied to the new synthesized sub-modules, it's necessary to incorporate these ports as dummy ones within the modules to avoid syntax errors.

+

The procedure for incorporating DFT ports into the newly synthesized modules is as follows:

+
use strict;
+read_library("tsmc.lib");
+read_design("-ref", "SOC_TOP.pre_layout.gv");# Read in the original pre_layout netlist
+read_design("-imp", "SUB_MOD31.new_syn.gv");# Read in new synthesized netlist
+set_tree("ref");
+set_top("SUB_MOD31_1"); # The old pre-layout netlist may have this module with prefix or suffix added in uniquify
+my @ref_port_ins = get_ports("-input");
+my @ref_port_outs = get_ports("-output");
+set_tree("imp");
+set_top("SUB_MOD31");
+my @imp_port_ins = get_ports("-input");
+my @imp_port_outs = get_ports("-output");
+my $cnt = 0;
+foreach my $port (@ref_port_ins){
+  if(!grep($port eq $_, @imp_port_ins)){ # The input port is not in the new synthesized module
+    new_port($port, "-input");
+    gprint("$cnt: Warning input $port is not in the new synthesized sub-module\n"); $cnt++;
+  }
+}
+foreach my $port (@ref_port_outs){
+  if(!grep($port eq $_, @imp_port_outs)){ # The output port is not in the new synthesized module
+    new_port($port, "-output");
+    gprint("$cnt: Warning output $port is not in the new synthesized sub-module\n"); $cnt++;
+  }
+}
+write_verilog("SUB_MOD31.dft_ports_added.gv");
+exit;
+
+

The identical process should be executed on SUB_MOD32 to include the necessary DFT-related ports.

+

Step 2: Replace sub-modules netlist and SVF

+

During this step, the DFT ports added netlist and SVF files of the synthesized sub-modules are read to substitute the original pre-layout netlist and SVF files.

+

The procedure for replacing netlist and SVF:

+
read_library("tsmc.lib");
+read_svf("-imp", "SOC_TOP.pre_layout.svf");
+read_design("-imp", "SOC_TOP.pre_layout.gv");
+read_sub_module_svf("SUB_MOD31.svf.txt", "-module", "SUB_MOD31_1", "-syn_module", "SUB_MOD31");
+read_sub_module_svf("SUB_MOD32.svf.txt", "-module", "SUB_MOD32_1", "-syn_module", "SUB_MOD32");
+read_sub_module_netlist("SUB_MOD31.dft_ports_added.gv", "-module", "SUB_MOD31_1", "-syn_module", "SUB_MOD31");
+read_sub_module_netlist("SUB_MOD32.dft_ports_added.gv", "-module", "SUB_MOD32_1", "-syn_module", "SUB_MOD32");
+read_sub_module_netlist("SUB_MOD3.new.v", "-module", "SUB_MOD3_1", "-syn_module", "SUB_MOD3", "-sub_only"); # Need sub_only option
+
+replace_sub_module_netlist("SOC_TOP.new_reference.gv"); # Replace netlist should be run first
+replace_sub_module_svf("SOC_TOP.new_reference.svf");    # Then replace SVF
+
+
+

After the generation of both the top-level netlist and SVF files, they can be incorporated into the complete top-level automatic ECO process.

diff --git a/src_en/man.geco_tcloutaftergatearray.txt b/src_en/man.geco_tcloutaftergatearray.txt new file mode 100644 index 0000000000000000000000000000000000000000..457abaec22ab4db27caa75c41e50abcd94fad6ec --- /dev/null +++ b/src_en/man.geco_tcloutaftergatearray.txt @@ -0,0 +1,39 @@ +

2.4.6 TCL output file format after Gate Array ECO

+
+current_instance
+current_instance up_ma/utx_afe_if
+create_net eco_ganet_wire270244
+create_net eco_ganet_gofrev_net_on19915
+create_net eco_ganet_wire270246
+create_net eco_ganet_gofrev_net_on19913
+disconnect_net [get_nets n_223] [get_pins slow_cnt_reg_1/D]
+connect_net [get_nets eco_ganet_wire270244] [get_pins slow_cnt_reg_1/D]
+create_cell eco_gacell_gofrev_inst_19916 GND2D1
+create_cell eco_gacell_gofrev_inst_19914 GOR2D1
+create_cell eco_gacell_inst270245 GMX2D1
+create_cell eco_gacell_gofrev_inst_19912 GAN2D1
+connect_net [get_nets eco_ganet_gofrev_net_on19915] [get_pins eco_gacell_gofrev_inst_19916/A]
+connect_net [get_nets slow_cnt_2] [get_pins eco_gacell_gofrev_inst_19916/B]
+connect_net [get_nets eco_ganet_wire270244] [get_pins eco_gacell_gofrev_inst_19916/Y]
+connect_net [get_nets eco_ganet_gofrev_net_on19913] [get_pins eco_gacell_gofrev_inst_19914/A]
+connect_net [get_nets xg_prbs_0] [get_pins eco_gacell_gofrev_inst_19914/B]
+connect_net [get_nets eco_ganet_gofrev_net_on19915] [get_pins eco_gacell_gofrev_inst_19914/Y]
+connect_net [get_nets n_221] [get_pins eco_gacell_inst270245/A]
+connect_net [get_nets slow_cnt_0] [get_pins eco_gacell_inst270245/B]
+connect_net [get_nets fast_data_9] [get_pins eco_gacell_inst270245/S0]
+connect_net [get_nets eco_ganet_wire270246] [get_pins eco_gacell_inst270245/Y]
+connect_net [get_nets n_223] [get_pins eco_gacell_gofrev_inst_19912/A]
+connect_net [get_nets eco_ganet_wire270246] [get_pins eco_gacell_gofrev_inst_19912/B]
+connect_net [get_nets eco_ganet_gofrev_net_on19913] [get_pins eco_gacell_gofrev_inst_19912/Y]
+set_cell_location -ignore_fixed -coordinates "253.84 413.28" eco_gacell_inst270245
+set_cell_location -ignore_fixed -coordinates "250.42 390.60" eco_gacell_gofrev_inst_19912
+set_cell_location -ignore_fixed -coordinates "288.04 497.70" eco_gacell_gofrev_inst_19914
+set_cell_location -ignore_fixed -coordinates "204.25 267.12" eco_gacell_gofrev_inst_19916
+current_instance
+size_cell FILLER_impl0_7256 GFILL3
+size_cell FILLER_impl1_30700 GFILL2
+current_instance
+remove_cell FILLER_impl1_20939
+remove_cell FILLER_impl1_40219
+ +
diff --git a/src_en/man.geco_tienetcell.txt b/src_en/man.geco_tienetcell.txt new file mode 100644 index 0000000000000000000000000000000000000000..abe0a7a522b45ac839f579ae99738345facb1dd6 --- /dev/null +++ b/src_en/man.geco_tienetcell.txt @@ -0,0 +1,9 @@ +

2.2.13 Tie High Tie Low nets

+

By default, GOF uses 1'b0 for tie low net and 1'b1 for tie high net. Some designs may prefer tie cell over 1'b0/1'b1. API set_tiehi_net and set_tielo_net can be used to control which tie format is used. To overwrite the default 1'b0/1'b1, simply set empty argument to the APIs.

+
+# Set empty argument to set_tiehi_net/set_tielow_net to use Tie Cells
+set_tiehi_net(""); # Tie High cell will be used instead of 1'b1
+set_tielo_net(""); # Tie Low cell will be used instead of 1'b0
+ +
+

diff --git a/src_en/man.geco_timingbeforeaftereco.txt b/src_en/man.geco_timingbeforeaftereco.txt new file mode 100644 index 0000000000000000000000000000000000000000..119a7ed793646fda62d768661af3ce8e85150a97 --- /dev/null +++ b/src_en/man.geco_timingbeforeaftereco.txt @@ -0,0 +1,6 @@ +

2.10.2 Timing before ECO

+

In order to report the timing in paths of interest before a functional ECO, it is necessary to specify the option of 'from,' 'to,' or 'through' in the report_timing function. By comparing the numbers obtained before and after a functional ECO, an appropriate timing ECO method can be selected.

+

2.10.3 Timing after ECO

+

After performing a functional ECO, report_timing can utilize the 'from,' 'to,' or 'through' options. If the function is executed without specifying any of these options, it will report the timing of paths that traverse the ECO instances.

+
+

Figure 29: Report timing on paths through ECO instances

diff --git a/src_en/man.geco_tstitchscanchain.txt b/src_en/man.geco_tstitchscanchain.txt new file mode 100644 index 0000000000000000000000000000000000000000..f24f7405664b362ad83170614c4220c79b7216ab --- /dev/null +++ b/src_en/man.geco_tstitchscanchain.txt @@ -0,0 +1,67 @@ +

2.2.14 Stitch new flops into scan chain

+

To prevent any loss of DFT coverage, it is recommended to integrate new flops added in an ECO into the existing scan chains. Industrial data suggests that in a design with 100K flops, 100 newly added non-scan flops can lead to a DFT coverage loss of over 0.1%. Such loss of DFT coverage is unacceptable for high-reliability chips, such as those used in automobiles. Therefore, if there are any new flops introduced in a functional ECO, it is necessary to redo the scan chain to incorporate the new flops.

+
+

Figure 14: Stitch scan chain

+

There are multiple methods available in GOF to insert new flops into scan chains. One option is to utilize the 'stitch_scan_chain' API, which automatically integrates the new flops into the scan chains. Alternatively, there are several netlist processing APIs that can be used to manually insert the new flops into the scan chains.

+

Automatic mode to insert flops into a scan chain in the local modules

+

An automatic method can be used to integrate flops into a scan chain within local modules. In the following example script, suppose the 'fix_design' command adds eight new flops named 'state_new_reg_0' to 'state_new_reg_7'. To integrate these flops into the scan chain within the local module:

+
+# API stitch_scan_chain without any argument to insert new flops in the local modules
+stitch_scan_chain();
+ +
+

Automatic mode to insert flops before one flop

+

GOF offers an automatic method to insert new flops before a specified flop instance. Users can identify the instance name of one flop, and GOF will insert all new flops into the scan chain before that instance.

For instance, let's say it is required to integrate all the new flops into the scan chain prior to the instance named 'u_pixel_ctrl/pulse_reg':

+
+# API stitch_scan_chain with -to option
+stitch_scan_chain('-to', 'u_pixel_ctrl/pulse_reg');
+ +
+

Manual mode to connect up all new flops

+

The scan chain can be re-connected up manually by ECO APIs. And new scan in/out ports are created.

+
+
+# GOF ECO script, run_manual_stitch_scan_chain_example.pl
+use strict;
+undo_eco; # Discard previous ECO operations
+setup_eco("eco_manual_stitch_scan_chain_example");# Setup ECO name
+read_library("art.5nm.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", "reference.gv");# Read in Reference Netlist
+read_design("-imp", "implementation.gv");# Read in Implementation Netlist Which is under ECO
+set_top("topmod");# Set the top module
+set_ignore_output("scan_out*");
+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
+set_error_out(0); # Don't exit if finds error
+my @flops = get_cells("-hier", "-nonscan"); # Find all new flops that are not in scan chain yet
+# @flops can be defined by reading a list file
+if(scalar(@flops)){ # If there are new flops, start the work
+  new_port("so1", "-output"); # New a scan out port so1
+  new_port("si1", "-input"); # New a scan in port si1
+  my $cnt = 0;
+  my $now_si;
+  foreach my $flop (@flops){
+    $cnt++;
+    if(is_scan_flop($flop)==0){
+      my $flop_name = get_ref($flop);
+      my $scanflop = get_scan_flop($flop_name); # If the flop is not scan type, change to scan type flop
+      change_gate($flop, $scanflop);
+    }
+    if($cnt==1){
+      change_port("so1", "$flop/Q"); # The first flop drives the new scan out port
+    }else{
+      change_pin($now_si, "$flop/Q");
+    }
+    $now_si = "$flop/SI";
+    change_pin("$flop/SE", "te"); # All scan enable pin is connected to scan enable signal
+  }
+  change_pin($now_si, "si1"); # The last flop has the new scan in port driving SI pin
+}
+write_verilog("eco_verilog.v");# Write out ECO result in Verilog
+exit; 
+
+
diff --git a/src_en/man.gformal_coneofinf.txt b/src_en/man.gformal_coneofinf.txt new file mode 100644 index 0000000000000000000000000000000000000000..e889506e32cf5fa105106a546b902b5ab68755dd --- /dev/null +++ b/src_en/man.gformal_coneofinf.txt @@ -0,0 +1,8 @@ +

3.1.3 Cone of Influence

+

SPFM and LFM metrics can be calculated in two methods, rough mode and detail mode. The rough mode is done by structural analysis of the Cone of Influence. The detail mode is calculated by formal analysis of the Cone of Influence.

+

Two types of strobing points shall be defined for the Cone of Influence extraction.

+ +

The observation points are the outputs or registers that are impacted by the injected faults which affect functional safety and violate safety goal. The diagnostic points are the outputs or registers to check if injected faults can be detected at these strobing points or perceived by the up level driver.

+

The logic back traced starting from the observation points and the diagnostic points all the way to the inputs or black boxes. The Cone of Influence (COI) is created for the observation points and the diagnostic points respectively. Each cell and each input port in the cones will be injected faults according to the Fault Model section.

+
+

Figure 31: Cone of Influence

diff --git a/src_en/man.gformal_debugonefault.txt b/src_en/man.gformal_debugonefault.txt new file mode 100644 index 0000000000000000000000000000000000000000..c1e1b3aaa9eeac8f21881f5d388d54fc79ea01ec --- /dev/null +++ b/src_en/man.gformal_debugonefault.txt @@ -0,0 +1,15 @@ +

3.2.2 FUSA Debug One Fault

+

The API verify_faults can run on an individual fault to check if the fault can propagate to the observation points. If the fault is observable, a VCD file can be dumped to show how to toggle the input ports cycle by cycle to propagate the fault. All internal signals waveforms are captured in the VCD file.

+

The following script is to check if one SEU fault can propagate. If yes, a VCD file is dumped:

+
+set_log_file("spfm_lfm.log");     # Set log file name
+read_library("art.5nm.lib");      # Read in liberty file
+read_design('-imp', 'ecc_process.v'); # Read in the design block
+set_top("ecc_top");               # Set the top module name
+set_pin_constant("test_mode", 0); # Set pin constraint
+set_observe_points("data_out*");  # data_out[31:0] affects functional safety
+set_observe_points("synd_out");   # synd_out affects functional safety
+# To check if the fault can be propagated to the detect points, set_observe_points on the detect points
+verify_faults("u_ecc_ops/bit_reg:SEU", "-vcd", "debug_seu.vcd");    # Check if the Single Event Upset on the flop can propagate
+gexit;
+
diff --git a/src_en/man.gformal_faltsinjectveri.txt b/src_en/man.gformal_faltsinjectveri.txt new file mode 100644 index 0000000000000000000000000000000000000000..f5dd802d5572154d2ac48e1f496e44b428b2816d --- /dev/null +++ b/src_en/man.gformal_faltsinjectveri.txt @@ -0,0 +1,4 @@ +

3.1.6 Faults Injection Formal Verification

+

The formal COI analysis needs to be run to get the final accurate metrics. For each fault injected, GOF Formal either proves that a path exists to propagate the fault to the observation or diagnostic points, or disprove there is such path. A path means by toggling input ports in some limited clock cycles, the fault can propagate to the observation/diagnostic points.

+

GOF Formal doesn't require stimulus nor is a testbench required. The tool automatically determines the stimulus. For each fault injected, two designs are compared to see if the specified outputs are equal. One design is the fault injected design, the other is the original design. The specified outputs are the observation points or the diagnostic points set by user. The faults to be injects can be thousands or millions. GOF Formal uses cluster command to fully utilize the cluster computing power. Thousands of jobs can be submitted in parallel to the cluster machines with only one license being used.

+

After the detail formal COI analysis of the above example, the residual fault number is 178, and the final SPFM is 96%. The latent fault number is 260, so the final LFM is 94%.

diff --git a/src_en/man.gformal_falutmodel.txt b/src_en/man.gformal_falutmodel.txt new file mode 100644 index 0000000000000000000000000000000000000000..cc6332f9ffe611a890bf57169329028be689e94c --- /dev/null +++ b/src_en/man.gformal_falutmodel.txt @@ -0,0 +1,4 @@ +

3.1.2 Fault Model

+

GOF Formal injects faults to each input port and each pin of logic gates. Each input port has stuck-at 0 and stuck-at 1 faults injected. Every combinational gate has stuck-at 0 and stuck-at 1 faults injected into each pin. For flip-flop, stuck-at 0 and stuck-at 1 faults are injected into each data and clock pin. And flip-flop has Single Event Upset (SEU) fault injected to the state in random time.

+
+

Figure 30: Fault model for logic gates

diff --git a/src_en/man.gformal_goformaloverview.txt b/src_en/man.gformal_goformaloverview.txt new file mode 100644 index 0000000000000000000000000000000000000000..84a72f515f6fe0b3783ec3e4719461b7b66dc701 --- /dev/null +++ b/src_en/man.gformal_goformaloverview.txt @@ -0,0 +1,15 @@ +

3.1 GOF Formal

+

GOF Formal is one of the function components integrated in GOF platform. It provides a formal method to calculate fault coverage in an IC design in functional safety.

+

ISO26262 defines functional safety as "the absence of unreasonable risk due to hazards caused by malfunctioning behavior of electrical and electronic systems". Four ASILs are proposed to represent four degrees of automotive hazards. In IC component, the coverage in the ASIL requirement is the fault coverage in the logic circuit. Specifically, single point fault metric (SPFM) and latent fault metric (LFM) should meet minimum numbers for the corresponding ASIL levels. The following table lists the three ASIL levels with specific coverage numbers defined in the standard.

+ + + + + + + + + +
ASILSPFMLFM
B≥90%≥60%
C≥97%≥80%
D≥99%≥90%
+

+

The traditional method to calculate the fault coverage is pure simulation based. It's inefficient and time consuming. GOF Formal provides a formal and efficient way to calculate the SPFM and LFM numbers of a logic design. It can work in a standalone mode to calculate the coverage metric. And it can also work as a supplemental method to cover the faults left over from simulation based process.

\ No newline at end of file diff --git a/src_en/man.gformal_metricsimprovement.txt b/src_en/man.gformal_metricsimprovement.txt new file mode 100644 index 0000000000000000000000000000000000000000..5739a1c9bafbcc1c3dddb3319f739c41bcc02a3a --- /dev/null +++ b/src_en/man.gformal_metricsimprovement.txt @@ -0,0 +1,8 @@ +

3.1.7 FUSA Metrics Improvement

+

In order to improve the fault coverage, safety mechanisms should be built in the IC design. There are several approaches for safety mechanism implementation.

+ +

In Figure 32, a safety mechanism can be a double modular design or ECC design. The diagnostic points would be the alarm bits in the double modular error bit, or ECC error recovering signals. For SPFM metric improvement, those gates in Area A that are not covered by safety mechanism can be modified to support TMR (Triple Module Redundancy), so that λSPF can be further reduced and SPFM improved accordingly. See this TMR ECO Case

diff --git a/src_en/man.gformal_roughmethodbycoi.txt b/src_en/man.gformal_roughmethodbycoi.txt new file mode 100644 index 0000000000000000000000000000000000000000..e6a98b062dac77b8fc7e7f71b4137fcfc8cdc6b3 --- /dev/null +++ b/src_en/man.gformal_roughmethodbycoi.txt @@ -0,0 +1,13 @@ +

3.1.5 Rough Method by COI Analysis

+

In the rough method calculation by analyzing COI structure, the best and worst metrics can be quickly calculated.

+

In the example shown in Figure 32, the faults are distributed as:

+ +

The best SPFM assumes the faults in Area B are propagatable to the diagnostic points. The single-point/residual faults Σ(λSPF+λRF) has number 122 only in Area A. Therefore, the best case SPFM is 97.3%.

+

The worst SPFM assumes the faults in Area B are all residual faults, so Σ(λSPF+λRF) has number 1330 which is 1208 plus 122, and get calculated metric to be 70%.

+

The best LFM assumes the faults in Area C are all detectable. Σ(λMPF_UD) is zero, So LFM is 100% in the rough structural COI analysis.

+

The worst LFM assumes the faults in Area C can not propagate to the diagnostic points, and they are not detectable. Therefore, Σ(λMPF_UD) has the number of 2582, and the worst LFM is 59.5%.

+

Figure 32: Example fault numbers in COI

diff --git a/src_en/man.gformal_scriptspfmlfmcal.txt b/src_en/man.gformal_scriptspfmlfmcal.txt new file mode 100644 index 0000000000000000000000000000000000000000..cdabb3b2a3576b5e3a7a6d89c5474c27860f9f76 --- /dev/null +++ b/src_en/man.gformal_scriptspfmlfmcal.txt @@ -0,0 +1,17 @@ +

3.2 FUSA Example Code

+

3.2.1 Script for SPFM and LFM Calculation

+

One example script for SPFM and LFM calculation:

+
+set_log_file("spfm_lfm.log");     # Set log file name
+read_library("art.5nm.lib");      # Read in liberty file
+read_design('-imp', 'ecc_process.v'); # Read in the design block
+set_top("ecc_top");               # Set the top module name
+create_clock("data_clk", 2);
+set_pin_constant("test_mode", 0); # Set pin constraint
+set_observe_points("data_out*");  # data_out[31:0] affects functional safety
+set_observe_points("synd_out");   # synd_out affects functional safety
+set_detect_points("sb_err_o");    # Safety mechanism detecting output
+set_detect_points("db_err_o");    # Safety mechanism detecting output
+verify_faults("-full");           # Calculate and print SPFM and LFM, Use verify_faults("-coi") for fast SPFM/LFM calculation 
+gexit;
+
diff --git a/src_en/man.gformal_singlepointfaultandlatentfault.txt b/src_en/man.gformal_singlepointfaultandlatentfault.txt new file mode 100644 index 0000000000000000000000000000000000000000..cf0b181d7987bb3d5ea53d9a1965bbb59e922793 --- /dev/null +++ b/src_en/man.gformal_singlepointfaultandlatentfault.txt @@ -0,0 +1,2 @@ +

3.1.1 Single Point Fault and Latent Fault

+

Single point fault (SPF) is the fault in the IC design that leads directly to the violation of a safety goal which is defined as observation point in the "Cone of Influence" section below and no fault in the IC circuit is covered by any safety mechanism. However, if there is safety mechanism, but the fault can't be covered by the safety mechanism, the fault is called residual fault according to the standard. In calculating SPFM, residual fault is treated as single point fault. Latent faults are multiple-point faults not detected by a safety mechanism or perceived by the driver. The latent fault metric is to determine whether coverage by safety mechanisms is sufficient to protect against risk from latent faults in the IC design.

diff --git a/src_en/man.gformal_spfmlfmcal.txt b/src_en/man.gformal_spfmlfmcal.txt new file mode 100644 index 0000000000000000000000000000000000000000..5b44ce800eb636976c3fe1c69e41a5d491f157e9 --- /dev/null +++ b/src_en/man.gformal_spfmlfmcal.txt @@ -0,0 +1,18 @@ +

3.1.4 SPFM and LFM Calculation

+

In Figure 31, all faults that are outside of the two COIs are safe faults.

+

Area A has faults that are observable but not detectable, so they can be classified as residual faults. And they are called single point faults if safety mechanism is not implemented for the design, in which case the diagnostic points are not present and Area B and Area C are zero size. However, if they don't propagate to the observation points in the detail formal COI analysis, they can be classified as multiple point faults. For example, TMR is implemented on Area A. The majority faults in this area will become multiple point faults.

+

Area B has faults that are classified as multiple point faults, since they are observable and detectable. In the rough structural COI analysis, the worst SPFM metric can be calculated by assuming them as all residual faults and the best SPFM metric by assuming them as propagatable to the diagnostic points. So the detail formal COI analysis will determined the fault classification.

+

Area C has faults that are classified as detectable multiple point faults, but they are not observable. The detail formal COI analysis will be run on Area C to check if the faults in this area can not propagate to the diagnostic points, then they can be classified officially as latent faults. The best and worst LFM metrics can be gained by the rough structural COI analysis method.

+

The Single Point Fault Metric (SPFM) can be calculated according to the following equation.

+

SPFM = 1 - Σ(λSPF+λRF)/Σ(λ)

+

where:

+

λSPF: Single Point Fault when there is no safety mechanism

+

λRF: Residual Fault

+

λ: Any Fault

+

The Latent Fault Metric (LFM) can be calculated according to the following equation.

+

LFM = 1 - Σ(λMPF_UD)/Σ(λMPF - λSPF - λRF)

+

where:

+

λMPF_UD: Multiple Point Fault not detected by the driver

+

λMPF: Any Multiple Point Fault

+

λSPF: Single Point Fault when there is no safety mechanism

+

λRF: Residual Fault

diff --git a/src_en/man.gofdebug_guidetail.txt b/src_en/man.gofdebug_guidetail.txt new file mode 100644 index 0000000000000000000000000000000000000000..2613949a0d40d35d1df9a400c728e1aa85a3d3ca --- /dev/null +++ b/src_en/man.gofdebug_guidetail.txt @@ -0,0 +1,2 @@ +

6 GOF Debug: Netlist Debug and Schematic

+

For all GUI mode operations and schematic usage, refer to this chapter.

\ No newline at end of file diff --git a/src_en/man.gofecguimode.txt b/src_en/man.gofecguimode.txt new file mode 100644 index 0000000000000000000000000000000000000000..58e707fc35c66ad51278e7b6a5c9e60f5e8a0513 --- /dev/null +++ b/src_en/man.gofecguimode.txt @@ -0,0 +1,4 @@ + +

GUI mode ECO has advantage of fast ramping up. It's good for small size ECOs. The incremental schematic feature is very helpful for analyzing the netlist before the next step is decided.

diff --git a/src_en/man.gofechiereco.txt b/src_en/man.gofechiereco.txt new file mode 100644 index 0000000000000000000000000000000000000000..918a6f6b68685e632117fbf25759cc5963bdd3d2 --- /dev/null +++ b/src_en/man.gofechiereco.txt @@ -0,0 +1,4 @@ + +

GOF supports hierarchical ECO by set the ECO scope to the sub-modules. Some Logic Equivalence Check cases can only be resolved in flatten mode. Since GOF only focuses on the modules or spots that user specifies, it can avoid to get false non-equivalence in hierarchical netlist.

diff --git a/src_en/man.gofecintegratedenv.txt b/src_en/man.gofecintegratedenv.txt new file mode 100644 index 0000000000000000000000000000000000000000..572a50936fd8442bcbdccecfd6f7e6b8cb375af7 --- /dev/null +++ b/src_en/man.gofecintegratedenv.txt @@ -0,0 +1,4 @@ + +

The ECO modes listed above are integrated into one work environment seamlessly. The mixing of ECO modes can produce most optimal ECO result. For example, automatic ECO and manual script ECO can be done in one ECO script, so that the minimum size ECO patch can be achieved.

diff --git a/src_en/man.gofecmetalonly.txt b/src_en/man.gofecmetalonly.txt new file mode 100644 index 0000000000000000000000000000000000000000..1fb85878b882f02397ad0ce5501d4cfb13143e1a --- /dev/null +++ b/src_en/man.gofecmetalonly.txt @@ -0,0 +1,4 @@ + +

When ECO is done in either automatic mode or manual mode, 'map_spare_cells' command is run to convert the newly added cells to spare gate types cells. Users can control only spare gate type cells being used in manual mode ECO, so that the converting stage can be bypassed. The flow supports both standard spare cells and gate array spare cells.

diff --git a/src_en/man.gofecoautomode.txt b/src_en/man.gofecoautomode.txt new file mode 100644 index 0000000000000000000000000000000000000000..8839748009f07e59076e332e4d7a4c9fb82a9ffd --- /dev/null +++ b/src_en/man.gofecoautomode.txt @@ -0,0 +1,5 @@ +

+ +

The automatic functional ECO is carried out using a GOF ECO script, which requires an Implementation Netlist that is currently under ECO and a Reference Netlist that is re-synthesized from the modified RTL with the same constraints as the pre-layout netlist. The 'fix_design' API is utilized to execute a top-down global ECO. GOF leverages its built-in Logic Equivalence Check engine to identify and analyze non-equivalent points in both the top-level module and its sub-modules. Logic patches are generated to rectify any non-equivalent modules, and the final patches are optimized circuits that minimize the gate count required to make the Implementation Netlist equivalent to the Reference Netlist. Finally, the 'map_spare_cells' API is used to map these patches to spare-type-gates.

diff --git a/src_en/man.gofecofeatures.txt b/src_en/man.gofecofeatures.txt new file mode 100644 index 0000000000000000000000000000000000000000..eaa4947f7543aa431357cb02511f6c88d95e9f1d --- /dev/null +++ b/src_en/man.gofecofeatures.txt @@ -0,0 +1,13 @@ +

2.1 Netlist ECO Solutions

+

GOF ECO incorporates the following features:

+ diff --git a/src_en/man.gofecomanmode.txt b/src_en/man.gofecomanmode.txt new file mode 100644 index 0000000000000000000000000000000000000000..cbb24edc70b4bcd9f0b6ac138d2b50cd4f15ff7b --- /dev/null +++ b/src_en/man.gofecomanmode.txt @@ -0,0 +1,4 @@ + +

If the ECO changes are limited in scope and size or involve repetitive operations such as adding inverts on a bus, it is more efficient to use the manual mode ECO. This mode is a better option as it results in fewer final gates being touched compared to automatic mode ECO. Additionally, both automatic and manual modes can be combined and executed within a single GOF ECO script.

diff --git a/src_en/man.gofecovariousmethods.txt b/src_en/man.gofecovariousmethods.txt new file mode 100644 index 0000000000000000000000000000000000000000..87e8abea098bcfcbac40b2ee13d7113270a61f07 --- /dev/null +++ b/src_en/man.gofecovariousmethods.txt @@ -0,0 +1,10 @@ +

+

GOF ECO utilizes various advanced ECO methodologies, as netlist ECO can vary significantly in terms of size and complexity across different cases and companies. To provide users with maximum flexibility, GOF offers a range of methodologies to choose from, allowing them to select one or multiple options based on the specific requirements of the changes involved.

+
+

Figure 1: Complete Functional ECO Solutions

+ diff --git a/src_en/man.goflec_net2netlec.txt b/src_en/man.goflec_net2netlec.txt new file mode 100644 index 0000000000000000000000000000000000000000..41a0de555098244cd5fd7cc9f3ca11056b0666a6 --- /dev/null +++ b/src_en/man.goflec_net2netlec.txt @@ -0,0 +1,24 @@ +

5.1 GOF LEC Overview

+

The GOF platform features a logic equivalence checker tool called GOF LEC. While not mandatory, the tool can benefit from SVF files in certain cases. It is strongly advised to utilize SVF files if they are obtainable. The two designs being compared can either be in RTL or Netlist format, with RTL supporting SystemVerilog2017. The read design method differs depending on whether RTL or Netlist is being supported.

+
+

Figure 38: GOF LEC Engine

+

5.1.1 Netlist to Netlist LEC

+

The following is the example script for Netlist to Netlist LEC:

+
# LEC script, run_net2net_lec.pl
+use strict;
+read_library("art.5nm.lib"); # Read in standard library
+read_svf('-ref', 'AI2023_top_syn.svf.txt'); # Optional, must be loaded before read_design, must be in text format
+read_svf('-imp', 'AI2023_top_pr.svf.txt');  # Optional, must be loaded before read_design, must be in text format
+read_design('-ref', 'AI2023_top_syn.v'); # Read in the Reference Netlist, prelayout netlist
+read_design('-imp', 'AI2023_top_pr.v'); # Read in the Implementation Netlist, postlayout netlist
+set_top("AI2021_top"); # Set the top module
+set_ignore_output("scan_out*");
+set_pin_constant("scan_enable", 0);
+set_pin_constant("scan_mode", 0);
+my $non_equal = run_lec; # Run logic equivalence check on the two netlists
+if($non_equal){
+  gprint("LEC failed with $non_equal non-equivalent points");
+}else{
+  gprint("LEC passed");
+}
+
diff --git a/src_en/man.goflec_rtl2netlec.txt b/src_en/man.goflec_rtl2netlec.txt new file mode 100644 index 0000000000000000000000000000000000000000..80b5f5ab7b2018810d6e2ecb68a949bfaec3790a --- /dev/null +++ b/src_en/man.goflec_rtl2netlec.txt @@ -0,0 +1,23 @@ +

5.1.2 RTL to Netlist LEC

+

The following is the example script for RTL to Netlist LEC:

+
# LEC script, run_rtl2net_lec.pl
+use strict;
+read_library("art.5nm.lib"); # Read in standard library
+set_inc_dirs("-ref", "inc_dir_path/include");
+set_define("-ref", "NO_SIMULATION", 1);
+my @rtl_files = ("cpu_core.sv", "mem_ctrl.sv", "display_sys.sv", "chip_top.sv");
+read_rtl("-ref", @rtl_files); # Read in the Reference RTL files
+read_svf('-imp', 'chip_top.svf.txt');  # Optional, must be loaded before read_design, must be in text format
+read_design('-imp', 'chip_top.v'); # Read in the Synthesis Netlist
+set_top("CHIP_TOP"); # Set the top module
+set_ignore_output("scan_out*");
+set_pin_constant("scan_enable", 0);
+set_pin_constant("scan_mode", 0);
+elab_rtl(); # RTL processing
+my $non_equal = run_lec; # Run logic equivalence checking on RTL vs Netlist
+if($non_equal){
+  gprint("LEC failed with $non_equal non-equivalent points");
+}else{
+  gprint("LEC passed");
+}
+
diff --git a/src_en/man.gsc_automaticecoapis.txt b/src_en/man.gsc_automaticecoapis.txt new file mode 100644 index 0000000000000000000000000000000000000000..9308180ca6e84d094d952e33bb24d1681ac31def --- /dev/null +++ b/src_en/man.gsc_automaticecoapis.txt @@ -0,0 +1,14 @@ +

4.1.4.2 Automatic ECO APIs

+

These APIs are for Automatic ECO

+
+fix_design: ECO command to fix the design in automatic ECO (LLM: automatic eco)
+fix_logic: ECO command. Fix listed points
+map_spare_cells: ECO command. Map all new created cells to spare cells (LLM: metal only)
+
+

Combining netlist browsing APIs, users can come up a short script to do complicated changes.

+

For example, to fix all modules named "tx_machine_*"

+
+my @modules = get_modules("-hier", "tx_machine_*");
+fix_modules(@modules);
+ +
diff --git a/src_en/man.gsc_bexampletosch.txt b/src_en/man.gsc_bexampletosch.txt new file mode 100644 index 0000000000000000000000000000000000000000..5b5428f84b48a437e051d9fecd8f33d891772b79 --- /dev/null +++ b/src_en/man.gsc_bexampletosch.txt @@ -0,0 +1,7 @@ +

4.3.6 Counter-example back-annotated to schematic

+

In GOF shell 'GOF > sch the_non_equivalent_point -both', so that both instances/ports in the Implementation and Reference Netlists are loaded into a schematic. Select both of them, right the mouse and select 'LEC Debug the_non_equivalent_point'. After the run finishes, use mouse middle button to expand the schematic, and the counter-example values are back-annotated on the schematic.

+
+

Figure 36: Debug non-equivalence by counter-example back-annotated

+

Two corresponding flops, two corresponding output ports, and any two nets in the Reference Netlist and the Implementation Netlist can be compared in debug mode. In cases where the outcome is non-equivalent, the counterexample will be presented to the gate pins on the schematic.

+
+

Figure 37: Counter-example back-annotated on the schematic

diff --git a/src_en/man.gsc_breakfordebug.txt b/src_en/man.gsc_breakfordebug.txt new file mode 100644 index 0000000000000000000000000000000000000000..11a98a67949debbcb4f11bbaaaf034182ad89402 --- /dev/null +++ b/src_en/man.gsc_breakfordebug.txt @@ -0,0 +1,24 @@ +

4.3.5 Break points for debug

+

'sch' fast schematic launch command can be used as break points for debug. For example, 'sch' commands are inserted in GOF script, when the tool runs to the point, a schematic is launched.

+
+…
+setup_eco("eco_3821");
+set_log_file("t_eco_3821.log");
+read_library("art.m.simple.lib");
+read_design("-imp", "./cdir/imp_name.v");
+change_pin("state_reg_0_/D", "MX2X4", "eco_inst_1", ".A(-),.B(next_state[7]),.S0(sel_mode)");
+sch("state_reg_0_");
+…
+ +
+

 

+

On the schematic, user can use mouse-middle-button clicking on the pin 'D' to see if the ECO is done as expected.

+

 

+

+

 

+

Figure 34: Launch schematic at break point

+

Note: 'ECO' check-button is enabled automatically, since there is ECO having been done.

+

To compare with the logic before ECO, launch a new schematic by menu Schematic->'New Schematic'. On the new schematic, press 'ctrl-g' or by menu Schematic->'Load Gate' to load in the flop under ECO.

+

+

Figure 35: Launch schematic before ECO

+

Note: 'ECO' check-button is un-checked.

diff --git a/src_en/man.gsc_changefloptoothertype.txt b/src_en/man.gsc_changefloptoothertype.txt new file mode 100644 index 0000000000000000000000000000000000000000..b6ff048cdcbc2cc6b23a3a008c81ff2d675fc3dc --- /dev/null +++ b/src_en/man.gsc_changefloptoothertype.txt @@ -0,0 +1,10 @@ +

4.4.3 Change flops to other type

+

4.4.3.1 Change non-reset flop type to resettable flop

+
+# Find all flops matching string "cnt_reg" and change each flop to resettable flop
+my @flops = get_cells("*cnt_reg*");
+foreach my $flop (@flops){
+  change_gate($flop, "DFFRQX2", ".RD(reset_n)");
+}
+ +
diff --git a/src_en/man.gsc_fastschematiclaunch.txt b/src_en/man.gsc_fastschematiclaunch.txt new file mode 100644 index 0000000000000000000000000000000000000000..4bf3fc019ce52922893720b066edf6200dd3e561 --- /dev/null +++ b/src_en/man.gsc_fastschematiclaunch.txt @@ -0,0 +1,15 @@ +

4.3.4 Fast schematic launch

+

In GOF shell, GUI windows can be launched by 'start_gui' or 'sch' commands.

+

'start_gui' launches netlist view window first and user can bring up schematic window from netlist view window.

+

'sch' command only launches schematic window, and it doesn't enable netlist view window. So it has fast turnaround in GUI interactive debug.

+

For example,

+

After the following command is done,

+
+change_pin("u_top/u_core/u_regmod/state_reg/D", "XOR2X2", "", "-,new_enable");
+

+ +

Run 'sch' in 'GOF >'

+
+GOF > sch("u_top/u_core/u_regmod/state_reg")
+
+

The instance is loaded into a schematic and user can click on the instance's pins to trace fanin/fanout on the schematic to see if the ECO is done as expected.

diff --git a/src_en/man.gsc_fileipapis.txt b/src_en/man.gsc_fileipapis.txt new file mode 100644 index 0000000000000000000000000000000000000000..1682af7dcd4f7b0d4bfb7ffc75c63c466afc8e04 --- /dev/null +++ b/src_en/man.gsc_fileipapis.txt @@ -0,0 +1,17 @@ +

4.1.4.3 File IO APIs

+

These APIs are for reading/writing files.

+
+read_def: Read DEF file
+read_design: Read verilog netlist files (LLM: read verilog)
+read_file: Read timing violation report file
+read_lef: Read LEF file
+read_library: Read standard library or verilog library files (LLM: read library)
+restore_session: Restore ECO session
+save_session: Save ECO session
+write_dcsh: ECO command. Write ECO result in Design Compiler dcsh script format
+write_perl: ECO command to write ECO result in Perl script (LLM: result in perl)
+write_soce: ECO command. Write ECO result in Cadence SOC Encounter script format
+write_spare_file: ECO command. Write spare cells list to a file
+write_tcl: ECO command to write ECO result in Design Compiler tcl script format (LLM: result in tcl)
+write_verilog: ECO command to write ECO result in Verilog netlist (LLM: result in verilog)
+
diff --git a/src_en/man.gsc_gofscripapilist.txt b/src_en/man.gsc_gofscripapilist.txt new file mode 100644 index 0000000000000000000000000000000000000000..9062c237b035fc023822f7444add62fde4206e22 --- /dev/null +++ b/src_en/man.gsc_gofscripapilist.txt @@ -0,0 +1,207 @@ +

4.1.3 Full API list

+
+add_mapped_instance: Add mapped instance pair between REF and IMP
+buffer: ECO command. Buffer high fanout ECO nets
+change_gate: ECO command. Modify an instance in ECO
+change_net: ECO command. Change a existing net's driver
+change_pin: ECO command. Modify pin connection of instances by inserting gates, changing connection to other signal (LLM: change pin insert gate)
+change_port: ECO command. Change an output port's driver, or add gate after input port
+check_design: Check if the netlist status, searching for unresolved modules, floating and multi-drivers
+compare: Logic equivalence check on output port and register input pins
+compare_nets: Check equivalence of two nets in the reference and implementation netlist
+convert_gated_clocks: ECO command. Convert gated clocks to MUX logic.
+create_clock: Timing command and GOF Formal command. Create clock for fault verification
+create_pin_mapping_json_file: Create pin mapping file between original synthesis netlist and pre-ECO netlist
+create_reset: Create reset for the design
+current_design: Set the current top level module (LLM: current design module)
+current_instance: Set the current instance, alias of 'set_inst'
+del_gate: ECO command. Delete gate
+del_net: ECO command. Delete net
+del_port: ECO command. Delete port
+dft_drc: DFT DRC checker
+elab_rtl: Elaborate on RTL design
+elaborate: Elaborate and compile RTL files
+exist_inst: Check if an instance exists (LLM: instance existence)
+exist_wire: Check if a wire exists (LLM: wire existence)
+find_equal_nets: Find equivalent nets in IMP for the listed nets in REF, the results are printed out on the screen
+fix_design: ECO command to fix the design in automatic ECO (LLM: automatic eco)
+fix_logic: ECO command. Fix listed points
+flatten_modules: Flatten hierarchical modules in reference netlist
+get_cell_cofactors: Get combinational cell pin Shannon expansion cofactors
+get_cell_info: Get information of a module or instance (LLM: information)
+get_cells: Get all cells in the current module or sub-modules (LLM: find/get instance)
+get_conns: Get connections of net or pin in the top level module, return the leafs and the hierarchical connections (LLM: conns)
+get_coord: Get an instance's coordination (LLM: coordination)
+get_definition: Get instantiation of instance
+get_driver: Get the driver of a net or pin (LLM: driver)
+get_drivers: Get the drivers of a net or pin (LLM: drivers)
+get_instance: Get instance in the top level module
+get_instances: Get all hierarchical instances in the top level module (LLM: hierarchical instances)
+get_leaf_pin_dir: Get leaf cell pin's direction input/output/inout
+get_leafs_count: Get all leaf cells name and count in the top level module, return an array
+get_lib_cells: Get leaf gates in libraries
+get_loads: Get loads of net in the top level module, return the leafs connections (LLM: loads)
+get_loads_phase: Get loads of net with phase in the top level module, return the non-buffer/inverter leafs connections (LLM: loads with phase)
+get_logic_cone: Get logic cone of nets or pins
+get_modules: Get modules under current module (LLM: submodules)
+get_net_of: Get net name connecting to a pin (LLM: net of pin)
+get_nets: Get nets that matching pattern (LLM: matched nets)
+get_path: Get current hierarchical path (LLM: path)
+get_pins: Get pins of instance or module (LLM: pins)
+get_ports: Get all ports in the current top level module (LLM: ports)
+get_ref: Get the reference of the instance, return leaf cell name or hierarchical module name (LLM: design name)
+get_resolved: Resolve the relative path to module and leaf item
+get_roots: Get root designs name
+get_scan_flop: Get scan flop for the non scan flop (LLM: scan flop)
+get_spare_cells: ECO command. Get spare cells (LLM: metal only)
+get_spare_in_use: Get spare cells used in the ECO
+gexit: Exit the command interactive mode
+gof_version: Print out GOF version
+gprint: Print the message and save to log file (LLM: print)
+is_leaf: Check if a module or instance is leaf cell (LLM: leaf)
+is_pin_masked: Check if an instance pin has been masked in the current constraint (LLM: masked)
+is_scan_flop: Check if an instance is scan flop (LLM: scan flop)
+is_seq: Check if an instance or a leaf cell is a specific sequential cell (LLM: sequential)
+list_wireload: Timing command. List all wireload defined in the liberty files
+map_spare_cells: ECO command. Map all new created cells to spare cells (LLM: metal only)
+new_gate: ECO command. Create new gate
+new_net: ECO command. Create a new net
+new_port: ECO command. Create a new port for the current top level module
+place_gate: ECO command. Place an instance to a specific position
+place_port: ECO command. Place port position
+pop_top: Pop out the saved top level module from the stack and discard the current setting (LLM: pop current top design from stack)
+post_recovery: ECO command. recover deleted gates after ECO
+preserve_modules: Preserve wires in the modules listed or all modules
+push_top: Set the current top level module and push the previous setting to stack, pop_top can retrieve it (LLM: push stack current top design)
+read_def: Read DEF file
+read_design: Read verilog netlist files (LLM: read verilog)
+read_file: Read timing violation report file
+read_lef: Read LEF file
+read_library: Read standard library or verilog library files (LLM: read library)
+read_rtl: Read RTL files
+read_rtlpatch: Read RTL Patch file
+read_sdf: Read SDF Standard Delay Format file (LLM: sdf)
+read_sub_module_netlist: Read in new synthesized netlist file
+read_sub_module_svf: Read in new synthesized design SVF file
+read_svf: Read Synopsys SVF text files (LLM: svf)
+read_vcd: Read VCD file
+rename_net: ECO command. Rename a net name
+replace_sub_module_netlist: Replace sub-module in the design by a new re-synthesized sub-module netlist and write to a new top netlist
+replace_sub_module_svf: Replace sub-module SVF in the design by a new re-synthesized sub-module SVF file content
+report_eco: Report ECO
+report_spares: Report Spare cells
+report_timing: Timing command. Report timing
+restore_session: Restore ECO session
+rtl_compare: RTL to RTL compare
+run: Run Netlist processing script
+run_lec: Run Logic Equivalence Check of the Implementation Netlist vs the Reference Netlist (LLM: lec)
+save_session: Save ECO session
+sch: Launch schematic to verify ECO
+set_auto_fix_floating: ECO setting. Enable automatic fixing floating input ports after fix_modules
+set_bfix: Enable or disable BFIX features which is for precise combinational logic fix (LLM: precise combinational)
+set_blackbox: Set Blackbox on Modules
+set_bound_opti: Set boundary optimization checking
+set_buffer: Set buffer type. The tool automatically picks one if the command is not called (LLM: buffer name)
+set_buffer_distance: Set distance limit for inserting buffer
+set_clock_uncertainty: Timing command. Set clock uncertainty
+set_cluster_command: Set cluster command in parallel fault verification
+set_cluster_timeout: Set time out for cluster command
+set_constraints: Set constraints for map_spare_cells command
+set_cutpoint_thresh: Set Cutpoint Threshold
+set_cutpoint_ultra: Set the level in doing CutPoint Ultra (LLM: cutpoint ultra)
+set_define: Set define (LLM: define variable)
+set_detect_points: set detect points
+set_disable_cross_hierarchy_merge: Set this variable to disable cross hierarchy register merging
+set_disable_lib_cache: Disable liberty file cache
+set_dont_fix_modules: Set dont fix property on modules
+set_dont_use: Set dont use property on library cells
+set_eco_effort: ECO setting. Set ECO effort
+set_eco_point_json: Set a JSON file name for saving the ECO point data.
+set_equal: ECO setting. Set two points to be equivalent in the Reference and Implementation Netlists
+set_error_out: Set error out setting
+set_exit_on_error: Whether the tool should exit when the script runs into an error
+set_exit_on_warning: Whether the tool should exit when the script runs into a warning
+set_false_path: Timing command. Set false path
+set_floating_as_zero: Set floating net as constant zero (LLM: floating zero)
+set_flop_default_eco: Set flop default eco by inverting input pin and output pin
+set_flop_merge_enable: Inside module flop merge enable
+set_high_effort: Set high ECO effort on modules (LLM: effort high)
+set_ignore_instance: ECO setting. Set ignored sequential or blackbox instances in ECO
+set_ignore_network: ECO setting. Set ignore network in ECO
+set_ignore_output: ECO setting. Set ignore output ports
+set_ignore_pin: set ignore on the pin of black box like memory in logic equivalence checking (LLM: ignore black box pin)
+set_inc_dirs: Set include directories
+set_initial_trans: Timing command. Set initial transition for clock
+set_input_delay: Timing command. Set input delay
+set_input_transition: Timing command. Set input transition to all input ports
+set_inside_mod: Set fix scope inside the current module
+set_inst: Set the current instance, alias of 'current_instance'
+set_inv: ECO setting. Set two points to be inverted in the Reference and Implementation Netlists
+set_invert: Set invert type. The tool automatically picks one if the command is not called (LLM: invert name)
+set_keep_format: Keep the format of the original verilog when ECO is done (Keep original netlist format)
+set_keep_tree: Set keeping buffer tree, so that buffer tree won't be removed in ECO
+set_keypoints_rep_in_ref: ECO setting. Replace keypoints naming in Reference Netlist.
+set_leaf: Set a hierarchical module to be leaf. Useful to stub hierarchical instances
+set_log_file: Set log file name
+set_low_effort: Set low ECO effort to speed up ECO process (LLM: speed up)
+set_mapped_point: ECO setting. Set two points mapped in Reference and Implementation Netlists
+set_mapping_method: LEC setting. Detecting flop phase inversion.
+set_max_lines: Set max output lines
+set_max_loop: Setup max loop, the tool stops logic optimization when max loop number is reached
+set_mod2mod: Set reference module mapping to implementation module
+set_mu: MU configuration, setup MU value for BDD threshold
+set_multibit_blasting: Set blasting on multibit flops
+set_multibit_output: Set multibit flops output in ECO results
+set_net_constant: Set net to a constant value in DFT constraint (LLM: constant)
+set_no_patch_opt: Disable patch optimization
+set_noexact_pin_match: ECO setting. Don't match some special pins
+set_observe_points: set observe points
+set_one_fault: Set one fault for verify_state command
+set_only_use: In optimize_patch, Only use these cells listed
+set_output_delay: Timing command. Set output delay
+set_output_load: Timing command. Set output load to all output ports
+set_phase_adjust_en: Enable phase adjusting (LLM: phase adjusting)
+set_phase_inv: ECO setting. Set flops invert phase in the Reference and Implementation Netlists
+set_physical_aware: Enable physical aware ECO
+set_pin_constant: Set pin to a constant value in DFT constraint (LLM: constant)
+set_power: Set power pins connections for leaf cell
+set_preserve: Set preserve property on instances. The tool does not remove them in ECO (LLM: preserve)
+set_quiet: Run script in quiet mode
+set_recovery_distance: Set distance limit for gates recovery in ECO
+set_remove_undsc_in_ref: ECO setting. Remove last '_' in flop instance in Reference Netlist
+set_rtl_eco_full_hier_fan: RTL ECO has full hierarchical fanout
+set_save_mapped_instance: Dump key points mapping information for LEC
+set_scan_pairs: Set scan output ports, the command is used with dft_drc
+set_sn_vs_rn: Check set pin and reset pin priority
+set_solver_timeout: Set time out for solver
+set_tiehi_net: Set tiehi net name, it is used if tiehi net is needed in ECO (LLM: tiehi)
+set_tielo_net: Set tielo net name, it is used if tielo net is needed in ECO (LLM: tielo)
+set_time_frame_limit: GOF Formal only. Set limitation for time frame in fault verification, default 35
+set_top: Set the current top level module (LLM: current top design)
+set_top_ref: Set the top level module for the Reference design (LLM: unmatched hierarchy reference)
+set_tree: Set the current tree, if there are more than one sets of databases (LLM: tree)
+set_user_match: Set match between multi-bit flops to multi-bit flops, and between multi-bit flops to single bit flop
+set_verbose: Run script in verbose mode
+set_wireload: Command for Timing Report. Set wireload for one liberty library
+set_write_verilog_remove_backslash: Enable write out verilog with backslash removal
+set_write_verilog_uniquify: Enable write out verilog in uniquified mode
+set_xm_flop_merge_enable: Cross module flop mapping and merging enable.
+setup_eco: ECO command. Setup ECO
+source: Run Netlist processing script.
+start_gui: Start GUI windows
+stitch_scan_chain: ECO command. Stitch scan chain
+suppress_errors: Suppress error messages
+suppress_warnings: Suppress warning messages
+swap_inst: ECO command. Swap two instances with same input/output pins.
+undo_eco: ECO command. Undo eco operations, restore the database to the original state.
+verify_faults: GOF Formal only. Verify fault in stuck-0 or stuck-1 mode
+verify_state: GOF Formal only. Verify if a sequence exists to set the signal
+write_compare_points: Write all compare points to a report file
+write_dcsh: ECO command. Write ECO result in Design Compiler dcsh script format
+write_formality_help_files: Write formality help files including mapped instance list and modified netlist files if necessary
+write_perl: ECO command to write ECO result in Perl script (LLM: result in perl)
+write_soce: ECO command. Write ECO result in Cadence SOC Encounter script format
+write_spare_file: ECO command. Write spare cells list to a file
+write_tcl: ECO command to write ECO result in Design Compiler tcl script format (LLM: result in tcl)
+write_verilog: ECO command to write ECO result in Verilog netlist (LLM: result in verilog)
+
diff --git a/src_en/man.gsc_gofscripfeaturelist.txt b/src_en/man.gsc_gofscripfeaturelist.txt new file mode 100644 index 0000000000000000000000000000000000000000..645a237ebb80df981bb2930c263a924d36101f9b --- /dev/null +++ b/src_en/man.gsc_gofscripfeaturelist.txt @@ -0,0 +1,9 @@ +

4.1.2 GOF Script APIs feature list

+ diff --git a/src_en/man.gsc_gofscripthelp.txt b/src_en/man.gsc_gofscripthelp.txt new file mode 100644 index 0000000000000000000000000000000000000000..4477f4d166221991aa2c87eb0d4e07b9e678b96e --- /dev/null +++ b/src_en/man.gsc_gofscripthelp.txt @@ -0,0 +1,11 @@ +

4 Script Mode Detail Features

+

4.1 GOF Script Interface

+

GOF Script Interface can access and change internal netlist design database by exported APIs.

+

4.1.1 Get Help for APIs

+ +

diff --git a/src_en/man.gsc_insertgatetohierpin.txt b/src_en/man.gsc_insertgatetohierpin.txt new file mode 100644 index 0000000000000000000000000000000000000000..c0cacfbca5f43c8aa74d1ad3d2f1a83ef79c9bd1 --- /dev/null +++ b/src_en/man.gsc_insertgatetohierpin.txt @@ -0,0 +1,28 @@ +

4.4.4 Insert gate to hierarchical instance pin

+

4.4.4.1 Insert inverts to hierarchical instance pins

+
+# Find all instances matching "tx_mac" in module "abc_mod" and insert invert to 'loop_en' pin
+set_top("abc_mod");
+my @insts = get_instances("*tx_mac*");
+foreach my $inst (@insts){
change_pin("$inst/loop_en", "INVX1", "", "-");
+}
+ +
+

4.4.4.2 Insert AND to hierarchical instance pins

+
+# Find all instances matching "tx_mac" in module "abc_mod" and
+# AND all output pins with "power_on" signal.
+set_top("abc_mod");
+my @insts = get_instances("*tx_mac*");
+foreach my $inst (@insts){
+  my @pins = get_pins("-output", $inst);
+  foreach my $pin (@pins){
+    my $net = get_net_of($pin); # Only add AND to those out pins driving nets
+    if($net){
+      change_pin($pin, "AND2X2", "", ".A(-),.B(power_on)");
+    }
+  }
+}
+ +
diff --git a/src_en/man.gsc_insertgatetoinstpin.txt b/src_en/man.gsc_insertgatetoinstpin.txt new file mode 100644 index 0000000000000000000000000000000000000000..85c563b25d0702fb7dcbd7bb5541aad7052cddc3 --- /dev/null +++ b/src_en/man.gsc_insertgatetoinstpin.txt @@ -0,0 +1,23 @@ +

4.4.2 Insert gate to register instance pin

+

4.4.2.1 Insert invert to flop data pin

+
+# Insert an invert to 'D' pin of flop 'abc_reg'
+change_pin("abc_reg/D", "INVX1", "", "-");
+ +
+

4.4.2.2 Insert invert to flop output pin

+
+# Insert an invert to 'Q' pin of flop 'abc_reg'
+change_pin("abc_reg/Q", "INVX1", "", "-");
+ +
+

4.4.2.3 Insert MUX to data pin of multiple flops

+
+# Find all flops matching string "cnt_reg" and insert MUX to 'D' pin of each flop,
+# so that each flop is preset to 'preset_val' when 'preset_enable' is high
+my @flops = get_cells("*cnt_reg*");
+foreach my $flop (@flops){
+  change_pin("$flop/D", "MUX2X2", "", ".A(-),.B(preset_val),.S(preset_enable)");
+}
+ +
diff --git a/src_en/man.gsc_insertgatetoport.txt b/src_en/man.gsc_insertgatetoport.txt new file mode 100644 index 0000000000000000000000000000000000000000..ce442c415d828361033092f3f95066a5ffb34dae --- /dev/null +++ b/src_en/man.gsc_insertgatetoport.txt @@ -0,0 +1,26 @@ +

4.4 Typical Manual ECO operations

+

4.4.1 Insert gate to port

+

Both input port and output port have the same operation

+

4.4.1.1 Insert an invert to input port

+
+# Insert to input port 'in_enable'
+change_port("in_enable", "INVX1", "inst_name", "-"); # 'inst_name' can be empty
+ +
+

4.4.1.2 Insert to output port

+
+# Insert AND2X1 to output port 'out_enable', one pin connects to the original driver,
+# the other pin is driven by 'scan_mode'
+change_port("out_enable", "AND2X1", "", "scan_mode,-");
+ +
+

4.4.1.3 Insert inverts to multiple ports

+
+# Find all ports matching string "abcde" and insert invert to each port
+my @ports = get_ports("*abcde*");
+foreach my $port (@ports){
+  change_port($port, "INVX1", "", "-");
+}
+ +
+

diff --git a/src_en/man.gsc_manualecoapis.txt b/src_en/man.gsc_manualecoapis.txt new file mode 100644 index 0000000000000000000000000000000000000000..8bf1daf9bc78faebab7def9b786d73b078992347 --- /dev/null +++ b/src_en/man.gsc_manualecoapis.txt @@ -0,0 +1,25 @@ +

4.1.4.4 Manual ECO APIs

+

These are APIs for Manual ECO.

+
+buffer: ECO command. Buffer high fanout ECO nets
+change_gate: ECO command. Modify an instance in ECO
+change_net: ECO command. Change a existing net's driver
+change_pin: ECO command. Modify pin connection of instances by inserting gates, changing connection to other signal (LLM: change pin insert gate)
+change_port: ECO command. Change an output port's driver, or add gate after input port
+del_gate: ECO command. Delete gate
+del_net: ECO command. Delete net
+del_port: ECO command. Delete port
+new_gate: ECO command. Create new gate
+new_net: ECO command. Create a new net
+new_port: ECO command. Create a new port for the current top level module
+
+

Combining netlist browsing APIs, a short GOF script can do very efficient ECOs.

+

For example, to add isolation cells for all output ports of a module.

+
+set_top("module_name");
+my @out_ports = get_ports("-output");
+foreach my $out (@out_ports){
change_port($out, "AND2X2", "", "-,net_iso_enable");
+}
+ +
diff --git a/src_en/man.gsc_namewithbackslash.txt b/src_en/man.gsc_namewithbackslash.txt new file mode 100644 index 0000000000000000000000000000000000000000..a392c6369101bf4d4ca7dd73ca30303f80cdb962 --- /dev/null +++ b/src_en/man.gsc_namewithbackslash.txt @@ -0,0 +1,16 @@ +

4.2.2 Instance and net with backslash

+

 

+

Instance with backslash should be either put in single quote and with a space in the end.

+
+change_pin('\u_abc/u_def/state_reg[0] /RN', "1'b0");
+

+ +

Net name with backslash should keep the backslash and space. For example

+
+DFFQ_X4M \u_abc/u_def/state_reg[0] (.D(\u_abc/u_def/net123 ), .Q(\u_abc/u_def/state[0] )); +
+

The net '\u_abc/u_def/net123 ' should have backslash and space kept in API, for example:

+
+change_net("\u_abc/u_def/net123 ", "INVX1", "", "-");
+

+ diff --git a/src_en/man.gsc_netlistbrowseapis.txt b/src_en/man.gsc_netlistbrowseapis.txt new file mode 100644 index 0000000000000000000000000000000000000000..7970cc2f00f3427552144cae59c3853e5d4e112d --- /dev/null +++ b/src_en/man.gsc_netlistbrowseapis.txt @@ -0,0 +1,32 @@ +

4.1.4 API grouping

+

4.1.4.1 Netlist Browse APIs

+

One key element to do efficient manual ECO is to isolate the ECO spots quickly. The following APIs are for fast Netlist Browsing.

+
+get_cells: Get all cells in the current module or sub-modules (LLM: find/get instance)
+get_conns: Get connections of net or pin in the top level module, return the leafs and the hierarchical connections (LLM: conns)
+get_driver: Get the driver of a net or pin (LLM: driver)
+get_drivers: Get the drivers of a net or pin (LLM: drivers)
+get_instance: Get instance in the top level module
+get_instances: Get all hierarchical instances in the top level module (LLM: hierarchical instances)
+get_lib_cells: Get leaf gates in libraries
+get_loads: Get loads of net in the top level module, return the leafs connections (LLM: loads)
+get_modules: Get modules under current module (LLM: submodules)
+get_net_of: Get net name connecting to a pin (LLM: net of pin)
+get_nets: Get nets that matching pattern (LLM: matched nets)
+get_pins: Get pins of instance or module (LLM: pins)
+get_ports: Get all ports in the current top level module (LLM: ports)
+get_ref: Get the reference of the instance, return leaf cell name or hierarchical module name (LLM: design name)
+
+

For example, to get data pins of flops in one module. The script can use these browse APIs

+
+my @flop_data_pins;
+set_top("module_name");
+my @flops = get_cells("-type", "ff");
+foreach my $flop (@flops){
+  my @dpins = get_pins("-data", $flop);
+  push @flop_data_pins, $dpins;
+}
+ +
+

After run the script, @flop_data_pins have all data pins of all flops in the module.

+

diff --git a/src_en/man.gsc_runanddebuggofscript.txt b/src_en/man.gsc_runanddebuggofscript.txt new file mode 100644 index 0000000000000000000000000000000000000000..545d9dfa4636560fdea7de7e1861a046188639ba --- /dev/null +++ b/src_en/man.gsc_runanddebuggofscript.txt @@ -0,0 +1,22 @@ +

4.3 Run and debug GOF script

+

4.3.1 Command line

+

In Linux Shell, the script can be run by ‘-run’ option.

+

gof -run run_example.pl

+

4.3.2 GOF Shell

+

If '-run' option is present in the command line, and 'exit' or 'gexit' is not in the script, or GOF meets error when executing the script, GOF goes into interactive mode with GOF shell 'GOF >'.

+
+GOF, Netlist Processing Script APIs, Interactive Mode
+Run 'start_gui' to launch GUI window
+Run 'help' to list API calls
+GOF >
+  +
+

Individual command can be executed in GOF shell. The command can be in nested mode

+
+GOF > set_top(get_ref("u_rxbuf"))
+
+

4.3.3 Run in GUI mode

+

GOF scripts can be run in GUI window. In GofViewer, click Menu Commands->’Launch GOF Script Interface’ to launch GOF GUI window.

+

Type ‘help’ in the shell entry for help information. Scripts can be run by ‘run’ command in the shell entry

+

+

Figure 33: GofCall window

diff --git a/src_en/man.gsc_stringquotes.txt b/src_en/man.gsc_stringquotes.txt new file mode 100644 index 0000000000000000000000000000000000000000..347989b37486eccdf1e15789469e32d6f728b36c --- /dev/null +++ b/src_en/man.gsc_stringquotes.txt @@ -0,0 +1,9 @@ +

4.2 String Handling In Script Mode

+

4.2.1 Single quote and double quote

+

 

+

Any string in GOF script for module/instance/wire/pin/port should be enclosed by single quote or double quote. When a Perl variable is used, double quote should be used

+
+my $inst = "state_reg_0";
+change_pin("inst/D","1'b0");
+

+ diff --git a/src_en/man.install.txt b/src_en/man.install.txt new file mode 100644 index 0000000000000000000000000000000000000000..f9dc27bc01383722c2df5d5928f5aeb4324601a7 --- /dev/null +++ b/src_en/man.install.txt @@ -0,0 +1,4 @@ +

1.1 Download and Install GOF

+

GOF release package can be found in

+

https://nandigits.com/download.php

+

Please complete the form to request an evaluation license before downloading the application.

The tool supports Linux 64bits OS. Download the release package and unzip to a directory. Set 'the_64bit_install_path/GOF64/bin' in search path.

diff --git a/src_en/man.intro.txt b/src_en/man.intro.txt new file mode 100644 index 0000000000000000000000000000000000000000..bb448f891129f248ca42952eef52f1d4ee4e6102 --- /dev/null +++ b/src_en/man.intro.txt @@ -0,0 +1,7 @@ +

1 Introduction

+

+

The GOF platform is comprised of four powerful functional components: GOF ECO, GOF Formal, GOF LEC, and GOF Debug.

+

GOF ECO is the flagship tool within the GOF platform, offering state-of-the-art technology and methodologies for functional netlist ECO. Whether you need to identify non-equivalent modules, fix non-equivalent points, or streamline the Implementation netlist, GOF ECO has you covered.

+

GOF Formal is another critical component of the GOF platform, providing a formal method for calculating fault coverage in an IC design in functional safety.

+

GOF LEC is the logic equivalence checker tool within the GOF platform, enabling users to easily verify the equivalence of their designs and ensure that they function as intended.

+

GOF Debug is the netlist debug tool integrated with incremental schematic, providing a fast and efficient way to identify and resolve errors in your netlist.

diff --git a/src_en/man.license.txt b/src_en/man.license.txt new file mode 100644 index 0000000000000000000000000000000000000000..bc316ee4952a56e3b933e588c56b1ab4bb1387cb --- /dev/null +++ b/src_en/man.license.txt @@ -0,0 +1,6 @@ +

1.2 License and Setup

+

Visit https://nandigits.com/supports.php?type=license to request an evaluation license. Or email support@nandigits.com for more information. Without license, the tool can support netlist size less than 500K bytes. There are two license modes, fixed node mode and floating node mode.

+ diff --git a/src_en/use.advkeymap.txt b/src_en/use.advkeymap.txt new file mode 100644 index 0000000000000000000000000000000000000000..6e98e7c8a0f387cac17aca84725b607d7ce1010e --- /dev/null +++ b/src_en/use.advkeymap.txt @@ -0,0 +1,10 @@ +When you see many of those lines in the log, +DONE FILE in prun1123/done.testequal +DONE FILE in prun1123/done.testequal..0_1.1_0 + +and ECO takes long time. +The feature is an advanced key point mapping method. It can be disabled by disabling it before running fix_design +set_key_point_map_adv(0); + +fix_design(); + diff --git a/src_en/use.panic.txt b/src_en/use.panic.txt new file mode 100644 index 0000000000000000000000000000000000000000..f0e27385a5183a38368726c67114296005becf89 --- /dev/null +++ b/src_en/use.panic.txt @@ -0,0 +1,4 @@ +When run gof application, an error shows up +Panic: Can't find bfs section in '/home/tool/gof/bin/gof' + +It is caused by tool download not complete. Please visit nandigits.com/download.php and download the tool again. diff --git a/src_en/user.metalonly.txt b/src_en/user.metalonly.txt new file mode 100644 index 0000000000000000000000000000000000000000..c1044935f1af7d22522f24c4d178a8ebafbfad38 --- /dev/null +++ b/src_en/user.metalonly.txt @@ -0,0 +1,4 @@ +What is metal only ECO? +Metal only ECO only changes metal layers and keeps base layers untouched. +GOF ECO has two metal only ECO modes, one is using standard library spare cells. +The other is using Metal Configurable gate array cells.