diff --git a/src_en/api.add_mapped_instance.txt b/src_en/api.add_mapped_instance.txt new file mode 100644 index 0000000000000000000000000000000000000000..1a19dce53ea7164f42b8dfd45672b80bcaf12258 --- /dev/null +++ b/src_en/api.add_mapped_instance.txt @@ -0,0 +1,6 @@ +

add_mapped_instance

+
Add mapped instance pair between REF and IMP
+Usage: add_mapped_instance($ref_instance, $imp_instance);
+Examples:
+  add_mapped_instance("u_subtop/u_def/state_reg", "u_subtop/uinst_def/state_reg");
+
\ No newline at end of file diff --git a/src_en/api.buffer.txt b/src_en/api.buffer.txt new file mode 100644 index 0000000000000000000000000000000000000000..10d0089d62c4c4550e7b70b6e214495e8bbcfe98 --- /dev/null +++ b/src_en/api.buffer.txt @@ -0,0 +1,21 @@ +

buffer

+
ECO command. Buffer high fanout ECO nets
+Usage: buffer($net_names, $buffer_name, $fanout);
+$net_names: Net names to be buffered. Use "," to separate multiple nets, like "eco1_net1,reset2"
+$buffer_name: The buffer module name from library, leave it blank to let the tool pick one.
+              It supports repeater case by ",", for example, "INVX1,INVX16" would have 'INVX1'
+              drives 'INVX16' and 'INVX16' drives the fanouts.
+$fanout: How many fanout to insert a buffer.
+
+Examples:
+
+#1. For every 10 fanout of test_mode, add a buffer, BUFX6
+buffer("test_mode", "BUFX6", 10); 
+
+#2. For every 10 fanout of 'clock', add repeaters, INVX2,INVX16
+buffer("clock", "INVX2,INVX16", 10);
+
+#3. Let the tool pick a buffer
+buffer("clock", "", 10);
+
+
\ No newline at end of file diff --git a/src_en/api.change_gate.txt b/src_en/api.change_gate.txt new file mode 100644 index 0000000000000000000000000000000000000000..9b5175cadfe7af7696430cd30f1872bce12e3745 --- /dev/null +++ b/src_en/api.change_gate.txt @@ -0,0 +1,39 @@ +

change_gate

+
ECO command. Modify an instance in ECO
+Two types of usages
+Usage1: change_gate($instance, $new_reference, $pin_mapping);
+$instance: The instance under ECO. Support hierarchical name, "u_abc/U123"
+$new_reference: The new reference name which the instance changes to, E.G. 'AND3X1'. 
+                If no reference is present, the ECO operation is assumed to 
+                  change the instance's pin connections.
+$pin_mapping: Input pins mapping, ".new(old)", E.G. ".A1(A),.B1(B)"
+              if two references have same input pins. The option can be empty
+Usage2: change_gate($instance, $pin_connections);
+$pin_connections: New pin connections, ".A(n242)".
+                  The unspecified pins keeps the original connection.
+                  E.G. pin 'B' connection is unchanged.
+
+Examples:  
+
+#1. U123 has reference OR3X1 with input pins, A,B,C originally
+# change U123 to AND3X1, all input pins are the same.
+change_gate('U123', 'AND3X1', ""); 
+
+#2. A and B keep the connections, discard C
+change_gate('U123', 'AND2X1', "");
+
+#3. A keeps the connections, B connects to what the old C connects. And discard old B
+change_gate('U123', 'AND2X1', ".B(C)"); 
+
+#4. A,B,C keep the same, and new D pin connects to net n123
+change_gate('U123', 'AND4X1', ".D(n123)"); 
+
+#5. AO21X1 has input pins, A0, A1 and B0 
+change_gate('U123', 'AO21X1', ".A0(A),.A1(B),.B0(C)");
+
+#6. change U123 A to n123, B to n124, keep C connection. 
+change_gate("U123", ".A(n123),.B(n124)"); 
+
+#7. Rotating A/B/C connections.
+change_gate("U123", ".A(B),.B(C),.C(A)"); 
+
\ No newline at end of file diff --git a/src_en/api.change_net.txt b/src_en/api.change_net.txt new file mode 100644 index 0000000000000000000000000000000000000000..dcd060db381f641d9696a75f627ad79717a7c0c6 --- /dev/null +++ b/src_en/api.change_net.txt @@ -0,0 +1,25 @@ +

change_net

+
ECO command. Change a existing net's driver
+Usage: change_net($net, $gate, $instance, $connections);
+$net: The net to be ECOed
+$gate: New leaf gate to drive the net
+$instance: The instance name of the new gate. Optional, if it is empty, assigned by the tool
+$connections:  The new gate input pins connections. If it is empty, the gate is inserted in the net
+   Supported formats, 1. Very detail  ".A(net0),.B(net1),.C(net2)"
+                      2. Connect to the pins in alphabetical sequence 
+                          "net1,net0,net2" indicating A->net1,B->net0,C->net2
+                      3. Other instance/pin "U408/Y,U409/Y,net2" indicating A->U408/Y,B->U409/Y,C->net2
+                      4. Special character '-' is used to connect up the original connection
+
+Examples:
+
+#1. Drive n123 with BUFX2 driven by n40
+change_net("n123", "BUFX2", "", "n40");   
+
+#2. Drive n123 with AND2X2 driven by n40 and original n123 driver
+change_net("n123", "AND2X2", "", "-,n40");    
+
+#3. Insert a buffer into n123
+change_net("n123", "BUFX2");   
+
+
\ No newline at end of file diff --git a/src_en/api.change_pin.txt b/src_en/api.change_pin.txt new file mode 100644 index 0000000000000000000000000000000000000000..9f30d3d3bdc4e6828362815214ca6bae22418f90 --- /dev/null +++ b/src_en/api.change_pin.txt @@ -0,0 +1,74 @@ +

change_pin

+
ECO command. Modify pin connection of instances by inserting gates, changing connection to other signal (LLM: change pin insert gate)
+Two types of usages. 
+
+Usage1: change_pin($pin_name, $net);
+Change pin's connection to a net
+$pin_name: In the format of "instance/pin", can be more than one pins separated by ",",
+             "instance1/pinA,instance2/pinB", E.G. "U123/A", "U123/A,U345/B"
+             Hierarchical naming style is supported as well, "u_abc/U123/A"
+             The pins have to be input in this mode.
+$net: The net name the pin connects to.
+      Hierarchical naming style is supported, "u_abc/net123"
+      When the pin and the net are in different hierarchies, ports are added automatically
+      E.G. 
+      # The tool creates 4 ports across the hierarchies to connect the net to the pin.
+      change_pin("u_abc/u_cde/U200/A", "u_xyz/u_stv/net300");
+      # The tool gets the net tie to Y pin of U300 and do the the same as the previous example.
+      change_pin("u_abc/u_cde/U200/A", "u_xyz/u_stv/U300/Y");
+
+Usage2:my $inst = change_pin($pin_name, $leaf_cell, $new_instance, $connection);
+Insert a new leaf cell to drive the pin
+$inst: Return new instance name if new gate is created in the command.
+$pin_name: In the format of "instance/pin", E.G. U123/A  Hierarchical naming is supported, u_abc/U123/A
+           The pin can be output in this mode. The tool gets the net the pin drives,
+             and change the command to 
+             change_net($thenet, $leaf_cell, $new_instance, $connection);
+$leaf_cell: The leaf cell name to drive the $pin_name
+$new_instance: The instance name for the new inserted leaf cell. 
+               The option is optional, the tool assigns one if it's empty
+               If use '.', the instance is added to the same hierarchy as the $pin_name
+$connection: The pins connection for the new cell. 
+   Supported formats, 1. Detail format:  ".A(net0),.B(net1),.C(net2)"
+                      2. Simple format: Connect to the pins in alphabetical sequence "net1,net0,net2"
+                      3. Mixed format: "u_abc/U123/Y,.B(net1),net2"
+                      4. Special character '-' is used to connect up the original connection
+                      5. Advanced nesting format: 
+                         change_pin("U189/A", "AOI21X2", "", "U190/Y,,BUFX6(BUFX6(BUFX6(n412)))");
+
+Note: All strings should be quoted by ' or " to avoid syntax error or undesired effects.
+     
+
+Examples:
+
+#1. U123 has input pins A,B,C, U234 has input pins A0,A1,B
+# Change A pin of U123 to net12345
+change_pin("U123/A", "net12345"); 
+
+#2. Change A pin of U123 to $net which is defined in the ECO script.
+change_pin("U123/B", $net); 
+
+#3. Change A pin of U123 to net12345
+change_pin("U123/A,U234/B", "net12345");
+
+#4. Insert "NAND2X2 eco12345_U0(.A(net1234),.B(net5678));"
+# to drive U123/A
+change_pin("U123/A", "NAND2X2", "eco12345_U0", "net1234,net5678"); 
+
+#5. Same as above, with more detail of pin connections
+change_pin("U123/A", "NAND2X2", "eco12345_U0", ".A(net1234),.B(net5678)"); 
+
+#6.Insert a buffer to U123 A pin
+change_pin("U123/A", "BUFX4", "", "-"); 
+
+#7. Insert NAND2X1 to drive CK pin and new A connects to the original net
+change_pin("abc_reg_1_/CK", "NAND2X1", "", ".A(-),.B(1'b1)"); 
+
+#8. Do hierarchical connection
+change_pin("u_abc/u_cde/U200/A", "u_xyz/u_stv/U300/Y"); 
+
+#9. Nested connection
+change_pin("qcif/num2/u_spare1/B", "AOI21X2", "eco_inst_on_top1", \
+           "NAND2X2(gte_344/u_smod/U100/Y, gte_344/n114), gte_343/U111, BUFX6(BUFX6(n105))");
+
+
\ No newline at end of file diff --git a/src_en/api.change_port.txt b/src_en/api.change_port.txt new file mode 100644 index 0000000000000000000000000000000000000000..f565905336b2c8df0319b7b595982aa827aa14e9 --- /dev/null +++ b/src_en/api.change_port.txt @@ -0,0 +1,26 @@ +

change_port

+
ECO command. Change an output port's driver, or add gate after input port 
+Usage1: change_port($port, $gate, $instance, $connections);
+$port: The port under ECO, can be input port or output port
+$gate: New leaf gate to drive the port if the port is output
+       Or add the gate after input port
+$instance: The instance name for the new leaf cell, optional, the tool assigns one if it's empty
+$connections: The new gate input pins connections. If it is empty, the gate is inserted in the net
+   Supported formats, 1. Very detail  ".A(net0),.B(net1),.C(net2)"
+                      2. Connect to the pins in alphabetical sequence 
+                          "net1,net0,net2" indicating A->net1,B->net0,C->net2
+                      3. Other instance/pin "U408/Y,U409/Y,net2" indicating A->U408/Y,B->U409/Y,C->net2
+                      4. Special character '-' is used to connect up the original connection
+Usage2: change_port($port, $inst_pin);
+$port: The port under ECO, output port
+$inst_pin: In the format of 'u1234/Y', instance-name/pin-name
+Note: The difference of change_net and change_port command
+      change_net changes all drains of the net.
+      change_port changes only the port driver.
+
+Examples:
+
+#1. Add buffer to output port 'out1'
+change_port("out1", "BUFX1", "eco_buf0", "-");
+
+
\ No newline at end of file diff --git a/src_en/api.check_design.txt b/src_en/api.check_design.txt new file mode 100644 index 0000000000000000000000000000000000000000..7731986832f1d937a24d6302f557fe7f1730d231 --- /dev/null +++ b/src_en/api.check_design.txt @@ -0,0 +1,18 @@ +

check_design

+
Check if the netlist status, searching for unresolved modules, floating and multi-drivers 
+Usage: check_design(@options);
+@options:
+   -ignore list: Ignore the issues matching the list, E.G. 'FE_UNCONNECT*,SCAN_*'. 
+   -eco: Only check instances/wires having been done ECO. Default check all instances/wires
+   -fixfile filename: Create ECO fix file
+   -nouniquify: Dont check uniquify
+
+Examples:
+
+check_design;
+check_design('-ignore', 'FE_UNCONNECT*');
+check_design('-ignore', 'FE_UNCONNECT*,SCAN_*');
+check_design('-ignore', 'W-108');
+check_design("-eco");
+
+
\ No newline at end of file diff --git a/src_en/api.compare.txt b/src_en/api.compare.txt new file mode 100644 index 0000000000000000000000000000000000000000..b0d666ce2908d9ef4ba87fcd6e59f2259ce499b7 --- /dev/null +++ b/src_en/api.compare.txt @@ -0,0 +1,17 @@ +

