Upload 100 files
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- src_info_hf/api.add_mapped_instance.txt +6 -0
- src_info_hf/api.buffer.txt +21 -0
- src_info_hf/api.change_gate.txt +39 -0
- src_info_hf/api.change_net.txt +25 -0
- src_info_hf/api.change_pin.txt +74 -0
- src_info_hf/api.change_port.txt +26 -0
- src_info_hf/api.check_design.txt +18 -0
- src_info_hf/api.compare.txt +17 -0
- src_info_hf/api.compare_nets.txt +14 -0
- src_info_hf/api.convert_gated_clocks.txt +6 -0
- src_info_hf/api.create_clock.txt +18 -0
- src_info_hf/api.create_pin_mapping_json_file.txt +5 -0
- src_info_hf/api.create_reset.txt +16 -0
- src_info_hf/api.current_design.txt +8 -0
- src_info_hf/api.current_instance.txt +8 -0
- src_info_hf/api.del_gate.txt +5 -0
- src_info_hf/api.del_net.txt +5 -0
- src_info_hf/api.del_port.txt +5 -0
- src_info_hf/api.dft_drc.txt +17 -0
- src_info_hf/api.elab_rtl.txt +4 -0
- src_info_hf/api.elaborate.txt +4 -0
- src_info_hf/api.exist_inst.txt +6 -0
- src_info_hf/api.exist_wire.txt +6 -0
- src_info_hf/api.find_equal_nets.txt +11 -0
- src_info_hf/api.fix_design.txt +31 -0
- src_info_hf/api.fix_logic.txt +24 -0
- src_info_hf/api.flatten_modules.txt +10 -0
- src_info_hf/api.get_cell_cofactors.txt +18 -0
- src_info_hf/api.get_cell_info.txt +39 -0
- src_info_hf/api.get_cells.txt +47 -0
- src_info_hf/api.get_conns.txt +40 -0
- src_info_hf/api.get_coord.txt +10 -0
- src_info_hf/api.get_definition.txt +11 -0
- src_info_hf/api.get_driver.txt +35 -0
- src_info_hf/api.get_drivers.txt +37 -0
- src_info_hf/api.get_instance.txt +16 -0
- src_info_hf/api.get_instances.txt +12 -0
- src_info_hf/api.get_leaf_pin_dir.txt +12 -0
- src_info_hf/api.get_leafs_count.txt +16 -0
- src_info_hf/api.get_lib_cells.txt +13 -0
- src_info_hf/api.get_loads.txt +19 -0
- src_info_hf/api.get_loads_phase.txt +16 -0
- src_info_hf/api.get_logic_cone.txt +14 -0
- src_info_hf/api.get_modules.txt +15 -0
- src_info_hf/api.get_net_of.txt +6 -0
- src_info_hf/api.get_nets.txt +21 -0
- src_info_hf/api.get_path.txt +5 -0
- src_info_hf/api.get_pins.txt +30 -0
- src_info_hf/api.get_ports.txt +25 -0
- src_info_hf/api.get_ref.txt +6 -0
src_info_hf/api.add_mapped_instance.txt
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___add_mapped_instance'>add_mapped_instance</h3>
|
2 |
+
<pre>Add mapped instance pair between REF and IMP
|
3 |
+
<b>Usage:</b> add_mapped_instance($ref_instance, $imp_instance);
|
4 |
+
<b>Examples:</b>
|
5 |
+
add_mapped_instance("u_subtop/u_def/state_reg", "u_subtop/uinst_def/state_reg");
|
6 |
+
</pre>
|
src_info_hf/api.buffer.txt
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___buffer'>buffer</h3>
|
2 |
+
<pre>ECO command. Buffer high fanout ECO nets
|
3 |
+
<b>Usage:</b> buffer($net_names, $buffer_name, $fanout);
|
4 |
+
$net_names: Net names to be buffered. Use "," to separate multiple nets, like "eco1_net1,reset2"
|
5 |
+
$buffer_name: The buffer module name from library, leave it blank to let the tool pick one.
|
6 |
+
It supports repeater case by ",", for example, "INVX1,INVX16" would have 'INVX1'
|
7 |
+
drives 'INVX16' and 'INVX16' drives the fanouts.
|
8 |
+
$fanout: How many fanout to insert a buffer.
|
9 |
+
|
10 |
+
<b>Examples:</b>
|
11 |
+
|
12 |
+
#1. For every 10 fanout of test_mode, add a buffer, BUFX6
|
13 |
+
buffer("test_mode", "BUFX6", 10);
|
14 |
+
|
15 |
+
#2. For every 10 fanout of 'clock', add repeaters, INVX2,INVX16
|
16 |
+
buffer("clock", "INVX2,INVX16", 10);
|
17 |
+
|
18 |
+
#3. Let the tool pick a buffer
|
19 |
+
buffer("clock", "", 10);
|
20 |
+
|
21 |
+
</pre>
|
src_info_hf/api.change_gate.txt
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___change_gate'>change_gate</h3>
|
2 |
+
<pre>ECO command. Modify an instance in ECO
|
3 |
+
Two types of usages
|
4 |
+
<b>Usage1:</b> change_gate($instance, $new_reference, $pin_mapping);
|
5 |
+
$instance: The instance under ECO. Support hierarchical name, "u_abc/U123"
|
6 |
+
$new_reference: The new reference name which the instance changes to, E.G. 'AND3X1'.
|
7 |
+
If no reference is present, the ECO operation is assumed to
|
8 |
+
change the instance's pin connections.
|
9 |
+
$pin_mapping: Input pins mapping, ".new(old)", E.G. ".A1(A),.B1(B)"
|
10 |
+
if two references have same input pins. The option can be empty
|
11 |
+
<b>Usage2:</b> change_gate($instance, $pin_connections);
|
12 |
+
$pin_connections: New pin connections, ".A(n242)".
|
13 |
+
The unspecified pins keeps the original connection.
|
14 |
+
E.G. pin 'B' connection is unchanged.
|
15 |
+
|
16 |
+
<b>Examples:</b>
|
17 |
+
|
18 |
+
#1. U123 has reference OR3X1 with input pins, A,B,C originally
|
19 |
+
# change U123 to AND3X1, all input pins are the same.
|
20 |
+
change_gate('U123', 'AND3X1', "");
|
21 |
+
|
22 |
+
#2. A and B keep the connections, discard C
|
23 |
+
change_gate('U123', 'AND2X1', "");
|
24 |
+
|
25 |
+
#3. A keeps the connections, B connects to what the old C connects. And discard old B
|
26 |
+
change_gate('U123', 'AND2X1', ".B(C)");
|
27 |
+
|
28 |
+
#4. A,B,C keep the same, and new D pin connects to net n123
|
29 |
+
change_gate('U123', 'AND4X1', ".D(n123)");
|
30 |
+
|
31 |
+
#5. AO21X1 has input pins, A0, A1 and B0
|
32 |
+
change_gate('U123', 'AO21X1', ".A0(A),.A1(B),.B0(C)");
|
33 |
+
|
34 |
+
#6. change U123 A to n123, B to n124, keep C connection.
|
35 |
+
change_gate("U123", ".A(n123),.B(n124)");
|
36 |
+
|
37 |
+
#7. Rotating A/B/C connections.
|
38 |
+
change_gate("U123", ".A(B),.B(C),.C(A)");
|
39 |
+
</pre>
|
src_info_hf/api.change_net.txt
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___change_net'>change_net</h3>
|
2 |
+
<pre>ECO command. Change a existing net's driver
|
3 |
+
<b>Usage:</b> change_net($net, $gate, $instance, $connections);
|
4 |
+
$net: The net to be ECOed
|
5 |
+
$gate: New leaf gate to drive the net
|
6 |
+
$instance: The instance name of the new gate. Optional, if it is empty, assigned by the tool
|
7 |
+
$connections: The new gate input pins connections. If it is empty, the gate is inserted in the net
|
8 |
+
Supported formats, 1. Very detail ".A(net0),.B(net1),.C(net2)"
|
9 |
+
2. Connect to the pins in alphabetical sequence
|
10 |
+
"net1,net0,net2" indicating A->net1,B->net0,C->net2
|
11 |
+
3. Other instance/pin "U408/Y,U409/Y,net2" indicating A->U408/Y,B->U409/Y,C->net2
|
12 |
+
4. Special character '-' is used to connect up the original connection
|
13 |
+
|
14 |
+
<b>Examples:</b>
|
15 |
+
|
16 |
+
#1. Drive n123 with BUFX2 driven by n40
|
17 |
+
change_net("n123", "BUFX2", "", "n40");
|
18 |
+
|
19 |
+
#2. Drive n123 with AND2X2 driven by n40 and original n123 driver
|
20 |
+
change_net("n123", "AND2X2", "", "-,n40");
|
21 |
+
|
22 |
+
#3. Insert a buffer into n123
|
23 |
+
change_net("n123", "BUFX2");
|
24 |
+
|
25 |
+
</pre>
|
src_info_hf/api.change_pin.txt
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___change_pin'>change_pin</h3>
|
2 |
+
<pre>ECO command. Modify pin connection in ECO
|
3 |
+
Two types of usages.
|
4 |
+
|
5 |
+
<b>Usage1:</b> change_pin($pin_name, $net);
|
6 |
+
Change pin's connection to a net
|
7 |
+
$pin_name: In the format of "instance/pin", can be more than one pins separated by ",",
|
8 |
+
"instance1/pinA,instance2/pinB", E.G. "U123/A", "U123/A,U345/B"
|
9 |
+
Hierarchical naming style is supported as well, "u_abc/U123/A"
|
10 |
+
The pins have to be input in this mode.
|
11 |
+
$net: The net name the pin connects to.
|
12 |
+
Hierarchical naming style is supported, "u_abc/net123"
|
13 |
+
When the pin and the net are in different hierarchies, ports are added automatically
|
14 |
+
E.G.
|
15 |
+
# The tool creates 4 ports across the hierarchies to connect the net to the pin.
|
16 |
+
change_pin("u_abc/u_cde/U200/A", "u_xyz/u_stv/net300");
|
17 |
+
# The tool gets the net tie to Y pin of U300 and do the the same as the previous example.
|
18 |
+
change_pin("u_abc/u_cde/U200/A", "u_xyz/u_stv/U300/Y");
|
19 |
+
|
20 |
+
<b>Usage2:</b>my $inst = change_pin($pin_name, $leaf_cell, $new_instance, $connection);
|
21 |
+
Insert a new leaf cell to drive the pin
|
22 |
+
$inst: Return new instance name if new gate is created in the command.
|
23 |
+
$pin_name: In the format of "instance/pin", E.G. U123/A Hierarchical naming is supported, u_abc/U123/A
|
24 |
+
The pin can be output in this mode. The tool gets the net the pin drives,
|
25 |
+
and change the command to
|
26 |
+
change_net($thenet, $leaf_cell, $new_instance, $connection);
|
27 |
+
$leaf_cell: The leaf cell name to drive the $pin_name
|
28 |
+
$new_instance: The instance name for the new inserted leaf cell.
|
29 |
+
The option is optional, the tool assigns one if it's empty
|
30 |
+
If use '.', the instance is added to the same hierarchy as the $pin_name
|
31 |
+
$connection: The pins connection for the new cell.
|
32 |
+
Supported formats, 1. Detail format: ".A(net0),.B(net1),.C(net2)"
|
33 |
+
2. Simple format: Connect to the pins in alphabetical sequence "net1,net0,net2"
|
34 |
+
3. Mixed format: "u_abc/U123/Y,.B(net1),net2"
|
35 |
+
4. Special character '-' is used to connect up the original connection
|
36 |
+
5. Advanced nesting format:
|
37 |
+
change_pin("U189/A", "AOI21X2", "", "U190/Y,,BUFX6(BUFX6(BUFX6(n412)))");
|
38 |
+
|
39 |
+
<b>Note:</b> All strings should be quoted by ' or " to avoid syntax error or undesired effects.
|
40 |
+
|
41 |
+
|
42 |
+
<b>Examples:</b>
|
43 |
+
|
44 |
+
#1. U123 has input pins A,B,C, U234 has input pins A0,A1,B
|
45 |
+
# Change A pin of U123 to net12345
|
46 |
+
change_pin("U123/A", "net12345");
|
47 |
+
|
48 |
+
#2. Change A pin of U123 to $net which is defined in the ECO script.
|
49 |
+
change_pin("U123/B", $net);
|
50 |
+
|
51 |
+
#3. Change A pin of U123 to net12345
|
52 |
+
change_pin("U123/A,U234/B", "net12345");
|
53 |
+
|
54 |
+
#4. Insert "NAND2X2 eco12345_U0(.A(net1234),.B(net5678));"
|
55 |
+
# to drive U123/A
|
56 |
+
change_pin("U123/A", "NAND2X2", "eco12345_U0", "net1234,net5678");
|
57 |
+
|
58 |
+
#5. Same as above, with more detail of pin connections
|
59 |
+
change_pin("U123/A", "NAND2X2", "eco12345_U0", ".A(net1234),.B(net5678)");
|
60 |
+
|
61 |
+
#6.Insert a buffer to U123 A pin
|
62 |
+
change_pin("U123/A", "BUFX4", "", "-");
|
63 |
+
|
64 |
+
#7. Insert NAND2X1 to drive CK pin and new A connects to the original net
|
65 |
+
change_pin("abc_reg_1_/CK", "NAND2X1", "", ".A(-),.B(1'b1)");
|
66 |
+
|
67 |
+
#8. Do hierarchical connection
|
68 |
+
change_pin("u_abc/u_cde/U200/A", "u_xyz/u_stv/U300/Y");
|
69 |
+
|
70 |
+
#9. Nested connection
|
71 |
+
change_pin("qcif/num2/u_spare1/B", "AOI21X2", "eco_inst_on_top1", \
|
72 |
+
"NAND2X2(gte_344/u_smod/U100/Y, gte_344/n114), gte_343/U111, BUFX6(BUFX6(n105))");
|
73 |
+
|
74 |
+
</pre>
|
src_info_hf/api.change_port.txt
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___change_port'>change_port</h3>
|
2 |
+
<pre>ECO command. Change an output port's driver, or add gate after input port
|
3 |
+
<b>Usage1:</b> change_port($port, $gate, $instance, $connections);
|
4 |
+
$port: The port under ECO, can be input port or output port
|
5 |
+
$gate: New leaf gate to drive the port if the port is output
|
6 |
+
Or add the gate after input port
|
7 |
+
$instance: The instance name for the new leaf cell, optional, the tool assigns one if it's empty
|
8 |
+
$connections: The new gate input pins connections. If it is empty, the gate is inserted in the net
|
9 |
+
Supported formats, 1. Very detail ".A(net0),.B(net1),.C(net2)"
|
10 |
+
2. Connect to the pins in alphabetical sequence
|
11 |
+
"net1,net0,net2" indicating A->net1,B->net0,C->net2
|
12 |
+
3. Other instance/pin "U408/Y,U409/Y,net2" indicating A->U408/Y,B->U409/Y,C->net2
|
13 |
+
4. Special character '-' is used to connect up the original connection
|
14 |
+
<b>Usage2:</b> change_port($port, $inst_pin);
|
15 |
+
$port: The port under ECO, output port
|
16 |
+
$inst_pin: In the format of 'u1234/Y', instance-name/pin-name
|
17 |
+
<b>Note:</b> The difference of change_net and change_port command
|
18 |
+
change_net changes all drains of the net.
|
19 |
+
change_port changes only the port driver.
|
20 |
+
|
21 |
+
<b>Examples:</b>
|
22 |
+
|
23 |
+
#1. Add buffer to output port 'out1'
|
24 |
+
change_port("out1", "BUFX1", "eco_buf0", "-");
|
25 |
+
|
26 |
+
</pre>
|
src_info_hf/api.check_design.txt
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___check_design'>check_design</h3>
|
2 |
+
<pre>Check if the netlist status, searching for unresolved modules, floating and multi-drivers
|
3 |
+
<b>Usage:</b> check_design(@options);
|
4 |
+
@options:
|
5 |
+
-ignore list: Ignore the issues matching the list, E.G. 'FE_UNCONNECT*,SCAN_*'.
|
6 |
+
-eco: Only check instances/wires having been done ECO. Default check all instances/wires
|
7 |
+
-fixfile filename: Create ECO fix file
|
8 |
+
-nouniquify: Dont check uniquify
|
9 |
+
|
10 |
+
<b>Examples:</b>
|
11 |
+
|
12 |
+
check_design;
|
13 |
+
check_design('-ignore', 'FE_UNCONNECT*');
|
14 |
+
check_design('-ignore', 'FE_UNCONNECT*,SCAN_*');
|
15 |
+
check_design('-ignore', 'W-108');
|
16 |
+
check_design("-eco");
|
17 |
+
|
18 |
+
</pre>
|
src_info_hf/api.compare.txt
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___compare'>compare</h3>
|
2 |
+
<pre>Logic equivalence check on output port and register input pins
|
3 |
+
<b>Usage:</b> my $no_eq_num = compare(@nets, @options);
|
4 |
+
@options:
|
5 |
+
-help: Print this info
|
6 |
+
$no_eq_num: Return back non-equivalent number
|
7 |
+
|
8 |
+
<b>Examples:</b>
|
9 |
+
|
10 |
+
#1. Check if output port 'state_out' is equivalent in IMP/REF netlists
|
11 |
+
compare("state_out");
|
12 |
+
|
13 |
+
#2. Check two points at the same time.
|
14 |
+
Check if 'state_reg_0_/D' is equivalent in IMP/REF netlists
|
15 |
+
And check if 'state_reg_1_/D' are equivalent in IMP/REF netlists
|
16 |
+
compare("state_reg_0_/D", "state_reg_1_/D");
|
17 |
+
</pre>
|
src_info_hf/api.compare_nets.txt
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___compare_nets'>compare_nets</h3>
|
2 |
+
<pre>Check equivalence of two nets in the reference and implementation netlist
|
3 |
+
<b>Usage:</b> my $result = compare_nets($net0, $net1, @options);
|
4 |
+
$net0: The net in the reference netlist.
|
5 |
+
$net1: The net in the implementation netlist.
|
6 |
+
@options:
|
7 |
+
$result: 1, they are equal,
|
8 |
+
0, they are not equal.
|
9 |
+
|
10 |
+
<b>Examples:</b>
|
11 |
+
|
12 |
+
#1 Compare reg1/D in the reference and reg1/D in the implementation netlist
|
13 |
+
compare_nets("reg1/D", "reg1/D");
|
14 |
+
</pre>
|
src_info_hf/api.convert_gated_clocks.txt
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___convert_gated_clocks'>convert_gated_clocks</h3>
|
2 |
+
<pre>ECO command. Convert gated clocks to MUX logic.
|
3 |
+
In metal ECO, if gated clock cell is not in spare gate list, this command should run before map_spare_cells
|
4 |
+
<b>Usage:</b> my $cnt = convert_gated_clocks();
|
5 |
+
$cnt: The number of gated clock cells having been converted
|
6 |
+
</pre>
|
src_info_hf/api.create_clock.txt
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___create_clock'>create_clock</h3>
|
2 |
+
<pre>Timing command and GOF Formal command. Create clock for fault verification
|
3 |
+
<b>Usage:</b> create_clock($clock_name, $clock_period);
|
4 |
+
$clock_name: Clock name, input port name or black box instance output pin
|
5 |
+
$clock_period: Clock period
|
6 |
+
|
7 |
+
<b>Note:</b> This command can be used multiple times. The clock period is recommended to be multiples of 2
|
8 |
+
|
9 |
+
<b>Examples:</b>
|
10 |
+
|
11 |
+
#1. Create clock on PIN_SPI_CLK, period 4ns
|
12 |
+
create_clock("PIN_SPI_CLK", 4);
|
13 |
+
|
14 |
+
#2. Create clock on PIN_APB_CLK and PLL clk_out
|
15 |
+
create_clock("PIN_APB_CLK", 2);
|
16 |
+
create_clock("u_pll_top/u_pll_core/clk_out", 2);
|
17 |
+
|
18 |
+
</pre>
|
src_info_hf/api.create_pin_mapping_json_file.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___create_pin_mapping_json_file'>create_pin_mapping_json_file</h3>
|
2 |
+
<pre>Create pin mapping file between original synthesis netlist and pre-ECO netlist
|
3 |
+
<b>Usage:</b> create_pin_mapping_json_file($filename);
|
4 |
+
$filename: JSON file name
|
5 |
+
</pre>
|
src_info_hf/api.create_reset.txt
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___create_reset'>create_reset</h3>
|
2 |
+
<pre>Create reset for the design
|
3 |
+
<b>Usage:</b> create_reset($reset_name, $active_level);
|
4 |
+
$reset_name: Reset name, input port name or black box instance output pin
|
5 |
+
$active_level: The level that the reset is active
|
6 |
+
|
7 |
+
<b>Examples:</b>
|
8 |
+
|
9 |
+
#1. Create reset on PIN_RESETN, active low
|
10 |
+
create_reset("PIN_RESETN", 0);
|
11 |
+
|
12 |
+
#2. Create reset on PIN_RESET, active high
|
13 |
+
create_reset("PIN_RESET", 1);
|
14 |
+
|
15 |
+
|
16 |
+
</pre>
|
src_info_hf/api.current_design.txt
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___current_design'>current_design</h3>
|
2 |
+
<pre>Set the current top level module
|
3 |
+
<b>Usage:</b> current_design($module);
|
4 |
+
$module: Set $module as the current top level module.
|
5 |
+
If the argument is missing, return the current setting
|
6 |
+
".." set to parent module, "~" set to the most top level module
|
7 |
+
<b>Note:</b> It can be reset to the root top module by 'undo_eco'. It is alias command of 'set_top'
|
8 |
+
</pre>
|
src_info_hf/api.current_instance.txt
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___current_instance'>current_instance</h3>
|
2 |
+
<pre>Set the current instance, alias of 'set_inst'
|
3 |
+
<b>Usage:</b> current_instance($instance);
|
4 |
+
$instance: Set $instance as the current instance.
|
5 |
+
If the argument is missing, return the current setting
|
6 |
+
".." set to parent module, "~" set to the most top level module
|
7 |
+
<b>Note:</b> It can be reset to the root top module by 'undo_eco'. It has same effect of 'set_top' and 'current_design'
|
8 |
+
</pre>
|
src_info_hf/api.del_gate.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___del_gate'>del_gate</h3>
|
2 |
+
<pre>ECO command. Delete gate
|
3 |
+
<b>Usage:</b> del_gate($inst);
|
4 |
+
$inst: The instance to be deleted.
|
5 |
+
</pre>
|
src_info_hf/api.del_net.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___del_net'>del_net</h3>
|
2 |
+
<pre>ECO command. Delete net
|
3 |
+
<b>Usage:</b> del_net($net);
|
4 |
+
$net: The net to be deleted.
|
5 |
+
</pre>
|
src_info_hf/api.del_port.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___del_port'>del_port</h3>
|
2 |
+
<pre>ECO command. Delete port
|
3 |
+
<b>Usage:</b> del_port($port);
|
4 |
+
$port: The port to be deleted.
|
5 |
+
</pre>
|
src_info_hf/api.dft_drc.txt
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___dft_drc'>dft_drc</h3>
|
2 |
+
<pre>DFT DRC checker
|
3 |
+
<b>Usage:</b> my $error = dft_drc(@options);
|
4 |
+
$error: DRC errors in the checker
|
5 |
+
@options:
|
6 |
+
-single: One clock for each scan chain
|
7 |
+
-glitch: Check reset/set pin glitch
|
8 |
+
|
9 |
+
<b>Examples:</b>
|
10 |
+
|
11 |
+
#1. Run full DFT DRC
|
12 |
+
dft_drc;
|
13 |
+
#2. One clock for each scan chain in DRC
|
14 |
+
dft_drc("-single");
|
15 |
+
#3. Check reset/set pin glitch
|
16 |
+
dft_drc("-glitch");
|
17 |
+
</pre>
|
src_info_hf/api.elab_rtl.txt
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___elab_rtl'>elab_rtl</h3>
|
2 |
+
<pre>Elaborate on RTL design
|
3 |
+
<b>Usage:</b> elab_rtl();
|
4 |
+
</pre>
|
src_info_hf/api.elaborate.txt
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___elaborate'>elaborate</h3>
|
2 |
+
<pre>Elaborate and compile RTL files
|
3 |
+
<b>Usage:</b> elaborate();
|
4 |
+
</pre>
|
src_info_hf/api.exist_inst.txt
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___exist_inst'>exist_inst</h3>
|
2 |
+
<pre>Check if an instance exists
|
3 |
+
<b>Usage:</b>my $ret = exist_inst($inst);
|
4 |
+
$inst: The instance for checking
|
5 |
+
$ret: 1, the instance exists 0, the instance does not exist
|
6 |
+
</pre>
|
src_info_hf/api.exist_wire.txt
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___exist_wire'>exist_wire</h3>
|
2 |
+
<pre>Check if a wire exists
|
3 |
+
<b>Usage:</b>my $ret = exist_wire($wire);
|
4 |
+
$wire: The wire name for checking
|
5 |
+
$ret: 1: exists 0: not exist
|
6 |
+
</pre>
|
src_info_hf/api.find_equal_nets.txt
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___find_equal_nets'>find_equal_nets</h3>
|
2 |
+
<pre>Find equivalent nets in IMP for the listed nets in REF, the results are printed out on the screen
|
3 |
+
<b>Usage:</b> find_equal_nets(@ref_nets);
|
4 |
+
options: ("help","full=i")
|
5 |
+
-help: Print this info
|
6 |
+
|
7 |
+
<b>Examples:</b>
|
8 |
+
|
9 |
+
#1. Find IMP equal nets for 'mbist_done', 'sync_start' in REF
|
10 |
+
find_equal_nets('mbist_done', 'sync_start');
|
11 |
+
</pre>
|
src_info_hf/api.fix_design.txt
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___fix_design'>fix_design</h3>
|
2 |
+
<pre>ECO command. Fix the whole design in global mode
|
3 |
+
<b>Usage:</b> fix_design(@options);
|
4 |
+
@options:
|
5 |
+
-help: Print this information
|
6 |
+
-opt_set optimization_set: Patch optimization set, 0: area/timing 1: cell count, default 0
|
7 |
+
-no_patch_opt: Disable patch optimization. Also see API set_no_patch_opt
|
8 |
+
-flatten: Enable flatten mode ECO. The default mode is hierarchical
|
9 |
+
-list_file the_list_file: The ECO point list file converted from RTL-to-RTL LEC result
|
10 |
+
The list file format:
|
11 |
+
inst u_def/u_sdef/state_reg_1_
|
12 |
+
pin u_control/u_sreg/u_mem_128x24/A[0]
|
13 |
+
port PORT_READY_OUT
|
14 |
+
-iteration iteration_number: Fix design iteration by default 3 times.
|
15 |
+
The tool repeats the fix process until there is no non-equivalent points or iteration number reached
|
16 |
+
<b>Examples:</b>
|
17 |
+
|
18 |
+
#1. Fix design on module 'VIDEO_TOP' and its sub-modules
|
19 |
+
set_top('VIDEO_TOP');
|
20 |
+
set_ignore_output("TEST_SO*");
|
21 |
+
set_pin_constant("TEST_EN", 0);
|
22 |
+
fix_design;
|
23 |
+
save_session("this_eco");
|
24 |
+
my $error = LEC;
|
25 |
+
|
26 |
+
#2. Do ECO in flatten mode
|
27 |
+
fix_design("-flatten");
|
28 |
+
|
29 |
+
#3. Do ECO on points listed in the file
|
30 |
+
fix_design("-list_file", $list_file);
|
31 |
+
</pre>
|
src_info_hf/api.fix_logic.txt
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___fix_logic'>fix_logic</h3>
|
2 |
+
<pre>ECO command. Fix listed points
|
3 |
+
<b>Usage:</b> fix_logic(@pin_port_list,@options);
|
4 |
+
@options:
|
5 |
+
-force: Force the tool to replace the logic cone of the points in @pin_port_list
|
6 |
+
@pin_port_list:
|
7 |
+
List of the pins or ports whose logic will be fixed by the reference logic in Reference Netlist
|
8 |
+
The format is "sic_cnt_reg_0/D","sic_cnt_reg_1/D",'\bbr_ccd_reg[0] /D',"out_port"
|
9 |
+
'\' should be kept if the instance has '\' as prefix.
|
10 |
+
E.G. '\bbr_ccd_reg[0] ' instance has '\' and last space in the name.
|
11 |
+
|
12 |
+
|
13 |
+
<b>Examples:</b>
|
14 |
+
|
15 |
+
#1. Fix state_regs's D inputs
|
16 |
+
fix_logic("state_reg_0/D", "state_reg_1/D");
|
17 |
+
|
18 |
+
#2. Fix state_regs's D inputs and one output port
|
19 |
+
fix_logic("state_reg_0/D", "state_reg_1/D", "out_port");
|
20 |
+
|
21 |
+
#3. Add one new flop, input pins have the same connections as the Reference Netlist
|
22 |
+
# and the output is floating, -recover option sets to 0
|
23 |
+
fix_logic('new_flop_reg/D', 'new_flop_reg/CK', 'new_flop_reg/RB');
|
24 |
+
</pre>
|
src_info_hf/api.flatten_modules.txt
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___flatten_modules'>flatten_modules</h3>
|
2 |
+
<pre>Flatten hierarchical modules in reference netlist
|
3 |
+
<b>Usage:</b> flatten_modules(@module_names);
|
4 |
+
@module_names: List of modules to be flatten
|
5 |
+
|
6 |
+
<b>Examples:</b>
|
7 |
+
|
8 |
+
flatten_modules("retime_1", "sync_cell_0");
|
9 |
+
|
10 |
+
</pre>
|
src_info_hf/api.get_cell_cofactors.txt
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_cell_cofactors'>get_cell_cofactors</h3>
|
2 |
+
<pre>Get combinational cell pin Shannon expansion cofactors
|
3 |
+
<b>Usage:</b> @cofactors = get_cell_cofactors($cell, $pin);
|
4 |
+
$cell: Leaf cell name
|
5 |
+
$pin: Input pin name
|
6 |
+
@cofactors: Shannon cofactors for the pin of the cell
|
7 |
+
It has two items if the cell is combinational
|
8 |
+
It is empty if the cell is sequential or black-box
|
9 |
+
|
10 |
+
<b>Examples:</b>
|
11 |
+
|
12 |
+
#1. NAND2X1 A pin
|
13 |
+
@ret = get_cell_cofactors("NAND2X1", "A"); # @ret = (1, B);
|
14 |
+
#2. AOI222X1 A0 pin
|
15 |
+
@ret = get_cell_cofactors("OAI222X4", "A0");
|
16 |
+
returned @ret = ("!(A1*(B0*(C0+C1)+!B0*(B1*(C0+C1))))", "!(B0*(C0+C1)+!B0*(B1*(C0+C1)))");
|
17 |
+
|
18 |
+
</pre>
|
src_info_hf/api.get_cell_info.txt
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_cell_info'>get_cell_info</h3>
|
2 |
+
<pre>Get information of a module or instance
|
3 |
+
<b>Usage:</b> $data = get_cell_info($module_or_inst, @options);
|
4 |
+
$module_or_inst: The module or instance's name
|
5 |
+
@options:
|
6 |
+
-help: Print this information
|
7 |
+
-conns: Get Connections of the item, only when it's instance
|
8 |
+
-type: Get the item's type information. It can be 'ff','cg,'latch','buf',
|
9 |
+
run 'get_lib_cells -type_info' for all existing type in the current libraries
|
10 |
+
An array is returned if this option is present
|
11 |
+
-libname: Get the library name that the cell is in
|
12 |
+
-area: Get the area of the item
|
13 |
+
-size: Get the size of the item
|
14 |
+
-fun: Get the function string of the item
|
15 |
+
-leakage: Get the leakage of the item
|
16 |
+
-ref: Same as 'get_ref instance' if the item property is instance
|
17 |
+
-context: Get detail library information
|
18 |
+
-attribute attribute_name: Check if the cell has the attribute set. 0 or 1 is returned
|
19 |
+
$data: Returned data, if '-attribute' option is present, $data is 0 or 1
|
20 |
+
In option is '-conns' case,
|
21 |
+
It is a hash having the following data structure
|
22 |
+
my $module = $hash->{module};
|
23 |
+
my $instance: $hash->{instance};
|
24 |
+
foreach my $port (keys %{$hash->{connections}}){
|
25 |
+
my $net = $hash->{connections}{$port};
|
26 |
+
}
|
27 |
+
|
28 |
+
If no option is present, it return the item's property:
|
29 |
+
leaf_instance leaf_module hierarchical_instance hierarchical_module
|
30 |
+
|
31 |
+
<b>Examples:</b>
|
32 |
+
|
33 |
+
#1. Get area of one leaf cell
|
34 |
+
my $area = get_cell_info("AND2X2", "-area");
|
35 |
+
|
36 |
+
#2. Get an attribute of one leaf cell
|
37 |
+
my $is_iso = get_cell_info("ISOX2", "-attribute", "is_isolation_cell");
|
38 |
+
|
39 |
+
</pre>
|
src_info_hf/api.get_cells.txt
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_cells'>get_cells</h3>
|
2 |
+
<pre>Get all cells in the current module or sub-modules
|
3 |
+
<b>Usage:</b> my @cells = get_cells($pattern, @options);
|
4 |
+
$pattern: The pattern matching instance name, '*', 'U*', 'U123' or '/UI_.*_./'
|
5 |
+
It can have path, 'u_clk/*', 'u_abc/u_def/*'
|
6 |
+
@options:
|
7 |
+
-help: Print this information
|
8 |
+
-hier: Or -h, do the command hierarchically
|
9 |
+
-ref ref_pattern: Get cells that has reference matching ref_pattern, E.G. -ref OAI*
|
10 |
+
-type type_pattern: Type_pattern can be 'ff','latch','itiming','cg','not','rom','ram' ...
|
11 |
+
run 'get_lib_cells -type_info' for all existing type in the current libraries
|
12 |
+
-type_match type_pattern: Get cells that have one of the types matches the type_pattern
|
13 |
+
-leaf: Only leaf cells
|
14 |
+
-new: Only new created ECO instances
|
15 |
+
-verbose: To print out reference with instance
|
16 |
+
-dotpath: Path delimit is '.' instead of '/'
|
17 |
+
-nobackslash: Remove backslash
|
18 |
+
-nonscan: Flops/sync-cells not in scan chain including those scan pins tied off
|
19 |
+
@cells: Returned array with all instances matched
|
20 |
+
|
21 |
+
<b>Examples:</b>
|
22 |
+
|
23 |
+
#1. Get all instances in the current module
|
24 |
+
my @cells = get_cells('*');
|
25 |
+
|
26 |
+
#2. Get all instances in the current module
|
27 |
+
my @cells = get_cells();
|
28 |
+
|
29 |
+
#3. Get all instances matching 'U234*' in the current module
|
30 |
+
my @cells = get_cells('U234*');
|
31 |
+
|
32 |
+
#4. Regular expression. Get all instances starting with U and followed by
|
33 |
+
# two characters, like U10, U99
|
34 |
+
my @cells = get_cells('/U../');
|
35 |
+
|
36 |
+
#5. Get all instances matching *reg_*_ hierarchically
|
37 |
+
my @cells = get_cells('*reg_*_', '-hier');
|
38 |
+
|
39 |
+
#6. Get all instances hierarchically and having reference matching DFF*
|
40 |
+
my @cells = get_cells('*', '-hier', '-ref', 'DFF*');
|
41 |
+
|
42 |
+
#7. Get all instances in 'u_kb'
|
43 |
+
my @cells = get_cells('u_kb/*');
|
44 |
+
|
45 |
+
#8. Get all flops, sync-cells not in scan chain
|
46 |
+
my @cells = get_cells('-hier', '-nonscan');
|
47 |
+
</pre>
|
src_info_hf/api.get_conns.txt
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_conns'>get_conns</h3>
|
2 |
+
<pre>Get connections of net or pin in the top level module, return the leafs and the hierarchical connections
|
3 |
+
<b>Usage:</b> @result = get_conns($net_or_pin, @options);
|
4 |
+
$net_or_pin: The net name or pin name that needs to get connections.
|
5 |
+
@options:
|
6 |
+
-driver: Return driver only
|
7 |
+
-load: Return load only
|
8 |
+
-count: Return connections count
|
9 |
+
@result: a two dimension array
|
10 |
+
instance, port_name, pin_or_port, load_or_driver, is_it_a_leaf,
|
11 |
+
@result = ([instance_0, pin_0, 'pin', 'load', 1],
|
12 |
+
...
|
13 |
+
)
|
14 |
+
|
15 |
+
<b>Examples:</b>
|
16 |
+
|
17 |
+
#1. Net 'n599' has three connections, instance 'U198' is the driver
|
18 |
+
get_conns("n599");
|
19 |
+
gte_344 A[14] pin load 0
|
20 |
+
U198 Y pin driver 1
|
21 |
+
U94 AN pin load 1
|
22 |
+
|
23 |
+
#2. Net 'qcifhbeat' has three connections, it is output port of the current top level module
|
24 |
+
get_conns("qcifhbeat")
|
25 |
+
qcifhbeat port load
|
26 |
+
U80 A pin load 1
|
27 |
+
qcifhbeat_reg Q pin driver 1
|
28 |
+
|
29 |
+
#3. The argument in inst/pin format
|
30 |
+
get_conns("U187/A")
|
31 |
+
U294 A1 pin load 1
|
32 |
+
U187 A pin load 1
|
33 |
+
U80 Y pin driver 1
|
34 |
+
|
35 |
+
#4. Return connections count
|
36 |
+
get_conns("U187/A", "-count");
|
37 |
+
3
|
38 |
+
|
39 |
+
|
40 |
+
</pre>
|
src_info_hf/api.get_coord.txt
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_coord'>get_coord</h3>
|
2 |
+
<pre>Get an instance's coordination
|
3 |
+
<b>Usage:</b> my ($x, $y) = get_coord($instance);
|
4 |
+
$instance: Instance name
|
5 |
+
|
6 |
+
<b>Examples:</b>
|
7 |
+
|
8 |
+
my ($x, $y) = get_coord("xbar/U1234");
|
9 |
+
# $x=100, $y=200 in um
|
10 |
+
</pre>
|
src_info_hf/api.get_definition.txt
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_definition'>get_definition</h3>
|
2 |
+
<pre>Get instantiation of instance
|
3 |
+
<b>Usage:</b> my $line = get_definition($inst);
|
4 |
+
$inst: Instance name.
|
5 |
+
$line: The instantiating line
|
6 |
+
|
7 |
+
<b>Examples:</b>
|
8 |
+
|
9 |
+
get_definition('U78');
|
10 |
+
Returns "AND2X1 U78(.A(n1), .B(n2), .Z(n3));"
|
11 |
+
</pre>
|
src_info_hf/api.get_driver.txt
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_driver'>get_driver</h3>
|
2 |
+
<pre>Get the driver of a net or pin
|
3 |
+
<b>Usage:</b> @driver = get_driver($point, @options);
|
4 |
+
$point: net name or pin name, 'n12345' or 'U12345/A1'
|
5 |
+
@options:
|
6 |
+
-pin: Return in "inst/pin" format, E.G. "state_reg/Q"
|
7 |
+
Return an array if '-pin' is not present
|
8 |
+
-nonbuf: Trace the drivers until none buffer
|
9 |
+
@driver: The driver in array format, if '-pin' is not present.
|
10 |
+
If the point is floating, @driver is empty,
|
11 |
+
$driver[0]: Driver instance name. It is empty if the driver is port
|
12 |
+
$driver[1]: Driver pin or port name. If the driver is a port, it is the port name
|
13 |
+
$driver[2]: Driver type. It is string "pin" or "port" depending on the driver is port or leaf cell
|
14 |
+
$driver[3]: Driver phase. It is valid when -nonbuf is present,
|
15 |
+
indicating if the driver path is inverted
|
16 |
+
0: not inverted 1: inverted
|
17 |
+
|
18 |
+
<b>Note:</b>
|
19 |
+
1. If '-pin' is present, return a scalar, $driver = get_driver("n12345", "-pin");
|
20 |
+
2. Use 'get_drivers' if there are multiple drivers, the return data has different structure
|
21 |
+
|
22 |
+
<b>Examples:</b>
|
23 |
+
|
24 |
+
#1. Get driver of a net
|
25 |
+
@driver = get_driver("net12345");
|
26 |
+
@driver has content of ("U1247", "Y", "pin");
|
27 |
+
|
28 |
+
#2. port_abc is input port
|
29 |
+
@driver = get_driver("port_abc");
|
30 |
+
@driver has content of ("", "port_abc", "port");
|
31 |
+
|
32 |
+
#3. Return in instance/pin format
|
33 |
+
$driver = get_driver("net12345", "-pin");
|
34 |
+
$driver has content of "U1247/Y"
|
35 |
+
</pre>
|
src_info_hf/api.get_drivers.txt
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_drivers'>get_drivers</h3>
|
2 |
+
<pre>Get the drivers of a net or pin
|
3 |
+
<b>Usage:</b> @drivers = get_drivers($point, @options);
|
4 |
+
$point: net name or pin name, 'n12345' or 'U12345/A1'
|
5 |
+
@options:
|
6 |
+
-nonbuf: Trace the drivers until none buffer
|
7 |
+
@drivers: An array of the drivers, if the point is floating, @drivers is empty,
|
8 |
+
if the point has multi-drivers, @drivers has more than one items.
|
9 |
+
For each item in @drivers
|
10 |
+
Index 0: instance, it is empty if the driver is port
|
11 |
+
Index 1: pin or port, if the driver is port, return port
|
12 |
+
Index 2: string "pin" or "port" depending on the driver is port or leaf cell
|
13 |
+
Index 3: indicating drive path inverted or not
|
14 |
+
If 'nonbuf' is present, the last item in @drivers is the non-buffer driver
|
15 |
+
So '$nonbuf = pop @drivers' can get the non-buffer driver
|
16 |
+
<b>Note:</b>
|
17 |
+
Use 'get_driver' instead if the net has only one driver and 'nonbuf' option is not used
|
18 |
+
|
19 |
+
<b>Examples:</b>
|
20 |
+
|
21 |
+
#1. Get drivers of a net
|
22 |
+
@drivers = get_drivers("net12345");
|
23 |
+
@drivers has content of (["U1247", "Y", "pin"]);
|
24 |
+
|
25 |
+
#2. 'port_abc' is input port
|
26 |
+
@drivers = get_drivers("port_abc");
|
27 |
+
@drivers has content of (["", "port_abc", "port"]);
|
28 |
+
|
29 |
+
#3. Buffers in the path
|
30 |
+
@drivers = get_drivers("state_reg/CK", "-nonbuf");
|
31 |
+
@drivers has content of
|
32 |
+
(
|
33 |
+
["buf_inst0", "Y", "pin"],
|
34 |
+
["inv_inst1", "Y", "pin"],
|
35 |
+
["and_inst2", "Y", "pin"]
|
36 |
+
)
|
37 |
+
</pre>
|
src_info_hf/api.get_instance.txt
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_instance'>get_instance</h3>
|
2 |
+
<pre>Get instance in the top level module
|
3 |
+
<b>Usage:</b> my $instance = get_instance($pattern, @options);
|
4 |
+
$pattern: Match pattern, can have wildcard "*", if it is empty, it is treated as "*"
|
5 |
+
@options:
|
6 |
+
-module: module name to have its instance name found
|
7 |
+
$instance: Return the first instance matching
|
8 |
+
|
9 |
+
<b>Examples:</b>
|
10 |
+
|
11 |
+
#1. The fist hierarchical instance matching 'ui_*'.
|
12 |
+
$instance = get_instance("ui_*");
|
13 |
+
|
14 |
+
#2. Find the instance name of module 'enet_control'
|
15 |
+
$instance = get_instance("-module", "enet_control");
|
16 |
+
</pre>
|
src_info_hf/api.get_instances.txt
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_instances'>get_instances</h3>
|
2 |
+
<pre>Get all hierarchical instances in the top level module
|
3 |
+
<b>Usage:</b> my @instances = get_instances($pattern);
|
4 |
+
$pattern: Match pattern, can have wildcard "*", if it is empty, it is treated as "*"
|
5 |
+
|
6 |
+
@instances: Array of the hierarchical instances
|
7 |
+
|
8 |
+
<b>Examples:</b>
|
9 |
+
|
10 |
+
@instances = get_instances("UI_*"); # Any hierarchical instances with UI_ as prefix.
|
11 |
+
@instances = get_instances; # All hierarchical instances.
|
12 |
+
</pre>
|
src_info_hf/api.get_leaf_pin_dir.txt
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_leaf_pin_dir'>get_leaf_pin_dir</h3>
|
2 |
+
<pre>Get leaf cell pin's direction input/output/inout
|
3 |
+
<b>Usage:</b> my $dir = get_leaf_pin_dir("$leaf_name/$pin");
|
4 |
+
$pin: pin name, E.G. A or B or Y
|
5 |
+
$leaf: Leaf cell name, E.G. NAND2X2
|
6 |
+
$dir: return direction, input/output/inout
|
7 |
+
|
8 |
+
<b>Examples:</b>
|
9 |
+
|
10 |
+
my $dir = get_leaf_pin_dir("NAND2X2/A");
|
11 |
+
|
12 |
+
</pre>
|
src_info_hf/api.get_leafs_count.txt
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_leafs_count'>get_leafs_count</h3>
|
2 |
+
<pre>Get all leaf cells name and count in the top level module, return an array
|
3 |
+
<b>Usage:</b> @leaf_count = get_leafs_count;
|
4 |
+
@leaf_count: Array of leaf name and count
|
5 |
+
( [leaf0, cnt0], [leaf1, cnt1], ...)
|
6 |
+
|
7 |
+
<b>Examples:</b>
|
8 |
+
|
9 |
+
@leaf_count = get_leafs_count;
|
10 |
+
foreach my $leaf_point (@leaf_count){
|
11 |
+
my $leaf_name = $leaf_point->[0];
|
12 |
+
my $count = $leaf_point->[1];
|
13 |
+
print "LEAF: $leaf_name has $count cells
|
14 |
+
";
|
15 |
+
}
|
16 |
+
</pre>
|
src_info_hf/api.get_lib_cells.txt
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_lib_cells'>get_lib_cells</h3>
|
2 |
+
<pre>Get leaf gates in libraries
|
3 |
+
<b>Usage:</b> my @cells = get_lib_cells($pattern, @options);
|
4 |
+
@options:
|
5 |
+
-help: This information
|
6 |
+
-char: All cells characterization
|
7 |
+
-type leaf_type: Get leaf gates matching type.
|
8 |
+
Leaf_type can be 'ff', 'latch', 'cg', 'buf', 'not', 'and' ...
|
9 |
+
-type_info: List all types in the current loaded libraries
|
10 |
+
-verbose: If $pattern matches only one lib cell, print the cell lib information
|
11 |
+
$pattern: Library cell name pattern, can have '*'.
|
12 |
+
@cells: Return array with name matching
|
13 |
+
</pre>
|
src_info_hf/api.get_loads.txt
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_loads'>get_loads</h3>
|
2 |
+
<pre>Get loads of net in the top level module, return the leafs connections
|
3 |
+
<b>Usage:</b> @result = get_loads($net_or_pin, @options);
|
4 |
+
$net_or_pin: The net name or pin name that needs to get fanouts.
|
5 |
+
@options:
|
6 |
+
-nonbuf: Trace the loads until none buffer
|
7 |
+
-bypbuf: Don't include buffer/inverter in the return array
|
8 |
+
-hier: Loads cross hierarchies
|
9 |
+
-fanend: Fanout endpoints, flops or ports
|
10 |
+
@result: A two dimension array. Each item has format of 'instance' and 'pin_name' if
|
11 |
+
the load is leaf cell. Or 'port_name' and 'GOF_PIN_IN'
|
12 |
+
@result = ([instance_0, pin_0],
|
13 |
+
[instance_1, pin_1],
|
14 |
+
[port_name, GOF_PIN_IN],
|
15 |
+
...
|
16 |
+
)
|
17 |
+
|
18 |
+
|
19 |
+
</pre>
|
src_info_hf/api.get_loads_phase.txt
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_loads_phase'>get_loads_phase</h3>
|
2 |
+
<pre>Get loads of net with phase in the top level module, return the non-buffer/inverter leafs connections
|
3 |
+
<b>Usage:</b> @result = get_loads_phase($net_or_pin, @options);
|
4 |
+
$net_or_pin: The net name or pin name that needs to get fanouts.
|
5 |
+
@options:
|
6 |
+
-help: This information
|
7 |
+
@result: A two dimension array. Each item has format of 'instance', 'pin_name' and 'phase', if
|
8 |
+
the load is leaf cell. Or 'port_name', 'GOF_PIN_IN' and 'phase'
|
9 |
+
@result = ([instance_0, leaf_0, pin_0, 0],
|
10 |
+
[instance_1, leaf_0, pin_1, 1],
|
11 |
+
[port_name, GOF_CELL_OUTPORT,GOF_PIN_IN, 1],
|
12 |
+
...
|
13 |
+
)
|
14 |
+
|
15 |
+
|
16 |
+
</pre>
|
src_info_hf/api.get_logic_cone.txt
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_logic_cone'>get_logic_cone</h3>
|
2 |
+
<pre>Get logic cone of nets or pins
|
3 |
+
<b>Usage:</b> $result = get_logic_cone(@InstancePinList, @options);
|
4 |
+
@InstancePinList: Instance/pin and net list.
|
5 |
+
$result: 1, the command fails. 0, the command completed successfully
|
6 |
+
@options:
|
7 |
+
-o file_name: Write output to the file. Default logic_cone.v
|
8 |
+
|
9 |
+
<b>Examples:</b>
|
10 |
+
|
11 |
+
my @InstPin = ('abc_reg/D', 'n12345');
|
12 |
+
my $ret = get_logic_cone(@InstPin, '-o', 'MyLogicCone.v');
|
13 |
+
# The logic cone is written out to verilog file 'MyLogicCone.v'
|
14 |
+
</pre>
|
src_info_hf/api.get_modules.txt
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_modules'>get_modules</h3>
|
2 |
+
<pre>Get all hierarchical modules under current module
|
3 |
+
<b>Usage:</b> @modules = get_modules($pattern, @options);
|
4 |
+
$pattern: Match pattern, can have wildcard "*", if it is empty, it is treated as "*"
|
5 |
+
@options:
|
6 |
+
-help: Print this information
|
7 |
+
-hier: Get all modules hierarchically
|
8 |
+
@modules: Modules list, ("module0", "module1", ...)
|
9 |
+
|
10 |
+
<b>Examples:</b>
|
11 |
+
|
12 |
+
@modules = get_modules("*TM*"); # Any hierarchical modules with TM in the name.
|
13 |
+
@modules = get_modules; # All hierarchical modules.
|
14 |
+
@modules = get_modules("-hier"); # All hierarchical modules and sub-modules under current module.
|
15 |
+
</pre>
|
src_info_hf/api.get_net_of.txt
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_net_of'>get_net_of</h3>
|
2 |
+
<pre>Get net name connecting to a pin
|
3 |
+
<b>Usage:</b> my $net = get_net_of($pin);
|
4 |
+
$pin: The pin of the instance, 'U1234.A1' or 'U1234/A1'
|
5 |
+
$net: The net name connecting to the pin
|
6 |
+
</pre>
|
src_info_hf/api.get_nets.txt
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_nets'>get_nets</h3>
|
2 |
+
<pre>Get nets that matching pattern
|
3 |
+
<b>Usage:</b> @nets = get_nets($pattern, @options);
|
4 |
+
$pattern: The net naming pattern, "*" or empty for all nets
|
5 |
+
@options:;
|
6 |
+
-const0: Get all constant zero nets
|
7 |
+
-const1: Get all constant one nets
|
8 |
+
@nets: returned net array.
|
9 |
+
|
10 |
+
<b>Examples:</b>
|
11 |
+
|
12 |
+
1#. Get all nets.
|
13 |
+
@nets = get_nets("*");
|
14 |
+
|
15 |
+
2#. All nets with 'dbuffer' as prefix
|
16 |
+
@nets = get_nets("dbuffer_*");
|
17 |
+
|
18 |
+
3#. Get constant nets
|
19 |
+
@nets = get_nets("-const0");
|
20 |
+
|
21 |
+
</pre>
|
src_info_hf/api.get_path.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_path'>get_path</h3>
|
2 |
+
<pre>Get current hierarchical path
|
3 |
+
<b>Usage:</b> $path = get_path();
|
4 |
+
$path: The current path
|
5 |
+
</pre>
|
src_info_hf/api.get_pins.txt
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_pins'>get_pins</h3>
|
2 |
+
<pre>Get pins of instance or module
|
3 |
+
<b>Usage:</b> @pins = get_pins($name, @options);
|
4 |
+
$name: The instance or module name, it can be hierarchical or leaf
|
5 |
+
@options:
|
6 |
+
-input: Get input pins
|
7 |
+
-output: Get output pins
|
8 |
+
-inout: Get inout pins
|
9 |
+
-clock: Get clock pin, only valid for sequential cell, flop latch and gated-clock-cell
|
10 |
+
-reset: Get reset pin, return "" if it doesn't exist
|
11 |
+
-set: Get set pin, return "" if it doesn't exist
|
12 |
+
-data: Get data pins
|
13 |
+
-attribute attribute: Get pins with the attribute
|
14 |
+
-nextstate_type type: Get pins matching the type
|
15 |
+
which can be 'data', 'load', 'scan_in', 'scan_enable'
|
16 |
+
This option is only valid for sequential cell, flop, latch and gated-clock-cell
|
17 |
+
If no option is present, get all pins
|
18 |
+
@pins: All pins returned, in 'instance/pin' format
|
19 |
+
|
20 |
+
<b>Examples:</b>
|
21 |
+
|
22 |
+
#1. Get input pins of a hierarchical instance
|
23 |
+
my @pins = get_pins("-input", "u_abc/U123");
|
24 |
+
Result @pins = ("u_abc/U123/A", "u_abc/U123/B")
|
25 |
+
|
26 |
+
#2. Get pins of a leaf cell
|
27 |
+
@pins = get_pins("AND2X2");
|
28 |
+
Result @pins = ("A","B","Y")
|
29 |
+
|
30 |
+
</pre>
|
src_info_hf/api.get_ports.txt
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_ports'>get_ports</h3>
|
2 |
+
<pre>Get all ports in the current top level module
|
3 |
+
<b>Usage:</b> @matching_ports = get_ports($pattern, @options);
|
4 |
+
$pattern: Match pattern, can have wildcard "*". If it is empty, it is treated as "*"
|
5 |
+
@options:
|
6 |
+
-input: Get input ports only
|
7 |
+
-output: Get output ports only
|
8 |
+
-inout: Get inout ports only
|
9 |
+
-bus: Get ports in bus format instead of bit blast.
|
10 |
+
The API returns an array point if this option present
|
11 |
+
The item in the array has format of [port, IsBus, MaxIndex, MinIndex]
|
12 |
+
if IsBus == 1, MaxIndex is the Max Index of the bus, E.G, 7 if the bus is port_a[7:0]
|
13 |
+
if ISBus==0, MaxIndex and MinIndex are not defined
|
14 |
+
|
15 |
+
If no option is present, get all ports
|
16 |
+
|
17 |
+
@matching_ports: Return ports matching the pattern and the option specified in
|
18 |
+
the current top level module
|
19 |
+
|
20 |
+
<b>Examples:</b>
|
21 |
+
|
22 |
+
@ports = get_ports("-input", "dsp2mc_*"); # Get input ports with "dsp2mc_" as prefix
|
23 |
+
@ports = get_ports; # Get all ports
|
24 |
+
|
25 |
+
</pre>
|
src_info_hf/api.get_ref.txt
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 id='___get_ref'>get_ref</h3>
|
2 |
+
<pre>Get the reference of the instance, return leaf cell name or hierarchical module name
|
3 |
+
<b>Usage:</b> $reference = get_ref($instance);
|
4 |
+
$instance: Instance name, "U123"
|
5 |
+
$reference: Return reference name, "NAND2X4"
|
6 |
+
</pre>
|