compare

+
Logic equivalence check on output port and register input pins
+Usage: my $no_eq_num = compare(@nets, @options);
+@options:
+   -help: Print this info
+$no_eq_num: Return back non-equivalent number
+
+Examples:
+
+#1. Check if output port 'state_out' is equivalent in IMP/REF netlists
+compare("state_out");
+
+#2. Check two points at the same time.
+    Check if 'state_reg_0_/D' is equivalent in IMP/REF netlists
+    And check if 'state_reg_1_/D' are equivalent in IMP/REF netlists
+compare("state_reg_0_/D", "state_reg_1_/D");
+
\ No newline at end of file diff --git a/src_en/api.compare_nets.txt b/src_en/api.compare_nets.txt new file mode 100644 index 0000000000000000000000000000000000000000..93168197a535e2f6a7d9f3b70edfab034ba8de71 --- /dev/null +++ b/src_en/api.compare_nets.txt @@ -0,0 +1,14 @@ +

compare_nets

+
Check equivalence of two nets in the reference and implementation netlist
+Usage: my $result = compare_nets($net0, $net1, @options);
+$net0: The net in the reference netlist.
+$net1: The net in the implementation netlist.
+@options:
+$result: 1, they are equal, 
+         0, they are not equal.
+
+Examples:
+
+#1 Compare reg1/D in the reference and reg1/D in the implementation netlist
+compare_nets("reg1/D", "reg1/D");
+
\ No newline at end of file diff --git a/src_en/api.convert_gated_clocks.txt b/src_en/api.convert_gated_clocks.txt new file mode 100644 index 0000000000000000000000000000000000000000..ecd1214f6b66948b1557e8e55d0fa63e9a29ab60 --- /dev/null +++ b/src_en/api.convert_gated_clocks.txt @@ -0,0 +1,6 @@ +

convert_gated_clocks

+
ECO command. Convert gated clocks to MUX logic.
+In metal ECO, if gated clock cell is not in spare gate list, this command should run before map_spare_cells
+Usage: my $cnt = convert_gated_clocks();
+$cnt: The number of gated clock cells having been converted
+
\ No newline at end of file diff --git a/src_en/api.create_clock.txt b/src_en/api.create_clock.txt new file mode 100644 index 0000000000000000000000000000000000000000..9031c75f50cc11b5c2f0e48d22ebfa6905b6cb48 --- /dev/null +++ b/src_en/api.create_clock.txt @@ -0,0 +1,18 @@ +

create_clock

+
Timing command and GOF Formal command. Create clock for fault verification
+Usage: create_clock($clock_name, $clock_period);
+$clock_name: Clock name, input port name or black box instance output pin
+$clock_period: Clock period
+
+Note: This command can be used multiple times. The clock period is recommended to be multiples of 2
+
+Examples:
+
+#1. Create clock on PIN_SPI_CLK, period 4ns
+create_clock("PIN_SPI_CLK", 4);
+
+#2. Create clock on PIN_APB_CLK and PLL clk_out
+create_clock("PIN_APB_CLK", 2);
+create_clock("u_pll_top/u_pll_core/clk_out", 2);
+
+
\ No newline at end of file diff --git a/src_en/api.create_pin_mapping_json_file.txt b/src_en/api.create_pin_mapping_json_file.txt new file mode 100644 index 0000000000000000000000000000000000000000..4e0bf53eed870cf311d77701ea19bd928245b6da --- /dev/null +++ b/src_en/api.create_pin_mapping_json_file.txt @@ -0,0 +1,5 @@ +

create_pin_mapping_json_file

+
Create pin mapping file between original synthesis netlist and pre-ECO netlist
+Usage: create_pin_mapping_json_file($filename);
+$filename: JSON file name
+
\ No newline at end of file diff --git a/src_en/api.create_reset.txt b/src_en/api.create_reset.txt new file mode 100644 index 0000000000000000000000000000000000000000..5540fa0b3a45143eec76510d79c6d2bb5dd84694 --- /dev/null +++ b/src_en/api.create_reset.txt @@ -0,0 +1,16 @@ +

create_reset

+
Create reset for the design
+Usage: create_reset($reset_name, $active_level);
+$reset_name: Reset name, input port name or black box instance output pin
+$active_level: The level that the reset is active
+
+Examples:
+
+#1. Create reset on PIN_RESETN, active low
+create_reset("PIN_RESETN", 0);
+
+#2. Create reset on PIN_RESET, active high
+create_reset("PIN_RESET", 1);
+
+
+
\ No newline at end of file diff --git a/src_en/api.current_design.txt b/src_en/api.current_design.txt new file mode 100644 index 0000000000000000000000000000000000000000..68d600976ad66bd1b06bf02e744a116c8f04b8e7 --- /dev/null +++ b/src_en/api.current_design.txt @@ -0,0 +1,8 @@ +

current_design

+
Set the current top level module (LLM: current design module)
+Usage: current_design($module);
+$module: Set $module as the current top level module.
+         If the argument is missing, return the current setting
+         ".." set to parent module, "~" set to the most top level module 
+Note: It can be reset to the root top module by 'undo_eco'. It is alias command of 'set_top'
+
\ No newline at end of file diff --git a/src_en/api.current_instance.txt b/src_en/api.current_instance.txt new file mode 100644 index 0000000000000000000000000000000000000000..792a36e04a5e7247e18d551afef5645dbdf40b38 --- /dev/null +++ b/src_en/api.current_instance.txt @@ -0,0 +1,8 @@ +

current_instance

+
Set the current instance, alias of 'set_inst'
+Usage: current_instance($instance);
+$instance: Set $instance as the current instance.
+         If the argument is missing, return the current setting
+         ".." set to parent module, "~" set to the most top level module 
+Note: It can be reset to the root top module by 'undo_eco'. It has same effect of 'set_top' and 'current_design'
+
\ No newline at end of file diff --git a/src_en/api.del_gate.txt b/src_en/api.del_gate.txt new file mode 100644 index 0000000000000000000000000000000000000000..46614dbc704e68944a01b2b87dd7147371f0fcf6 --- /dev/null +++ b/src_en/api.del_gate.txt @@ -0,0 +1,5 @@ +

del_gate

+
ECO command. Delete gate
+Usage: del_gate($inst);
+$inst: The instance to be deleted.
+
\ No newline at end of file diff --git a/src_en/api.del_net.txt b/src_en/api.del_net.txt new file mode 100644 index 0000000000000000000000000000000000000000..9a112e45f288a6214a58aa26b7fb300e3b7cecf8 --- /dev/null +++ b/src_en/api.del_net.txt @@ -0,0 +1,5 @@ +

del_net

+
ECO command. Delete net
+Usage: del_net($net);
+$net: The net to be deleted.
+
\ No newline at end of file diff --git a/src_en/api.del_port.txt b/src_en/api.del_port.txt new file mode 100644 index 0000000000000000000000000000000000000000..8f5cfee06190230bae5e4622bc2a2736ff26cf1c --- /dev/null +++ b/src_en/api.del_port.txt @@ -0,0 +1,5 @@ +

del_port

+
ECO command. Delete port
+Usage: del_port($port);
+$port: The port to be deleted.
+
\ No newline at end of file diff --git a/src_en/api.dft_drc.txt b/src_en/api.dft_drc.txt new file mode 100644 index 0000000000000000000000000000000000000000..fa8b3673f3bc383217ceb7cb302b61adab15e27f --- /dev/null +++ b/src_en/api.dft_drc.txt @@ -0,0 +1,17 @@ +

dft_drc

+
DFT DRC checker
+Usage: my $error = dft_drc(@options);
+$error: DRC errors in the checker
+@options:
+    -single: One clock for each scan chain
+    -glitch: Check reset/set pin glitch
+
+Examples:
+
+#1. Run full DFT DRC
+dft_drc;
+#2. One clock for each scan chain in DRC
+dft_drc("-single");
+#3. Check reset/set pin glitch
+dft_drc("-glitch");
+
\ No newline at end of file diff --git a/src_en/api.elab_rtl.txt b/src_en/api.elab_rtl.txt new file mode 100644 index 0000000000000000000000000000000000000000..f4e3d16c568a8d9f22333e50009075fe3e169cc4 --- /dev/null +++ b/src_en/api.elab_rtl.txt @@ -0,0 +1,4 @@ +

elab_rtl

+
Elaborate on RTL design
+Usage: elab_rtl();
+
\ No newline at end of file diff --git a/src_en/api.elaborate.txt b/src_en/api.elaborate.txt new file mode 100644 index 0000000000000000000000000000000000000000..6127f2617aca96386661b4f57ca540abe0846736 --- /dev/null +++ b/src_en/api.elaborate.txt @@ -0,0 +1,4 @@ +

elaborate

+
Elaborate and compile RTL files
+Usage: elaborate();
+
\ No newline at end of file diff --git a/src_en/api.exist_inst.txt b/src_en/api.exist_inst.txt new file mode 100644 index 0000000000000000000000000000000000000000..d1f88728b9f5f413ea866c04224b9c276450a7d3 --- /dev/null +++ b/src_en/api.exist_inst.txt @@ -0,0 +1,6 @@ +

exist_inst

+
Check if an instance exists (LLM: instance existence)
+Usage:my $ret = exist_inst($inst);
+$inst: The instance for checking
+$ret: 1, the instance exists 0, the instance does not exist
+
\ No newline at end of file diff --git a/src_en/api.exist_wire.txt b/src_en/api.exist_wire.txt new file mode 100644 index 0000000000000000000000000000000000000000..9db9cbf887b9fc72091e42f851c32045e5a0c713 --- /dev/null +++ b/src_en/api.exist_wire.txt @@ -0,0 +1,6 @@ +

exist_wire

+
Check if a wire exists (LLM: wire existence)
+Usage:my $ret = exist_wire($wire);
+$wire: The wire name for checking
+$ret: 1: exists 0: not exist
+
\ No newline at end of file diff --git a/src_en/api.find_equal_nets.txt b/src_en/api.find_equal_nets.txt new file mode 100644 index 0000000000000000000000000000000000000000..0d25a373d82b125caf46b6137430eafb4431473a --- /dev/null +++ b/src_en/api.find_equal_nets.txt @@ -0,0 +1,11 @@ +

find_equal_nets

+
Find equivalent nets in IMP for the listed nets in REF, the results are printed out on the screen
+Usage: find_equal_nets(@ref_nets);
+options: ("help","full=i")
+   -help: Print this info
+
+Examples:
+
+#1. Find IMP equal nets for 'mbist_done', 'sync_start' in REF
+find_equal_nets('mbist_done', 'sync_start');
+
\ No newline at end of file diff --git a/src_en/api.fix_design.txt b/src_en/api.fix_design.txt new file mode 100644 index 0000000000000000000000000000000000000000..930f015c46bbb3d50eeff70f384b9e542eca6a89 --- /dev/null +++ b/src_en/api.fix_design.txt @@ -0,0 +1,31 @@ +

fix_design

+
ECO command to fix the design in automatic ECO (LLM: automatic eco)
+Usage: fix_design(@options);
+@options:
+    -help: Print this information
+    -opt_set optimization_set: Patch optimization set, 0: area/timing 1: cell count, default 0
+    -no_patch_opt: Disable patch optimization. Also see API set_no_patch_opt
+    -flatten: Enable flatten mode ECO. The default mode is hierarchical
+    -list_file the_list_file: The ECO point list file converted from RTL-to-RTL LEC result
+             The list file format:
+                inst u_def/u_sdef/state_reg_1_
+                pin  u_control/u_sreg/u_mem_128x24/A[0]
+                port PORT_READY_OUT
+    -iteration iteration_number: Fix design iteration by default 3 times.
+          The tool repeats the fix process until there is no non-equivalent points or iteration number reached
+Examples:
+
+#1. Fix design on module 'VIDEO_TOP' and its sub-modules
+set_top('VIDEO_TOP');
+set_ignore_output("TEST_SO*");
+set_pin_constant("TEST_EN", 0);
+fix_design;
+save_session("this_eco");
+my $error = LEC;
+
+#2. Do ECO in flatten mode
+fix_design("-flatten");
+
+#3. Do ECO on points listed in the file
+fix_design("-list_file", $list_file);
+
\ No newline at end of file diff --git a/src_en/api.fix_logic.txt b/src_en/api.fix_logic.txt new file mode 100644 index 0000000000000000000000000000000000000000..52c1eee12df01a2ae3a79ec20e5e5bb1d3bc8f7a --- /dev/null +++ b/src_en/api.fix_logic.txt @@ -0,0 +1,24 @@ +

fix_logic

+
ECO command. Fix listed points
+Usage: fix_logic(@pin_port_list,@options);
+@options:
+    -force: Force the tool to replace the logic cone of the points in @pin_port_list
+@pin_port_list: 
+    List of the pins or ports whose logic will be fixed by the reference logic in Reference Netlist
+     The format is "sic_cnt_reg_0/D","sic_cnt_reg_1/D",'\bbr_ccd_reg[0] /D',"out_port"
+     '\' should be kept if the instance has '\' as prefix. 
+     E.G. '\bbr_ccd_reg[0] ' instance has '\' and last space in the name.
+
+
+Examples:
+
+#1. Fix state_regs's D inputs
+fix_logic("state_reg_0/D", "state_reg_1/D");
+
+#2. Fix state_regs's D inputs and one output port
+fix_logic("state_reg_0/D", "state_reg_1/D", "out_port");
+
+#3. Add one new flop, input pins have the same connections as the Reference Netlist
+#  and the output is floating, -recover option sets to 0
+fix_logic('new_flop_reg/D', 'new_flop_reg/CK', 'new_flop_reg/RB');
+
\ No newline at end of file diff --git a/src_en/api.flatten_modules.txt b/src_en/api.flatten_modules.txt new file mode 100644 index 0000000000000000000000000000000000000000..d24f018b38a1b432e22004fae303af54a251a0ac --- /dev/null +++ b/src_en/api.flatten_modules.txt @@ -0,0 +1,10 @@ +

flatten_modules

+
Flatten hierarchical modules in reference netlist
+Usage: flatten_modules(@module_names);
+@module_names: List of modules to be flatten
+
+Examples:
+
+flatten_modules("retime_1", "sync_cell_0");
+
+
\ No newline at end of file diff --git a/src_en/api.get_cell_cofactors.txt b/src_en/api.get_cell_cofactors.txt new file mode 100644 index 0000000000000000000000000000000000000000..ea2d58205d500170ab541aee8e4da641c526e95d --- /dev/null +++ b/src_en/api.get_cell_cofactors.txt @@ -0,0 +1,18 @@ +

get_cell_cofactors

+
Get combinational cell pin Shannon expansion cofactors
+Usage: @cofactors = get_cell_cofactors($cell, $pin);
+$cell: Leaf cell name
+$pin: Input pin name
+@cofactors: Shannon cofactors for the pin of the cell
+            It has two items if the cell is combinational 
+            It is empty if the cell is sequential or black-box
+
+Examples:
+
+#1. NAND2X1 A pin 
+@ret = get_cell_cofactors("NAND2X1", "A"); # @ret = (1, B);
+#2. AOI222X1 A0 pin
+@ret = get_cell_cofactors("OAI222X4", "A0"); 
+returned @ret = ("!(A1*(B0*(C0+C1)+!B0*(B1*(C0+C1))))", "!(B0*(C0+C1)+!B0*(B1*(C0+C1)))");
+
+
\ No newline at end of file diff --git a/src_en/api.get_cell_info.txt b/src_en/api.get_cell_info.txt new file mode 100644 index 0000000000000000000000000000000000000000..be10cc53d096ee91937eb3c95d8f1115d53b5e1e --- /dev/null +++ b/src_en/api.get_cell_info.txt @@ -0,0 +1,39 @@ +

get_cell_info

+
Get information of a module or instance (LLM: information)
+Usage: $data = get_cell_info($module_or_inst, @options);
+$module_or_inst: The module or instance's name
+@options:
+    -help: Print this information
+    -conns: Get Connections of the item, only when it's instance
+    -type: Get the item's type information. It can be 'ff','cg,'latch','buf', 
+            run 'get_lib_cells -type_info' for all existing type in the current libraries
+            An array is returned if this option is present
+    -libname: Get the library name that the cell is in
+    -area: Get the area of the item
+    -size: Get the size of the item
+    -fun:  Get the function string of the item
+    -leakage: Get the leakage of the item
+    -ref:     Same as 'get_ref instance' if the item property is instance
+    -context: Get detail library information
+    -attribute attribute_name: Check if the cell has the attribute set. 0 or 1 is returned
+$data: Returned data, if '-attribute' option is present, $data is 0 or 1
+In option is '-conns' case,
+It is a hash having the following data structure
+my $module = $hash->{module};
+my $instance: $hash->{instance};
+foreach my $port (keys %{$hash->{connections}}){
+    my $net = $hash->{connections}{$port};
+}
+
+If no option is present, it return the item's property:
+leaf_instance leaf_module hierarchical_instance hierarchical_module 
+
+Examples:
+
+#1. Get area of one leaf cell
+my $area = get_cell_info("AND2X2", "-area");
+
+#2. Get an attribute of one leaf cell
+my $is_iso = get_cell_info("ISOX2", "-attribute", "is_isolation_cell");
+
+
\ No newline at end of file diff --git a/src_en/api.get_cells.txt b/src_en/api.get_cells.txt new file mode 100644 index 0000000000000000000000000000000000000000..023785e3b4d68cf1a4fd14ed8ccdf1aa09654d09 --- /dev/null +++ b/src_en/api.get_cells.txt @@ -0,0 +1,47 @@ +

get_cells

+
Get all cells in the current module or sub-modules (LLM: find/get instance)
+Usage: my @cells = get_cells($pattern, @options);
+$pattern: The pattern matching instance name, '*', 'U*', 'U123' or '/UI_.*_./' 
+          It can have path, 'u_clk/*', 'u_abc/u_def/*'
+@options:
+    -help: Print this information
+    -hier: Or -h, do the command hierarchically
+    -ref ref_pattern: Get cells that has reference matching ref_pattern, E.G. -ref OAI*
+    -type type_pattern: Type_pattern can be 'ff','latch','itiming','cg','not','rom','ram' ... 
+                        run 'get_lib_cells -type_info' for all existing type in the current libraries
+    -type_match type_pattern: Get cells that have one of the types matches the type_pattern
+    -leaf: Only leaf cells
+    -new: Only new created ECO instances
+    -verbose: To print out reference with instance
+    -dotpath: Path delimit is '.' instead of '/'
+    -nobackslash: Remove backslash 
+    -nonscan: Flops/sync-cells not in scan chain including those scan pins tied off
+@cells: Returned array with all instances matched
+
+Examples:
+
+#1. Get all instances in the current module 
+my @cells = get_cells('*');
+
+#2. Get all instances in the current module 
+my @cells = get_cells();
+
+#3. Get all instances matching 'U234*' in the current module
+my @cells = get_cells('U234*');
+
+#4. Regular expression. Get all instances starting with U and followed by 
+#    two characters, like U10, U99
+my @cells = get_cells('/U../');   
+
+#5. Get all instances matching *reg_*_ hierarchically
+my @cells = get_cells('*reg_*_', '-hier');
+
+#6. Get all instances hierarchically and having reference matching DFF*
+my @cells = get_cells('*', '-hier', '-ref', 'DFF*');
+
+#7. Get all instances in 'u_kb'
+my @cells = get_cells('u_kb/*');
+
+#8. Get all flops, sync-cells not in scan chain 
+my @cells = get_cells('-hier', '-nonscan');
+
\ No newline at end of file diff --git a/src_en/api.get_conns.txt b/src_en/api.get_conns.txt new file mode 100644 index 0000000000000000000000000000000000000000..915514715bedeb702ea8a52d2dc226622589b6ed --- /dev/null +++ b/src_en/api.get_conns.txt @@ -0,0 +1,40 @@ +

get_conns

+
Get connections of net or pin in the top level module, return the leafs and the hierarchical connections (LLM: conns)
+Usage: @result = get_conns($net_or_pin, @options);
+$net_or_pin: The net name or pin name that needs to get connections.
+@options:
+   -driver: Return driver only
+   -load: Return load only
+   -count: Return connections count
+@result: a two dimension array
+          instance, port_name, pin_or_port, load_or_driver, is_it_a_leaf, 
+@result = ([instance_0, pin_0, 'pin', 'load', 1],
+           ...
+          )
+
+Examples:
+
+#1. Net 'n599' has three connections, instance 'U198' is the driver
+get_conns("n599");
+gte_344 A[14] pin load 0
+U198 Y pin driver 1
+U94 AN pin load 1
+
+#2. Net 'qcifhbeat' has three connections, it is output port of the current top level module
+get_conns("qcifhbeat")
+ qcifhbeat port load
+U80 A pin load 1
+qcifhbeat_reg Q pin driver 1
+
+#3. The argument in inst/pin format
+get_conns("U187/A")
+U294 A1 pin load 1
+U187 A pin load 1
+U80 Y pin driver 1
+
+#4. Return connections count
+get_conns("U187/A", "-count");
+3
+
+
+
\ No newline at end of file diff --git a/src_en/api.get_coord.txt b/src_en/api.get_coord.txt new file mode 100644 index 0000000000000000000000000000000000000000..411c9aecb1bc619866357bd846962cf7847d368f --- /dev/null +++ b/src_en/api.get_coord.txt @@ -0,0 +1,10 @@ +

get_coord

+
Get an instance's coordination (LLM: coordination)
+Usage: my ($x, $y) = get_coord($instance);
+$instance: Instance name
+
+Examples:
+
+my ($x, $y) = get_coord("xbar/U1234");
+# $x=100, $y=200 in um
+
\ No newline at end of file diff --git a/src_en/api.get_definition.txt b/src_en/api.get_definition.txt new file mode 100644 index 0000000000000000000000000000000000000000..804eab310afd1546c02d4988ba61ac9436ca091e --- /dev/null +++ b/src_en/api.get_definition.txt @@ -0,0 +1,11 @@ +

get_definition

+
Get instantiation of instance
+Usage: my $line = get_definition($inst);
+$inst: Instance name.
+$line: The instantiating line
+
+Examples:
+
+get_definition('U78');
+Returns "AND2X1 U78(.A(n1), .B(n2), .Z(n3));"
+
\ No newline at end of file diff --git a/src_en/api.get_driver.txt b/src_en/api.get_driver.txt new file mode 100644 index 0000000000000000000000000000000000000000..4f373fc6e723c8c594d4977ad5c72f81310aaded --- /dev/null +++ b/src_en/api.get_driver.txt @@ -0,0 +1,35 @@ +

get_driver

+
Get the driver of a net or pin (LLM: driver)
+Usage: @driver = get_driver($point, @options);
+$point: net name or pin name, 'n12345' or 'U12345/A1'
+@options:
+   -pin: Return in "inst/pin" format, E.G. "state_reg/Q"
+         Return an array if '-pin' is not present
+   -nonbuf: Trace the drivers until none buffer 
+@driver: The driver in array format, if '-pin' is not present.
+         If the point is floating, @driver is empty, 
+         $driver[0]: Driver instance name. It is empty if the driver is port
+         $driver[1]: Driver pin or port name. If the driver is a port, it is the port name
+         $driver[2]: Driver type. It is string "pin" or "port" depending on the driver is port or leaf cell
+         $driver[3]: Driver phase. It is valid when -nonbuf is present, 
+                     indicating if the driver path is inverted
+                     0: not inverted 1: inverted              
+
+Note:
+1. If '-pin' is present, return a scalar, $driver = get_driver("n12345", "-pin");
+2. Use 'get_drivers' if there are multiple drivers, the return data has different structure
+
+Examples:
+
+#1. Get driver of a net
+@driver = get_driver("net12345");
+@driver has content of ("U1247", "Y", "pin");
+
+#2. port_abc is input port
+@driver = get_driver("port_abc"); 
+@driver has content of ("", "port_abc", "port");
+           
+#3. Return in instance/pin format
+$driver = get_driver("net12345", "-pin");
+$driver has content of "U1247/Y"
+
\ No newline at end of file diff --git a/src_en/api.get_drivers.txt b/src_en/api.get_drivers.txt new file mode 100644 index 0000000000000000000000000000000000000000..9595fcd86b7fa0c6a2ae4fa2982c22bc8b9bbf47 --- /dev/null +++ b/src_en/api.get_drivers.txt @@ -0,0 +1,37 @@ +

get_drivers

+
Get the drivers of a net or pin (LLM: drivers)
+Usage: @drivers = get_drivers($point, @options);
+$point: net name or pin name, 'n12345' or 'U12345/A1'
+@options:
+   -nonbuf: Trace the drivers until none buffer 
+@drivers: An array of the drivers, if the point is floating, @drivers is empty, 
+         if the point has multi-drivers, @drivers has more than one items.
+         For each item in @drivers
+         Index 0: instance, it is empty if the driver is port
+         Index 1: pin or port, if the driver is port, return port
+         Index 2: string "pin" or "port" depending on the driver is port or leaf cell
+         Index 3: indicating drive path inverted or not
+         If 'nonbuf' is present, the last item in @drivers is the non-buffer driver
+         So '$nonbuf = pop @drivers' can get the non-buffer driver 
+Note:
+Use 'get_driver' instead if the net has only one driver and 'nonbuf' option is not used
+
+Examples:
+
+#1. Get drivers of a net
+@drivers = get_drivers("net12345");
+@drivers has content of (["U1247", "Y", "pin"]);
+
+#2. 'port_abc' is input port
+@drivers = get_drivers("port_abc"); 
+@drivers has content of (["", "port_abc", "port"]);
+   
+#3. Buffers in the path
+ @drivers = get_drivers("state_reg/CK", "-nonbuf");
+ @drivers has content of
+  (
+    ["buf_inst0", "Y", "pin"],
+    ["inv_inst1", "Y", "pin"],
+    ["and_inst2", "Y", "pin"]
+  )
+
\ No newline at end of file diff --git a/src_en/api.get_instance.txt b/src_en/api.get_instance.txt new file mode 100644 index 0000000000000000000000000000000000000000..c0422eb07889ddf8d265072f246c12960b82b32b --- /dev/null +++ b/src_en/api.get_instance.txt @@ -0,0 +1,16 @@ +

get_instance

+
Get instance in the top level module
+Usage: my $instance = get_instance($pattern, @options);
+$pattern: Match pattern, can have wildcard "*", if it is empty, it is treated as "*"
+@options:
+    -module: module name to have its instance name found
+$instance: Return the first instance matching
+
+Examples:
+
+#1. The fist hierarchical instance matching 'ui_*'.
+$instance = get_instance("ui_*");  
+
+#2. Find the instance name of module 'enet_control' 
+$instance = get_instance("-module", "enet_control");   
+
\ No newline at end of file diff --git a/src_en/api.get_instances.txt b/src_en/api.get_instances.txt new file mode 100644 index 0000000000000000000000000000000000000000..c1386821774da384e01b76613888e1262ce24f0c --- /dev/null +++ b/src_en/api.get_instances.txt @@ -0,0 +1,12 @@ +

get_instances

+
Get all hierarchical instances in the top level module (LLM: hierarchical instances)
+Usage: my @instances = get_instances($pattern);
+$pattern: Match pattern, can have wildcard "*", if it is empty, it is treated as "*"
+
+@instances: Array of the hierarchical instances
+
+Examples:
+
+@instances = get_instances("UI_*"); # Any hierarchical instances with UI_ as prefix.
+@instances = get_instances;         # All hierarchical instances. 
+
\ No newline at end of file diff --git a/src_en/api.get_leaf_pin_dir.txt b/src_en/api.get_leaf_pin_dir.txt new file mode 100644 index 0000000000000000000000000000000000000000..d884dea9ba126f35392c39dbf0592c8391a017b4 --- /dev/null +++ b/src_en/api.get_leaf_pin_dir.txt @@ -0,0 +1,12 @@ +

get_leaf_pin_dir

+
Get leaf cell pin's direction input/output/inout
+Usage: my $dir = get_leaf_pin_dir("$leaf_name/$pin");
+$pin: pin name, E.G.  A or B or Y
+$leaf: Leaf cell name, E.G. NAND2X2
+$dir: return direction, input/output/inout
+
+Examples:
+
+my $dir = get_leaf_pin_dir("NAND2X2/A");
+
+
\ No newline at end of file diff --git a/src_en/api.get_leafs_count.txt b/src_en/api.get_leafs_count.txt new file mode 100644 index 0000000000000000000000000000000000000000..2519723549457e133fcdc60a2db23b56fc1db28a --- /dev/null +++ b/src_en/api.get_leafs_count.txt @@ -0,0 +1,16 @@ +

get_leafs_count

+
Get all leaf cells name and count in the top level module, return an array 
+Usage: @leaf_count = get_leafs_count;
+@leaf_count: Array of leaf name and count
+ ( [leaf0, cnt0], [leaf1, cnt1], ...)
+
+Examples:
+
+@leaf_count = get_leafs_count;
+foreach my $leaf_point (@leaf_count){
+   my $leaf_name = $leaf_point->[0];
+   my $count = $leaf_point->[1];
+   print "LEAF: $leaf_name has $count cells
+";
+}
+
\ No newline at end of file diff --git a/src_en/api.get_lib_cells.txt b/src_en/api.get_lib_cells.txt new file mode 100644 index 0000000000000000000000000000000000000000..d0717443a708dd6ad358f781dd06b4d881710644 --- /dev/null +++ b/src_en/api.get_lib_cells.txt @@ -0,0 +1,13 @@ +

get_lib_cells

+
Get leaf gates in libraries 
+Usage: my @cells = get_lib_cells($pattern, @options);
+@options:
+     -help:            This information
+     -char:            All cells characterization
+     -type leaf_type:  Get leaf gates matching type. 
+                       Leaf_type can be 'ff', 'latch', 'cg', 'buf', 'not', 'and' ...
+     -type_info:       List all types in the current loaded libraries
+     -verbose:         If $pattern matches only one lib cell, print the cell lib information
+$pattern: Library cell name pattern, can have '*'.
+@cells: Return array with name matching
+
\ No newline at end of file diff --git a/src_en/api.get_loads.txt b/src_en/api.get_loads.txt new file mode 100644 index 0000000000000000000000000000000000000000..4503a241fa13a82775a1eb2ac2fa335ddd5eac76 --- /dev/null +++ b/src_en/api.get_loads.txt @@ -0,0 +1,19 @@ +

get_loads

+
Get loads of net in the top level module, return the leafs connections (LLM: loads)
+Usage: @result = get_loads($net_or_pin, @options);
+$net_or_pin: The net name or pin name that needs to get fanouts.
+@options:
+   -nonbuf: Trace the loads until none buffer 
+   -bypbuf: Don't include buffer/inverter in the return array
+   -hier: Loads cross hierarchies
+   -fanend: Fanout endpoints, flops or ports
+@result: A two dimension array. Each item has format of 'instance' and 'pin_name' if
+         the load is leaf cell. Or 'port_name' and 'GOF_PIN_IN' 
+@result = ([instance_0, pin_0],
+           [instance_1, pin_1],
+           [port_name, GOF_PIN_IN],
+           ...
+          )
+
+
+
\ No newline at end of file diff --git a/src_en/api.get_loads_phase.txt b/src_en/api.get_loads_phase.txt new file mode 100644 index 0000000000000000000000000000000000000000..824a126212e79f97420624eb985ef170e7cb3d43 --- /dev/null +++ b/src_en/api.get_loads_phase.txt @@ -0,0 +1,16 @@ +

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)
+Usage: @result = get_loads_phase($net_or_pin, @options);
+$net_or_pin: The net name or pin name that needs to get fanouts.
+@options:
+   -help: This information
+@result: A two dimension array. Each item has format of 'instance', 'pin_name' and 'phase', if
+         the load is leaf cell. Or 'port_name', 'GOF_PIN_IN' and 'phase' 
+@result = ([instance_0, leaf_0, pin_0, 0],
+           [instance_1, leaf_0, pin_1, 1],
+           [port_name,  GOF_CELL_OUTPORT,GOF_PIN_IN, 1],
+           ...
+          )
+
+
+
\ No newline at end of file diff --git a/src_en/api.get_logic_cone.txt b/src_en/api.get_logic_cone.txt new file mode 100644 index 0000000000000000000000000000000000000000..96e5e42fc71457af7f7e83d83727c28738adc8a0 --- /dev/null +++ b/src_en/api.get_logic_cone.txt @@ -0,0 +1,14 @@ +

get_logic_cone

+
Get logic cone of nets or pins
+Usage: $result = get_logic_cone(@InstancePinList, @options);
+@InstancePinList: Instance/pin and net list. 
+$result: 1, the command fails. 0, the command completed successfully
+@options:
+    -o file_name: Write output to the file. Default logic_cone.v
+
+Examples:
+
+my @InstPin = ('abc_reg/D', 'n12345');
+my $ret = get_logic_cone(@InstPin, '-o', 'MyLogicCone.v');
+# The logic cone is written out to verilog file 'MyLogicCone.v'
+
\ No newline at end of file diff --git a/src_en/api.get_modules.txt b/src_en/api.get_modules.txt new file mode 100644 index 0000000000000000000000000000000000000000..fb945e0c26d21d87d8192512485fb0f385962fdc --- /dev/null +++ b/src_en/api.get_modules.txt @@ -0,0 +1,15 @@ +

get_modules

+
Get modules under current module (LLM: submodules)
+Usage: @modules = get_modules($pattern, @options);
+$pattern: Match pattern, can have wildcard "*", if it is empty, it is treated as "*"
+@options:
+    -help: Print this information
+    -hier: Get all modules hierarchically
+@modules: Modules list, ("module0", "module1", ...)
+
+Examples:
+
+@modules = get_modules("*TM*");  # Any hierarchical modules with TM in the name.
+@modules = get_modules;          # All hierarchical modules.
+@modules = get_modules("-hier"); # All hierarchical modules and sub-modules under current module.
+
\ No newline at end of file diff --git a/src_en/api.get_net_of.txt b/src_en/api.get_net_of.txt new file mode 100644 index 0000000000000000000000000000000000000000..1c7b0637ce9c8a22f6758bb5e84676a079e0bfa1 --- /dev/null +++ b/src_en/api.get_net_of.txt @@ -0,0 +1,6 @@ +

get_net_of

+
Get net name connecting to a pin (LLM: net of pin)
+Usage: my $net = get_net_of($pin);
+$pin: The pin of the instance, 'U1234.A1' or 'U1234/A1' 
+$net: The net name connecting to the pin
+
\ No newline at end of file diff --git a/src_en/api.get_nets.txt b/src_en/api.get_nets.txt new file mode 100644 index 0000000000000000000000000000000000000000..7e6ee94189008ad740f2a592693237f73ad701a0 --- /dev/null +++ b/src_en/api.get_nets.txt @@ -0,0 +1,21 @@ +

get_nets

+
Get nets that matching pattern (LLM: matched nets)
+Usage: @nets = get_nets($pattern, @options);
+$pattern: The net naming pattern, "*" or empty for all nets
+@options:;
+   -const0: Get all constant zero nets
+   -const1: Get all constant one nets
+@nets: returned net array.
+
+Examples:
+ 
+1#. Get all nets.
+@nets = get_nets("*"); 
+
+2#. All nets with 'dbuffer' as prefix 
+@nets = get_nets("dbuffer_*"); 
+
+3#. Get constant nets
+@nets = get_nets("-const0"); 
+
+
\ No newline at end of file diff --git a/src_en/api.get_path.txt b/src_en/api.get_path.txt new file mode 100644 index 0000000000000000000000000000000000000000..59d1657178c6805fc6302d036db4b5a0c6dd6ad7 --- /dev/null +++ b/src_en/api.get_path.txt @@ -0,0 +1,5 @@ +

get_path

+
Get current hierarchical path (LLM: path)
+Usage: $path = get_path();
+$path: The current path
+
\ No newline at end of file diff --git a/src_en/api.get_pins.txt b/src_en/api.get_pins.txt new file mode 100644 index 0000000000000000000000000000000000000000..8af45919c6c500493ab8e6d4c5dc37b25741615d --- /dev/null +++ b/src_en/api.get_pins.txt @@ -0,0 +1,30 @@ +

get_pins

+
Get pins of instance or module (LLM: pins)
+Usage: @pins = get_pins($name, @options);
+$name: The instance or module name, it can be hierarchical or leaf
+@options:
+    -input: Get input pins
+    -output: Get output pins
+    -inout: Get inout pins
+    -clock: Get clock pin, only valid for sequential cell, flop latch and gated-clock-cell
+    -reset: Get reset pin, return "" if it doesn't exist
+    -set:   Get set pin, return "" if it doesn't exist
+    -data: Get data pins
+    -attribute attribute: Get pins with the attribute
+    -nextstate_type type: Get pins matching the type 
+            which can be 'data', 'load', 'scan_in', 'scan_enable'
+            This option is only valid for sequential cell, flop, latch and gated-clock-cell
+If no option is present, get all pins
+@pins: All pins returned, in 'instance/pin' format
+
+Examples:
+
+#1. Get input pins of a hierarchical instance
+my @pins = get_pins("-input", "u_abc/U123");
+Result @pins = ("u_abc/U123/A", "u_abc/U123/B")
+
+#2. Get pins of a leaf cell
+@pins = get_pins("AND2X2");
+Result @pins = ("A","B","Y") 
+
+
\ No newline at end of file diff --git a/src_en/api.get_ports.txt b/src_en/api.get_ports.txt new file mode 100644 index 0000000000000000000000000000000000000000..bcb02939839b10de94552e2d40de8897dc9f17df --- /dev/null +++ b/src_en/api.get_ports.txt @@ -0,0 +1,25 @@ +

get_ports

+
Get all ports in the current top level module (LLM: ports)
+Usage: @matching_ports = get_ports($pattern, @options);
+$pattern: Match pattern, can have wildcard "*". If it is empty, it is treated as "*"
+@options:
+          -input: Get input ports only
+          -output: Get output ports only
+          -inout: Get inout ports only
+          -bus: Get ports in bus format instead of bit blast. 
+                The API returns an array point if this option present
+                The item in the array has format of [port, IsBus, MaxIndex, MinIndex]
+                if IsBus == 1, MaxIndex is the Max Index of the bus, E.G, 7 if the bus is port_a[7:0]
+                if ISBus==0, MaxIndex and MinIndex are not defined
+  
+If no option is present, get all ports
+
+@matching_ports: Return ports matching the pattern and the option specified in 
+                  the current top level module
+
+Examples:
+
+@ports = get_ports("-input", "dsp2mc_*");  # Get input ports with "dsp2mc_" as prefix
+@ports = get_ports;                       # Get all ports
+
+
\ No newline at end of file diff --git a/src_en/api.get_ref.txt b/src_en/api.get_ref.txt new file mode 100644 index 0000000000000000000000000000000000000000..6de272c158a3dd8addbfcd3449c96ff89f20f781 --- /dev/null +++ b/src_en/api.get_ref.txt @@ -0,0 +1,6 @@ +

get_ref

+
Get the reference of the instance, return leaf cell name or hierarchical module name (LLM: design name)
+Usage: $reference = get_ref($instance);
+$instance: Instance name, "U123"
+$reference: Return reference name, "NAND2X4" 
+
\ No newline at end of file diff --git a/src_en/api.get_resolved.txt b/src_en/api.get_resolved.txt new file mode 100644 index 0000000000000000000000000000000000000000..039ee64fc2f118d6416831e9c727edb84f7fb608 --- /dev/null +++ b/src_en/api.get_resolved.txt @@ -0,0 +1,13 @@ +

get_resolved

+
Resolve the relative path to module and leaf item
+Usage: ($module, $leaf) = get_resolved($relative_path);
+$relative_path: Relative path, like "u_abc/u_def/U456"
+$module: Resolved module name, like "def"
+$leaf: Resolved leaf name, like U456
+
+Examples:
+
+my ($module, $leaf) = get_resolved("u_abc/u_def/U456");
+$module has value "def"
+$leaf has value "U456"
+
\ No newline at end of file diff --git a/src_en/api.get_roots.txt b/src_en/api.get_roots.txt new file mode 100644 index 0000000000000000000000000000000000000000..66875c0b2b9c03dd4b916f74a086846bdc5c6cc9 --- /dev/null +++ b/src_en/api.get_roots.txt @@ -0,0 +1,5 @@ +

get_roots

+
Get root designs name
+Usage: my @rootdesigns = get_roots;
+@rootdesign: returned root designs name
+
\ No newline at end of file diff --git a/src_en/api.get_scan_flop.txt b/src_en/api.get_scan_flop.txt new file mode 100644 index 0000000000000000000000000000000000000000..10127a2dee627116cc89e22631f5e74511fbbf7d --- /dev/null +++ b/src_en/api.get_scan_flop.txt @@ -0,0 +1,9 @@ +

get_scan_flop

+
Get scan flop for the non scan flop (LLM: scan flop)
+Usage: my $scanflop = get_scan_flop($nonscanflop);
+
+Examples:
+
+# Get a corresponding scan flop for non scan flop DFFHQX1
+my $scanflop = get_scan_flop("DFFHQX1");
+
\ No newline at end of file diff --git a/src_en/api.get_spare_cells.txt b/src_en/api.get_spare_cells.txt new file mode 100644 index 0000000000000000000000000000000000000000..5f79c04c186cb80512f94241423e38ed7b10a3e9 --- /dev/null +++ b/src_en/api.get_spare_cells.txt @@ -0,0 +1,51 @@ +

get_spare_cells

+
ECO command. Get spare cells (LLM: metal only)
+Usage: get_spare_cells($pattern,@options);
+$pattern: Spare leaf cell instance pattern, E.G. 'spare_inst*/spare_gate*'
+          Extract spare cells from the database with the pattern
+          The first half before '/' is hierarchical instance pattern, it is '*' for top level
+          The second half after '/' is leaf instance pattern
+          It is ignored if -file option is present
+@options:
+    -o file_name: Write updated spare cell list to the file, 
+                  by default, it has name 'spare_cells_scriptname.list'
+    -file spare_list_file: Load in spare cell list file instead of extracting from the database
+    -gate_array gate_array_naming: Gate Array naming style, like 'G*', most standard libraries have Gate Array cells naming starting with 'G'
+                  This option enables Metal Only Gate Array Spare Cells ECO flow
+    -gate_array_filler gate_array_filler_naming: Gate Array Filler naming style, like 'GFILL*',
+                  or 'GFILL*|GDCAP*' to include both GA Filler and GA DCAP
+    -ignore_load: By default, if the spare cell has fanout, it won't be added into the list. When this option is set, 
+                  any matched spare cell is added into the list 
+    -exclude_cell_type cell_type: Exclude cell type matching cell_type, cell_type supports wild card like DFFRS*
+    -addfreed: Only use deleted gates as spare resource
+
+Examples:
+
+#1. Extract spare cells from the database, matching instances like "SPARE_u0"
+get_spare_cells("*/SPARE_*");   
+
+#2. Matching hierarchical instance "someSpare_*" and leaf instance "spr_gate*"
+get_spare_cells("someSpare_*/spr_gate*"); 
+
+#3. Extract spare cells from file "spare_cells_list.txt"
+get_spare_cells("-file", "spare_cells_list.txt"); 
+
+#4. Enable Gate Array Spare Cells Metal Only ECO Flow, map_spare_cells will map to Gate Array Cells only
+get_spare_cells("-gate_array", "G*", "-gate_array_filler", "GFILL*|GDCAP*");
+
+#5. Matching hierarchical instance "someSpare_*" and leaf instance "spr_gate*", but excluding DFFRS*
+get_spare_cells("someSpare_*/spr_gate*", "-exclude_cell_type", "DFFRS*"); 
+
+#6. Only used freed gated in metal only ECO
+del_gate("u_control/the_status_reg"); # Delete the unused flop and its logic cone will be deleted
+fix_design;
+get_spare_cells("-addfreed");
+map_spare_cells;
+
+Note:
+
+The API has to run on top level, 
+set_top('most_top_module')
+get_spare_cells("someSpare_*/spr_gate*"); 
+
+
\ No newline at end of file diff --git a/src_en/api.get_spare_in_use.txt b/src_en/api.get_spare_in_use.txt new file mode 100644 index 0000000000000000000000000000000000000000..039a3440cbb43c9ff57727375681650878201013 --- /dev/null +++ b/src_en/api.get_spare_in_use.txt @@ -0,0 +1,5 @@ +

get_spare_in_use

+
Get spare cells used in the ECO 
+Usage: set_spare_in_use();
+
+
\ No newline at end of file diff --git a/src_en/api.gexit.txt b/src_en/api.gexit.txt new file mode 100644 index 0000000000000000000000000000000000000000..56841cde35da77fe3ce9bcfe5bf1818335cb7ea8 --- /dev/null +++ b/src_en/api.gexit.txt @@ -0,0 +1,4 @@ +

gexit

+
Exit the command interactive mode
+Usage: gexit;
+ 
\ No newline at end of file diff --git a/src_en/api.gof_version.txt b/src_en/api.gof_version.txt new file mode 100644 index 0000000000000000000000000000000000000000..5f8f77f2fc81448e3ca0b8ff02cc3ef054dc6a70 --- /dev/null +++ b/src_en/api.gof_version.txt @@ -0,0 +1,4 @@ +

gof_version

+
Print out GOF version
+Usage: gof_version;
+
\ No newline at end of file diff --git a/src_en/api.gprint.txt b/src_en/api.gprint.txt new file mode 100644 index 0000000000000000000000000000000000000000..7fb8abbadce2abd58ba2cb2785867d70a41a9ce2 --- /dev/null +++ b/src_en/api.gprint.txt @@ -0,0 +1,5 @@ +

gprint

+
Print the message and save to log file (LLM: print)
+Usage: gprint($info);
+$info: The message to be printed.
+
\ No newline at end of file diff --git a/src_en/api.is_leaf.txt b/src_en/api.is_leaf.txt new file mode 100644 index 0000000000000000000000000000000000000000..756affdc010f9ef1f41f77a92c53111b24e4ca41 --- /dev/null +++ b/src_en/api.is_leaf.txt @@ -0,0 +1,7 @@ +

is_leaf

+
Check if a module or instance is leaf cell (LLM: leaf)
+Usage: my $leaf = is_leaf($name);
+$name: The module or instance under check
+$leaf: 0, it's a hierarchical module, (Or the module is not defined)
+       1, it's leaf cell. Like, NAND4X8
+
\ No newline at end of file diff --git a/src_en/api.is_pin_masked.txt b/src_en/api.is_pin_masked.txt new file mode 100644 index 0000000000000000000000000000000000000000..3d192f17f68fad620346f14129d6cd70a0b82045 --- /dev/null +++ b/src_en/api.is_pin_masked.txt @@ -0,0 +1,13 @@ +

is_pin_masked

+
Check if an instance pin has been masked in the current constraint (LLM: masked)
+Usage: my $is_masked = is_pin_masked($inst_pin);
+$inst_pin: Instance pin, for instance u_control/u_mbist/U1/A
+$is_masked: 0, it is not masked
+            1, it is masked
+
+Examples:
+
+#1. Check if a DFT MUX has B pin masked in DFT mode 'MX2X4 uMUXD9(.A(ana_in),.B(test_in),.S(atpg_mode),.Z(mux_out9));
+set_pin_constant('atpg_mode', 1);
+my $is_masked = is_pin_masked("uMUXD9/A"); # It returns 1
+
\ No newline at end of file diff --git a/src_en/api.is_scan_flop.txt b/src_en/api.is_scan_flop.txt new file mode 100644 index 0000000000000000000000000000000000000000..9632e9bc1aeabc2eb46835a6a1e4e3093ee84c2d --- /dev/null +++ b/src_en/api.is_scan_flop.txt @@ -0,0 +1,7 @@ +

is_scan_flop

+
Check if an instance is scan flop (LLM: scan flop)
+Usage: my $isscan = is_scan_flop($name);
+$name: The cell name or instance name
+$isscan: 0, it's not a scan flop
+         1, it's a scan flop
+
\ No newline at end of file diff --git a/src_en/api.is_seq.txt b/src_en/api.is_seq.txt new file mode 100644 index 0000000000000000000000000000000000000000..c31d552b1b52f82a6fc43571f07320c906e5c2a8 --- /dev/null +++ b/src_en/api.is_seq.txt @@ -0,0 +1,15 @@ +

is_seq

+
Check if an instance or a leaf cell is a specific sequential cell (LLM: sequential)
+Usage: my $isseq = is_seq($name, @options);
+$name: The instance under check
+@options:
+    -help:  This information
+    -ff:    Check if it's a flipflop
+    -bank:  Check if it's a multibit flop
+    -latch: Check if it's a latch
+    -cg:    Check if it's a gated clock
+    -rom:   Check if it's a rom
+    -ram:   Check if it's a ram
+$isseq: 0, it is not the specific sequential cell
+        1, it is the specific sequential cell
+
\ No newline at end of file diff --git a/src_en/api.list_wireload.txt b/src_en/api.list_wireload.txt new file mode 100644 index 0000000000000000000000000000000000000000..6c752d9a1599aac9134248d6b68ade4dde6a2a2b --- /dev/null +++ b/src_en/api.list_wireload.txt @@ -0,0 +1,4 @@ +

list_wireload

+
Timing command. List all wireload defined in the liberty files
+Usage: list_wireload;
+
\ No newline at end of file diff --git a/src_en/api.map_spare_cells.txt b/src_en/api.map_spare_cells.txt new file mode 100644 index 0000000000000000000000000000000000000000..b39a0dd37f06f5b326e613014520afc92e123214 --- /dev/null +++ b/src_en/api.map_spare_cells.txt @@ -0,0 +1,43 @@ +

map_spare_cells

+
ECO command. Map all new created cells to spare cells (LLM: metal only)
+Usage: $status = map_spare_cells;
+$status: 0: the mapping is successful
+         non zero: the mapping fails 
+@options:
+    -help: Print this information.
+    -syn Synthesis_command_line: 
+            By default, the built-in Synthesis Engine is used.
+            External Synthesis tool can be picked by this option
+            RTL Compiler and Design Compiler are supported. 
+            E.G. "map_spare_cells('-syn', 'rc')" to pick RTL compiler
+                 "map_spare_cells('-syn', 'dc_shell')" to pick Design Compiler 
+            User can specify more values in the synthesis command
+            E.G. '-rc', "rc -E -use_lic RTL_Compiler_Physical"
+    -lib_header file_name: This option is Valid when '-syn' option is present. To insert the content of 
+                           file 'file_name' to the header of synthesis tcl script. So that '.lib' file to
+                           '.db' conversion can be avoided in Design Compiler case. 
+                           For example, in Design Compiler case, the file content should have
+                             set_search_path [list /project/lib/synopsys_db]
+                             set_target_library [list art40_hvt art40_svt]
+                             set link_library [list art40_hvt art40_svt]
+    -nofreed: Don't add freed gates for synthesis. 
+    -nobuf: Don't insert buffers/repeaters in long wires. 
+    -notielow: Don't tie low of the input pins of output floating gates, delete them instead
+    -pause: Pause the tool before apply the patch
+    -exact: Map to the exact name of spare cell, by default the tool picks up a spare cell with 
+            the same function, for example, pick up 'INVX2' for 'INVX4'
+    -gcmp: Use GOF compiler
+    -nospare_mapping: Don't map to physical spare gates even DEF file is loaded
+Note: A DEF file is needed for mapping to exact spare instances.
+
+Examples:
+
+#1. Map to spare cells and use the built-in Synthesis Engine
+my $status = map_spare_cells;
+
+#2. Use extra 'rc' option
+map_spare_cells('-syn', "rc -E -use_lic RTL_Compiler_Physical")
+
+#3. Don't add freed cells for synthesis
+map_spare_cells('-syn', "rc -E -use_lic RTL_Compiler_Physical", "-nofreed")
+
\ No newline at end of file diff --git a/src_en/api.new_gate.txt b/src_en/api.new_gate.txt new file mode 100644 index 0000000000000000000000000000000000000000..782d64928b5a21c0ca391f837726dd8cd3a81358 --- /dev/null +++ b/src_en/api.new_gate.txt @@ -0,0 +1,9 @@ +

new_gate

+
ECO command. Create new gate
+Usage: @return = new_gate($new_net, $reference, $new_instance, $connections);
+Note: if the command is called in the context of return a scalar, the new created instance name
+        returns. 
+      The usage is the same as new_net, except $reference has to be defined, 
+        and return back instance if scalar present.
+      Run "help new_net" for detail in the shell "GOF >"
+
\ No newline at end of file diff --git a/src_en/api.new_net.txt b/src_en/api.new_net.txt new file mode 100644 index 0000000000000000000000000000000000000000..08ae43f4e103c230eeab9ad644de0a470d3faf02 --- /dev/null +++ b/src_en/api.new_net.txt @@ -0,0 +1,42 @@ +

new_net

+
ECO command. Create a new net
+Usage: @return = new_net($new_net, $reference, $new_instance, $connections);
+$new_net: The new net to be created, if not defined, the tool assigns one automatically
+$reference: The leaf gate name to drive the net.
+$new_instance: The instance name of the new cell, or leave it empty to get automatically assigned.
+$connections: The new gate input pins connections 
+   Supported formats, 1. Detail format:  ".A(net0),.B(net1),.C(net2)"
+                      2. Simple format: Connect to the pins in alphabetical sequence 
+                          "net1,net0,net2" indicating .A(net1),.B(net0),.C(net2)
+                      3. Mixed format: "instance/pin" and net, "U408/Y,U409/Y,net2" indicating 
+                          A to U408/Y, B to U409/Y and C to net2
+                      4. The "instance/pin" can have sub-instance hierarchy, "u_abc/U408/Y"
+@return: Have the new created instance and net name.
+$return[0] : New created instance.
+$return[1] : New created net.
+
+Note: Hierarchical path is supported in any net or instance in the command, 
+         for instance, new_net('u_abc/net124', ...
+      If the command is called in the context of return a scalar, the new created net name is returned. 
+      The new net is assumed to be driven in the path it is created, 
+         for instance, new_net('u_abc/eco12345_net124');
+      eco12345_net124 should be driven in sub-instance u_abc after it is created.
+
+Examples:
+
+#1. NAND2x2 instance name 'U_eco_123' driving new net 'net123'
+new_net("net123", "NAND2X2", "U_eco_123", ".A(n200),.B(n201)");  
+
+#2. INVX2 with instance name 'U_inv' is created in u_abc sub-instance
+#  and the input pin of the new invert is driven by n200 in current top level
+#  port would be created if n200 doesn't drive input port to u_abc
+new_net("u_abc/net123", "INVX2", "u_abc/U_inv", "n200"); 
+
+#3. Create a new net "net500"
+new_net("net500");  
+ 
+#4. Create a new instance with new net tied to output pin, input pin is floating.
+# $return[0] is new created instance, $return[1] is new created net.
+@return = new_net("", "INVX2", "", ""); 
+
+
\ No newline at end of file diff --git a/src_en/api.new_port.txt b/src_en/api.new_port.txt new file mode 100644 index 0000000000000000000000000000000000000000..976c3e77f783aa5341624cb2ac7efd4b76f61763 --- /dev/null +++ b/src_en/api.new_port.txt @@ -0,0 +1,18 @@ +

new_port

+
ECO command. Create a new port for the current top level module
+Usage: new_port($name, @options);
+$name: Port name
+@options:
+    -input: New an input port
+    -output: New an output port
+    -inout: New an inout port
+
+Note: The port name has to be pure words or with bus bit, like, abc[0], abc[1]
+
+Examples:
+
+new_port('prop_control_en', '-input');  # create an input port naming 'prop_control_en'
+new_port('prop_state[2]', '-output');   # create an output port with bus bit 'prop_state[2]'
+new_port('prop_state[3]', '-output');   # create an output port with bus bit 'prop_state[3]'
+
+
\ No newline at end of file diff --git a/src_en/api.place_gate.txt b/src_en/api.place_gate.txt new file mode 100644 index 0000000000000000000000000000000000000000..ce7b5f0c42453de27c9ace8edb90fed5d7f8207a --- /dev/null +++ b/src_en/api.place_gate.txt @@ -0,0 +1,16 @@ +

place_gate

+
ECO command. Place an instance to a specific position
+Usage: place_gate($inst, $x, $y);
+$inst: The instance to be placed
+$x,$y: The coordinate
+
+Note: This command affects the spare gate mapping of the instance.
+
+Examples:
+
+# A flop is added and placed in some location
+# In 'map_spare_cells' command, the flop is mapped to a spare flop closest to the location
+change_pin("U123/A", "DFFX1", "eco_dff_reg", ".D(-),.CK(clock)");
+place_gate("eco_dff_reg", 100, 200); # location, 100um, 200um
+map_spare_cells;
+
\ No newline at end of file diff --git a/src_en/api.place_port.txt b/src_en/api.place_port.txt new file mode 100644 index 0000000000000000000000000000000000000000..a8f181aa6e6ee30b7b1750a8547f91a6d4681eac --- /dev/null +++ b/src_en/api.place_port.txt @@ -0,0 +1,7 @@ +

place_port

+
ECO command. Place port position
+Usage: place_port($port, $x, $y);
+$port: The port to be placed
+$x,$y: The coordinate
+This command has effect on change_port ECO command
+
\ No newline at end of file diff --git a/src_en/api.pop_top.txt b/src_en/api.pop_top.txt new file mode 100644 index 0000000000000000000000000000000000000000..e3978bfaa300d76b229958f240b66ce9f9b4ebc6 --- /dev/null +++ b/src_en/api.pop_top.txt @@ -0,0 +1,4 @@ +

pop_top

+
Pop out the saved top level module from the stack and discard the current setting (LLM: pop current top design from stack)
+Usage: pop_top;
+
\ No newline at end of file diff --git a/src_en/api.post_recovery.txt b/src_en/api.post_recovery.txt new file mode 100644 index 0000000000000000000000000000000000000000..e0c8fe6008a6a965b8d686de550e4a1f716e706a --- /dev/null +++ b/src_en/api.post_recovery.txt @@ -0,0 +1,7 @@ +

post_recovery

+
ECO command. recover deleted gates after ECO
+Usage: post_recovery(@options);
+@options:
+   -inv: Replace INV by NAND/NOR
+   -incr: Incremental, preceded by map_spare_cells
+
\ No newline at end of file diff --git a/src_en/api.preserve_modules.txt b/src_en/api.preserve_modules.txt new file mode 100644 index 0000000000000000000000000000000000000000..8752b76b96eac00ca89ebe1a9c6eb56a161fcd56 --- /dev/null +++ b/src_en/api.preserve_modules.txt @@ -0,0 +1,7 @@ +

preserve_modules

+
Preserve wires in the modules listed or all modules
+Usage: preserve_modules(@module_list, @options);
+@options:
+   -all: Preserve wires in all modules
+
+
\ No newline at end of file diff --git a/src_en/api.push_top.txt b/src_en/api.push_top.txt new file mode 100644 index 0000000000000000000000000000000000000000..e5b837b512e8828da711320c7f3202c09addd628 --- /dev/null +++ b/src_en/api.push_top.txt @@ -0,0 +1,5 @@ +

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)
+Usage: push_top($module);
+$module: Set the $module as the top level module, push the previous setting to the stack
+
\ No newline at end of file diff --git a/src_en/api.read_def.txt b/src_en/api.read_def.txt new file mode 100644 index 0000000000000000000000000000000000000000..094e0d3056f035d8ec3239ca6d633c851ae3e048 --- /dev/null +++ b/src_en/api.read_def.txt @@ -0,0 +1,14 @@ +

read_def

+
Read DEF file
+Usage: my $status = read_def(@files, @options);
+@files:  DEF files
+@options:
+   -defverbose: Report all DEF parsing warnings and errors
+$status: If zero, the files have been read in successfully
+         if non-zero, failed to read in the files
+
+Examples:
+
+my $status = read_def("soc_top.def");  # Read in soc_top.def 
+my $status = read_def("soc_top1.def", "soc_top2.def");  # Multiple DEF files
+
\ No newline at end of file diff --git a/src_en/api.read_design.txt b/src_en/api.read_design.txt new file mode 100644 index 0000000000000000000000000000000000000000..81c499695cbdff724065ed70b9d7c30333a39698 --- /dev/null +++ b/src_en/api.read_design.txt @@ -0,0 +1,26 @@ +

read_design

+
Read verilog netlist files (LLM: read verilog)
+Usage: my $top_module = read_design(@files, @options);
+@files: Verilog netlist files
+@options:
+    -imp: The netlists are for the Implementation which are under ECO
+    -ref: The netlists are for the Reference
+    -prelayout: The netlists are prelayout for hierarchical ports phase detection
+    -Top_1: Read design to create Top_1 tree database
+    -Top_2: Read design to create Top_2 tree database
+Note: If no -imp or -ref option is provided, the netlist is assumed 'implementation'
+$top_module: Return top level module name after the successful read 
+
+
+Examples:
+
+#1. Read in an implementation netlist file
+my $top_module = read_design("-imp", "soc_design_resynthesized.gv");
+
+#2. Read in a reference netlist file
+my $top_module = read_design("-ref", "soc_design_released.gv");
+
+#3. Read in two reference netlist files
+my $top_module = read_design("-ref", "soc_design_released.gv", "soc_io.gv");
+
+
\ No newline at end of file diff --git a/src_en/api.read_file.txt b/src_en/api.read_file.txt new file mode 100644 index 0000000000000000000000000000000000000000..d1f00b5df958031ededbf6bc7b209c67a857f272 --- /dev/null +++ b/src_en/api.read_file.txt @@ -0,0 +1,20 @@ +

read_file

+
Read timing violation report file
+Usage: my $status = read_file($file_name, @options);
+$file_name: file name
+@options:
+    -format format: accu/pt
+                    accu --- Accucore report file. 
+                    pt   --- Prime Time report file
+$status: If zero, the file is read in successfully
+         if one, failed to read in the file
+
+
+Note: Prime Time timing report file should be generated by report_timing command with these options
+      report_timing -nosplit -path_type full_clock_expanded -delay max/min -input_pins \
+                    -nets -max_paths 10000 -transition_time -capacitance
+
+Examples:
+my $status = read_file("soc_primetime_hold.report", "-format", "pt"); 
+
+
\ No newline at end of file diff --git a/src_en/api.read_lef.txt b/src_en/api.read_lef.txt new file mode 100644 index 0000000000000000000000000000000000000000..2c2bc9f43bd3a9ce15333ac026c3f59e3f1ddd43 --- /dev/null +++ b/src_en/api.read_lef.txt @@ -0,0 +1,12 @@ +

read_lef

+
Read LEF file
+Usage: my $status = read_lef(@files);
+@files:  LEF files
+$status: If zero, the files are read in successfully
+         if one, failed to read in the files
+
+Examples:
+
+my $status = read_lef("soc_top.lef");  # Read in soc_top.lef 
+my $status = read_lef("soc_top.lef", "soc_top1.lef", "soc_top2.lef");  # Read in multiple LEF files 
+
\ No newline at end of file diff --git a/src_en/api.read_library.txt b/src_en/api.read_library.txt new file mode 100644 index 0000000000000000000000000000000000000000..03b0bd30be24d5ef56a68ab5bfb1dd45f9ced1e6 --- /dev/null +++ b/src_en/api.read_library.txt @@ -0,0 +1,34 @@ +

read_library

+
Read standard library or verilog library files (LLM: read library)
+Usage: my $status = read_library(@files, @options);
+@options:
+   -v: Treat the @files as verilog library files
+   -lib: Treat the @files as standard library files
+   -f library_list_file: Load library files from list file, the list file has format of
+                         -v verilog_lib0.v
+                         -v verilog_lib1.v
+                         -lib tsmc40.lib
+   -vmacro: Treat the @files as macro library files which are used as macro cell in ECO
+   -rtl: Treat as RTL format
+   -gate: Treat as gate format, if not specify -rtl or -gate, the tool automatic picks one
+   -top top_module: Only process the module top_module as the leaf cell, discard all other modules
+   -ref: The library is for the Reference Netlist only
+@files: Standard library files, or verilog library files
+
+Note: The three options, '-v' '-lib' and '-vmacro' don't coexist.
+      If the file has .lib extension, '-lib' can be omitted, and it is treated as standard library file.
+      If the file has .v or .vlib extension, '-v' can be omitted, and it is treated as verilog file.
+$status: If zero, the file is read in successfully
+         if one, failed to read in the file
+
+Examples:
+
+my $status = read_library("arm_40_hvt.lib", "arm_40_io.lib");
+my $status = read_library("analog_stub.v", "analog_stub2.vlib");
+my $status = read_library("-v", "analog_stub.gv");
+my $status = read_library("-vmacro", "macrocell.v");
+my $status = read_library("-f", "lib_files.list");
+my $status = read_library("-top", "abs_control_top", "abs_control_top_post.v");
+my $status = read_library("ref_special.lib", "-ref"); # The library is only for the Reference Netlist 
+
+
\ No newline at end of file diff --git a/src_en/api.read_rtl.txt b/src_en/api.read_rtl.txt new file mode 100644 index 0000000000000000000000000000000000000000..6b69be3ff13cc39267754b33b93376cb10d58767 --- /dev/null +++ b/src_en/api.read_rtl.txt @@ -0,0 +1,11 @@ +

read_rtl

+
Read RTL files
+Support SystemVerilog (IEEE 1800-2017)
+Usage: read_rtl(@files, @options);
+@options:
+    -imp: The RTL files are for Implementation
+    -ref: The RTL files are for Reference
+
+Note: It can only run on Centos7 and above, Centos6 is not supported.
+
+
\ No newline at end of file diff --git a/src_en/api.read_rtlpatch.txt b/src_en/api.read_rtlpatch.txt new file mode 100644 index 0000000000000000000000000000000000000000..f8642b0ebe490f3f40c22d53d4aa2d8ef80ec52e --- /dev/null +++ b/src_en/api.read_rtlpatch.txt @@ -0,0 +1,16 @@ +

read_rtlpatch

+
Read RTL Patch file 
+Usage: my $status = read_rtlpatch($file, @options);
+$file: RTL file for ECO 
+$status: If zero, the file is read in successfully
+         if one, failed in reading the file
+
+Examples:
+
+#1. Read in RTL Patch verilog file
+my $status = read_rtlpatch("rtlpatch_change.v");
+
+#2. Multiple RTL Patch files are read in one by one
+my $status1 = read_rtlpatch("rtlpatch_change1.v");
+my $status2 = read_rtlpatch("rtlpatch_change2.v");
+
\ No newline at end of file diff --git a/src_en/api.read_sdf.txt b/src_en/api.read_sdf.txt new file mode 100644 index 0000000000000000000000000000000000000000..1b176714b8ad043b25f92f99d075e95c9f645612 --- /dev/null +++ b/src_en/api.read_sdf.txt @@ -0,0 +1,13 @@ +

read_sdf

+
Read SDF Standard Delay Format file (LLM: sdf)
+Usage: my $status = read_sdf(@options, @files);
+@files: SDF files, can be in gzip format
+
+$status: If zero, the files have been read in successfully
+         if non-zero, failed to read in the files
+
+Examples:
+#1. Read in slow corner top level SDF file for design TM_QCIF
+read_sdf("TM_QCIF_slow.sdf.gz");
+
+
\ No newline at end of file diff --git a/src_en/api.read_sub_module_netlist.txt b/src_en/api.read_sub_module_netlist.txt new file mode 100644 index 0000000000000000000000000000000000000000..13e286167f6e644f0e9b07f80ed29518db85a323 --- /dev/null +++ b/src_en/api.read_sub_module_netlist.txt @@ -0,0 +1,31 @@ +

read_sub_module_netlist

+
Read in new synthesized netlist file
+Usage: read_sub_module_netlist($sub_module_file, @options);
+$sub_module_file: Netlist file name
+@options:
+    -sub_only: The netlist is one module file, it may have sub-instances as black boxes
+    -module module_name: The sub-module name in the original top netlist to be replaced
+    -syn_module syn_module_name: The sub-module name in the new synthesized netlist
+    -suffix suffix_name: Add suffix string to all modules in the module_name defined in 'module' option
+
+Examples:
+
+#1. Reads in mem_controller module and its sub-modules, ahb_arb module and its sub-modules, and mem_ahb_top module only
+
+read_sub_module_netlist("new_mem_controller.gv", "-module", "mem_controller");
+read_sub_module_netlist("new_ahb_arb.gv", "-module", "ahb_arb");
+read_sub_module_netlist("new_mem_ahb_top.v", "-module", "mem_ahb_top", "-sub_only");
+
+#2. Reads in new synthesized netlist files, new_mem_controller.gv and new_ahb_arb.gv, and modified parent module new_mem_ahb_top.v.
+    The new sub-module netlist new_mem_controller.gv is to replace two uniquified modules in the original top netlist,
+    mem_controller_1 and mem_controller_2 and their hierarchical sub-modules.
+    The new sub-module netlist new_ahb_arg.gv is to replace ahb_arb and its hierarchical sub-modules in the original top netlist. 
+    And the new modified new_mem_ahb_top.v is to replace the sub-parent module mem_ahb_top only.
+
+read_sub_module_netlist("new_mem_controller.gv", "-module", "mem_controller_1", "-syn_module", "mem_controller", "-suffix", "_1");
+read_sub_module_netlist("new_mem_controller.gv", "-module", "mem_controller_2", "-syn_module", "mem_controller", "-suffix", "_2");
+read_sub_module_netlist("new_ahb_arb.gv", "-module", "ahb_arb");
+read_sub_module_netlist("new_mem_ahb_top.v", "-module", "mem_ahb_top", "-sub_only");
+
+
+
\ No newline at end of file diff --git a/src_en/api.read_sub_module_svf.txt b/src_en/api.read_sub_module_svf.txt new file mode 100644 index 0000000000000000000000000000000000000000..aa7864d106e0e87ab5c2385cace73b5d03f1393b --- /dev/null +++ b/src_en/api.read_sub_module_svf.txt @@ -0,0 +1,17 @@ +

read_sub_module_svf

+
Read in new synthesized design SVF file
+Usage: read_sub_module_svf($sub_module_svf, @options);
+$sub_module_svf: Sub-module SVF file name
+@options:
+    -module module_name: The sub-module name in the original top netlist that will be replaced
+    -syn_module syn_module_name: The sub-module name in the new synthesized netlist
+    -suffix suffix_string: Add suffix to all modules under the module_name defined by 'module' option, s
+Notes: The command can be run several times
+
+Examples:
+
+#1. Reads in mem_controller module and its sub-modules, ahb_arb module and its sub-modules SVF files
+read_sub_module_svf("new_mem_controller.svf", "-module", "mem_controller_1", "-syn_module", "mem_controller");
+read_sub_module_svf("new_ahb_arb.svf", "-module", "ahb_arb");
+
+
\ No newline at end of file diff --git a/src_en/api.read_svf.txt b/src_en/api.read_svf.txt new file mode 100644 index 0000000000000000000000000000000000000000..72f7c0d3840a0cab352d0c755e765b9ea4a87387 --- /dev/null +++ b/src_en/api.read_svf.txt @@ -0,0 +1,24 @@ +

read_svf

+
Read Synopsys SVF text files (LLM: svf)
+Usage: my $status = read_svf(@options, @files);
+@files: SVF text files
+@options:
+    -imp: The SVF file is for the Implementation netlist
+    -ref: The SVF file is for the Reference Netlist
+    -Top_1: The SVF file is for Top_1 tree database
+    -Top_2: The SVF file is for Top_2 tree database
+
+$status: If zero, the files have been read in successfully
+         if non-zero, failed to read in the files
+
+Note: This command must be run before read_design 
+      SVF should be in text format
+
+Examples:
+#1. Read in both SVF files for IMP/REF
+read_svf("-ref", "ref_design.svf.txt");
+read_svf("-imp", "imp_design.svf.txt");
+read_design("-ref", "ref_design.v");
+read_design("-imp", "imp_design.v");
+
+
\ No newline at end of file diff --git a/src_en/api.read_vcd.txt b/src_en/api.read_vcd.txt new file mode 100644 index 0000000000000000000000000000000000000000..00878ed54abdf5f414eb40eba428e6ffbd525c76 --- /dev/null +++ b/src_en/api.read_vcd.txt @@ -0,0 +1,11 @@ +

read_vcd

+
Read VCD file
+Usage: read_vcd($vcd_file);
+$vcd_file: VCD file name to be read in
+
+Examples:
+
+#1. Read in VCD generated in verify_faults
+read_vcd("fault_seu.vcd");
+
+
\ No newline at end of file diff --git a/src_en/api.rename_net.txt b/src_en/api.rename_net.txt new file mode 100644 index 0000000000000000000000000000000000000000..ffe74c82595a067f4dbc0aa44cfcf13572767fe4 --- /dev/null +++ b/src_en/api.rename_net.txt @@ -0,0 +1,6 @@ +

rename_net

+
ECO command. Rename a net name
+Usage: rename_net($oldname, $newname);
+$oldname: Old net name
+$newname: New net name
+
\ No newline at end of file diff --git a/src_en/api.replace_sub_module_netlist.txt b/src_en/api.replace_sub_module_netlist.txt new file mode 100644 index 0000000000000000000000000000000000000000..929e5c37c21274176b1082719d72a515d05163c9 --- /dev/null +++ b/src_en/api.replace_sub_module_netlist.txt @@ -0,0 +1,33 @@ +

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
+Usage: replace_sub_module_netlist($new_top_netlist_file);
+$new_top_netlist_file: The replaced and new top level full netlist to be written out
+
+Examples:
+
+#1. Replace sub-module 'mem_controller', 'ahb_arb' hierarchically, and 'mem_ahb_top' module, and write out to a new full netlist
+read_library("tsmc.lib");
+read_design("-imp", "top_ref.gv");
+read_sub_module_netlist("new_mem_controller.gv", "-module", "mem_controller");
+read_sub_module_netlist("new_ahb_arb.gv", "-module", "ahb_arb");
+read_sub_module_netlist("new_mem_ahb_top.v", "-module", "mem_ahb_top", "-sub_only");
+replace_sub_module_netlist("new_top_ref.gv");
+
+
+#2. Replace sub-module 'mem_controller', 'ahb_arb' hierarchically in netlist and SVF, replace 'mem_ahb_top' module only,
+    and write out to a new full SVF file and a new netlist
+
+read_library("tsmc.lib");
+read_svf("-imp", "top_ref.svf");
+read_design("-imp", "top_ref.gv");
+read_sub_module_svf("new_mem_controller.svf", "-module", "mem_controller");
+read_sub_module_svf("new_ahb_arb.svf", "-module", "ahb_arb");
+read_sub_module_netlist("new_mem_controller.gv", "-module", "mem_controller");
+read_sub_module_netlist("new_ahb_arb.gv", "-module", "ahb_arb");
+read_sub_module_netlist("new_mem_ahb_top.v", "-module", "mem_ahb_top", "-sub_only"); # This module is parent module with instantiation only
+
+replace_sub_module_netlist("new_top_ref.gv"); # Run netlist replacement first 
+replace_sub_module_svf("new_top_ref.svf");    # Then SVF replacement
+
+
+
\ No newline at end of file diff --git a/src_en/api.replace_sub_module_svf.txt b/src_en/api.replace_sub_module_svf.txt new file mode 100644 index 0000000000000000000000000000000000000000..32bf4f6b906b749dd5e55848713e75c134dfdeef --- /dev/null +++ b/src_en/api.replace_sub_module_svf.txt @@ -0,0 +1,23 @@ +

replace_sub_module_svf

+
Replace sub-module SVF in the design by a new re-synthesized sub-module SVF file content
+Usage: replace_sub_module_svf($new_top_design_svf);
+$new_top_design_svf: The replaced and new top level full SVF file to be written out
+
+Examples:
+
+#1. Replace sub-module 'mem_controller', 'ahb_arb' hierarchically in netlist and SVF, replace 'mem_ahb_top' module only,
+    and write out to a new full SVF file and a new netlist
+
+read_library("tsmc.lib");
+read_svf("-imp", "top_ref.svf");
+read_design("-imp", "top_ref.gv");
+read_sub_module_svf("new_mem_controller.svf", "-module", "mem_controller");
+read_sub_module_svf("new_ahb_arb.svf", "-module", "ahb_arb");
+read_sub_module_netlist("new_mem_controller.gv", "-module", "mem_controller");
+read_sub_module_netlist("new_ahb_arb.gv", "-module", "ahb_arb");
+read_sub_module_netlist("new_mem_ahb_top.v", "-module", "mem_ahb_top", "-sub_only"); # This module is parent module with instantiation only
+
+replace_sub_module_netlist("new_top_ref.gv"); # Run netlist replacement first 
+replace_sub_module_svf("new_top_ref.svf");    # Then SVF replacement
+
+
\ No newline at end of file diff --git a/src_en/api.report_eco.txt b/src_en/api.report_eco.txt new file mode 100644 index 0000000000000000000000000000000000000000..d6e109ba61e51f4b6215192d9428d30165372af6 --- /dev/null +++ b/src_en/api.report_eco.txt @@ -0,0 +1,8 @@ +

report_eco

+
Report ECO
+Usage: report_eco($filename, @options);
+$filename: Write report to the file name. If $filename is not present, print to screen
+@options:
+    -help: Print this information
+    -simple: Print in simple format
+
\ No newline at end of file diff --git a/src_en/api.report_spares.txt b/src_en/api.report_spares.txt new file mode 100644 index 0000000000000000000000000000000000000000..128532f186abf530cef99f62404840235834808e --- /dev/null +++ b/src_en/api.report_spares.txt @@ -0,0 +1,4 @@ +

report_spares

+
Report Spare cells
+Usage: report_spares;
+
\ No newline at end of file diff --git a/src_en/api.report_timing.txt b/src_en/api.report_timing.txt new file mode 100644 index 0000000000000000000000000000000000000000..ce83a34c5268ee2699e17c768a9b5635c501172c --- /dev/null +++ b/src_en/api.report_timing.txt @@ -0,0 +1,30 @@ +

report_timing

+
Timing command. Report timing
+Usage: report_timing(@options);
+@options:
+    -help: Prints this information
+    -delay_type $delay_type: Specifies the type of path delay: max (default) or min
+    -from: $startpoint, Starting point of the timing report
+    -to:   $endpoint, Ending point of the timing report
+    -through: $through_points, Through points, the value can be an array point
+    -thr_and: Through points should all present 
+    -max_paths number: Max path number to report, if it is not set, only report one path
+    -all: Reports all timing paths
+    -input_pins: Displays input pins of instances
+    -nosplit: Prevents line splitting
+Note: If none of the 'from' or 'to' or 'through' option is present, the timing report is on the paths that go through the ECO instances
+
+Examples:
+
+#1. Report timing on the paths that go through the ECO instances
+report_timing();
+
+#2. Report timing on the instances that in through option
+my $thr_instances = ["u_control/u_clk/U120", "u_control/u_mbist/U117"];
+report_timing("-through", $thr_instances);
+
+#3. Report timing on the instances that in through option and they should all appear in the report path
+my $thr_instances = ["u_control/u_clk/U120", "u_control/u_mbist/U117"];
+report_timing("-through", $thr_instances, "-thr_and");
+
+
\ No newline at end of file diff --git a/src_en/api.restore_session.txt b/src_en/api.restore_session.txt new file mode 100644 index 0000000000000000000000000000000000000000..e8d8d1a6e07aa2376e9638755bd9c0e826ffd9f7 --- /dev/null +++ b/src_en/api.restore_session.txt @@ -0,0 +1,11 @@ +

restore_session

+
Restore ECO session
+Usage: restore_session("$directory/$session_name");
+$directory: The directory that the session has been saved
+$session_name: The session name
+
+Examples:
+
+# To restore the session "myeco" in sub-directory "mach_ai"
+restore_session("mach_ai/myeco");
+
\ No newline at end of file diff --git a/src_en/api.rtl_compare.txt b/src_en/api.rtl_compare.txt new file mode 100644 index 0000000000000000000000000000000000000000..a2eada28c519aeb1d60decd0d550e1ca338a635d --- /dev/null +++ b/src_en/api.rtl_compare.txt @@ -0,0 +1,7 @@ +

rtl_compare

+
RTL to RTL compare
+The compare result is used in fix_design, so that Gate to Gate comparing can be skipped
+Usage: rtl_compare(@options);
+@options:
+   
+
\ No newline at end of file diff --git a/src_en/api.run.txt b/src_en/api.run.txt new file mode 100644 index 0000000000000000000000000000000000000000..f103fa2565f2ad2ec3f2a372454d7f76d6ea55c6 --- /dev/null +++ b/src_en/api.run.txt @@ -0,0 +1,8 @@ +

run

+
Run Netlist processing script
+Usage: run($script_name);
+
+Examples:
+
+run("eco2.pl");
+
\ No newline at end of file diff --git a/src_en/api.run_lec.txt b/src_en/api.run_lec.txt new file mode 100644 index 0000000000000000000000000000000000000000..2a07f6fca2243c1e77daaf98d2470f4a53703965 --- /dev/null +++ b/src_en/api.run_lec.txt @@ -0,0 +1,10 @@ +

run_lec

+
Run Logic Equivalence Check of the Implementation Netlist vs the Reference Netlist (LLM: lec)
+Usage: run_lec(@options);
+@options:
+    -list_file the_list_file: The LEC point list file 
+             The list file format:
+                inst: u_def/u_sdef/state_reg_1_
+                pin:  u_control/u_sreg/u_mem_128x24/A[0]
+                port: PORT_READY_OUT
+
\ No newline at end of file diff --git a/src_en/api.save_session.txt b/src_en/api.save_session.txt new file mode 100644 index 0000000000000000000000000000000000000000..4239fd3584a26204c693b1eed966616e6d76a2a0 --- /dev/null +++ b/src_en/api.save_session.txt @@ -0,0 +1,11 @@ +

save_session

+
Save ECO session
+Usage: save_session("$directory/$session_name");
+$directory: The directory that the session should be saved
+$session_name: The session name
+
+Examples:
+
+# To save a session "my_eco" in sub-directory "mach_ai"
+save_session("mach_ai/my_eco");
+
\ No newline at end of file diff --git a/src_en/api.sch.txt b/src_en/api.sch.txt new file mode 100644 index 0000000000000000000000000000000000000000..9836949c82c3b5a3d84fa20d3033419500295d4c --- /dev/null +++ b/src_en/api.sch.txt @@ -0,0 +1,16 @@ +

sch

+
Launch schematic to verify ECO
+Usage: sch(@instances, @options);
+@instances: Instances or nets in the current module to be displayed on the schematic
+@options:
+    -set value: Set a value when launch the schematic
+    -to value: To existing schematic
+    -both: Load the item in both implementation and reference netlist
+
+Examples:
+
+sch("U123", "U456", "inst0");
+sch("clk")
+sch("in1", "-set", "1");
+sch("in1", "-to", "1"); # No action if schematic 1 doesn't exist
+
\ No newline at end of file diff --git a/src_en/api.set_auto_fix_floating.txt b/src_en/api.set_auto_fix_floating.txt new file mode 100644 index 0000000000000000000000000000000000000000..c49b69c5b71f4b568b624ed91ab55017ee7b01e3 --- /dev/null +++ b/src_en/api.set_auto_fix_floating.txt @@ -0,0 +1,5 @@ +

set_auto_fix_floating

+
ECO setting. Enable automatic fixing floating input ports after fix_modules
+By default, it is enabled.
+Usage: set_auto_fix_floating(0);  --- Disable automatic fixing floating input ports.
+
\ No newline at end of file diff --git a/src_en/api.set_bfix.txt b/src_en/api.set_bfix.txt new file mode 100644 index 0000000000000000000000000000000000000000..2082a5b3532d675aa0fc47aa10d1312c369bc386 --- /dev/null +++ b/src_en/api.set_bfix.txt @@ -0,0 +1,10 @@ +

set_bfix

+
Enable or disable BFIX features which is for precise combinational logic fix (LLM: precise combinational) 
+Usage: set_bfix($val);
+$val: Default 0x3
+      Bit 0, Set one to enable Reorder Method
+      Bit 1, Set one to enable Cutpoint Method
+      bit 2, Set one to force using Reorder/Cutpoint Method instead of Structure Method
+
+Note: It should run before fix_design
+
\ No newline at end of file diff --git a/src_en/api.setup_eco.txt b/src_en/api.setup_eco.txt new file mode 100644 index 0000000000000000000000000000000000000000..ac848962606e72a19c9051d4d939012a1c0405fd --- /dev/null +++ b/src_en/api.setup_eco.txt @@ -0,0 +1,16 @@ +

setup_eco

+
ECO command. Setup ECO
+Usage: setup_eco($eco_name, @options);
+$eco_name: ECO name, like eco01234
+@options:
+    -help: Print this information.
+    -comments comments: Comments to appear at the beginning of ECO netlist.
+
+Examples:
+
+#1. Setup ECO name 
+setup_eco('eco1234')
+
+#2. Setup ECO name with comments
+setup_eco('eco1234', '-comments', 'Fix abc_state state machine');
+
\ No newline at end of file