Beruflich Dokumente
Kultur Dokumente
Reference Manual
Version N-2017.12-SP2, March 2018
Copyright Notice and Proprietary Information
©2018 Synopsys, Inc. All rights reserved. This Synopsys software and all associated documentation are proprietary to
Synopsys, Inc. and may only be used pursuant to the terms and conditions of a written license agreement with
Synopsys, Inc. All other use, reproduction, modification, or distribution of the Synopsys software or the associated
documentation is strictly prohibited.
Destination Control Statement
All technical data contained in this publication is subject to the export control laws of the United States of America.
Disclosure to nationals of other countries contrary to United States law is prohibited. It is the reader's responsibility to
determine the applicable regulations and to comply with them.
Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH
REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Trademarks
Synopsys and certain Synopsys product names are trademarks of Synopsys, as set forth at
http://www.synopsys.com/Company/Pages/Trademarks.aspx.
All other product or company names may be trademarks of their respective owners.
Third-Party Links
Any links to third-party websites included in this document are for your convenience only. Synopsys does not endorse
and is not responsible for such websites and their practices, including privacy practices, availability, and content.
Synopsys, Inc.
690 E. Middlefield Road
Mountain View, CA 94043
www.synopsys.com
2. Runset Functions: A - I
adjacent_edge() and not_adjacent_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2
and() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-9
and_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-12
and_overlap() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-14
angle_edge() and not_angle_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-17
annotate_by_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-20
iii
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Contents iv
IC Validator Reference Manual Version N-2017.12-SP2
coloring_links() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-163
coloring_links_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-178
compare() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-182
connect(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-195
contains() and not_contains() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-198
copy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-201
copy_by_cells(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-204
copy_by_layout_equiv_cells(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-206
copy_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-208
copy_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-210
covered_by() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-212
create_ports() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-217
cutting() and not_cutting() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-220
data_filter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-227
data_limit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-230
data_limit_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-232
delta_edge() and not_delta_edge(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-234
delta_error() and not_delta_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-238
density() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-241
density_statistics_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-254
dev_dlink_library_close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-255
dev_dlink_library_open() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-256
device_connected_to() and device_not_connected_to() . . . . . . . . . . . . . . . . . . . . . 2-257
device_net_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-260
dfm_features() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-262
donut_holes() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-269
donuts() and not_donuts(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-273
drc_features() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-275
Chapter 2: Contents
Contents 2-vv
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
drc_features_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-279
drc_features_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-282
drc_features_marker() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-287
edge_extents() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-290
edge_features_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-292
edge_grow() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-295
edge_shrink() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-298
edge_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-302
edge_size_by_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-307
edges() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-313
edtext_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-315
eerc_analyze_netlist(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-316
eerc_create_device_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-322
eerc_create_device_list_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-324
eerc_create_net_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-327
eerc_import_net_properties_from_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-329
eerc_setup() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-332
eerc_write_net_missing_property_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-339
eerc_write_net_property_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-341
eerc_write_vue_debug_database() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-343
empty_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-344
empty_layer_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-345
empty_layer_marker(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-346
empty_violation() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-347
enclose() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-348
enclose_corner(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-380
enclose_corner_edge(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-386
enclose_edge() and not_enclose_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-392
Contents vi
IC Validator Reference Manual Version N-2017.12-SP2
enclose_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-417
enclosing() and not_enclosing() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-429
equiv_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-435
error_merge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-439
error_merge_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-442
error_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-444
error_to_link_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-461
exclude_milkyway_cell_types() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-464
exclude_milkyway_net_types() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-465
exclude_milkyway_route_guide_layers() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-466
exclude_milkyway_route_types() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-467
exclude_ndm_blockage_types() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-468
exclude_ndm_design_types() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-469
exclude_ndm_net_types() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-470
exclude_ndm_shape_uses() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-471
extend_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-472
extent() and not_extent() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-477
external_corner1() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-480
external_corner1_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-489
external_corner1_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-499
external_corner2() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-504
external_corner2_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-513
external_corner2_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-524
external1(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-529
external1_edge() and not_external1_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-559
external1_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-587
external2(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-598
external2_edge() and not_external2_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-638
Chapter 2: Contents
Contents vii
2-vii
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
external2_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-670
extract_devices() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-684
fill_pattern() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-686
fill_pattern_rings() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-693
filter(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-697
filter_off(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-707
flatten_by_cells(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-709
fopen() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-711
four_color() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-712
gds_library() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-717
gds_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-718
gendev() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-722
gendev_select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-737
get_layout_drawn_violation() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-742
get_layout_grid_violation() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-743
get_netlist_connect_database() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-744
get_substrate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-746
get_text_merged() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-747
get_text_reassign_shorted() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-748
get_text_renamed() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-749
get_text_shorted(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-750
get_text_unused(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-751
get_top_cell() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-752
gradient_density() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-753
grid_pattern_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-763
group_library() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-765
grouped_by() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-766
grow() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-768
Contents viii
IC Validator Reference Manual Version N-2017.12-SP2
hierarchy_auto_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-771
hierarchy_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-773
icvread() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-778
icvread_generate_results() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-780
icvread_layer_map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-783
icvread_spec_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-785
identify_fill(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-787
import_gds_cell() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-790
import_oasis_cell() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-792
incremental_connect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-793
incremental_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-796
inductor(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-799
init_compare_matrix() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-812
init_device_matrix(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-815
init_icvread_matrix() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-818
init_pex_layer_matrix() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-820
initialize_net_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-822
initialize_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-823
inside() and not_inside() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-824
inside_hole() and not_inside_hole() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-827
inside_point_touching_edge() and not_inside_point_touching_edge() . . . . . . . . . . 2-829
inside_touching_edge() and not_inside_touching_edge() . . . . . . . . . . . . . . . . . . . . 2-833
instance_property_number() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-837
interacting() and not_interacting() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-838
interacting_edge() and not_interacting_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-846
interacting_error() and not_interacting_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-849
internal_corner1() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-853
internal_corner1_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-859
Chapter 2: Contents
Contents ix
2-ix
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
internal_corner2() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-865
internal_corner2_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-872
internal1() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-879
internal1_edge() and not_internal1_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-896
internal1_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-913
internal2() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-922
internal2_edge() and not_internal2_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-949
internal2_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-976
intersections() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-988
intersections_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-995
3. Runset Functions: J - Z
label_text() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-2
layer_empty() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-5
layer_extent() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-7
layer_extent_list() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-9
layer_statistics() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-10
layer_statistics_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-14
layout_drawn_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-15
layout_grid_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-20
layout_integrity_by_cell() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-22
layout_integrity_by_marker_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-24
layout_integrity_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-27
length_edge() and not_length_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-29
level() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-33
level_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-37
level_to() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-39
level_to_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-42
Contents x
IC Validator Reference Manual Version N-2017.12-SP2
library() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-45
library_create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-49
library_import() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-50
lvs_black_box_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-53
lvs_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-56
map_capacitor() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-63
map_gendev(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-66
map_inductor() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-69
map_nmos() and map_pmos() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-72
map_np() and map_pn() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-76
map_npn() and map_pnp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-80
map_resistor(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-84
marker_merge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-87
match() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-88
merge_parallel() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-97
merge_parallel_off() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-105
merge_series() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-107
merge_series_off() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-115
milkyway_library() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-117
milkyway_merge_library_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-118
milkyway_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-127
milkyway_route_directives() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-137
mos_select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-142
move(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-146
move_edge(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-148
ndm_library(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-150
ndm_merge_library_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-151
ndm_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-160
Chapter 2: Contents
Contents xi
2-xi
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
negate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-168
negate_in_window() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-171
net_color_check() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-173
net_color_report_file(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-177
net_device_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-178
net_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-181
net_path_check() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-185
net_polygon_by_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-190
net_polygon_select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-192
net_property_select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-198
net_select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-203
net_select_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-210
net_select_inside_of_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-221
net_texted_with() and net_not_texted_with() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-226
netlist() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-229
nmos() and pmos() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-232
not() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-249
not_contained_by() and contained_by() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-251
not_covered_by() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-257
not_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-266
not_enclosed_by() and enclosed_by() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-268
np() and pn() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-274
npn() and pnp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-288
oasis_library() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-302
oasis_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-303
off_grid() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-307
off_grid_xy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-309
openaccess_library() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-311
Contents xii
IC Validator Reference Manual Version N-2017.12-SP2
openaccess_merge_library_options(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-312
openaccess_options(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-318
optional_pattern_markers(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-332
or() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-334
or_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-336
or_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-339
or_list() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-341
outside() and not_outside() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-343
outside_point_touching_edge() and not_outside_point_touching_edge() . . . . . . . . 3-346
outside_touching() and not_outside_touching() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-349
outside_touching_edge() and not_outside_touching_edge() . . . . . . . . . . . . . . . . . . 3-354
partition(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-357
partition_chip() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-361
pattern_learn() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-364
pattern_library(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-397
pattern_library_compare(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-400
pattern_library_lock() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-404
pattern_library_merge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-407
pattern_library_read() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-410
pattern_match(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-416
pattern_options(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-421
pex_cell_extents_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-422
pex_cell_port_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-424
pex_color_layer_map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-426
pex_conducting_layer_map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-429
pex_generate_database(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-433
pex_generate_lpp_map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-437
pex_generate_process_map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-440
Chapter 2: Contents
Contents xiii
2-xiii
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
pex_generate_results() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-443
pex_generate_simple_database() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-446
pex_generate_simple_results(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-449
pex_ignore_cap_layer_map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-452
pex_library_layer_map_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-455
pex_lpp_map_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-457
pex_marker_layer_map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-459
pex_process_map_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-462
pex_qtf_layers() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-464
pex_qtf_layer_map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-466
pex_remove_layer_map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-470
pex_runset_report_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-473
pex_simple_layer_maps(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-475
pex_unconnected_layer_map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-477
pex_via_layer_map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-482
pex_viewonly_layer_map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-485
point_touching_edge() and not_point_touching_edge() . . . . . . . . . . . . . . . . . . . . . . 3-488
polygon_centers() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-491
polygon_extents() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-493
polygon_features() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-496
polygons() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-499
property_annotation_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-501
property_layer_convert(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-502
property_to_net() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-503
prototype_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-507
pull_down() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-511
pull_down_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-514
pull_down_to() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-516
Contents xiv
IC Validator Reference Manual Version N-2017.12-SP2
pull_down_to_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-519
python_validate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-521
read_group() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-523
read_group_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-526
read_group_text() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-528
read_layout_netlist() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-530
recalculate_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-538
recognize_gate(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-541
recognize_gate_off() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-549
rectangle_overlap() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-551
rectangle_spacing1() and not_rectangle_spacing1() . . . . . . . . . . . . . . . . . . . . . . . . 3-554
rectangle_spacing2() and not_rectangle_spacing2() . . . . . . . . . . . . . . . . . . . . . . . . 3-561
rectangles() and not_rectangles() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-567
rectangles_interacting() and not_rectangles_interacting() . . . . . . . . . . . . . . . . . . . . 3-569
reduce_four_color_graph() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-574
reduce_three_color_graph() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-577
redundant_vias(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-583
remove_fill() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-589
remove_fill_to_target() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-592
replace_text() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-598
required_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-600
res_select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-601
resistor() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-604
resolution_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-618
restart() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-621
restart_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-623
restart_layer_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-624
restart_layer_text() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-625
Chapter 2: Contents
Contents xv
2-xv
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
route_directives() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-626
run_options(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-631
schematic() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-638
sconnect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-647
select_by_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-649
select_marker_by_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-651
select_marker_by_string_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-653
shift_symmetry() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-655
short_equivalent_nodes() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-658
short_equivalent_nodes_off() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-664
shrink() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-666
size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-669
size_inside() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-674
size_outside() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-682
size_overlap() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-691
snap() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-693
snap_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-695
snap_to_pattern() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-697
snap_to_pattern_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-702
snapshot() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-705
soft_check() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-706
soft_connect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-709
soft_connect_check() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-713
spice_netlist_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-716
stamp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-717
stamp_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-720
system() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-724
text_net(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-725
Contents xvi
IC Validator Reference Manual Version N-2017.12-SP2
text_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-747
text_origin() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-760
text_to_double_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-762
text_to_string_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-764
texted_with() and not_texted_with() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-766
three_color() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-769
touching() and not_touching(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-774
touching_edge() and not_touching_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-777
two_color() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-780
unified_fill() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-793
vertex() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-866
vertex_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-870
vertices() and not_vertices() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-872
vertices_edge() and not_vertices_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-874
violation_empty() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-876
violations_empty(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-878
wide() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-879
wide_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-882
write_annotation_file(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-884
write_customized_spice() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-886
write_gds() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-891
write_group(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-907
write_milkyway() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-909
write_ndm() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-924
write_oasis() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-935
write_openaccess(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-947
write_spice() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-960
write_xref_spice() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-965
Chapter 2: Contents
Contents xvii
2-xvii
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
xor() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-970
xor_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-972
xref_to_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-974
xref_to_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-977
4. Utility Functions
General-Purpose Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-3
Math Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-3
Trigonometry Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-3
Equivalence Comparison Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-6
Double Comparison Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-8
Miscellaneous Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-10
Matrix Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-15
matrix_max(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-15
matrix_min() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-17
String Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-18
find() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-18
rfind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-19
split_string() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-19
strcasecmp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-21
strcmp(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-22
strcspn() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-23
string_match(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-23
strncasecmp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-24
strncmp(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-25
strspn() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-26
strtod() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-27
strtoi() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-27
substr() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-28
tolower() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-29
toupper() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-29
Diagnostics Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-29
error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-29
fatal(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-30
note() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-30
warning(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-30
Decimal and Integer Number Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-30
double_to_integer_coordinate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-31
integer_coordinate_to_double() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-31
Contents xviii
IC Validator Reference Manual Version N-2017.12-SP2
Chapter 2: Contents
Contents xix
2-xix
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
mos_length_min() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-50
mos_length_num_45() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-50
mos_length_num_90() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-50
mos_nrd() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-50
mos_nrs() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-51
mos_proximity_corner_list() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-51
mos_proximity_list() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-54
mos_source_area(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-60
mos_source_perim(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-61
mos_width_1() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-61
mos_width_2() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-61
mos_width_avg() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-61
mos_width_bend_1() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-62
mos_width_bend_2() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-62
mos_width_max() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-62
mos_width_min() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-62
mos_width_num_45() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-63
mos_width_num_90() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-63
Diode (NP and PN) Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-63
diode_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-63
diode_perim() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-63
Bipolar Transistor (NPN and PNP) Utility Functions . . . . . . . . . . . . . . . . . . . . . 4-64
bjt_base_area(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-64
bjt_base_perim(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-64
bjt_body_position() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-65
bjt_collector_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-65
bjt_collector_perim() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-65
bjt_emitter_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-65
bjt_emitter_perim() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-66
Resistor Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-66
res_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-66
res_length_1(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-67
res_length_2(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-67
res_length_avg(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-67
res_length_max() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-67
res_length_min(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-68
res_length_num_45() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-68
res_length_num_90() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-68
res_perim() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-68
res_resval(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-69
res_resval_assigned() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-69
Contents xx
IC Validator Reference Manual Version N-2017.12-SP2
res_width_avg() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-69
res_width_max() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-69
res_width_min() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-70
res_width_num_45() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-70
res_width_num_90() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-71
res_width_term_a(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-72
res_width_term_b(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-72
Device Body Coordinate Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-72
dev_body_coordinate_list(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-73
Device Parallel Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-73
dev_parallel_device_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-74
dev_parallel_device_body() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-74
dev_parallel_device_count(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-75
dev_parallel_device_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-75
dev_parallel_device_pin(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-76
dev_parallel_device_polygon_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-76
dev_parallel_device_processing_layer_polygon_id() . . . . . . . . . . . . . . . . . 4-77
dev_parallel_device_sum_double_property(). . . . . . . . . . . . . . . . . . . . . . . 4-77
dev_parallel_device_width() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-78
Device Error Utility Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-79
dev_set_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-79
polygon_set Property Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-79
dev_box_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-79
dev_box_width() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-80
dev_coil_space(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-80
dev_coil_turns() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-80
dev_coil_width() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-81
dev_count_devices(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-81
dev_count_polygon_coordinates() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-82
dev_count_polygons() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-82
dev_generate_compound_device_id() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-82
dev_get_polygon_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-83
dev_get_polygon_list_of_list_of_double_property() . . . . . . . . . . . . . . . . . . 4-84
dev_get_polygon_matrix_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-85
dev_get_polygon_string_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-86
dev_grow_polygon() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-86
dev_polygon_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-87
dev_polygon_bends() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-88
dev_polygon_coordinates() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-88
dev_polygon_perim() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-89
dev_single_polygon_set(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-89
Chapter 2: Contents
Contents xxi
2-xxi
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
dev_size_polygon(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-89
dev_top_polygon_coordinate_list(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-90
polygon_set to polygon_set Property Utility Functions . . . . . . . . . . . . . . . . . . . 4-90
dev_and() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-90
dev_coil_path_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-91
dev_count_coincident_edges(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-91
dev_count_inside() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-91
dev_count_outside() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-92
dev_cutting() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-92
dev_inside() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-92
dev_inside_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-93
dev_inside_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-93
dev_inside_touch_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-94
dev_interacting() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-94
dev_not(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-94
dev_or() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-95
dev_outside_area(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-95
dev_outside_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-95
dev_outside_touch_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-96
dev_proximity_list(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-97
dev_touch_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-101
dev_touching() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-102
Saving Properties Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-102
dev_device_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-102
dev_is_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-103
dev_pin_net_name(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-103
dev_save_double_list_properties(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-103
dev_save_double_properties() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-104
dev_save_polygon_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-104
dev_save_string_properties() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-105
dev_set_pin_coordinates() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-105
dev_unique_identifier() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-106
Retrieving polygon_set Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-107
dev_body() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-107
dev_pin(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-107
dev_processing_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-108
dev_processing_layer_polygon_id() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-108
dev_processing_range() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-109
dev_recognition_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-110
Flexible Netlisting Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-110
Contents xxii
IC Validator Reference Manual Version N-2017.12-SP2
flx_device_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-111
flx_device_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-112
flx_get_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-112
flx_get_string_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-112
flx_instance_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-113
flx_is_shorted() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-113
flx_pin_net_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-113
flx_write_to_spice_netlist() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-113
Dynamic Linking Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-114
dev_dlink() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-114
dev_dlink_library() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-115
Density Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-116
Layout Density Utility Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-116
den_generate_next_step() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-116
den_layer_empty() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-120
den_polygon_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-121
den_save_sized_window() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-121
den_save_window() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-122
den_window_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-123
den_window_bottom() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-124
den_window_left(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-124
den_window_right() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-124
den_window_statistics() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-124
den_window_top() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-125
Gradient Density Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-125
gden_layer_empty() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-127
gden_polygon_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-127
gden_save_window() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-128
gden_window_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-129
gden_window_bottom() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-130
gden_window_left(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-130
gden_window_right() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-130
gden_window_statistics() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-130
gden_window_top() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-131
gden_window_valid() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-131
Fill Pattern Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-132
fp_generate_fill() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-132
fp_get_current_polygon(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-137
Chapter 2: Contents
Contents xxiii
2-xxiii
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
fp_new_polygon() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-137
fp_polygon_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-138
fp_polygon_center_diamond() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-138
fp_polygon_center_square() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-139
fp_polygon_center_triangle() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-139
fp_polygon_coordinate_x() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-140
fp_polygon_coordinate_y() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-140
fp_polygon_diagonal_extent() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-140
fp_polygon_extent() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-141
fp_polygon_max_rectangle() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-141
fp_polygon_max_square() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-141
fp_polygon_num_coordinates() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-142
fp_set_polygon_coordinate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-142
Net Polygon Select Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-142
nps_get_sum_double_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-143
nps_net_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-143
nps_net_data_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-144
nps_net_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-144
nps_polygon_area(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-145
nps_polygon_extent_bottom() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-145
nps_polygon_extent_left() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-145
nps_polygon_extent_right() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-145
nps_polygon_extent_top() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-146
nps_polygon_perimeter(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-146
nps_read_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-146
nps_save_polygon() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-147
nps_save_properties() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-147
nps_save_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-148
Net Select Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-148
ns_coupled_layer_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-149
ns_coupled_layer_exist(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-149
ns_coupled_net_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-150
ns_coupled_net_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-151
ns_get_coupled_net_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-151
ns_get_net_double_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-152
ns_get_sum_double_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-152
Contents xxiv
IC Validator Reference Manual Version N-2017.12-SP2
ns_net_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-153
ns_net_data_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-153
ns_net_id(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-154
ns_net_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-154
ns_net_texted() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-154
ns_save_all_nets(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-155
ns_save_coupled_layer(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-155
ns_save_coupled_layer_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-156
ns_save_net() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-157
Net Select Inside of Layer Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-157
nsil_net_area(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-158
nsil_net_data_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-158
nsil_save_net() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-158
nsil_save_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-159
Net Property Select Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-160
nprops_net_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-160
nprops_net_data_count(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-160
nprops_net_id() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-161
nprops_net_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-161
nprops_net_texted(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-161
nprops_read_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-162
nprops_save_net(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-162
nprops_save_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-163
Net Polygon by Property Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-163
npbp_get_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-164
npbp_get_max_double_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-164
npbp_get_min_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-165
npbp_net_data_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-166
npbp_net_data_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-166
npbp_net_data_exist() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-166
npbp_save_net() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-167
npbp_save_properties(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-167
Property to Net Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-168
ptn_get_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-168
ptn_get_list_of_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-168
Chapter 2: Contents
Contents xxv
2-xxv
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
ptn_get_max_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-169
ptn_get_min_double_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-170
ptn_get_string_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-172
ptn_net_data_exist() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-173
ptn_save_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-173
ptn_save_list_of_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-173
ptn_save_string_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-174
Polygon Features Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-174
pf_fnote() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-175
pf_get_current_polygon(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-176
pf_new_polygon() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-176
pf_polygon_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-177
pf_polygon_center_diamond() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-177
pf_polygon_center_square() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-177
pf_polygon_center_triangle() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-178
pf_polygon_coordinate_x() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-179
pf_polygon_coordinate_y() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-179
pf_polygon_diagonal_extent() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-179
pf_polygon_extent() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-179
pf_polygon_max_rectangle() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-180
pf_polygon_max_square() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-180
pf_polygon_num_coordinates() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-180
pf_save_polygon() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-181
pf_set_polygon_coordinate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-181
Compare Utility Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-181
Writing Compare Remote Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-182
Filter Remote Functions During Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . 4-182
Exclude Remote Functions During Merging . . . . . . . . . . . . . . . . . . . . . . . . 4-182
Property Remote Functions During Merging . . . . . . . . . . . . . . . . . . . . . . . 4-183
Property Remote Functions During Check Property. . . . . . . . . . . . . . . . . . 4-183
Special-Purpose Compare Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-184
lvs_count_candidates(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-184
lvs_current_device() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-184
lvs_exclude_from_merge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-184
lvs_get_candidate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-185
lvs_layout_device() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-185
lvs_property_error() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-185
Contents xxvi
IC Validator Reference Manual Version N-2017.12-SP2
lvs_remove_device(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-186
lvs_save_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-186
lvs_save_string_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-187
lvs_schematic_device() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-187
General-Purpose Compare Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-187
lvs_all_equal(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-187
lvs_are_nets_identical() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-188
lvs_avg() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-188
lvs_count_device_pins() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-188
lvs_count_devices_on_net() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-189
lvs_count_members() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-189
lvs_count_pins_on_net(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-189
lvs_device_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-190
lvs_device_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-190
lvs_get_compare_tolerance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-190
lvs_get_device_nets_by_index() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-192
lvs_get_device_nets_by_pin_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-192
lvs_get_device_on_net(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-193
lvs_get_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-194
lvs_get_exclude_tolerance(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-194
lvs_get_member(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-195
lvs_get_pin_name_on_net() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-195
lvs_get_parent_instance_id() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-196
lvs_get_string_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-196
lvs_instance_name(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-197
lvs_is_capacitor() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-197
lvs_is_composite() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-197
lvs_is_generic(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-198
lvs_is_inductor() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-198
lvs_is_layout_device() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-198
lvs_is_member() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-199
lvs_is_net_floating() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-199
lvs_is_net_ground() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-199
lvs_is_net_port() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-199
lvs_is_net_power() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-200
lvs_is_nmos() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-200
lvs_is_np() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-200
lvs_is_npn() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-201
lvs_is_parallel(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-201
lvs_is_parallel_chain() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-201
lvs_is_pmos() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-202
Chapter 2: Contents
Contents xxvii
2-xxvii
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
lvs_is_pn() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-202
lvs_is_pnp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-202
lvs_is_resistor(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-202
lvs_is_schematic_device() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-203
lvs_is_series(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-203
lvs_is_top_block() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-203
lvs_max() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-204
lvs_min() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-204
lvs_net_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-204
lvs_product() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-205
lvs_same_device() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-205
lvs_schematic_layout_net_match() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-205
lvs_split_series_chain() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-206
lvs_sum() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-206
lvs_sum_of_divisions() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-207
lvs_sum_of_products() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-207
lvs_sum_of_reciprocals() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-208
Edge Features Edge Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-208
efe_get_current_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-208
efe_new_edge(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-209
efe_edge_coordinate_x(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-209
efe_edge_coordinate_y(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-209
efe_save_edge() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-210
efe_set_edge_coordinate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-210
DRC Features Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-211
df_common_double_property_index() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-212
df_edge_count(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-213
df_edge_exist() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-214
df_edge_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-214
df_edge_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-215
df_edge_horizontal_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-215
df_edge_max_length(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-216
df_edge_min_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-216
df_edge_proximity() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-217
df_edge_sum_horizontal_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-221
df_edge_sum_length(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-221
df_edge_sum_vertical_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-222
df_edge_sum_x_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-222
Contents xxviii
IC Validator Reference Manual Version N-2017.12-SP2
df_edge_sum_y_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-223
df_edge_vertical_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-223
df_edge_x_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-223
df_edge_y_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-224
df_error_angle() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-224
df_error_max_angle() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-225
df_error_min_angle() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-225
df_error_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-226
df_error_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-226
df_error_exist() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-227
df_error_horizontal_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-227
df_error_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-228
df_error_max_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-228
df_error_max_projection_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-229
df_error_max_sum_orthogonal_projection_length() . . . . . . . . . . . . . . . . . . . . . 4-229
df_error_min_distance(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-230
df_error_min_projection_length(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-231
df_error_min_sum_orthogonal_projection_length(). . . . . . . . . . . . . . . . . . . . . . 4-231
df_error_parallel_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-232
df_error_projection_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-232
df_error_sum_angle() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-233
df_error_sum_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-233
df_error_sum_horizontal_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-234
df_error_sum_horizontal_projection_length() . . . . . . . . . . . . . . . . . . . . . . . . . . 4-234
df_error_sum_parallel_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-235
df_error_sum_projection_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-236
df_error_sum_vertical_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-236
df_error_sum_vertical_projection_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-236
df_error_sum_x_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-237
df_error_sum_x_projection_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-238
df_error_sum_y_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-238
df_error_sum_y_projection_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-239
df_error_vertical_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-239
df_error_x_distance(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-240
df_error_x_projection_length(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-240
df_error_y_distance(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-241
Chapter 2: Contents
Contents xxix
2-xxix
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
df_error_y_projection_length(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-241
df_fnote() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-242
df_get_current_data() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-243
df_get_edge_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-243
df_get_edge_matrix_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-244
df_get_edge_max_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-244
df_get_edge_min_double_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-245
df_get_edge_net_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-246
df_get_edge_net_list_of_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-246
df_get_edge_net_string_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-247
df_get_edge_string_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-248
df_get_edge_string_property_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-249
df_get_edge_sum_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-249
df_get_error_double_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-250
df_get_error_max_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-251
df_get_error_min_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-251
df_get_error_string_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-252
df_get_error_string_property_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-253
df_get_error_sum_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-254
df_get_marker_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-254
df_get_marker_string_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-255
df_get_polygon_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-256
df_get_polygon_list_of_list_of_double_property() . . . . . . . . . . . . . . . . . . . . . . . 4-257
df_get_polygon_max_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-257
df_get_polygon_min_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-258
df_get_polygon_net_double_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-259
df_get_polygon_net_list_of_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . 4-260
df_get_polygon_net_string_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-260
df_get_polygon_string_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-261
df_get_polygon_string_property_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-262
df_get_polygon_sum_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-263
df_marker_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-263
df_marker_exist(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-264
df_marker_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-264
df_marker_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-265
df_polygon_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-265
Contents xxx
IC Validator Reference Manual Version N-2017.12-SP2
df_nets_in_sync() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-266
df_polygon_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-266
df_polygon_exist() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-267
df_polygon_horizontal_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-267
df_polygon_layer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-268
df_polygon_max_area(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-268
df_polygon_max_perimeter(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-269
df_polygon_min_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-269
df_polygon_min_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-270
df_polygon_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-270
df_polygon_same_net() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-271
df_polygon_sum_area(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-271
df_polygon_sum_horizontal_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-271
df_polygon_sum_perimeter(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-272
df_polygon_sum_vertical_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-272
df_polygon_sum_x_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-273
df_polygon_sum_y_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-273
df_polygon_vertical_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-274
df_polygon_x_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-274
df_polygon_y_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-275
df_report_double() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-275
df_report_string() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-276
df_save_data(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-277
df_save_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-278
df_save_list_of_list_of_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-278
df_save_matrix_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-279
df_save_properties() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-280
df_save_string_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-281
DFM Features Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-282
dfm_aggregate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-282
dfm_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-283
dfm_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-283
dfm_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-283
dfm_exist() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-284
dfm_fnote() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-285
dfm_get_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-285
Chapter 2: Contents
Contents xxxi
2-xxxi
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
dfm_get_max_double_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-286
dfm_get_min_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-286
dfm_get_product_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-287
dfm_get_sum_double_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-287
dfm_length(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-288
dfm_max_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-288
dfm_max_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-288
dfm_max_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-289
dfm_max_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-289
dfm_max_projection_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-290
dfm_min_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-290
dfm_min_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-290
dfm_min_length(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-291
dfm_min_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-291
dfm_min_projection_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-292
dfm_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-292
dfm_product_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-292
dfm_product_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-293
dfm_product_length(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-293
dfm_product_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-294
dfm_product_projection_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-294
dfm_projection_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-295
dfm_report_double() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-295
dfm_save_data() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-295
dfm_save_double_property(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-296
dfm_sum_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-296
dfm_sum_distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-297
dfm_sum_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-297
dfm_sum_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-298
dfm_sum_projection_length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-298
dfm_window_area() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-298
dfm_window_bottom() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-299
dfm_window_left() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-299
dfm_window_perimeter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-299
dfm_window_right() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-300
dfm_window_top() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-300
Contents xxxii
IC Validator Reference Manual Version N-2017.12-SP2
Chapter 2: Contents
Contents xxxiii
2-xxxiii
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
ndb_instance_cell() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-354
ndb_instance_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-354
ndb_instance_pin() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-355
ndb_instance_pins() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-355
ndb_instances() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-356
ndb_is_net_port(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-356
ndb_is_selected_rule() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-357
ndb_net_device_pins() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-357
ndb_net_double_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-358
ndb_net_instance_pins() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-358
ndb_net_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-359
ndb_netlist_cell() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-359
ndb_netlist_top_cell(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-360
ndb_nets() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-360
ndb_pin_device() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-361
ndb_pin_instance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-361
ndb_pin_name(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-362
ndb_pin_net(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-362
ndb_ports() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-363
ndb_propagate_net_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-363
ndb_propagate_tags() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-367
ndb_remove_tags() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-370
ndb_report_device(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-371
ndb_report_instance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-376
ndb_report_net() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-381
ndb_report_top_cell_device() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-385
ndb_report_top_cell_instance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-387
ndb_report_top_cell_net() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-389
ndb_reset_cache(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-391
ndb_save_device_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-391
ndb_save_netlist() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-392
ndb_save_top_cell_device() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-393
ndb_save_top_cell_device_list() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-393
ndb_save_top_cell_net() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-394
ndb_set_device_report_info() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-395
ndb_set_device_tag_by_hierarchical_name() . . . . . . . . . . . . . . . . . . . . . . . . . . 4-397
Contents xxxiv
IC Validator Reference Manual Version N-2017.12-SP2
ndb_set_instance_report_info() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-398
ndb_set_instance_tag_by_hierarchical_name() . . . . . . . . . . . . . . . . . . . . . . . . 4-401
ndb_set_net_report_info() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-401
ndb_set_net_tag_by_hierarchical_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-403
ndb_set_netlist_attribute() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-404
ndb_set_sum_values() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-405
ndb_set_top_cell_device_tag() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-405
ndb_set_top_cell_instance_tag() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-406
ndb_set_top_cell_net_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-406
ndb_set_top_cell_net_tag() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-407
ndb_sum_device_values(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-407
ndb_top_cell_device_tag(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-410
ndb_top_cell_instance_tag() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-411
ndb_top_cell_net_property() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-411
ndb_top_cell_net_tag() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-412
ndb_total_resistance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-412
Chapter 2: Contents
Contents xxxv
2-xxxv
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Glossary
Index
Contents xxxvi
Preface
This preface includes the following sections:
• About This Manual
• Customer Support
xxxvii
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Audience
This manual is designed to enhance both beginning and advanced users’ knowledge of the
IC Validator functions.
Related Publications
For additional information about the IC Validator tool, see the documentation on the
®
SolvNet online support site at the following address:
https://solvnet.synopsys.com/DocsOnWeb
You might also want to see the documentation for the following related Synopsys products:
™
• Custom Compiler
• IC Compiler™
• IC Compiler II™
• StarRC™
Release Notes
Information about new features, enhancements, changes, known limitations, and resolved
Synopsys Technical Action Requests (STARs) is available in the IC Validator Release Notes
on the SolvNet site.
To see the IC Validator Release Notes,
1. Go to the SolvNet Download Center located at the following address:
https://solvnet.synopsys.com/DownloadCenter
2. Select IC Validator, and then select a release in the list that appears.
Preface
About This Manual xxxviii
IC Validator Reference Manual Version N-2017.12-SP2
Conventions
The following conventions are used in Synopsys documentation.
Convention Description
Preface 3: Preface
Chapter
About This Manual 3-xxxix
xxxix
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Customer Support
Customer support is available through SolvNet online customer support and through
contacting the Synopsys Technical Support Center.
Accessing SolvNet
The SolvNet site includes a knowledge base of technical articles and answers to frequently
asked questions about Synopsys tools. The SolvNet site also gives you access to a wide
range of Synopsys online services including software downloads, documentation, and
technical support.
To access SolvNet, go to the following address:
https://solvnet.synopsys.com
If prompted, enter your user name and password. If you do not have a Synopsys user name
and password, follow the instructions to sign up for an account.
If you need help using the SolvNet site, click HELP in the top-right menu bar.
Preface
Customer Support xl
1
Tables of Runset Functions 1
The functions listed in this chapter are described in Chapter 2, “Runset Functions: A - I” and
Chapter 3, “Runset Functions: J - Z.” The functions described in Chapter 4, “Utility
Functions” are not listed in this chapter.
To help you understand and use the functions, see the IC Validator User Guide, including
the Command-Line Options section in the “IC Validator Basics” chapter. In addition, see the
basic runset information in Appendix A, “Runset Basics.”
The functions are listed in these sections:
• Option Functions
• Methodology Check Functions
• Unified Fill Functions
• Parasitic Extraction Functions
• Pattern Match Functions
• Coloring Functions
• All Runset Functions
1-1
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Option Functions
The option functions control how input data is processed and provide control to the
IC Validator tool. In the runset, these functions must come before the assign and command
functions.
Table 1-1 Summary of the Option Functions
Function Definition
error_options() Specifies the error output for the design being verified.
library_import() Reads in the specified library and places its top cell under the
top cell of the design library.
Function Definition
prototype_options() Defines the criteria for the creation of prototype cells during
hierarchical preprocessing.
text_options() Specifies how layout text objects are processed as they are
read in as a text layer.
Function Definition
Function Definition
NDM Functions
Use the functions listed in Table 1-4 for NDM operations.
Table 1-4 Summary of the NDM Functions
Function Definition
exclude_ndm_blockage_types() Returns a list of NDM blockage types that are not specified in
the exclude argument.
exclude_ndm_design_types() Returns a list of NDM design types that are not specified in the
exclude argument.
exclude_ndm_net_types() Returns a list of NDM net types that are not specified in the
exclude argument.
exclude_ndm_shape_uses() Returns a list of NDM design types that are not specified in the
exclude argument.
Function Definition
pex_color_layer_map() Stores, in the PEX layer matrix, mapping between PXL layer
objects and parasitic extraction color layer parameters.
pex_lpp_map_file() Generates a file handle for the output of the StarRC parasitic
extraction OA_LAYER_MAPPING_FILE.
Function Definition
pex_process_map_file() Generates a file handle for the output of the StarRC parasitic
extraction MAPPING_FILE.
pex_qtf_layer_map() Stores, in the PEX layer matrix, mapping between PXL layer
objects and parasitic extraction QTF layer parameters.
pex_viewonly_layer_map() Stores extra PXL layer objects within the output StarRC
parasitic extraction layout database.
Function Definition
Function Definition
Coloring Functions
This section lists the coloring functions in the IC Validator tool.
Table 1-7 Summary of the Coloring Functions
Function Definition
Function Definition
Function Definition
adjacent_edge() and Selects edges based on their length, the angles at their
not_adjacent_edge() endpoints, and their respective adjacent lengths. The
complement of the adjacent_edge() function is the
not_adjacent_edge() function.
and_edge() Selects the portion of all edges on a layer that are inside
polygons of another layer.
angle_edge() and Selects edges based on the specified minimum angle with the
not_angle_edge() x-axis. The complement of the angle_edge() function is the
not_angle_edge() function.
Function Definition
area() and not_area() Selects polygons whose area fits the specified value. The
complement of the area() function is the not_area()
function.
aspect_ratio() and Selects polygons on a layer that are rectangles which fit the
not_aspect_ratio() specified aspect ratio. The complement of the
aspect_ratio() function is the not_aspect_ratio()
function.
Function Definition
check_symmetry() Checks the symmetry of the target layer polygons against the
created, mirrored context layer polygons.
coincident_edge() and Selects the portion of all edges on a layer that are coincident
not_coincident_edge() with edges of another layer. The complement of the
coincident_edge() function is the not_coincident_edge()
function.
coincident_inside_edge() and Selects the portion of all edges on a layer that are inside
not_coincident_inside_edge() coincident with the edges on another layer. The complement
of the coincident_inside_edge() function is the
not_coincident_inside_edge() function.
Function Definition
coincident_outside_edge() and Selects the portion of all edges on a layer that are outside
not_coincident_outside_edge() coincident with the edges on another layer. The complement
of the coincident_outside_edge() function is the
not_coincident_outside_edge() function.
contains() and not_contains() Selects polygons that are large enough to fully enclose the
specified rectangle. The complement of the contains()
function is the not_contains() function.
copy_by_layout_equiv_cells() Creates a layer by copying the specified layer from the layout
equivalence cells that are identified in the runset using the
equiv_options() function.
cutting() and not_cutting() Selects data from one layer that cuts data from another layer.
The complement of the cutting() function is the
not_cutting() function.
Function Definition
delta_edge() and Selects edges that meet the specified delta-x and delta-y
not_delta_edge() constraints. The complement of the delta_edge() function is
the not_delta_edge() function.
delta_error() and Selects errors that meet the specified delta-x and delta-y
not_delta_error() constraints for error distance. The complement of the
delta_error() function is the not_delta_error() function.
device_connected_to() and Selects polygons from devices that are connected to nets with
device_not_connected_to() the specified text. The complement of the
device_connected_to() function is the
device_not_connected_to() function.
device_net_count() Selects polygons from devices that have the specified net
count.
donuts() and not_donuts() Selects polygons of a layer that contain one or more holes.
The complement of the donuts() function is the
not_donuts() function.
Function Definition
edge_grow() Creates polygons from the input layer that are oversized in the
specified directions by the specified distances.
edge_shrink() Creates polygons from the input layer that are undersized in
the specified directions by the specified distances.
eerc_create_device_layer() Returns the body shapes for all of the devices in the results
database returned by an eerc_analyze_netlist() function.
eerc_create_net_layer() Returns the shapes from the specified list of layers for all of
the nets in the results database returned by an
eerc_analyze_netlist() function.
eerc_import_net_properties_fro Reads a file from disk. The file contains a list of net names,
m_file() with one name on each line. Each column in the file
represents the name or value of a double property that should
be assigned to a net.
Function Definition
enclose_edge() and Selects the portion of edges of two layers that violates the
not_enclose_edge() spacing constraints. The complement of the enclose_edge()
function is the not_enclose_edge() function.
enclose_error() Specifies the error output for the design being verified.
error_options() Specifies the error output for the design being verified.
Function Definition
exclude_milkyway_cell_types() Returns a list of Milkyway cell types that are not specified.
exclude_milkyway_net_types() Returns a list of Milkyway net types that are not specified.
exclude_milkyway_route_guide_l Returns a list of Milkyway route guides that are not specified.
ayers()
exclude_milkyway_route_types() Returns a list of Milkyway route types that are not specified.
exclude_ndm_blockage_types() Returns a list of NDM blockage types that are not specified in
the exclude argument.
exclude_ndm_design_types() Returns a list of NDM design types that are not specified in the
exclude argument.
exclude_ndm_net_types() Returns a list of NDM net types that are not specified in the
exclude argument.
exclude_ndm_shape_uses() Returns a list of NDM design types that are not specified in the
exclude argument.
extent() and not_extent() Selects polygons whose extents fit the specified dimensions.
The complement of the extent() function is the
not_extent() function.
Function Definition
external1_edge() and Selects the portion of edges of a layer that violates the
not_external1_edge() spacing constraints. The complement of the
external1_edge() function is the not_external1_edge()
function.
external2_edge() and Selects the portion of edges on two layers that violates the
not_external2_edge() spacing constraints. The complement of the
external2_edge() function is the not_external2_edge()
function.
fill_pattern_rings() Creates fill rectangles around the layer1 polygon that have
an orientation which follows the orientation of the signal
polygons.
Function Definition
get_layout_drawn_violation() Returns the violation to which layout drawn errors are written
during preprocessing.
get_layout_grid_violation() Returns the violation to which layout grid errors are written
during preprocessing.
get_netlist_connect_database() Allows you to access the connect database from which the
layout netlist is generated from the given device database.
get_text_merged() Returns a new violation that contains only the merged text
opens from the input violation.
get_text_reassign_shorted() Returns a new violation that contains only the reassigned text
shorts from the input violation.
get_text_renamed() Returns a new violation that contains only the renamed text
opens from the input violation.
Function Definition
get_text_shorted() Returns a new violation that contains only the text shorts from
the input violation.
get_text_unused() Returns a new violation that contains only the unused text
errors from the input violation.
grid_pattern_edge() Outputs the imaginary grid lines that are inside or coincident
with the layer extent of the union of the bounding layer and
reference layer.
grouped_by() Selects polygons from one layer that interact with another
layer.
grow() Creates polygons from the input layer that are oversized in the
specified directions by the specified distances.
icvread_layer_map() Stores mapping between PXL layer objects and ICVread layer
parameters.
import_gds_cell() Reads the hierarchy tree of a cell from the specified GDSII
library.
Function Definition
import_oasis_cell() Reads the hierarchy tree of a cell from the specified OASIS
library.
inside() and not_inside() Selects polygons of a layer that are inside the polygons of
another layer. The complement of the inside() function is
the not_inside() function.
inside_hole() and Selects polygons of a layer that fill the holes in polygons of
not_inside_hole() another layer. The complement of the inside_hole()
function is the not_inside_hole() function.
inside_point_touching_edge() Selects entire layer1 edges that have any inside point
and touching with layer2 edges. The complement of this function
not_inside_point_touching_edge is the not_inside_point_touching_edge() function.
()
inside_touching_edge() and Selects entire edges of a layer that have any inside
not_inside_touching_edge() coincidence with edges of another layer. The complement of
the inside_touching_edge() function is the
not_inside_touching_edge() function.
Function Definition
instance_property_number() Redefines the property number used for cell instance names.
interacting_edge() and Selects entire edges of a layer that touch or overlap polygons
not_interacting_edge() or edges of another layer. The complement of the
interacting_edge() function is the
not_interacting_edge() function.
interacting_error() and Selects entire layer1 errors that touch or overlap layer2
not_interacting_error() polygons. The complement of the interacting_error()
function is the not_interacting_error() function.
internal1_edge() and Selects the portion of edges of a layer that violates the
not_internal1_edge() spacing constraints. The complement of the
internal1_edge() function is the not_internal1_edge()
function.
Function Definition
internal2_edge() and Selects the portion of edges of two layers that violates the
not_internal2_edge() spacing constraints. The complement of the
internal2_edge() function is the not_internal2_edge()
function.
label_text() Creates a text layer that contains text strings for any probe
layer polygon that edge touches or overlaps a connect layer
polygon.
Function Definition
length_edge() and Selects edges based on their length. The complement of the
not_length_edge() length_edge() function is the not_length_edge() function.
library_import() Reads in the specified library and places its top cell under the
top cell of the design library.
Function Definition
Function Definition
mos_select() Selects device polygons from MOS devices on layers that fit
the specified criteria.
net_color_check() Checks the specified nets to determine if the color of the net
is expected.
net_device_count() Selects polygons from nets in the device database that fit the
specified criteria.
net_path_check() Selects polygons from nets on the specified path of the device
database that fit the specified criteria.
Function Definition
net_polygon_select() Selects polygons from nets in the connect database that fit the
specified criteria.
net_property_select() Selects polygons from nets in the connect database that meet
the criteria specified in the function arguments and remote
function.
net_select() Selects polygons from nets in the connect database that fit the
specified criteria.
net_select_error() Selects error layer polygons that fit the specified criteria.
net_texted_with() and Selects polygons from nets that are texted with the specified
net_not_texted_with() strings. The complement of the net_texted_with() function
is the not_net_texted_with() function.
netlist() Invokes the netlist utility to generate the layout netlist output
file for LVS comparison.
nmos() and pmos() Collects extraction configuration about N-type or P-type MOS
transistors that have a gate layer, source layer, drain layer,
and optional pin layers.
Function Definition
not_edge() Selects the portion of all edges on a layer that are outside the
polygons of another layer.
Function Definition
outside() and not_outside() Selects polygons of a layer that do not share any of their
active area with polygons of another layer. The complement of
the outside() function is the not_outside() function.
outside_point_touching_edge() Selects entire layer1 edges that have any outside point
and touching with layer2 edges. The complement of this function
not_outside_point_touching_edg is the not_outside_touching_edge() function.
e()
outside_touching() and Selects polygons of a layer that do not share active area with
not_outside_touching() another layer but outside touch a polygon of that layer. The
complement of the outside_touching() function is the
not_outside_touching() function.
outside_touching_edge() and Selects entire edges of a layer that have any outside
not_outside_touching_edge() coincidence with edges of another layer. The complement of
the outside_touching_edge() function is the
not_outside_touching_edge() function.
Function Definition
pex_color_layer_map() Stores, in the PEX layer matrix, mapping between PXL layer
objects and parasitic extraction color layer parameters.
pex_lpp_map_file() Generates a file handle for the output of the StarRC parasitic
extraction OA_LAYER_MAPPING_FILE.
pex_process_map_file() Generates a file handle for the output of the StarRC parasitic
extraction MAPPING_FILE.
pex_qtf_layer_map() Stores, in the PEX layer matrix, mapping between PXL layer
objects and parasitic extraction QTF layer parameters.
Function Definition
pex_viewonly_layer_map() Stores extra PXL layer objects within the output StarRC
parasitic extraction layout database.
point_touching_edge() and Selects entire layer1 edges that have any point touching with
not_point_touching_edge() layer2 edges. Selection includes inside and outside edge
point touching. The complement of this function is the
not_point_touching_edge() function.
prototype_options() Defines the criteria for the creation of prototype cells during
hierarchical preprocessing.
Function Definition
rectangle_spacing1() and Selects rectangles that fit the specified count and distance
not_rectangle_spacing1() constraints.
Function Definition
rectangle_spacing2() and Selects layer1 rectangles that fit the specified count and
not_rectangle_spacing2() distance constraints for interaction with layer2 rectangles.
rectangles() and Selects rectangles in a layer that fit the specified dimensions.
not_rectangles() The complement of the rectangles() function is the
not_rectangles() function.
res_select() Selects the device polygons that fit the specified dimensional
criteria or geometric error-checking criteria.
Function Definition
select_by_double_property() Sorts the polygons of the input layer into a polygon layer
based on the specified property name and value pair.
shift_symmetry() Checks the symmetry of the target layer polygons against the
created, mirrored polygons.
Function Definition
snap() Creates polygons that represent the input polygons with all
vertices snapped to the specified resolution.
snap_edge() Creates edges that represent the input edges with all
endpoints snapped to the specified resolution.
snap_to_pattern() Creates data that represent the input data snapped to the
specified grid_pattern. This function is a cell-level
operation.
snap_to_pattern_edge() creates data that represent the input data snapped to the
specified grid_pattern. This function is a cell-level
operation.
soft_check() Verifies that all polygons of a layer which intersect with the
same polygon of another layer belong to the same net.
Function Definition
text_options() Specifies how layout text objects are processed as they are
read in as a text layer.
text_to_string_property() Creates a square marker at the location of each text with the
string value of the text attached to the polygon.
texted_with() and Selects polygons of a layer that are attached with the
not_texted_with() specified text in another layer. The complement of the
texted_with() function is the not_texted_with() function.
touching() and not_touching() Selects polygons of a layer that have any inside or outside
edge coincidence with the edges of another layer. The
complement of the touching() function is the
not_touching() function.
touching_edge() and Selects entire edges of a layer that have any coincidence with
not_touching_edge() edges of another layer. The complement of the
touching_edge() function is the not_touching_edge()
function.
vertices() and not_vertices() Selects polygons based on their number of vertices. The
complement of the vertices() function is the
not_vertices() function.
Function Definition
vertices_edge() and Selects edge chains based on their number of vertices. The
not_vertices_edge() complement of the vertices_edge() function is the
not_vertices_edge() function.
xor() Creates polygons that represent the unique data from the
layers.
xor_edge() Creates the edges that represent the difference between two
layers.
Function Definition
This chapter provides an alphabetical listing of the functions available with the IC Validator
physical verification tool.
See Chapter 3, “Runset Functions: J - Z,” for more functions. Chapter 1, “Tables of Runset
Functions,” lists the runset functions by various types, in addition to a table of all runset
functions.
To help you understand and use the functions, see Appendix A, “Runset Basics,” and the
IC Validator User Guide.
In addition to the documentation conventions shown in the Preface, the following convention
is used in the documentation of the IC Validator syntax.
Convention Description
2-1
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Syntax
adjacent_edge(
layer1 = data_layer,
length = doubleconstraint,
angle1 = doubleconstraint, //optional
angle2 = doubleconstraint, //optional
adjacent_length1 = doubleconstraint, //optional
adjacent_length2 = doubleconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
adjacent1 = PRESENT | MISSING | ALL, //optional
adjacent2 = PRESENT | MISSING | ALL //optional
);
not_adjacent_edge(
layer1 = data_layer,
length = doubleconstraint,
angle1 = doubleconstraint, //optional
angle2 = doubleconstraint, //optional
adjacent_length1 = doubleconstraint, //optional
adjacent_length2 = doubleconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
adjacent1 = PRESENT | MISSING | ALL, //optional
adjacent2 = PRESENT | MISSING | ALL //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
length
Required. Specifies the length for any edge to be selected. See “Constraints” on
page A-4 for more information.
Figure 2-1 shows the effect of the length argument settings with the adjacent_edge()
function.
Figure 2-1 Example of length Argument
layer1 Result
angle1
Optional. Specifies the angle that must be formed at one of the endpoints. The angle is
measured internally. The angles must be greater than 0 and less than 360. See
“Constraints” on page A-4 for more information. The default is >0.
angle2
Optional. Specifies the angle that must be formed at one of the endpoints. The angle is
measured internally. The angles must be greater than 0 and less than 360. See
“Constraints” on page A-4 for more information. The default is >0.
Figure 2-2 shows the effect of the angle arguments with the adjacent_edge() function.
Figure 2-2 Example of angle Arguments
layer1 Result
adjacent_length1
Optional. Specifies the length that must be satisfied by the edges adjacent to an angle1
angle. See “Constraints” on page A-4 for more information. The default is >0.
adjacent_length2
Optional. Specifies the length that must be satisfied by the edges adjacent to an angle2
angle. See “Constraints” on page A-4 for more information. The default is >0.
Figure 2-3 shows the effect of the adjacent length arguments with the adjacent_edge()
function.
Figure 2-3 Example of adjacent_length Arguments
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
adjacent1
Optional. Specifies for the endpoint of the edge that has angle as angle1 whether the
other edge adjacent to this endpoint must be existing, missing, or both existing and
missing. The default is PRESENT.
❍ PRESENT. Specifies that an adjacent edge of an edge must be existing.
adjacent2
Optional. Specifies for the endpoint of the edge that has angle as angle2 whether the
other edge adjacent to this endpoint must be existing, missing, or both existing and
missing. The default is PRESENT.
❍ PRESENT. Specifies that an adjacent edge of an edge must be existing.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
For the following examples, consider this polygon layer:
Input
90 135 2.5u
90 270
90
2.5u 135
270
135 315 225 270
90
in_layer
2u 135 45 1.5u 135 90 (edge or polygon layer)
2.5u 2.3u
In the following example, the output shows constraints for one of the endpoints:
out_layer = adjacent_edge(in_layer, length > 0.0, angle1 = 90.0 );
Output
90 135 2.5u
90 270
90
2.5u 135
270
135 315 225 270
90 in_layer
(edge or polygon layer)
2u 135 45 1.5u 135 90
out_layer
2.5u 2.3u (edge layer)
In the following example, the output shows constraints with both endpoints:
out_layer = adjacent_edge(in_layer, length = [2.0,2.5],
angle1 = 135.0, angle2 = 135.0, adjacent_length1 = [2.0,2.5]);
Output
90 135 2.5u
90 270
90
2.5u 135
270
135 315 225 270
90 in_layer
(edge or polygon layer)
2u 135 45 1.5u 135 90
out_layer
2.5u 2.3u (edge layer)
In the following example, the output shows constraints with both endpoints:
out_layer = adjacent_edge(in_layer, length = [2.0,2.5],
angle1 = 135.0, adjacent_length1 = [2.0,2.5]);
Output
90 135 2.5u
90 270
90
2.5u 135
270
135 315 225 270
90 in_layer
2u 135 45 135 90 (edge or polygon layer)
1.5u
out_layer
2.5u 2.3u (edge layer)
See Also
length_edge() and not_length_edge()
vertex()
and()
The and() function creates polygons that represent the intersection of two specified polygon
layers. Only those areas where the layers overlap are placed in the output.
Syntax
and(
layer1 = polygon_layer,
layer2 = polygon_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
remove_hierarchical_overlap = true | false, //optional
name = "layer_label", //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies a polygon layer.
layer2
Required. Specifies a polygon layer.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
remove_hierarchical_overlap
Optional. Specifies the processing of hierarchical overlap resulting from the AND
operation. This processing is a hierarchical optimization. The default is true.
❍ true. Removes duplicate material, from the parent cell of hierarchically overlapping
polygons.
❍ false. Keeps hierarchical overlap as is. This overlap can cause performance
degradation for subsequent operations on the output layer.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the rectangles that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Figure 2-5 shows finding the intersection of layerA and layerB.
result = layerA and layerB;
layerB
layerA
Result
See Also
and_edge()
not()
not_edge()
or()
or_edge()
xor()
xor_edge()
and_edge()
The and_edge() function selects the portion of all layer1 edges that are inside layer2
polygons.
Syntax
and_edge(
layer1 = data_layer,
layer2 = polygon_layer,
coincident = true | false, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer from which edges are selected.
layer2
Required. Specifies the edge or polygon layer checked against layer1 edges.
coincident
Optional. Specifies if inside coincident is included in the result. The default is true.
❍ true. Includes inside coincident in the result.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In Figure 2-6, both layers are polygon layers. The results are the same if layer1 is an edge
layer.
Figure 2-6 and_edge() Function Example
layer1
layer2
coincident = coincident =
true false result
See Also
coincident_inside_edge() and not_coincident_inside_edge()
inside() and not_inside()
inside_touching_edge() and not_inside_touching_edge()
not_edge()
outside_touching() and not_outside_touching()
and_overlap()
The and_overlap() function creates polygons that represent the hierarchical intersections
of the material from two specified layers. Intersection in a given cell is ignored.
Syntax
and_overlap(
layer1 = polygon_layer,
layer2 = polygon_layer,
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies a polygon layer.
layer2
Required. Specifies a polygon layer.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In Figure 2-7 there are two placements of cell Y and one placement of cell Z in cell X3. Two
polygon layers interact between overlapping cells contained within the parent cell X3. The
polygons that interact hierarchically produce output.
Result = and_overlap (layer1 = 1ayer1, layer2 = 1ayer2);
Polygons are created in the common ancestor cell relative to the input data polygons:
• The output polygon OP1 is created in cell X3 from the interaction of layer1 polygon P1
in cell X3 and layer2 polygon P2 in placement Y2.
• The output polygon OP2 is created in cell X3 from the interaction of layer1 polygon P3
in placement Y2 and layer2 polygon P4 in placement Y1.
• There is no output for the interaction of polygons in placement Z1 because the polygons
do not interact across the hierarchy.
Figure 2-7 and_overlap() Function Example
OP2 OP1 layer1 layer2 Result
X3 P1
P4
Z1
Y1 P2
Y2
P3
Flat Representation Input Hierarchy Tree
X3
X3
Y1 Z1
OP2
Y Y Z
See Also
and()
Syntax
angle_edge(
layer1 = data_layer,
angles = {doubleconstraint, ...},
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_angle_edge(
layer1 = data_layer,
angles = {doubleconstraint, ...},
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
angles
Required. Specifies the angles whose values are in the range [0.0, 90.0]. See
“Constraints” on page A-4 for more information.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
For the following examples, consider this polygon layer:
Input
90
45
90
x-axis
45 in_layer
90 (edge or polygon layer)
In the following example, the edges are selected from a range of values:
out_layer = angle_edge(in_layer, angles = {[0.0, 45.0]});
Output
90
45
90 x-axis
45 out_layer
90 (edge layer)
In the following example, the edges are selected from a list of values:
out_layer = angle_edge(in_layer, angles = {0.0, 90.0});
Output
90
45
90
x-axis
45 out_layer
90 (edge layer)
In the following example, the edges are selected from a range and a list of values:
out_layer = angle_edge(in_layer, angles = {[0.0,45.0], 90.0});
Output
90
45
90
x-axis
45 out_layer
90
(edge layer)
See Also
adjacent_edge() and not_adjacent_edge()
annotate_by_property()
The annotate_by_property() function makes a copy of a polygon layer annotated with
user-defined properties from nets in the connect database.
Note:
Properties on a polygon layer are recognized only by the drc_features(),
net_polygon_by_property(), and select_by_double_property() functions. All
other functions ignore properties on a polygon layer and do not propagate the properties
to their result.
Syntax
annotate_by_property(
connect_sequence = connect_database,
layer1 = polygon_layer,
property_names = {"string", ...},
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
connect_sequence
Required. Specifies the connect database.
layer1
Required. Specifies the polygon layer.
property_names
Required. Specifies the user-defined properties to annotate from nets to polygons.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
property_to_net()
Syntax
area(
layer1 = polygon_layer,
value = doubleconstraint,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_area(
layer1 = polygon_layer,
value = doubleconstraint,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
value
Required. Specifies the area. See “Constraints” on page A-4 for more information.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 2-8 shows using the area() function. For example,
Result = area(metal1, value = < 3);
metal1 Result
metal1 Result
See Also
grouped_by()
Syntax
aspect_ratio(
layer1 = polygon_layer,
ratio = doubleconstraint,
orientation = ORTHOGONAL | ALL, //optional
direction = X_BY_Y | SHORT_BY_LONG, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_aspect_ratio(
layer1 = polygon_layer,
ratio = doubleconstraint,
orientation = ORTHOGONAL | ALL, //optional
direction = X_BY_Y | SHORT_BY_LONG, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
ratio
Required. Specifies the aspect ratio that must be met for a rectangle to be selected.
Squares have an aspect ratio of 1. See Figure 2-10 for examples of the ratio argument.
orientation
Optional. Specifies the orientation of rectangles to be measured. See Figure 2-11 for
examples of the orientation argument. The default is ALL.
❍ ORTHOGONAL. Measures only orthogonal rectangles.
direction
Optional. Specifies how the aspect ratio is calculated. See Figure 2-12 for examples of
the direction argument. The default is SHORT_BY_LONG.
❍ X_BY_Y. Specifies that the aspect ratio is the dimension in the x-direction divided by
the dimension in the y-direction.
This argument is available only when the orientation argument is ORTHOGONAL.
When the direction argument is X_BY_Y and the processing_mode argument is
HIERARCHICAL, calculating the aspect ratio is a directional operation that requires
special consideration for polygons which are rotated 90 or 270 degrees. In runsets
that use multiple directional operations, careful application of the
prototype_options() function can improve performance.
❍ SHORT_BY_LONG. Specifies that the aspect ratio is the short dimension divided by the
long dimension.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 2-10 shows results of ratio argument settings.
aspect_ratio(metal1, ratio = 1);
not_aspect_ratio(metal1, ratio = 1);
ALL ORTHOGONAL
X_BY_Y SHORT_BY_LONG
See Also
rectangles() and not_rectangles()
assign()
The assign() function assigns a polygon-layer variable to data found on specified layers in
the layout. This function reads only positive width paths and polygons, and ignores zero
width paths. Data assigned to the polygon-layer variable can be restricted to data of a
specified datatype.
See the assign_openaccess() function for an assign function that is specific to the
OpenAccess format. The assign_openaccess() function accepts layer and purpose
names as arguments, rather than numeric layer and datatype ranges. If you use the
assign() function for OpenAccess data, you must specify an OpenAccess layer mapping
file in the openaccess_options() function. The openaccess_options() function allows
you to read OpenAccess system objects such as blockages and boundaries.
Syntax
assign(
ldt_list = {{layer_num_range = integerconstraint,
data_type_range = integerconstraint}, //optional
...},
milkyway = {views = {"string", ...},
objects = {object_type, ...},
cell_types = {cell_type, ...},
net_types = {net_type, ...},
route_guide_layers = {layer_type, ...},
route_types = {route_type, ...},
keep_properties = {OWNER_NET, ROUTE_TYPE},
user_attributes = {
{boolean_attributes = {
{name = "string", value = true | false},
...},
double_attributes = {
{name = "string",
values = {doubleconstraint, ...}},
...},
float_attributes = {
{name = "string",
values = {doubleconstraint, ...}},
...},
integer_attributes = {
{name = "string",
values = {integerconstraint, ...}},
...},
string_attributes = {
{name = "string",
values = {"string", ...}},
...}},
...},
colors = {color, ...},
read_fill_view_from = {TOP_CELL, LOWER_CELLS}
}, //optional
openaccess = {objects = {DONUT, DOT, ELLIPSE, PATH, PATH_SEGMENT,
PIN, POLYGON, RECTANGLE},
blockage_types = {openaccess_blockage_type, ...},
area_boundary_names = {"string", ...}, //optional
colors = {GRAY, MASK_ONE_UNLOCKED, MASK_ONE_LOCKED,
MASK_TWO_UNLOCKED, MASK_TWO_LOCKED,
MASK_THREE_UNLOCKED, MASK_THREE_LOCKED,
BLACK, MULTI, SAME}}, //optional
grid_check = {resolution = double,
check_45 = {POLYGON, PATH},
check_90 = {POLYGON, PATH}}, //optional
select_cells = {"string", ...}, //optional
polygons = {{coordinates = {{{x = double, y = double}, ...}, ...},
cell = "string"}, ...}, //optional
libraries = {library}, //optional
name = "layer_label", //optional
layer_intent = {LAYER_INTENT_METAL, LAYER_INTENT_FILL,
LAYER_INTENT_INTERCONNECT, LAYER_INTENT_BASE,
LAYER_INTENT_VIA, LAYER_INTENT_DEVICE}, //optional
gds = {
user_defined_properties = {{
double_properties = {{name = “string”,
number = integer}, ...},
string_properties = {{name = “string”,
number = integer}, ...}}, ...}
}, //optional
oasis = {
user_defined_properties = {{
double_properties = {{name = “string”,
number = integer}, ...},
string_properties = {{name = “string”,
number = integer}, ...}}, ...}
}, //optional
ndm = {views = {view_type, ...},
objects = {object_type, ...},
shape_uses = {shape_use_type, ...},
net_types = {net_type, ...},
design_types = {design_type, ...},
blockage_types = {ndm_blockage_type, ...},
blockage_layers = {integer, ...},
utilization_layers = {integer, ...},
masks = {ndm_mask, ...},
read_from = {assign_ndm_read_from, ...},
internal_designs = {ndm_internal_design_use, ...},
route_guide_layers = {integer, ...},
read_internal_designs_from = {TOP_CELL, LOWER_CELLS},
keep_properties = {OWNER_NET, SHAPE_USE}
}, //optional
select = {cells = {"string", ...},
marker_layers = {
{layer_num_range = integerconstraint,
data_type_range = integerconstraint}, ...},
baseline_sources = {GOLDEN_LIBRARY,
INPUT_LIBRARY, ...},
},
} //optional
);
Returns
polygon layer
Arguments
ldt_list
Required. Lists the layer range and datatype range pairs. The data_type_range value
for each pair is optional, with a default of all datatypes. See Layout Layer and Datatype
Ranges for information about the limits of the values.
Note:
You can use the assign_layer_out_of_range argument of the run_options()
function to specify the behavior of the IC Validator tool when an assign function
contains layer or datatype numbers that are greater than the maximum allowed range
of the input library format.
For NDM libraries, lists the layer range and layer purpose range pairs. The
data_type_range value, which is the layer purpose, for each pair is optional, with a
default of all datatypes. See Layout Layer and Datatype Ranges for information about
the limits of the values.
milkyway
Optional. Controls the reading of data from a Milkyway library on a layer-by-layer basis.
This argument works with the drc_black_box_cells and lvs_black_box_cells
arguments of the milkyway_options() function. These arguments of the
milkyway_options() function control the views on a cell-by-cell basis.
Note:
The milkyway argument is ignored for non-Milkyway libraries.
❍ views. Optional. Includes the specified views, on a layer-by-layer basis, when
reading the Milkyway library. By default, the IC Validator tool reads all views.
Note:
Any number of views can be referenced in the Milkyway library. The maximum
combined number of unique view names used in all assign functions in the runset
is 32.
VERTICALWIRE
For example, you can specify to read only one route guide:
m1_blockage = assign({{==190}},
milkyway={route_guide_layers={M1_ROUTE_GUIDE}}
);
❍ keep_properties. Optional. Keeps the specified Milkyway properties for data on the
layer when reading the Milkyway library. These properties can be used by the
write_milkyway() function to set properties on output shapes based on input layer
shapes they interact with. By default, the IC Validator tool does not keep any
properties.
■ OWNER_NET. Keeps the net property that each shape is assigned to as defined in
the Milkyway library. Information about the net is kept, including the net name and
net type. This option keeps only net information for shapes in the top level CEL
view.
■ ROUTE_TYPE. Keeps the route type property on each shape as defined in the
Milkyway library. Only certain types of objects can have a route type associated:
rectangles, paths, wires, contacts, and contact arrays.
In the following example, both OWNER_NET and ROUTE_TYPE properties are
preserved on Milkyway layer 31.
m1 = assign({{31}},
milkyway = {
keep_properties={OWNER_NET,ROUTE_TYPE}
}
);
❍ user_attributes. Optional. Lists the Milkyway attributes that are used to filter
shapes when reading the Milkyway library. Only shapes with specified attribute
values are read in.
When the user_attributes argument is used, shapes matching one or more of the
value sets listed are kept for the runset layer. All conditions of a value set must be met
for the shape to be considered a match. For example, if a value set lists constraints
for two different attributes, both must be satisfied.
■ If an attribute is specified in the runset as a different type from what is defined in
the Milkyway library, the IC Validator tool stops and issues an error message.
■ If an attribute is specified in the runset but is not defined in the Milkyway library,
the IC Validator tool writes a warning message and continues to run.
When the user_attributes argument is an empty list, the default, the IC Validator
tool does not filter data by attribute.
■ boolean_attributes. Optional. Specifies the Boolean attributes for the specified
layer.
- name. Specifies the attribute name.
- value. Specifies the Boolean value of the attribute, true or false.
■ double_attributes. Optional. Specifies the double attributes for the specified
layer.
- name. Specifies the attribute name.
- values. Lists the double attribute values.
■ float_attributes. Optional. Specifies the float attributes for the specified layer.
- name. Specifies the attribute name.
- values. Lists the float attribute values.
■ integer_attributes. Optional. Specifies the integer attributes for the specified
layer.
- name. Specifies the attribute name.
- values. Lists the integer attribute values.
■ string_attributes. Optional. Specifies string attributes for the specified layer.
- name. Specifies the attribute name.
- values. Lists the string attribute values.
For example,
// Select metal1 with at least one of the two following value sets:
// Value Set 1:
m1_user_filtered = assign({{31}},
milkyway = {
user_attributes = {
// Value set 1
{integer_attributes = {
{"my_integer_prop1", {<=10, >=100} },
{"my_integer_prop2", {==50 } } } ,
string_attributes = {
{"my_string_prop1", {"Value*", "!ValueD"} } }
},
// Value Set 2
{double_attributes = {
{"my_double_prop1", {==5.0 } } },
string_attributes = { {"my_string_prop1", {"ValueD"} } }
}
}
}
);
❍ colors. Optional. Lists Milkyway library color attributes that are included, on a
layer-by-layer basis, when reading the Milkyway library. Only shapes with the color
attributes listed are read for this layer. Table 2-2 lists the attributes. By default, the
IC Validator tool reads data of all color attribute values.
Table 2-2 Milkyway Color Attributes
Note:
This feature is used in runsets that support double patterning technology (DPT).
See the two_color() function for more information. Use the color option of the
layers argument of the write_milkyway() function to write the color attributes.
❍ read_fill_view_from. Optional. Lists the fill cells that are included on the specified
layer when the fill view is read. You can include the top fill cells only, all of the fill cells
except the top cells, or all of the fill cells. By default, the IC Validator tool reads all of
the fill cells when the fill view is read.
■ TOP_CELL. Includes the top fill cells.
■ LOWER_CELLS. Includes all of the fill cells except the top cells.
openaccess
Optional. Controls the reading of data from an OpenAccess database on a layer-by-layer
basis.
Note:
This argument is ignored for non-OpenAccess databases.
❍ objects. Optional. Includes the specified objects, on a layer-by-layer basis, when
reading the OpenAccess database. By default, the IC Validator tool reads all objects.
❍ blockage_types. Optional. Filters objects by blockage type. The oaBlockage objects
have an associated blockage type; other types of objects do not. By default, the
IC Validator tool reads all objects.
Note:
See the openaccess_options() function for more information about reading
oaBlockage objects.
Table 2-3 lists the blockage type options..
Table 2-3 OpenAccess Blockage Types
FEEDTHRU_BLOCKAGE FEEDTHRU
FILL_BLOCKAGE FILL
PIN_BLOCKAGE PIN
PLACEMENT_BLOCKAGE PLACEMENT
ROUTING_BLOCKAGE ROUTING
SCREEN_BLOCKAGE SCREEN
SLOT_BLOCKAGE SLOT
VIA_BLOCKAGE VIA
WIRING_BLOCKAGE WIRING
MULTI SAME
Note:
This feature is used in runsets that support double patterning technology (DPT).
See the two_color() function for more information. See the
openaccess_options() function for more information.
grid_check
Optional. Overrides the values specified in the layout_grid_options() function in the
specific layer. Any values that are unspecified default to the corresponding value
specified in the layout_grid_options() function.
❍ resolution. Optional. Inspects the layer for off-grid data when set to a value greater
than the input library resolution. The default is the resolution specified in the
layout_grid_options() function.
❍ check_45. Optional. Checks the specified layout data types function in the specific
layer for angles which are not even multiples of 45 degrees. The default is the layout
data types specified in the layout_grid_options() function.
■ POLYGON. Reports polygon edges as an error if the angle, with respect to the x-axis
of the cell where the edges are defined, is not a multiple of 45 degrees.
■ PATH. Reports path centerline segments as an error if the angle, with respect to
the x-axis of the cell where the edges are defined, is not a multiple of 45 degrees.
❍ check_90. Optional. Checks the specified layout data types function in the specific
layer for angles which are not even multiples of 90 degrees. The default is the layout
data types specified in the layout_grid_options() function.
■ POLYGON. Reports polygon edges as an error if the angle, with respect to the x-axis
of the cell where the edges are defined, is not a multiple of 90 degrees.
■ PATH. Reports path centerline segments as an error if the angle, with respect to
the x-axis of the cell where the edges are defined, is not a multiple of 90 degrees.
select_cells
Optional. Includes the specified cells when importing the assign layer. When a cell is
selected, its references are included. You can add the ! character, which is the NOT
operator, as a prefix to a cell name to exclude its data and its descendant data from
selection. String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information. By default, the IC Validator tool selects all cells.
Note:
Excluding the parent of a cell takes precedence over selecting a cell; that is, a cell is
excluded if its parent is excluded.
See the select argument for selecting cells based on the presence of a marker layer.
In the following example, all hierarchy in the MID_CELL cell is selected.
select_cells = {"MID_CELL"}
(LEVEL 1) MID_CELL
(LEVEL 2) BOT_CELL
In the following example, using the NOT operator (!) means that only data outside the
BOT_CELL cell is selected (TOP_CELL and MID_CELL cells).
select_cells = { "*", "!BOT_CELL" }
(LEVEL 1) MID_CELL
(LEVEL 2) BOT_CELL
In the following example, using the NOT operator (!) means that only data outside the
MID_CELL cell is selected (top-level data in the TOP_CELL cell).
select_cells = { "TOP_CELL", "!MID_CELL" }
Figure 2-15 select_cells Argument Hierarchy Example Using the NOT Operator
TOP_CELL selected
(LEVEL 0)
(LEVEL 1) MID_CELL
(LEVEL 2) BOT_CELL
In the following example, the output data includes the MID_CELL cell and below, and the
BOT_CELL cell and below. Data from the MID2_CELL cell is selected when it is below
the MID_CELL cell, but not selected when it is located only below the TOP_CELL cell.
select_cells = { "MID_CELL", "BOT_CELL" }
(LEVEL 1) (LEVEL 1)
MID_CELL MID2_CELL
(LEVEL 2) (LEVEL 2)
MID2_CELL BOT_CELL
(LEVEL 3)
BOT_CELL
polygons
Optional. Lists the polygons created in the specified cells. The polygons are added as
data is read into cells, and polygons are treated as if they are direct input from the layout.
Therefore, arguments, such as the magnification_factor argument of the library()
function, that transform input layout data are applied to the polygons that are created.
Data counts in the tree files include these polygons.
If a cell name does not exist in the input layout, the name is ignored. If a cell name is not
specified, the polygons in the associated list are created in the top cell. A list of two
coordinates is considered a rectangle.
Note:
If you are using the library_import() function, the magnification factor specified in
the libraries argument of the assign() function is applied.
If you are using the library_import() function and no cell name is specified,
polygons are created in the top cell of the library specified in the libraries argument
of the assign() function.
Here is an example of the polygons argument:
m1 = assign({{==1}},
polygons = {
// Two rectangles in the top cell
{{
{{1.0, 1.0}, {2.0, 2.0}},
{{3.0, 3.0}, {4.0, 4.0}}
}},
// Two rectangles in cell A
{cell = "A",
coordinates = {
{{1.0, 1.0}, {2.0, 2.0}, {2.0, 3.0}, {1.0, 3.0}},
{{3.0, 3.0}, {4.0, 4.0}}
}}
}
);
libraries
Optional. Specifies the library. An assign function uses only layers from this library. The
library is defined by the return value of the library() or library_import() function.
Note:
The list can only contain one library.
The libraries argument is required if you use the library_import() function and the
argument is prohibited if you do not use the library_import() function.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
layer_intent
Optional. Specifies the layer types:
LAYER_INTENT_METAL
LAYER_INTENT_FILL
LAYER_INTENT_INTERCONNECT
LAYER_INTENT_BASE
LAYER_INTENT_VIA
LAYER_INTENT_DEVICE
You can list more than one type. For example, a layer can be of type
LAYER_INTENT_METAL and LAYER_INTENT_INTERCONNECT. The default is unspecified
intent.
Note:
The LAYER_INTENT_BASE layer type provides identical functionality to the
LAYER_INTENT_DEVICE layer type, and is maintained for legacy support.
gds
Optional. Controls the reading of data from a GDSII file on a layer-by-layer basis.
❍ user_defined_properties. Optional. Writes the specified GDSII property numbers
to the specified user-defined properties. By default, the IC Validator tool does not
write any properties.
■ double_properties. Specifies the properties that are written to the specified
property numbers.
- name. Specifies the property name.
- number. Specifies the property number. The property numbers must be in the
range of 0–255, inclusive.
See the user_defined_properties argument of the write_gds() function for more
information.
oasis
Optional. Controls the reading of data from an OASIS file on a layer-by-layer basis.
❍ user_defined_properties. Optional. Writes the specified OASIS property numbers
to the specified user-defined properties. By default, the IC Validator tool does not
write any properties.
■ double_properties. Specifies the properties that are written to the specified
property numbers.
- number. Specifies the property number. The property numbers must be in the
range of 0–255, inclusive.
See the user_defined_properties argument of the write_oasis() function for
more information.
ndm
Optional. Controls the reading of data from an NDM library on a layer-by-layer basis. This
ndm argument filters data only for the given layer. The ndm_options() function controls
which data is read globally.
Note:
The ndm argument is ignored for non-NDM libraries.
❍ views. Optional. Includes the specified views, on a layer-by-layer basis, when
reading the NDM library. This option works with the drc_black_box_cells,
lvs_black_box_cells, and layout_view_cells arguments of the ndm_options()
function. See Table 2-5 in the assign() function section for a list of views. By default,
the IC Validator tool reads all views.
Table 2-5 NDM views Options for assign Functions
VIA_OBJECT VERTICAL_TRACK_OBJECT
❍ shape_uses. Optional. Includes objects with the specified shape when reading the
NDM library for this layer. You can use the exclude_ndm_shape_uses() function to
obtain a list of all possible shapes except those specified. By default, the IC Validator
tool reads data of all shapes types. Table 2-7 lists the shape uses.
Table 2-7 NDM shape_uses Options
❍ design_types. Optional. Includes only data from cells with the specified design
types on this layer when reading the NDM library. It does not apply to the top cell.
Table 2-9 lists the design types. By default, the tool reads all design types.
Table 2-9 NDM design_types Options
SHAPING_BLOCKAGE
❍ blockage_layers. Optional. Includes blockages and route guides with any of the
given layer numbers in their blockage layer list. By default, there is no filtering of
blockages and route guides by blockage layer.
Here is an example of the blockage_layers argument:
aM2 = assign( { 2, 0} );
aM2_BLKG = assign( {NDM_SYSTEM_LAYER_ROUTING_BLOCKAGE}, \
ndm={blockage_layers={2},
views={DESIGN_VIEW, FRAME_VIEW} }
);
❍ utilization_layers. Optional. Includes route guides with any of the given layer
numbers in their utilization layer list. By default, there is no filtering of route guides by
utilization layer.
❍ masks. Specifies the multi-patterning mask that determine the shapes that are read
from the NDM library. The default is no filtering by multi-patterning mask. Table 2-11
lists the mask options.
Table 2-11 NDM Masks
SAME_MASK
❍ read_from. Optional. Specifies whether data is read from design cell views (both
design and frame), internal designs, or both. The default is no filtering ({ }). no
filtering.
■ VIEWS. Includes data from design cell views on this runset layer.
❍ internal_designs. Optional. Specifies the internal designs from which to read data
for a given runset layer. Table 2-12 lists the internal_design options. See the
internal_designs argument of the ndm_options() function for more information.
Table 2-12 NDM Internal Design Uses
❍ route_guide_layers. Optional. Reads route guides of only the specified layers. The
default is to read all route guides.
❍ read_internal_designs_from. Optional. Lists the internal design cells that are
included on the specified layer when an internal design is read. You can include the
top internal design cells only, all of the internal design cells except the top cells, or all
of the internal design cells. By default, the IC Validator tool reads all of the internal
design cells when the internal design is read.
■ TOP_CELL. Includes the top internal design cells.
■ LOWER_CELLS. Includes all of the internal design cells except the top cells.
❍ keep_properties. Optional. Keeps the specified NDM properties for data on the
layer when reading the NDM library. These properties can be used by the
write_ndm() function to set properties on output shapes based on input layer
shapes they interact with. By default, the IC Validator tool does not keep any
properties.
■ OWNER_NET. Keeps the net property that each shape is assigned to as defined in
the NDM library. Information about the net is kept, including the net name and net
type. This option keeps only net information for shapes in the top-level design
view.
■ SHAPE_USE. Keeps the shape_use property on each shape as defined in the NDM
library. These properties are kept for every cell and are applied hierarchically.
In the following example, both OWNER_NET and SHAPE_USE properties are preserved
on NDM layer 31.
m1 = assign({{31}},
ndm = {
keep_properties={SHAPE_USE,OWNER_NET}
}
);
select
Optional. Selects cells by cell name, marker layer, or both.
❍ cells. Includes the specified cells when importing the assign layer. When a cell is
selected, its references are included. You can prefix a cell name with the ! character
to exclude its data and its descendant data from selection. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
By default, the tool selects all cells.
Note:
Excluding the parent of a cell takes precedence over selecting a cell; that is, a cell
is excluded if its parent is excluded.
❍ marker_layers. Lists layer range and datatype range pairs. When set to an empty
list (the default) then the marker_layers list is ignored. The data_type_range value
for each pair is optional, with a default of all datatypes. See Layout Layer and
Datatype Ranges for information about the limits of the values.
This option works in conjunction with the cells option; it restricts selection to only
those cells that contain at least one marker layer. The cells list is pruned by removing
any cells that do not directly (ignoring reference data) contain the marker layer.
Negated cells in the cells list are not pruned.
❍ depth. Specifies the depth of the cell hierarchy included by the cells and
marker_layers options. The default is ALL.
■ CELL_LEVEL. Includes only the geometric data in the cell; no descendants are
included unless they are also in the cells list.
■ DESCENDANTS. Includes only data in the descendants of a cell, recursively. No
cell-level data is included unless the cell is a descendant of a cell in the cells list.
■ ALL. Includes all data in the cell and below.
■ true. Selects all cells except for the cells specified by the cells and
marker_layers options.
■ false. Selects the cells specified by the cells and marker_layers options.
¤ ALL_SAME_ORDER. Specifies that the order of the values in both the runset
and the GDSII or OASIS property must be identical.
¤ SUPERSET. Specifies a superset of the GDSII or OASIS property.
¤ SUBSET. Specifies that the value must be a subset of the GDSII or OASIS
property.
❍ geometry_match. Specifies how geometric matching is performed between placed
cells from the original (tree0) hierarchy and unplaced cells or golden library cells. By
default, no geometric matching is performed.
The restrictions are
■ This option works with the main libraries in the GDSII and OASIS formats.
■ This option does not work when the main library format is Milkyway, NDM, or
OpenAccess.
■ This option does not work with In-Design flows.
■ baseline_cells. Optional. Specifies a list of cell names of either unplaced cells
or golden library cells to check for geometric matches with the original cell
hierarchy. When you use this option, you cannot use the cells option of the
select argument.
Important:
For a large design, if the IC Validator tool determines that the top cell might
match a golden library cell, the tool displays a warning that runtime and
memory will be high.
■ baseline_sources. Optional. Specifies whether the IC Validator tool uses cells
from one of the golden libraries, unplaced cells, or both to perform geometric
matches with placed cells from the original hierarchy. The default is
GOLDEN_LIBRARY.
Uppercase cells contain layers {1,0} and {2,0} while lowercase cells only contain layer
{1,0}.
In this example, the select cells have the default value of all cells ("*"}), which selects
cells {"a", "B", "c", "D", "e", "F", "G"}.
Because only the uppercase cells contain the marker layer, the select cells list is pruned
to {"B", "D", "F", "G"} and the assign command is run as
L= = assign({{1,0}, select = {cells = {"B", "D", "F", "G"}});
Function Group
ASSIGN. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
The following is a simple polygon layer example:
m1 = assign({{7}}); /* layer 7 and all datatypes*/
m2 = assign({{8, 0}}, select_cells={"A*","B*","!A1","!B5*"});
/* layer 8 and datatype 0 */
m3 = assign({{[9,11], [0,3]}}); /* layers 9 through 11 and
data types 0 through 3 */
m4 = assign({{15}},
grid_check={resolution=0.05, check_45={PATH}}
);
See Also
assign_edge()
assign_openaccess()
assign_openaccess_edge()
assign_openaccess_text()
assign_text()
layout_grid_options()
run_options()
assign_edge()
The assign_edge() function assigns an edge-layer variable to data found on specified
layers in the layout. This function reads only zero width paths and the boundaries of
Milkyway cell site rows, and ignores all other geometric data. Data assigned to the layer can
be restricted to data of a specified datatype.
See the assign_openaccess_edge() function for an assign function that is specific to the
OpenAccess format. The assign_openaccess_edge() accepts layer and purpose names
as arguments, rather than numeric layer and datatype ranges. If you use the
assign_edge() function for OpenAccess data, you must specify an OpenAccess layer
mapping file in the openaccess_options() function.
Syntax
assign_edge(
ldt_list = {{layer_num_range = integerconstraint,
data_type_range = integerconstraint},
...},
milkyway = {views = {"string", ...},
objects = {object_type, ...},
cell_types = {cell_type, ...},
net_types = {net_type, ...},
route_types = {route_type, ...},
read_fill_view_from = {TOP_CELL, LOWER_CELLS}
}, //optional
openaccess = {objects = {ARC, LINE, PATH, PATH_SEGMENT}, //optional
colors = {GRAY, MASK_ONE_UNLOCKED, MASK_ONE_LOCKED,
MASK_TWO_UNLOCKED, MASK_TWO_LOCKED,
MASK_THREE_UNLOCKED, MASK_THREE_LOCKED,
BLACK, MULTI, SAME}}, //optional
grid_check = {resolution = double,
check_45 = {POLYGON, PATH},
check_90 = {POLYGON, PATH}}, //optional
libraries = {library}, //optional
name = "layer_label", //optional
edges = {{coordinates = {{{x = double, y = double}, ...}, ...},
cell = "string"}, ...}, //optional
ndm = {views = {view_type, ...},
objects = {object_edge_type, ...},
shape_uses = {shape_use_type, ...},
net_types = {net_type, ...},
design_types = {design_type, ...},
masks = {ndm_mask, ...},
read_from = {assign_ndm_read_from, ...},
internal_designs = {ndm_internal_design_use, ...},
read_internal_designs_from = {TOP_CELL, LOWER_CELLS}
} //optional
);
Returns
edge layer
Arguments
ldt_list
Required. Lists the layer range and datatype range pairs. The data_type_range value
for each pair is optional, with a default of all datatypes. See Layout Layer and Datatype
Ranges for information about the limits of the values.
Note:
You can use the assign_layer_out_of_range argument of the run_options()
function to specify the behavior of the IC Validator tool when an assign function
contains layer or datatype numbers that are greater than the maximum allowed range
of the input library format.
For NDM libraries, lists the layer range and layer purpose range pairs. The
data_type_range value, which is the layer purpose, for each pair is optional, with a
default of all datatypes. See Layout Layer and Datatype Ranges for information about
the limits of the values.
milkyway
Optional. Controls the reading of data from a Milkyway library on a layer-by-layer basis.
This argument works with the drc_black_box_cells and lvs_black_box_cells
arguments of the milkyway_options() function. These arguments of the
milkyway_options() function control the views on a cell-by-cell basis.
Note:
The milkyway argument is ignored for non-Milkyway libraries.
❍ views. Optional. Includes the specified views, on a layer-by-layer basis, from a
Milkyway library. By default, the IC Validator tool reads all views.
Note:
Any number of views can be referenced in the Milkyway library. The maximum
combined number of unique view names used in all assign functions in the runset
is 32.
❍ objects. Optional. Includes the specified objects, on a layer-by-layer basis, when
reading the Milkyway library. Table 2-13 lists the objects. By default, the IC Validator
tool reads all objects except HORIZONTAL_WIRE_TRACK and VERTICAL_WIRE_TRACK.
Table 2-13 Milkyway objects Options for the assign_edge() Function
VERTICAL_WIRE_TRACK VERTICALWIRE
❍ read_fill_view_from. Optional. Lists the fill cells that are included on the specified
layer when the fill view is read. You can include the top fill cells only, all of the fill cells
except the top cells, or all of the fill cells. By default, the IC Validator tool reads all of
the fill cells when the fill view is read.
■ TOP_CELL. Includes the top fill cells.
■ LOWER_CELLS. Includes all of the fill cells except the top cells.
openaccess
Optional. Controls the reading of data from an OpenAccess database on a layer-by-layer
basis.
Note:
This argument is ignored for non-OpenAccess databases.
❍ objects. Optional. Includes the specified objects, on a layer-by-layer basis, when
reading the OpenAccess database. By default, the IC Validator tool reads all objects.
❍ colors. Optional. Lists OpenAccess library color attributes that are included, on a
layer-by-layer basis, when reading the OpenAccess library. Only shapes with the
color attributes listed are read for this layer. Table 2-14 lists the attributes. By default,
the IC Validator tool reads data of all color attribute values.
Table 2-14 OpenAccess Color Attributes
MULTI SAME
Note:
This feature is used in runsets that support double patterning technology (DPT).
See the two_color() function for more information. See the
openaccess_options() function for more information.
grid_check
Optional. Overrides the values specified in the layout_grid_options() function in the
specific layer. Any values that are unspecified default to the corresponding value
specified in the layout_grid_options() function.
❍ resolution. Optional. Inspects the layer for off-grid data when set to a value greater
than the input library resolution. The default is the resolution specified in the
layout_grid_options() function.
❍ check_45. Optional. Checks the specified layout data types function in the specific
layer for angles which are not even multiples of 45 degrees. The default is the layout
data types specified in the layout_grid_options() function.
■ POLYGON. Reports polygon edges as an error if the angle, with respect to the x-axis
of the cell where the edges are defined, is not a multiple of 45 degrees.
■ PATH. Reports path centerline segments as an error if the angle, with respect to
the x-axis of the cell where the edges are defined, is not a multiple of 45 degrees.
❍ check_90. Optional. Checks the specified layout data types function in the specific
layer for angles which are not even multiples of 90 degrees. The default is the layout
data types specified in the layout_grid_options() function.
■ POLYGON. Reports polygon edges as an error if the angle, with respect to the x-axis
of the cell where the edges are defined, is not a multiple of 90 degrees.
■ PATH. Reports path centerline segments as an error if the angle, with respect to
the x-axis of the cell where the edges are defined, is not a multiple of 90 degrees.
libraries
Optional. Specifies the libraries. An assign function uses only layers from this library. The
library is defined by the return value of the library() or library_import() function.
Note:
The list can only contain one library.
The libraries argument is required if you use the library_import() function and the
argument is prohibited if you do not use the library_import() function.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
edges
Optional. Lists the edges created in the specified cells. Edges are added as data is read
into cells, and polygons are treated as if they are direct input from the layout. Therefore,
arguments, such as the magnification_factor argument of the library() function,
that transform the input layout data are applied to the edges that are created. Data
counts in the tree files include these edges.
If a cell name does not exist in the input layout, the name is ignored. If a cell name is not
specified, the edges in the associated list are created in the top cell.
Note:
If you are using the library_import() function, the magnification factor specified in
the library argument of the assign_edge() function is applied.
If you are using the library_import() function and no cell name is specified, edges
are created in the top cell of the library specified in the library argument of the
assign_edge() function.
ndm
Optional. Controls the reading of data from an NDM library on a layer-by-layer basis. This
ndm argument filters data only for the given layer. The ndm_options() function controls
which data is read globally.
Note:
The ndm argument is ignored for non-NDM libraries.
❍ views. Optional. Includes the specified views, on a layer-by-layer basis, when
reading the NDM library. This option works with the drc_black_box_cells,
lvs_black_box_cells, and layout_view_cells arguments of the ndm_options()
function. See Table 2-5 in the assign() function section for a list of views. By default,
the IC Validator tool reads all views.
❍ shape_uses. Optional. Specifies the shape when reading the NDM library for this
layer. You can use the exclude_ndm_shape_uses() function to obtain a list of all
possible shapes except those specified. By default, the IC Validator tool reads data of
all shapes types. See Table 2-7 in the assign() function section for a list of shape
uses.
❍ net_types. Optional. Includes the specified net types, on a layer-by-layer basis,
when reading the NDM library. You can use the exclude_ndm_net_types() function
to obtain a list of all possible net types except those specified. By default, the
IC Validator tool reads data of all net types. Table 2-8 in the assign() function
section lists the net types.
❍ design_types. Optional. Includes only data from cells with the specified design
types on this layer when reading the NDM library. It does not apply to the top cell.
Table 2-9 in the assign() function lists the types. By default, the tool reads all design
types.
❍ masks. Specifies the multi-patterning mask that determine the shapes that are read
from the NDM library. The default is not to set a multi-patterning mask. Table 2-11 in
the assign() function section lists the mask options.
❍ read_from. Optional. Specifies whether data is read from design cell views (both
design and frame), internal designs, or both. The default is no filtering ({ }). no
filtering.
■ VIEWS. Includes data from design cell views on this runset layer.
❍ internal_designs. Optional. Specifies the internal designs from which to read data
for a given runset layer. Table 2-12 in the assign() function section lists the
internal_design options. See the internal_designs argument of the
ndm_options() function for more information.
■ LOWER_CELLS. Includes all of the internal design cells except the top cells.
Function Group
ASSIGN. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
See the Examples section of the assign() function for more information.
See Also
assign()
assign_openaccess()
assign_openaccess_edge()
assign_openaccess_text()
assign_text()
layout_grid_options()
run_options()
assign_openaccess()
The assign_openaccess() function assigns a polygon-layer variable to data found on
specified layers in the layout. This function is an OpenAccess-specific version of the
assign() function that accepts layer and purpose names as arguments, rather than
numeric layer and datatype ranges.
This function reads only positive width paths and polygons, and ignores zero width paths.
Data assigned to the layer variable can be restricted to objects of a specified type.
See the openaccess_options() function for more information about reading OpenAccess
system objects, such as blockages and boundaries.
Syntax
assign_openaccess(
layer_purpose_list = {{layer_names = {"string", ...},
purpose_names = {"string", ...}},
...},
objects = {DONUT, DOT, ELLIPSE, PATH, PATH_SEGMENT,
PIN, POLYGON, RECTANGLE}, //optional
grid_check = {resolution = double,
check_45 = {POLYGON, PATH},
check_90 = {POLYGON, PATH}}, //optional
select_cells = {"string", ...}, //optional
polygons = {{coordinates = {{{x = double, y = double}, ...}, ...},
cell = "string"}, ...}, //optional
name = "layer_label", //optional
blockage_types = {NONE, ROUTING_BLOCKAGE, VIA_BLOCKAGE,
PLACEMENT_BLOCKAGE, WIRING_BLOCKAGE,
FILL_BLOCKAGE, SLOT_BLOCKAGE, PIN_BLOCKAGE,
FEEDTHRU_BLOCKAGE, SCREEN_BLOCKAGE},
//optional
area_boundary_names = {"string", ...}, //optional
layer_intent = {LAYER_INTENT_METAL, LAYER_INTENT_FILL,
LAYER_INTENT_INTERCONNECT, LAYER_INTENT_BASE,
LAYER_INTENT_VIA, LAYER_INTENT_DEVICE},
//optional
select = {cells = {"string", ...},
marker_layer_purposes = {
{layer_names = {"string", ...},
purpose_names = {"string", ...}},
...},
depth = CELL_LEVEL | DESCENDANTS | ALL,
complement = true | false},
colors = {GRAY, MASK_ONE_UNLOCKED, MASK_ONE_LOCKED,
MASK_TWO_UNLOCKED, MASK_TWO_LOCKED,
MASK_THREE_UNLOCKED, MASK_THREE_LOCKED,
BLACK, MULTI, SAME} //optional
);
Returns
polygon layer
Arguments
layer_purpose_list
Required. Lists the layer name and purpose name pairs. The purpose name for each pair
is optional; the default is all purposes read to the layer.
objects
Optional. Includes the specified objects, on a layer-by-layer basis, when reading the
OpenAccess library. By default, the IC Validator tool reads all objects.
Note:
In OpenAccess, a pin is also a shape. Therefore, an object can be both a pin (PIN)
and a shape, such as RECTANGLE or POLYGON.
In the following example, the metal1_rect layer is assigned rectangles and pins that are
rectangles:
metal1_rect = assign_openaccess({{{"metal1"}}},
objects={RECTANGLE});
In the following example, the metal1_pin_r layer is assigned rectangles and all pins,
including those objects that are nonrectangular:
metal1_pin_r = assign_openaccess({{{"metal1"}}},
objects={RECTANGLE,PIN});
grid_check
Optional. Overrides the values specified in the layout_grid_options() function in the
specific layer. Any values that are unspecified default to the corresponding value
specified in the layout_grid_options() function.
❍ resolution. Optional. Inspects the layer for off-grid data when set to a value greater
than the input library resolution. The default is the resolution specified in the
layout_grid_options() function.
❍ check_45. Optional. Checks the specified layout data types function in the specific
layer for angles which are not even multiples of 45 degrees. The default is the layout
data types specified in the layout_grid_options() function.
■ POLYGON. Reports polygon edges as an error if the angle, with respect to the x-axis
of the cell where the edges are defined, is not a multiple of 45 degrees.
■ PATH. Reports path centerline segments as an error if the angle, with respect to
the x-axis of the cell where the edges are defined, is not a multiple of 45 degrees.
❍ check_90. Optional. Checks the specified layout data types function in the specific
layer for angles which are not even multiples of 90 degrees. The default is the layout
data types specified in the layout_grid_options() function.
■ POLYGON. Reports polygon edges as an error if the angle, with respect to the x-axis
of the cell where the edges are defined, is not a multiple of 90 degrees.
■ PATH. Reports path centerline segments as an error if the angle, with respect to
the x-axis of the cell where the edges are defined, is not a multiple of 90 degrees.
select_cells
Optional. Includes the specified cells when importing the assign layer. When a cell is
selected, its references are included. You can add the ! character, which is the NOT
operator, as a prefix to a cell name to exclude its data and its descendant data from
selection. String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information. By default, the IC Validator tool selects all cells.
See the Example section of the assign() function for more information.
polygons
Optional. Lists the polygons created in the specified cells. The polygons are added as
data is read into cells, and polygons are treated as if they are direct input from the layout.
Therefore, arguments, such as the magnification_factor argument of the library()
function, that transform input layout data are applied to the polygons that are created.
Data counts in the tree files include these polygons.
If a cell name does not exist in the input layout, the name is ignored. If a cell name is not
specified, the polygons in the associated list are created in the top cell. A list of two
coordinates is considered a rectangle.
Note:
If you are using the library_import() function, the magnification factor specified in
the library argument of the assign_openaccess() function is applied.
If you are using the library_import() function and no cell name is specified,
polygons are created in the top cell of the library specified in the library argument
of the assign_openaccess() function.
See the assign() function for an example.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
blockage_types
Optional. Filters objects by blockage type. The oaBlockage objects have an associated
blockage type; other types of objects do not. By default, the IC Validator tool reads all
objects.
Note:
See the openaccess_options() function for more information about reading
oaBlockage objects.
Table 2-16 lists the blockage type options.
Table 2-16 OpenAccess Blockage Types
ROUTING_BLOCKAGE ROUTING
VIA_BLOCKAGE VIA
PLACEMENT_BLOCKAGE PLACEMENT
WIRING_BLOCKAGE WIRING
FILL_BLOCKAGE FILL
SLOT_BLOCKAGE SLOT
PIN_BLOCKAGE PIN
FEEDTHRU_BLOCKAGE FEEDTHRU
SCREEN_BLOCKAGE SCREEN
area_boundary_names
Optional. Filters objects by area boundary name. The oaAreaBoundary objects can have
an associated name; other types of objects do not. See the openaccess_options()
function for more information about reading oaAreaBoundary objects. String matching
using metacharacters is allowed. See “String Matching” on page A-11 for more
information. By default, the IC Validator tool reads all objects.
layer_intent
Optional. Specifies the layer types:
LAYER_INTENT_METAL
LAYER_INTENT_FILL
LAYER_INTENT_INTERCONNECT
LAYER_INTENT_BASE
LAYER_INTENT_VIA
LAYER_INTENT_DEVICE
You can list more than one type. For example, a layer can be of type
LAYER_INTENT_METAL and LAYER_INTENT_INTERCONNECT. The default is unspecified
intent.
Note:
The LAYER_INTENT_BASE layer type provides identical functionality to the
LAYER_INTENT_DEVICE layer type, and is maintained for legacy support.
select
Optional. Selects cells by cell name, marker layer, or both.
❍ cells. Includes the specified cells when importing the assign layer. When a cell is
selected, its references are included. You can prefix a cell name with the ! character
to exclude its data and its descendant data from selection. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
By default, the tool selects all cells.
Note:
Excluding the parent of a cell takes precedence over selecting a cell; that is, a cell
is excluded if its parent is excluded.
❍ marker_layers. Lists layer range and datatype range pairs. When set to an empty
list (the default) then the marker_layers list is ignored. The data_type_range value
for each pair is optional, with a default of all datatypes. See Layout Layer and
Datatype Ranges for information about the limits of the values.
This option works in conjunction with the cells option; it restricts selection to only
those cells that contain at least one marker layer. The cells list is pruned by removing
any cells that do not directly (ignoring reference data) contain the marker layer.
Negated cells in the cells list are not pruned.
❍ depth. Specifies the depth of the cell hierarchy included by the cells and
marker_layers options. The default is ALL.
■ CELL_LEVEL. Includes only the geometric data in the cell; no descendants are
included unless they are also in the cells list.
■ DESCENDANTS. Includes only data in the descendants of a cell, recursively. No
cell-level data is included unless the cell is a descendant of a cell in the cells list.
■ ALL. Includes all data in the cell and below.
■ true. Selects all cells except for the cells specified by the cells and
marker_layers options.
■ false. Selects the cells specified by the cells and marker_layers options.
See the example in the definition of the select argument of the assign() function.
colors
Optional. Lists OpenAccess library color attributes that are included, on a layer-by-layer
basis, when reading the OpenAccess library. Only shapes with the color attributes listed
are read for this layer. Table 2-17 lists the attributes. By default, the IC Validator tool
reads data of all color attribute values.
Table 2-17 OpenAccess Color Attributes
MULTI SAME
Note:
This feature is used in runsets that support double patterning technology (DPT). See
the two_color() function for more information. See the openaccess_options()
function for more information.
Function Group
ASSIGN. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
See the openaccess_options() function for an example that uses the
assign_openaccess() function.
See Also
assign()
assign_edge()
assign_openaccess_edge()
assign_openaccess_text()
assign_text()
openaccess_options()
run_options()
assign_openaccess_edge()
The assign_openaccess_edge() function assigns an edge-layer variable to data found on
specified layers in the layout. This function is an OpenAccess-specific version of the
assign_edge() function that accepts layer and purpose names as arguments, rather than
numeric layer and datatype ranges.
This function reads only zero width paths and ignores all other geometric data. Data
assigned to the layer can be restricted to objects of a specified type.
Syntax
assign_openaccess_edge(
layer_purpose_list = {{layer_names = {"string", ...},
purpose_names = {"string", ...}},
...},
objects = {ARC, LINE, PATH, PATH_SEGMENT}, //optional
grid_check = {resolution = double,
check_45 = {POLYGON, PATH},
check_90 = {POLYGON, PATH}}, //optional
name = "layer_label", //optional
edges = {{coordinates = {{{x = double, y = double}, ...}, ...},
cell = "string"}, ...}, //optional
colors = {GRAY, MASK_ONE_UNLOCKED, MASK_ONE_LOCKED,
MASK_TWO_UNLOCKED, MASK_TWO_LOCKED,
MASK_THREE_UNLOCKED, MASK_THREE_LOCKED,
BLACK, MULTI, SAME} //optional
);
Returns
edge layer
Arguments
layer_purpose_list
Required. Lists the layer name and purpose name pairs. The purpose name for each pair
is optional; the default is all purposes read to the layer.
objects
Optional. Includes the specified objects, on a layer-by-layer basis, when reading the
OpenAccess library. By default, the IC Validator tool reads all objects.
grid_check
Optional. Overrides the values specified in the layout_grid_options() function in the
specific layer. Any values that are unspecified default to the corresponding value
specified in the layout_grid_options() function.
❍ resolution. Optional. Inspects the layer for off-grid data when set to a value greater
than the input library resolution. The default is the resolution specified in the
layout_grid_options() function.
❍ check_45. Optional. Checks the specified layout data types function in the specific
layer for angles which are not even multiples of 45 degrees. The default is the layout
data types specified in the layout_grid_options() function.
■ POLYGON. Reports polygon edges as an error if the angle, with respect to the x-axis
of the cell where the edges are defined, is not a multiple of 45 degrees.
■ PATH. Reports path centerline segments as an error if the angle, with respect to
the x-axis of the cell where the edges are defined, is not a multiple of 45 degrees.
❍ check_90. Optional. Checks the specified layout data types function in the specific
layer for angles which are not even multiples of 90 degrees. The default is the layout
data types specified in the layout_grid_options() function.
■ POLYGON. Reports polygon edges as an error if the angle, with respect to the x-axis
of the cell where the edges are defined, is not a multiple of 90 degrees.
■ PATH. Reports path centerline segments as an error if the angle, with respect to
the x-axis of the cell where the edges are defined, is not a multiple of 90 degrees.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
edges
Optional. Lists the edges created in the specified cells. Edges are added as data is read
into cells, and polygons are treated as if they are direct input from the layout. Therefore,
arguments such as the magnification_factor argument of the library() function,
that transform the input layout data are applied to the edges that are created. Data
counts in the tree files include these edges.
If a cell name does not exist in the input layout, the name is ignored. If a cell name is not
specified, the edges in the associated list are created in the top cell.
Note:
If you use the library_import() function, the magnification factor specified in the
library argument of the assign_openaccess_edge() function is applied.
If you use the library_import() function and no cell name is specified, edges are
created in the top cell of the library specified in the library argument of the
assign_openaccess_edge() function.
colors
Optional. Lists OpenAccess library color attributes that are included, on a layer-by-layer
basis, when reading the OpenAccess library. Only shapes with the color attributes listed
are read for this layer. Table 2-17 lists the attributes. By default, the IC Validator tool
reads data of all color attribute values.
Table 2-18 OpenAccess Color Attributes
MULTI SAME
Note:
This feature is used in runsets that support double patterning technology (DPT). See
the openaccess_options() and two_color() functions for more information.
Function Group
ASSIGN. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
See the openaccess_options() function for an example that uses the
assign_openaccess_edge() function.
See Also
assign()
assign_edge()
assign_openaccess()
assign_openaccess_text()
assign_text()
openaccess_options()
run_options()
assign_openaccess_text()
The assign_openaccess_text() function assigns a text-layer variable to the text found on
specified layers in the layout. This function is an OpenAccess-specific version of the
assign_text() function that accepts layer and purpose names as arguments, rather than
numeric layer and datatype ranges.
Syntax
assign_openaccess_text(
layer_purpose_list = {{layer_names = {"string", ...},
purpose_names = {"string", ...}},
...},
delete_text = {{cells = {"string", ...},
text = {"string", ...}},...}, //optional
use_exploded_text = {{cells = {"string", ...},
text = {"string", ...}}, ...}, //optional
objects = {PIN_TEXT, POLYGON_TEXT, TEXT,
TEXT_DISPLAY, TERMINAL_TEXT}, //optional
name = "layer_label" //optional
);
Returns
text layer
Arguments
layer_purpose_list
Required. Lists the layer name and purpose name pairs. The purpose name for each pair
is optional; the default is all purposes read to the layer.
delete_text
Optional. Lists the text deleted from specified cells. The list is additive; one list element
does not negate another list element. By default, text is not deleted.
❍ cells. Optional. Deletes text from the specified cells. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
By default, text is deleted from all cells.
❍ text. Optional. Deletes the specified text strings. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
By default, all text strings are deleted.
Note:
This delete_text argument does not delete text that is specified in the edtext
argument of the text_options() function.
use_exploded_text
Optional. Lists the cells where text strings for the specified layer and datatype are
retained if the cells are exploded. The list is additive; one list element does not negate
another list element. By default, exploded cells do not retain their text.
Note:
The use_exploded_text arguments in the assign_text(),
assign_openaccess_text(), and text_options() functions are additive.
Use the exploded_text_options argument of the text_options() function to control
the prepending of the hierarchical path to text when the cell it is in is exploded.
❍ cells. Optional. Specifies the cells from which text is used if these cells are
exploded. String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information. By default, text is deleted from all cells.
❍ text. Optional. Specifies the text strings that are used if a cell containing the text is
exploded. String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information. By default, the IC Validator tool uses all text strings.
objects
Optional. Assigns the specified text types to a layer when reading an OpenAccess
library. By default, the IC Validator tool allows all types to be read.
❍ PIN_TEXT. Assigns IC Validator automatically generated text for pins. It can be a pin
name or a net name depending on the runset options set in the pin_text argument
of the openaccess_options() function.
❍ POLYGON_TEXT. Assigns IC Validator automatically generated text for polygons. The
text is always a net name.
❍ TEXT. Assigns OpenAccess text object from the input database.
❍ TEXT_DISPLAY. Assigns OpenAccess text display object from the input database.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
ASSIGN. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
See the openaccess_options() function for an example that uses the
assign_openaccess_text() function.
See Also
assign()
assign_edge()
assign_openaccess()
assign_openaccess_edge()
assign_text()
openaccess_options()
run_options()
assign_text()
The assign_text() function assigns a text-layer variable to the text found on specified
layers in the layout. Text from multiple layers can be assigned to one text-layer variable.
See “Text Strings” in Appendix A for rules applied to text strings.
When the runset is optimized, unused text layers are pruned and, therefore, are not checked
for bad text.
See the assign_openaccess_text() function for an assign function that is specific to the
OpenAccess format. The assign_openaccess_text() function accepts layer and purpose
names as arguments, rather than numeric layer and datatype ranges. If you use the
assign_text() function for OpenAccess data, you must specify an OpenAccess layer
mapping file in the openaccess_options() function.
The arguments of the assign_text() function are executed in the following order:
1. delete_text
2. use_exploded_text
Syntax
assign_text(
ldt_list = {{layer_num_range = integerconstraint,
data_type_range = integerconstraint},
...},
milkyway = {views = {"string", ...},
cell_types = {cell_type, ...},
objects = {PIN_TEXT, POLYGON_TEXT, TEXT},
read_fill_view_from = {TOP_CELL, LOWER_CELLS}
}, //optional
delete_text = {{cells = {"string", ...},
text = {"string", ...}}, ...}, //optional
use_exploded_text = {{cells = {"string", ...},
text = {"string", ...}}, ...}, //optional
openaccess = {objects = {PIN_TEXT, POLYGON_TEXT, TEXT,
TEXT_DISPLAY, TERMINAL_TEXT}},
//optional
gds = {objects = {PROPERTY_TEXT, TEXT},
properties = {integer, ...}}, //optional
oasis = {objects = {PROPERTY_TEXT, TEXT},
properties = {integer, ...}}, //optional
libraries = {library}, //optional
name = "layer_label", //optional
ndm = {views = {view_type, ...},
objects = {object_text_type, ...},
shape_uses = {shape_use_type, ...},
design_types = {design_type, ...},
masks = {ndm_mask, ...},
Returns
text layer
Arguments
ldt_list
Required. Lists the layer range and datatype range pairs. The data_type_range value
for each pair is optional, with a default of all datatypes. See Layout Layer and Datatype
Ranges for information about the limits of the values.
Note:
You can use the assign_layer_out_of_range argument of the run_options()
function to specify the behavior of the IC Validator tool when an assign function
contains layer or datatype numbers that are greater than the maximum allowed range
of the input library format.
For NDM libraries, lists the layer range and layer purpose range pairs. The
data_type_range value, which is the layer purpose, for each pair is optional, with a
default of all datatypes. See Layout Layer and Datatype Ranges for information about
the limits of the values.
milkyway
Optional. Controls the reading of data from a Milkyway library on a layer-by-layer basis.
This argument works with the drc_black_box_cells and lvs_black_box_cells
arguments of the milkyway_options() function. These arguments of the
milkyway_options() function control the views on a cell-by-cell basis.
Note:
The milkyway argument is ignored for non-Milkyway libraries.
❍ views. Optional. Includes the specified views, on a layer-by-layer basis, from a
Milkyway library. By default, the IC Validator tool reads all views.
Note:
Any number of views can be referenced in the Milkyway library. The maximum
combined number of unique view names used in all assign functions in the runset
is 32.
❍ cell_types. Optional. Includes the specified cell types, on a layer-by-layer basis,
when reading the Milkyway library. This argument works with the cell_types and
exclude_cell_types arguments of the milkyway_options() function. These
arguments of the milkyway_options() function globally constrain the cell types that
are read. You can use the exclude_milkyway_cell_types() function to obtain a list
of all possible cell types except those specified by the exclude argument. By default,
the IC Validator tool reads data from all cell types. See Table 3-15 for a list of cell
types.
❍ objects. Optional. Assigns the specified text types to a layer when reading a
Milkyway library. By default, the IC Validator tool allows all types to be read.
■ PIN_TEXT. Assigns IC Validator automatically generated text for pins. It can be a
pin name or a net name depending on the runset options set in the pin_text
argument of the milkyway_options() function.
■ POLYGON_TEXT. Assigns IC Validator automatically generated text for polygons.
The text is always a net name.
■ TEXT. Assigns Milkyway text object from the input database.
❍ read_fill_view_from. Optional. Lists the fill cells that are included on the specified
layer when the fill view is read. You can include the top fill cells only, all of the fill cells
except the top cells, or all of the fill cells. By default, the IC Validator tool reads all of
the fill cells when the fill view is read.
■ TOP_CELL. Includes the top fill cells.
■ LOWER_CELLS. Includes all of the fill cells except the top cells.
delete_text
Optional. Lists the text deleted from specified cells. The list is additive; one list element
does not negate another list element. By default, the IC Validator tool does not delete
text.
❍ cells. Optional. Deletes text from the specified cells. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
By default, the IC Validator tool deletes text from all cells.
❍ text. Optional. Deletes the specified text strings. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
By default, the IC Validator tool deletes all text strings.
Note:
This delete_text argument does not delete text that is specified in the edtext
argument of the text_options() function.
use_exploded_text
Optional. Lists the cells where text strings for the specified layer and datatype are
retained if the cells are exploded. The list is additive; one list element does not negate
another list element. By default, the IC Validator tool does not retain the text of exploded
cells.
Note:
The use_exploded_text arguments in the assign_text(),
assign_openaccess_text(), and text_options() functions are additive.
Use the exploded_text_options argument of the text_options() function to control
the prepending of the hierarchical path to text when the cell it is in is exploded.
❍ cells. Optional. Specifies the cells from which text is used if these cells are
exploded. String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information. By default, the IC Validator tool deletes the text from
all cells.
❍ text. Optional. Specifies the text strings that are used if a cell containing the text is
exploded. String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information. By default, the IC Validator tool uses all text strings.
openaccess
Optional. Controls the reading of data from an OpenAccess database on a layer-by-layer
basis.
❍ objects. Optional. Assigns the specified text types to a layer when reading an
OpenAccess library. By default, the IC Validator tool allows all types to be read.
■ PIN_TEXT. Assigns IC Validator automatically generated text for pins. It can be a
pin name or a net name depending on the runset options set in the pin_text
argument of the openaccess_options() function.
■ POLYGON_TEXT. Assigns IC Validator automatically generated text for polygons.
The text is always a net name.
■ TEXT. Assigns OpenAccess text object from the input database.
■ TEXT_DISPLAY. Assigns OpenAccess text display object from the input database.
gds
Optional. Controls the text read from a GDSII file for each assigned text layer. If the
generate_property_text argument of the gds_options() function is TOP or ALL, text
objects are generated for polygons with associated properties. The text is located on the
polygon and has the same layer and datatype.
Note:
This option overrides selections made in the text argument of the gds_options()
function.
❍ objects. Optional. Assigns the specified text types to a layer when reading a GDSII
file. The default is TEXT.
■ PROPERTY_TEXT. Assigns automatically generated text for polygons.
❍ properties. Optional. Specifies the property numbers to use when the objects
argument is PROPERTY_TEXT. The property numbers must be in the range of 0–255,
inclusive. If this list is empty, no property text is assigned.
oasis
Optional. Controls the text read from an OASIS input library for each assigned text layer.
If the generate_property_text argument of the oasis_options() function is TOP or
ALL, text points are generated for polygons with associated properties. The text is
located on the polygon and has the same layer and datatype.
Note:
This option overrides selections made in text argument of the oasis_options()
function.
❍ objects. Optional. Assigns the specified text types to a layer when reading an
OASIS library. The default is TEXT.
■ PROPERTY_TEXT. Assigns automatically generated text for polygons.
❍ properties. Optional. Specifies the property numbers to use when the objects
argument is PROPERTY_TEXT. The property numbers must be in the range of 0–255,
inclusive. If this list is empty, no property text is assigned.
libraries
Optional. Specifies the libraries. An assign function uses only layers from this library. The
library is defined by the return value of the library() or library_import() function.
Note:
The list can only contain one library.
The libraries argument is required if you use the library_import() function and the
argument is prohibited if you do not use the library_import() function.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
ndm
Optional. Controls the reading of data from an NDM library on a layer-by-layer basis. This
ndm argument filters data only for the given layer. The ndm_options() function controls
which data is read globally.
Note:
The ndm argument is ignored for non-NDM libraries.
❍ views. Optional. Includes the specified views, on a layer-by-layer basis, when
reading the NDM library. This option works with the drc_black_box_cells,
lvs_black_box_cells, and layout_view_cells arguments of the ndm_options()
function. See Table 2-5 in the assign() function section for a list of views. By default,
the IC Validator tool reads all views.
❍ objects. Optional. Includes the specified objects, on a layer-by-layer basis, when
reading the NDM library. Table 2-19 lists the objects. By default, the IC Validator tool
reads all objects
Table 2-19 NDM objects Options for assign_text() Function
❍ shape_uses. Optional. Specifies the shape when reading the NDM library for this
layer. You can use the exclude_ndm_shape_uses() function to obtain a list of all
possible shapes except those specified. By default, the IC Validator tool reads data of
all shapes types. See Table 2-7 in the assign() function section for a list of shape
uses.
❍ design_types. Optional. Includes only data from cells with the specified design
types on this layer when reading the NDM library. It does not apply to the top cell.
Table 2-9 in the assign() function lists the types. By default, the tool reads all design
types.
❍ masks. Specifies the multi-patterning mask that determine the shapes that are read
from the NDM library. The default is not to set a multi-patterning mask. Table 2-11 in
the assign() function section lists the mask options.
❍ read_from. Optional. Specifies whether data is read from design cell views (both
design and frame), internal designs, or both. The default is no filtering ({ }). no
filtering.
■ VIEWS. Includes data from design cell views on this runset layer.
❍ internal_designs. Optional. Specifies the internal designs from which to read data
for a given runset layer. Table 2-12 in the assign() function section lists the
■ LOWER_CELLS. Includes all of the internal design cells except the top cells.
Function Group
ASSIGN. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Here is a simple example:
m1_text = assign_text({{7}}); /* layer 7 and all datatypes */
m2_text = assign_text({{[9, 11], [0,3]}} /* layers 9 through 11
and data types 0 through 3 */
This example reads normal text from the layout and generated text from property 4:
m1_all_text = assign_text({{==1}}, gds = {objects={TEXT,PROPERTY_TEXT},
properties={4}});
This example reads only normal text from the layout layer 1:
m1_text = assign_text({{==1}});
See Also
assign()
assign_edge()
assign_openaccess()
assign_openaccess_edge()
assign_openaccess_text()
openaccess_options()
run_options()
text_options()
text_origin()
buildsub()
The buildsub() function creates isolated substrate regions from a layer containing
isolation regions, which are typically isolation rings.
Note:
The output of the buildsub() function must be used only as bulk polygon layer for the
device configuration functions and the connect() function.
The buildsub() function creates a substrate-like layer by
• Selecting polygons from the input layer that create isolation regions, including
❍ Rings
❍ Polygons that edge touch the top-level cell extents
• Removing the selected isolation region data from the substrate to produce a set of
isolated bulk regions.
The effect is similar to forming a polygon in each cell that is the size of the extents of the cell
and then performing a NOT operation of the selected isolation data from the cell extent data.
The output from the buildsub() function is not the same as output from the not() function,
for example, substrate not layer.
Syntax
buildsub(
layer = polygon_layer,
oversize = double, //optional
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
layer
Required. Specifies the layer that contains isolation definition data from which the
substrate region is created.
oversize
Optional. Oversizes the extents at the top cell. This oversizing prevents the generated
bulk layer from being cut in two. The default is 0.0.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DEVICE.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
nwell
See Also
chip_extent()
get_substrate()
capacitor()
The capacitor() function collects extraction configuration information about intentional
capacitors that are defined by a device body layer and two terminal layers. The configuration
information, which contains device body and terminal layers, property extraction
information, schematic device mappings, and pin handling instructions, is stored in the
device matrix that is passed to the extract_devices() function.
A capacitor device is recognized when polygons in the device body layer interact with one
polygon from each terminal layer and from each optional pins device layer. If an optional pin
layer has the pin_type option set to BULK, the required relationship between the pin layer
polygon and the device body layer polygon is defined by the bulk_relationship
argument. If an optional pin layer has the pin_type option set to TERMINAL, the optional pin
layer polygon must interact with the device body layer polygon but is not required to enclose
the device body layer polygon.
Note:
See “Device Names” in Appendix A for the device_name argument restrictions.
Syntax
capacitor(
matrix = device_matrix,
device_name = "string",
device_body = polygon_layer,
terminal_a = polygon_layer,
terminal_b = polygon_layer,
optional_pins = {{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK
pin_compared = true | false},
...}, //optional
recognition_layer = polygon_layer, //optional
reference_layer = polygon_layer, //optional
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
properties = {{name = "string",
type = DOUBLE | DOUBLE_LIST | STRING,
scale = FEMTO | PICO | NANO | MICRO |
MILLI | KILO | MEGA | NONE},
...}, //optional
write_property_to =
NETLIST_XTR_SPICE | NETLIST_PEX_SPICE |
SPICE | ANNOTATION_FILE |
NETLIST_ANNOTATION_FILE_SPICE |
NETLIST | AUTO | NETLIST_SKIP_PCELL,
processing_layer_hash_map =
{"string", ...},
pin_map = {"string", ...}},
...}, //optional
property_function =
function, //optional
merge_parallel =
true | false, //optional
bulk_relationship =
ENCLOSE | INTERACT, //optional
swappable_pins =
{{"string", ...}, ...}, //optional
schematic_devices =
{{device_name = "string",
terminal_a = "string",
terminal_b = "string",
optional_pins = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
x_card = true | false, //optional
spice_netlist_function = "string", //optional
extract_shorted_device = true | false, //optional
area_capval = double, //optional
coinedge_capval = double, //optional
fringe_edge_capval = double, //optional
perim_capval = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
unique_identifier = "string", //optional
swappable_properties = {{pin_name = "string",
property_list = {"string", ...}},
...}, //optional
simulation_model_name = "string", //optional
dlink_libraries = {dev_dlink_library_handle, ...}, //optional
top_simulation_properties = true | false //optional
);
Returns
void
Arguments
matrix
Required. Specifies the device matrix used by the extraction functions. The matrix must
be defined by the init_device_matrix() function. Configuration details for device
extraction are stored in the matrix data object for use in the extract_devices()
function.
device_name
Required. Specifies the capacitor. A device name can be reused across multiple calls of
the capacitor() function if all calls have
❍ Equivalent numbers of optional pins with equivalent values for the pin_name and
pin_compared options.
device_body
Required. Specifies the body layer of the capacitor.
terminal_a
Required. Specifies the device layer that contains the first terminal of the capacitor. The
pin name generated by the IC Validator tool is “A”.
terminal_b
Required. Specifies the device layer that contains the second terminal of the capacitor.
The pin name generated by the IC Validator tool is “B”.
optional_pins
Optional. Lists additional bulk or terminal layers. You can specify up to 20 pins.
❍ device_layer. Required. Specifies the device layer.
recognition_layer
Optional. Specifies the layer used to recognize a device when the device body layer does
not interact with all terminal layers and processing layers. All processing layers must
interact with this specified recognition layer. This layer is also used to identify device
instances that are merged during layout extraction when multiple individual devices
occur within a single recognition layer polygon. See the merge_parallel argument for
more information.
reference_layer
Optional. Specifies the intended location in the hierarchy for the extracted device. The
layer is usually an assign layer.
processing_layer_hash
Optional. Specifies a hash of string to a processing layer and range pair. In the remote
property function, each layer is retrieved as a polygon set by passing the hash key to the
dev_processing_layer() function.
❍ layer1. Required. Specifies the processing layer, which is a non-terminal layer used
for calculating properties.
❍ range. Optional. Specifies the maximum distance value from a device body polygon.
This value defines a window around the device body for data collection.
A nonnegative range value collects processing polygons that are within the specified
range of the body polygon. The default is -1.
■ When the range value is -1, only processing_layer_hash polygons interacting
with the body layer polygon are selected for the polygon set.
■ When the range value is >0, a window is created by oversizing the body layer
polygon by the range value. All processing_layer_hash polygons interacting
with this window, either by overlap or by an externally touching edge, are selected
for the polygon set.
See the description of the processing_layer_hash argument of the nmos() and
pmos() function for diagrams that illustrate the application of the range value.
properties
Optional. Lists the property values that define the device. The default is
properties = {{"c"}},
❍ name. Required. Specifies the property name. See “Predefined Name Matches” in
Chapter 7, “Compare Functions Basics” of the IC Validator LVS User Guide for the
names and associated matches that are predefined during LVS compare.
Note:
More than one property sharing the same name is prohibited. Furthermore, the
property name is case-insensitive.
❍ type. Optional. Specifies the data type of the property. The default is DOUBLE.
Note:
The compare() function does not support the DOUBLE_LIST property. When
running dual-hierarchy extraction, the list of double properties is always written to
the annotation file unless the write_property_to argument is explicitly
specified.
❍ scale. Optional. Specifies the scale factor applied to property values output by the
write_spice(), write_xref_spice(), pex_generate_results(), and
write_annotation_file() functions. The default is NONE, which means no scaling.
You can use this scale option to convert dimensional property values from the
IC Validator native base unit of microns into the base unit of meters for SPICE
simulation. If the lvs_user_unit argument of the run_options() function is set to
METER, the tool functions as if the scale argument is NONE.
- The property lists of cell instances matching the extracted device inside the
parasitic extraction layout database generated by the IC Validator tool.
- The annotation file by the write_annotation_file() function.
■ ANNOTATION_FILE. Writes the corresponding property to
- The property lists of cell instances matching the extracted device inside the
parasitic extraction layout database generated by the IC Validator tool.
■ NETLIST_SKIP_PCELL. Writes the corresponding property to
Table 2-20 Dual-Hierarchy Extraction Treatment for Processing Layers Mapped Using the
processing_layer_hash_map Argument (Continued)
Table 2-21 Dual-Hierarchy Extraction Treatment for Terminal Layers Mapped Using pin_map
If the pin name of a terminal layer is not referenced in the pin map for any property,
then that layer is never leveled, regardless of whether dual-hierarchy extraction is
enabled or disabled.
property_function
Optional. Specifies the remote function that calculates the geometric properties for each
extracted capacitor. The default calculation is for the capacitance. The default
calc_capacitor_properties() function is defined in the device_public.rh header file.
If you use a remote function, you must specify the device properties in the properties
argument. See Chapter 4, “Utility Functions,” for information about the utility functions
you can use to define a remote function.
merge_parallel
Optional. Specifies whether parallel devices enclosed by the same recognition layer
polygon are merged. The default is false.
❍ true. Merges parallel devices enclosed by the same recognition layer polygon.
Multiple banks of parallel-merged devices can occur within a single recognition layer
polygon.
❍ false. Does not merge parallel devices enclosed by the same recognition layer
polygon.
bulk_relationship
Optional. Specifies the required relationship between the bulk polygon and the device
polygon. The default is ENCLOSE.
❍ ENCLOSE. Specifies that the bulk polygon must enclose the device polygon.
❍ INTERACT. Specifies that the bulk polygon must interact with the device polygon by
one of these methods: enclosing, cutting, or outside edge touching.
swappable_pins
Optional. Lists the pins that can be swapped for a successful comparison with the
schematic device. By default, pins “A” and “B” can be swapped. Use an empty list to
disable swapping of all pins:
swappable_pins = {}
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals used for comparison.
By default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
capacitor() function.
■ The schematic pin names do not match the standard “A”, “B”, and “BULK” pin
names, in addition to optional pin names provided in the optional_pins list of
structures argument of the capacitor() function.
❍ device_name. Required. Specifies the schematic device.
❍ terminal_a. Optional. Specifies the first terminal of the device. The default is "A".
❍ terminal_b. Optional. Specifies the second terminal of the device. The default is
"B".
❍ ignore_pins. Optional. Ignores the specified schematic pins during pin connectivity
comparison between the layout and schematic. If a pin name is listed that matches a
pin name defined by the optional_pins argument, that pin is ignored both in the
layout and schematic. This behavior is similar to the pin_compared option of the
optional_pins argument of the capacitor() function.
If the schematic device has an optional pin that does not correspond to any pin in the
capacitor() function, that pin can be specified with the ignore_pins. Otherwise,
this optional pin produces an error during the compare operation.
x_card
Optional. Specifies if the instance name prefix is replaced when netlisting the device with
the netlist(), pex_generate_results(), write_annotation_file(),
write_spice(), and write_xref_spice() functions. The default is false.
❍ true. Replaces the default instance name prefix for the layout extracted device with
“X”. This option facilitates the use of SPICE SUBCKT models to represent devices in
simulation.
❍ false. Does not replace the default instance name prefix for the layout extracted
device. Netlists use an instance name prefix (SPICE card) value of “C” for netlisting
the extracted layout device.
spice_netlist_function
Optional. Specifies the function used to format instances of the device in netlists
generated by the write_spice() and write_xref_spice() functions. See “Flexible
Netlisting Utility Functions” in Chapter 4 for more information.
extract_shorted_device
Optional. Specifies whether shorted capacitors, that is, capacitors with only one terminal,
are extracted. The default is true.
❍ true. Extracts shorted capacitors.
area_capval
2 2
Optional. Specifies the capacitance per unit area, either F/m or F/m . The unit of
measure is specified by the lvs_user_unit argument of the run_options() function to
either microns or meters. This value is used to calculate the parallel plate capacitance of
the device as represented by the device body polygon. The default is 0.
coinedge_capval
Optional. Specifies the capacitance per unit length, either F/m or F/m, of edges where
the first terminal layer is coincident with the second terminal layer. The unit of measure
is specified by the lvs_user_unit argument of the run_options() function to either
microns or meters. The default is 0.
fringe_edge_capval
Optional. Specifies the capacitance per unit length, either F/m or F/m, of the second
terminal edge that is overlapped by the first terminal layer. The unit of measure is
specified by the lvs_user_unit argument of the run_options() function to either
microns or meters. The default is 0.
perim_capval
Optional. Specifies the capacitance per unit length, either F/m or F/m, of the capacitor
perimeter. The unit of measure is specified by the lvs_user_unit argument of the
run_options() function to either microns or meters. The perimeter constitutes edges of
the overlapping area that are not otherwise accounted for by the coincident edge or the
fringe edge.
❍ When the coinedge_capval option is 0, the coincident edges are considered part of
the perimeter.
❍ When the fringe_edge_capval option is 0, the fringe edges are considered part of
the perimeter.
The default is 0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
unique_identifier
Specifies the user-derived string used by the remote property function. The
unique_identifier argument value is retrieved from the remote property function with
the dev_unique_identifier() utility function. See the Examples section for more
information. You must ensure that the string is valid and unique because the IC Validator
tool does not check the value. The default is an empty string ("").
This functionality is used to access data objects created outside of a remote property
function but passed in as global variables. Use this functionality when access to these
global variables must be synchronized to a specific device configuration function call. For
example, you can create a global hash object containing property extraction parameters
for several device configuration functions. The hash key is a unique identifier string that
matches the unique_identifier argument value. Then, you can clear the hash key by
invoking the dev_unique_identifier() function that is in the property function. The
dev_unique_identifier() function retrieves the unique_identifier argument value
to the corresponding device configuration function call.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped. By default, the IC Validator tool does not map swappable pins to
properties.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
When pins XA and XB are detected as being swapped, properties PA1 and PB1 are
swapped, as are PA2 and PB2. However, PA1 and PB2 are not swapped, nor are PA1
and PA2, due to inconsistent property_list indexes.
simulation_model_name
Optional. Specifies the simulation netlist model name. As needed, define this model
name for each device configuration function. This name is output to the runset report file.
The device name is not changed.
dlink_libraries
Optional. Specifies the libraries that can be used to pass measurement data to external
libraries. See the Dynamic-Link Library Support chapter in the IC Validator User Guide
and “Dynamic Linking Utility Functions” in Chapter 4 for more information.
top_simulation_properties
Optional. Controls whether properties identified as simulation properties are extracted
hierarchically or in the top cell. The default is false.
❍ true. Extracts simulation properties in the top cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
The following example shows how to extract a capacitor with terminals met1, poly, and
2
substrate, and with a capacitance per unit area of 1e-15 F/m :
poly = assign({{5}});
met1 = assign({{22}});
...
m1_p_cap = met1 and poly;
capacitor(
matrix,
device_name = "MPCAP",
device_body = m1_p_cap,
terminal_a = met1,
terminal_b = poly,
optional_pins = {{substrate}},
area_capval = 1e-15
);
device_db = extract_devices(matrix);
netlist_db = netlist(device_db);
The following example uses the unique_identifier argument. This argument allows you
to look up device-specific properties that are stored in global variables.
// Define global hash containing property extraction parameters
cap_param_h : newtype hash of string to double;
cap_param : cap_prop_h = {};
matrix = dev_matrix,
device_name = "CAP",
device_body = capA_body,
terminal_a = capA_term_A,
terminal_b = capA_term_B,
properties = {{"dev_prop", DOUBLE}},
property_function = cap_prop,
unique_identifier = "capA"
) ;
capacitor(
matrix = dev_matrix,
device_name = "CAP",
device_body = capB_body,
terminal_a = capB_term_A,
terminal_b = capB_term_B,
properties = {{"dev_prop", DOUBLE}},
property_function = cap_prop,
unique_identifier = "capB"
) ;
See Also
inductor()
resistor()
cell_extent()
The cell_extent() function creates a polygon layer that consists of a rectangle in each of
the specified cells that is equal to the extents of the cell. The extents of the cell are defined
by all layers read from the input library and include geometric data and placements.
Important:
This is a methodology check function. See restriction 1 (Preserving Cells) in
“Methodology Check Functions” on page 1-4.
Note:
When you use the size() function with a distance greater than 0 (zero) and
processing_mode = HIERARCHICAL on a returned layer from the cell_extent()
function, only polygons in the top cell and in the cells defined in the
device_extraction_preserved_cells argument are oversized.
Syntax
cell_extent(
cell_list = {"string", ...},
name = "layer_label", //optional
keep_cells = true | false //optional
);
Returns
polygon layer or error result
Arguments
cell_list
Required. Specifies the cell names. If the list is empty, an empty layer is created. String
matching using metacharacters is allowed. See “String Matching” on page A-11 for more
information.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
keep_cells
Optional. Specifies the exploding of cells in the select_cells list. The default is true.
❍ true. Does not explode cells during hierarchy optimization.
❍ false. The selected cells are allowed to explode during hierarchy optimization. If a
selected cell does get exploded, the selected data (the cell’s extents in this case) are
placed in the parent cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In the following example, a single rectangle is created in the mid1 cell, equal to the extents
of the cell. In the assign() function, layerA and layerB are specified. The result is shown in
Figure 2-18.
Result = cell_extent(cell_list = {"mid1"});
mid1 mid2
Output
top bot
mid2
See Also
cell_extent_layer()
chip_extent()
layer_extent()
cell_extent_layer()
The cell_extent_layer() function creates a polygon layer that consists of a rectangle in
each of the specified cells that is equal to the extents of the cell. The extents of the cell are
defined by the input layer and include geometric data and placements.
Important:
This is a methodology check function. See disclaimers 1 (Preserving Cells) and 2
(Hierarchy) in “Methodology Check Functions” on page 1-4.
Syntax
cell_extent_layer(
layer1 = data_layer,
cell_list = {"string", ...},
name = "layer_label", //optional
keep_cells = true | false //optional
);
Returns
polygon layer
Arguments
layer1
Required. Specifies the polygon layer from which cells are selected.
cell_list
Required. Specifies the cell names. If the list is empty, an empty layer is created. String
matching using metacharacters is allowed. See “String Matching” on page A-11 for more
information.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
keep_cells
Optional. Specifies the exploding of cells in the cells_list argument. The default is
true.
❍ false. The selected cells are allowed to explode during hierarchy optimization. If a
selected cell does get exploded, the selected data (the cell’s extents in this case) are
placed in the parent cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In the following example, the extent of metal layer is derived only in the mid1 cell. The result
is shown in Figure 2-19.
metal_ext = cell_extent_layer(metal, cell_list = {"mid1"});
top
mid1 mid2
Output
top bot
mid1
mid2 bot
metal Result
See Also
cell_extent()
chip_extent()
layer_extent()
center_to_center1()
The center_to_center1() function creates polygons that consist of rectangles formed by
distance violations between center points and center lines of the selected rectangles on
layer1 polygons. Nonrectangular data is ignored.
The output consists of rectangles that are the extents of the violations. When the violation is
horizontal or vertical, the output rectangle is generated by expanding the violation three
times the input library resolution on both sides.
Syntax
center_to_center1(
layer1 = polygon_layer,
distance = doubleconstraint,
sides = {length1 = doubleconstraint,
length2 = doubleconstraint}, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
square_to_square = NONE | POINT_TO_POINT, //optional
square_to_non_square = NONE | POINT_TO_POINT | POINT_TO_LINE,
//optional
non_square_to_non_square = NONE | POINT_TO_POINT | LINE_TO_LINE,
//optional
line_end_position = TOUCH | HALF_WIDTH, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
distance
Required. Checks distance. See “Constraints” on page A-4 for more information.
Note:
The only constraint operators allowed are <, <=, and ==.
sides
Optional. Specifies the dimensions of the rectangles that are selected using two lengths,
one per side. The dimensions must be greater than 0. The length2 option is optional,
with a default of >0. See “Constraints” on page A-4 for more information.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the rectangles that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
square_to_square
Optional. Checks center-to-center spacing between square polygons. See the
square_to_non_square and non_square_to_non_square arguments for more
information. The default is POINT_TO_POINT.
❍ NONE. Does not check any spacing between squares.
square_to_non_square
Optional. Checks center-to-centerline spacing between square and non square
polygons. Only orthogonal data is checked. See the square_to_square and
❍ NONE. Does not check any spacing between square and non square polygons.
❍ POINT_TO_POINT. Checks spacing between the center of a square and the center of
a non square polygon, as shown in Figure 2-21.
Figure 2-21 square_to_non_square = POINT_TO_POINT Example
❍ POINT_TO_LINE. Checks spacing between the center of a square and the centerline
of a non square polygon, as shown in Figure 2-22.
Figure 2-22 square_to_non_square = POINT_TO_LINE Example
non_square_to_non_square
Optional. Checks centerline-to-centerline spacing between non square polygons. Only
orthogonal data is checked. See the square_to_square and square_to_non_square
arguments for more information. The default is POINT_TO_POINT.
❍ NONE. Does not check any spacing between non square polygons.
The POINT_TO_POINT check zone is not limited, but the LINE_TO_LINE check zone is
limited to 180-degrees, as shown in Figure 2-25.
Figure 2-25 non_square_to_non_square Check Zones Example
line_end_position
Optional. Specifies the line-end position relative to the rectangle width edge that is used
in the check region. The default is HALF_WIDTH.
Note:
The line_end_position argument is used only when the square_to_non_square
argument is POINT_TO_LINE or the non_square_to_non_square argument is
LINE_TO_LINE.
❍ TOUCH. Specifies that line ends touch the width edges of the rectangle, as shown in
Figure 2-26.
Figure 2-26 line_end_position = TOUCH Example
❍ HALF_WIDTH. Specifies that the line end is a distance of one-half of the rectangle
width from the width edge, as shown in Figure 2-27.
w
w
_
2
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In the example shown in Figure 2-28, a check is performed on rectangles whose sides fall
within the range specified by the sides argument. Any spacing found from the center of one
rectangle to the center of another rectangle that meets the specified distance value is a
violation.
Error = center_to_center1(layer1 = layerA, distance < 5,
sides = {length1 = 2, length2 = 2});
2 2
See Also
center_to_center1_edge()
center_to_center2()
center_to_center2_edge()
center_to_center1_edge()
The center_to_center1_edge() function creates edges that consist of distance violations
between center points and center lines of the selected layer1 rectangles. Nonrectangular
data is ignored. The orientation of the edges is nondeterministic.
Syntax
center_to_center1_edge(
layer1 = polygon_layer,
distance = doubleconstraint,
sides = {length1 = doubleconstraint,
length2 = doubleconstraint}, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
square_to_square = NONE | POINT_TO_POINT, //optional
square_to_non_square = NONE | POINT_TO_POINT | POINT_TO_LINE,
//optional
non_square_to_non_square = NONE | POINT_TO_POINT | LINE_TO_LINE,
//optional
line_end_position = TOUCH | HALF_WIDTH, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
distance
Required. Checks distance. See “Constraints” on page A-4 for more information.
Note:
The only constraint operators allowed are <, <=, and ==.
sides
Optional. Specifies the dimensions of the rectangles that are selected using two lengths,
one per side. The dimensions must be greater than 0. The length2 option is optional,
with a default of >0. See “Constraints” on page A-4 for more information.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
square_to_square
Optional. Checks center-to-center spacing between square polygons. See the
square_to_non_square and non_square_to_non_square arguments for more
information. The default is POINT_TO_POINT.
See the example for the square_to_square argument of the center_to_center1()
function for more information.
❍ NONE. Does not check any spacing between squares.
square_to_non_square
Optional. Checks center-to-centerline spacing between square and non square
polygons. Only orthogonal data is checked. See the square_to_square and
non_square_to_non_square arguments for more information. The default is
POINT_TO_POINT.
See the examples for the square_to_non_square argument of the
center_to_center1() function for more information.
❍ NONE. Does not check any spacing between square and non square polygons.
❍ POINT_TO_POINT. Checks spacing between the center of a square polygon and the
center of a non square polygon.
❍ POINT_TO_LINE. Checks spacing between the center of a square and the centerline
of a non square polygon.
non_square_to_non_square
Optional. Checks centerline-to-centerline spacing between non square polygons. Only
orthogonal data is checked. See the square_to_square and square_to_non_square
arguments for more information. The default is POINT_TO_POINT.
See the examples for the non_square_to_non_square argument of the
center_to_center1() function for more information.
❍ NONE. Does not check any spacing between non square polygons.
line_end_position
Optional. Specifies the line-end position relative to the rectangle width edge that is used
in the check region. The default is HALF_WIDTH.
Note:
The line_end_position argument is used only when the square_to_non_square
argument is POINT_TO_LINE or the non_square_to_non_square argument is
LINE_TO_LINE.
See the examples for the line_end_position argument of the center_to_center1()
function for more information.
❍ TOUCH. Specifies that line ends touch the width edges of the rectangle.
❍ HALF_WIDTH. Specifies that the line end is a distance of one-half of the rectangle
width from the width edge.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In the first example, Figure 2-29, a check is performed on all rectangles. Any spacing found
from the center of one rectangle to the center of another rectangle that is less than 0.20 m
is a violation.
Error = center_to_center1_edge(layer1 = contact, distance < 0.20);
contact
metal
error
In the second example, Figure 2-30, a similar check is performed. In this example, however,
only rectangles that are on the same net are considered. Because the contacts connected
to metal are more than 0.20 m apart, no errors are reported.
cdb = connect( connect_items = {{{M1}, CO}});
Error = center_to_center1_edge(layer1 = contact,
distance < 0.20,
connectivity = SAME_NET,
connect_sequence = cdb);
contact
metal
error
In the third example, Figure 2-31, a check is performed on squares that have sides of
0.05 m.
Error = center_to_center1_edge(layer1 = contact,
distance < 0.20,
sides = { 0.05, 0.05});
contact
metal
error
See Also
center_to_center1()
center_to_center1_error()
center_to_center2()
center_to_center2_edge()
center_to_center2_error()
center_to_center1_error()
The center_to_center1_error() function creates error layers that consist of distance
violations between center points and center lines of the selected layer1 rectangles.
Nonrectangular data is ignored. The orientation of the error layers is nondeterministic.
Syntax
center_to_center1_error(
layer1 = polygon_layer,
distance = doubleconstraint,
sides = {length1 = doubleconstraint,
length2 = doubleconstraint}, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
square_to_square = NONE | POINT_TO_POINT, //optional
square_to_non_square = NONE | POINT_TO_POINT | POINT_TO_LINE,
//optional
non_square_to_non_square = NONE | POINT_TO_POINT | LINE_TO_LINE,
//optional
line_end_position = TOUCH | HALF_WIDTH, //optional
name = "layer_label" //optional
);
Returns
error layer
Arguments
layer1
Required. Specifies the polygon layer.
distance
Required. Checks distance. See “Constraints” on page A-4 for more information.
Note:
The only constraint operators allowed are <, <=, and ==.
sides
Optional. Specifies the dimensions of the rectangles that are selected using two lengths,
one per side. The dimensions must be greater than 0. The length2 option is optional,
with a default of >0. See “Constraints” on page A-4 for more information.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
square_to_square
Optional. Checks center-to-center spacing between square polygons. See the
square_to_non_square and non_square_to_non_square arguments for more
information. The default is POINT_TO_POINT.
See the example for the square_to_square argument of the center_to_center1()
function for more information.
❍ NONE. Does not check any spacing between squares.
square_to_non_square
Optional. Checks center-to-centerline spacing between square and non square
polygons. Only orthogonal data is checked. See the square_to_square and
non_square_to_non_square arguments for more information. The default is
POINT_TO_POINT.
See the examples for the square_to_non_square argument of the
center_to_center1() function for more information.
❍ NONE. Does not check any spacing between square and non square polygons.
❍ POINT_TO_POINT. Checks spacing between the center of a square polygon and the
center of a non square polygon.
❍ POINT_TO_LINE. Checks spacing between the center of a square and the centerline
of a non square polygon.
non_square_to_non_square
Optional. Checks centerline-to-centerline spacing between non square polygons. Only
orthogonal data is checked. See the square_to_square and square_to_non_square
arguments for more information. The default is POINT_TO_POINT.
See the examples for the non_square_to_non_square argument of the
center_to_center1() function for more information.
❍ NONE. Does not check any spacing between non square polygons.
line_end_position
Optional. Specifies the line-end position relative to the rectangle width edge that is used
in the check region. The default is HALF_WIDTH.
Note:
The line_end_position argument is used only when the square_to_non_square
argument is POINT_TO_LINE or the non_square_to_non_square argument is
LINE_TO_LINE.
See the examples for the line_end_position argument of the center_to_center1()
function for more information.
❍ TOUCH. Specifies that line ends touch the width edges of the rectangle.
❍ HALF_WIDTH. Specifies that the line end is a distance of one-half of the rectangle
width from the width edge.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
center_to_center1()
center_to_center1_edge()
center_to_center2()
center_to_center2_edge()
center_to_center2_error()
center_to_center2()
The center_to_center2() function creates polygons that consist of rectangles formed by
distance violations between center points and center lines of the selected rectangles from
layer1 to layer2. Nonrectangular data is ignored.
The output consists of rectangles that are the extents of the violations. When the violation is
horizontal or vertical, the output rectangle is generated by expanding the violation three
times the input library resolution on both sides.
Syntax
center_to_center2(
layer1 = polygon_layer,
layer2 = polygon_layer,
distance = doubleconstraint,
sides = {length1 = doubleconstraint,
length2 = doubleconstraint}, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
square_to_square = NONE | POINT_TO_POINT, //optional
square_to_non_square = NONE | POINT_TO_POINT | POINT_TO_LINE,
//optional
non_square_to_non_square = NONE | POINT_TO_POINT | LINE_TO_LINE,
//optional
line_end_position = TOUCH | HALF_WIDTH, //optional
touch = true | false, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies a polygon layer.
layer2
Required. Specifies a polygon layer.
distance
Required. Checks distance. See “Constraints” on page A-4 for more information.
Note:
The only constraint operators allowed are <, <=, and ==.
sides
Optional. Specifies the dimensions of the rectangles that are selected using two lengths,
one per side. The dimensions must be greater than 0. The length2 option is optional,
with a default of >0. See “Constraints” on page A-4 for more information.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the rectangles that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
square_to_square
Optional. Checks center-to-center spacing between square polygons. See the
square_to_non_square and non_square_to_non_square arguments for more
information. The default is POINT_TO_POINT.
See the example for the square_to_square argument of the center_to_center1()
function for more information.
❍ NONE. Does not check any spacing between squares.
square_to_non_square
Optional. Checks center-to-centerline spacing between square and non square
polygons. Only orthogonal data is checked. See the square_to_square and
non_square_to_non_square arguments for more information. The default is
POINT_TO_POINT.
See the examples for the square_to_non_square argument of the
center_to_center1() function for more information.
❍ NONE. Does not check any spacing between square and non square polygons.
❍ POINT_TO_POINT. Checks spacing between the center of a square polygon and the
center of a non square polygon.
❍ POINT_TO_LINE. Checks spacing between the center of a square polygon and the
centerline of a non square polygon.
non_square_to_non_square
Optional. Checks centerline-to-centerline spacing between non square polygons. Only
orthogonal data is checked. See the square_to_square and square_to_non_square
arguments for more information. The default is POINT_TO_POINT.
See the examples for the non_square_to_non_square argument of the
center_to_center1() function for more information.
❍ NONE. Does not check any spacing between non square polygons.
line_end_position
Optional. Specifies the line-end position relative to the rectangle width edge that is used
in the check region. The default is HALF_WIDTH.
Note:
The line_end_position argument is used only when the square_to_non_square
argument is POINT_TO_LINE or the non_square_to_non_square argument is
LINE_TO_LINE.
See the examples for the line_end_position argument of the center_to_center1()
function for more information.
❍ TOUCH. Specifies that line ends touch the width edges of the rectangle.
❍ HALF_WIDTH. Specifies that the line end is a distance of one-half of the rectangle
width from the width edge.
touch
Optional. When set to true, square_to_square, square_to_non_square, and
non_square_to_non_square touches are violations. The output shape for a touch
violation is a box with sides of 6 units for polygon output, as shown in Figure 2-32. The
default is false.
Figure 2-32 center_to_center2() Function Touch Violation Example
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In the first example, Figure 2-33, a check is performed between two layers and the check
considers all rectangles. Any spacing found from the center of one rectangle from the first
layer to the center of a rectangle from a second layer that is less than 0.20 m is a violation.
Error = center_to_center2(layer1 = contact,
layer2 = via,
distance < 0.20
);
via
contact
metal
error
In the second example, Figure 2-34, a similar check is performed. For this example,
however, only rectangles that are on different nets are considered.
Error = center_to_center2(layer1 = contact,
layer2 = via,
distance < 0.20,
connectivity = DIFFERENT_NET,
connect_sequence = cdb
);
via
contact
metal
error
In the third example, Figure 2-35, a similar check is performed on squares that have sides
of 0.05 m.
Error = center_to_center2(layer1 = contact,
layer2 = via,
distance < 0.20,
via
contact
metal
error
See Also
center_to_center1()
center_to_center1_edge()
center_to_center2_edge()
center_to_center2_edge()
The center_to_center2_edge() function creates edges that consist of distance violations
between center points and center lines of the selected rectangles from layer1 to layer2.
Nonrectangular data is ignored. The edges are oriented from layer1 to layer2.
Syntax
center_to_center2_edge(
layer1 = polygon_layer,
layer2 = polygon_layer,
distance = doubleconstraint,
sides = {length1 = doubleconstraint,
length2 = doubleconstraint}, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
square_to_square = NONE | POINT_TO_POINT, //optional
square_to_non_square = NONE | POINT_TO_POINT | POINT_TO_LINE,
//optional
non_square_to_non_square = NONE | POINT_TO_POINT | LINE_TO_LINE,
//optional
line_end_position = TOUCH | HALF_WIDTH, //optional
touch = true | false, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies a polygon layer.
layer2
Required. Specifies a polygon layer.
distance
Required. Checks distance. See “Constraints” on page A-4 for more information.
Note:
The only constraint operators allowed are <, <=, and ==.
sides
Optional. Specifies the dimensions of the rectangles that are selected using two lengths,
one per side. The dimensions must be greater than 0. The length2 option is optional,
with a default of >0. See “Constraints” on page A-4 for more information.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the rectangles that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
square_to_square
Optional. Checks center-to-center spacing between square polygons. See the
square_to_non_square and non_square_to_non_square arguments for more
information. The default is POINT_TO_POINT.
See the example for the square_to_square argument of the center_to_center1()
function for more information.
❍ NONE. Does not check any spacing between squares.
square_to_non_square
Optional. Checks center-to-centerline spacing between square and non square
polygons. Only orthogonal data is checked. See the square_to_square and
non_square_to_non_square arguments for more information. The default is
POINT_TO_POINT.
See the examples for the square_to_non_square argument of the
center_to_center1() function for more information.
❍ NONE. Does not check any spacing between square polygons and non square
polygons.
❍ POINT_TO_POINT. Checks spacing between the center of a square polygon and the
center of a non square polygon.
❍ POINT_TO_LINE. Checks spacing between the center of a square polygon and the
centerline of a non square polygon.
non_square_to_non_square
Optional. Checks centerline-to-centerline spacing between non square polygons. Only
orthogonal data is checked. See the square_to_square and square_to_non_square
arguments for more information. The default is POINT_TO_POINT.
See the examples for the non_square_to_non_square argument of the
center_to_center1() function for more information.
❍ NONE. Does not check any spacing between non square polygons.
line_end_position
Optional. Specifies the line-end position relative to the rectangle width edge that is used
in the check region. The default is HALF_WIDTH.
Note:
The line_end_position argument is used only when the square_to_non_square
argument is POINT_TO_LINE or the non_square_to_non_square argument is
LINE_TO_LINE.
See the examples for the line_end_position argument of the center_to_center1()
function for more information.
❍ TOUCH. Specifies that line ends touch the width edges of the rectangle.
❍ HALF_WIDTH. Specifies that the line end is a distance of one-half of the rectangle
width from the width edge.
touch
Optional. Specifies that when set to true, square_to_square,
square_to_non_square, and non_square_to_non_square touches are violations. The
output shape for a touch violation has two edges that form a “+” shape for edge output,
as shown in Figure 2-36. Each edge has a length of 6 units. The orientation of the edges
is nondeterministic. The default is false.
Figure 2-36 center_to_center2_edge() Function Touch Violation Example
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
center_to_center1()
center_to_center1_edge()
center_to_center2()
center_to_center2_error()
The center_to_center2_error() function creates edges that consist of distance
violations between center points and center lines of the selected rectangles from layer1 to
layer2. Nonrectangular data is ignored.
Syntax
center_to_center2_error(
layer1 = polygon_layer,
layer2 = polygon_layer,
distance = doubleconstraint,
sides = {length1 = doubleconstraint,
length2 = doubleconstraint}, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
square_to_square = NONE | POINT_TO_POINT, //optional
square_to_non_square = NONE | POINT_TO_POINT | POINT_TO_LINE,
//optional
non_square_to_non_square = NONE | POINT_TO_POINT | LINE_TO_LINE,
//optional
line_end_position = TOUCH | HALF_WIDTH, //optional
touch = true | false, //optional
name = "layer_label" //optional
);
Returns
error layer
Arguments
layer1
Required. Specifies a polygon layer.
layer2
Required. Specifies a polygon layer.
distance
Required. Checks distance. See “Constraints” on page A-4 for more information.
Note:
The only constraint operators allowed are <, <=, and ==.
sides
Optional. Specifies the dimensions of the rectangles that are selected using two lengths,
one per side. The dimensions must be greater than 0. The length2 option is optional,
with a default of >0. See “Constraints” on page A-4 for more information.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the rectangles that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
square_to_square
Optional. Checks center-to-center spacing between square polygons. See the
square_to_non_square and non_square_to_non_square arguments for more
information. The default is POINT_TO_POINT.
See the example for the square_to_square argument of the center_to_center1()
function for more information.
❍ NONE. Does not check any spacing between squares.
square_to_non_square
Optional. Checks center-to-centerline spacing between square and non square
polygons. Only orthogonal data is checked. See the square_to_square and
non_square_to_non_square arguments for more information. The default is
POINT_TO_POINT.
See the examples for the square_to_non_square argument of the
center_to_center1() function for more information.
❍ NONE. Does not check any spacing between square polygons and non square
polygons.
❍ POINT_TO_POINT. Checks spacing between the center of a square polygon and the
center of a non square polygon.
❍ POINT_TO_LINE. Checks spacing between the center of a square polygon and the
centerline of a non square polygon.
non_square_to_non_square
Optional. Checks centerline-to-centerline spacing between non square polygons. Only
orthogonal data is checked. See the square_to_square and square_to_non_square
arguments for more information. The default is POINT_TO_POINT.
See the examples for the non_square_to_non_square argument of the
center_to_center1() function for more information.
❍ NONE. Does not check any spacing between non square polygons.
line_end_position
Optional. Specifies the line-end position relative to the rectangle width edge that is used
in the check region. The default is HALF_WIDTH.
Note:
The line_end_position argument is used only when the square_to_non_square
argument is POINT_TO_LINE or the non_square_to_non_square argument is
LINE_TO_LINE.
See the examples for the line_end_position argument of the center_to_center1()
function for more information.
❍ TOUCH. Specifies that line ends touch the width edges of the rectangle.
❍ HALF_WIDTH. Specifies that the line end is a distance of one-half of the rectangle
width from the width edge.
touch
Optional. Specifies that when set to true, square_to_square,
square_to_non_square, and non_square_to_non_square touches are violations. The
output shape for a touch violation has two edges that form a “+” shape for edge output.
Each edge has a length of 6 units. The orientation of the edges is nondeterministic. The
default is false.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
center_to_center1()
center_to_center1_edge()
center_to_center1_error()
center_to_center2()
center_to_center2_edge()
check_property()
The check_property() function compares the values of properties between matched
schematic and layout devices. Use the property_tolerances argument to compare
properties based on a tolerance value. Use the property_function argument to compare
properties based on more complex conditions.
When resolving symmetry, the IC Validator tool uses properties and property tolerances
when symmetry cannot be resolved by other means. When a user-defined
property_function is used in the check_property() function, however, the IC Validator
tool can no longer use property information for resolving symmetry. Therefore, if calculations
on properties are needed prior to their comparison, use the recalculate_property()
function to do these calculations rather than performing them in a check_property()
function.
This function should be in any typical LVS runset, and it must be called before the
compare() function. See Chapter 7, “Compare Functions Basics” in the IC Validator LVS
User Guide for more information about complementary functions and precedence rules.
Limitation:
Do not use the recognize_gate() function when a remote function is specified by the
property_function argument of the check_property() function.
Syntax
check_property(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...}, //optional
property_tolerances = {{property = "string",
tolerance = doubleconstraint,
tolerance_type = RELATIVE | ABSOLUTE},
...}, //optional
property_function = "string", //optional
schematic_optional_properties = {"string", ...}, //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. The information specified in
the check_property() function is added.
device_type
Required. Specifies the device type.
device_names
Optional. Specifies the layout devices. Each device must match a device specified in a
device_name argument of a device configuration function.
property_tolerances
Optional. Lists the properties to be compared. A maximum of 100 user-defined
properties can be listed. See “Predefined Name Matches” in Chapter 7, “Compare
Functions Basics” of the IC Validator LVS User Guide for the names and associated
matches that are predefined during LVS compare.
You must use either the property_tolerances or property_function argument in the
check_property() function.
Note:
You can use both the property_tolerances and property_function arguments in
the check_property() function. If you use both arguments, you must make sure that
a property is not checked by both arguments. You do not need to list in the
property_tolerances argument the properties that are referenced by the
lvs_get_double_property() function. The lvs_get_double_property() function
is in the remote function specified by the property_function argument.
❍ property. Required. Specifies the property name.
❍ tolerance. Optional. Specifies the tolerance. The property option is checked for
violations based on this tolerance. The tolerance must be specified as a range. The
tolerance_type option specifies either that the tolerance is a percentage (default)
or absolute value. The default is [-10,+10].
The minimum resolution allowed for tolerance checking is as follows.
■ When schematic_property !=0, the minimum resolution value is
absolute_value(schematic_property*1e-6)
If the specified tolerance range is less than this minimum value, for example, [-0,0],
the property option is checked for violations according to the minimum resolution.
❍ tolerance_type. Optional. Checks property tolerances based on a relative or
absolute property difference. The default is RELATIVE.
■ RELATIVE. Specifies that tolerances are checked based on a percentage
difference.
■ ABSOLUTE. Specifies that tolerances are checked based on an absolute value
difference. The units are based on the lvs_user_unit argument of the
run_options() function.
property_function
Optional. Specifies the remote function that compares the specified properties. See
“Compare Utility Functions” in Chapter 4 for more information about the utility functions
you can use to define a remote function.
You must use either the property_tolerances or property_function argument in the
check_property() function.
When you use the property_function argument, the IC Validator tool is unable to use
the properties to break symmetry.
Note:
See the property_tolerances argument for more information about using both the
property_tolerances and property_function arguments of the
check_property() function.
schematic_optional_properties
Optional. Specifies the properties, defined on schematic instances, that are not
compared.
equiv_cells
Optional. Lists the schematic and layout cell name pairs for which information specified
in the check_property() function applies. You must specify the equiv_cells pairs in
the equiv_options() function before calling the check_property() function. If only
one cell name in the pair is specified, the names are assumed to be the same.
Note:
The check_property() instruction is observed only when comparing each listed
equivalence cell pair. If an equivalence cell pair is exploded into the parent
equivalence cell pair while comparing the parent, the check_property() instruction
is discarded for the content of the exploded cell.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
The following example
1. Checks the W (width) property with a tolerance range of ±20% for PMOS device pm1.
2. Checks the L (length) property with a tolerance range of -30% to +40% for PMOS device
pm1.
3. Checks the SD property with a tolerance range of -10% to +30% for PMOS device pm1.
4. Checks the area property with a default tolerance range of ±10% for PMOS device pm1.
5. Executes the my_check_SD property function defined by the user_functions_file
argument of the compare() function for PMOS device pm1.
6. Checks the W property with a relative tolerance range of ±15% for all PMOS devices in
pm_list_1.
7. Checks the L and W properties within an absolute tolerance range from -10 to +20 for all
PMOS devices in pm_list_2. No error is reported if property W does not exist for a
particular device instance.
my_compare_state : compare_state = init_compare_matrix();
See Also
check_property_off()
check_property_off()
The check_property_off() function disables checking of properties for specified devices.
For example, you can use the check_property() function to enable property checking for
all NMOS devices and use the check_property_off() function to disable the property
checking for nm1, a specific NMOS device.
This function must be called before the compare() function. See Chapter 7, “Compare
Functions Basics” in the IC Validator LVS User Guide for more information about
complementary functions and precedence rules.
Syntax
check_property_off(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...} //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. The information specified in
the check_property_off() function is added.
device_type
Required. Specifies the device type.
device_names
Optional. Specifies the layout devices. Each device must match a device specified in a
device_name argument of a device configuration function.
equiv_cells
Optional. Specifies a list of schematic and layout cell name pairs for which the
information specified in the check_property_off() function applies. You must specify
the equiv_cells pairs in the equiv_options() function before calling the
check_property_off() function. If only one cell name in the pair is specified, the
names are assumed to be the same.
Note:
The check_property_off() instruction is observed only when comparing each
listed equivalence cell pair. If an equivalence cell pair is exploded into the parent
equivalence cell pair while comparing the parent, the check_property_off()
instruction is discarded for the content of the exploded cell.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
check_property()
check_symmetry()
The check_symmetry() function checks the symmetry of the target layer polygons against
the created, mirrored context layer polygons. The function
• Creates mirrored bodies of the original polygons (layer1) within each bounding box of
the context layer according to the given symmetry type.
• Compares the original polygons against the created mirrored polygons, reports the
existing part in target polygons not in mirrored polygons, and vice versa.
• Polygons in the context layer are deposited in the top cell.
Syntax
check_symmetry(
layer1 = polygon_layer,
context_layer = polygon_layer,
symmetry = HORIZONTAL_AXIS | VERTICAL_AXIS | ROTATE_180,
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer that is the target layer.
context_layer
Required. Specifies the polygon layer that is the context layer. Polygons in layer1 that
interact with polygons on the context layer are selected.
symmetry
Optional. Specifies the symmetry type of the pattern. The options are
❍ HORIZONTAL_AXIS.
❍ VERTICAL_AXIS.
❍ ROTATE_180.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
In Figure 2-37, layer1 (fill green) polygons interacting with the context layer (unfilled red)
polygons are selected for the symmetry checking operation. The mirrored polygons (filled
red) are created from the target polygons based on the mirror specifications. The target
polygons are then overlaid on the mirrored polygons and an XOR operation is performed
between the two sets of polygons. Shapes from the target polygons not in mirrored
polygons, and vice versa, are reported.
Figure 2-37 check_symmetry() Function Example
Y- X- context mirrored symmetry
layer1 layer layer overlap results
Axis Axis
check_symmetry(
layer1,
context_layer,
HORIZONTAL_AXIS)
check_symmetry(
layer1,
context_layer,
VERTICAL_AXIS)
check_symmetry(
layer1,
context_layer,
ROTATE_180)
See Also
shift_symmetry()
checkpoint()
The checkpoint() function saves the state of a run, including information such as the
specified layers and connect databases, into the specified checkpoint path. At least one
layer must be specified. You can have multiple checkpoint() functions in a single runset,
but you must specify different paths.
The IC Validator include files also are copied into the checkpoint path, and two files are
created:
• restart_include.rh. Contains the current state of the runset. You must include this file in
your restart runset.
• restart_type.rh. Contains all user-defined types. This file is included in your restart runset
by the restart_include.rh file. The restart runset must not have the same types redefined.
The checkpoint information is saved only if you use the -checkpoint command-line option.
You can restart a run from this checkpoint using the specified checkpoint path and the restart
functions. See the Command-Line Options section in the “IC Validator Basics” chapter of the
IC Validator User Guide and the restart() function for more information.
Syntax
checkpoint(
path = "string",
polygon_layers = {polygon_layer, ...}, //optional
edge_layers = {edge_layer, ...}, //optional
text_layers = {text_layer, ...} //optional
);
Returns
void
Arguments
path
Required. Specifies the path of the saved checkpoint files.
polygon_layers
Optional. Saves the listed polygon layers.
edge_layers
Optional. Saves the listed edge layers.
text_layers
Optional. Saves the listed text layers.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Example section of the restart() function for more information.
See Also
snapshot()
restart()
restart_layer()
restart_layer_edge()
restart_layer_text()
chip_extent()
The chip_extent() function creates a polygon layer that consists of a single rectangle in
the top cell which is equal to the extents of the top cell. The top cell extents are defined by
all layers read from the input library. The extents of the top cell include geometric data and
placements.
Syntax
chip_extent(
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Figure 2-38 shows an example of the chip_extent() function.
result = chip_extent();
layer1
layer2
result
See Also
layer_extent()
Syntax
coincident_edge(
layer1 = data_layer,
layer2 = data_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_coincident_edge(
layer1 = data_layer,
layer2 = data_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer from which edges are selected.
layer2
Required. Specifies the edge or polygon layer against which the layer1 layer is
checked.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 2-39 shows an example of the coincident_edge() and not_coincident_edge()
functions. The results are the same if either layer is an edge layer. The syntax is
result = layer2 coincident_edge layer1;
layer1
layer2
result
coincident_edge() not_coincident_edge()
See Also
and_edge()
coincident_inside_edge() and not_coincident_inside_edge()
coincident_outside_edge() and not_coincident_outside_edge()
inside_touching_edge() and not_inside_touching_edge()
not_edge()
outside_touching_edge() and not_outside_touching_edge()
touching_edge() and not_touching_edge()
Syntax
coincident_inside_edge(
layer1 = data_layer,
layer2 = data_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_coincident_inside_edge(
layer1 = data_layer,
layer2 = data_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer from which edges are selected.
layer2
Required. Specifies the edge or polygon layer against which the layer1 layer is
checked.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In the following example, as shown in Figure 2-40, both layers are polygon layers: magenta
is layer1; red is layer2. The results are the same if either layer is an edge layer.
green = magenta coincident_inside_edge red;
See Also
and_edge()
coincident_edge() and not_coincident_edge()
coincident_outside_edge() and not_coincident_outside_edge()
inside_touching_edge() and not_inside_touching_edge()
Syntax
coincident_outside_edge(
layer1 = data_layer,
layer2 = data_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_coincident_outside_edge(
layer1 = data_layer,
layer2 = data_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer from which the edges are selected.
layer2
Required. Specifies the edge or polygon layer against which the layer1 layer is
checked.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In the following example, as shown in Figure 2-41, both layers as polygon layers: magenta
is layer1; red is layer2. The results are the same if either layer is an edge layer.
green = magenta coincident_outside_edge red;
See Also
and_edge()
coincident_edge() and not_coincident_edge()
coincident_inside_edge() and not_coincident_inside_edge()
outside_touching_edge() and not_outside_touching_edge()
color_conflict_layers()
The color_conflict_layers() function assigns color-layer groups. In the runset, you
must call this function before the net_color_check() function.
Syntax
color_conflict_layers(
color_groups = {{polygon_layer, ...}, ...}}
);
Returns
color database
Arguments
color_groups
Required. Specifies multiple lists of layers. Each list of layers defines a group. Every
layer in the group represents a different color. For example {M1A, M1B} defines a group;
layer M1A has a different color from layer M1B.
One layer cannot be put in more than one group and one layer cannot be put twice in the
same group.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
When there are multiple groups of colors, each group is independent. For example, the
following statement defines two groups:
color_conflict_layers{{M1A, M1B}, {M2A, M2B}}
The order of the groups does not matter. The order of layers in each group does not matter.
The following three examples are equivalent:
color_db = color_conflict_layers({ {M1A, M1B}, {M2A, M2B} });
color_db = color_conflict_layers({ {M2A, M2B}, {M1A, M1B} });
color_db = color_conflict_layers({ {M1B, M1A}, {M2B, M2A} });
There is no assumption that one layer in first group represents the same color as another
layer in the second group. In the following example, the color of M1A has nothing to do with
the color of M2A:
color_conflict_layers{{M1A, M1B}, {M2A, M2B}}
The tool defines different colors on M1A and M1B, and different colors on M2A and M2B.
The two groups are independent.
See Also
color_conflict_layers_order()
net_color_check()
color_conflict_layers_order()
The color_conflict_layers_order() function assigns ordered color-layer groups. In the
runset, you must call either this function or the color_conflict_layers() f unction before
the net_color_check() function. The color_conflict_layers_order() function call is
needed only for color checking on schematic device pins.
Syntax
color_conflict_layers_order(
color_groups = {{color_layers = {polygon_layer, ...},
order = integer}, ...}
);
Returns
color database
Arguments
color_groups
Required. Specifies multiple color groups and defines the order of each group. The order
is used to validate the color rules in the input color file. Only order 1 color layers can be
checked against schematic device pins.
❍ color_layers. Required. Specifies multiple lists of layers. Each list of layers defines
a color group. Every layer in the group represents a different color. For example
{M1A, M1B} defines a group; layer M1A has a different color from layer M1B.
One layer cannot be put in more than one group and one layer cannot be put twice in
the same group.
❍ order. Required. Specifies the order for the color groups. The order of a color group
is a unique positive integer that labels all the color layers in the group.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
When there are multiple groups of colors, each group is independent. For example, the
following statement defines two groups. The order of M1A and M1B is 1, and the order of
M2A and M2B is 2.
color_db = color_conflict_layers_order({ {{M1A, M1B}, 1}, {{M2A, M2B}, 2} });
See Also
color_conflict_layers()
net_color_check()
coloring_links()
The coloring_links() function generates link polygons that are used in multiple
patterning flows. Link polygons are connections between the node polygons that complete
the graph description of the coloring problem. Link polygons are generated by measuring
outside-to-outside spacing on the node edges defined by the color-spacing rules.
Note:
The link polygon links must have a coincident run length of at least the design_grid
value with the nodes layer.
The output links must be on the design_grid value.
Note:
Set #define MPT_API in the runset when using the coloring_links() function.
The coloring_links() function returns a polygon layer that can be used as input to the
two_color() and three_color() functions.
Syntax
coloring_links(
nodes = polygon_layer,
line_end = edge_layer, //optional
color_spacing_rules = {{rule_type = SIDE_TO_SIDE | LINE_END_TO_SIDE |
LINE_END_TO_LINE_END | CORNER_TO_CORNER |
NOTCH | CENTER_TO_CENTER,
distance = doubleconstraint,
extension_distance= double,
projection_length = doubleconstraint,
extension = EDGE | NONE | RADIAL |
RECTANGLE | SQUARE,
look_thru = NONE | NOT_ADJACENT | ALL,
look_thru_count = integerconstraint},
...}, //optional
line_end_length = double, //optional
adjacent_length = double, //optional
line_end_expand = double, //optional
side_expand = double, //optional
design_grid = double //optional
);
Returns
polygon layer
Arguments
nodes
Required. Specifies the polygon layer that contains the polygons targeted for coloring.
line_end
Optional. Specifies additional node edges that are added when the rule_type option for
the color_spacing_rules argument is LINE_END_TO_SIDE or
LINE_END_TO_LINE_END. Line ends are defined with the line_end_length and
adjacent_length argument pair.
color_spacing_rules
Optional. Specifies the rule type and the spacing values for the output polygon layer.
❍ rule_type. Required. Specifies how the distance is measured. See the Examples
section for more information.
■ SIDE_TO_SIDE
■ LINE_END_TO_SIDE
■ LINE_END_TO_LINE_END
■ NOTCH
■ CENTER_TO_CENTER
■ USER_DEFINED
❍ distance. Required. Specifies the check distance. See “Constraints” on page A-4 for
more information.
❍ extension_distance. Optional. Specifies the check region extension distance when
the extension option is RECTANGLE. The value must be nonnegative. The default
is 0.0.
❍ projection_length. Optional. Specifies the projection length. See “Constraints” on
page A-4 for more information. The default is >0.0.
❍ extension. Optional. Specifies the extension of the check region beyond the
endpoints of the edge being checked. The default is NONE.
■ EDGE. Forms the check region by extending the edges using the
extension_distance argument value, and creating right-angle boundaries at the
extended endpoints based on the distance constraint. The right-angle
boundaries of the check region are exclusive. The far boundary of the check
region is inclusive or exclusive depending on the constraint of the distance
value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
■ NONE. Does not extend the check region. It is formed with right-angle boundaries
at the edge endpoints. The right-angle boundaries of the check region are
exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
■ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive
or exclusive depending on the constraint of the distance value.
■ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
■ SQUARE. Extends the check region past the endpoints of the edges using the
distance argument value with a square. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ look_thru. Optional. Specifies the edges that the spacing check looks through when
measuring. The default is NONE.
■ NONE. Does not look through any edges, including edge endpoints.
■ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not
look through any edges that share endpoint X with edge A. This setting avoids
false violations that might be reported when the look_thru argument is ALL.
■ ALL. Looks through all edges.
line_end_length
Optional. Specifies the length for an edge to be selected. The default is 0.0.
adjacent_length
Optional. Specifies the length that must be satisfied by the edges adjacent to a
90-degree angle. The default is 0.001.
line_end_expand
Optional. Specifies the expansion of the line-end edges. The line-end edges are
expanded before the side edges. The default is 0.0.
side_expand
Optional. Specifies the expansion of the side edges. The side edges are expanded after
the line-end edges. The default is 0.0.
design_grid
Optional. Specifies the design grid. The link polygons on the returned polygon layer are
on this grid, not on the input library resolution. The default is 0.001.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Examples
The following are examples of using the color_spacing_rules argument:
color_spacing_rules = ({SIDE_TO_SIDE, 1.0, 0, 0, NONE});
color_spacing_rules = ({LINE_END_TO_SIDE, 2.0, 0, 0, NONE});
color_spacing_rules = ({LINE_END_TO_LINE_END, 4.0, 0, 0, NONE});
color_spacing_rules = ({CORNER_TO_CORNER, 3.0, 0, 0, RADIAL});
color_spacing_rules = ({NOTCH, 2.0, 0, 0, NONE});
nodesA
SIDE_link
Figure 2-43 More Complex Example of rule_type = SIDE_TO_SIDE With extension = NONE
nodesC
SIDE_link2
The following example, shown in Figure 2-44, uses the SIDE_TO_SIDE rule with the
extension option set to RADIAL.
SIDE_SPACING_RADIAL : list of color_spacing_rule_s = {};
SIDE_SPACING_RADIAL.push_back({SIDE_TO_SIDE, 0.080, 0, 0, RADIAL});
SIDE_link3 = coloring_links(
nodes = nodesC,
color_spacing_rules = SIDE_SPACING_RADIAL,
line_end_length = 0.032
);
nodesC
SIDE_link3
LINE_END_link = coloring_links(
nodes = nodesA,
color_spacing_rules = LINE_END_SPACING,
line_end_length = 0.032
);
nodesA
LINE_END_link
nodesC
LINE_END_link2
The following example, shown in Figure 2-47, uses the LINE_END_TO_LINE_END rule with
the extension option set to RADIAL.
LINE_END_SPACING_RADIAL : list of color_spacing_rule_s = {};
LINE_END_SPACING_RADIAL.push_back({LINE_END_TO_LINE_END, 0.080,
0, 0, RADIAL});
LINE_END_link3 = coloring_links(
nodes = nodesC,
color_spacing_rules = LINE_END_SPACING_RADIAL,
line_end_length = 0.032
);
nodesC
LINE_END_link3
LINE_END_SIDE_link = coloring_links(
nodes = nodesA,
color_spacing_rules = LINE_END_SIDE_SPACING,
line_end_length = 0.032
);
nodesA
LINE_END_SIDE_link
nodesA
CORNER_link
nodesC
CORNER_lik2
CENTER_link = coloring_links(
nodes = nodesB,
color_spacing_rules = CENTER_SPACING,
line_end_length = 0.032,
adjacent_length = 0.01
);
nodesB
CENTER_link
nodesC
NOTCH_link2
See Also
coloring_links_edge()
three_color()
two_color()
coloring_links_edge()
The coloring_links_edge() function generates link edges that are used in multiple
patterning flows. Link edges are connections between the node polygons that complete the
graph description of the coloring problem. Link edges are generated by measuring
outside-to-outside spacing on the node edges defined by the color-spacing rules.
The coloring_links_edge() function returns an edge layer that can be used as input to
the two_color() and three_color() functions.
Note:
Set #define MPT_API in the runset when using the coloring_links_edge() function.
Syntax
coloring_links_edge(
nodes = polygon_layer,
line_end = edge_layer, //optional
color_spacing_rules = {{rule_type = SIDE_TO_SIDE | LINE_END_TO_SIDE |
LINE_END_TO_LINE_END | CORNER_TO_CORNER |
NOTCH | CENTER_TO_CENTER,
distance = doubleconstraint,
extension_distance= double,
projection_length = doubleconstraint,
extension = EDGE | NONE | RADIAL |
RECTANGLE | SQUARE,
look_thru = NONE | NOT_ADJACENT | ALL,
look_thru_count = integerconstraint},
...}, //optional
line_end_length = double, //optional
adjacent_length = double, //optional
line_end_expand = double, //optional
side_expand = double, //optional
design_grid = double //optional
);
Returns
edge layer
Arguments
nodes
Required. Specifies the polygon layer that contains the polygons targeted for coloring.
line_end
Optional. Specifies additional node edges that are added when the rule_type option for
the color_spacing_rules argument is LINE_END_TO_SIDE or
color_spacing_rules
Optional. Specifies the rule type and the spacing values for the output polygon layer.
❍ rule_type. Required. Specifies how the distance is measured.
■ SIDE_TO_SIDE
■ LINE_END_TO_SIDE
■ LINE_END_TO_LINE_END
■ NOTCH
■ CENTER_TO_CENTER
❍ distance. Required. Specifies the check distance. See “Constraints” on page A-4 for
more information.
❍ extension_distance. Optional. Specifies the check region extension distance when
the extension option is RECTANGLE. The value must be nonnegative. The default
is 0.0.
❍ projection_length. Optional. Specifies the projection length. See “Constraints” on
page A-4 for more information. The default is >0.0.
❍ extension. Optional. Specifies the extension of the check region beyond the
endpoints of the edge being checked. The default is NONE.
■ EDGE. Forms the check region by extending the edges using the
extension_distance argument value, and creating right-angle boundaries at the
extended endpoints based on the distance constraint. The right-angle
boundaries of the check region are exclusive. The far boundary of the check
region is inclusive or exclusive depending on the constraint of the distance
value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
■ NONE. Does not extend the check region. It is formed with right-angle boundaries
at the edge endpoints. The right-angle boundaries of the check region are
exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
■ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive
or exclusive depending on the constraint of the distance value.
■ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
■ SQUARE. Extends the check region past the endpoints of the edges using the
distance argument value with a square. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ look_thru. Optional. Specifies the edges that the spacing check looks through when
measuring. The default is NONE.
■ NONE. Does not look through any edges, including edge endpoints.
■ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not
look through any edges that share endpoint X with edge A. This setting avoids
false violations that might be reported when the look_thru argument is ALL.
■ ALL. Looks through all edges.
line_end_length
Optional. Specifies the length for an edge to be selected. The default is 0.0.
adjacent_length
Optional. Specifies the length that must be satisfied by the edges adjacent to a
90-degree angle. The default is 0.001.
line_end_expand
Optional. Specifies the expansion of the line-end edges. The line-end edges are
expanded before the side edges. The default is 0.0.
side_expand
Optional. Specifies the expansion of the side edges. The side edges are expanded after
the line-end edges. The default is 0.0.
design_grid
Optional. Specifies the design grid. The link edge on the returned edge layer are on this
grid, not on the input library resolution. The default is 0.001.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
See Also
three_color()
two_color()
compare()
The compare() function starts the netlist comparison. The function returns a handle to be
used by the icvread() and write_xref_spice() functions.
Call the check_property() function, which makes the basic declarations as to which
properties are compared, before calling the compare() function in the runset.
Limitation:
The compare() function cannot be called more than one time in a runset.
Syntax
compare(
state =
compare_state,
schematic =
schematic_netlist_file_handle,
layout =
layout_netlist_file_handle,
user_functions_file =
"string", //optional
case_sensitive =
{DEVICE_NAME, NET_PORT, PROPERTY},
//optional
push_down_pins = true | false, //optional
push_down_devices = true | false, //optional
memory_array_compare = true | false, //optional
remove_dangling_net = LAYOUT_UNTEXTED | ALL | NONE, //optional
delete_schematic_cells = {"string", ...}, //optional
delete_layout_cells = {"string", ...}, //optional
print_messages = {message = true | false,
...}, //optional
print_devices_per_net_max = integer, //optional
print_detail = {property = NONE | ONLY_COORDINATES |
COORDINATES_AND_DEVICE_TYPES | ALL,
xref_pin = NONE | UNMATCHED_PINS | ALL,
device_pin = NONE | ALL}, //optional
write_equiv_netlists = FAILED | ALL | NONE, //optional
ignore_equiv_file = "string", //optional
black_box_file = "string", //optional
schematic_top_cell = "string", //optional
layout_top_cell = "string", //optional
action_on_error = EXPLODE | NO_EXPLODE, //optional
resolve_duplicate_equivs = true | false, //optional
check_property_for_failed_equiv = true | false, //optional
multiply_width = true | false, //optional
ignore_equivs_with_devices_leveled_out = true | false, //optional
explode_imbalanced_equivs = true | false, //optional
top_cell_ports_static = NAMED_MATCHED | ALL, //optional
error_limit_per_check = integer, //optional
texted_zero_connection_ports = IGNORE |
KEEP_SCHEMATIC_AND_NAME_MATCHED |
KEEP_ALL, //optional
black_box_static_ports = NONE | TEXTED, //optional
define_empty_cell_as_device = NONE | BOTH //optional
);
Returns
xref_database_handle or error result
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function.
schematic
Required. Specifies the schematic netlist database handle. The netlist must be defined
by the schematic() function.
layout
Required. Specifies the layout netlist database handle. The netlist must be defined by the
netlist() function.
user_functions_file
Optional. Specifies the file that contains the remote functions. See “Compare Utility
Functions” in Chapter 4 for more information about the utility functions you can use to
define a remote function.
The structure of the user function file is:
#include <icv_compare.rh>
Note:
The entry point qualifier designates the remote functions. All functions in the user
functions file that are directly referenced in the main runset file must be designated as
remote functions.
case_sensitive
Optional. Lists the case-sensitive settings. The default is {DEVICE_NAME, NET_PORT,
PROPERTY}.
❍ NET_PORT. Specifies that comparisons of all net names and port names are
case-sensitive, except for port names on primitive devices.
Note:
Port matching considers geometry first. The case-sensitive setting affects only
those cases where ports are symmetrical.
❍ PROPERTY. Specifies that string property comparisons are case-sensitive.
push_down_pins
Optional. Specifies if hierarchically connected pins are pushed down. The default is
true.
❍ false. Specifies that hierarchically connected pins are not pushed down.
Power and ground nets are not pushed down when they are shorted. Use the
layout_ground and layout_power arguments of the text_options() function to
specify the power and ground nets.
For a schematic/layout equivalence cell pair, hierarchically connected pins are not
pushed down for the pair when
❍ The pair participates in a multiple equivalence point (that is, multiple schematic cells
paired with one layout cell or vice versa), and
❍ The schematic/layout pair has the same port count and same port names.
push_down_devices
Optional. Specifies if devices are pushed down into the hierarchy. The default is false.
❍ true. Specifies that devices are pushed down into the hierarchy.
❍ false. Specifies that devices are not pushed down into the hierarchy.
memory_array_compare
Optional. Specifies if arrayed memories are compared faster and with less memory. The
default is true.
❍ true. Specifies that arrayed memories are compared faster and with less memory.
remove_dangling_net
Optional. Specifies if the input netlists are preprocessed to find all cases where a port net
in a cell never connects to any extracted device throughout the hierarchy. The net
dangles outside the cell from which it originates and does not need to be a port net in the
cell. The IC Validator tool removes all such dangling nets throughout the hierarchy and
changes the net in the originating cell from a port net to an internal net. The default is
LAYOUT_UNTEXTED.
❍ ALL. Removes all dangling nets within the schematic and layout.
delete_schematic_cells
Optional. Specifies the schematic cells to delete from the netlist. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
delete_layout_cells
Optional. Specifies the layout cells to delete from the netlist. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
print_messages
Optional. Specifies the messages to output. Table 2-22 lists the messages and the
default settings. Except as noted, the comparison messages are written to the
run_details/compare/sum.cell.cell file.
Note:
A maximum of 1000 error messages are written for each diagnostic type.
Table 2-22 Netlist Comparison Messages
equated_nets_list Lists in alphabetical order the net names used as initial true
match reference points as specified by the equate_nets
argument of the equiv_options() function.
equivalent_cell_list Lists all matched cells at this level or in the entire run. true
invalid_user_equivs Lists all invalid equivalence points and gives the reason why true
each one was considered invalid. The messages are written
to cell.LVS_ERRORS and run_details/cell_lvs.log files.
merged_nets_referenced Many messages refer to nets that do not exist in the original true
netlist description of a cell. These nets are created as a
result of merging operations. Any of these nets that are
referenced earlier in the equivalence summary file are listed
in terms of their component members. These listings can be
used to determine which physical nets have been used to
formulate a merged or composite net.
netlist_stats Lists the individual and total counts for devices and nets in true
a netlist. The number of devices and nets created or
removed by merging and filtering is also shown.
non_equivalent_cell_li Lists all unmatched cells at this level or in the entire run. true
st
port_xref_table Lists all ports in a matched cell. Any ports generated in true
either the schematic or layout are marked as such.
referenced_merged_devi Many messages refer to device instances that do not exist true
ces in the original netlist description of a cell. These devices are
created as a result of merging operations. Any of these
devices that are referenced earlier in the equivalence
summary file are listed in terms of their component
members. These listings are used to determine which
physical devices have been used to formulate a merged or
composite device.
swapped_pin_analysis Reports names of pins that are swapped between the true
schematic and layout netlists for each instance. This
information is used to resolve unmatched nets that occur
due to swapped pins on instances connected to those nets.
symmetrical_nodes_foun For circuits with symmetric circuitry, lists the percentage of true
d devices and nets remaining after all unique matches are
found. Subsequent matches require one or more assumed
matches to allow further matching progress.
uncompared_cell_list Lists all cells that were not compared because of prior true
errors at this level or elsewhere in the run.
all_merged_device_list Writes out the members of the merged devices to the false
equivalence netlist files, sch.MODULE and lay.MODULE,
as the comment of the netlists. In a SPICE flow (that is,
when the lvs_netlist_flow argument of the
run_options() function is SPICE), the information is in
separate file rather than of inside the equivalence netlist.
filtered_device_list Lists all filtered devices in both the schematic and layout false
netlists.
parallel_device_list Lists all parallel merged devices in both the schematic and false
layout netlists.
series_device_list Lists all series merged devices in both the schematic and false
layout netlists.
pre_merge_stats Writes out the premerge netlist statistics table to the false
summary file.
print_devices_per_net_max
Optional. Limits the information output for unmatched nets. The default is 10.
print_detail
Optional. Specifies the level of detail written to the LVS_ERRORS file.
❍ property. The default is COORDINATES_AND_DEVICE_TYPES.
■ NONE
■ ONLY_COORDINATES
■ COORDINATES_AND_DEVICE_TYPES
■ ALL
■ NONE
■ UNMATCHED_PINS
■ ALL
■ NONE
■ ALL
write_equiv_netlists
Optional. Specifies when equivalence netlists are output. The default is FAILED.
❍ FAILED. Writes out only equivalence netlists that have failed due to a device or a net
not matching. Equivalence netlists are not output for other error types, such as
property errors or text mismatch errors.
❍ ALL. Writes out netlists for all equivalences.
ignore_equiv_file
Optional. Specifies the file where equiv_options() function call entries, in which the
ignore option is true for unmatched equiv_cells pairs, is generated. This
equiv_options() function call can be used by subsequent compare runs to ignore
equiv_cells pairs that do not match. Not rechecking these equiv_cells pairs reduces
runtime. This functionality is useful in cases where the top cell has compared
successfully, and unmatched intermediate equiv_cells pairs can be ignored. If the file
already exists, the content of the file is overwritten. By default, the IC Validator tool does
not create a file.
black_box_file
Optional. Specifies the equivalence file where the generated
lvs_black_box_options() function calls are saved. These black-box entries are
created for all matched cells and can be used by subsequent compare runs to avoid
recomparing those cells. By default, the IC Validator tool does not create a file.
schematic_top_cell
Optional. Specifies the top level of the schematic for comparison purposes. The default
schematic top-level cell is derived from the pairing of a schematic cell name to the layout
top-level cell in the equiv_cells argument of the equiv_options() function. If no
equiv_cells pair containing the layout top-level cell name is explicitly provided in the
runset, the default schematic top-level cell name is equivalent to the layout top-level cell
name.
Note:
The -stc command-line option overrides this name. See the Command-Line Options
section in the “IC Validator Basics” chapter of the IC Validator User Guide for more
information.
layout_top_cell
Optional. Specifies the top level of the layout for comparison purposes. The default
top-level cell is specified by the cell argument of the library() function.
Note:
The -c command-line option overrides this name. See the Command-Line Options
section in the “IC Validator Basics” chapter of the IC Validator User Guide for more
information.
action_on_error
Optional. Specifies the action taken on failed equivalence cell pairs. The default is
NO_EXPLODE.
Note:
The default behavior changes for cases when the action_on_error argument is
NO_EXPLODE. In certain instances, user-intended equivalence cell pairings are still
exploded when: both schematic and layout cells are missing, both are empty, or one
is empty and one is missing.
❍ EXPLODE. Explodes the equivalence cell pairings that have errors upward into their
parent equivalence cells, and then the netlist comparison continues. However, if the
no_explode_condition argument of the match() function is
PROPERTY_ERRORS_ONLY, PORT_TOPOLOGY_MATCHED, or PORT_TEXT_MATCHED, then
equivalence cell pairs consistent with the no_explode_condition setting of the
resolve_duplicate_equivs
Optional. Specifies if the IC Validator tool attempts to detect duplicate equivalence
points. The default is false.
❍ true. Attempts to detect duplicate equivalence points and resolve them
automatically.
❍ false. Does not attempt to detect duplicate equivalence points and resolve them
automatically.
check_property_for_failed_equiv
Optional. Specifies if the properties of failed equivalences are checked. The default is
false.
multiply_width
Optional. Specifies if the width is multiplied. The default is true.
❍ true. Multiplies the width property by the multiplication factor property M for all
standard, non-generic device types.
❍ false. Does not multiply the width.
Standard properties that are derived from the width property are also affected, including
❍ RESISTOR: r
❍ CAPACITOR: c
❍ NP/PN: area, pj
❍ NPN/PNP: area
ignore_equivs_with_devices_leveled_out
Optional. Controls whether user-intended equivalence cells with leveled devices are
ignored for compare. If the cells are ignored, then no compare is performed on these
cells, and they are exploded into the parent equivalences. The default is false.
explode_imbalanced_equivs
Optional. Specifies if all imbalanced equivalences are automatically exploded. An
imbalanced equivalence is one that has an unequal number of placements between the
schematic and layout. The default is true.
❍ true. LVS checking explodes all imbalanced equivalences.
❍ false. LVS checking does not explode the imbalanced equivalences, but compares
the missing cell instances as devices.
top_cell_ports_static
Optional. Specifies that top-cell port nets are static; that is, the layout and schematic port
nets cannot be merged. The default is NAME_MATCHED.
❍ NAME_MATCHED. Specifies that only top-cell port nets with matching names are static.
error_limit_per_check
Optional. Specifies the maximum number of times that a condition is reported in the Error
Information and Warning Information sections of the sum.cell.cell files or in the
cell.LVS_ERRORS file. The default is 1000.
Note:
Select the conditions to report using the match_condition argument of the match()
function.
texted_zero_connection_ports
Optional. Determines how the compare() function treats texted zero connection ports.
The default is IGNORE.
A texted zero connection port is a port on a net in a cell that has text but no connections
to any devices after netlist preprocessing. Examples of netlist preprocessing functions
include filter(), short_equivalent_nodes(), merge_series(), and so forth. Ports
in the schematic netlist are always treated as texted ports.
❍ IGNORE. Specifies that texted zero connection ports are ignored, which means the pin
connections to these ports are not checked.
❍ KEEP_SCHEMATIC_AND_NAME_MATCHED. Specifies that all schematic texted zero
connection ports and layout texted zero connection ports that have the same name
port in the schematic netlist are kept for comparison. Layout zero connection ports
that do not have the same name port in the schematic netlist are ignored.
❍ KEEP_ALL. Specifies that all texted zero connection ports are kept so that the pin
connections to these ports can be checked. Unmatched texted zero connection ports
cause the LVS comparison result to fail. Only texted zero connection ports are
matched; untexted zero connection ports are ignored.
black_box_static_ports
Optional. Specifies that black-box cell port nets are static, that is, the layout and
schematic port nets cannot be merged. The default is NONE.
❍ NONE. Specifies that no black-box cell port net is static.
❍ TEXTED. Specifies that only black-box cell texted port nets are static.
define_empty_cell_as_device
Optional. Specifies whether empty cells (X-card instances) are ignored or recognized as
GENDEV primitive devices. For an empty cell to be treated successfully as a device, the
IC Validator tool must be able to equate it automatically between the schematic and
layout netlists. The default is NONE.
❍ NONE. Ignores empty cells.
❍ BOTH. Recognizes empty cells as GENDEV primitive devices in both the schematic
and layout netlists provided that all of the following required conditions are met:
■ The empty cell name must not be in a black-box, equivalent, or delete-cell
statement
■ The empty cell name must not be declared in a device function, such as nmos(),
or a map_*() function
■ The empty cell must be able to be equated automatically between the schematic
and layout netlists
If pins exist, they must have the same name; no multiple equates to other device
types are allowed.
When all of these conditions are met, empty cells are automatically mapped to each
other if they exist in both the schematic and layout netlists. Empty cells that do not
exist in both netlists are reported as unmatched devices.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-CompareEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_LVS.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
check_property()
equiv_options()
filter()
init_compare_matrix()
lvs_options()
match()
merge_parallel()
merge_series()
recalculate_property()
search_include_path()
connect()
The connect() function creates a connect database that defines electrical connectivity for
the specified layers. For each entry within the connect_items argument, connectivity is
independently established from each layer in the layers list to the layer specified with the
by_layer option. The resulting connect database is untexted.
Syntax
connect(
connect_items = {{layers = {polygon_layer, ...},
by_layer = polygon_layer,
include_touch = NONE | EDGE,
by_layer_connection = ALL | SHIELDED_OVERLAP},
...}
);
Returns
connect database
Arguments
connect_items
Required. Lists the connection specifications.
❍ layers. Required. Specifies a list of the polygon layers to connect.
❍ by_layer. Optional. Specifies the polygon layer by which the layers specified in the
layers argument are connected. By default, these layers connect directly with each
other; they are not connected through a by layer.
In the following example, the layers are all connected to each other without a by layer.
Figure 2-53 illustrates this example.
connect(connect_items = {{{layer1, layer2, layer3, layer4}}} );
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
create_ports()
incremental_connect()
stamp()
text_net()
Syntax
contains(
layer1 = polygon_layer,
dimensions = {double, double},
rotate = NONE | FORTY_FIVE, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_contains(
layer1 = polygon_layer,
dimensions = {double, double},
rotate = NONE | FORTY_FIVE, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
dimensions
Required. Specifies the dimensions of the rectangle that must be contained.
rotate
Optional. Specifies whether the rectangle is checked for containment at different
orientations. The default is NONE.
❍ NONE. Does not rotate the rectangle.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In Figure 2-55, the dimensions argument determines the size of the layerA polygons that
are selected.
out1 = contains(layerA, dimensions = {0.01, 0.045}, rotate = NONE);
out2 = contains(layerA, dimensions = {0.03, 0.045}, rotate = NONE);
layerA
Figure 2-56 shows the use of the rotate argument to change which polygons can be
selected.
out1 = contains(layerA, {0.01, 0.055}, rotate = NONE);
out2 = contains(layerA, {0.01, 0.055}, rotate = FORTY_FIVE);
layerA
See Also
rectangles() and not_rectangles()
copy()
The copy() function creates a copy of a polygon layer. The new layer has no ancestry and
no connectivity.
Use the copy() function to
• Remove ancestry and connectivity.
• Direct a layer to the error database.
Syntax
copy(
layer1 = polygon_layer,
name = "layer_label", //optional
ancestry = true | false //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer that is copied.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
ancestry
Optional. Specifies if ancestry information is propagated to the output. The default is
false.
❍ true. Propagates the ancestry information to the output. Therefore, the output has
polygon membership information.
❍ false. Does not propagate the ancestry information to the output. Therefore, the
output does not have polygon membership information.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 2-57 shows using the copy() function to create a copy of all polygons on the input
layer. All ancestry and connectivity is lost for the new polygon.
copy_of_metal = copy(metal);
metal1
copy_of_metal1
There are subtle, yet important differences, between the use of the copy() function and the
use of the = operator for layer variables. While the copy() function creates a new layer that
contains the geometric data of the original layer, the = operator simply copies the content of
one variable into another. For example, the following results in two distinct layers, metal and
copy_of_metal:
copy_of_metal = copy(metal);
However, the following results in two distinct variables, but there is still only one layer.
a = metal;
Furthermore, both of the following examples result in the layer “b” having the same
connectivity as layer “a”.
This example:
cb1=connect({{{a}, a}});
b = a;
However, both of the following examples result in layer “b” being unconnected.
This example:
cb1=connect({{{a}, a}});
b = copy(a);
See Also
copy_edge()
copy_error()
copy_by_cells()
The copy_by_cells() function creates a layer by copying the specified layer from the
specified list of cells.
Important:
This is a methodology check function. See disclaimers 1 (Preserving Cells) and 2
(Hierarchy) in “Methodology Check Functions” on page 1-4.
Syntax
copy_by_cells(
layer1 = polygon_layer,
cells = {"string", ...},
depth = CELL_LEVEL | DESCENDANTS | ALL, //optional
name = "layer_label", //optional
keep_cells = true | false //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the layer to be copied from cells.
cells
Required. Specifies the cells from which the layer is copied. If the list is empty, an empty
layer is created. String matching using metacharacters is allowed. See “String Matching”
on page A-11 for more information.
Note:
The "!" metacharacter takes precedence when depth is DESCENDANTS or ALL. For a
cell to be copied, its parent must not be excluded.
depth
Optional. Specifies the depth of the cell hierarchy included in the copy. The default is ALL.
❍ CELL_LEVEL. Includes only the geometric data in the cell; no descendants are
included unless they are also in the cells list.
❍ DESCENDANTS. Includes only data in the descendants of a cell, recursively. No
cell-level data is included unless the cell is a descendant of a cell in the cells list.
❍ ALL. Includes all data in the cell and below.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
keep_cells
Optional. Specifies the exploding of cells in the select_cells list. The default is true.
❍ true. Does not explode cells during hierarchy optimization.
❍ false. The selected cells are allowed to explode during hierarchy optimization. If a
selected cell does get exploded, the selected data (the cell’s extents in this case) are
placed in the parent cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
/* copy the gate layer from the PROG cell */
check_gate = copy_by_cells (gate, {"PROG"});
/* copy the via layer from all but the RAM cell */
t1 = copy_by_cells (via, {"*", "!RAM"})
See Also
assign() (select_cells argument)
copy()
copy_by_layout_equiv_cells()
copy_by_layout_equiv_cells()
The copy_by_layout_equiv_cells() function creates a layer by copying the specified
layer from the layout equivalence cells that are either identified using the equiv_options()
function, or automatically generated by the generate_user_equivs argument of the
lvs_options() function.
Syntax
copy_by_layout_equiv_cells(
layer1 = polygon_layer,
depth = CELL_LEVEL | DESCENDANTS | ALL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the layer to be copied from cells.
depth
Optional. Specifies the depth of the cell hierarchy included in the copy. The default is ALL.
❍ CELL_LEVEL. Includes only the geometric data in the cell; no descendants are
included unless they are also in the cells list.
❍ DESCENDANTS. Includes only data in the descendants of a cell, recursively. No
cell-level data is included unless the cell is a descendant of a cell in the cells list.
❍ ALL. Includes all data in the cell and below.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In this example, m1_eq layer contains shapes of the m1 layer from cells ADD4 and DGATE.
lvs_options(
generate_user_equivs = NONE
);
equiv_options(
equiv_cells = {
{schematic_cell = "add4", layout_cell = "ADD4"},
{"dgate", "DGATE"}
}
);
m1_eq = copy_by_layout_equiv_cells(m1, CELL_LEVEL);
See Also
assign() (select_cells argument)
copy()
copy_by_cells()
lvs_options()
copy_edge()
The copy_edge() function creates a copy of an edge layer. Use the copy_edge()
function to
• Remove ancestry.
• Direct a layer to the error database.
Syntax
copy_edge(
layer1 = edge_layer,
name = "layer_label", //optional
ancestry = true | false //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge layer that is copied.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
ancestry
Optional. Specifies if ancestry information is propagated to the output. The default is
false.
❍ true. Propagates the ancestry information to the output. Therefore, the output has
polygon membership information.
❍ false. Does not propagate the ancestry information to the output. Therefore, the
output does not have polygon membership information.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Figure 2-57 shows using the copy_edge() function to create a new edge layer containing a
copy of all edges on the input layer.
copy_of_elayer = copy_edge(elayer);
elayer
copy_of_elayer
See the copy() function for more information about the difference between using a copy
function and the = operator.
See Also
copy()
copy_error()
copy_error()
The copy_error() function creates a copy of the geometric data in an error layer. The new
layer has no ancestry and no connectivity, and therefore, no polygon membership
information.
Use the copy_error() function to
• Remove ancestry.
• Direct a layer to the error database.
Syntax
copy_error(
layer1 = error_layer,
name = "layer_label" //optional
);
Returns
error layer or error result
Arguments
layer1
Required. Specifies the error layer that is copied.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
copy_of_elayer = copy_error(elayer);
See the copy() function for more information about the difference between using a copy
function and the = operator.
See Also
copy()
copy_edge()
covered_by()
The covered_by() function checks multiple enclosure specifications for rectangles using a
spacing check. The function selects rectangles from the layer1 polygon layer that fit
enclosure specifications within the layer2 polygon layer. This function is the complement of
the not_covered_by() function. See the Description section of the not_covered_by()
function for more information.
By performing spacing checks of edges that oppose each other, the covered_by() function
checks whether a layer1 polygon is enclosed by the layer2 polygon. Regardless of the
endpoint extension mode selected by the extension argument, spacing is not checked
between the following edge pairs:
• Between collinear edges; that is, edges along the same line. See Figure 2-59 for an
example.
Figure 2-59 Collinear Edges
layer1
layer2
• Between perpendicular edges, or any edges forming an angle greater than 90 degrees.
See Figure 2-60 for an example.
Figure 2-60 Perpendicular Edges
layer1
layer2
• Between a layer1 edge and any outside edge of the layer2 polygon. See Figure 2-61
for an example.
Figure 2-61 Outside Edge
layer1
layer2
For any extension setting other than NONE, a point touch satisfies only a distance of 0. See
Figure 2-62 for an example.
Figure 2-62 Point Touch
layer1
layer2
More information about selection rules and check region examples are shown in the
Examples section for the not_covered_by() function.
Syntax
covered_by(
layer1 = polygon_layer,
layer2 = polygon_layer,
distances = {{distance1 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance2 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance3 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance4 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
...},
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
layer2
Required. Specifies the enclosing polygon layer.
distances
Required. Lists the distances and extensions for check regions. The distances can be
applied in either clockwise or counterclockwise order. That is, a rectangle fits the
specification if the four minimum distances can be satisfied in at least one of the eight
possible permutations: four possible rotations, in forward or reverse order.
❍ distance1, distance2, distance3, distance4. Specify the minimum enclosure
values, one for each side of the layer1 rectangle. The distances specify the
minimum distance from the outside of the layer1 polygon to the inside of the layer2
polygon. The distances must be positive values. A distance of 0 indicates that the
layers can be touching.
Note:
For the covered_by() function, the distances must be greater than or equal to
(>=) the values.
❍ extension. Optional. Specifies the endpoint extension for the check region. See the
extension definition in the distances argument of the not_covered_by() function
for more information. The default is NONE.
■ NONE. Does not extend the check region; measures only layer1 and layer2
edges with a positive perpendicular projection between them.
■ RADIAL. Extends the check region with the distance value past the endpoints of
the layer1 edge being checked, forming a radial curve.
■ SQUARE. Extends the check region with the distance value past the endpoints of
the layer1 edge being checked, forming a square box.
■ INTERSECTION. Extends the check region with the adjacent distance value past
the endpoints of the layer1 edge being checked.
■ RECTANGLE. Extends the check region past the endpoints of the layer1 edges
using the extension_distance value with a rectangle. The boundary of the
check region is inclusive or exclusive depending on the constraint of the distance
value. See the diagram for the extension argument of the enclose() function
for more information.
Figure 3-46 illustrates using the various extension argument settings.
❍ extension_distance. Optional. Specifies the check region extension distance when
the extension argument is RECTANGLE. The value must be nonnegative. The default
is 0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Examples
See the Examples section of the not_covered_by() function for more information.
See Also
enclose()
not_contained_by() and contained_by()
not_covered_by()
create_ports()
The create_ports() function creates ports for the specified connect database. The
resulting connect database contains newly created ports. This function retains text. See the
Description section for more information.
Syntax
create_ports(
connect_sequence = connect_database,
port_items = {{connected_layer = polygon_layer,
marker_layer = polygon_layer},
...},
report = {CREATED_PORTS, UNUSED_MARKERS}, //optional
port_text_items = {{connected_layer = polygon_layer,
marker_layer = text_layer}, ...}, //optional
cell_list = {"string", ...}, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL //optional
);
Returns
connect database
Arguments
connect_sequence
Required. Specifies the connect database that contains the connected layers.
port_items
Optional. Lists the port specifications for polygon layers.
Note:
If both the port_items and port_text_items arguments are empty lists, then no
ports are created.
❍ connected_layer. Specifies a layer that is in the connect database.
❍ marker_layer. Specifies the polygon layer where the ports are created. Ports are not
created for cells that are not listed by the cell_list argument.
report
Optional. Specifies what is reported in the error database. The default is
UNUSED_MARKERS.
❍ UNUSED_MARKERS. Reports polygons on the marker layer that do not create a new
port.
port_text_items
Optional. Lists the port specifications for text layers.
Note:
If both the port_items and port_text_items arguments are empty lists, then no
ports are created.
❍ connected_layer. Specifies a layer that is in the connect database.
❍ marker_layer. Specifies the text layer where the ports are created. Ports are not
created for cells that are not listed by the cell_list argument.
When the same marker layer is used for more than one connected layer, text is
applied in a priority order relative to the order of the port_text_items list. Text that
overlaps polygons from more than one connected layer is applied to the first
connected layer in the list. Each text object is used only one time, and text is reported
as unused only when it is not used by any connected layer in the port_text_items
list.
cell_list
Optional. Specifies the cells on which ports are created. The default ({ }) means to create
ports for only the top cell.
To create ports for all cells, use
cell_list = {"*"}
This example creates ports only for cell "A", "B" and "C":
cell_list = {"A", "B", "C"}
processing_mode
Optional. Specifies how the hierarchy is processed. The default is CELL_LEVEL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
Description
The create_ports() function creates a new port only if a marker_layer polygon is located
inside the same cell as the corresponding connected_layer polygon.
• If more than one marker interacts on a single net, an arbitrary choice is made for creating
the port and indicating the coordinates in the report. Extra markers are unused.
• If a single marker interacts with more than one net, only one port is created. The result is
arbitrary.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
c1 = create_ports(c1, {{metal, bondpad}});
See Also
connect()
incremental_connect()
stamp()
text_net()
Syntax
cutting(
layer1 = polygon_layer,
layer2 = polygon_layer,
count = integerconstraint, //optional
include_enclosing = true | false, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
count_parity = ALL | ODD | EVEN, //optional
count_by = SHAPE | NET, //optional
connect_sequence = connect_database, //optional
name = "layer_label" //optional
);
not_cutting(
layer1 = polygon_layer,
layer2 = polygon_layer,
count = integerconstraint, //optional
include_enclosing = true | false, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
count_parity = ALL | ODD | EVEN, //optional
count_by = SHAPE | NET, //optional
connect_sequence = connect_database, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer from which polygons are selected.
layer2
Required. Specifies the polygon layer against which the layer1 layer is checked.
count
Optional. Specifies the number of layer2 polygons that must be cut by a layer1
polygon for the layer1 polygon to be selected. See “Constraints” on page A-4 for more
information. The default is >0.
Figure 2-63 shows the effect of the count argument settings with the cutting()
function.
Figure 2-63 count Argument Example With cutting() Function
layer1
layer2
Result
count > 0 count > 2
Figure 2-64 shows the effect of the count argument settings with the not_cutting()
function.
Figure 2-64 count Argument Example With not_cutting() Function
layer1
layer2
Result
count > 2
include_enclosing
Optional. Specifies whether layer1 polygons that enclose layer2 polygons are included
in the output. The default is true.
Figure 2-65 shows the effect of the include_enclosing argument settings with the
cutting() function.
layer1
layer2
Result
include_enclosing= include_enclosing=
true false
(Default)
Figure 2-66 shows the effect of the include_enclosing argument settings with the
not_cutting() function.
layer1
layer2
Result
include_enclosing= include_enclosing=
true false
(Default)
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
count_parity
Optional. Specifies the parity of the number of layer2 polygons that must touch layer1
polygons. The default is ALL.
❍ EVEN. Specifies that the layer1 polygons must have an even number of interactions
with layer2 data.
❍ ODD. Specifies that the layer1 polygons must have an odd number of interactions
with layer2 data.
❍ ALL. Does not check the parity based on the number of interactions.
The count argument can be used with the count_parity argument. For example, when
count = [4, 9] and the count_parity argument is EVEN, the layer1 polygons that
interact with four, six, or eight layer2 polygons are selected.
Figure 2-67 shows an example of two interacting layers.
Figure 2-67 count_parity Argument Example
L1
L2
L1
L2
result
count_by
Optional. Provides selection by net feature. The default is SHAPE.
❍ NET. Selects a layer1 polygon if it cuts with distinct nets on the layer2 layer the
number of times specified by the count argument.
❍ SHAPE. Selects a layer1 polygon if it cuts the layer2 layer the number of times
specified by the count argument.
Refer to Figure 2-69 for the following examples.
Figure 2-69 count_by Argument Example
L1
L2
❍ Only net 1 is cut by layer L1, but net 2 is also considered because the default of the
include_enclosing argument is true. Each net is counted two times. Therefore,
polygon A meets the count=4 restriction.
cutting(L1, L2, count==4)
❍ Only net 1 is cut by layer L1. Net 2 is not considered because include_enclosing
argument is false. Nets 1 is counted one time because the count_by argument is
NET. Therefore, polygon A meets the count=1 restriction.
cutting(L1, L2, count==1, include_enclosing=false, count_by=NET,
connect_sequence=cdb)
❍ Only net 1 is cut by layer L1. Net 2 is not considered because include_enclosing
argument is false. Nets 1 is counted two times. Therefore, polygon A meets the
count=2 restriction.
cutting(L1, L2, count==2, include_enclosing=false)
connect_sequence
Optional. Specifies the connect database that has the layer2 connection. The database
is used when the count_by argument is NET.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
interacting() and not_interacting()
data_filter()
The data_filter() function outputs a specific number of polygons from the input layer that
are connected to each net. The selection of polygons that are output is random for each net,
and the polygons can come from anywhere in the input net’s hierarchy. Because output is
random for each net, the result can differ from run to run.
Syntax
data_filter(
connect_sequence = connect_database,
layer1 = polygon_layer,
polygons_per_net = integer, //optional
threshold = integer, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
connect_sequence
Required. Specifies the connect database.
layer1
Required. Specifies the layer that is analyzed for the specified number of polygons on
each net. This layer must be in the connect database.
polygons_per_net
Optional. Specifies the number of polygons from each net that are output. The default
is 1.
threshold
Optional. Specifies the threshold value. Polygons from each net are output only if the
total number of polygons in the net is greater than or equal to the threshold. The default
is 0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
Note:
If the input has contacts or vias without hierarchical overlap, set the processing mode
to CELL_LEVEL for better performance. Otherwise, set the HIERARCHICAL to
resolve hierarchical issues.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
As shown in Figure 2-70, the following data_filter() function writes three polygons from
each net to the output layer.
condb = connect({{{A}, by_layer = B}});
result = data_filter(condb, A, polygons_per_net = 3);
As shown in Figure 2-71, the following data_filter() function writes three polygons to the
output layer from each net that has greater than or equal to four polygons.
condb = connect({{{A}, by_layer = B}});
result = data_filter(condb, A, polygons_per_net = 3, threshold = 4);
See Also
data_limit()
data_limit()
The data_limit() function partially copies layer1 polygons based on a specified limit.
Data is copied in a bottom-up hierarchical cell order.
Syntax
data_limit(
layer1 = polygon_layer,
limit = integer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer from which polygons are selected.
limit
Required. Specifies the number of polygons to output. The hierarchical count of polygons
in the output layer equals this value. The flat count of the number of polygons in the
output layer, however, depends on the number of instances there are for each cell that
contains data.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 2-72 shows the result of using the data_limit() function. For example,
Result = data_limit(layer1, limit=2);
See Also
data_limit_edge()
data_limit_edge()
The data_limit_edge() function partially copies layer1 edges based on a specified limit.
Data is copied in a bottom-up hierarchical cell order.
Syntax
data_limit_edge(
layer1 = edge_layer,
limit = integer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer from which edges are selected.
limit
Required. Specifies the number of polygons to output. The hierarchical count of polygons
in the output layer equals this value. The flat count of the number of polygons in the
output layer, however, depends on the number of instances there are for each cell that
contains data.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 2-73 shows the result of using the data_limit_edge() function. For example,
Result = data_limit_edge(layer1, limit=5) ;
See Also
data_limit()
Typically, the input layer for this function is the output from an external edge function. Use
the delta_edge() function to determine design violations based on the delta distance of all
angle edge data.
Figure 2-74 Delta Edge
delta_y
delta_x
Note:
Using the delta_edge() function with both delta_x and delta_y values equal to the
default of >=0 performs a copy_edge() function.
Using the not_delta_edge() function with delta_x and delta_y values equal to the
default of >=0 returns an empty layer.
Syntax
delta_edge(
layer1 = data_layer,
delta_x = doubleconstraint, //optional
delta_y = doubleconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_delta_edge(
layer1 = data_layer,
delta_x = doubleconstraint, //optional
delta_y = doubleconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer from which edges are selected.
delta_x
Optional. Specifies the delta-x distance. The default is >=0.
delta_y
Optional. Specifies the delta-y distance. The default is >=0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Here is a simple delta_edge() example.
red = delta_edge(input, delta_x <=2 , delta_y >=2);
In the following example, the delta_edge() function selects specified corner violations of
an external edge function.
blue = external_corner1_edge(rect, <5, type = {CONVEX_TO_CONVEX},
output_type = POINT_TO_POINT);
red = delta_edge(blue, delta_x >= 2 , delta_y >= 3);
See Also
angle_edge() and not_angle_edge()
length_edge() and not_length_edge()
Syntax
delta_error(
layer1 = error_layer,
delta_x = doubleconstraint, //optional
delta_y = doubleconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_delta_error(
layer1 = error_layer,
delta_x = doubleconstraint, //optional
delta_y = doubleconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
error layer or error result
Arguments
layer1
Required. Specifies the error layer from which errors are selected.
delta_x
Optional. Specifies the delta-x distance. The default is >=0.
delta_y
Optional. Specifies the delta-y distance. The default is >=0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Here is a simple delta_error() example.
err = center_to_center1_error(green, < 4); // consist of red and blue
center_to_center errors
red = delta_error(err, delta_x <=2 , delta_y >=2);
See Also
delta_edge() and not_delta_edge()
df_error_distance()
df_error_x_distance()
df_error_y_distance()
density()
The density() function checks the layout density based on user-programmable density
equations.
The density() function calls a remote function for each check-region boundary or each
delta_window subwindow. The remote function can call various utility functions that
operate on the current boundary or subwindow to produce error output and density
statistics.
The density() function can move the delta_window subwindow in
• Fixed increments that are specified by the delta_x and delta_y arguments.
• Smartsteps that are multiples of the delta_x and delta_y values, for faster processing.
To move the subwindow in smartsteps, add the density utility function
den_generate_next_step() at the end of the remote function.
Syntax
density(
window_layer = polygon_layer,
layer_hash = {"string" => polygon_layer, ...},
window_function = function,
delta_window = {width = double, height = double},
//optional
delta_x = double, //optional
delta_y = double, //optional
resize_delta_xy = true | false, //optional
x_edge_process_amount = double, //optional
y_edge_process_amount = double, //optional
area_clip_delta_percent = double, //optional
statistics_files = {density_statistics_file_handle, ...},
//optional
statistics_file_modes = {OVERWRITE | APPEND, ...}, //optional
centered_square_size = double, //optional
boundary = CLIP | ALIGN | IGNORE |
REPLICATE_WINDOW | BACKUP //optional
output_type = DELTA_WINDOW | CLIPPED_DELTA_WINDOW |
CENTER | CLIPPED_CENTER, //optional
output_center_dimensions = {width = double, height = double},
//optional
delta_window_sizes = {{north = double, south = double,
east = double, west = double},
...}, //optional
process_delta_windows = OVERLAPPING | ALL, //optional
name = "layer_label", //optional
merge_errors = true | false, //optional
pydb_output = true | false //optional
);
Returns
polygon layer or error result
Arguments
window_layer
Required. Specifies the polygon layer containing one or more polygons that define the
boundaries where layers are processed for density calculations.
The chip_extent() and layer_extent() functions can be used to create a window
layer. Call these functions before the density() function.
❍ The chip_extent() function returns a layer containing a single rectangle equal to
the extents of the chip. Use this function to create a single full-chip check window.
See the chip_extent() function for more information.
❍ The layer_extent() function returns a layer containing a single rectangle equal to
the extents of the input layer. Use this function to create a single-layer check window.
See the layer_extent() function for more information.
layer_hash
Required. Specifies a hash of string to polygon layer that is processed for density
calculations. Data in the hash is accessible via the hash key within the remote window
function. When referencing data in hash from within the window function, only the portion
of the layer within the current delta_window subwindow or the current window layer
polygon is seen.
window_function
Required. Specifies the remote function that calculates the density. See the “Layout
Density Utility Functions” in Chapter 4 for more information about the utility functions you
can use to define a remote function.
delta_window
Optional. Specifies the subwindow stepped across each window layer polygon. The
density equations are evaluated within each subwindow. The default is the extents of
each window layer polygon.
delta_x
Optional. Specifies the delta_window subwindow step distance in the x-direction. The
default is the width option of the delta_window argument.
delta_y
Optional. Specifies the delta_window subwindow step distance in the y-direction. The
default is the height option of the delta_window argument.
resize_delta_xy
Optional. Specifies whether the delta_x and delta_y argument values are recalculated
if the delta_window subwindow stepping does not end flush with the right and top
borders of the current boundary. The default is false.
❍ true. Recalculates the delta_x and delta_y values based on the current window
layer polygon extents and the input delta_x and delta_y values so that the
delta_window subwindow ends flush with the right and top borders of the current
boundary. The subwindow is stepped across each window layer polygon using the
new values.
Note:
There could be a small fractional overlap of the boundary layer. If you require no
overlap, use this argument with the x_edge_process_amount and
y_edge_process_amount arguments set to 0.
x_edge_process_amount
Optional. If the delta_window subwindow overhangs the right edge of the boundary by
the specified value or more, specifies to shift the current subwindow left to make it flush
with the right edge of the current boundary.
y_edge_process_amount
Optional. If the delta_window subwindow overhangs the top edge of the boundary by
the specified value or more, specifies to shift the current subwindow down to make it
flush with the top edge of the current boundary.
area_clip_delta_percent
Optional. Ignores the current delta_window subwindow if the density ratio of the window
layer material inside the current subwindow is less than the specified value. By default,
the IC Validator tool ignores any subwindow with a window layer density of 0.
statistics_files
Optional. Specifies the handles of the files written to by den_window_statistics()
utility functions included in the specified remote window function. Do not specify the
same file more than one time. These files are defined using the
density_statistics_file() function.
statistics_file_modes
Optional. Specifies the action taken when the file already exists for each statistics file of
the density() function. If only one mode is specified, it is used for all files. The default
is OVERWRITE.
❍ OVERWRITE. Overwrites the previous statistics file. That is, the statistics file contains
only statistics from this function.
❍ APPEND. Appends the new data to the previous statistics file. That is, the statistics file
contains the statistics from previous density functions along with the new statistics
from this function.
centered_square_size
Optional. Specifies that squares centered on polygons inside the window layer are used
as the windows for density calculations. The default is 0.0.
❍ The value must be greater than or equal to 0.
❍ If the value is 0, the density() function does not output centered squares.
If the value is greater than 0, then the IC Validator tool performs the following steps:
1. For each polygon of the window layer, find the rectangular extent.
2. Find the center point of the rectangular extent, whose coordinates are (x,y).
3. Set
X1 = x - centered_square_size/2
Y1 = y - centered_square_size/2
X2 = x + centered_square_size/2
Y2 = y + centered_square_size/2
Note:
If the values are not on grid, they are rounded up to the next grid value.
4. Perform all normal density operations with X1, Y1, X2, Y2 defining the window layer.
For example,
density(
window_layer = metal1_extent,
layer_hash = { "layer1" => metal1 },
window_function = my_density_function,
centered_square_size = 15
);
boundary
Optional. Specifies how to process a delta_window subwindow that overlaps the
boundary of the extents of a window layer polygon. The default is CLIP.
❍ CLIP. Truncates the subwindow at the limits of the window layer.
if the x_edge_process_amount or y_edge_process_amount argument is not equal
to -1 when the boundary argument is CLIP, then
■ If the overhang is less than the x_edge_process_amount or
y_edge_process_amount value, a clip is performed.
❍ ALIGN. If a subwindow overlaps the right side or top edge of the window layer, shifts
the window left or down until it no longer overlaps the window layer. The density
calculation is performed after the window is shifted.
Note:
Both the x_edge_process_amount and y_edge_process_amount arguments
must be -1 when the boundary argument is ALIGN.
Figure 2-77 shows how a subwindow is aligned.
Figure 2-77 boundary = ALIGN Example
❍ IGNORE. If a subwindow overlaps the right or top edges of the window layer boundary,
ignores the subwindow and does not output data for that subwindow location.
Note:
Both x_edge_process_amount and y_edge_process_amount arguments must
be -1 when the boundary argument is IGNORE.
Figure 2-78 shows when the subwindow is ignored.
Figure 2-78 boundary = IGNORE Example
❍ BACKUP. Shifts the overlapping subwindow the same way the ALIGN option shifts it.
See ALIGN for more details.
output_type
Optional. Specifies the type of output generated. The default is DELTA_WINDOW.
❍ DELTA_WINDOW. Outputs the delta window subwindow saved by the
den_save_window() utility function.
output_center_dimensions
Optional. Specifies the dimensions of the rectangle output when the output_type
argument is CENTER.
Note:
An error is reported if only one of the two output_center_dimensions values is a
nonzero value.
An error is reported if output_center_dimensions values are specified and the
output_type argument is not CENTER.
delta_window_sizes
Optional. Specifies a list of sized delta_window subwindow values. Each group of
north, south, east, and west values represents one sized subwindow. The values can
be a mix of negative and positive values.
The north value is in the up direction relative to the top cell. The south value is in the
down direction relative to the top cell, and so forth for the east and west values. The
resulting oversized subwindow is rectangular.
❍ north. Sizes in the up direction relative to the top cell.
process_delta_windows
Optional. Controls the handling of delta_window subwindow processing within the
extents of a window layer polygon. The default is OVERLAPPING.
❍ OVERLAPPING. Specifies to process only subwindows that overlap the window layer
polygon.
❍ ALL. Specifies to process all subwindows that fall within the extent of the window layer
polygon.
When using the ALL option,
■ Do not set the output_type argument to CLIPPED_DELTA_WINDOW or
CLIPPED_CENTER.
In the following example, the remote function named den_func outputs subwindows for
densities less than 0.6. In the remote function, m1 is not clipped by windowLayer.
Figure 2-80 shows the results of the density() function for each of the
process_delta_windows argument settings.
result = density(windowLayer, {"layer1" => m1}, den_func,
delta_window = {15, 15},
process_delta_windows = ... );
OVERLAPPING ALL
subwindows
windowLayer
m1
result
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
merge_errors
Optional. Specifies to report errors as a single error or individual errors. The default is
false.
Note:
This argument applies only when the output of density() function goes to the
LAYOUT_ERRORS file.
❍ true. Merges overlapping and abutting errors, and reports each group of merged
errors as a single error. For each merged error group, minimum value, maximum
value, and average value for each error statistic are reported.
❍ false. Reports individual errors unmerged.
pydb_output
Optional. Enables a layer-producing density function to output error violations to the error
database (PYDB) to be viewed in VUE. The default is false.
❍ true. Layer-producing density function outputs both a polygon result and violations
to the error database (PYDB).
❍ false. Layer-producing density function outputs only a polygon result.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
metal1_extent = layer_extent(metal1);
E101 @= { @"ERR101";
density(window_layer = metal1_extent,
layer_hash = {"layer1" => metal1},
window_function = densityEQ_single_layer);
}
E108 @= { @"ERR108";
density(window_layer = metal1,
layer_hash = {"layer1" => cont, "layerW" => metal1},
window_function = densityEQ_L1_div_WL,
delta_window = {1, 1}
);
}
{
area1: double = den_polygon_area(layer1);
areaW: double = den_window_area();
ratio = area1/areaW;
if (ratio <= 0.4) {
den_save_window();
den_window_statistics(
error_names = {"area1","areaW","ratio"},
values = {area1, areaW, ratio}
);
}
}
sf = density_statistics_file("stats.txt");
sf_large = density_statistics_file("large_stats.txt");
density(window_layer = l1_extent,
window_function = my_window_func_1,
layer_hash = { "layer1" => l1 },
statistics_files = sf);
density(window_layer = l2_extent,
window_function = my_window_func_2,
layer_hash = { "layer1" => l2 },
statistics_files = {sf, sf_large},
statistics_file_modes = {APPEND,OVERWRITE});
See Also
gradient_density()
density_statistics_file()
The density_statistics_file() function defines a statistics file. This file is specified in
the statistics_files argument of the density functions, density() and
gradient_density().
Limitation:
The density_statistics_file() function cannot be called more than one time with
the same file argument. The result, however, can be used in more than one density
function.
Syntax
density_statistics_file(
file = "string"
);
Returns
density_statistics_file_handle
Arguments
file
Required. Specifies the density statistics file name. See the density() and
gradient_density() functions for more information.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
density()
gradient_density()
dev_dlink_library_close()
The dev_dlink_library_close() function closes the dynamic-link library. See the
Dynamic-Link Library Support chapter in the IC Validator User Guide for more information.
Syntax
dev_dlink_library_close(
dev_dlink_library_handle = dev_dlink_library_handle
);
Returns
void
Arguments
dev_dlink_library_handle
Required. Specifies the handle of the dynamic-link library.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
dev_dlink_library_open()
dev_dlink_library_open()
The dev_dlink_library_open() function opens the dynamic-link library. It must be
opened before being used by the dev_dlink() function. See the Dynamic-Link Library
Support chapter in the IC Validator User Guide for more information.
Syntax
dev_dlink_library_open(
library_name = "string"
);
Returns
dev_dlink_library_handle
Arguments
library_name
Required. Specifies the dynamic-link library.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
dev_dlink_library_close()
Syntax
device_connected_to(
device_db = device_database,
text = {"string", ...},
devices = {{device_name = "string",
device_layers = {polygon_layer, ...},
device_type = NMOS | PMOS | NPN | PNP | PN |
NP | RESISTOR | CAPACITOR |
INDUCTOR | GENERIC | ALL},
...}, //optional
texted_at = TOP_CELL | TOP_OF_NET | ANY_LEVEL |
HIGHEST_TEXT, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL //optional
);
device_not_connected_to(
device_db = device_database,
text = {"string", ...},
devices = {{device_name = "string",
device_layers = {polygon_layer, ...},
device_type = NMOS | PMOS | NPN | PNP | PN |
NP | RESISTOR | CAPACITOR |
INDUCTOR | GENERIC | ALL},
...}, //optional
texted_at = TOP_CELL | TOP_OF_NET | ANY_LEVEL |
HIGHEST_TEXT, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL //optional
);
Returns
polygon layer or error result
Arguments
device_db
Required. Generates the layout netlist from the specified device database. The
extract_devices() function generates this database.
text
Required. Specifies the text used for selection of device body polygons from devices that
are connected to nets with the specified text. String matching using metacharacters is
allowed. See “String Matching” on page A-11 for more information.
devices
Optional. Lists the devices and terminal layers that determine if a net is connected to a
device. The default is all devices.
❍ device_name. Required. Specifies the device name, which must be defined in the
device database specified in the device_db argument.
❍ device_layers. Optional. Specifies the layers that must be defined for a particular
device. When the layer list is empty, all terminal layers are used.
❍ device_type. Optional. Specifies the device type. The default is ALL.
texted_at
Optional. Specifies where to look for the text specified with the text argument. The
default is ANY_LEVEL.
❍ TOP_CELL. Looks only in the top cell of each net for the specified text.
Note:
With this setting, the device_not_connected_to() function is not the
complement of the device_connected_to() function; both functions select only
polygons from top cell nets.
❍ TOP_OF_NET. Looks at all cells on the highest hierarchical level on the net for the
specified text. The tool selects the net whose text on the highest level matches the
specified text; the net does not have higher hierarchical levels. This option is not
available when the processing_mode argument is CELL_LEVEL.
❍ ANY_LEVEL. Looks at all cells on the net for the specified text.
❍ HIGHEST_TEXT. Looks for the highest hierarchical level on the net for the specified
text. The tool selects the net whose highest level text matches the specified text even
if the net continues untexted higher up. This option is not available when the
processing_mode argument is CELL_LEVEL.
Note:
Multiple texts are classified as HIGHEST_TEXT for nets that are untexted higher up
and have hierarchically connected sibling branches with different net names.
See Figure 3-27 in the net_select() function for an example of the HIGHEST_TEXT
option.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_ERC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
device_connected_to(
device_db = device_db, /* from previous device database */
text = {"VDD", "VSS"},
devices = {{"p"}, {"n", {nsd}}},
texted_at = TOP_OF_NET,
processing_mode = HIERARCHICAL
);
device_not_connected_to(
device_db = device_db, /* from previous device database */
text = {"*"},
devices = {{"pfet", {psd}}, {"nfet",{nsd}}},
texted_at = ANY_LEVEL,
processing_mode = HIERARCHICAL
);
See Also
connect()
device_net_count()
net_texted_with() and net_not_texted_with()
text_net()
texted_with() and not_texted_with()
device_net_count()
The device_net_count() function selects polygons from devices that have the specified
net count. The selected polygons are merged.
Syntax
device_net_count(
device_db = device_database,
count = integer, //optional
devices = {{device_name = "string",
device_layers = {polygon_layer, ...},
device_type = NMOS | PMOS | NPN | PNP | PN |
NP | RESISTOR | CAPACITOR |
INDUCTOR | GENERIC | ALL},
...}, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL //optional
);
Returns
polygon layer or error result
Arguments
device_db
Required. Generates the layout netlist from the specified device database. The
extract_devices() function generates this database.
count
Optional. Specifies the number of unique nets to which a device must be connected for
the device to be selected. This value must be positive. See “Constraints” on page A-4 for
more information. The default is 1.
❍ If count = 0, a device is selected if there are no nets connected to the device. (It is
a floating device.)
❍ If count = 1, a device is selected if there is only one net connected to the device. (It
is a one-connection device.)
devices
Optional. Lists the devices and terminal layers that determine if a net is connected to a
device. The default is all devices.
❍ device_name. Required. Specifies the device name, which must be defined in the
device database specified in the device_db argument.
❍ device_layers. Optional. Specifies the layers that must be defined for a particular
device. When the layer list is empty, all terminal layers are used.
❍ device_type. Optional. Specifies the device type. The default is ALL.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_ERC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
device_net_count(
device_db = device_d, /* from previous extract device function */
devices = {{"pfet", {pgate}}, {"nfet", {ngate}}},
count = >0
);
See Also
net_device_count()
dfm_features()
The dfm_features() function provides access to aggregate geometric data on multiple
layers of all types in the context of a specified window. One or more remote functions are
used to specify arithmetic conditions in terms of geometric characteristics and properties to
choose windows for output.
Syntax
dfm_features(
layer_ids = {"string" => geometry_layer, ...},
dfm_function = function,
aggregate_functions = {"string" => {
aggregate_function = function,
layer_id = "string",
op = MIN | MAX | SUM | PRODUCT //optional
}}, //optional
context = TOP | BY_CELL, //optional
boundary = {
type = {CHIP_EXTENT | BOX | INPUT_LAYERS_EXTENT |
POLYGON_EXTENTS}, //optional
box = {{left = double, bottom = double,
right = double, top = double}, ...}, //optional
layer = polygon_layer //optional
}, //optional
windows = {
delta_window = {width = double, height = double}, //optional
delta_x = double, //optional
delta_y = double, //optional
boundary = CLIP | BACKUP, //optional
output_type = DELTA_WINDOW | CENTER, //optional
output_center_dimensions = {width = double,
height = double}, //optional
}, //optional
cells = {
child_data = LEVEL_CHILD_DATA | FLATTEN_CHILD_DATA |
IGNORE_CHILD_DATA, //optional
merge = true | false, //optional
}, //optional
files = {ascii_file_handle, ...} //optional
);
Returns
polygon layer or error result
Arguments
layer_ids
Required. Specifies the hash of string to geometry layers. The strings are used by the
remote function to access composite characteristics of the given layer. The layers can be
of type error, polygon, or edge.
dfm_function
Required. Specifies the remote function that calculates the final value for the specified
window and reports the results. This function is executed once per window, after the
completion of any aggregate functions. For information about the utility functions you can
use to define a remote function, see “DFM Features Utility Functions” in Chapter 4.
Note:
The DFM features utility functions are exclusive to dfm_function.
aggregate_functions
Optional. An optional hash of string to structure that specifies the functions and
arguments to be used for calculating aggregate values for the window. These functions
are executed once per window, before the function specified by the dfm_function
argument. The results of these functions are passed to the dfm_function argument by
the dfm_aggregate() utility function, using the appropriate hash key. Use this hash
when the aggregate value of an expression is required.
Important:
This list of aggregate functions can cause performance degradation and should be
used only when necessary.
❍ aggregate_function. Required. Specifies a function with no arguments that returns
a double. This function defines the value that is calculated for each data item in the
window. In addition to the standard PXL library, the following utility functions are
defined in the context of this aggregate function:
■ dfm_area()
■ dfm_perimeter()
■ dfm_length()
■ dfm_projection_length()
■ dfm_distance()
■ dfm_get_double_property()
These utility functions are exclusive to this context.
❍ layer_id. Required. Specifies the string that identifies the layer from the layer_ids
list. are used by the aggregate function to access composite characteristics of the
layers. This string must appear in the layer_ids hash.
❍ op. Optional. Specifies the operation to be performed on the result of the aggregate
function to determine the result. Because aggregate functions do not provide access
to individual data, they are evaluated only in the context of the specified operation.
The default operation is SUM.
■ SUM
■ MIN
■ MAX
■ PRODUCT
context
Optional. Specifies an optional enumerator that identifies where the operation takes
place. The default is TOP.
❍ TOP. Operates in the context of the top cell. All hierarchical overlap is resolved. The
boundary can be defined in the boundary argument, and delta windows can be
defined in the windows argument.
❍ BY_CELL. Specifies that the extents of each cell is a boundary and cells are processed
individually. The processing is defined by the cells argument. Delta windows and
boundary control are not available.
Important:
Although efforts are made to maintain the most efficient hierarchy, the hierarchical
location of geometric data in derived layers is not guaranteed. Layer operations
can move data up or down the hierarchy to facilitate their implementation.
boundary
Optional. Defines the geometric extents of the operation when context = TOP.
❍ type. Optional. Specifies an enumerator that defines the type of boundary. The
default is CHIP_EXTENT.
■ CHIP_EXTENT. The extents of all layers in the assign section
windows
Optional. Defines the delta windows when context = TOP.
❍ delta_window. Optional. Defines the width and height of the delta window. Both
values must be positive. The default is {0,0}, which means delta windows are not
used.
❍ delta_x. Optional. Specifies the delta_window subwindow step distance in the
x-direction. The default is delta_window width value. Nonpositive values are
ignored.
❍ delta_y. Optional. Specifies the delta_window subwindow step distance in the
y-direction. The default is delta_window height value. Nonpositive values are
ignored.
❍ boundary. Optional. Specifies an enumerator the defines the behavior when a delta
window exceeds the boundary. The default is CLIP.
■ CLIP. Truncates the delta window at the boundary.
■ CENTER. Outputs the rectangle placed at the center of the subwindow. The
dimensions of the rectangle are specified by the output_center_dimensions
argument. The CENTER argument enables the storage of user-defined properties
on the derived output layer.
cells
Optional. Defines the processing when context = BY_CELL.
❍ child_data. Optional. Specifies what happens with the data in the placement of the
current cell. The default is LEVEL_CHILD_DATA.
■ LEVEL_CHILD_DATA. Includes hierarchically interacting data in the measurements
of the current cell.
■ FLATTEN_CHILD_DATA. Includes all child data in the measurements of the current
cell.
■ IGNORE_CHILD_DATA. ignores placements in the current cell.
files
Optional. Specifies the ASCII files that the dfm_fnote() utility function can write to. The
order of the files determines the index for accessing the files in the remote functions; the
first file listed has an index of 0 (zero).
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
You can use the dfm_features() function to find the sum of a value or the sum of an
expression.
Example 1
In the following example, the sum of a value is required:
u_score: function (void) returning void{
score = (dfm_count("lay2") > 0)
? (dfm_count("err1") > 0)
? exp(-(dfm_get_sum_double_property("err1", "prop1") /
dfm_sum_area("lay1")) * 0.47/1)
: 1
: 2 - ((dfm_count("lay2")==0) ? 0 : 1);
if ((score > 0.0) && (score <= 1)) {
note("score : " + score);
}
}
dfm_features(
{ "err1" => err1, "lay1" => lay1, "lay2" => lay2},
dfm_function = u_score);
Example 2
In the following example, the sum of an expression is required.
u_err: function (void) returning result : double{
result = (K*dfm_distance()) / (dfm_projection_length()**2);
}
dfm_features(
layer_ids = { "spacing_error" => spacing_error},
dfm_function = u_score,
aggregate_functions = {
donut_holes()
The donut_holes() function creates polygons that define the holes in any donut-shaped
data on the specified input layer.
Syntax
donut_holes(
layer1 = polygon_layer,
holes = ALL | INNER | EMPTY, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
area = doubleconstraint, //optional
name = "layer_label", //optional
outer_boundary_point_touch = OPEN_OUTER_BOUNDARY |
CLOSED_OUTER_BOUNDARY //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
holes
Optional. Specifies the types of holes that generate polygons. The default is ALL.
❍ ALL. Specifies that all holes generate polygons.
❍ INNER. Specifies that only holes which do not contain donuts generate polygons.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
area
Optional. Specifies that holes are checked for this area. The default is >0.0.
❍ When the holes argument is ALL, the area is checked for unmerged holes.
❍ When the holes argument is INNER or EMPTY, the area is checked for merged holes.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
outer_boundary_point_touch
Optional. Controls if an outer boundary point touch case is treated as hole or not. The
default is OPEN_OUTER_BOUNDARY.
❍ OPEN_OUTER_BOUNDARY. Does not treat an outer boundary point touch case as a hole.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In Figure 2-82 all holes from donut-shaped pieces of layerA are selected.
Result = donut_holes (layerA);
Result
In Figure 2-83 all holes from donut-shaped pieces of layerA that do not enclose any data of
layerA are selected.
Result = donut_holes (layerA, EMPTY);
Figure 2-83 Only Holes That Do Not Contain Donuts Generate Polygons
Output layerA
Result
In Figure 2-84 all holes from donut-shaped pieces of layerA that do not enclose any
donut-shaped pieces are selected.
Result = donut_holes (layerA, INNER);
Result
See Also
donuts() and not_donuts()
inside_hole() and not_inside_hole()
Syntax
donuts(
layer1 = polygon_layer,
count = integerconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_donuts(
layer1 = polygon_layer,
count = integerconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
count
Optional. Specifies the number of holes a polygon must contain for it to be selected. The
default is >0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 2-86 shows examples of polygons with and without holes.
Figure 2-86 Examples of Polygons With and Without Holes
Donuts
Not Donuts
See Also
donut_holes()
drc_features()
The drc_features() function provides access to geometric data on multiple layers based
on the interaction of the secondary layer with the primary layer. A remote function is used to
specify arithmetic conditions in terms of geometric characteristics and to choose polygons
for output.
Syntax
drc_features(
primary_layer = geometry_layer,
secondary_layers = {"string" => geometry_layer, ...},
drc_function = function,
output_from_layer = polygon_layer,
include_touch = NONE | EDGE | ALL, //optional
error_shape = EDGES | REGION, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
files = {ascii_file_handle, ...} //optional
clipping = true | false, //optional
connect_sequence = connect_database, //optional
combine_errors = NONE | OPPOSING //optional
);
Returns
polygon layer or error result
Arguments
primary_layer
Required. Specifies the layer that is the basis for the collection of geometric
characteristics.
secondary_layers
Required. Specifies the hash of string to geometry layers. The strings are used by the
remote function to access composite characteristics of the given secondary layer. The
secondary layers can be of type error, polygon, or edge.
drc_function
Required. Specifies the remote function that is called one time for each geometry in the
primary layer. The function has access to the characteristics of the secondary layers that
interact with the given geometry. It is used to select the output based on those
characteristics. See “DRC Features Utility Functions” in Chapter 4 for more information
about the utility functions you can use to define a remote function.
output_from_layer
Required. Specifies the layer from which polygons are selected.
include_touch
Optional. Specifies the outside touches that are included in the interaction check
between the primary layer and the secondary layers. The default is EDGE.
❍ NONE. Includes neither point touch nor line touch.
error_shape
Optional. Specifies how errors are treated in the interaction check between the primary
layer and the secondary layer. The default is EDGES.
❍ EDGES. Recognizes interaction only with the violating edges. The errors are treated as
pairs of edges, and if either edge meets the interaction specification, the error is
selected.
❍ REGION. Recognizes interaction with any part of the violating region. The errors are
treated as polygons, as created when the output_type argument is REGION in the
spacing check functions that produce polygons.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
files
Optional. Specifies the ASCII files that the df_fnote() function can write to. The files
are defined using the fopen() function. The order of the files determines the index for
accessing the files in the remote functions; the first file listed has an index of 0 (zero).
clipping
Optional. Specifies whether secondary layer polygons are clipped by the primary
polygon layer. The default is false.
❍ false. Specifies that, for a given primary layer polygon, the full secondary layer
polygons that interact with it are considered by the drc_function argument.
❍ true. Clips secondary layer polygons by ANDing secondary layer polygons with
primary layer polygons they interact with. The remote functions used in the
drc_function argument apply to the clipped secondary layer polygons. The primary
layer polygons are unchanged. When output_from_layer is the secondary layer,
the drc_features() function outputs the clipped secondary layer polygons.
Note:
When clipping = true, all layers must be polygon layers. Otherwise, the
IC Validator tool returns an error.
connect_sequence
Optional. Specifies the connect database for these net-based utility functions:
df_nets_in_sync(), df_get_*_net_double_property(),
df_get_edge_net_list_of_double_property(), and
df_get_edge_net_string_property().
This database must be a valid connect database, specifically derived from the
property_to_net() function, when any net-based utilities appear in the drc_function
argument.
Note:
Clipping must be false when using net-based utilities.
combine_errors
Optional. Specifies how to combine unique errors that are considered duplicate or
redundant. The default is NONE.
❍ NONE. Specifies that error layers are not combined.
❍ OPPOSING. Specifies that error layers which are opposing in direction are combined.
See Figure 2-88 for an example of the OPPOSING option.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
You can use the drc_features() function to check for long edges that jog. In the example
shown in Figure 2-87, the rule is: For a parallel run length > 1.5, including jogs, the external
spacing must be 0.5.
Figure 2-87 Example of Checking for Long Edges That Jog
data
errors
See Also
drc_features_edge()
drc_features_error()
drc_features_marker()
drc_features_edge()
The drc_features_edge() function provides access to geometric data on multiple layers
based on the interaction of the secondary layer with the primary layer. A remote function is
used to specify arithmetic conditions in terms of geometric characteristics and to choose
edges for output.
Syntax
drc_features_edge(
primary_layer = geometry_layer,
secondary_layers = {"string" => geometry_layer, ...},
drc_function = function,
output_from_layer = edge_layer,
include_touch = NONE | EDGE | ALL, //optional
error_shape = EDGES | REGION, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
files = {ascii_file_handle, ...}, //optional
connect_sequence = connect_database, //optional
combine_errors = NONE | OPPOSING //optional
);
Returns
edge layer or error result
Arguments
primary_layer
Required. Specifies the layer that is the basis for the collection of geometric
characteristics.
secondary_layers
Required. Specifies the hash of string to geometry layers. The strings are used by the
remote function to access composite characteristics of the given secondary layer. The
secondary layers can be of type error, polygon, or edge.
drc_function
Required. Specifies the remote function that is called one time for each geometry in the
primary layer. The function has access to the characteristics of the secondary layers that
interact with the given geometry. It is used to select the output based on those
characteristics. See “DRC Features Utility Functions” in Chapter 4 for more information
about the utility functions you can use to define a remote function.
output_from_layer
Required. Specifies the layer from which edges are selected.
include_touch
Optional. Specifies the outside touches that are included in the interaction check
between the primary layer and the secondary layers. The default is EDGE.
❍ NONE. Includes neither point touch nor line touch.
error_shape
Optional. Specifies how errors are treated in the interaction check between the primary
layer and the secondary layer. The default is EDGES.
❍ EDGES. Recognizes interaction only with the violating edges. The errors are treated as
pairs of edges, and if either edge meets the interaction specification, the error is
selected.
❍ REGION. Recognizes interaction with any part of the violating region. The errors are
treated as polygons, as created when the output_type argument is REGION in the
spacing check functions that produce polygons.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
files
Optional. Specifies the ASCII files that the df_fnote() function can write to. The files
are defined using the fopen() function. The order of the files determines the index for
accessing the files in the remote functions; the first file listed has an index of 0 (zero).
connect_sequence
Optional. Specifies the connect database for these net-based utility functions:
df_nets_in_sync(), df_get_*_net_double_property(),
df_get_edge_net_list_of_double_property(), and
df_get_edge_net_string_property().
This database must be a valid connect database, specifically derived from the
property_to_net() function, when any net-based utilities appear in the drc_function
argument.
Note:
Clipping must be false when using net-based utilities.
combine_errors
Optional. Specifies how to combine unique errors that are considered duplicate or
redundant. The default is NONE.
❍ NONE. Specifies that error layers are not combined.
❍ OPPOSING. Specifies that error layers which are opposing in direction are combined.
See Figure 2-88 for an example of the OPPOSING option.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Example section of the drc_features() function for more information.
See Also
drc_features()
drc_features_error()
drc_features_marker()
drc_features_error()
The drc_features_error() function provides access to geometric data on multiple layers
based on the interaction of the secondary layer with the primary layer. A remote function is
used to specify arithmetic conditions in terms of geometric characteristics and to choose
errors for output.
Syntax
drc_features_error(
primary_layer = geometry_layer,
secondary_layers = {"string" => geometry_layer, ...},
drc_function = function,
output_from_layer = error_layer,
include_touch = NONE | EDGE | ALL, //optional
error_shape = EDGES | REGION, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
files = {ascii_file_handle, ...}, //optional
corner_pruning = NONE | ORTHOGONAL, //optional
contributing_layers = {layer1 = polygon_layer,
layer2 = polygon_layer}, //optional
connect_sequence = connect_database, //optional
combine_errors = NONE | OPPOSING //optional
);
Returns
error layer or error result
Arguments
primary_layer
Required. Specifies the layer that is the basis for the collection of geometric
characteristics.
secondary_layers
Required. Specifies the hash of string to geometry layers. The strings are used by the
remote function to access composite characteristics of the given secondary layer. The
secondary layers can be of type error, polygon, or edge.
drc_function
Required. Specifies the remote function that is called one time for each geometry in the
primary layer. The function has access to the characteristics of the secondary layers that
interact with the given geometry. It is used to select the output based on those
characteristics. See “DRC Features Utility Functions” in Chapter 4 for more information
about the utility functions you can use to define a remote function.
output_from_layer
Required. Specifies the layer from which errors are selected.
include_touch
Optional. Specifies the outside touches that are included in the interaction check
between the primary layer and the secondary layers. The default is EDGE.
❍ NONE. Includes neither point touch nor line touch.
error_shape
Optional. Specifies how errors are treated in the interaction check between the primary
layer and the secondary layer. The default is EDGES.
❍ EDGES. Recognizes interaction only with the violating edges. The errors are treated as
pairs of edges, and if either edge meets the interaction specification, the error is
selected.
❍ REGION. Recognizes interaction with any part of the violating region. The errors are
treated as polygons, as created when the output_type argument is REGION in the
spacing check functions that produce polygons.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
files
Optional. Specifies the ASCII files that the df_fnote() function can write to. The files
are defined using the fopen() function. The order of the files determines the index for
accessing the files in the remote functions; the first file listed has an index of 0 (zero).
corner_pruning
Optional. Controls whether the IC Validator tool prunes the primary error layer by
removing one of the errors for each pair of corner-to-corner errors formed by orthogonal
corners. The default is NONE.
❍ NONE. The primary error layer is not pruned.
contributing_layers
Optional. Identifies the secondary layers that contribute to the primary error layer. Only
those polygons that might cause a primary error are identified. This argument is valid
only when the
❍ primary layer is an error layer.
❍ primary layer is derived from the enclose_error(), external2_error(),
internal2_error(), or external_corner2_error() function.
connect_sequence
Optional. Specifies the connect database for these net-based utility functions:
df_nets_in_sync(), df_get_*_net_double_property(),
df_get_edge_net_list_of_double_property(), and
df_get_edge_net_string_property().
This database must be a valid connect database, specifically derived from the
property_to_net() function, when any net-based utilities appear in the drc_function
argument.
Note:
Clipping must be false when using net-based utilities.
combine_errors
Optional. Specifies how to combine unique errors that are considered duplicate or
redundant. The default is NONE.
❍ NONE. Specifies that error layers are not combined.
❍ OPPOSING. Specifies that error layers which are opposing in direction are combined.
In Figure 2-88, the external2_error() function outputs two redundant errors: one
error projects from the red edge to the green polygon and the other error projects
from the green polygon to the red edge. For this case, the projection direction of the
two errors are opposing and the errors share violation edges from different layers.
When this option is set, the drc_features() function combines the errors before
cluster formation. This option changes the drc_features() function from a selector
to a creator.
external2_error(red, green, distance < 0.08, extension=NONE,
look_thru=COINCIDENT);
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Example section of the drc_features() function for more information.
See Also
drc_features()
drc_features_edge()
drc_features_marker()
drc_features_marker()
The drc_features_marker() function provides access to geometric data on multiple
layers based on the interaction of the secondary layer with the primary layer. A remote
function is used to specify arithmetic conditions in terms of geometric characteristics and to
choose markers for output.
Syntax
drc_features_marker(
primary_layer = geometry_layer,
secondary_layers = {"string" => geometry_layer, ...},
drc_function = function,
output_from_layer = marker_layer,
include_touch = NONE | EDGE | ALL, //optional
error_shape = EDGES | REGION, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
files = {ascii_file_handle, ...} //optional
);
Returns
marker layer or error result
Arguments
primary_layer
Required. Specifies the input layer, which is the basis for the collection of geometric
characteristics.
secondary_layers
Required. Specifies the hash of string to geometry layers. The strings are used by the
remote function to access composite characteristics of the given secondary layer. The
secondary layers can be of type error, polygon, edge, or marker.
drc_function
Required. Specifies the remote function that is called one time for each geometry in the
primary layer. The function has access to the characteristics of the secondary layers that
interact with the given geometry. It is used to select the output based on those
characteristics. See “DRC Features Utility Functions” in Chapter 4 for more information
about the utility functions you can use to define a remote function.
output_from_layer
Required. Specifies the layer from which markers are selected.
include_touch
Optional. Specifies the outside touches that are included in the interaction check
between the primary layer and the secondary layers. The default is EDGE.
❍ NONE. Includes neither point touch nor line touch.
error_shape
Optional. Specifies how errors are treated in the interaction check between the primary
layer and the secondary layer. The default is EDGES.
❍ EDGES. Recognizes interaction only with the violating edges. The errors are treated as
pairs of edges, and if either edge meets the interaction specification, the error is
selected.
❍ REGION. Recognizes interaction with any part of the violating region. The errors are
treated as polygons, as created when the output_type argument is REGION in the
spacing check functions that produce polygons.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. This name is used only for log files; runset variables are not
changed. The default is the name of the layer being created.
files
Optional. Specifies the ASCII files that the df_fnote() function can write to. The files
are defined using the fopen() function. The order of the files determines the index for
accessing the files in the remote functions; the first file listed has an index of 0 (zero).
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Example section of the drc_features() function for more information.
See Also
drc_features()
drc_features_edge()
drc_features_error()
edge_extents()
The edge_extents() function creates rectangles from the extents of the layer1 edges.
The rectangles are merged in the result.
Note:
The extents polygon is generated using 45-degree edges rather than orthogonal edges
if the orthogonal extents would have 0 area.
Syntax
edge_extents(
layer1 = edge_layer,
corners = CONNECT | IGNORE, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge layer.
corners
Optional. Specifies how corners are processed. The default is IGNORE.
Note:
A corner is a point where the start of exactly one edge is coincident with the end of
exactly one edge, and the edges are not collinear.
❍ CONNECT. Connects the edges at corners and uses their total extents box.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
/* create boxes for nonorthogonal gate edges */
boxes = edge_extents (
layer1 = not_angle_edge (
layer1 = gate_edges,angles = {0,90}));
See Also
layer_extent()
polygons()
edge_features_edge()
The edge_features_edge() function creates an edge layer from user-defined geometries
based on the characteristics of the input layer edges. Edges are defined as a pair of
xy coordinates. The two points are ordered with the active area on the right. The created
edges are merged; redundant data points are removed.
Syntax
edge_features_edge(
layer1 = edge_layer,
edge_function = function,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge layer.
edge_function
Required. Specifies the remote function for edge processing and output. This function is
called one time for each individual layer1 edge. See “Edge Features Edge Utility
Functions” in Chapter 4 for more information about the utility functions you can use to
define a function.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes edges only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes edges within the context of the lowest cell that contains
the complete hierarchical edge.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
This example selects all horizontal and vertical edges from an edge layer, and extends the
edges by their length at both ends.
euf : function (void) returning void {
ce = efe_get_current_edge();
x0 = efe_edge_coordinate_x(ce, 0);
y0 = efe_edge_coordinate_y(ce, 0);
x1 = efe_edge_coordinate_x(ce, 1);
y1 = efe_edge_coordinate_y(ce, 1);
new_edge = false;
if (double_to_integer_coordinate(y0) == double_to_integer_coordinate(y1)) {
new_edge = true;
if (dblgt(x1, x0)) {
l = x1 - x0;
x0 = x0 - l;
x1 = x1 + l;
}
else {
l = x0 - x1;
x0 = x0 + l;
x1 = x1 - l;
}
}
else if (double_to_integer_coordinate(x0) == double_to_integer_coordinate(x1)) {
new_edge = true;
if (dblgt(y1, y0)) {
l = y1 - y0;
y0 = y0 - l;
y1 = y1 + l;
}
else {
l = y0 - y1;
y0 = y0 + l;
y1 = y1 - l;
}
}
if (new_edge) {
ne = efe_new_edge();
efe_set_edge_coordinate(ne, x0, y0, 0);
efe_set_edge_coordinate(ne, x1, y1, 1);
efe_save_edge(ne);
}
}
t1 = edge_features_edge(e1, euf);
See Also
angle_edge() and not_angle_edge()
delta_edge() and not_delta_edge()
length_edge() and not_length_edge()
polygon_features()
edge_grow()
The edge_grow() function creates polygons from the input layer that are oversized in the
specified directions by the specified distances. If the north, south, east, and west
arguments are all 0 (zero) then the output is an empty layer.
As shown in Figure 2-89, the direction of each edge is classified according to its outside
faces. Each edge is identified to have one or two directions. When you specify only one
direction matching the edge direction, the resulting polygon is a rectangle. When you specify
two directions matching the edge directions, the resulting polygon is a rectangle if the two
values are the same; otherwise, the resulting polygon is a parallelogram. All values must
be 0 (zero).
Figure 2-89 Edge Directions
N NE E SE S SW W NW
Syntax
edge_grow(
layer1 = data_layer,
north = double, //optional
south = double, //optional
east = double, //optional
west = double, //optional
corner_extension = INTERSECTION | NONE, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
data layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
north
Optional. Specifies the oversize distance in the northern direction. The default is 0.
south
Optional. Specifies the oversize distance in the southern direction. The default is 0.
east
Optional. Specifies the oversize distance in the eastern direction. The default is 0.
west
Optional. Specifies the oversize distance in the western direction. The default is 0.
corner_extension
Optional. Specifies how corners are handled when the function causes the adjacent
edges to pull apart. This behavior does not apply to corners where the function causes
the edges to collide. The default is NONE.
❍ INTERSECTION. Forms a new corner at the intersection point of the sized adjacent
edges.
❍ NONE. Does not extend corners.
Note:
For edge layers, a corner is a point where the start of exactly one edge is coincident
with the end of exactly one edge, and the edges are not collinear.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Example
Figure 2-90 shows:
output_polygon = edge_grow(layer1 = blue_edge, east = 4);
inside outside 4
See Also
edge_shrink()
edge_size()
grow()
move()
shrink()
size()
size_inside()
size_outside()
edge_shrink()
The edge_shrink() function creates polygons from the input layer that are undersized in
the specified directions by the specified distances. If the north, south, east, and west
arguments are all 0 (zero) then the output is an empty layer.
See the edge_grow() function for information about how edges are classified.
Syntax
edge_shrink(
layer1 = data_layer,
north = double, //optional
south = double, //optional
east = double, //optional
west = double, //optional
corner_extension = INTERSECTION | NONE, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the data layer.
north
Optional. Specifies the undersize distance in the northern direction. The default is 0.
south
Optional. Specifies the undersize distance in the southern direction. The default is 0.
east
Optional. Specifies the undersize distance in the eastern direction. The default is 0.
west
Optional. Specifies the undersize distance in the western direction. The default is 0.
corner_extension
Optional. Specifies how corners are handled when the function causes the adjacent
edges to pull apart. This behavior does not apply to corners where the function causes
the edges to collide. The default is NONE.
❍ INTERSECTION. Forms a new corner at the intersection point of the sized adjacent
edges.
❍ NONE. Does not extend corners.
Note:
For edge layers, a corner is a point where the start of exactly one edge is coincident
with the end of exactly one edge, and the edges are not collinear.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
For this example,
output_polygon = edge_shrink(layer1=edge,north=3, east=1)
P2
P1'
P2' 1
edge
output_polygon
extension boundary
edge
output_polygon
See Also
edge_grow()
edge_size()
grow()
move()
shrink()
size()
size_inside()
size_outside()
edge_size()
The edge_size() function creates rectangles from edges by expanding the edges inward
and outward. If there is neither inward or outward expansion (that is, both values are 0), the
output layer is empty.
Syntax
edge_size(
layer1 = data_layer,
inside = double, //optional
outside = double, //optional
corner_extension = INTERSECTION | NONE, //optional
clip_acute = BISECTOR | ORTHOGONAL | OCTAGONAL | NONE,
//optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
inside_by_factor = double, //optional
outside_by_factor = double, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
inside
Optional. Specifies the absolute distance that the edge is expanded toward the inside of
the edge. The distance must be a nonnegative value, and a value of 0 specifies no
expansion. The default is 0.
Note:
For lines (an edge that has no direction), edge expansion is meaningful only if both
inward and outward expansion are specified with the same value. The outward
expansion value overwrites the inward expansion value. For example, there is no
edge expansion if the inward expansion value is positive and the outward expansion
value is 0.
outside
Optional. Specifies the absolute distance that the edge is expanded toward the outside
of the edge. The distance must be a nonnegative value, and a value of 0 specifies no
expansion. The default is 0.
corner_extension
Optional. Specifies how corners are handled when the function causes the adjacent
edges to pull apart. This behavior does not apply to corners where the function causes
the edges to collide. The default is NONE.
❍ INTERSECTION. Forms a new corner at the intersection point of the sized adjacent
edges.
❍ NONE. Does not extend corners.
Note:
For edge layers, a corner is a point where the start of exactly one edge is coincident
with the end of exactly one edge, and the edges are not collinear.
clip_acute
Optional. When the corner_extension argument is INTERSECTION, this argument
specifies the type of clipping that occurs when an acute interior angle is oversized, or an
acute exterior angle is undersized. The default is NONE.
❍ BISECTOR. Clips acute angles with an edge perpendicular to the angle bisector at
(sqrt(2) x distance) from the original corner.
❍ ORTHOGONAL. When one edge is orthogonal, clips the angle perpendicular to that
edge at the specified distance from the original corner. Otherwise, clips the angle with
an edge perpendicular to the angle bisector at the specified distance away from the
original corner.
❍ OCTAGONAL. Clips acute angles with two edges at the specified distance from the
original corner, perpendicular to each of the edges forming the corner.
❍ NONE. Does not clip acute angles.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
inside_by_factor
Optional. Specifies the factor of the edge length by which an edge is expanded toward
the inside. The expansion value is calculated for each edge. The inside_by_factor
value must be positive. The default is 0.0; that is, no expansion.
Note:
Both inside_by_factor and inside arguments cannot be nonzero values.
outside_by_factor
Optional. Specifies the factor of the edge length by which an edge is expanded toward
the outside. The expansion value is calculated for each edge. The outside_by_factor
value must be positive. The default is 0.0; that is, no expansion.
Note:
Both the outside_by_factor and outside arguments cannot be nonzero values.
When the value of the outside_by_factor argument is nonzero, the
corner_extension argument must be NONE.
The minimum expansion value is one working resolution unit. See the
working_resolution_factor argument of the resolution_options() function for
more information.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 2-94 and Figure 2-95 show the edge_size() function sizing a closed edge chain.
Figure 2-94 shows using the corner_extension argument set to the default, NONE.
0.25 0.5
0.25 0.5
Figure 2-96 shows using the inside_by_factor argument. The blue edge is sized outward
by a value of 2 and is sized inward by 10 because the inside_by_factor argument equals
1.0 and the length of the edge is 10.
output = edge_size (layer1 = blue_edge, inside_by_factor = 1.0,
outside = 2.0);
See Also
edge_grow()
edge_shrink()
edge_size_by_property()
extend_edge()
size()
size_inside()
size_outside()
edge_size_by_property()
The edge_size_by_property() function creates rectangles from edges by expanding
edges inward and outward, extending edges, and shifting edges. Edges are processed
one-by-one with different values. The operations of this function are edge-based; therefore
polygons and violations are converted to edges before manipulations.
Syntax
edge_size_by_property(
layer1 = geometry_layer,
inside_property = "string", //optional
outside_property = "string", //optional
extend_property = "string", //optional
shift_property = "string", //optional
inside_value = double, //optional
outside_value = double, //optional
extend_value = double, //optional
shift_value = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the layer, which can be an error, edge, or polygon layer. The
properties of the input data are attached from preceding functions.
If data of this layer is not an edge, the data is converted into edges. See the Description
section.
inside_property
Optional. Specifies a property with a distance that the edge is expanded toward the
inside of the edge. The distance must be nonnegative, and a value of 0 or negative
specifies no expansion. If input data does not have this property, then the distance is 0.0.
outside_property
Optional. Specifies a property with a distance that the edge is expanded toward the
outside of the edge. The distance must be nonnegative, and a value of 0 or negative
specifies no expansion. If input data does not have this property, then the distance is 0.0.
extend_property
Optional. Specifies a property with a distance that the edge is extended in both edge end
directions. The distance can be a positive or negative value, and a value of 0 specifies
no extension. A positive value means extend the edge in both end directions. A negative
value means to shrink the edge in both end directions. If input data does not have this
property, then the distance is 0.0.
shift_property
Optional. Specifies a property with a distance that the edge is shifted in the direction of
edge sizing. The value of 0 specifies no shift. The distance must be nonnegative, and a
value of 0 or negative specifies no shift. If input data does not have this property, then the
distance is 0.0
inside_value
Optional. Specifies a constant distance that the edge is expanded toward the inside of
the edge. The distance must be nonnegative, and a value of 0 or negative specifies no
expansion. The default is 0.0.
outside_value
Optional. Specifies a constant distance that the edge is expanded toward the outside of
the edge. The distance must be nonnegative, and a value of 0 or negative specifies no
expansion. The default is 0.0.
extend_value
Optional. Specifies a constant distance that the edge is extended in both edge end
directions. The distance can be a positive or negative value, and a value of 0 specifies
no extension. A positive value means extend in both edge end directions. A negative
value means shrink in both edge end directions. The default is 0.0.
shift_value
Optional. Specifies a constant distance that the edge is shifted in the direction of edge
sizing. A value of 0 specifies no shift. The distance must be nonnegative, and a value of 0
or negative specifies no shift. The default is 0.0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Description
In the edge_size_by_property() function,
• All input, including paths and polygons, is converted to a group of edges, and then, each
edge is processed separately.
• The operations are edge-based; therefore polygons and violations are converted to
edges before manipulations.
• The inside_property and inside_value arguments cannot be used together.
• The outside_property and outside_value arguments cannot be used together.
• The extend_property and extend_value arguments cannot be used together.
• The shift_property and shift_value arguments cannot be used together.
• At least one inward edge expansion and outward edge expansion is used. That is,
extension and shift cannot be used standalone, without edge expansions.
• An edge can be sized only in one direction if a shift option is used. Either an inside or an
outside option must be specified, but not both at the same time.
For lines (an edge that has no direction), edge expansion is meaningful only if both
inward and outward expansion are specified with the same value. The outward
expansion value overwrites the inward expansion value. For example, there is no edge
expansion if the inward expansion value is positive and the outward expansion value is
0. Shift operations are meaningless.
• If the precision of a value is larger than the precision of the internal resolution, then the
distance is rounded.
• Edges with a length of 0 (that is, a point) are ignored.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Examples
0.25 0.5
Figure (b):
output = edge_size_by_property(input, outside_value = 0.003,
extend_value = -0.002,
shift_value = 0.001);
Figure (c):
output = edge_size_by_property(input, inside_value = 0.003,
extend_value = -0.002);
input output
Cyan_p = drc_features_error (
primary_layer = Cyan,
secondary_layers = {"prop" => Cyan},
drc_function = attach_prop,
output_from_layer = Cyan
);
input output
See Also
edge_size()
extend_edge()
move()
move_edge()
edges()
The edges() function creates edges in the top cell using specified coordinates. The function
can generate multiple edges. Intersecting edges are merged.
Syntax
edges(
coordinates = {{{x = double, y = double}, ...}, ...},
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
coordinates
Required. Lists xy coordinate pairs. These coordinates are scaled by the
magnification_factor argument of the library() function. Each list must specify at
least two coordinates.
Note:
Edges with zero length are ignored.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
e1 = edges({
{{0,0}, {2.5,0}}, // a horizontal line
{{0,5}, {0,1.5}, {1.5, 1.5}}, // an L shape
{{5,5}, {5,5}} // ignored
});
See Also
polygons()
edtext_file()
The edtext_file() function defines an Edtext file handle. This handle is used by the
text_layer_items argument of the text_net() function.
Limitation:
The edtext_file() function cannot be called more than one time with the same file
argument. The result, however, can be used more than one time.
Syntax
edtext_file(
file = "string"
);
Returns
edtext_file_handle
Arguments
file
Required. Specifies the Edtext output file name. See the text_net() function for more
information.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
text_net()
eerc_analyze_netlist()
The eerc_analyze_netlist() function executes an EERC Python remote function for
netlist processing. Use this function to accomplish either or both of the following operations:
• Preprocess an input netlist and save the resulting netlist for additional processing in
another eerc_analyze_netlist() remote block.
Preprocessing often includes setting useful tags, possibly propagating them throughout
the netlist, and can also include saving netlist attributes. This type of preprocessing is
useful when multiple rules can take advantage of these operations. You can also use
preprocessing to select a section of circuitry and copy it into a holding cell for further
processing. The resulting netlist has only the holding cell, which accelerates further
processing of this circuitry.
• Perform netlist processing to generate shapes associated with certain netlist objects.
You can use netlist processing to select circuitry of interest. You can save the associated
nets and devices to the results database, from which you can generate the shapes
associated with these netlist objects for further processing in the geometry engine. See
the EERC create layer functions (eerc_create_device_layer(),
eerc_create_device_list_layer(), and eerc_create_net_layer()).
Syntax
eerc_analyze_netlist(
module_file = "string",
function_expression = "string",
input_netlist_db = eerc_netlist_database,
violation_definitions = {{"string" => "string"}, ...}, //optional
execution_dependencies = {
{netlist_db = eerc_netlist_database,
results_db = eerc_results_database},
...}, //optional
disable_pruning = true | false //optional
);
Returns
The output is a structure of databases or void:
eerc_analysis_s : newtype struct of {
netlist_db : eerc_netlist_database;
results_db : eerc_results_database;
violations : violation_table_h;
};
netlist_db
The netlist saved in the function_expression Python remote block function by the
utility command ndb_save_netlist(). This netlist can be used in any function that
takes an eerc_netlist_database as input, such as another
eerc_analyze_netlist() function.
results_db
The database that holds netlist objects (nets or devices) saved in the
function_expression Python remote block function. This database is used in the
EERC create layer functions (eerc_create_device_layer(),
eerc_create_device_list_layer(), and eerc_create_net_layer()) to generate
the shapes associated with the saved netlist objects.
violations
Returns a hash of rule names to violation objects. You specify the rule names in the
violation_definitions argument. For more information about violations, see the
“Violation Block” and “Violation Variables” sections in the IC Validator User Guide.
Arguments
module_file
Required. Specifies the file name of the Python module that holds the definition of the
Python remote function. If the Python module file is not in the current working directory,
you can use the python_validate() function to resolve any search paths specified on
the IC Validator command line.
function_expression
Required. Specifies the Python function to be executed by eerc_analyze_netlist().
This string should include the Python syntax for calling the Python remote function,
including any arguments that should be passed to it.
input_netlist_db
Required. Specifies the netlist to be passed to the Python remote function for processing.
This netlist is returned by the eerc_setup() function or a previous
eerc_analyze_netlist() function.
violation_definitions
Optional. Specifies additional rules in a string-to-string hash of individual rule names to
their corresponding comments.
An eerc_analyze_netlist() function can check multiple rules in a single Python
remote function. If the eerc_analyze_netlist() function is enclosed in an IC Validator
error structure, this structure defines the default rule checked in the Python remote
function. The rule names specified by this argument should be used inside the Python
remote function when issuing errors.
execution_dependencies
Optional. Specifies any previous eerc_analyze_netlist() functions that should
complete before this function is executed. Use this argument when the IC Validator tool
is running in distributed processing mode if the Python remote function must perform file
I/O after previous eerc_analyze_netlist() functions.
This option is not necessary if the Python remote function does not perform any file I/O.
disable_pruning
Optional. Controls whether this eerc_analyze_netlist() function should be
automatically removed from the IC Validator execution tree if all of its rules have been
turned off by IC Validator selectable rules command-line options. The default is true.
The IC Validator tool can determine when a particular function in the runset can be
pruned from the execution tree by checking its dependencies. However, the tool cannot
determine if a Python remote function is doing any file I/O that should be executed even
if all of the rules associated with this eerc_analyze_netlist() function have been
turned off.
Setting this option to true protects this eerc_analyze_netlist() function from being
removed. If no critical file I/O is performed in the remote block, then setting this option to
false allows the IC Validator run to be more efficient.
Command Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the IC Validator Advanced license.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information.
Examples
1. Use a preprocessing step to assign supply tags and propagate them throughout the
netlist for use in later checks.
// The Python prep() function assigns tags for each supply and
// propagates those tags ... the resulting netlist is saved
// for further processing
prep_results = eerc_analyze_netlist("prep.py", "prep()",
orig_netlist_db);
2. Identify resistors used for ESD protection and get their body shapes for some spacing
checks.
// Identify resistors used for ESD protection and save them to the
// results database
esd_res_results = eerc_analyze_netlist("esd.py", "esd_res()",
layout_db);
// Obtain the results database handle from the returned data structure
esd_res_db = esd_res_results.results_db;
4. Report nets with a single connection and nets with no path to power or ground.
// Use a single Python remote block to check two rules:
// 1. Report nets with a single connection
// 2. Report nets with no path to power or ground
net_errs @= { @ "Net with Single Connection";
eerc_analyze_netlist(
module_file = "check.py",
function_expression = "check_nets()",
input_netlist_db = layout_db,
violation_definitions = {
"npg" => "Net with No Path to Power or Ground"
}
);
};
5. Preprocess the input layout extracted netlist to tag the supply nets and propagate those
tags. Then, save the supply nets so the metal1 layer associated with them can be
checked.
// Preprocess the netlist to assign tags to the supply nets
// Propagate the supply tags
// Save the supply nets so the metal1 associated with them can be ////
// generated
prep_results = eerc_analyze_netlist("prep.py", "prep()",
orig_netlist_db);
// Get the results database so that the supply metal1 can be generated
supply_results = prep_results.results_db;
6. Report any cell instances that do not have a direct connection to power or ground. Then,
check to determine whether the violations returned by the eerc_analyze_netlist()
function are empty.
// Preprocess the netlist to assign tags to the power and ground nets
// and propagate these tags.
cell_prep_results = eerc_analyze_netlist("cell_check_prep.py",
"cell_check_prep()",
layout_db);
if (violation_empty(eerc_violations["cpg"])) {
note("No cell instances were found in error!")
);
See Also
eerc_create_device_layer()
eerc_create_device_list_layer()
eerc_create_net_layer()
eerc_setup()
python_validate()
eerc_create_device_layer()
The eerc_create_device_layer() function returns the body shapes for all of the devices
in the results database returned by an eerc_analyze_netlist() function. This includes all
of the devices that you saved in the results database by using the save argument in the
ndb_find_device() or ndb_save_top_cell_device() utility function.
When you save the devices by using an ndb_find_device() utility function, the body
shapes appear in the hierarchy. When you save the devices by using an
ndb_save_top_cell_device() utility function, the body shapes are flat in the top cell.
Syntax
eerc_create_device_layer(
report_db = eerc_results_database,
device_db = device_database
);
Returns
polygon layer or error result
Arguments
report_db
Required. Specifies the results database returned by an eerc_analyze_netlist()
function. This database is an element in the data structure returned by the
eerc_analyze_netlist() function.
device_db
Required. Specifies the device database returned by the extract_devices() function.
Command Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the IC Validator Advanced license.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information.
Examples
In this example, the IC Validator tool identifies the NMOS devices in which the GATE pin is
tied to ground, and then generates the gate pin shapes for those devices.
def check_gates():
nldb = ndb_get_netlist()
ground_nets = ndb_get_ground_net_names(nldb)
ndb_find_net(nldb, name_check=ground_nets, add_tags=["ground"])
ndb_find_device(nldb, NMOS,
pins=[ndb_pin_check(["GATE"],tag_check="ground")],
save=True)
See Also
eerc_analyze_netlist()
eerc_create_device_list_layer()
eerc_create_net_layer()
eerc_setup()
extract_devices()
eerc_create_device_list_layer()
The eerc_create_device_list_layer() function returns either the body shapes or
extents of each group of devices in the results database returned by an
eerc_analyze_netlist() function. This includes all of the devices that you saved in the
results database by using the ndb_save_top_cell_device_list() utility function.
Each call to ndb_save_top_cell_device_list() adds a group of devices to the results
database. The eerc_create_device_list_layer() function returns the device body
shapes or extent shapes for all of these groups. Shapes for devices that you save by using
the ndb_find_device() hierarchical search function are not returned.
The body shapes or extent shapes are flat in the top cell. If you request extent shapes, each
shape represents the minimum enclosing rectangle of the device body shapes for the
devices included in a single ndb_save_top_cell_device_list() function call. Each call of
this function executed in a Python remote block by the eerc_analyze_netlist() function
produces a single extents shape.
If a group of devices in the results database is identical to another group, only unique body
shapes are returned. However, the IC Validator tool stops executing if extent shapes of two
groups overlap each other exactly.
Syntax
eerc_create_device_list_layer(
report_db = eerc_results_database,
device_db = device_database,
output_type = BODY_POLYGONS | BODY_EXTENTS //optional
);
Returns
polygon layer or error result
Arguments
report_db
Required. Specifies the results database returned by an eerc_analyze_netlist()
function. This database is an element in the data structure returned by the
eerc_analyze_netlist() function.
device_db
Required. Specifies the device database returned by the extract_devices() function.
output_type
Optional. Specifies the data that you want to write to the output layer. The default is
BODY_POLYGONS.
❍ BODY_EXTENTS. Writes the minimum enclosing rectangle for each device group to the
output layer.
Command Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the IC Validator Advanced license.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information.
Examples
In this example, the IC Validator tool identifies inverter circuits, generates both of the gate
shapes for the circuit MOSFETs, and creates a minimum bounding box around each circuit.
The Python code is in check.py:
from ICV.eerc import *
def check_inv():
# identify inverter circuits and cache them
...
for mos in ndb_devices(cache_cell):
# collect the MOS devices in one circuit and save as a group
...
ndb_save_top_cell_device_list(mos_devices)
if(!layer_empty(inv_mos_extents))
{
note("Layer inv_mos_extents is not empty");
}
if(!layer_empty(inv_mos_gates))
{
note("Layer inv_mos_gates is not empty");
}
See Also
eerc_analyze_netlist()
eerc_create_device_layer()
eerc_create_net_layer()
eerc_setup()
extract_devices()
eerc_create_net_layer()
The eerc_create_net_layer() function returns the shapes from the specified list of layers
for all of the nets in the results database returned by an eerc_analyze_netlist() function.
This includes all of the nets that you saved in the results database by using the save
argument in the ndb_find_net() or ndb_save_top_cell_net() utility function.
Note:
The list of layers that you specify to create shapes must be contained in the connect
database.
When you save the nets by using an ndb_find_net() utility function, the shapes appear in
the hierarchy. When you save the nets by using an ndb_save_top_cell_net() utility
function, the shapes are flat in the top cell.
Syntax
eerc_create_net_layer(
report_db = eerc_results_database,
device_db = device_database,
output_from_layers = {polygon_layer, ...} //optional
);
Returns
polygon layer or error result
Arguments
report_db
Required. Specifies the results database in the data structure returned by an
eerc_analyze_netlist() function.
device_db
Required. Specifies the device database returned by the extract_devices() function.
output_from_layers
Optional. Specifies the list of layers from which shapes should be drawn for the nets
contained in the results database. If you do not specify any layers, the shapes of all the
layers in the connect database are drawn for the nets in the results database.
Command Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the IC Validator Advanced license.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information.
Examples
This example shows how to get all of the metal1 layers associated with the VDD net.
The Python code is in check.py
from ICV.eerc import *
def vdd_m1():
nldb = ndb_get_netlist()
if(!layer_empty(vdd_m1))
{
note("Layer vdd_m1 is not empty");
}
See Also
eerc_analyze_netlist()
eerc_create_device_layer()
eerc_create_device_list_layer()
eerc_setup()
extract_devices()
eerc_import_net_properties_from_file()
The eerc_import_net_properties_from_file() function reads a file from disk. The file
contains a list of net names, with one name on each line. Each column in the file represents
the name or value of a double property that should be assigned to a net.
The first line in the file is a header. This header must be the first line in the file. Comment
lines are not allowed before the header line.
• The first column in the header should contain the keyword NetPath.
• Each subsequent column should contain the name of a property.
All remaining noncomment lines contain a net name and the properties associated with the
net.
• The first column contains the net name, with reference to the top cell. The name can be
hierarchical.
• All of the other columns represent a double value; one for each property name.
• If a property value is missing on a line, each subsequent property gets the last provided
value.
• Use double slashes (//) to indicate a comment on a single line.
The following example shows the format of a net double property file:
NetPath volt control
IO 3.3 1
DVDD 1.8 2
DVSS 0.0
AVDD 3.3
AVSS 0.0 3
X1/X24/A 0.8 4
The file can also be cell based, where the first column is the cell name, the second column
is the net name with relation to the cell listed in the CellName column, and the remaining
columns give the property values. When cell-based names are used, the header line must
use the keyword CellName in the first column.
All of the nets listed in relation to the cell receive the property for all placements of that cell:
CellName NetPath volt control
lowCell IO 3.3 1
topCell DVDD 1.8 2
topCell DVSS 0.0 2
otherCell AVDD 3.3 3
otherCell AVSS 0.0 3
lowCell X1/X24/A 0.8 4
You should specify the net names with respect to the input netlist. However, if the input
netlist is extracted from the layout as part of an LVS run, and the design compares cleanly,
you can specify schematic net names if you provide a cross-reference database.
The net names do not have to be top-of-net names (the names of the nets at their highest
point in the hierarchy). The property values are applied to the entire net throughout its
hierarchy. If a single hierarchical net has conflicting property values (multiple lines that are
present for a single net, each one using a name at a different hierarchical level), the
IC Validator tool uses the value associated with the net at the highest hierarchical level.
Syntax
eerc_import_net_properties_from_file(
netlist_db = eerc_netlist_database,
property_file = "string",
xref_db = xref_database_handle //optional
);
Returns
eerc_netlist_database
Arguments
netlist_db
Required. Specifies the input netlist. This must come from an eerc_setup() function or
an eerc_analyze_netlist() function.
property_file
Required. Specifies the name of the file that contains the net double property definitions.
The net names in this file should correspond with net names in the input netlist or should
cross-reference names in the input netlist.
xref_db
Optional. Specifies the cross-reference database produced by an IC Validator LVS run.
The compare must be clean to provide a complete cross-reference database.
Command Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the IC Validator Advanced license.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information.
Examples
This example shows a net double property file with a single “volt” property.
NetPath volt
IO 3.3
DVDD 1.8
DVSS 0.0
AVDD 3.3
AVSS 0.0
X1/X24/A 0.8
See Also
eerc_analyze_netlist()
eerc_setup()
eerc_write_net_missing_property_file()
eerc_write_net_property_file()
eerc_write_vue_debug_database()
eerc_setup()
The eerc_setup() function reads a netlist from disk, or from a layout extraction, and
prepares it for use in an EERC remote block through the eerc_analyze_netlist()
function. The eerc_setup() function can be called only one time in a runset. The
IC Validator tool uses this function to define the reference netlist that the IC Validator VUE
tool uses to report and debug netlist errors.
The eerc_setup() function provides two arguments for specifying the input netlist file
handle, schematic_netlist and layout_netlist. Only one of these netlist file handles
can be specified. Use the argument for the type of netlist (schematic or layout) that you
specify with the netlist_source argument.
The schematic_netlist argument allows the IC Validator VUE tool to connect to a
schematic-capture tool for cross-probing. If you need to use this cross-probing capability,
you must set the netlist_source argument to SCHEMATIC. This setting allows the IC
Validator tool to map the instance names in the netlist to the names used in the
schematic-capture tool. For more information about using this flow, contact your Synopsys
representative.
Note:
For a netlist domain check that does not include any layout input or require
schematic-tool cross-probing capabilities, the input netlist file handle that is passed to the
eerc_setup() function is returned using either the read_layout_netlist() or the
schematic() function.
Using either function does not affect the netlist processing capabilities in a remote
Python block called by the eerc_analyze_netlist() function.
SPICE/CDL type netlists do not contain implant type information for devices like MOS and
bipolar transistors. Using this implant information is often helpful in netlist processing. For
example, if no further information is provided when a SPICE/CDL type netlist is read into
EERC for processing, all MOS transistor devices have the general MOSFET type. If you
want to know which of these devices are NMOS and which devices are PMOS, you must
provide this information for EERC.
You can use either of the following methods to pass implant information to EERC:
• Pass the compare matrix to the eerc_setup() function. EERC can determine the
implant types for all devices from information contained in the matrix. Use this method
when netlist processing is part of an LVS runset.
• Use the device_type_setting argument to define implant types explicitly for the MOS,
bipolar, or diode devices.
In addition to the implant types, a SPICE/CDL type netlist often represents devices by using
empty subcircuits. In this case, EERC does not recognize the instances as devices. Both the
Syntax
eerc_setup(
netlist_source = SCHEMATIC | LAYOUT,
schematic_netlist = schematic_netlist_file_handle,
layout_netlist = layout_netlist_file_handle,
compare_state = compare_state, //optional
device_type_setting = {
mos = {nmos = {"string", ...},
pmos = {"string", ...},
undefined_implant_type = ALLOW | ABORT
},
bjt = {npn = {"string", ...},
pnp = {"string", ...},
undefined_implant_type = ALLOW | ABORT
},
diode = {np = {"string", ...},
pn = {"string", ...},
undefined_implant_type = ALLOW | ABORT
},
subckt = {
subckt_device_type = {
{model_names = {"string", ...},
device_type = NMOS | PMOS | NPN | PNP | PN |
NP | RESISTOR | CAPACITOR |
INDUCTOR | GENERIC | MOSFET |
JUNCTION_DIODE | BIPOLAR_TRANSISTOR},
...},
empty_subckt = EMPTY_CELL | ABORT |
GENERIC_DEVICE}
}, //optional
top_cell = "string", //optional
power_nets = {"string", ...}, //optional
ground_nets = {"string", ...} //optional
);
Returns
EERC netlist database
Arguments
netlist_source
Required. Specifies whether the input netlist is from a schematic or a layout extraction. If
you need to cross-probe the results in a schematic-capture tool, set this option to
SCHEMATIC.
schematic_netlist
Optional. Specifies the schematic netlist file handle returned by the schematic()
function. Use this argument when you set the netlist_source argument to SCHEMATIC.
You must use either this argument or the layout_netlist argument.
layout_netlist
Optional. Specifies the layout netlist file handle returned by the
read_layout_netlist() or netlist() function. Use this argument when you set the
netlist_source argument to LAYOUT. You must use either this argument or the
schematic_netlist argument.
compare_state
Optional. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function.
This argument is used to pass device information from the LVS runset into EERC, such
as the implant types of MOS devices and the device types of any devices that are
included as empty subcircuits in the netlist.
device_type_setting
Optional. Specifies the implant types of MOS, bipolar, and diode devices and the device
types of any devices that are included as empty subcircuits in the netlist.
if you do not specify this argument or the compare_state argument, all MOS devices
have the MOSFET type with no implant specification (NMOS or PMOS), all bipolar
devices have the BIPOLAR_TRANSISTOR type with no implant specification (NPN or
PNP), and all diode devices have the JUNCTION_DIODE type with no implant
specification (NP or PN).
❍ mos. Optional. Specifies the MOSFET devices to be assigned the NMOS or PMOS
implant type.
■ nmos. Specifies a list of strings that represent the model names of the MOS
devices to be assigned the NMOS implant type. All MOSFET device instances
that have one of these model names are assigned an NMOS device type.
■ pmos. Specifies a list of strings that represent the model names of the MOS
devices to be assigned the PMOS implant type. All MOSFET device instances
that have one of these model names are assigned a PMOS device type.
■ undefined_implant_type. Specifies how the IC Validator tool treats MOSFET
devices that are not assigned an implant type. The default is ALLOW, which means
the tool assigns the MOSFET device type to the device. If you specify ABORT, tool
execution stops.
❍ bjt. Optional. Specifies the bipolar devices to be assigned the NPN or PNP implant
type.
■ npn. Specifies a list of strings that represent the model names of the bipolar
devices to be assigned the NPN implant type. All bipolar device instances that
have one of these model names are assigned an NPN device type.
■ pnp. Specifies a list of strings that represent the model names of the bipolar
devices to be assigned the PNP implant type. All bipolar device instances that
have one of these model names are assigned a PNP device type.
■ undefined_implant_type. Specifies how the IC Validator tool treats bipolar
devices that are not assigned an implant type. The default is ALLOW, which means
the tool assigns the BIPOLAR_TRANSISTOR device type to the device. If you
specify ABORT, tool execution stops.
❍ diode. Optional. Specifies the diode devices to be assigned th NP or PN implant
type.
■ np. Specifies a list of strings that represent the model names of the diode devices
to be assigned the NP implant type. All diode device instances that have one of
these model names are assigned an NP device type.
■ pn. Specifies a list of strings that represent the model names of the diode devices
to be assigned the PN implant type. All diode device instances that have one of
these model names are assigned an PN device type.
■ undefined_implant_type. Specifies how the IC Validator tool treats a diode
devices that are not assigned an implant type. The default is ALLOW, which means
the tool assigns the JUNCTION_DIODE device type to the device. If you specify
ABORT, tool execution stops.
❍ subckt. Optional. Assigns device types to devices that are netlisted as subcircuits.
top_cell
Optional. Specifies the name of the top cell to be read from the input netlist.
power_nets
Optional. Specifies the possible power net names. You can include wildcards. The
eerc_setup() function finds any nets in the top block with names that match a string in
this list, and makes them available to the Python remote block through the
ndb_get_power_net_names() utility function.
ground_nets
Optional. Specifies the possible ground net names. you can include wildcards. The
eerc_setup() function finds any nets in the top block with names that match a string in
this list, and makes them available to the Python remote block through the
ndb_get_ground_net_names() utility function.
Command Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the IC Validator Advanced license.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information.
Examples
1. Read an existing netlist from disk without mapping any devices to the different implant
types or resolving devices represented by empty subcircuits. The source of the netlist
does not matter because the results are not used to cross-probe to a schematic-capture
tool.
lay_netlist_db = read_layout_netlist(
cell = "test_cell",
layout_file = {{"./test.cdl", format=SPICE}}
);
eerc_netlist_db = eerc_setup(
netlist_source = LAYOUT,
layout_netlist = lay_netlist_db
);
2. Read the same netlist from disk, but this time define MOS transistor implant types and
map some resistors, represented as empty subcircuits in the netlist. to the proper type.
lay_netlist_db = read_layout_netlist(
cell = "test_cell",
layout_file = {{"./test.cdl", format=SPICE}}
);
eerc_netlist_db = eerc_setup(
netlist_source = LAYOUT,
layout_netlist = lay_netlist_db,
device_type_setting = {
mos = {
nmos = nmos_models,
pmos = pmos_models,
undefined_implant_type = ABORT
},
subckt = {{{res_models, RESISTOR}}}
}
);
3. Read a netlist from the layout extraction portion of an LVS runset, and use the compare
matrix to define device implant types and properly map devices represented as empty
subcircuits. In addition, use the power and ground name definitions from the LVS portion
of the runset.
power_supplies : list of string = {"VDD*", "AVD*", "DVD*",
"!DVDD_pll"};
ground_supplies : list of string = {"VSS*", "*GND*"};
#include "lvs.rs"
orig_netlist_db = eerc_setup(
netlist_source = LAYOUT,
layout_netlist = lay_db,
compare_state = cmp_matrix,
power_nets = power_supplies,
ground_nets = ground_supplies
);
See Also
eerc_analyze_netlist()
init_compare_matrix()
netlist()
read_layout_netlist()
schematic()
eerc_write_net_missing_property_file()
The eerc_write_net_missing_property_file() function writes an output file containing
the instance-based net names of the nets that did not have properties propagated to them.
The IC Validator tool writes a default value, set in this function, for the net properties and
prints it along with the net.
For example, if a net is floating and a property is never propagated to it, this option prints the
floating net and a default value for the property to the output file. The output file is similar to
the file produced by the eerc_write_net_property_file() function.
Syntax
eerc_write_net_missing_property_file(
netlist_db = eerc_netlist_database,
file_name = "string",
net_properties = {
{"string", double},
...},
tag_check = {
any_of = {"string", ...},
all_of = {"string", ...},
none_of = {"string", ...}
} //optional
);
Returns
void
Arguments
netlist_db
Required. Specifies the input netlist.
file_name
Required. Specifies the name of the output file to be produced. This file contain the
instance-based net names and the properties specified in the net_properties
argument.
net_properties
Required. Specifies the names and values of the properties to be written, with the net, to
the output file. A property is written only for the nets that do not have the property
assigned to them.
tag_check
Optional. Specifies a tag constraint used to designate which nets are written to the output
file. When this option is used, only nets that meet the tag specification are written to the
output file.
Command Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the IC Validator Advanced license.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information.
Examples
In this example, the IC Validator tool writes the vmax and vmin properties in the
myOutputProps_floatingNets.txt file on any nets that do not have values for these properties
in the eercNetlist netlist. Each of these properties should have a value of 0.0.
eerc_write_net_missing_property_file(
netlist_db = eercNetlist,
file_name = "myOutputProps_floatingNets.txt",
net_properties = {
{"vmax", 0.0},
{"vmin", 0.0}
}
);
See Also
eerc_analyze_netlist()
eerc_import_net_properties_from_file()
eerc_setup()
eerc_write_net_property_file()
eerc_write_vue_debug_database()
eerc_write_net_property_file()
The eerc_write_net_property_file() function writes an output file of instance-based
net names and associated propagated properties in the same format as the file used for the
eerc_import_net_properties_from_file() function. However, the output file written by
the eerc_write_net_property_file() function references every net from the top block.
The xref_to_double_property() function can use this file later in an IC Validator
geometry-based flow.
Syntax
eerc_write_net_property_file(
netlist_db = eerc_netlist_database,
file_name = "string",
net_properties = {"string", ...},
tag_check = {
any_of = {"string", ...},
all_of = {"string", ...},
none_of = {"string", ...}
} //optional
);
Returns
void
Arguments
netlist_db
Required. Specifies the input netlist.
file_name
Required. Specifies the name of the output file to be produced. This file contains the
instance-based net names and the properties specified in the net_properties
argument.
net_properties
Required. Specifies the list of property names that the function outputs for each net in the
output file.
tag_check
Optional. Specifies the tag conditions used to designate which nets the function writes to
the output file. When this option is used, only nets that meet the tag specification are
written to the output file.
Command Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the IC Validator Advanced license.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information.
Examples
In this example, the IC Validator tool writes the stored net properties from the eercNetlist
netlist into the file named myOutputProps.txt in the current working directory. The vmax and
vmin properties on the nets tagged with powerNet are written to the output file.
eerc_write_net_property_file(
netlist_db = eercNetlist,
file_name = "myOutputProps.txt",
net_properties = {"vmax", "vmin"},
tag_check = {
any_of = {"powerNet"}
}
);
See Also
eerc_analyze_netlist()
eerc_import_net_properties_from_file()
eerc_setup()
eerc_write_net_missing_property_file()
eerc_write_vue_debug_database()
eerc_write_vue_debug_database()
The eerc_write_vue_debug_database() function writes debugging information for use in
the IC Validator VUE tool. You can right-click in the Netlist Visualization window and select
the Load Debug Info command. Then, you can hover the pointer over any net in the Netlist
Visualization window to see the properties and tags associated with that net.
Syntax
eerc_write_vue_debug_database(
netlist_db = eerc_netlist_database
);
Returns
void
Arguments
netlist_db
Required. Specifies the input netlist.
Command Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the IC Validator Advanced license.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information.
See Also
eerc_analyze_netlist()
eerc_import_net_properties_from_file()
eerc_setup()
eerc_write_net_missing_property_file()
eerc_write_net_property_file()
empty_layer()
The empty_layer() function creates an empty polygon layer.
Syntax
empty_layer(
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
empty_polygon_layer = empty_layer();
See Also
empty_layer_edge()
empty_layer_marker()
empty_violation()
empty_layer_edge()
The empty_layer_edge() function creates an empty edge layer.
Syntax
empty_layer_edge(
name = "layer_label" //optional
);
Returns
edge layer
Arguments
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
empty_edge_layer = empty_layer_edge();
See Also
empty_layer()
empty_layer_marker()
empty_violation()
empty_layer_marker()
The empty_layer_marker() function creates an empty marker layer.
Syntax
empty_layer_marker(
name = "layer_label" //optional
);
Returns
marker layer
Arguments
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. The name is used only for log files; runset variables are not
changed. The default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
dummy_marker = empty_layer_marker();
See Also
empty_layer()
empty_layer_edge()
empty_violation()
empty_violation()
The empty_violation() function creates an empty violation.
Syntax
empty_violation();
Returns
violation
Arguments
This function has no arguments.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
empty_layer()
empty_layer_edge()
empty_layer_marker()
enclose()
The enclose() function creates polygons that are formed by pairs of violation edges. It
measures outside-to-inside spacing on two layers based on the specified distance. The
arguments define various geometric conditions for measuring the distance between the
layer edges.
Syntax
enclose(
layer1 =
data_layer,
layer2 =
data_layer,
distance =
doubleconstraint,
extension =
NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE,
extension_distance = double, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR}, //optional
intersecting = {TOUCH, ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
from_layer = LAYER1 | LAYER2 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | COINCIDENT | RELATED_COINCIDENT |
INSIDE | OUTSIDE | NOT_ADJACENT |
NOT_CONTAINED | ALL, //optional
look_thru_count = integerconstraint, //optional
look_thru_from_layer = LAYER1 | LAYER2 | ALL, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH, INSIDE, OUTSIDE, CROSS},
//optional
relational_type = EXPANDED_EDGE | POLYGON, //optional
point_touch_shape = EXTENTS | SQUARE, //optional
shape_size = double, //optional
output_type = REGION | CENTERLINE | EXTENTS, //optional
width = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
line_touch_shape = OUTSIDE | INSIDE | BOTH, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the enclosed input edge or polygon layer.
layer2
Required. Specifies the enclosing edge or polygon layer against which the layer1 layer
is checked.
distance
Required. Checks distance. See “Constraints” on page A-4 for more information.
Note:
The only constraint operators allowed are <, <=, and ==.
Figure 2-100 shows the effect of the distance argument settings.
Figure 2-100 distance Argument Example
extension
Required. Specifies the extension of the check region, beyond the endpoints of the edge
being checked.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance argument value. When the touch argument includes
ON, the NONE_INCLUSIVE setting generates point-to-point violations whose edges
have no length. See the description of the output_type argument for more
information.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance argument value with a radial curve. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance argument value with a square. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance argument value with a rectangle. The boundary of the check
region is inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance argument value, and creating right-angle boundaries at the
extended endpoints based on the distance constraint. The right-angle boundaries of
the check region are exclusive. The far boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
Figure 2-101 is an example of extension = RECTANGLE, with distance = [.4,.5] and
extension_distance =.8.
In the conceptual diagram shown in Figure 2-103, the current edge being checked is
shown in solid black. The check region is dashed.
Figure 2-103 Check Region Extension
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
Figure 2-105 shows the effect of the extension argument settings when the extension
argument is EDGE.
Figure 2-105 extension_distance Argument With extension = EDGE Example
Figure 2-106 shows the effect of the extension argument settings when the extension
argument is RECTANGLE.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the edges that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ TOUCH. Creates a violation where the outside of the enclosed layer touches the inside
of the enclosing layer. There is no measurement in this case.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
In Figure 2-110, the projection region for edge A is shown in gray. The green edges are
IN, the red edges are OUT, and the magenta edges are ON.
IN ON OUT
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
❍ The orientation argument cannot contain PERPENDICULAR.
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
Input
1.05
0.99
1.05
0.99
1.001
from_layer
Optional. Specifies the layer that is used to create check regions. The default is ALL.
❍ LAYER1. Specifies that only layer1 edges create check regions.
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
CORNER_TO_CORNER CORNER_TO_CORNER_OR_EDGE
CORNER_TO_EDGE NOT_CORNER
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
❍ COINCIDENT. Looks through outside coincident edges from layer2, the enclosing
layer.
❍ RELATED_COINCIDENT. Uses COINCIDENT if the two input layers have the same layer
ancestry; otherwise, NONE is used.
❍ INSIDE. Looks inside layer1, the enclosed layer.
❍ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not look
through any edges that share endpoint X with edge A. This setting avoids false
violations that might be reported when the look_thru argument is ALL.
Note:
When the edge_containment argument is not ALL, the NOT_ADJACENT behavior
is changed.
After filtering edges by edge_containment, when two checked edges do not
project onto each other, an adjacent edge of the extension past the endpoint of
one checked edge can block the extension check. If the adjacent edge fully blocks
the shape of the extension violation, then the extension violation is not reported.
The extension is not measured.
❍ NOT_CONTAINED. Looks through all edges, except polygons or edges that contain the
projection. A projection is contained when any of the following are true:
■ A layer1 edge is inside coincident to a projecting layer2 edge.
■ A layer1 polygon overlaps a projecting layer2 edge. If layer1 is an edge layer,
this contain does not apply.
■ The projection is inside a layer2 polygon. If layer2 is an edge layer, this contain
does not apply.
Figure 2-116 shows an example of using the NOT_CONTAINED option.
enclose(gray, purple, look_thru = NOT_CONTAINED);
1, 2 NONE
1, 2, 3, 4 INSIDE
1, 2, 3, 4, 5 ALL
1 2 3 4 5
Figure 2-118 shows another example of the edges that a spacing check looks through for
various look_thru argument settings.
1 NONE
1, 2 COINCIDENT
1, 2, 3 OUTSIDE
1, 2, 3, 4, 5 ALL
1 2 3 4 5
look_thru_count
Optional. Specifies the number of edges that must be looked through for a measurement
to occur. Edges coincident to the edge being measured are not included in the count.
The value must be nonnegative. See “Constraints” on page A-4 for more information.
The default is >=0, which means the count is ignored.
Note:
Use this argument only when the extension argument is NONE and the look_thru
argument is ALL.
look_thru_from_layer
Optional. Controls which edges are counted for the look_thru_count argument. The
default is ALL.
❍ LAYER1. Counts only layer1 edges.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
extension_obstructions
Optional. Specifies how look_thru is processed for the check region extension. Some
endpoint violations might be undesirable even though they fit the look_thru setting.
This argument specifies how aggressively the check finds and refines endpoint violations
in accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
See Figure 2-119 for an example of the extension_obstructions argument.
Figure 2-119 Example of extension_obstructions
POINT_TO_POINT
ALL
relational
Optional. Specifies the additional violations that the check outputs. By default, the
IC Validator tool does not report additional violations.
❍ POINT_TOUCH. Creates a violation where there is an outside-to-inside point touch.
The format of the violation is determined by the point_touch_shape and
shape_size arguments. Connectivity is considered.
When the edge_containment argument is specified, the POINT_TOUCH argument
creates a violation by using an intersection angle for all edges that touch any
point-touch point. The angle of the intersection angle must be greater than or equal
to 0 and less than 180. When the edge_containment argument is specified, the
point_touch_shape and shape_size arguments are ignored.
The POINT_TOUCH argument is not available for edge input.
❍ INSIDE. Reports as violations the layer2 edges that are inside layer1. Applies only
when layer1 is a polygon layer. Connectivity is considered.
❍ OUTSIDE. Reports as violations the layer1 edges that are outside layer2. When
layer2 is an edge layer, this argument reports outside coincidence. Connectivity is
not considered for this argument.
❍ CROSS. Creates a violation where layer1 and layer2 edges cross. Applies only
when layer1 and layer2 are polygon layers. Connectivity is considered. When this
argument is specified, the intersection_angle argument is ignored.
Figure 2-120 shows the effect of the relational argument settings.
Figure 2-120 relational Argument Example
relational_type
Optional. Specifies how OUTSIDE relational violations are reported. The default is
EXPANDED_EDGE.
layer1
layer2
point_touch_shape
Optional. Specifies the shapes that are generated for point touches. The default is
EXTENTS.
❍ EXTENTS. Specifies that the length of the violation is equal to the maximum of the
distance constraint, with a minimum value of two times the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution. The violation region is approximated with edges that are either
perpendicular, parallel, or at a 45-degree angle, to the edges that form the point
touch, to avoid creating odd-angle data.
❍ SQUARE. Specifies that a square is centered on the point touch. The sides of the
square are horizontal and vertical. The size of the square is determined by the
shape_size argument.
shape_size
Optional. Specifies the length of the sides of the squares generated when
point_touch_shape = SQUARE. The default is twice the maximum of the spacing
distance. The value must be positive. It is rounded to the nearest even multiple of the
internal resolution, with a minimum value of twice the internal resolution.
output_type
Optional. Specifies the type of output generated. The default is REGION.
❍ REGION. Reports violations as polygons, which are generated by connecting the
violation edges.
❍ CENTERLINE. Reports violations as an expanded line at the center of the projection
region. The midpoints of the sides of the violation region form a line that is expanded
in both directions by width/2. When the output_type argument is CENTERLINE, only
parallel spacing is supported.
❍ EXTENTS. Reports violations as boxes, oriented along the violation edges, that
contain the extents of the violation. This setting is used to avoid the creation of
odd-angle data normally seen when the extension argument is RADIAL or SQUARE.
The following violations require special consideration when generating output shapes:
❍ When set to REGION, point-to-point violations are reported as rectangles by
expanding the line connecting the two points by the width value on both sides.
❍ When set to CENTERLINE, point-to-point violations are reported as squares, centered
on the midpoint of the line connecting the two points, with a dimension equal to the
width value. Violations are oriented along the line.
❍ When set to EXTENTS, point-to-point violations are reported the same as when set to
REGION.
For the following examples,
Input
0.778
0.8
Output
0.778
0.8
Output
0.778
0.8
Output
0.778
0.8
width
Optional. Specifies the value used to expand a single edge violation into a polygon,
including perpendicular spacing violations that are a single edge. The minimum value for
the argument is the internal resolution. The internal_resolution argument of the
resolution_options() function sets the internal resolution. The default is 0.001.
For the following examples,
Input
Output
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
line_touch_shape
Optional. Specifies how to expand a line-touch edge violation into a polygon. The default
is OUTSIDE.
❍ OUTSIDE. Outputs a line-touch polygon outside of the dimensional function layer1
polygon. The output polygon size equals the value of the width option.
❍ INSIDE. Outputs a line-touch polygon inside of layer1. The output polygon size
equals the value of the width option.
❍ BOTH. Outputs a line touch polygon inside and outside of the layer1. The total output
size is 2*width option.
cumulative_projection_length
Optional. Specifies how the projection length is measured when there are multiple
violations. See the projection_length argument for more information. The default is
NONE.
❍ SAME_EDGE. Accumulates the projection length for interacting violations that project
from the same edge. A given violation can contribute to more than one unique
accumulated projection length.
Figure 2-122 shows how the cumulative projection length is measured for the
SAME_EDGE option. There are a total of four projection lengths.
layer1
Figure 2-124 shows the difference between a jogging edge and a non-jogging edge.
Figure 2-124 Jogs Not Included in a JOGGING_EDGE Projection Length Measurement
layer1
violation
jogging edge point touch is not layer
a jogging edge
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
❍ MUTUAL_NON_ORTHOGONAL.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
checks. The look_thru argument is ignored, except when it is NOT_CONTAINED and
two intersecting edges are cut. The connectivity and orthogonal arguments are
not ignored.
Figure 2-125 shows an example of using the intersection_angle argument.
green = enclose(blue, red, distance < 1.0, extension = RADIAL,
orientation = {}, intersecting = {},
intersection_angle < 180);
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
edge_containment
Optional. Filters edges, based on the topological relation of the two layers, before the
tool makes any measurements. Edges are broken into segments that are inside, outside,
inside coincident, and outside coincident with the other layer. The default is ALL.
Note:
When the edge_containment argument is not ALL, the break_edges argument is
forced to true.
❍ INSIDE_TO_OUTSIDE. Includes the following measurements:
If layer2 is an edge, those layer1 edges that are neither inside coincident nor
outside coincident with layer2 are included in the measurements.
■ For layer2 edges,
If layer1 is a polygon, only those layer2 edges that are outside and outside
coincident with layer1 are included in the measurements.
If layer1 is an edge, those layer2 edges that are not inside coincident with
layer1 are included in the measurements.
Important:
Edges that are inside coincident with the other layer are included in the
measurement for touch violations.
In Figure 2-126, the dash lines are filtered out before the measurement. The syntax is
enclose(layer1 = orange, layer2 = blue, ...)
break_edges
Optional. Controls edge breaking behavior for two-layer spacing checks. The segments
resulting from the edge breaking are processed individually by the edge filters and
spacing constraints. The default is false.
❍ true. Enables edge breaking behavior. Edges are broken into individual segments as
follows:
■ Specifies that edges are broken at every point of intersection with the other layer.
■ Specifies that coincident edges are broken at the point where they become
not-coincident.
❍ false. Specifies that edges are not broken.
Figure 2-127 shows the break_edges argument for a two-layer polygon. If the other
layer is an edge layer, there is no inside or outside with the other edge layer.
Figure 2-127 Example of break_edges Argument for a Two-Layer Polygon
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Minimum spacing of 0.5; touch interactions are allowed
enclose(layer1 = met1, layer2 = met2, distance <= 0.5,
extension = RADIAL);
Minimum enclosure of 0.5 for met1 to met2; measures only parallel edges
enclose(layer1 = met1, layer2 = met2, distance < 0.5,
extension = RADIAL, orientation = {PARALLEL});
Minimum spacing of 0.5 for met1 to met2; measures all parallel angled edges
enclose(layer1 = met1, layer2 = met2, distance < 0.5,
extension = RADIAL, orthogonal = BOTH,
orientation = {PARALLEL});
See Also
not_contained_by() and contained_by()
covered_by()
enclose_edge() and not_enclose_edge()
not_covered_by()
enclose_corner()
The enclose_corner() function creates polygons that are formed by pairs of violation
corners. It measures the outside of the layer1 layer to the inside of the layer2 layer. The
arguments define various geometric conditions for measuring the point-to-point distance
between the corners.
The output consists of rectangles that are the extents of the point-to-point violations. In the
case where the violation is horizontal or vertical, the output rectangle is generated by
expanding the violation three times the input library resolution on both sides.
Corner-to-corner distance is checked only when each corner falls within the check zone of
the other corner.
The check zone for convex corners (interior angle of less than 180 degrees) is determined
by the following steps:
1. For each adjacent edge of the corner, draw a perpendicular line toward the check side.
See “Spacing Checks” on page A-18 for more information about the check side.
2. The check zone is bounded by the two lines.
The check zone for concave corners (exterior angle of less than 180 degrees) is determined
by the following steps:
1. Extend each adjacent edge of the corner.
2. The check zone is bounded by the two lines.
Corner-to-edge distance is checked only when the corner falls in the perpendicular
projection region of the edge, and the perpendicular projection point from the edge to the
corner falls in the projection zone of the corner. Also, a portion of the edge must fall in the
corner projection zone, and neither of the edges forming the corner can be parallel to the
edge.
For edge input, the enclose_corner() function optionally includes terminal edge endpoints
as corners; there is no adjacent edge. In this case, the angle argument is not used. The
check zone of an edge endpoint with no adjacent edge is determined by the following steps:
1. Draw a line extending the edge beyond the endpoint.
2. From the endpoint, draw a perpendicular line toward the check side of the edge.
3. The check zone is bounded by the two lines. The boundary defined by the line extending
the edge is always inclusive.
Syntax
enclose_corner(
layer1 =
data_layer,
layer2 =
data_layer,
distance =
doubleconstraint,
type =
{CONVEX_TO_CONCAVE, CONVEX_TO_CONVEX,
CONVEX_TO_EDGE, CONCAVE_TO_CONCAVE,
CONCAVE_TO_EDGE, EDGE_TO_CONCAVE, EDGE_TO_CONVEX,
PARALLEL_POINT_PROJECTION}, //optional
angle = ALL | RIGHT, //optional
region = RADIAL | SQUARE, //optional
boundary = EXCLUSIVE | INCLUSIVE, //optional
convex_to_concave_boundary = INCLUSIVE_PARALLEL | EXCLUSIVE,
//optional
edge_endpoints = CORNER | ALL, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
look_thru = NONE | COINCIDENT | INSIDE | OUTSIDE |
ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the enclosed input edge or polygon layer.
layer2
Required. Specifies the enclosing edge or polygon layer against which the layer1 layer
is checked.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
type
Optional. Specifies the corner types included in the spacing checked on layer1 and
layer2, respectively. For example, CONCAVE_TO_EDGE checks between concave corners
on layer1 and edges on layer2. By default, the IC Validator tool selects all types.
❍ CONCAVE_TO_CONCAVE. Specifies that the check-zone boundary is controlled by the
boundary argument.
angle
Optional. Specifies the angles of the corners that are included in the spacing check. The
default is ALL.
❍ ALL. Specifies that all angles are checked.
region
Optional. Specifies the shape of the corner-check region. Intrusion into the corner-check
region results in a spacing violation. The default is RADIAL.
❍ RADIAL. Connects check-zone boundaries with a radial arc at the specified distance
from the corner. The boundary of the arc is inclusive or exclusive depending on the
distance argument.
❍ SQUARE. Defines the check region with two squares. For each corner check-zone
boundary, a square equal in size to the specified distance is placed point-touching
the corner; one edge is coincident to the boundary. For right corners, the two boxes
are coincident. The far boundaries of the boxes are inclusive or exclusive depending
on the distance argument.
boundary
Optional. For convex-to-convex and concave-to-concave measurements, specifies
whether the corner check-zone boundaries are exclusive or inclusive. The default is
EXCLUSIVE.
convex_to_concave_boundary
Optional. For convex-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. The default is EXCLUSIVE.
edge_endpoints
Optional. Specifies the edge endpoints measured. The default is CORNER.
Note:
This argument is used only when an input layer is an edge layer.
■ If layer1 is an edge layer, then the argument applies to layer1.
■ If layer2 is an edge layer, then the argument applies to layer2.
■ If layer1 and layer2 are edge layers, then the argument applies to both layers.
❍ CORNER. Checks only the endpoints that form a corner.
❍ ALL. Checks all endpoints, including those that have no adjacent edge.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Measures corners from polygons that are on the same net.
connect_sequence
Optional. Specifies the connect database. This database must be a valid connect
database when the connectivity argument is SAME_NET or DIFFERENT_NET.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
❍ COINCIDENT. Looks through outside coincident edges from layer2, the enclosing
layer.
❍ INSIDE. Looks inside layer1, the enclosed layer.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Minimum spacing of 0.5; touch interactions are allowed:
enclose_corner(layer1 = met1, layer2 = met2, distance <= 0.5 );
See Also
covered_by()
enclose()
enclose_corner_edge()
not_covered_by()
enclose_corner_edge()
The enclose_corner_edge() function creates edges that consist of pairs of violation
corners. It measures the outside of the layer1 layer to the inside of the layer2 layer. The
arguments define various geometric conditions for measuring the point-to-point distance
between the corners.
The output consists of pairs of violation edges.
Corner-to-corner distance is checked only when each corner falls within the check zone of
the other corner.
The check zone for convex corners (interior angle of less than 180 degrees) is determined
by the following steps:
1. For each adjacent edge of the corner, draw a perpendicular line toward the check side.
See “Spacing Checks” on page A-18 for more information about the check side.
2. The check zone is bounded by the two lines.
The check zone for concave corners (exterior angle of less than 180 degrees) is determined
by the following steps:
1. Extend each adjacent edge of the corner.
2. The check zone is bounded by the two lines.
Corner-to-edge distance is checked only when the corner falls in the perpendicular
projection region of the edge, and the perpendicular projection point from the edge to the
corner falls in the projection zone of the corner. Also, a portion of the edge must fall in the
corner projection zone, and neither of the edges forming the corner can be parallel to the
edge.
For edge input, the enclose_corner_edge() function optionally includes terminal edge
endpoints as corners; there is no adjacent edge. In this case, the angle argument is not
used. The check zone of an edge endpoint with no adjacent edge is determined by the
following steps:
1. Draw a line extending the edge beyond the endpoint.
2. From the endpoint, draw a perpendicular line toward the check side of the edge.
3. The check zone is bounded by the two lines. The boundary defined by the line extending
the edge is always inclusive.
Syntax
enclose_corner_edge(
layer1 = data_layer,
layer2 = data_layer,
distance = doubleconstraint,
type = {CONVEX_TO_CONCAVE, CONVEX_TO_CONVEX,
CONVEX_TO_EDGE, CONCAVE_TO_CONCAVE,
CONCAVE_TO_EDGE, EDGE_TO_CONCAVE,
EDGE_TO_CONVEX, PARALLEL_POINT_PROJECTION},
//optional
angle = ALL | RIGHT, //optional
region = RADIAL | SQUARE, //optional
boundary = EXCLUSIVE | INCLUSIVE, //optional
convex_to_concave_boundary = INCLUSIVE_PARALLEL | EXCLUSIVE,
//optional
edge_endpoints = CORNER | ALL, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
look_thru = NONE | COINCIDENT | INSIDE | OUTSIDE |
ALL, //optional
output_layer = LAYER1 | LAYER2, //optional
output_type = FAIL | POINT_TO_POINT, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the enclosed input edge or polygon layer.
layer2
Required. Specifies the enclosing edge or polygon layer against which the layer1 layer
is checked.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
type
Optional. Specifies the corner types included in the spacing checked on layer1 and
layer2, respectively. For example, CONCAVE_TO_EDGE checks between concave corners
on layer1 and edges on layer2. By default, the IC Validator tool selects all types.
❍ CONCAVE_TO_CONCAVE. Specifies that the check-zone boundary is controlled by the
boundary argument.
angle
Optional. Specifies the angles of the corners that are included in the spacing check. The
default is ALL.
❍ ALL. Specifies that all angles are checked.
region
Optional. Specifies the shape of the corner-check region. Intrusion into the corner-check
region results in a spacing violation. The default is RADIAL.
❍ RADIAL. Connects check-zone boundaries with a radial arc at the specified distance
from the corner. The boundary of the arc is inclusive or exclusive depending on the
distance argument.
❍ SQUARE. Defines the check region with two squares. For each corner check-zone
boundary, a square equal in size to the specified distance is placed point-touching
the corner. One edge is coincident to the boundary. For right corners, the two boxes
are coincident. The far boundaries of the boxes are inclusive or exclusive depending
on the distance argument.
boundary
Optional. For convex-to-convex and concave-to-concave measurements, specifies
whether the corner check-zone boundaries are exclusive or inclusive. The default is
EXCLUSIVE.
convex_to_concave_boundary
Optional. For convex-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. The default is EXCLUSIVE.
edge_endpoints
Optional. Specifies the edge endpoints measured. The default is CORNER.
Note:
This argument is used only when an input layer is an edge layer.
■ If layer1 is an edge layer, then the argument applies to layer1.
■ If layer2 is an edge layer, then the argument applies to layer2.
■ If layer1 and layer2 are edge layers, then the argument applies to both layers.
❍ CORNER. Checks only the endpoints that form a corner.
❍ ALL. Checks all endpoints, including those that have no adjacent edge.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Measures corners from polygons that are on the same net.
connect_sequence
Optional. Specifies the connect database. This database must be a valid connect
database when the connectivity argument is SAME_NET or DIFFERENT_NET.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
❍ COINCIDENT. Looks through outside coincident edges from layer2, the enclosing
layer.
❍ INSIDE. Looks inside layer1, the enclosed layer.
output_layer
Optional. Specifies the layer whose edges are output for the violations. The default is
LAYER1.
output_type
Optional. Specifies the edge types that are output. The default is FAIL.
❍ FAIL. Specifies that the portions of the edges that fall within the check region are
output.
❍ POINT_TO_POINT. Specifies that violations are output as an edge connecting the two
corners that are in violation. Edge endpoints are ordered from layer1 to layer2.
POINT_TO_POINT creates an orphan edge layer.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
covered_by()
enclose_corner()
not_covered_by()
Syntax
enclose_edge(
layer1 =
data_layer,
layer2 =
data_layer,
distance =
doubleconstraint, //optional
extension =
NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE, //optional
extension_distance = double, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR}, //optional
intersecting = {TOUCH, ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
from_layer = LAYER1 | LAYER2 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | COINCIDENT | RELATED_COINCIDENT |
INSIDE | OUTSIDE | NOT_ADJACENT |
NOT_CONTAINED | ALL, //optional
look_thru_count = integerconstraint, //optional
look_thru_from_layer = LAYER1 | LAYER2 | ALL, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH, INSIDE, OUTSIDE, CROSS},
//optional
output_layer = LAYER1 | LAYER2, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
output_type = FAIL | CENTERLINE,
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
not_enclose_edge(
layer1 =
data_layer,
layer2 =
data_layer,
distance =
doubleconstraint, //optional
extension =
NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE, //optional
extension_distance = double, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR}, //optional
intersecting = {TOUCH, ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
from_layer = LAYER1 | LAYER2 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | COINCIDENT | RELATED_COINCIDENT |
INSIDE | OUTSIDE | NOT_ADJACENT |
NOT_CONTAINED | ALL, //optional
look_thru_count = integerconstraint, //optional
look_thru_from_layer = LAYER1 | LAYER2 | ALL, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH, INSIDE, OUTSIDE, CROSS},
//optional
output_layer = LAYER1 | LAYER2, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
name = "layer_label", //optional
edge_containment = INSIDE_TO_OUTSIDE | COINCIDENT | ALL,
//optional
output_side = ALL | HIGH | LOW, //optional
break_edges = true | false //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the enclosed input edge or polygon layer.
layer2
Required. Specifies the enclosing edge or polygon layer against which the layer1 layer
is checked.
distance
Optional. Specifies the check distance. See “Constraints” on page A-4 for more
information. The default is 0.
Note:
The only constraint operators allowed are <, <=, and ==.
extension
Optional. Specifies the extension of the check region, beyond the endpoints of the edge
being checked. The default is RADIAL.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. The edges reported have a length equal to the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance argument value with a radial curve. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance argument value with a square. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance argument value with a rectangle. The boundary of the check
region is inclusive or exclusive depending on the constraint of the distance value.
Figure 2-128 and Figure 2-129 show the effect of the extension argument settings.
Figure 2-128 extension Argument Example
RECTANGLE EDGE
❍ EDGE. Forms the check region by extending the edges using the
extension_distance argument value, and creating right-angle boundaries at the
extended endpoints based on the distance constraint. The right-angle boundaries of
the check region are exclusive. The far boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the edges that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ TOUCH. Creates a violation where the outside of the enclosed layer touches the inside
of the enclosing layer. There is no measurement in this case.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
Figure 2-133 shows the effect of the projection argument settings.
Figure 2-133 projection Argument Example
IN ON OUT
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
❍ The orientation argument cannot contain PERPENDICULAR.
❍ The intersecting argument cannot contain PERPENDICULAR.
❍ The corner_configuration argument cannot be CORNER_TO_CORNER.
❍ The extension argument must be NONE.
❍ The projection argument must contain IN.
Note:
See the cumulative_projection_length argument for more information.
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
from_layer
Optional. Specifies the layer that is used to create check regions. The default is ALL.
❍ LAYER1. Specifies that only layer1 edges create check regions.
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
CORNER_TO_CORNER CORNER_TO_CORNER_OR_EDGE
CORNER_TO_EDGE NOT_CORNER
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
❍ COINCIDENT. Looks through outside coincident edges from layer2, the enclosing
layer.
❍ RELATED_COINCIDENT. Uses COINCIDENT if the two input layers have the same layer
ancestry; otherwise, NONE is used.
❍ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not look
through any edges that share endpoint X with edge A. This setting avoids false
violations that might be reported when the look_thru argument is ALL.
Note:
When the edge_containment argument is not ALL, the NOT_ADJACENT behavior
is changed.
After filtering edges by edge_containment, when two checked edges do not
project onto each other, an adjacent edge of the extension past the endpoint of
one checked edge can block the extension check. If the adjacent edge fully blocks
the shape of the extension violation, then the extension violation is not reported.
The extension is not measured.
❍ NOT_CONTAINED. Looks through all edges, except polygons or edges that contain the
projection. See the NOT_CONTAINED option of the look_thru argument of the
enclose() function for exceptions and an example.
❍ ALL. Looks through all edges.
Figure 2-138 shows the effect of the look_thru argument settings.
Figure 2-138 look_thru Argument Example
NONE COINCIDENT
layer1
layer2
Result
Areas shown
INSIDE OUTSIDE ALL for illustration
look_thru_count
Optional. Specifies the number of edges that must be looked through for a measurement
to occur. Edges coincident to the edge being measured are not included in the count.
The value must be nonnegative. See “Constraints” on page A-4 for more information.
The default is >=0, which means the count is ignored.
Note:
Use this argument only when the extension argument is NONE and the look_thru
argument is ALL.
look_thru_from_layer
Optional. Controls which edges are counted for the look_thru_count argument. The
default is ALL.
❍ LAYER1. Counts only layer1 edges.
layer1
layer2
Result
Areas shown
ALL, count3 ALL, count2 for illustration
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
Figure 2-140 shows the effect of the extension_look_past argument settings.
layer2
Result
extension_obstructions
Optional. Specifies how look_thru is processed for the check region extension. Some
endpoint violations might be undesirable even though they fit the look_thru setting.
This argument specifies how aggressively the check finds and refines endpoint violations
in accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
Figure 2-141 shows the effect of the extension_obstructions argument settings.
Figure 2-141 extension_obstructions Argument Example
layer1
layer2
Result
POINT_TO_POINT ALL
Areas shown
for illustration
relational
Optional. Specifies additional violations for the check outputs. By default, the IC Validator
tool does not report additional violations.
❍ POINT_TOUCH. Creates a violation where there is an outside-to-inside point touch.
The length of the violation is equal to the maximum of the distance constraint, with
a minimum value of two times the internal resolution. The internal_resolution
argument of the resolution_options() function sets the internal resolution.
Connectivity is considered.
output_layer
Optional. Specifies the layer that is output for the violations. The default is LAYER1.
❍ LAYER1. Specifies that only layer1 edges are output.
layer1
layer2
Result
LAYER1 LAYER2
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
cumulative_projection_length
Optional. Specifies how the projection length is measured when there are multiple
violations. See the projection_length argument for more information. The default is
NONE.
See the cumulative_projection_length argument of the enclose() function for
more information about the SAME_EDGE and JOGGING_EDGE options.
❍ NONE. Measures each violation separately.
output_type
Optional. Specifies the type of output generated. The default is FAIL.
Note:
The output_type argument is not available for the not_enclose_edge() function.
❍ FAIL. Specifies that the portions of the edges that fall within the check region are
output.
❍ CENTERLINE. Outputs spacing violations as lines at the center of the projection
region. A line is two points connected with no specific order. The midpoints of the
sides of the violation region are used to create the lines. When the output_type
argument is CENTERLINE, only parallel spacing is supported.
Figure 2-145 shows the effect of the output_type argument settings.
Figure 2-145 output_type Argument Example
layer1
layer2
Result
FAIL CENTERLINE
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
❍ INDIVIDUAL. Measures edges if either edge matches the projection criteria as
specified in the projection argument.
❍ MUTUAL. Measures edges only if both edges match the following projection criteria:
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
❍ MUTUAL_NON_ORTHOGONAL.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The look_thru argument is ignored, except when it is NOT_CONTAINED
and two intersecting edges are cut. The connectivity and orthogonal arguments
are not ignored.
Figure 2-148 shows an example of using the intersection_angle argument.
green = enclose_edge(blue, red, distance < 1.0, extension = RADIAL,
orientation = {}, intersecting = {},
intersection_angle < 180);
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
edge_containment
Optional. Filters edges, based on the topological relation of the two layers, before the
tool makes any measurements. Edges are broken into segments that are inside, outside,
inside coincident, and outside coincident with the other layer. The default is ALL.
Note:
When the edge_containment argument is not ALL, the break_edges argument is
forced to true.
❍ INSIDE_TO_OUTSIDE. Includes the following measurements:
If layer2 is an edge, those layer1 edges that are neither inside coincident nor
outside coincident with layer2 are included in the measurements.
■ For layer2 edges,
If layer1 is a polygon, only those layer2 edges that are outside and outside
coincident with layer1 are included in the measurements.
If layer1 is an edge, those layer2 edges that are not inside coincident with
layer1 are included in the measurements.
Important:
Edges that are inside coincident with the other layer are included in the
measurement for touch violations.
See Figure 2-126 for an example.
❍ COINCIDENT. Includes layer1 edges that are outside coincident.
output_side
Optional. Specifies to output only the check edges on the specified side of any violation
projected from an orthogonal edge. The default is ALL.
Note:
To use the HIGH or LOW options,
■ The direction argument needs to be HORIZONTAL or VERTICAL.
■ The extension argument needs to be NONE.
❍ ALL. Outputs all check edges
■ For any violation projected from a horizontal edge, only the edge on the top side
is output.
■ For any violation projected from a vertical edge, only the edge on the right side is
output.
❍ LOW. Outputs all check edges.
■ For any violation projected from a horizontal edge, only the edge on the bottom
side is output.
■ For any violation projected from a vertical edge, only the edge on the left side is
output.
Figure 2-149 shows the results when the direction argument is HORIZONTAL. For
example,
Result
ALL HIGH LOW
Figure 2-150 shows the results when the direction argument is VERTICAL. For
example,
Result = external2_edge(green, gray, extension = NONE,
direction = VERTICAL, output_side = ALL);
Result
ALL HIGH LOW
Figure 2-151 shows the results when projection_mode argument is ASYMMETRIC and
the direction argument is HORIZONTAL. For example,
Result = external2_edge(green, gray, extension = NONE,
projection_mode = ASYMMETRIC, direction = VERTICAL,
output_side = ALL);
Result
ALL HIGH LOW
Figure 2-152 shows the results when projection_mode argument is ASYMMETRIC and
the direction argument is VERTICAL. For example,
Result = external2_edge(green, gray, extension = NONE,
projection_mode = ASYMMETRIC, direction = VERTICAL,
output_side = ALL);
break_edges
Optional. Controls edge breaking behavior for two-layer spacing checks. The segments
resulting from the edge breaking are processed individually by the edge filters and
spacing constraints. The default is false.
❍ true. Enables edge breaking behavior. Edges are broken into individual segments as
follows:
■ Specifies that edges are broken at every point of intersection with the other layer.
■ Specifies that coincident edges are broken at the point where they become
not-coincident.
❍ false. Specifies that edges are not broken.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Minimum spacing of 0.5; touch interactions are allowed
enclose_edge(layer1 = met1, layer2 = met2, distance <= 0.5 );
Minimum spacing of 0.5 for met1 to met2; measures only parallel edges
enclose_edge(layer1 = met1, layer2 = met2, distance < 0.5,
orientation = {PARALLEL});
Minimum spacing of 0.5 for met1 to met2; measures only parallel angled edges
enclose_edge(layer1 = met1, layer2 = met2, distance < 0.5,
orthogonal = BOTH, orientation = {PARALLEL});
See Also
covered_by()
enclose()
not_covered_by()
enclose_error()
The enclose_error() function measures outside-to-inside spacing between two layers
based on the specified distance. The arguments define various geometric conditions for
measuring the distance between the layer edges. The output is unmerged errors.
Derived error layers are unformatted. These layers can be used by the drc_features()
function. The layers can be formatted and merged into normal layers using the
error_merge() and error_merge_edge() functions.
Syntax
enclose_error(
layer1 = data_layer,
layer2 = data_layer,
distance = doubleconstraint,
extension = NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE,
extension_distance = double, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR}, //optional
intersecting = {TOUCH, ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
from_layer = LAYER1 | LAYER2 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | COINCIDENT | RELATED_COINCIDENT |
INSIDE | OUTSIDE | NOT_ADJACENT |
NOT_CONTAINED | ALL, //optional
look_thru_count = integerconstraint, //optional
look_thru_from_layer = LAYER1 | LAYER2 | ALL, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
name = "layer_label", //optional
edge_containment = INSIDE_TO_OUTSIDE | COINCIDENT | ALL,
//optional
break_edges = true | false, //optional
relational = {POINT_TOUCH, INSIDE, OUTSIDE, CROSS}
//optional
);
Returns
error layer or error result
Arguments
layer1
Required. Specifies the enclosed input edge or polygon layer.
layer2
Required. Specifies the enclosing edge or polygon layer against which the layer1 layer
is checked.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
extension
Required. Specifies the extension of the check region, beyond the endpoints of the edge
being checked.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. The edges reported have a length equal to the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function.
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the edges that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
See the examples for the orientation argument of the enclose() function for more
information.
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ TOUCH. Creates a violation where the outside of the enclosed layer touches the inside
of the enclosing layer. There is no measurement in this case.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
See the examples for the projection argument of the enclose() function for more
information.
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
from_layer
Optional. Specifies the layer that is used to create check regions. The default is ALL.
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
❍ COINCIDENT. Looks through outside coincident edges from layer2, the enclosing
layer.
❍ RELATED_COINCIDENT. Uses COINCIDENT if the two input layers have the same layer
ancestry; otherwise, NONE is used.
❍ INSIDE. Looks inside layer1, the enclosed layer.
❍ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not look
through any edges that share endpoint X with edge A. This setting avoids false
violations that might be reported when the look_thru argument is ALL.
Note:
When the edge_containment argument is not ALL, the NOT_ADJACENT behavior
is changed.
After filtering edges by edge_containment, when two checked edges do not
project onto each other, an adjacent edge of the extension past the endpoint of
one checked edge can block the extension check. If the adjacent edge fully blocks
the shape of the extension violation, then the extension violation is not reported.
The extension is not measured.
❍ NOT_CONTAINED. Looks through all edges, except polygons or edges that contain the
projection. See the NOT_CONTAINED option of the look_thru argument of the
enclose() function for exceptions and an example.
look_thru_count
Optional. Specifies the number of edges that must be looked through for a measurement
to occur. Edges coincident to the edge being measured are not included in the count.
The value must be nonnegative. See “Constraints” on page A-4 for more information.
The default is >=0, which means the count is ignored.
Note:
Use this argument only when the extension argument is NONE and the look_thru
argument is ALL.
look_thru_from_layer
Optional. Controls which edges are counted for the look_thru_count argument. The
default is ALL.
❍ LAYER1. Counts only layer1 edges.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
extension_obstructions
Optional. Specifies how look_thru is processed for the check region extension. Some
endpoint violations might be undesirable even though they fit the look_thru setting.
This argument specifies how aggressively the check finds and refines endpoint violations
in accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
See the examples for the extension_obstructions argument of the enclose()
function for more information.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
❍ INDIVIDUAL. Measures edges if either edge matches the projection criteria as
specified in the projection argument.
❍ MUTUAL. Measures edges only if both edges match the following projection criteria:
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
❍ MUTUAL_NON_ORTHOGONAL.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The look_thru argument is ignored, except when it is NOT_CONTAINED
and two intersecting edges are cut. The connectivity and orthogonal arguments
are not ignored.
See the intersection_angle argument of the enclose() and enclose_edge() and
not_enclose_edge() functions for examples.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
edge_containment
Optional. Filters edges, based on the topological relation of the two layers, before the
tool makes any measurements. Edges are broken into segments that are inside, outside,
inside coincident, and outside coincident with the other layer. The default is ALL.
Note:
When the edge_containment argument is not ALL, the break_edges argument is
forced to true.
❍ INSIDE_TO_OUTSIDE. Includes the following measurements:
break_edges
Optional. Controls edge breaking behavior for two-layer spacing checks. The segments
resulting from the edge breaking are processed individually by the edge filters and
spacing constraints.The default is false.
❍ true. Enables edge breaking behavior. Edges are broken into individual segments as
follows:
■ Specifies that edges are broken at every point of intersection with the other layer.
■ Specifies that coincident edges are broken at the point where they become
not-coincident.
❍ false. Specifies that edges are not broken.
See Figure 2-127 for an example.
relational
Optional. Specifies additional violations for the check outputs. By default, the IC Validator
tool does not report additional violations.
❍ POINT_TOUCH. Creates a violation where there is an outside-to-inside point touch.
The length of the violation is equal to the maximum of the distance constraint, with
a minimum value of two times the internal resolution. The internal_resolution
argument of the resolution_options() function sets the internal resolution.
Connectivity is considered.
When the edge_containment argument is specified, the POINT_TOUCH argument
creates a violation by using an intersection angle for all edges that touch any
point-touch point. The angle of the intersection angle must be greater than or equal
to 0 and less than 180. When the edge_containment argument is specified, the
point_touch_shape and shape_size arguments are ignored.
The POINT_TOUCH argument is not available for edge input.
❍ INSIDE. Reports as violations the layer2 edges that are inside layer1. Applies only
when layer1 is a polygon layer. Connectivity is considered.
❍ OUTSIDE. Reports as violations the layer1 edges that are outside layer2. When
layer2 is an edge layer, this argument reports outside coincidence. Connectivity is
not considered for this argument.
❍ CROSS. Creates a violation where layer1 and layer2 edges cross. Applies only
when layer1 and layer2 are polygon layers. Connectivity is considered. When this
argument is specified, the intersection_angle argument is ignored.
Figure 2-153 shows the effect of the relational argument settings.
Figure 2-153 relational Argument Example
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
To set a minimum spacing of 0.5:
ext_errs = enclose_error(layer1 = met1, layer2 = met2,
distance <= 0.5, extension = RADIAL
);
See Also
drc_features()
enclose()
enclose_corner()
enclose_corner_edge()
enclose_edge() and not_enclose_edge()
Syntax
enclosing(
layer1 = polygon_layer,
layer2 = polygon_layer,
count = integerconstraint, //optional
include_touch = POINT | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
count_parity = ALL | ODD | EVEN, //optional
count_by = SHAPE | NET, //optional
connect_sequence = connect_database, //optional
name = "layer_label" //optional
);
not_enclosing(
layer1 = polygon_layer,
layer2 = polygon_layer,
count = integerconstraint, //optional
include_touch = POINT | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
count_parity = ALL | ODD | EVEN, //optional
count_by = SHAPE | NET, //optional
connect_sequence = connect_database, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer from which polygons are selected.
layer2
Required. Specifies the polygon layer against which the layer1 layer is checked.
count
Optional. Specifies the number of layer2 polygons that must be enclosed. See
“Constraints” on page A-4 for more information. The default is >0.
Figure 2-154 and Figure 2-155 show the effect of the count argument settings for the
enclosing() and not_enclosing() functions.
layer2
count = 1 count > 1
Result
layer2
count = 1 count > 1
Result
include_touch
Optional. Specifies the inside touches that are included in the definition of fully enclosed
for layer2 polygons. The default is ALL.
❍ POINT. Considers point touch as enclosed.
layer2
ALL POINT
Result
layer2
ALL POINT
Result
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
count_parity
Optional. Specifies the parity of the number of layer2 polygons that must touch layer1
polygons. The default is ALL.
❍ EVEN. Specifies that the layer1 polygons must have an even number of interactions
with layer2 data.
❍ ODD. Specifies that the layer1 polygons must have an odd number of interactions
with layer2 data.
❍ ALL. Does not check the parity based on the number of interactions.
The count argument can be used with the count_parity argument. For example, when
count = [4, 9] and count_parity is EVEN, the layer1 polygons that interact with four,
six, or eight layer2 polygons are selected.
Figure 2-158 shows an example of two interacting layers.
Figure 2-158 count_parity Argument Example
L1
L2
L1
L2
result
count_by
Optional. Provides selection by net feature. The default is SHAPE.
❍ NET. Selects a layer1 polygon if it encloses with distinct nets on the layer2 layer the
number of times specified by the count argument.
❍ SHAPE. Selects a layer1 polygon if it encloses the layer2 layer the number of times
specified by the count argument.
Refer to Figure 2-160 for the following examples.
Figure 2-160 count_by Argument Example
L1
L2
❍ Only net 2 is fully enclosed by layer L1. It is counted two times. Therefore, polygon A
meets the count=2 restriction.
enclosing(L1, L2, count==2)
connect_sequence
Optional. Specifies the connect database that has the layer2 connection. The database
is used when the count_by argument is NET.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In the example shown in Figure 2-162, all data from layer2 that encloses the polygons of
layer1 is selected.
Result = layer2 enclosing layer1;
layer2
All arguments at default values
Result
In the example shown in Figure 2-162, all data from layer2 that does not enclose the
polygons of layer1 is selected.
layer2
See Also
covered_by()
enclose()
not_covered_by()
equiv_options()
The equiv_options() function specifies user-intended pairings of cells in the schematic
and layout netlists for comparison. Additional arguments specify instances to be deleted,
nets to be equated, static nets and devices, as well as schematic swappable ports.
Note:
You can use a -e command-line option to add equivalence options that you have defined
in a separate file. See the Command-Line Options section in the “IC Validator Basics”
chapter of the IC Validator User Guide for more information.
The equiv.run file, which is written by IC Validator, lists the equivalence cells that were used
during the run. See Equivalence Files in the Output Files chapter of the IC Validator User
Guide for more information.
This function, or a #include directive pointing to a file containing this function, must be
called before assign functions.
Syntax
equiv_options(
equiv_cells = {{schematic_cell = "string",
layout_cell = "string",
ignore = true | false},
...},
delete_layout_instances = {"string", ...}, //optional
delete_schematic_instances = {"string", ...}, //optional
equate_nets = {{schematic_net = "string",
layout_net = "string"},
...}, //optional
schematic_static_devices = {"string", ...}, //optional
schematic_static_nets = {"string", ...}, //optional
layout_static_devices = {"string", ...}, //optional
layout_static_nets = {"string", ...}, //optional
static_ports = NONE | ALL_PORTS, //optional
schematic_swappable_ports = {{"string", ...}, ...} //optional
);
Returns
void
Arguments
equiv_cells
Required. Specifies a list of schematic and layout cell name pairs either used or ignored
as equivalence points for comparison.
delete_layout_instances
Optional. Specifies the ignored instances in the layout netlist. For each instance name in
the list, that instance and all data hierarchically beneath it are deleted.
delete_schematic_instances
Optional. Specifies the ignored instances in the schematic netlist. For each instance
name in the list, that instance and all data hierarchically beneath it are deleted.
equate_nets
Optional. Specifies a list of the net names in the schematic cell to equate with net names
in the layout cell.
schematic_static_devices
Optional. Specifies the schematic devices that are neither merged nor filtered.
schematic_static_nets
Optional. Specifies the schematic nets for which neither merging nor filtering is
performed if it would cause the nets to be removed.
layout_static_devices
Optional. Specifies the layout devices that are neither merged nor filtered.
layout_static_nets
Optional. Specifies the layout nets for which neither merging nor filtering is performed if
it would cause the nets to be removed.
static_ports
Optional. Specifies whether the ports are static for cells below the top cell. Ports on the
top cell are always static. The default is NONE.
❍ NONE. Uses the settings of the push_down_pins and remove_dangling_net
arguments of the compare() function to determine whether the ports of the
equivalences specified by the equiv_cells argument are merged or removed.
❍ ALL_PORTS. Does not use the settings of the push_down_pins and
remove_dangling_net arguments of the compare() function to determine whether
the ports of the equivalences specified by the equiv_cells argument are merged or
removed. That is, all ports of the equivalences specified by the equiv_cells
argument are static and neither merged nor removed.
schematic_swappable_ports
Optional. Specifies a list of the port names that are treated as being logically equivalent
for comparison purposes at higher levels of the design hierarchy.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
equiv_options({{"schCellName", "layCellName"}});
equiv_options({{"schCellName", "layCellName"}},
schematic_static_devices = {"DEV1", "DEV2"},
schematic_static_nets = {"VSS_1", "VSS_2"},
layout_static_devices = {"dev1", "dev2"},
layout_static_nets = {"vss_1", "vss_2"}
);
equiv_options({{"schCellName", "layCellName"}},
equate_nets = {{"VSS", "vss"},},
schematic_swappable_ports = {{"port1","port2"},
{"port3","port4"}}
);
In the following example, schematic cell names containing the substring “scell” and layout
cell names containing the substring “lcell” are paired to form equivalence points for
comparison.
equiv_options({{"*scell*", "*lcell*"}});
In the following example, cell names that begin with “cell” followed by any single character
are paired to form equivalence points for comparison.
equiv_options({{"cell?", "cell?"}});
In the following example, cell names that begin with “cell” followed by any single integer digit
from 0 to 9 are paired to form equivalence points for comparison.
equiv_options({{"cell[0-9]", "cell[0-9]"}});
In the following example, all equivalence pairings of schematic cell “scell” matched to any
layout cell name are ignored.
equiv_options({{"scell", "*", ignore=true}});
See Also
check_property()
compare()
filter()
match()
merge_parallel()
merge_series()
lvs_options()
recalculate_property()
short_equivalent_nodes()
error_merge()
The error_merge() function converts an error layer to a polygon layer.
Syntax
error_merge(
layer1 = error_layer,
output_type = REGION | CENTERLINE | EXTENTS, //optional
width = double, //optional
line_touch_shape = OUTSIDE | INSIDE | BOTH, //optional
name = "layer_label", //optional
point_touch_shape = EXTENTS | SQUARE, //optional
shape_size = double //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the error layer from which polygons are selected.
output_type
Optional. Specifies the type of output generated. The default is REGION.
❍ REGION. Reports violations as polygons, which are generated by connecting the
violation edges.
❍ CENTERLINE. Outputs spacing violations as an expanded line at the center of the
projection region. The midpoints of the sides of the violation region form a line that is
expanded in both directions by width/2. When the output_type argument is
CENTERLINE, only parallel spacing is supported.
❍ EXTENTS. Reports violations as boxes, oriented along the violation edges, that
contain the extents of the violation. This setting is used to avoid the creation of
odd-angle data normally seen when the extension argument is RADIAL or SQUARE.
The following violations require special consideration when generating output shapes:
❍ When set to REGION, point-to-point violations are reported as rectangles by
expanding the line connecting the two points by the width argument value on both
sides.
❍ When set to CENTERLINE, point-to-point violations are reported as squares, centered
on the midpoint of the line connecting the two points, with a dimension equal to the
width argument value. Violations are oriented along the line.
❍ When set to EXTENTS, point-to-point violations are reported the same as when set to
REGION.
See the examples for the output_type argument of the enclose() function for more
information.
width
Optional. Specifies the value used to expand a single edge violation into a polygon,
including perpendicular spacing violations that are a single edge. The minimum value for
the argument is the internal resolution. The internal_resolution argument of the
resolution_options() function sets the internal resolution. The default is .001.
See the examples for the width argument of the enclose() function for more
information.
line_touch_shape
Optional. Specifies how to expand a line-touch edge violation into a polygon. Use the
line_touch_shape argument only with error layers that come from a two-layer spacing
check. The default is OUTSIDE.
❍ OUTSIDE. Outputs a line-touch polygon outside of the dimensional function layer1
polygon. The output polygon size equals the value of the width argument.
❍ INSIDE. Outputs a line-touch polygon inside of the layer1 layer. The output polygon
size equals the value of the width argument.
❍ BOTH. Outputs a line touch polygon inside and outside of the layer1 layer. The total
output size is 2*width.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
point_touch_shape
Optional. Specifies the shapes that are generated for point touches. The default is
EXTENTS.
❍ EXTENTS. Specifies that the length of the violation is equal to the maximum of the
distance constraint, with a minimum value of two times the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution. The violation region is approximated with edges that are either
perpendicular, parallel, or at a 45-degree angle, to the edges that form the point
touch, to avoid creating odd-angle data.
❍ SQUARE. Specifies that a square is centered on the point touch. The sides of the
square are horizontal and vertical. The size of the square is determined by the
shape_size argument.
shape_size
Optional. Specifies the length of the sides of the squares generated when
point_touch_shape = SQUARE. The default is twice the maximum of the spacing
distance. This value must be positive. It is rounded to the nearest even multiple of the
internal resolution, with a minimum value of twice the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
error_merge_edge()
error_merge_edge()
The error_merge_edge() function converts an error layer to an edge layer.
Syntax
error_merge_edge(
layer1 = error_layer,
output_layer = LAYER1 | LAYER2, //optional
output_type = FAIL | POINT_TO_POINT, //optional
edge_to_edge_output_type = FAIL | CENTERLINE, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the error layer from which polygons are selected.
output_layer
Optional. Specifies the layer that is output for the violations. The default is LAYER1.
❍ LAYER1. Specifies that only layer1 edges are output.
output_type
Optional. Specifies the edge types that are output. The default is FAIL.
Note:
The output_type argument is applicable only to corner errors, that is, those errors
that come from a *corner_error() function.
❍ FAIL. Specifies that the portions of the edges that fall within the check region are
output.
❍ POINT_TO_POINT. Specifies that violations are output as an edge connecting the two
corners that are in violation. Edge endpoints are ordered from layer1 to layer2.
POINT_TO_POINT creates an orphan edge layer.
edge_to_edge_output_type
Optional. Specifies the type of output generated. The default is FAIL.
❍ FAIL. Specifies that the portions of the edges that fall within the check region are
output.
❍ CENTERLINE. Specifies that spacing violations are output as a line at the center of the
projection region. A line is two points connected with no specific order. The midpoints
of the sides of the violation region are used to create the lines.
Only parallel spacing is supported, and those errors must come from
external1_error(), external2_error(), internal1_error(),
internal2_error(), or enclose_error().
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
err_polygons = error_merge(external_errs);
See Also
error_merge()
error_options()
The error_options() function specifies the error output for the design being verified.
If you are classifying DRC errors, use these arguments:
match_errors
mustfix_errors
comment_match_delimiter
See the DRC Error Classification chapter in the IC Validator User Guide for more
information.
Syntax
error_options(
error_limit_per_check = integer, //optional
db_path = "string", //optional
pcell_list = {"string", ...}, //optional
create_vue_output = true | false, //optional
comment_match_delimiter = "string", //optional
match_errors = {{db_name = "string",
db_path = "string",
suppress_matched_errors = {"string", ...},
report_unmatched_errors = true | false,
missing_db = ERROR | IGNORE},
...}, //optional
mustfix_errors = {{violation_comments = {"string", ...},
cells = {"string", ...}},
...}, //optional
report_layout_errors = {HIERARCHICAL, TOP}, //optional
report_empty_violations = true | false, //optional
report_flat_violation_count = true | false, //optional
clean_classifications = {"string", ...}, //optional
match_errors_processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
create_lvs_short_output = true | false, //optional
demagnify_errors = true | false, //optional
violation_options = {{violation_comments = {"string", ...},
match_errors_processing_mode =
CELL_LEVEL | HIERARCHICAL |
UNSPECIFIED, //optional
match_errors_tolerance = double,
...}, //optional
rule_name_delimiter = {search_string = "string",
ignore_case = true | false}, //optional
report_error_details = true | false, //optional
flatten_violations = {"string", ...}, //optional
flatten_violations_limit = integer, //optional
match_errors_tolerance = double, //optional
match_renamed_cells = USE_NEW_NAME | USE_ORIGINAL_NAME,
//optional
west
= double,
//optional
directional_halo = {outside_north = double,
inside_north = double,
outside_south = double,
inside_south = double,
outside_east = double,
inside_east = double,
outside_west = double,
inside_west = double},
//optional
partially_exploded_cells = KEEP | EXPLODE //optional
);
Returns
void
Arguments
error_limit_per_check
Optional. Specifies the maximum number of errors, per function, stored in the error
database and the LAYOUT_ERRORS file. Setting this argument to ERROR_LIMIT_MAX
causes all errors up to a tool-defined maximum limit to be stored. The limit can be set
above the tool-defined maximum limit by giving a specific number. However, setting the
limit above the tool-defined maximum might result in decreased performance and
increased disk usage for large numbers of errors, and therefore is not recommended.
Setting it to 0 suppresses storage of all errors. The default is 100.
Note:
If error_limit_per_check = 0 and errors were found during the run, the
LAYOUT_ERRORS file notes that errors were found but error output was
suppressed.
db_path
Optional. Specifies the location where the error database (PYDB) is stored. The default
is "run_details/pydb". To change the directory, use the run_details_path argument
of the run_options() function.
The error database file name is PYDB_top-cell.
pcell_list
Optional. Specifies the list of strings to control the output of errors for parameterized
cells, pcells. If a cell matches a specified string, any error that occurs in that cell is
exploded and reported in its parent cell. String matching using metacharacters is
allowed. See “String Matching” on page A-11 for more information.
create_vue_output
Optional. Specifies if output for VUE is generated. When the create_vue_output
argument is true, the IC Validator tool generates all output data required to run VUE.
You can also enable generation of VUE output with the -vue command-line option. The
default is false.
comment_match_delimiter
Optional. Specifies a delimiter string for violation comment matching in imported error
classification databases. If a delimiter string is specified, a violation comment from the
runset is considered equivalent to any violation in the error classification database that
matches up to the first occurrence of the delimiter string.
match_errors
Optional. Lists the error classification databases to import for DRC error classification
matching. The order of this list specifies the match precedence. By default, the
IC Validator tool does not import any error classification databases.
Note:
Each error classification database that is specified requires its own server process.
Therefore, you must ensure that your shell process limit is high enough. Enter “limit
maxproc” in your UNIX shell to obtain the maximum number of processes for the
shell. A guideline is to ensure that the maximum process limit is three times the
number of the error classification databases used in the run.
See the Database Naming Conventions section in the DRC Error Classification chapter
of the IC Validator User Guide for more information.
❍ db_name. Required. Specifies the error classification database name.
mustfix_errors
Optional. Lists the violations and cells that must be fixed. Any errors that occur in a
must-fix violation or cell cannot be classified as Waive or Ignore. By default, no violations
or cells are must-fix.
❍ violation_comments. Optional. Specifies the strings for the violation comments that
are must-fix. String matching using metacharacters is allowed. See “String Matching”
on page A-11 for more information. By default, all violations must be fixed.
❍ cells. Optional. Specifies the strings for the cell names that are must-fix. String
matching using metacharacters is allowed. See “String Matching” on page A-11 for
more information. By default, all cells must be fixed.
report_layout_errors
Optional. Specifies the layout error reports that are generated at the end of the run. The
default is HIERARCHICAL, which generates only the hierarchical report.
If you want to generate both files, list both options:
report_layout_errors = {HIERARCHICAL, TOP} //Creates LAYOUT_ERRORS and
//TOP_LAYOUT_ERRORS reports
Note:
TOP is not a flat reporting option. Instead of reporting errors one time inside a
lower-level cell, errors are reported one time in the top cell over a single instance
of the lower-level cell. Errors are not reported for all instances of a lower-level cell.
report_empty_violations
Optional. Specifies if the ERROR SUMMARY section of the LAYOUT_ERRORS file
includes rules that produced zero errors as well as rules that were not executed. The
following command-line options can cause rules to not execute: -il, -iln, -svn, -svc,
-uvn, -uvc, -sfn, -ufn, and -ro. The default is false.
❍ true. Specifies that the ERROR SUMMARY section of the LAYOUT_ERRORS file
reports rules that have zero violations as well as rules that were not executed.
❍ false. Does not report rules that have zero violations.
For example,
952 Rule1
953 external2 ................................. 0 violations found.
954 and ....................................... 0 violations found.
955
956 Rule2
957 internal1 ................................. 0 violations found.
958
959 Rule3 Not executed.
960
961 Rule4 Not executed.
962
963 Rule5 Not executed.
report_flat_violation_count
Optional. Specifies if the ERROR SUMMARY section of the LAYOUT_ERRORS file
includes a flat count of the violations. The default is false.
The flat count is the number of errors in a cell multiplied by the number of flat placements
of that cell. The flat count in the LAYOUT_ERRORS report is the count before the error
limit per check is applied.
Note:
This does not flatten any of the error coordinates.
❍ true. Specifies that the ERROR SUMMARY section of the LAYOUT_ERRORS file
reports the flat count.
❍ false. Does not report the flat count.
clean_classifications
Optional. Determines how error classification affects the clean status of the layout
reported in the LAYOUT_ERRORS file. If all reported errors are of the classifications in
this list, the LAYOUT_ERRORS file reports the layout as clean. If there are any
unclassified errors or if there are any errors whose classification is not in this list, the
layout is not reported as clean.
This argument does not affect how errors are listed in the LAYOUT_ERRORS file; it
affects only the clean status of the layout. The default is an empty list, which means that
any reported error causes an error result.
The classifications are:
Ignore
Waive
Watch
Fixed
Unmatched
Note:
These classifications are the same as those listed in the Error Classifications table in
the Running IC Validator Within VUE chapter of the IC Validator VUE User Guide,
except that Error is not valid as a clean classification.
This list of classifications applies to all errors including those reported from the
text_net() function and error classifications from a cPYDB. See the
error_classifications argument of the text_net() function for more information.
For example,
error_options(clean_classifications = {"Ignore", "Watch"};
match_errors_processing_mode
Optional. Specifies if the IC Validator tool uses cell level or hierarchical processing to
match classified violations in an error classification database. The HIERARCHICAL mode
was added after the CELL_LEVEL mode. While it is not the default, it is the recommended
setting. The default is CELL_LEVEL.
❍ CELL_LEVEL. Matches individual errors from the IC Validator run with classified errors
from the cPYDB at the cell level. This is the default value.
Note:
The CELL_LEVEL mode puts restrictions on hierarchy optimization. In particular,
cells with classified errors in the cPYDB are marked as no explode. Also, setting
the flow argument of the hierarchy_auto_options() function to
ERROR_CLASSIFICATION is recommended for this mode. This setting further
restricts hierarchy optimization to ensure the best chance of matching errors.
❍ HIERARCHICAL. Hierarchically matches errors from the IC Validator run with classified
errors from the cPYDB. This mode puts no restrictions on hierarchy optimization.
Cells that have classified errors in the cPYDB are allowed to explode.
Note:
Setting the partially_exploded_cells argument of the error_options()
function to EXPLODE is recommended for HIERARCHICAL error classification,
especially for the initial IC Validator run used to create the error classification
database. Using this argument ensures that errors are reported in cells for which
the IC Validator tool has kept all placements from the original design hierarchy.
An error is considered a match for a classified error from the cPYDB if the complete
hierarchically-formed shape of the errors produced by the IC Validator tool exactly
overlaps the complete hierarchically-formed shape of errors from the cPYDB with the
same classification.
Errors can also be matched individually when possible. That is, when a single error,
rather than the complete hierarchically-formed shape consisting of multiple errors,
exactly overlaps a corresponding single error in the cPYDB it is considered a match.
Conflicts when an error matches multiple cPYDB errors are resolved as follows:
■ A match within the same cell takes priority over a match from a different level of
hierarchy.
■ A match from a cPYDB specified in the match_errors argument list takes priority
over one from a cPYDB, which is specified later.
■ A match in a non-suppressed class takes priority over a match in a suppressed
class. See the suppress_matched_errors option of the match_errors
argument.
■ Any further conflict resolution is arbitrary.
create_lvs_short_output
Optional. Enables the generation of interactive LVS short finder output. A maximum of
200 shorts are reported. The default is false. See the IC Validator VUE User Guide for
more information about LVS Short Finder.
The -create_lvs_short_output command-line option also creates LVS short finder
output. With the command-line option you can specify to report only a set number of
shorts or all shorts. See the Command-Line Options section in the “IC Validator Basics”
chapter of the IC Validator User Guide for more information.
A cellname.vue file is created. The output is in the ./run_details/short_out_db directory.
demagnify_errors
Optional. Specifies if the input library magnification factor is reversed for error
coordinates in the LAYOUT_ERRORS file. (See the magnification_factor argument
of the library() function.) The default is false.
❍ true. Divides the error coordinates in the LAYOUT_ERRORS file by the input library
magnification factor. That is, the errors are found at the runset magnification, but
written to the LAYOUT_ERRORS file at the input library magnification.
❍ false. Does not divide the error coordinates in the LAYOUT_ERRORS file by the
input library magnification factor. That is, errors are found at the runset magnification
and also written to the LAYOUT_ERRORS file at the runset magnification.
violation_options
Optional. Allows global settings from the error_options() function to be overridden for
specified violation comments.
❍ violation_comments. Required. Lists the violations that these settings apply to.
String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information.
❍ match_errors_processing_mode. Optional. Specifies how errors are matched for
DRC error classification for the specified violation comments. See the
match_errors_processing_mode argument for more information about the two
modes. The default is CELL_LEVEL.
■ CELL_LEVEL. Matches individual errors from the IC Validator run with classified
errors from the cPYDB at the cell level.
■ HIERARCHICAL. Hierarchically matches errors from the IC Validator run with
classified errors from the cPYDB.
■ UNSPECIFIED. Uses the value of the match_errors_processing_mode argument
of the error_options() function. This is the default value.
❍ match_errors_tolerance. Optional. Specifies a tolerance to be used when
matching error shapes for DRC error classification. The default is to use the
match_errors_tolerance argument of the error_options() function.
rule_name_delimiter
Optional. Defines a delimiter for rule names. Use this argument to display the rule name
rather than the full violation comment in the verbose results file and in VUE. The violation
comment is truncated at the first instance of this delimiter. If the delimiter is not matched,
the entire violation comment is displayed. The violation comment might be truncated for
length; the maximum length of a violation comment is 1024 characters.
❍ search_string. Specifies the delimiter. The search string must be a GNU extended
regular expression. The default is
"[[:space:]]+:|[[:space:]]*:[[:space:]]"
That is, the default is one of the following:
■ One or more white space characters followed by a colon.
■ Zero or more white space characters followed by a colon followed by one white
space character.
❍ ignore_case. Specifies if the character case in the violation comment is considered
when matching the delimiter. The default is false.
■ true. The search is case-sensitive.
report_error_details
Optional. Specifies if violation details are reported to the LAYOUT_ERRORS and
TOP_LAYOUT_ERRORS files. The default is true.
❍ true. Reports violation details to the LAYOUT_ERRORS and
TOP_LAYOUT_ERRORS files.
❍ false. Does not report violation details to the LAYOUT_ERRORS and
TOP_LAYOUT_ERRORS files. The information is still stored in the error database
(PYDB), but only the violation summary section is written to the LAYOUT_ERRORS
file.
Note:
You can also use the -ned command-line option to set the value to false. See the
Command-Line Options section in the “IC Validator Basics” chapter of the
IC Validator User Guide for more information.
flatten_violations
Optional. Flattens the violation output under the specified cells into the specified cells.
String matching using metacharacters is allowed. See “String Matching” on page A-11 for
more information. By default, the IC Validator tool does not flatten violation output.
Note:
The flatten_violations argument can place limitations on automatic hierarchy
optimizations, which can affect performance. Avoid wildcard usage, which might
select more cells than necessary.
flatten_violations_limit
Optional. Specifies that if flattening violation output for a particular function, according to
the flatten_violations argument, increases the violation count by more than this
limit, no violation flattening is performed for that function, and a warning is reported. The
default is 1000000.
match_errors_tolerance
Optional. Specifies a tolerance in microns to be used when matching interacting
classified error shapes from the cPYDB to error shapes generated by the current
IC Validator run. The default is 0 (zero), which means that the shapes must match
exactly for the classifications to be applied.
match_renamed_cells
Optional. When the IC Validator tool renames cells while reading Milkyway, NDM, or
OpenAccess layouts to avoid conflicts between cells of the same name in different
libraries, this argument specifies whether to use the original layout name or the new
unique name when searching error classification databases for classified errors, and
when exporting classified errors using pydb_export. The default is NEW_NAME.
❍ USE_NEW_NAME. For renamed cells, the new unique name given by the tool is used for
error classification.
❍ USE_ORIGINAL_NAME. For renamed cells, the original layout name is used for error
classification.
Note:
Ensure that the contents of the cells are identical before using this argument.
classify_by_layer
Optional. Specifies error classifications to be applied based on polygon shapes.
❍ violation_comments. Required. Specifies a list of violation comments for which this
particular error classification is applied. String matching with metacharacters is
supported.
❍ classification. Required. Specifies the error classification to be applied to error
shapes that interact with classification shapes.
The valid classifications for this option are:
Ignore
Waive
Watch
Fixed
❍ classification_comment. Optional. Specifies the comment to be used for error
classification. The default is that no comment is used.
❍ cells. Optional. Specifies a list of cells from which the classification shapes are
derived. The default is all cells. If the ldt_list option is specified, the layout shapes
are used only from the cells listed, and at cell level. Otherwise, the cell data extents
of the cells listed are used to derive the classification shapes.
❍ ldt_list. Optional. Specifies a list of layer and datatype ranges that specify a drawn
layer to be used for classification shapes. The default is to use cell data extents to
derive classification shapes.
❍ ambit. Optional. Specifies that classification shapes are oversized or undersized by
the specified amount. The default is no ambit. Only one of the ambit, halo,
directional_ambit, or directional_halo arguments can be specified.
❍ halo. Optional. Specifies that classification shapes are used to derive a halo or ring
using the specified inside or outside distances. The default is no halo. Only one of the
ambit, halo, directional_ambit, or directional_halo arguments can be
specified.
■ inside. Specifies that classification shapes derive a halo or ring using the
specified inside distance.
■ outside. Specifies that classification shapes derive a halo or ring using the
specified outside distance.
❍ relationship. Optional. Specifies the type of polygon interactions to consider for
classification. The default is INTERACT.
■ ENCLOSE. Specifies that the error shape must be fully enclosed by the
classification shape for classification to be applied.
■ INTERACT. Specifies that the interaction between the error shape and the
classification shape determines the classification to be applied. The
include_touch argument specifies the level of interaction that will apply
classification in the case of outside touches.
■ NOT_ENCLOSE. Specifies that the violations which are not enclosed by the
classification layer polygons are suppressed.
■ NOT_INTERACT. Specifies that the violations which do not interact with the
classification layer polygons are suppressed.
❍ include_touch. Optional. Specifies the outside touches that are included in the
interaction check when applying classification. The default is ALL.
■ NONE. Includes neither point touch or line touch.
■ north. Specifies that the classification shapes are oversized or undersized in the
north direction by the specified amount.
■ south. Specifies that the classification shapes are oversized or undersized in the
south direction by the specified amount.
■ east. Specifies that the classification shapes are oversized or undersized in the
east direction by the specified amount.
■ west. Specifies that the classification shapes are oversized or undersized in the
west direction by the specified amount.
❍ directional_halo. Optional. Specifies that classification shapes are used to derive
a halo or ring using the specified inside or outside distances in the specified
directions. The default is no halo. Only one of the ambit, halo, directional_ambit,
or directional_halo arguments can be specified.
Note:
The grow() and shrink() functions are used to derive the directional ambit, so
any behavior of these functions also applies to the derivation of the
directional_ambit argument.
■ inside_west. Specifies that classification shapes derive a halo or ring using the
specified inside distance in the west direction.
suppress_by_layer
Optional. Specifies error suppressions to be applied based on polygon shapes.
❍ violation_comments. Required. Specifies a list of violation comments for which this
particular error suppression is applied. String matching with metacharacters is
supported.
❍ cells. Optional. Specifies a list of cells from which the suppression shapes are
derived. The default is all cells. If the ldt_list option is specified, the layout shapes
are used only from the cells listed, and at cell level. Otherwise, the cell data extents
of the cells listed are used to derive the suppression shapes.
❍ ldt_list. Optional. Specifies a list of layer and datatype ranges that specify a drawn
layer to be used for suppression shapes. The default is to use cell data extents to
derive suppression shapes.
❍ ambit. Optional. Specifies that suppression shapes are oversized or undersized by
the specified amount. The default is no ambit. Only one of the ambit, halo,
directional_ambit, or directional_halo arguments can be specified.
❍ halo. Optional. Specifies that suppression shapes are used to derive a halo or ring
using the specified inside or outside distances. The default is no halo. Only one of the
ambit, halo, directional_ambit, or directional_halo arguments can be
specified.
■ inside. Specifies that suppression shapes derive a halo or ring using the
specified inside distance.
■ outside. Specifies that suppression shapes derive a halo or ring using the
specified outside distance.
❍ relationship. Optional. Specifies the type of polygon interactions to consider for
suppression. The default is INTERACT.
■ ENCLOSE. Specifies that the error shape must be fully enclosed by the suppression
shape for the error to be suppressed.
■ INTERACT. Specifies that the interaction between the error shape and the
suppression shape causes the error to be suppressed. The include_touch
argument specifies the level of interaction that will suppress errors in the case of
outside touches.
■ NOT_ENCLOSE. Specifies that the violations which are not enclosed by the
classification layer polygons are suppressed.
■ NOT_INTERACT. Specifies that the violations which do not interact with the
classification layer polygons are suppressed.
❍ include_touch. Optional. Specifies the outside touches that are included in the
interaction check when suppressing errors. The default is ALL.
■ NONE. Includes neither point touch or line touch.
■ north. Specifies that the suppression shapes are oversized or undersized in the
north direction by the specified amount.
■ south. Specifies that the suppression shapes are oversized or undersized in the
south direction by the specified amount.
■ east. Specifies that the suppression shapes are oversized or undersized in the
east direction by the specified amount.
■ west. Specifies that the suppression shapes are oversized or undersized in the
west direction by the specified amount.
❍ directional_halo. Optional. Specifies that suppression shapes are used to derive
a halo or ring using the specified inside or outside distances in the specified
directions. The default is no halo. Only one of the ambit, halo, directional_ambit,
or directional_halo arguments can be specified.
Note:
The grow(), shrink(), and not() functions are used to derive the directional
halo, so any behavior of these functions also applies to the derivation of the
directional_halo argument.
■ outside_north. Specifies that suppression shapes derive a halo or ring using the
specified outside distance in the north direction.
■ inside_north. Specifies that suppression shapes derive a halo or ring using the
specified inside distance in the north direction.
■ outside_south. Specifies that suppression shapes derive a halo or ring using the
specified outside distance in the south direction.
■ inside_south. Specifies that suppression shapes derive a halo or ring using the
specified inside distance in the south direction.
■ outside_east. Specifies that suppression shapes derive a halo or ring using the
specified outside distance in the east direction.
■ inside_east. Specifies that suppression shapes derive a halo or ring using the
specified inside distance in the east direction.
■ outside_west. Specifies that suppression shapes derive a halo or ring using the
specified outside distance in the west direction.
■ inside_west. Specifies that suppression shapes derive a halo or ring using the
specified inside distance in the west direction.
partially_exploded_cells
Optional. Specifies where to report errors found in cells for which the IC Validator tool
has kept only some placements in the hierarchy. The default is KEEP.
❍ KEEP. Specifies that errors found in partially exploded cells are kept in the cell in which
they are found.
❍ EXPLODE. Specifies that errors found in partially exploded cells are reported at a
higher level in the hierarchy, in a cell from the original hierarchy that has not been
modified by hierarchy optimization.
Note:
The EXPLODE setting is recommended for HIERARCHICAL mode-error classification
flows, including the initial IC Validator run used to generate the error classification
database.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
error_options (
error_limit_per_check = 10,
db_path = "/mypath/pydb"
);
See Also
write_gds()
write_milkyway()
error_to_link_edge()
The error_to_link_edge() function selects polygons from an error layer and returns an
edge layer that represents the shortest edge layer between each error layer pair.
Syntax
error_to_link_edge(
layer1 = error_layer,
name = "layer_label", //optional
shift_min_length = double, //optional
shift_ratio = double, //optional
shift_mode = {SHORTEST, CENTER, CENTER_ALL_ANGLE,
OPPOSITE, ERROR_CENTER, ...} //optional
);
Returns
edge layer
Arguments
layer1
Required. Specifies the error layer from which polygons are selected.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
shift_min_length
Optional. Specifies the link shifting threshold. A link is shifted only when its length is
equal to or greater than this value. The default is 0 (zero).
shift_ratio
Optional. Defines the ratio of the shift segment to the overlap segment. This ratio must
be a value from 0.0 to 1.0. For example, if the overlap segment for an error pair is 100
microns and this value is set to 0.1, the shift segment is 10 microns. The shifted link is
within this segment. The default is 1.
shift_mode
Optional. Specifies the mode used to generate the link, which can be a subset of all
modes. The default is SHORTEST.
❍ SHORTEST. Uses the shortest distance between error pairs to generate a link.
❍ CENTER. Uses center points of the error pair to generate a link. This mode is
applicable only when the run length is less than or equal to 0 (zero) and the link
derived by the default shift mode is orthogonal.
❍ CENTER_ALL_ANGLE. Uses center points of the error pair to generate a link. This mode
is applicable only when the error pair run length is less than or equal to 0 (zero).
❍ OPPOSITE. Shifts two endpoints of the generated link in opposite directions with
respect to the shift ratio. This mode is applicable only when the shift range is positive,
which means the run length is greater than 0 (zero), the link length is greater than or
equal to the shift threshold, and the shift ratio is greater than 0 (zero).
❍ ERROR_CENTER. Uses center points of the error pair to generate a link.
Note:
When you select the ERROR_CENTER option to generate a link, all of the other
modes are disabled.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
The following examples show two polygons (orange) that have red error pair markers. The
green result is the generated edge data.
In the first example, the image on the left side has a single error pair (from a simple space
check). The image on the right side has a corner structure and shows two error pairs.
green = error_to_link_edge(red);
The second example shows a center edge link for each error pair.
green = error_to_link_edge(red, shift_mode = {ERROR_CENTER});
See Also
error_merge()
error_merge_edge()
exclude_milkyway_cell_types()
The exclude_milkyway_cell_types() function returns a list of Milkyway cell types that
are not specified in the exclude argument. You can use this function to exclude cell types
when reading in a Milkyway library. See the cell_types argument of the
milkyway_options() function and the milkyway argument of assign functions for more
information.
Syntax
exclude_milkyway_cell_types(
exclude = {cell_type, ...}
);
Returns
list of Milkyway cell types
Arguments
exclude
Required. Specifies the Milkyway cell types that are excluded from the returned list of cell
types. See Table 3-15 for a list of cell types.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Example section of the exclude_milkyway_net_types() function for more
information.
See Also
exclude_milkyway_net_types()
exclude_milkyway_route_guide_layers()
exclude_milkyway_route_types()
exclude_milkyway_net_types()
The exclude_milkyway_net_types() function returns a list of Milkyway net types that are
not specified in the exclude argument. You can use this function to exclude net types when
reading in a Milkyway library. See the net_types argument of the milkyway_options()
function and the milkyway argument of assign functions for more information.
Syntax
exclude_milkyway_net_types(
exclude = {net_type, ...}
);
Returns
list of Milkyway net types
Arguments
exclude
Required. Specifies the Milkyway net types that are excluded from the returned list of net
types. See Table 3-16 for the list of net types.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
In the following example, power and ground nets are excluded from the net types read from
the Milkyway library.
milkyway_options(net_types=exclude_milkyway_net_types(POWER,GROUND));
See Also
exclude_milkyway_cell_types()
exclude_milkyway_route_guide_layers()
exclude_milkyway_route_types()
exclude_milkyway_route_guide_layers()
The exclude_milkyway_route_guide_layers() function returns a list of Milkyway route
guides that are not specified in the exclude argument. You can use this function to exclude
route guides when reading in a Milkyway library. See the route_guide_layers argument of
the milkyway_options() function and the milkyway argument of assign functions for more
information.
Syntax
exclude_milkyway_route_guide_layers(
exclude = {layer_type, ...}
);
Returns
list of Milkyway route guides
Arguments
exclude
Required. Specifies the Milkyway route guides that are excluded from the returned list of
route guides. See Table 3-17 for a list of route guide layers.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Example section of the exclude_milkyway_net_types() function for more
information.
See Also
exclude_milkyway_cell_types()
exclude_milkyway_net_types()
exclude_milkyway_route_types()
exclude_milkyway_route_types()
The exclude_milkyway_route_types() function returns a list of Milkyway route types that
are not specified in the exclude argument. You can use this function to exclude cell types
when reading in a Milkyway library. See the route_types argument of the
milkyway_options() function and the milkyway argument of assign functions for more
information.
Syntax
exclude_milkyway_route_types(
exclude = {route_type, ...}
);
Returns
list of Milkyway route types
Arguments
exclude
Required. Specifies the Milkyway route types that are excluded from the returned list of
route types. See Table 3-18 for a list of route types.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Example section of the exclude_milkyway_net_types() function for more
information.
See Also
exclude_milkyway_cell_types()
exclude_milkyway_net_types()
exclude_milkyway_route_guide_layers()
exclude_ndm_blockage_types()
The exclude_ndm_blockage_types() function returns a list of NDM blockage types that
are not specified in the exclude argument. You can use this function to easily exclude
blockage types when reading in an NDM library. See the blockage_types option for the ndm
argument of assign functions for more information.
Syntax
exclude_ndm_blockage_types(
exclude = {blockage_type, ...}
);
Returns
list of NDM blockage types
Arguments
exclude
Required. Specifies the NDM blockage types that are excluded from the returned list of
blockage types. Table 2-10 lists the blockage types.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
exclude_ndm_design_types()
exclude_ndm_net_types()
exclude_ndm_shape_uses()
exclude_ndm_design_types()
The exclude_ndm_design_types() function returns a list of NDM design types that are not
specified in the exclude argument. You can use this function to easily exclude design types
when reading in an NDM library. See the design_types argument of the ndm_options()
function and the design_types option for the ndm argument of assign functions for more
information.
Syntax
exclude_ndm_design_types(
exclude = {design_type, ...}
);
Returns
list of NDM design types
Arguments
exclude
Required. Specifies the NDM design types that are excluded from the returned list of
design types. Table 2-9 in the assign() function lists the device types.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
exclude_ndm_blockage_types()
exclude_ndm_net_types()
exclude_ndm_shape_uses()
exclude_ndm_net_types()
The exclude_ndm_net_types() function returns a list of NDM net types that are not
specified in the exclude argument. You can use this function to easily exclude net types
when reading in an NDM library. See the net_types option for the ndm argument of assign
functions for more information.
Syntax
exclude_ndm_net_types(
exclude = {net_type, ...}
);
Returns
list of NDM net types
Arguments
exclude
Required. Specifies the NDM net types that are excluded from the returned list of net
types. Table 2-8 lists the net types.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
exclude_ndm_blockage_types()
exclude_ndm_design_types()
exclude_ndm_shape_uses()
exclude_ndm_shape_uses()
The exclude_ndm_shape_uses() function returns a list of NDM shape uses that are not
specified in the exclude argument. You can use this function to easily exclude shape uses
when reading in an NDM library. See the shape_uses option for the ndm argument of assign
functions for more information.
Syntax
exclude_ndm_shape_uses(
exclude = {shape_use, ...}
);
Returns
list of NDM shape uses
Arguments
exclude
Required. Specifies the NDM shape uses that are excluded from the returned list of
shape uses. See Table 2-7 for the list of shape uses.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
exclude_ndm_blockage_types()
exclude_ndm_design_types()
exclude_ndm_net_types()
extend_edge()
The extend_edge() function creates an edge from an edge by extending or shortening the
endpoints.
The endpoints of an edge are uniquely identified as the start and end. The endpoints are
ordered such that the inside, or material side, of the edge is on the right. See edge in the
Glossary for more information.
Syntax
extend_edge(
layer1 = edge_layer,
start = double, //optional
end = double, //optional
corners = CONNECT | IGNORE, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
start_by_factor = double, //optional
end_by_factor = double, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge layer.
start
Optional. Specifies the distance the endpoint is adjusted at the start of the edge. A
positive value extends the edge; a negative value shortens it. When set to 0, the distance
at the start is not changed. The default is 0.
end
Optional. Specifies the distance the endpoint is adjusted at the end of the edge. A
positive value extends the edge, a negative value shortens it. When set to 0, the distance
at the end is not changed. The default is 0.
corners
Optional. Specifies how corners are processed. The default is IGNORE.
❍ CONNECT. Connects the edges end to end at the corners, extending only the first and
last edge of the chain. Closed chains are unchanged.
❍ IGNORE. Ignores corners. Each edge is extended individually.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
start_by_factor
Optional. Specifies the amount of extension at the start of the edge in terms of the edge
length. The product of a positive start_by_factor value and the edge length specifies
the amount to extend start points of the edge. The product of a negative
start_by_factor value and the edge length specifies the amount to retract the start
points of an edge. The default is 0.
Note:
The minimum expansion values for the start_by_factor argument is one working
resolution unit.
Either the start argument or the start_by_factor argument must be a nonzero value.
Otherwise, an edge is not output.
See the Examples section for more information.
end_by_factor
Optional. Specifies the amount of extension at the end of the edge in terms of the edge
length. The product of a positive end_by_factor value and the edge length specifies the
amount to extend the endpoints of the edge. The product of a negative end_by_factor
value the edge length specifies the amount to retract the endpoints of an edge. The
default is 0.
Note:
The minimum expansion values for the end_by_factor argument is one working
resolution unit.
Either the end argument or the end_by_factor argument must be a nonzero value.
Otherwise, an edge is not output.
See the Examples section for more information.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
0.5u
1u
1u in_layer
(edge layer)
1u
0.5u
1u
0.5u
0.5u
0.5u
Figure 2-165 shows the output when the corners argument is CONNECT:
out_layer = extend_edge(in_layer, start = 0.5, end = 0.5,
corners = CONNECT);
1u
1u
Closed edge chain with
0.5u corners = CONNECT.
Figure 2-166 Using the start_by_factor and end_by_factor Arguments Without the corners
Argument
Figure 2-167 shows the using the start_by_factor and end_by_factor arguments with
the corners argument.
red_edge = extend_edge(layer1 = blue_edge,
start_by_factor = 0.5,
end-by_factor = 0.5,
corners = CONNECT);
Figure 2-167 Using the start_by_factor and end_by_factor Arguments Without the corners
Argument
See Also
edge_size()
edge_size_by_property()
Syntax
extent(
layer1 = polygon_layer,
sides = {length1 = doubleconstraint,
length2 = doubleconstraint},
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_extent(
layer1 = polygon_layer,
sides = {length1 = doubleconstraint,
length2 = doubleconstraint},
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
sides
Required. Specifies the dimensions of the extents of polygons that are selected using
two lengths, one per side. The dimensions must be greater than 0. The length2 option
is optional, with a default of >0. See “Constraints” on page A-4 for more information.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 2-168 shows the polygons selected for different settings of the sides argument of the
extent() function.
The figure on the right shows the result when both sides are between 5 and 15:
Result = extent(layer1, sides = {[5,15], [5,15]});
layer1 Result
Figure 2-169 shows the polygons selected for different settings of the sides argument of the
not_extent() function.
layer1
See Also
rectangles() and not_rectangles()
external_corner1()
The external_corner1() function creates polygons that are formed by pairs of violation
corners. It measures outside-to-outside spacing on layer1 based on the distance
specified. The arguments define various geometric conditions for measuring the
point-to-point distance between the corners.
The output consists of rectangles that are the extents of the point-to-point violations. In the
case where the violation is horizontal or vertical, the output rectangle is generated by
expanding the violation three times the input library resolution on both sides.
Corner-to-corner distance is checked only when each corner falls within the check zone of
the other corner.
The check zone for convex corners (interior angle of less than 180 degrees) is determined
by the following steps:
1. For each adjacent edge of the corner, draw a perpendicular line toward the check side.
See “Spacing Checks” on page A-18 for more information about the check side.
2. The check zone is bounded by the two lines.
The check zone for concave corners (exterior angle of less than 180 degrees) is determined
by the following steps:
1. Extend each adjacent edge of the corner.
2. The check zone is bounded by the two lines.
Corner-to-edge distance is checked only when the corner falls in the perpendicular
projection region of the edge, and the perpendicular projection point from the edge to the
corner falls in the projection zone of the corner.
For edge input, the external_corner1() function optionally includes terminal edge
endpoints as corners; there is no adjacent edge. In this case, the angle argument is not
used. The check zone of an edge endpoint with no adjacent edge is determined by the
following steps:
1. Draw a line extending the edge beyond the endpoint.
2. From the endpoint, draw a perpendicular line toward the check side of the edge.
3. The check zone is bounded by the two lines. The boundary defined by the line extending
the edge is always inclusive.
Syntax
external_corner1(
layer1 = data_layer,
distance = doubleconstraint,
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
type
Optional. Specifies the corner types included in the spacing check. By default, the
IC Validator tool selects all types.
❍ CONVEX_TO_CONCAVE. Specifies that the check-zone boundary is controlled by the
convex_to_concave_boundary argument.
length equal to 0. The boundary for convex corners is inclusive, whereas the
boundary for concave corners is exclusive.
Note:
The convex_to_concave_boundary and convex_to_convex_boundary
arguments are ignored.
The edge endpoints and all angle corners are always measured;
edge_endpoints and angle arguments are ignored.
The region argument is not used for this corner type.
Figure 2-170 shows the effect of the type argument settings.
Figure 2-170 type Argument Example
angle
Optional. Specifies the angles of the corners that are included in the spacing check. The
default is ALL.
❍ ALL. Specifies that all angles are checked.
layer1
region
Optional. Specifies the shape of the corner-check region. Intrusion into the corner-check
region results in a spacing violation. The default is RADIAL.
❍ RADIAL. Connects check-zone boundaries with a radial arc at the specified distance
from the corner. The boundary of the arc is inclusive or exclusive depending on the
distance argument.
❍ SQUARE. Defines the check region with two squares. For each corner check-zone
boundary, a square equal in size to the specified distance is placed point-touching
the corner. One edge is coincident to the boundary. For right corners, the two boxes
are coincident. The far boundaries of the boxes are inclusive or exclusive depending
on the distance argument.
Figure 2-172 shows the effect of the region argument settings.
Figure 2-172 region Argument Example
layer1
convex_to_concave_boundary
Optional. For convex-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. The default is EXCLUSIVE.
Figure 2-173 shows the effect of the convex_to_concave_boundary argument settings.
Figure 2-173 convex_to_concave_boundary Argument Example
layer1
Result
convex_to_convex_boundary
Optional. For convex-to-convex measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. INCLUSIVE_PARALLEL applies only
when two edges from the corners are parallel and not collinear. The default is
EXCLUSIVE.
Figure 2-174 shows the effect of the convex_to_convex_boundary argument settings.
Figure 2-174 convex_to_convex_boundary Argument Example
layer1
Result
edge_endpoints
Optional. Specifies the edge endpoints measured. The default is CORNER.
Note:
This argument is used only when the input layer is an edge layer.
❍ CORNER. Checks only the endpoints that form a corner.
❍ ALL. Checks all endpoints, including those that have no adjacent edge.
Figure 2-175 shows the effect of the edge_endpoints argument settings.
Figure 2-175 edge_endpoints Argument Example
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Measures corners from polygons that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
membership
Optional. Specifies how to check between corners that are on the same polygon or
different polygons. For edge layers, polygon membership is determined by layer
ancestry. The default is ALL.
❍ ALL. Checks all corners regardless of polygon membership.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
layer1
NONE ALL
Result
(Default)
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
external_corner1_edge()
external_corner1_error()
internal_corner1()
external_corner1_edge()
The external_corner1_edge() function creates edges that consist of pairs of violation
corners. It measures outside-to-outside spacing on layer1 based on the distance
specified. Other arguments define various geometric conditions for measuring the
point-to-point distance between the corners.
Corner-to-corner distance is checked only when each corner falls within the check zone of
the other corner.
The check zone for convex corners (interior angle of less than 180 degrees) is determined
by the following steps:
1. For each adjacent edge of the corner, draw a perpendicular line toward the check side.
See “Spacing Checks” on page A-18 for more information about the check side.
2. The check zone is bounded by the two lines.
The check zone for concave corners (exterior angle of less than 180 degrees) is determined
by the following steps:
1. Extend each adjacent edge of the corner.
2. The check zone is bounded by the two lines.
Corner-to-edge distance is checked only when the corner falls in the perpendicular
projection region of the edge, and the perpendicular projection point from the edge to the
corner falls in the projection zone of the corner.
For edge input, the external_corner1_edge() function optionally includes terminal edge
endpoints as corners; there is no adjacent edge. In this case, the angle argument is not
used. The check zone of an edge endpoint with no adjacent edge is determined by the
following steps:
1. Draw a line extending the edge beyond the endpoint.
2. From the endpoint, draw a perpendicular line toward the check side of the edge.
3. The check zone is bounded by the two lines. The boundary defined by the line extending
the edge is always inclusive.
Syntax
external_corner1_edge(
layer1 = data_layer,
distance = doubleconstraint,
type = {CONVEX_TO_CONCAVE, CONVEX_TO_CONVEX,
CONVEX_TO_EDGE,
PARALLEL_POINT_PROJECTION}, //optional
angle = ALL | RIGHT, //optional
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
type
Optional. Specifies the corner types included in the spacing check. By default, the
IC Validator tool selects all types.
❍ CONVEX_TO_CONCAVE. Specifies that the check-zone boundary is controlled by the
convex_to_concave_boundary argument.
Note:
The convex_to_concave_boundary and convex_to_convex_boundary
arguments are ignored.
The edge endpoints and all angle corners are always measured;
edge_endpoints and angle arguments are ignored.
The region argument is not used for this corner type.
Figure 2-179 shows the effect of the type argument settings.
Figure 2-179 type Argument Examples
angle
Optional. Specifies the angles of the corners that are included in the spacing check. The
default is ALL.
❍ ALL. Specifies that all angles are checked.
layer1
Result
region
Optional. Specifies the shape of the corner-check region. Intrusion into the corner-check
region results in a spacing violation. The default is RADIAL.
❍ RADIAL. Connects check-zone boundaries with a radial arc at the specified distance
from the corner. The boundary of the arc is inclusive or exclusive depending on the
distance argument.
❍ SQUARE. Defines the check region with two squares. For each corner check-zone
boundary, a square equal in size to the specified distance is placed point-touching
the corner. One edge is coincident to the boundary. For right corners, the two boxes
are coincident. The far boundaries of the boxes are inclusive or exclusive depending
on the distance argument.
Figure 2-181 shows the effect of the region argument settings.
Figure 2-181 region Argument Example
layer1
Result
convex_to_concave_boundary
Optional. For convex-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. The default is EXCLUSIVE.
layer1
Result
convex_to_convex_boundary
Optional. For convex-to-convex measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. INCLUSIVE_PARALLEL applies only
when two edges from the corners are parallel and not collinear. The default is
EXCLUSIVE.
Figure 2-183 shows the effect of the convex_to_convex_boundary argument settings.
Figure 2-183 convex_to_convex_boundary Argument Example
layer1
Result
edge_endpoints
Optional. Specifies the edge endpoints measured. The default is CORNER.
Note:
This argument is used only when the input layer is an edge layer.
❍ ALL. Checks all endpoints, including those that have no adjacent edge.
Figure 2-184 shows the effect of the edge_endpoints argument settings.
Figure 2-184 edge_endpoints Argument Example
layer1
Result
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Measures corners from polygons that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
membership
Optional. Specifies how to check between corners that are on the same polygon or
different polygons. For edge layers, polygon membership is determined by layer
ancestry. The default is ALL.
❍ ALL. Checks all corners regardless of polygon membership.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
layer1
Result
output_type
Optional. Specifies the edge types that are output. The default is FAIL.
❍ FAIL. Specifies that the portions of the edges that fall within the check region are
output.
❍ POINT_TO_POINT. Specifies that violations are output as an edge connecting the two
corners that are in violation. The orientation of POINT_TO_POINT edges from a
layer1 check is arbitrary. POINT_TO_POINT creates an orphan edge layer.
Figure 2-188 shows the effect of the output_type argument settings.
layer1
Result
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
See Also
external_corner1()
external_corner1_error()
internal_corner1_edge()
external_corner1_error()
The external_corner1_error() function measures outside-to-outside spacing on layer1
based on the distance specified. The arguments define various geometric conditions for
measuring the point-to-point distance between the corners.
Derived error layers are unformatted. These layers can be used by the drc_features()
function. The layers can be formatted and merged into normal layers using the
error_merge() and error_merge_edge() functions.
Corner-to-corner distance is checked only when each corner falls within the check zone of
the other corner.
The check zone for convex corners (interior angle of less than 180 degrees) is determined
by the following steps:
1. For each adjacent edge of the corner, draw a perpendicular line toward the check side.
See “Spacing Checks” on page A-18 for more information about the check side.
2. The check zone is bounded by the two lines.
The check zone for concave corners (exterior angle of less than 180 degrees) is determined
by the following steps:
1. Extend each adjacent edge of the corner.
2. The check zone is bounded by the two lines.
Corner-to-edge distance is checked only when the corner falls in the perpendicular
projection region of the edge, and the perpendicular projection point from the edge to the
corner falls in the projection zone of the corner.
For edge input, the external_corner1() function optionally includes terminal edge
endpoints as corners; there is no adjacent edge. In this case, the angle argument is not
used. The check zone of an edge endpoint with no adjacent edge is determined by the
following steps:
1. Draw a line extending the edge beyond the endpoint.
2. From the endpoint, draw a perpendicular line toward the check side of the edge.
3. The check zone is bounded by the two lines. The boundary defined by the line extending
the edge is always inclusive.
Syntax
external_corner1_error(
layer1 = data_layer,
distance = doubleconstraint,
type = {CONVEX_TO_CONCAVE, CONVEX_TO_CONVEX,
CONVEX_TO_EDGE,
PARALLEL_POINT_PROJECTION}, //optional
angle = ALL | RIGHT, //optional
region = RADIAL | SQUARE, //optional
convex_to_concave_boundary = INCLUSIVE | EXCLUSIVE, //optional
convex_to_convex_boundary = INCLUSIVE_PARALLEL | EXCLUSIVE,
//optional
edge_endpoints = CORNER | ALL, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL,
//optional
connect_sequence = connect_database, //optional
membership = ALL | SAME_POLYGON | DIFFERENT_POLYGON,
//optional
look_thru = NONE | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
error layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
type
Optional. Specifies the corner types included in the spacing check. By default, the
IC Validator tool selects all types.
❍ CONVEX_TO_CONCAVE. Specifies that the check-zone boundary is controlled by the
convex_to_concave_boundary argument.
length equal to 0. The boundary for convex corners is inclusive, whereas the
boundary for concave corners is exclusive.
Note:
The convex_to_concave_boundary and convex_to_convex_boundary
arguments are ignored.
The edge endpoints and all angle corners are always measured;
edge_endpoints and angle arguments are ignored.
The region argument is not used for this corner type.
angle
Optional. Specifies the angles of the corners that are included in the spacing check. The
default is ALL.
❍ ALL. Specifies that all angles are checked.
region
Optional. Specifies the shape of the corner-check region. Intrusion into the corner-check
region results in a spacing violation. The default is RADIAL.
❍ RADIAL. Connects check-zone boundaries with a radial arc at the specified distance
from the corner. The boundary of the arc is inclusive or exclusive depending on the
distance argument.
❍ SQUARE. Defines the check region with two squares. For each corner check-zone
boundary, a square equal in size to the specified distance is placed point-touching
the corner. One edge is coincident to the boundary. For right corners, the two boxes
are coincident. The far boundaries of the boxes are inclusive or exclusive depending
on the distance argument.
convex_to_concave_boundary
Optional. For convex-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. The default is EXCLUSIVE.
convex_to_convex_boundary
Optional. For convex-to-convex measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. INCLUSIVE_PARALLEL applies only
when two edges from the corners are parallel and not collinear. The default is
EXCLUSIVE.
edge_endpoints
Optional. Specifies the edge endpoints measured. The default is CORNER.
Note:
This argument is used only when the input layer is an edge layer.
❍ CORNER. Checks only the endpoints that form a corner.
❍ ALL. Checks all endpoints, including those that have no adjacent edge.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Measures corners from polygons that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
membership
Optional. Specifies how to check between corners that are on the same polygon or
different polygons. For edge layers, polygon membership is determined by layer
ancestry. The default is ALL.
❍ ALL. Checks all corners regardless of polygon membership.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
external_corner1()
external_corner1_edge()
external_corner2_error()
internal_corner1()
external_corner2()
The external_corner2() function creates polygons that are formed by pairs of violation
corners. It measures outside-to-outside spacing between two layers based on the distance
specified. Other arguments define various geometric conditions for measuring the
point-to-point distance between the corners.
The output consists of rectangles that are the extents of the point-to-point violations. In the
case where the violation is horizontal or vertical, the output rectangle is generated by
expanding the violation three times the input library resolution on both sides.
Corner-to-corner distance is checked only when each corner falls within the check zone of
the other corner.
The check zone for convex corners (interior angle of less than 180 degrees) is determined
by the following steps:
1. For each adjacent edge of the corner, draw a perpendicular line toward the check side.
See “Spacing Checks” on page A-18 for more information about the check side.
2. The check zone is bounded by the two lines.
The check zone for concave corners (exterior angle of less than 180 degrees) is determined
by the following steps:
1. Extend each adjacent edge of the corner.
2. The check zone is bounded by the two lines.
corner-to-edge distance is checked only when the corner falls in the perpendicular
projection region of the edge, and the perpendicular projection point from the edge to the
corner falls in the projection zone of the corner. A portion of the edge must fall in the corner
projection zone, and neither of the edges forming the corner can be parallel to the edge.
For edge input, the external_corner2() function optionally includes terminal edge
endpoints as corners; there is no adjacent edge. In this case, the angle argument is not
used. The check zone of an edge endpoint with no adjacent edge is determined by the
following steps:
1. Draw a line extending the edge beyond the endpoint.
2. From the endpoint, draw a perpendicular line toward the check side of the edge.
3. The check zone is bounded by the two lines. The boundary defined by the line extending
the edge is always inclusive.
Syntax
external_corner2(
layer1 = data_layer,
layer2 = data_layer,
distance = doubleconstraint,
type = {CONVEX_TO_CONVEX, CONVEX_TO_CONCAVE,
CONVEX_TO_EDGE, CONCAVE_TO_EDGE,
PARALLEL_POINT_PROJECTION}, //optional
angle = ALL | RIGHT, //optional
region = RADIAL | SQUARE, //optional
convex_to_concave_boundary = INCLUSIVE | EXCLUSIVE, //optional
convex_to_convex_boundary = INCLUSIVE_PARALLEL | EXCLUSIVE,
//optional
edge_endpoints = CORNER | ALL, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL,
//optional
connect_sequence = connect_database, //optional
look_thru = NONE | COINCIDENT | INSIDE | ALL,
//optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
type
Optional. Specifies the corner types included in the spacing check. By default, the
IC Validator tool selects all types.
❍ CONCAVE_TO_EDGE. Specifies that the edge projection region is inclusive; concave
corner check zone is exclusive.
angle
Optional. Specifies the angles of the corners that are included in the spacing check. The
default is ALL.
❍ ALL. Specifies that all angles are checked.
layer1
layer2
ALL RIGHT
Result
(Default)
region
Optional. Specifies the shape of the corner-check region. Intrusion into the corner-check
region results in a spacing violation. The default is RADIAL.
❍ RADIAL. Connects check-zone boundaries with a radial arc at the specified distance
from the corner. The boundary of the arc is inclusive or exclusive depending on the
distance argument.
❍ SQUARE. Defines the check region with two squares. For each corner check-zone
boundary, a square equal in size to the specified distance is placed point-touching
the corner. One edge is coincident to the boundary. For right corners, the two boxes
are coincident. The far boundaries of the boxes are inclusive or exclusive depending
on the distance argument.
Figure 2-191 shows the effect of the region argument settings.
Figure 2-191 region Argument Example
layer1
layer2
RADIAL SQUARE
Result
(Default)
convex_to_concave_boundary
Optional. For convex-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. The default is EXCLUSIVE.
layer1
layer2
Result
convex_to_convex_boundary
Optional. For convex-to-convex measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. INCLUSIVE_PARALLEL applies only
when two edges from the corners are parallel and not collinear. The default is
EXCLUSIVE.
Figure 2-193 shows the effect of the convex_to_convex_boundary argument settings.
Figure 2-193 convex_to_convex_boundary Argument Example
layer1
layer2
Result
edge_endpoints
Optional. Specifies the edge endpoints measured. The default is CORNER.
Note:
This argument is used only when an input layer is an edge layer.
■ If layer1 is an edge layer, then the argument applies to layer1.
■ If layer2 is an edge layer, then the argument applies to layer2.
■ If layer1 and layer2 are edge layers, then the argument applies to both layers.
❍ CORNER. Checks only the endpoints that form a corner.
❍ ALL. Checks all endpoints, including those that have no adjacent edge.
Figure 2-194 shows the effect of the edge_endpoints argument settings.
Figure 2-194 edge_endpoints Argument Example
Input
Result
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Measures corners from polygons that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
layer1
layer2
NONE ALL
Result
(Default)
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
external_corner2_edge()
external_corner2_error()
internal2()
external_corner2_edge()
The external_corner2_edge() function creates edges that consist of pairs of violation
corners. It measures outside-to-outside spacing between two layers based on the distance
specified. Other arguments define various geometric conditions for measuring the
point-to-point distance between the corners.
Corner-to-corner distance is checked only when each corner falls within the check zone of
the other corner.
The check zone for convex corners (interior angle of less than 180 degrees) is determined
by the following steps:
1. For each adjacent edge of the corner, draw a perpendicular line toward the check side.
See “Spacing Checks” on page A-18 for more information about the check side.
2. The check zone is bounded by the two lines.
The check zone for concave corners (exterior angle of less than 180 degree s) is determined
by the following steps:
1. Extend each adjacent edge of the corner.
2. The check zone is bounded by the two lines.
corner-to-edge distance is checked only when the corner falls in the perpendicular
projection region of the edge, and the perpendicular projection point from the edge to the
corner falls in the projection zone of the corner.
For edge input, the external_corner2_edge() function optionally includes terminal edge
endpoints as corners; there is no adjacent edge. In this case, the angle argument is not
used. The check zone of an edge endpoint with no adjacent edge is determined by the
following steps:
1. Draw a line extending the edge beyond the endpoint.
2. From the endpoint, draw a perpendicular line toward the check side of the edge.
3. The check zone is bounded by the two lines. The boundary defined by the line extending
the edge is always inclusive.
Syntax
external_corner2_edge(
layer1 = data_layer,
layer2 = data_layer,
distance = doubleconstraint,
type = {CONVEX_TO_CONVEX, CONVEX_TO_CONCAVE,
CONVEX_TO_EDGE, CONCAVE_TO_EDGE,
PARALLEL_POINT_PROJECTION}, //optional
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
type
Optional. Specifies the corner types included in the spacing check. By default, the
IC Validator tool selects all types.
❍ CONCAVE_TO_EDGE. Specifies that the edge projection region is inclusive; concave
corner check zone is exclusive.
❍ CONVEX_TO_CONVEX. Specifies that the check-zone boundary is controlled by the
convex_to_convex_boundary argument.
layer1
layer2
Result
Areas
shown for
illustration
All (default)
Figure 2-198 shows the effect of the type argument with the CONCAVE_TO_EDGE setting.
layer1
layer2
Result
Areas
shown for
CONCAVE_TO_EDGE illustration
Figure 2-199 shows the effect of the type argument with the CONVEX_TO_CONVEX setting.
Figure 2-199 type Argument Example With CONVEX_TO_CONVEX
layer1
layer2
Result
CONVEX_TO_CONVEX
Areas
shown for
illustration
Figure 2-200 shows the effect of the type argument with the CONVEX_TO_CONCAVE
setting.
Figure 2-200 type Argument Example With CONVEX_TO_CONCAVE
layer1
layer2
Result
Areas
shown for
CONVEX_TO_CONCAVE illustration
Figure 2-201 shows the effect of the type argument with the CONVEX_TO_EDGE setting.
layer2
Result
Areas
CONVEX_TO_EDGE shown for
illustration
Figure 2-202 shows the effect of the type argument with the
PARALLEL_POINT_PROJECTION setting.
layer2
PARALLEL_ Result
POINT_PARALLEL
Areas
shown for
illustration
angle
Optional. Specifies the angles of the corners that are included in the spacing check. The
default is ALL.
❍ ALL. Specifies that all angles are checked.
layer1
layer2
region
Optional. Specifies the shape of the corner-check region. Intrusion into the corner-check
region results in a spacing violation. The default is RADIAL.
❍ RADIAL. Connects check-zone boundaries with a radial arc at the specified distance
from the corner. The boundary of the arc is inclusive or exclusive depending on the
distance argument.
❍ SQUARE. Defines the check region with two squares. For each corner check-zone
boundary, a square equal in size to the specified distance is placed point-touching
the corner. One edge is coincident to the boundary. For right corners, the two boxes
are coincident. The far boundaries of the boxes are inclusive or exclusive depending
on the distance argument.
Figure 2-204 shows the effect of the region argument settings.
Figure 2-204 region Argument Example
layer1
layer2
Result
Areas
RADIAL SQUARE shown for
(Default) illustration
convex_to_concave_boundary
Optional. For convex-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. The default is EXCLUSIVE.
layer1
layer2
Result
Areas
shown for
illustration
EXCLUSIVE INCLUSIVE
(Default)
convex_to_convex_boundary
Optional. For convex-to-convex measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. INCLUSIVE_PARALLEL applies only
when two edges from the corners are parallel and not collinear. The default is
EXCLUSIVE.
Figure 2-206 shows the effect of the convex_to_convex_boundary argument settings.
Figure 2-206 convex_to_convex_boundary Argument Example
layer1
layer2
Result
Areas
shown for
EXCLUSIVE INCLUSIVE_PARALLEL illustration
(Default)
edge_endpoints
Optional. Specifies the edge endpoints measured. The default is CORNER.
Note:
This argument is used only when an input layer is an edge layer.
■ If layer1 is an edge layer, then the argument applies to layer1.
■ If layer2 is an edge layer, then the argument applies to layer2.
■ If layer1 and layer2 are edge layers, then the argument applies to both layers.
❍ CORNER. Checks only the endpoints that form a corner.
❍ ALL. Checks all endpoints, including those that have no adjacent edge.
Figure 2-207 shows the effect of the edge_endpoints argument settings.
Figure 2-207 edge_endpoints Argument Example
Input
Result
Areas
CORNER ALL shown for
(Default) illustration
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Measures corners from polygons that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
layer1
layer2
Result
output_layer
Optional. Specifies the layer whose edges are output for the violations. The default is
LAYER1.
output_type
Optional. Specifies the edge types that are output. The default is FAIL.
❍ FAIL. Specifies that the portions of the edges that fall within the check region are
output.
❍ POINT_TO_POINT. Specifies that violations are output as an edge connecting the two
corners that are in violation. Edge endpoints are ordered from layer1 to layer2.
POINT_TO_POINT creates an orphan edge layer.
Figure 2-210 shows the effect of the output_type argument settings.
Figure 2-210 output_type Argument Example
layer1
layer2
Result
Areas shown
for illustration
POINT_TO_POINT FAIL
(Default)
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
external_corner2()
external_corner2_error()
internal_corner2_edge()
external_corner2_error()
The external_corner2_error() measures outside-to-outside spacing between two layers
based on the distance specified. Other arguments define various geometric conditions for
measuring the point-to-point distance between the corners.
Derived error layers are unformatted. These layers can be used by the drc_features()
function. The layers can be formatted and merged into normal layers using the
error_merge() and error_merge_edge() functions.
Corner-to-corner distance is checked only when each corner falls within the check zone of
the other corner.
The check zone for convex corners (interior angle of less than 180 degrees) is determined
by the following steps:
1. For each adjacent edge of the corner, draw a perpendicular line toward the check side.
See “Spacing Checks” on page A-18 for more information about the check side.
2. The check zone is bounded by the two lines.
The check zone for concave corners (exterior angle of less than 180 degrees) is determined
by the following steps:
1. Extend each adjacent edge of the corner.
2. The check zone is bounded by the two lines.
corner-to-edge distance is checked only when the corner falls in the perpendicular
projection region of the edge, and the perpendicular projection point from the edge to the
corner falls in the projection zone of the corner. A portion of the edge must fall in the corner
projection zone, and neither of the edges forming the corner can be parallel to the edge.
For edge input, the external_corner2() function optionally includes terminal edge
endpoints as corners; there is no adjacent edge. In this case, the angle argument is not
used. The check zone of an edge endpoint with no adjacent edge is determined by the
following steps:
1. Draw a line extending the edge beyond the endpoint.
2. From the endpoint, draw a perpendicular line toward the check side of the edge.
3. The check zone is bounded by the two lines. The boundary defined by the line extending
the edge is always inclusive.
Syntax
external_corner2_error(
layer1 = data_layer,
layer2 = data_layer,
distance = doubleconstraint,
type = {CONVEX_TO_CONVEX, CONVEX_TO_CONCAVE,
CONVEX_TO_EDGE, CONCAVE_TO_EDGE,
PARALLEL_POINT_PROJECTION}, //optional
angle = ALL | RIGHT, //optional
region = RADIAL | SQUARE, //optional
convex_to_concave_boundary = INCLUSIVE | EXCLUSIVE, //optional
convex_to_convex_boundary = INCLUSIVE_PARALLEL | EXCLUSIVE,
//optional
edge_endpoints = CORNER | ALL, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL,
//optional
connect_sequence = connect_database, //optional
look_thru = NONE | COINCIDENT | INSIDE | ALL,
//optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
error layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
type
Optional. Specifies the corner types included in the spacing check. By default, the
IC Validator tool selects all types.
❍ CONCAVE_TO_EDGE. Specifies that the edge projection region is inclusive; concave
corner check zone is exclusive.
❍ CONVEX_TO_CONVEX. Specifies that the check-zone boundary is controlled by the
convex_to_convex_boundary argument.
angle
Optional. Specifies the angles of the corners that are included in the spacing check. The
default is ALL.
❍ ALL. Specifies that all angles are checked.
region
Optional. Specifies the shape of the corner-check region. Intrusion into the corner-check
region results in a spacing violation. The default is RADIAL.
❍ RADIAL. Connects check-zone boundaries with a radial arc at the specified distance
from the corner. The boundary of the arc is inclusive or exclusive depending on the
distance argument.
❍ SQUARE. Defines the check region with two squares. For each corner check-zone
boundary, a square equal in size to the specified distance is placed point-touching
the corner. One edge is coincident to the boundary. For right corners, the two boxes
are coincident. The far boundaries of the boxes are inclusive or exclusive depending
on the distance argument.
convex_to_concave_boundary
Optional. For convex-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. The default is EXCLUSIVE.
convex_to_convex_boundary
Optional. For convex-to-convex measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. INCLUSIVE_PARALLEL applies only
when two edges from the corners are parallel and not collinear. The default is
EXCLUSIVE.
edge_endpoints
Optional. Specifies the edge endpoints measured. The default is CORNER.
Note:
This argument is used only when an input layer is an edge layer.
■ If layer1 is an edge layer, then the argument applies to layer1.
■ If layer2 is an edge layer, then the argument applies to layer2.
■ If layer1 and layer2 are edge layers, then the argument applies to both layers.
❍ CORNER. Checks only the endpoints that form a corner.
❍ ALL. Checks all endpoints, including those that have no adjacent edge.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Measures corners from polygons that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
external_corner2()
external_corner2_edge()
external_corner1_error()
internal2()
external1()
The external1() function creates polygons that are formed by pairs of violation edges. It
measures outside-to-outside spacing on one layer based on the specified distance. The
arguments define geometric conditions for measuring the distance between the edges.
Syntax
external1(
layer1 = data_layer,
distance = doubleconstraint,
extension = NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE,
extension_distance = double, //optional
membership = ALL | SAME_POLYGON |
DIFFERENT_POLYGON, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR},//optional
intersecting = {ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | NOT_ADJACENT | ALL, //optional
look_thru_count = integerconstraint, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH}, //optional
point_touch_shape = EXTENTS | SQUARE, //optional
shape_size = double, //optional
output_type = REGION | CENTERLINE | EXTENTS, //optional
width = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
blocking_layer = data_layer, //optional
blocking_layer_look_thru = COINCIDENT | NONE, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
extension
Required. Specifies the extension of the check region, beyond the endpoints of the edge
being checked.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. See the description of the output_type argument for more information.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function.
In the conceptual diagram shown in Figure 2-211, the current edge being checked is
shown in solid black. The check region is dashed.
Figure 2-211 Check Region Extension
Input
0.996
0.2
0.7 0.8 1
1 0.95 0.996
1
Output
Output
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
membership
Optional. Specifies whether to check all distances between edges that are on the same
polygon or different polygons. For edge layers, polygon membership is determined by
layer ancestry. The default is ALL.
❍ ALL. Checks all edges regardless of polygon membership.
Note:
When membership = DIFFERENT_POLYGON and connectivity = SAME_NET, this
function might incorrectly report violations on the same polygon depending on the
given hierarchy and spacing distance.
For the following examples,
Input
Output
Output
Output
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the edges that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
0.919
1.1
0.95 1.1
1
0.99
Output
Output
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
Input
1
1
1
Output
Output
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
In Figure 2-212, the projection region for edge A is shown in gray. The green edges are
IN, the red edges are OUT, and the magenta edges are ON.
Input
0.99
0.99
0.99 0.99
Output
Output
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
Input
0.919
1.1
0.95 1.1
1
0.99
Output
Output
Output
Output
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
Input
0.85 0.919
0.9 0.919
0.919
0.919
Output
Output
Output
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
❍ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not look
through any edges that share endpoint X with edge A. This setting avoids false
violations that might be reported when the look_thru argument is ALL.
❍ ALL. Looks through all edges.
Figure 2-214 shows an example of the edges that a spacing check looks through for
various look_thru argument settings.
1 NONE
1, 2 ALL
Violations 1 2 3 4
look_thru_count
Optional. Specifies the number of edges that must be looked through for a measurement
to occur. Edges coincident to the edge being measured are not included in the count.
The value must be nonnegative. See “Constraints” on page A-4 for more information.
The default is >=0, which means the count is ignored.
Note:
Use this argument only when the extension argument is NONE and the look_thru
argument is ALL.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
extension_obstructions
Optional. Specifies how look_thru is processed for the check region extension. Some
endpoint violations might be undesirable even though they fit the look_thru setting.
This argument specifies how aggressively the check finds and refines endpoint violations
in accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
See Figure 2-216 for an example of the extension_obstructions argument.
POINT_TO_POINT
ALL
relational
Optional. Specifies if a check outputs additional violations based on the relationship of
the polygons. Connectivity and membership are considered when generating these
violations. The default is no additional reporting.
❍ POINT_TOUCH. Creates a violation where there is an outside-to-outside point touch.
The format of the violation is determined by the point_touch_shape and
shape_size arguments. The POINT_TOUCH argument is not available for edge input.
Figure 2-217 shows the effect of the relational argument settings.
Figure 2-217 relational Argument Example
layer1
POINT_TOUCH Result
point_touch_shape
Optional. Specifies the shapes that are generated for point touches. The default is
EXTENTS.
❍ EXTENTS. Specifies that the length of the violation is equal to the maximum of the
distance constraint, with a minimum value of two times the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution. The violation region is approximated with edges that are either
perpendicular, parallel, or at a 45-degree angle, to the edges that form the point
touch, to avoid creating odd-angle data.
❍ SQUARE. Specifies that a square is centered on the point touch. The sides of the
square are horizontal and vertical. The size of the square is determined by the
shape_size argument.
shape_size
Optional. Specifies the length of the sides of the squares generated when
point_touch_shape = SQUARE. The default is twice the maximum of the spacing
distance. This value must be positive. It is rounded to the nearest even multiple of the
internal resolution, with a minimum value of twice the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution.
output_type
Optional. Specifies the type of output generated. The default is REGION.
❍ REGION. Reports violations as polygons, which are generated by connecting the
violation edges.
❍ CENTERLINE. Reports violations as an expanded line at the center of the projection
region. The midpoints of the sides of the violation region form a line that is expanded
in both directions by width/2. When the output_type argument is CENTERLINE, only
parallel spacing is supported.
❍ EXTENTS. Reports violations as boxes, oriented along the violation edges, that
contain the extents of the violation. This setting is used to avoid the creation of
odd-angle data normally seen when the extension argument is RADIAL or SQUARE.
The following violations require special consideration when generating output shapes:
❍ When set to REGION, point-to-point violations are reported as rectangles by
expanding the line connecting the two points by the width value on both sides.
❍ When set to CENTERLINE, point-to-point violations are reported as squares, centered
on the midpoint of the line connecting the two points, with a dimension equal to the
width value. Violations are oriented along the line.
❍ When set to EXTENTS, point-to-point violations are reported the same as when set to
REGION.
Input
0.778
0.8
Output
0.778
0.8
Output
0.778
0.8
Output
0.778
0.8
width
Optional. Specifies the value used to expand a single edge violation into a polygon,
including perpendicular spacing violations that are a single edge. The minimum value for
the argument is the internal resolution. The internal_resolution argument of the
resolution_options() function sets the internal resolution. The default is .001.
Input
Output
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
blocking_layer
Optional. Specifies the edge or polygon layer that provides an obstruction for the spacing
measurement in accordance with the blocking_layer_look_thru argument. The
blocking_layer has no effect on and does not interfere with the blocking provided by
the input layers. By default, this argument is not used.
blocking_layer_look_thru
Optional. Specifies the edges of the blocking_layer that the spacing check looks
through when measuring. The default is NONE.
❍ NONE. Does not look through any edges of the blocking_layer, including edge
endpoints.
❍ COINCIDENT. Looks through inside coincident edges of the blocking layer.
In the following example,
yellow = external1(pink, distance < minval, blocking_layer = blue);
cumulative_projection_length
Optional. Specifies how the projection length is measured when there are multiple
violations. See the projection_length argument for more information. The default is
NONE.
See the cumulative_projection_length argument of the enclose() function for
more information about the SAME_EDGE and JOGGING_EDGE options.
❍ NONE. Measures each violation separately.
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
❍ INDIVIDUAL. Measures edges if either edge matches the projection criteria as
specified in the projection argument.
❍ MUTUAL. Measures edges only if both edges match the following projection criteria:
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
region or that fall exactly on the boundary of the projection region are measured.
The projection argument is ignored.
■ Otherwise, both edges must match the projection criteria as specified in the
projection argument.
❍ MUTUAL_NON_ORTHOGONAL.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The look_thru argument is ignored, except when it is NOT_CONTAINED
and two intersecting edges are cut. The connectivity and orthogonal arguments
are not ignored.
See the intersection_angle argument of the external2() function for an example.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Distance
Error1 @= {@ "This is an example of an external1() function
min spacing 0.5";
external1( met1, distance <= 0.5, extension = RADIAL);
};
Extension
Error1 @= { @ "min spacing 0.5 opposite edges only";
external1( met1, distance < 0.5, extension = NONE);
};
Membership
Error1 @= { @ "min spacing 0.5 for edges on two different polygons" +
"min spacing 0.6 for edges on the same polygon (notches)";
external1(met1, distance < 0.5, extension = RADIAL,
membership = DIFFERENT_POLYGON);
external1(met1, distance < 0.6, extension = RADIAL,
membership = SAME_POLYGON);
};
Connectivity
Error1 @= { @ "min spacing 0.5 for all polygons on the same net";
external1(met1, < 0.5, RADIAL, connectivity = SAME_NET);
};
Orientation
Error1 @= { @ "min spacing 0.5 for met1" + "measure only parallel edges";
external1(met1, < 0.5, RADIAL, orientation = {PARALLEL});
};
Orthogonal
Error1 @= { @ "min spacing 0.5 for met1" +
@ "measure all parallel angled edges";
external1(met1, < 0.5, RADIAL, orthogonal = BOTH,
orientation = {PARALLEL});
};
Output_type
c1 = external1(met1, < 0.5, RADIAL, output_type = CENTERLINE);
See Also
external1_edge() and not_external1_edge()
external1_error()
Syntax
external1_edge(
layer1 = data_layer,
distance = doubleconstraint,
extension = NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE, //optional
extension_distance = double, //optional
membership = ALL | SAME_POLYGON | DIFFERENT_POLYGON,
//optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR},//optional
intersecting = {ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | NOT_ADJACENT | ALL, //optional
look_thru_count = integerconstraint, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH}, //optional
spacing_edge = ALL | PROJECTING, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
blocking_layer = data_layer, //optional
blocking_layer_look_thru = COINCIDENT | NONE, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
output_type = FAIL | CENTERLINE, //optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
name = "layer_label", //optional
output_side = ALL | HIGH | LOW //optional
);
not_external1_edge(
layer1 = data_layer,
distance = doubleconstraint,
extension = NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE, //optional
extension_distance = double, //optional
membership = ALL | SAME_POLYGON | DIFFERENT_POLYGON,
//optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR},//optional
intersecting = {ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | NOT_ADJACENT | ALL, //optional
look_thru_count = integerconstraint, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH}, //optional
spacing_edge = ALL | PROJECTING, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
blocking_layer = data_layer, //optional
blocking_layer_look_thru = COINCIDENT | NONE, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
name = "layer_label", //optional
output_side = ALL | HIGH | LOW //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
extension
Optional. Specifies the extension of the check region, beyond the endpoints of the edge
being checked. The default is RADIAL.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. The edges reported have a length equal to the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function.
In the conceptual diagram shown in Figure 2-218, the current edge being checked is
shown in solid black. The check region is dashed.
Figure 2-218 Check Region Extension
Input
0.996
0.2
0.7 0.8 1
1 0.95 0.996
1
Output
Output
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
membership
Optional. Specifies whether to check all distances between edges that are on the same
polygon or different polygons. For edge layers, polygon membership is determined by
layer ancestry. The default is ALL.
❍ ALL. Checks all edges regardless of polygon membership.
Input
Output
Output
Output
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the edges that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
Input
0.919
1.1
0.95 1.1
1
0.99
Output
Output
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
1
1
1
Output
Output
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ OUT. Measures edges that are outside of edges that are outside of the projection
region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
In Figure 2-219, the projection region for edge A is shown in gray. The green edges are
IN, the red edges are OUT, and the magenta edges are ON.
Input
0.99
0.99
0.99 0.99
Output
Output
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
❍ The orientation argument cannot contain PERPENDICULAR.
❍ The intersecting argument cannot contain PERPENDICULAR.
❍ The corner_configuration argument cannot be CORNER_TO_CORNER.
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
Input
0.919
1.1
0.95 1.1
1
0.99
Output
Output
Output
Output
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
Input
0.85 0.919
0.9 0.919
0.919
0.919
Output
Output
Output
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
❍ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not look
through any edges that share endpoint X with edge A. This setting avoids false
violations that might be reported when the look_thru argument is ALL.
❍ ALL. Looks through all edges.
See the example for the look_thru argument of the external1() function for more
information.
look_thru_count
Optional. Specifies the number of edges that must be looked through for a measurement
to occur. Edges coincident to the edge being measured are not included in the count.
The value must be nonnegative. See “Constraints” on page A-4 for more information.
The default is >=0, which means the count is ignored.
Note:
Use this argument only when the extension argument is NONE and the look_thru
argument is ALL.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
extension_obstructions
Optional. Specifies how look_thru is processed for the check region extension. Some
endpoint violations might be undesirable even though they fit the look_thru setting.
This argument specifies how aggressively the check finds and refines endpoint violations
in accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
See Figure 2-221 for an example of the extension_obstructions argument.
Figure 2-221 Example of extension_obstructions
POINT_TO_POINT
ALL
relational
Optional. Specifies if a check outputs additional violations based on the relationship of
the polygons. Connectivity and membership are considered when generating these
violations. The default is no additional reporting.
❍ POINT_TOUCH. Creates a violation where there is an outside-to-outside point touch.
The length of the violation is equal to the maximum of the distance constraint, with
a minimum value of two times the internal resolution. The internal_resolution
argument of the resolution_options() function sets the internal resolution. The
POINT_TOUCH argument is not available for edge input.
Figure 2-222 shows the effect of the relational argument settings.
Figure 2-222 relational Argument Example
layer1
Result
POINT_TOUCH
spacing_edge
Optional. Specifies the violation edges that are selected from distance violations. Each
distance violation consists of one edge that creates a projection region, and another
edge that falls inside that region. The default is ALL.
❍ ALL. Outputs all violation edges.
❍ PROJECTING. Specifies that only the violation edge that created the projection region
is output. For nonparallel violations, the violation edge is the edge that is
perpendicular to the violation.
Note:
The projection region in parallel violations is commutative, therefore PROJECTING
has no effect on parallel violations.
Endpoint violations have no projecting edge, so they are not reported with this setting.
For the following examples,
Input
1
0.99
0.919
1
Output
Output
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
blocking_layer
Optional. Specifies the edge or polygon layer that provides an obstruction for the spacing
measurement in accordance with the blocking_layer_look_thru argument. The
blocking_layer has no effect on and does not interfere with the blocking provided by
the input layers. By default, this argument is not used.
blocking_layer_look_thru
Optional. Specifies the edges of the blocking_layer that the spacing check looks
through when measuring. The default is NONE.
❍ NONE. Does not look through any edges of the blocking_layer, including edge
endpoints.
❍ COINCIDENT. Looks through inside coincident edges of the blocking layer.
cumulative_projection_length
Optional. Specifies how the projection length is measured when there are multiple
violations. See the projection_length argument for more information. The default is
NONE.
output_type
Optional. Specifies the type of output generated. The default is FAIL.
Note:
The output_type argument is not available for the not_external1_edge()
function.
❍ FAIL. Specifies that the portions of the edges that fall within the check region are
output.
❍ CENTERLINE. Outputs spacing violations as lines at the center of the projection
region. A line is two points connected with no specific order. The midpoints of the
sides of the violation region are used to create the lines. When the output_type
argument is CENTERLINE, only parallel spacing is supported.
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
❍ MUTUAL_NON_ORTHOGONAL.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The look_thru argument is ignored, except when it is NOT_CONTAINED
and two intersecting edges are cut. The connectivity and orthogonal arguments
are not ignored.
See the intersection_angle argument of the external2_edge() and
not_external2_edge() functions for an example.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
output_side
Optional. Specifies to output only the check edges on the specified side of any violation
projected from an orthogonal edge. The default is ALL.
Note:
To use the HIGH or LOW options,
■ The direction argument needs to be HORIZONTAL or VERTICAL.
■ The extension argument needs to be NONE.
❍ ALL. Outputs all check edges
■ For any violation projected from a horizontal edge, only the edge on the top side
is output.
■ For any violation projected from a vertical edge, only the edge on the right side is
output.
❍ LOW. Outputs all check edges.
■ For any violation projected from a horizontal edge, only the edge on the bottom
side is output.
■ For any violation projected from a vertical edge, only the edge on the left side is
output.
For examples, see the output_side argument of the enclose_edge() and
not_enclose_edge() functions.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Distance
Error1 @= {@ "This is an example of an external1_edge() function
min spacing 0.5";
external1_edge(met1, distance <= 0.5 );
};
Extension
Error1 @= { @ "min spacing 0.5 opposite edges only";
external1_edge(met1, distance < 0.5, extension = NONE);
};
Membership
Error1 @= { @ "min spacing 0.5 for edges on two different polygons" +
"min spacing 0.6 for edges on the same polygon (notches)";
external1_edge(met1, distance < 0.5, membership = DIFFERENT_POLYGON);
external1_edge(met1, distance < 0.6, membership = SAME_POLYGON);
};
Connectivity
Error1 @= { @ "min spacing 0.5 for all polygons on the same net";
external1_edge(met1, distance < 0.5, connectivity = SAME_NET);
};
Orientation
Error1 @= { @ "min spacing 0.5 for met1"; +
"measure only parallel edges";
external1_edge(met1, distance < 0.5, orientation = {PARALLEL});
};
Orthogonal
Error1 @= { @ "min spacing 0.5 for met1" +
"measure all parallel angled edges";
external1_edge(met1, distance < 0.5, orthogonal = BOTH,
orientation = {PARALLEL});
};
See Also
external1()
external1_error()
external2_edge() and not_external2_edge()
external1_error()
The external1_error() function measures outside-to-outside spacing between the edges
of one layer based on the specified distance. The arguments define various geometric
conditions for measuring the distance between the layer edges. The output is unmerged
errors.
Derived error layers are unformatted. These layers can be used by the drc_features()
function. The layers can be formatted and merged into normal layers using the
error_merge() and error_merge_edge() functions.
Syntax
external1_error(
layer1 = data_layer,
distance = doubleconstraint,
extension = NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE,
extension_distance = double, //optional
membership = ALL | SAME_POLYGON | DIFFERENT_POLYGON,
//optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR},//optional
intersecting = {ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | NOT_ADJACENT | ALL, //optional
look_thru_count = integerconstraint, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
blocking_layer = data_layer, //optional
blocking_layer_look_thru = COINCIDENT | NONE, //optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
name = "layer_label", //optional
voltage_filter = {delta_voltage = doubleconstraint,
delta_method = HIGH_LOW_MAX |
SAME_TYPE_MAX | SYNC_NET,
high_voltage_property_name = "string",
low_voltage_property_name = "string"},
//optional
relational = {POINT_TOUCH}, //optional
net_double_property_filter = {property_value = doubleconstraint,
property_name = "string"} //optional
);
Returns
error layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
extension
Optional. Specifies the extension of the check region, beyond the endpoints of the edge
being checked.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. See the description of the output_type argument for more information.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function for more information.
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
membership
Optional. Specifies whether to check all distances between edges that are on the same
polygon or different polygons. For edge layers, polygon membership is determined by
layer ancestry. The default is ALL.
❍ ALL. Checks all edges regardless of polygon membership.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the edges that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
See the examples for the projection argument of the external1() function for more
information.
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
❍ The orientation argument cannot contain PERPENDICULAR.
❍ The intersecting argument cannot contain PERPENDICULAR.
❍ The corner_configuration argument cannot be CORNER_TO_CORNER.
❍ The extension argument must be NONE.
❍ The projection argument must contain IN.
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
❍ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not look
through any edges that share endpoint X with edge A. This setting avoids false
violations that might be reported when the look_thru argument is ALL.
❍ ALL. Looks through all edges.
See the example for the look_thru argument of the external1() function for more
information.
look_thru_count
Optional. Specifies the number of edges that must be looked through for a measurement
to occur. Edges coincident to the edge being measured are not included in the count.
The value must be nonnegative. See “Constraints” on page A-4 for more information.
The default is >=0, which means the count is ignored.
Note:
Use this argument only when the extension argument is NONE and the look_thru
argument is ALL.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
extension_obstructions
Optional. Specifies how look_thru is processed for the check region extension. Some
endpoint violations might be undesirable even though they fit the look_thru setting.
This argument specifies how aggressively the check finds and refines endpoint violations
in accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
See the examples for the extension_obstructions argument of the external1()
function for more information.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
blocking_layer
Optional. Specifies the edge or polygon layer that provides an obstruction for the spacing
measurement in accordance with the blocking_layer_look_thru argument. The
blocking_layer has no effect on and does not interfere with the blocking provided by
the input layers. By default, this argument is not used.
blocking_layer_look_thru
Optional. Specifies the edges of the blocking_layer that the spacing check looks
through when measuring. The default is NONE.
❍ NONE. Does not look through any edges of the blocking_layer, including edge
endpoints.
❍ COINCIDENT. Looks through inside coincident edges of the blocking layer.
See the examples for the blocking_layer_look_thru argument of the external1()
function for more information.
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
❍ MUTUAL_NON_ORTHOGONAL.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The look_thru argument is ignored, except when it is NOT_CONTAINED
and two intersecting edges are cut. The connectivity and orthogonal arguments
are not ignored.
See the intersection_angle argument of the external2() and external2_edge()
and not_external2_edge() functions for examples.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
voltage_filter
Optional. Specifies that each spacing error is prefiltered to meet the voltage constraints.
The default is no constraint and no prefiltering.
❍ delta_voltage. Specifies with a nonnegative value that each spacing error must
have a delta voltage to satisfy the constraint. The default is <0, which means no
constraint.
❍ delta_method. Specifies how to calculate the delta voltage. The default is
HIGH_LOW_MAX.
■ SYNC_NET. Specifies that if the two nets are in sync, use SAME_TYPE_MAX.
Otherwise, use HIGH_LOW_MAX.
❍ high_voltage_property_name. Specifies the property name that represents high
voltage.
❍ low_voltage_property_name. Specifies the property name that represents low
voltage.
relational
Optional. Specifies if a check outputs additional violations based on the relationship of
the polygons. Connectivity and membership are considered when generating these
violations. The default is no additional reporting.
❍ POINT_TOUCH. Creates a violation where there is an outside-to-outside point touch.
The length of the violation is equal to the maximum of the distance constraint, with
a minimum value of two times the internal resolution. The internal_resolution
argument of the resolution_options() function sets the internal resolution. The
POINT_TOUCH argument is not available for edge input.
Figure 2-223 shows the effect of the relational argument settings.
Figure 2-223 relational Argument Example
layer1
Result
POINT_TOUCH
net_double_property_filter
Optional. Specifies that each spacing error is prefiltered to meet the property constraints.
The default is no constraint and no prefiltering.
❍ property_value: Specifies with a nonnegative value that each spacing error must
have either net with a property value to satisfy the constraint. The default is <0, which
means no constraint.
❍ property_name: Specifies the name of the property.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
To set a minimum spacing of 0.5:
ext1_errs = external1_error(layer1 = met1, distance <= 0.5,
extension = RADIAL);
See Also
drc_features()
external1()
external1_edge() and not_external1_edge()
external2()
The external2() function creates polygons that are formed by pairs of violation edges. It
measures outside-to-outside spacing between two layers based on the specified distance.
The arguments define various geometric conditions for measuring the distance between the
layer edges.
Syntax
external2(
layer1 =
data_layer,
layer2 =
data_layer,
distance =
doubleconstraint,
extension =
NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE,
extension_distance = double, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR},//optional
intersecting = {TOUCH, ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
from_layer = LAYER1 | LAYER2 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | COINCIDENT | RELATED_COINCIDENT |
INSIDE | NOT_ADJACENT |
NOT_CONTAINED | ALL, //optional
look_thru_count = integerconstraint, //optional
look_thru_from_layer = LAYER1 | LAYER2 | ALL, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH | INSIDE | CUTTING |
OVERLAP | CROSS}, //optional
relational_type = EXPANDED_EDGE | POLYGON, //optional
point_touch_shape = EXTENTS | SQUARE, //optional
shape_size = double, //optional
output_type = REGION | CENTERLINE | EXTENTS, //optional
width = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
line_touch_shape = OUTSIDE | INSIDE | BOTH, //optional
blocking_layer = data_layer, //optional
blocking_layer_look_thru = COINCIDENT | NONE, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer against which the layer1 layer is
checked.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
extension
Required. Specifies the extension of the check region, beyond the endpoints of the edge
being checked.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. See the description of the output_type argument for more information.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function for more information.
In the conceptual diagram shown in Figure 2-224, the current edge being checked is
shown in solid black. The check region is dashed.
Figure 2-224 Check Region Extension
Input
0.996
0.2
0.7 0.8 1
1 0.95 0.996
1
Output
Output
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the edges that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This must
be a valid connect database when the connectivity argument is SAME_NET or
DIFFERENT_NET.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
Input
0.99 1
0.99
0.99 1 1
0.99
Output
Output
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
Input 0.849
0.656
0.778
0.849
0.707
Output
Output
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
argument specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
In Figure 2-225, the projection region for edge A is shown in gray. The green edges are
IN, the red edges are OUT, and the magenta edges are ON.
Input
0.99
0.99
0.99 0.99
Output
Output
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
❍ The orientation argument cannot contain PERPENDICULAR.
❍ The intersecting argument cannot contain PERPENDICULAR.
❍ The corner_configuration argument cannot be CORNER_TO_CORNER.
❍ The extension argument must be NONE.
❍ The projection argument must contain IN.
Note:
See the cumulative_projection_length argument for more information.
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
Input
0.99 1
0.99
0.99 1 1
0.99
Output
Output
Output
Output
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
Input
0.919 1
0.919
1
Output
Output
Output
from_layer
Optional. Specifies the layer that is used to create check regions. The default is ALL.
❍ LAYER1. Specifies that only layer1 edges create check regions.
Input
0.919 1
0.919
1
Output
Output
Output
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges.
❍ RELATED_COINCIDENT. Uses COINCIDENT if the two input layers have the same layer
ancestry; otherwise, uses NONE.
❍ INSIDE. Looks inside both layer1 and layer2.
❍ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not look
through any edges that share endpoint X with edge A. This setting avoids false
violations that might be reported when the look_thru argument is ALL.
Note:
When the edge_containment argument is not ALL, the NOT_ADJACENT behavior
is changed.
After filtering edges by edge_containment, when two checked edges do not
project onto each other, an adjacent edge of the extension past the endpoint of
one checked edge can block the extension check. If the adjacent edge fully blocks
the shape of the extension violation, then the extension violation is not reported.
The extension is not measured.
Figure 2-227 and Figure 2-228 show examples of the look_thru argument set to
NOT_ADJACENT. The syntax for these examples is:
external2(red, blue, distance < dash_length, extension = RADIAL,
look_thru=NOT_ADJACENT, edge_containment=OUTSIDE)
Figure 2-227 shows an example where the tool reports two violations.
Figure 2-227 look_thru = NOT_ADJACENT Example With Violations
Figure 2-228 shows an example where the tool does not report violations.
❍ NOT_CONTAINED. Looks through all edges, except polygons or edges that contain the
projection. A projection is contained when any of the following are true:
■ Edges of one layer are outside coincident with projecting edges of the other layer.
■ Polygons of one layer overlap projecting edges of the other layer. For edge layers,
this contain does not apply.
Figure 2-229 shows an example of using the NOT_CONTAINED option.
external2(gray, purple, look_thru = NOT_CONTAINED);
Figure 2-230 shows an example of the edges that a spacing check looks through for
various look_thru argument settings.
1 NONE
1, 2 COINCIDENT
1, 2, 3, 4 INSIDE
1, 2, 3, 4, 5 ALL
1 2 3 4 5
look_thru_count
Optional. Specifies the number of edges that must be looked through for a measurement
to occur. Edges coincident to the edge being measured are not included in the count.
The value must be nonnegative. See “Constraints” on page A-4 for more information.
The default is >=0, which means the count is ignored.
Note:
Use this argument only when the extension argument is NONE and the look_thru
argument is ALL.
look_thru_from_layer
Optional. Controls which edges are counted for the look_thru_count argument. The
default is ALL.
❍ LAYER1. Counts only layer1 edges.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
In the following example,
green = external2(red, black, distance > x,
extension = RADIAL,
extension_look_past = POINT_TO_POINT);
extension_obstructions
Optional. Specifies how look_thru is processed for the check region extension. Some
endpoint violations might be undesirable even though they fit the look_thru setting.
This argument specifies how aggressively the check finds and refines endpoint violations
in accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
See Figure 2-231 for an example of the extension_obstructions argument.
ALL
relational
Optional. Specifies if a check outputs additional violations based on the relationship of
the polygons. Connectivity is considered when generating these violations. INSIDE,
CUTTING, and CROSS are available only when both inputs are polygon layers. The default
is no additional reporting.
❍ POINT_TOUCH. Creates a violation where there is an outside-to-outside point touch.
The format of the violation is determined by the point_touch_shape and
shape_size arguments.
When the edge_containment argument is specified, the POINT_TOUCH argument
creates a violation by using an intersection angle for all edges that touch any
point-touch point. The angle of the intersection angle must be greater than or equal
to 0 and less than 180. When the edge_containment argument is specified, the
point_touch_shape and shape_size arguments are ignored.
The POINT_TOUCH argument is not available for edge input.
❍ INSIDE. Creates a violation for polygons that are inside.
❍ OVERLAP. Creates a violation for material that is not outside the other layer.
■ When both inputs are polygon layers, any shared area between the two layers is
reported.
■ When one of the inputs is a polygon layer and the other is an edge layer, edge
portions that fall inside the polygon layer are reported.
■ When both inputs are edge layers, inside coincident portions are reported.
❍ CROSS. Creates a violation where layer1 and layer2 edges cross. The violation
reports the point where layer1 edges cross from inside to not inside of layer2
edges, and layer2 edges cross from inside to not inside of layer1 edges, where not
inside includes outside coincident.
The violations are created outside the polygons, as though the polygon edges are
being measured outside to outside regardless of the angle. The length of the violation
is equal to the spacing distance unless the edges outside of the cross are coincident,
then the entire coincident length is reported, like a touch violation.
Figure 2-232 and Figure 2-233 show the effect of the relational argument settings.
Figure 2-232 relational Argument Example
layer1
layer2
Result
POINT_TOUCH CROSS
relational_type
Optional. Specifies how INSIDE, CUTTING, and OVERLAP relational violations are
reported. The default is EXPANDED_EDGE.
❍ EXPANDED_EDGE. Reports violations as individual edges expanded to the outside by
width.
❍ POLYGON. Reports violations as closed polygons (applies only when both inputs are
polygons).
For the following examples,
Input
Output
0.4
0.4
0.4
Output
point_touch_shape
Optional. Specifies the shapes that are generated for point touches. The default is
EXTENTS.
❍ EXTENTS. Specifies that the length of the violation is equal to the maximum of the
distance constraint, with a minimum value of two times the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution. The violation region is approximated with edges that are either
perpendicular, parallel, or at a 45-degree angle, to the edges that form the point
touch, to avoid creating odd-angle data.
❍ SQUARE. Specifies that a square is centered on the point touch. The sides of the
square are horizontal and vertical. The size of the square is determined by the
shape_size argument.
shape_size
Optional. Specifies the length of the sides of the squares generated when
point_touch_shape = SQUARE. The default is twice the maximum of the spacing
distance. This value must be positive. It is rounded to the nearest even multiple of the
internal resolution, with a minimum value of twice the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution.
output_type
Optional. Specifies the type of output generated. The default is REGION.
❍ REGION. Reports violations as polygons, which are generated by connecting the
violation edges.
❍ When set to EXTENTS, point-to-point violations are reported the same as when set to
REGION.
For the following examples,
Input
0.778
0.8
Output
0.778
0.8
Output
0.778
0.8
Output
0.778
0.8
width
Optional. Specifies the value used to expand a single edge violation into a polygon,
including perpendicular spacing violations that are a single edge. The minimum value for
the argument is the internal resolution. The internal_resolution argument of the
resolution_options() function sets the internal resolution. The default is 0.001.
For the following example,
Input
Output
0.5
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
line_touch_shape
Optional. Specifies how to expand a line-touch edge violation into a polygon. The default
is OUTSIDE.
❍ OUTSIDE. Outputs a line-touch polygon outside of the dimensional function layer1
polygon. The output polygon size equals the value of the width option.
❍ INSIDE. Outputs a line-touch polygon inside of layer1. The output polygon size
equals the value of the width option.
❍ BOTH. Outputs a line touch polygon inside and outside of the layer1. The total output
size is 2*width option.
blocking_layer
Optional. Specifies the edge or polygon layer that provides an obstruction for the spacing
measurement in accordance with the blocking_layer_look_thru argument. The
blocking_layer has no effect on and does not interfere with the blocking provided by
the input layers. By default, this argument is not used.
blocking_layer_look_thru
Optional. Specifies the edges of the blocking_layer that the spacing check looks
through when measuring. The default is NONE.
❍ NONE. Does not look through any edges of the blocking_layer, including edge
endpoints.
❍ COINCIDENT. Looks through inside coincident edges of the blocking layer.
In the following example,
yellow = external2(green, pink, distance < minval, blocking_layer =
blue);
cumulative_projection_length
Optional. Specifies how the projection length is measured when there are multiple
violations. See the projection_length argument for more information. The default is
NONE.
See the cumulative_projection_length argument of the enclose() function for
more information about the SAME_EDGE and JOGGING_EDGE options.
❍ NONE. Measures each violation separately.
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
❍ INDIVIDUAL. Measures edges if either edge matches the projection criteria as
specified in the projection argument.
❍ MUTUAL. Measures edges only if both edges match the following projection criteria:
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
❍ MUTUAL_NON_ORTHOGONAL.
membership
Optional. Specifies whether to check all distances between edges that are on the same
polygon or different polygons. Polygon membership is determined by layer ancestry. The
default is ALL. The SAME_POLYGON and DIFFERENT_POLYGON options are valid only if the
two input layers have the same layer ancestry.
❍ ALL. Checks all edges regardless of polygon membership.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The look_thru argument is ignored, except when it is NOT_CONTAINED
and two intersecting edges are cut. The connectivity and orthogonal arguments
are not ignored.
Figure 2-234 shows an example of using the intersection_angle argument.
green = external2(blue, red, distance < 1.0, extension = RADIAL,
orientation = {}, intersecting = {},
intersection_angle < 180);
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
edge_containment
Optional. Filters edges, based on the topological relation of the two layers, before the
tool makes any measurements. Edges are broken into segments that are inside, outside,
inside coincident, and outside coincident with the other layer. The default is ALL.
Note:
When the edge_containment argument is not ALL and the two input layers do not
have the same layer ancestry, the break_edges argument is forced to true.
❍ OUTSIDE.
If the other layer is a polygon layer, only those edges that are outside and inside
coincident with the other layer are included in the measurements.
If the other layer is an edge layer, those edges that are not outside coincident with the
other layer are included in the measurements.
Important:
Edges that are outside coincident with the other layer are included in the
measurement for touch violations.
In Figure 2-235, the dash lines are filtered out before the measurement. The syntax is
external2(layer1 = orange, layer2 = blue, ...)
break_edges
Optional. Controls edge breaking behavior for two-layer spacing checks when the two
input layers do not have the same layer ancestry. The segments resulting from the edge
breaking are processed individually by the edge filters and spacing constraints. The
default is false.
❍ true. Enables edge breaking behavior when the two input layers do not have the
same layer ancestry. Edges are broken into individual segments as follows:
■ Specifies that edges are broken at every point of intersection with the other layer.
■ Specifies that coincident edges are broken at the point where they become
not-coincident.
❍ false. Specifies that edges are not broken.
Figure 2-236 shows an example of intersecting = {}.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Distance
Error1 @= {@ "This is an example of an external2() function
min spacing 0.5";
externa12(met1, met2, <= 0.5, RADIAL);
};
Extension
Error1 @= { @ "min spacing 0.5 opposite edges only";
external2(met1, met2, distance < 0.5, extension = NONE);
};
Connectivity
Error1 @= { @ "min spacing 0.5 for all polygons on the same net";
external2(met1, met2, distance < 0.5,
extension = RADIAL, connectivity = SAME_NET);
};
Orientation
Error1 @= { @ "min spacing 0.5 for met1 to met2" +
measure only parallel edges";
external2(met1, met2, distance < 0.5,
extension = RADIAL, orientation = {PARALLEL});
};
Orthogonal
Error1 @= { @ "min spacing 0.5 for met1 to met2" +
"measure all parallel angled edges";
external2(met1, met2, distance < 0.5, extension = RADIAL,
orthogonal = BOTH, orientation = {PARALLEL});
};
Output type
c1 = external2(met1, met2, distance < 0.5, extension = RADIAL,
output_type = CENTERLINE);
See Also
external2_edge() and not_external2_edge()
Syntax
external2_edge(
layer1 =
data_layer,
layer2 =
data_layer,
distance =
doubleconstraint, //optional
extension =
NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE, //optional
extension_distance = double, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR},//optional
intersecting = {TOUCH, ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
from_layer = LAYER1 | LAYER2 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | COINCIDENT | RELATED_COINCIDENT |
INSIDE | NOT_ADJACENT |
NOT_CONTAINED | ALL, //optional
look_thru_count = integerconstraint, //optional
look_thru_from_layer = LAYER1 | LAYER2 | ALL, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH | INSIDE | CUTTING |
OVERLAP | CROSS}, //optional
output_layer = LAYER1 | LAYER2, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
blocking_layer = data_layer, //optional
blocking_layer_look_thru = COINCIDENT | NONE, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
output_type = FAIL | CENTERLINE, //optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
membership = ALL | SAME_POLYGON | DIFFERENT_POLYGON,
//optional
intersection_angle = doubleconstraint, //optional
name = "layer_label", //optional
edge_containment = OUTSIDE | ALL, //optional
output_side = ALL | HIGH | LOW, //optional
break_edges = true | false //optional
);
not_external2_edge(
layer1 =
data_layer,
layer2 =
data_layer,
distance =
doubleconstraint, //optional
extension =
NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE, //optional
extension_distance = double, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR},//optional
intersecting = {TOUCH, ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
from_layer = LAYER1 | LAYER2 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | COINCIDENT | RELATED_COINCIDENT |
INSIDE | NOT_ADJACENT |
NOT_CONTAINED | ALL, //optional
look_thru_count = integerconstraint, //optional
look_thru_from_layer = LAYER1 | LAYER2 | ALL, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH | INSIDE | CUTTING |
OVERLAP | CROSS}, //optional
output_layer = LAYER1 | LAYER2, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
blocking_layer = data_layer, //optional
blocking_layer_look_thru = COINCIDENT | NONE, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
membership = ALL | SAME_POLYGON | DIFFERENT_POLYGON,
//optional
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer against which the layer1 layer is
checked.
distance
Optional. Specifies the check distance. See “Constraints” on page A-4 for more
information. The default is 0.
Note:
The only constraint operators allowed are <, <=, and ==.
extension
Optional. Specifies the extension of the check region, beyond the endpoints of the edge
being checked. The default is RADIAL.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. The edges reported have a length equal to the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function for more information.
In the conceptual diagram shown in Figure 2-240, the current edge being checked is
shown in solid black. The check region is dashed.
Figure 2-240 Check Region Extension
Input
0.996
0.2
0.7 0.8 1
1 0.95 0.996
1
Output
Output
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the edges that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
Input
0.99 1
0.99
0.99 1 1
0.99
Output
Output
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ TOUCH. Independent of the distance argument, reports an outside touch as a
violation.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
Input
0.849
0.656
0.778
0.849
0.707
Output
Output
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is (IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
In Figure 2-241, the projection region for edge A is shown in gray. The green edges are
IN, the red edges are OUT, and the magenta edges are ON.
Input
0.99
0.99
0.99 0.99
Output
Output
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
❍ The orientation argument cannot contain PERPENDICULAR.
❍ The intersecting argument cannot contain PERPENDICULAR.
❍ The corner_configuration argument cannot be CORNER_TO_CORNER.
❍ The extension argument must be NONE.
❍ The projection argument must contain IN.
Note:
See the cumulative_projection_length argument for more information.
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
Input
0.99 1
0.99
0.99 1 1
0.99
Output
Output
Output
Output
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
Input
0.919 1
0.919
1
Output
Output
Output
from_layer
Optional. Specifies the layer that is used to create check regions. The default is ALL.
❍ LAYER1. Specifies that only layer1 edges create check regions.
Input
0.919 1
0.919
1
Output
Output
Output
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
❍ RELATED_COINCIDENT. Uses COINCIDENT if the two input layers have the same layer
ancestry; otherwise, NONE is used.
❍ INSIDE. Looks inside both layer1 and layer2.
❍ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not look
through any edges that share endpoint X with edge A. This setting avoids false
violations that might be reported when the look_thru argument is ALL.
Note:
When the edge_containment argument is not ALL, the NOT_ADJACENT behavior
is changed.
After filtering edges by edge_containment, when two checked edges do not
project onto each other, an adjacent edge of the extension past the endpoint of
one checked edge can block the extension check. If the adjacent edge fully blocks
the shape of the extension violation, then the extension violation is not reported.
The extension is not measured.
❍ NOT_CONTAINED. Looks through all edges, except polygons or edges that contain the
projection. See the NOT_CONTAINED option of the look_thru argument of the
external2() function for exceptions and an example.
look_thru_count
Optional. Specifies the number of edges that must be looked through for a measurement
to occur. Edges coincident to the edge being measured are not included in the count.
The value must be nonnegative. See “Constraints” on page A-4 for more information.
The default is >=0, which means the count is ignored.
Note:
Use this argument only when the extension argument is NONE and the look_thru
argument is ALL.
look_thru_from_layer
Optional. Controls which edges are counted for the look_thru_count argument. The
default is ALL.
❍ LAYER1. Counts only layer1 edges.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
extension_obstructions
Optional. Specifies how look_thru is processed for the check region extension. Some
endpoint violations might be undesirable even though they fit the look_thru setting.
This argument specifies how aggressively the check finds and refines endpoint violations
in accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
See Figure 2-243 for an example of the extension_obstructions argument.
Figure 2-243 Example of extension_obstructions
POINT_TO_POINT
ALL
relational
Optional. Specifies if a check outputs additional violations based on the relationship of
the polygons. Connectivity is considered when generating these violations. INSIDE,
CUTTING, and CROSS are available only when both inputs are polygon layers. The default
is no additional reporting.
❍ POINT_TOUCH. Creates a violation where there is an outside-to-outside point touch.
The length of the violation is equal to the maximum of the distance constraint, with
a minimum value of two times the internal resolution. The internal_resolution
argument of the resolution_options() function sets the internal resolution.
When the edge_containment argument is specified, the POINT_TOUCH argument
creates a violation by using an intersection angle for all edges that touch any
point-touch point. The angle of the intersection angle must be greater than or equal
to 0 and less than 180. When the edge_containment argument is specified, the
point_touch_shape and shape_size arguments are ignored.
The POINT_TOUCH argument is not available for edge input.
❍ INSIDE. Creates a violation for polygons that are inside.
❍ OVERLAP. Creates a violation for material that is not outside the other layer.
■ When both inputs are polygon layers, any shared area between the two layers is
reported.
■ When one of the inputs is an edge layer, edge portions that fall inside the polygon
layer are reported.
■ When both inputs are edge layers, inside coincident portions are reported.
❍ CROSS. Creates a violation where layer1 and layer2 edges cross. The violation
reports the point where layer1 edges cross from inside to not inside of layer2
edges, and layer2 edges cross from inside to not inside of layer1 edges, where not
inside includes outside coincident.
The violations are created outside the polygons, as though the polygon edges are
being measured outside to outside regardless of the angle. The length of the violation
is equal to the spacing distance unless the edges outside of the cross are coincident,
then the entire coincident length is reported, like a touch violation.
Figure 2-244 and Figure 2-245 show the effect of the relational argument settings.
layer1
layer2
Result
POINT_TOUCH CROSS
output_layer
Optional. Specifies the layer that is output for the violations. The default is LAYER1.
❍ LAYER1. Specifies that only layer1 edges are output.
Input
Output
Output
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
blocking_layer
Optional. Specifies the edge or polygon layer that provides an obstruction for the spacing
measurement in accordance with the blocking_layer_look_thru argument. The
blocking_layer has no effect on and does not interfere with the blocking provided by
the input layers. By default, this argument is not used.
blocking_layer_look_thru
Optional. Specifies the edges of the blocking_layer that the spacing check looks
through when measuring. The default is NONE.
❍ NONE. Does not look through any edges of the blocking_layer, including edge
endpoints.
❍ COINCIDENT. Looks through inside coincident edges of the blocking layer.
cumulative_projection_length
Optional. Specifies how the projection length is measured when there are multiple
violations. See the projection_length argument for more information. The default is
NONE.
See the cumulative_projection_length argument of the enclose() function for
more information about the SAME_EDGE and JOGGING_EDGE options.
❍ NONE. Measures each violation separately.
output_type
Optional. Specifies the type of output generated. The default is FAIL.
Note:
The output_type argument is not available for the not_external2_edge()
function.
❍ FAIL. Specifies that the portions of the edges that fall within the check region are
output.
❍ CENTERLINE. Outputs spacing violations as lines at the center of the projection
region. A line is two points connected with no specific order. The midpoints of the
sides of the violation region are used to create the lines. When the output_type
argument is CENTERLINE, only parallel spacing is supported.
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
❍ INDIVIDUAL. Measures edges if either edge matches the projection criteria as
specified in the projection argument.
❍ MUTUAL. Measures edges only if both edges match the following projection criteria:
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
❍ MUTUAL_NON_ORTHOGONAL.
membership
Optional. Specifies whether to check all distances between edges that are on the same
polygon or different polygons. For edge layers, polygon membership is determined by
layer ancestry. The default is ALL. The SAME_POLYGON and DIFFERENT_POLYGON options
are valid only if the two input layers have the same layer ancestry.
❍ ALL. Checks all edges regardless of polygon membership.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The look_thru argument is ignored, except when it is NOT_CONTAINED
and two intersecting edges are cut. The connectivity and orthogonal arguments
are not ignored.
Figure 2-246 shows an example of using the intersection_angle argument.
green = external2_edge(blue, red, distance < 1.0, extension = RADIAL,
orientation = {}, intersecting = {},
intersection_angle < 180);
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
edge_containment
Optional. Filters edges, based on the topological relation of the two layers, before the
tool makes any measurements. Edges are broken into segments that are inside, outside,
inside coincident, and outside coincident with the other layer. The default is ALL.
Note:
When the edge_containment argument is not ALL and the two input layers do not
have the same layer ancestry, the break_edges argument is forced to true.
❍ OUTSIDE.
If the other layer is a polygon layer, only those edges that are outside and inside
coincident with the other layer are included in the measurements.
If the other layer is an edge layer, those edges that are not outside coincident with the
other layer are included in the measurements.
Important:
Edges that are outside coincident with the other layer are included in the
measurement for touch violations.
See Figure 2-235 for an example.
❍ ALL. Does not filter edges.
output_side
Optional. Specifies to output only the check edges on the specified side of any violation
projected from an orthogonal edge. The default is ALL.
Note:
To use the HIGH or LOW options,
■ The direction argument needs to be HORIZONTAL or VERTICAL.
■ The extension argument needs to be NONE.
❍ ALL. Outputs all check edges
■ For any violation projected from a horizontal edge, only the edge on the top side
is output.
■ For any violation projected from a vertical edge, only the edge on the right side is
output.
❍ LOW. Outputs all check edges.
■ For any violation projected from a horizontal edge, only the edge on the bottom
side is output.
■ For any violation projected from a vertical edge, only the edge on the left side is
output.
For examples, see the output_side argument of the enclose_edge() and
not_enclose_edge() functions.
break_edges
Optional. Controls edge breaking behavior for two-layer spacing checks when the two
input layers do not have the same layer ancestry. The segments resulting from the edge
breaking are processed individually by the edge filters and spacing constraints. The
default is false.
❍ true. Enables edge breaking behavior when the two input layers do not have the
same layer ancestry. Edges are broken into individual segments as follows:
■ Specifies that edges are broken at every point of intersection with the other layer.
■ Specifies that coincident edges are broken at the point where they become
not-coincident.
❍ false. Specifies that edges are not broken.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Distance
Error1 @= {@ "This is an example of an external2_edge() function
min spacing 0.5";
externa12_edge(met1, met2, distance <= 0.5 );
};
Extension
Error1 @= {@ "min spacing 0.5 opposite edges only";
external2_edge(met1, met2, distance < 0.5, extension = NONE);
};
Connectivity
Error1 @= {@ "min spacing 0.5 for all polygons on the same net";
external2_edge(met1, met2, distance < 0.5, connectivity = SAME_NET);
};
Orientation
Error1 @= {@ "min spacing 0.5 for met1 to met2" +
"measure only parallel edges";
external2_edge(met1, met2, distance < 0.5, orientation = {PARALLEL});
};
Orthogonal
Error1 @= { @ "min spacing 0.5 for met1 to met2" +
"measure all parallel angled edges";
external2_edge(met1, met2, distance < 0.5, orthogonal = BOTH,
orientation = {PARALLEL});
};
See Also
external1_edge() and not_external1_edge()
external2()
external2_error()
The external2_error() function measures outside-to-outside spacing between two layers
based on the specified distance. The arguments define various geometric conditions for
measuring the distance between the layer edges. The output is unmerged errors.
Derived error layers are unformatted. These layers can be used by the drc_features()
function. The layers can be formatted and merged into normal layers using the
error_merge() and error_merge_edge() functions.
Syntax
external2_error(
layer1 = data_layer,
layer2 = data_layer,
distance = doubleconstraint,
extension = NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE,
extension_distance = double, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR},//optional
intersecting = {TOUCH, ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
from_layer = LAYER1 | LAYER2 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | COINCIDENT | RELATED_COINCIDENT |
INSIDE | NOT_ADJACENT |
NOT_CONTAINED | ALL, //optional
look_thru_count = integerconstraint, //optional
look_thru_from_layer = LAYER1 | LAYER2 | ALL, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
blocking_layer = data_layer, //optional
blocking_layer_look_thru = COINCIDENT | NONE, //optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
membership = ALL | SAME_POLYGON | DIFFERENT_POLYGON,
//optional
intersection_angle =
doubleconstraint, //optional
name =
"layer_label", //optional
edge_containment =
OUTSIDE | ALL, //optional
relational =
{POINT_TOUCH | INSIDE | CUTTING |
OVERLAP | CROSS}, //optional
break_edges = true | false, //optional
voltage_filter = {delta_voltage = doubleconstraint,
delta_method = HIGH_LOW_MAX |
SAME_TYPE_MAX | SYNC_NET
HIGH_LOW,
high_voltage_property_name = "string",
low_voltage_property_name = "string"},
//optional
net_double_property_filter = {property_value = doubleconstraint,
property_name = "string"} //optional
);
Returns
error layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer against which the layer1 layer is
checked.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
extension
Required. Specifies the extension of the check region, beyond the endpoints of the edge
being checked.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. See the description of the output_type argument for more information.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function for more information.
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the edges that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ TOUCH. Independent of the distance argument, reports an outside touch as a
violation.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
argument specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
See the examples for the projection argument of the external2() function for more
information.
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
❍ The orientation argument cannot contain PERPENDICULAR.
❍ The intersecting argument cannot contain PERPENDICULAR.
❍ The corner_configuration argument cannot be CORNER_TO_CORNER.
❍ The extension argument must be NONE.
❍ The projection argument must contain IN.
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
from_layer
Optional. Specifies the layer that is used to create check regions. The default is ALL.
❍ LAYER1. Specifies that only layer1 edges create check regions.
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ RELATED_COINCIDENT. Uses COINCIDENT if the two input layers have the same layer
ancestry; otherwise, NONE is used.
❍ INSIDE. Looks inside both layer1 and layer2.
❍ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not look
through any edges that share endpoint X with edge A. This setting avoids false
violations that might be reported when the look_thru argument is ALL.
Note:
When the edge_containment argument is not ALL, the NOT_ADJACENT behavior
is changed.
After filtering edges by edge_containment, when two checked edges do not
project onto each other, an adjacent edge of the extension past the endpoint of
one checked edge can block the extension check. If the adjacent edge fully blocks
the shape of the extension violation, then the extension violation is not reported.
The extension is not measured.
❍ NOT_CONTAINED. Looks through all edges, except polygons or edges that contain the
projection. See the NOT_CONTAINED option of the look_thru argument of the
external2() function for exceptions and an example.
❍ ALL. Looks through all edges.
See the example for the look_thru argument of the external2() function for more
information.
look_thru_count
Optional. Specifies the number of edges that must be looked through for a measurement
to occur. Edges coincident to the edge being measured are not included in the count.
The value must be nonnegative. See “Constraints” on page A-4 for more information.
The default is >=0, which means the count is ignored.
Note:
Use this argument only when the extension argument is NONE and the look_thru
argument is ALL.
look_thru_from_layer
Optional. Controls which edges are counted for the look_thru_count argument. The
default is ALL.
❍ LAYER1. Counts only layer1 edges.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
See the examples for the extension_look_past argument of the external2() function
for more information.
extension_obstructions
Optional. Specifies how look_thru is processed for the check region extension. Some
endpoint violations might be undesirable even though they fit the look_thru setting.
This argument specifies how aggressively the check finds and refines endpoint violations
in accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
See the examples for the extension_obstructions argument of the external2()
function for more information.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
blocking_layer
Optional. Specifies the edge or polygon layer that provides an obstruction for the spacing
measurement in accordance with the blocking_layer_look_thru argument. The
blocking_layer has no effect on and does not interfere with the blocking provided by
the input layers. By default, this argument is not used.
blocking_layer_look_thru
Optional. Specifies the edges of the blocking_layer that the spacing check looks
through when measuring. The default is NONE.
❍ NONE. Does not look through any edges of the blocking_layer, including edge
endpoints.
❍ COINCIDENT. Looks through inside coincident edges of the blocking layer.
See the examples for the blocking_layer_look_thru argument of the external2()
function for more information.
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
❍ INDIVIDUAL. Measures edges if either edge matches the projection criteria as
specified in the projection argument.
❍ MUTUAL. Measures edges only if both edges match the following projection criteria:
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
❍ MUTUAL_NON_ORTHOGONAL.
membership
Optional. Specifies whether to check all distances between edges that are on the same
polygon or different polygons. For edge layers, polygon membership is determined by
layer ancestry. The default is ALL. The SAME_POLYGON and DIFFERENT_POLYGON options
are valid only if the two input layers have the same layer ancestry.
❍ ALL. Checks all edges regardless of polygon membership.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The look_thru argument is ignored, except when it is NOT_CONTAINED
and two intersecting edges are cut. The connectivity and orthogonal arguments
are not ignored.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
edge_containment
Optional. Filters edges, based on the topological relation of the two layers, before the
tool makes any measurements. Edges are broken into segments that are inside, outside,
inside coincident, and outside coincident with the other layer. The default is ALL.
Note:
When the edge_containment argument is not ALL and the two input layers do not
have the same layer ancestry, the break_edges argument is forced to true.
❍ OUTSIDE.
If the other layer is a polygon layer, only those edges that are outside and inside
coincident with the other layer are included in the measurements.
If the other layer is an edge layer, those edges that are not outside coincident with the
other layer are included in the measurements.
Important:
Edges that are outside coincident with the other layer are included in the
measurement for touch violations.
See Figure 2-235 for an example.
❍ ALL. Does not filter edges.
relational
Optional. Specifies if a check outputs additional violations based on the relationship of
the polygons. Connectivity is considered when generating these violations. INSIDE,
CUTTING, and CROSS are available only when both inputs are polygon layers. The default
is no additional reporting.
❍ POINT_TOUCH. Creates a violation where there is an outside-to-outside point touch.
When the edge_containment argument is specified, the POINT_TOUCH argument
creates a violation by using an intersection angle for all edges that touch any
point-touch point. The angle of the intersection angle must be greater than or equal
to 0 and less than 180. When the edge_containment argument is specified, the
point_touch_shape and shape_size arguments are ignored.
The POINT_TOUCH argument is not available for edge input.
❍ OVERLAP. Creates a violation for material that is not outside the other layer.
■ When both inputs are polygon layers, the edges of any shared area between the
two layers are reported.
■ When one of the inputs is an edge layer, edge portions that fall inside the polygon
layer are reported.
■ When both inputs are edge layers, inside coincident portions are reported.
❍ CROSS. Creates a violation where layer1 and layer2 edges cross. The violation
reports the point where layer1 edges cross from inside to not inside of layer2
edges, and layer2 edges cross from inside to not inside of layer1 edges, where not
inside includes outside coincident.
The violations are created outside the polygons, as though the polygon edges are
being measured outside to outside regardless of the angle. The length of the violation
is equal to the spacing distance unless the edges outside of the cross are coincident;
then the entire coincident length is reported, like a touch violation.
break_edges
Optional. Controls edge breaking behavior for two-layer spacing checks when the two
input layers do not have the same layer ancestry. The segments resulting from the edge
breaking are processed individually by the edge filters and spacing constraints. The
default is false.
❍ true. Enables edge breaking behavior when the two input layers do not have the
same layer ancestry. Edges are broken into individual segments as follows:
■ Specifies that edges are broken at every point of intersection with the other layer.
■ Specifies that coincident edges are broken at the point where they become
not-coincident.
❍ false. Specifies that edges are not broken.
voltage_filter
Optional. Specifies that each spacing error is prefiltered to meet the voltage constraints.
The default is no constraint and no prefiltering.
❍ delta_voltage. Specifies with a nonnegative value that each spacing error must
have a delta voltage to satisfy the constraint. The default is <0, which means no
constraint.
❍ delta_method. Specifies how to calculate the delta voltage.
■ SYNC_NET. Specifies that if the two nets are sync, use SAME_TYPE_MAX. Otherwise,
use HIGH_LOW_MAX.
■ HIGH_LOW. Specifies the voltage of VH1 - VL2, where 1 means layer1 and 2
means layer2.
❍ high_voltage_property_name. Specifies the property name that represents high
voltage.
❍ low_voltage_property_name. Specifies the property name that represents low
voltage.
net_double_property_filter
Optional. Specifies that each spacing error is prefiltered to meet the property constraints.
The default is no constraint and no prefiltering.
❍ property_value: Specifies with a nonnegative value that each spacing error must
have either net with a property value to satisfy the constraint. The default is <0, which
means no constraint.
❍ property_name: Specifies the name of the property.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
To set a minimum spacing of 0.5:
ext2_errs = external2_error(layer1 = met1, layer2 = met2,
distance <= 0.5, extension = RADIAL);
See Also
drc_features()
external2()
external2_edge() and not_external2_edge()
extract_devices()
The extract_devices() function extracts the device information defined in the device
matrix into a device database. The extract_devices() function modifies the connect
database by creating ports and dummy instance nets.
Call this function after all device configuration functions are called and before the netlisting
functions are called.
Syntax
extract_devices(
matrix = device_matrix,
remove_dangling_ports = ALL | UNTEXTED //optional
);
Returns
device database
Arguments
matrix
Required. Specifies the device matrix where device extraction data is stored by the
device configuration functions.
remove_dangling_ports
Optional. Specifies if the device information is preprocessed to find all cases where a
port is considered to be dangling; that is, when no devices or instances in the cell
connect to the port. The default is UNTEXTED.
❍ UNTEXTED. Removes only untexted dangling ports.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DEVICE.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
get_netlist_connect_database()
init_device_matrix()
netlist()
fill_pattern()
The fill_pattern() function creates a set of fill rectangles within a layer. The rectangles
are placed within layer1 polygons either on a uniform grid or staggered in the x- or
y-direction.
A remote function calls various utility functions that operate on the current polygon to create
new polygons and to write these polygons to the output layer.
Syntax
fill_pattern(
layer1 = polygon_layer,
fill_function = function,
grid_mode = LOCAL | GLOBAL //optional
output_aref = {output_aref = true | false,
cell_prefix = "string"}, //optional
grid = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
min_space = double, //optional
name = "layer_label", //optional
context_layer = polygon_layer, //optional
color = NO_COLOR | COLOR_1 | COLOR_2 | COLOR_3, //optional
color_space = double, //optional
min_space_x = double, //optional
min_space_y = double, //optional
min_space_corner = double, //optional
extension = ELLIPTICAL | RADIAL |
INTERSECTION | RADIAL_INTERSECTION //optional
);
Returns
polygon layer
Arguments
layer1
Required. Specifies the polygon layer.
fill_function
Required. Specifies the remote function containing the programmable density equations.
See “Fill Pattern Utility Functions” in Chapter 4 for more information about the utility
functions you can use to define a function.
grid_mode
Optional. Specifies the origin used for the placement of fill. The default is LOCAL.
❍ GLOBAL. Sets the origin for the placement of fill to the bottom left corner of the top cell.
❍ LOCAL. Sets the origin for the placement of fill to the bottom left of the extents of a
given layer1 polygon.
output_aref
Optional. Specifies whether to output fill as AREFs (array references).
Note:
Do not manipulate the output generated by the fill_pattern() function. If you do,
you will likely modify specific instances of the AREFs, and as a result the AREF data
can get exploded into individual polygons. The exploded data can create hierarchy
problems and cause performance issues.
❍ output_aref. The default is false.
■ true: Outputs polygons in AREFs. To limit the size of the output files, use this
setting.
■ false: Outputs individual polygons.
❍ cell_prefix. Specifies the prefix for all cell names created when fill is added. The
default is "$FA".
grid
Optional. Specifies a user-defined grid. This grid applies to spacings, such as width;
height; x-direction space, shift and stagger; and y-direction space, shift and stagger,
specified in the fp_generate_fill() utility function. The default is 0.0
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
min_space
Optional. Specifies the minimum spacing between fill patterns. The default is 0.0.
Note:
The result of the fill_pattern() function when using the min_space argument
depends on the input order of the polygons.
The minimum spacing must be less than or equal to the internal distance derived
according to the following Minimum Spacing Calculation section. When the min_space
argument is used, the patterns are placed under the top cell, even if the grid_mode
argument is LOCAL.
Note:
Use of the min_space argument overrides any specified min_space_x,
min_space_y, min_space_corner, and extension argument values.
Figure 2-247 shows a spacing violation.
Figure 2-247 Spacing Violation
Polygon 1
Spacing violation
where
■ d_BU = the minimum allowable distance between base and up polygons
■ d_BR = the minimum allowable distance between base and right polygons
■ d_RU = the minimum allowable distance between right and up polygons
and
■ If stagger_x <= width: d_BU = space_y
2 2
■ If stagger_x > width: d_BU = sqrt(space_y + (stagger_x – width) )
■ If stagger_y <= height: d_BR = space_x
2 2
■ If stagger_y > height: d_BR = sqrt(space_x + (stagger_y – height) )
■ If stagger_x < space_x and stagger_y < space_y:
2 2
d_RU = sqrt((space_x – stagger_x) + (space_y-stagger_y) )
■ If stagger_x >= space_x or stagger_y >= space_y: Patterns collide and a
warning message is output and the output layer is empty.
Figure 2-248 Deriving the Minimum Spacing
U
d_RU
d_BU
R
d_BR
B
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
context_layer
Optional. Specifies an optional polygon layer that is used to align fill based on a pitch
rule.
This layer changes three insertion parameters, based on its individual polygons:
❍ The context of the grid is changed from the origin to the lower left of the extents of a
given context_layer polygon.
❍ The fillable regions are the result of layer1 ANDed with a given context_layer
polygon.
❍ The origin for fill insertion is forced to the lower left of the extents of a given
context_layer polygon; therefore, the grid mode is ignored.
color
Optional. Assigns alternating colors to fill shapes in a regular fill pattern. There is a
choice of three colors: COLOR_1, COLOR_2, and COLOR_3. The default is NO_COLOR.
To assign colors to the fill, you must call the fill_pattern() function twice in the
runset. For example,
layer_1 = fill_pattern(..., color = COLOR_1);
layer_2 = fill_pattern(..., color = COLOR_2);
layer_3 = fill_pattern(..., color = COLOR_3);
The IC Validator tool tries to evenly split the fill shapes between the two colors and gives
higher priority to alternating colors along the line ends, as shown in Figure 2-249.
Figure 2-249 Coloring Example
color_space
Optional. Specifies the minimum spacing allowed between fills for two regions. This is
the interregion coloring constraint. The default is 0.0; that is, there is no interregion
coloring constraint. This spacing is specific to the fill_pattern() function call, not
between two fill_pattern() function calls.
min_space_x
Optional. Specifies the minimum spacing in the x-direction between fills. The default
is 0.0.
min_space_y
Optional. Specifies the minimum spacing in the y-direction between fills. The default
is 0.0.
min_space_corner
Optional. Specifies the minimum corner spacing. This value is used when the extension
argument is RADIAL or RADIAL_INTERSECTION. A value of 0 means there is no minimum
spacing. The default is the maximum of the min_space_x and min_space_y argument
values.
extension
Optional. Specifies the corner spacing requirement between fill regions, as shown in
Figure 2-250. The default is ELLIPTICAL.
Figure 2-250 Extensions Between Fill Regions
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
fill_layer = fill_pattern(layer1 = mylayer1,
fill_function = my_func );
where
my_func: function ( void ) returning void{
strike : polygon = fp_get_current_polygon();
fp_generate_fill(
polygon = strike,
width = 1.0,
height = 1.0,
space_x = 2.0,
space_y = 2.0,
stagger_x = 0.0,
stagger_y = 0.0,
grid_shift = {1.0, 1.0}
);
};
See Also
fill_pattern_rings()
polygon_extents()
polygon_features()
polygons()
remove_fill()
fill_pattern_rings()
The fill_pattern_rings() function creates a pattern of fill rectangles around layer1
polygons. This pattern follows the orientation of the layer1 shapes. You can specify whether
to stagger successive rows of rectangles and the number of rows to insert.
The fill pattern consists of multiple protection rings, starting with an inner ring of fill
rectangles, which are highlighted in red in Figure 2-251, followed by multiple, successive
rings, and ending with an outer ring. The fill pattern is divided at each corner by a 45-degree
line.
Figure 2-251 fill_pattern_rings() Function Example
Syntax
fill_pattern_rings(
layer1 = polygon_layer,
ring_count = integer,
width = double,
height = double,
space_x = double,
space_y = double,
space_to_signal = double,
min_space_corner = double, //optional
stagger_x = double, //optional
extension = ELLIPTICAL | RADIAL |
INTERSECTION | RADIAL_INTERSECTION //optional
color = NO_COLOR | COLOR_1 | COLOR_2 | COLOR_3, //optional
color_space = double, //optional
Returns
polygon layer
Arguments
layer1
Required. Specifies the polygon layer. The polygons on this layer are the signal
polygons.
ring_count
Required. Specifies the number of rings of fill to be generated around the signal
polygons.
width
Required. Specifies the width of the fill rectangle.
height
Required. Specifies the height of the fill rectangle.
space_x
Required. Specifies the space in the x-direction between fills.
space_y
Required. Specifies the space in the y-direction between fills.
space_to_signal
Required. Specifies the minimum required space between the signal and the closest fill
polygon.
min_space_corner
Optional. Specifies the minimum corner spacing. This value is used when the extension
argument is RADIAL or RADIAL_INTERSECTION. A value of 0 means that there are no
minimum spacing corner checks. The default is 0.0.
stagger_x
Optional. Specifies the stagger distance between fill shapes in the x-direction. The
default is 0.
extension
Optional. Specifies the corner spacing requirement between fill regions, as shown in
Figure 2-252. The default is INTERSECTION.
Figure 2-252 Extensions Between Fill Regions
color
Optional. Assigns alternating colors to fill shapes in a regular fill pattern. There is a
choice of three colors: COLOR_1, COLOR_2, and COLOR_3. The default is NO_COLOR.
To assign colors to the fill, you must call the fill_pattern_rings() function twice in
the runset. For example,
layer_1 = fill_pattern_rings(..., color = COLOR_1);
layer_2 = fill_pattern_rings(..., color = COLOR_2);
layer_3 = fill_pattern_rings(..., color = COLOR_3);
The IC Validator tool tries to evenly split the fill shapes between the two colors and gives
higher priority to alternating colors along the line ends, as shown in Figure 2-249.
color_space
Optional. Specifies the minimum space allowed between fills for two regions. This is the
interregion coloring constraint. The default is 0.0; that is, there is no interregion coloring
constraint.
Note:
This spacing is specific to the fill_pattern_rings() function call, not between two
fill_pattern_rings() function calls.
grid
Optional. Specifies a user-defined grid. This grid applies to spacings, such as width,
height, x-direction space, shift and stagger, and y-direction space, shift and stagger,
specified in the fp_generate_fill() utility function. The default is 0.0.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
M1 = assign({{11,0}});
m1_signal_oriented = fill_pattern_rings(
layer1 = M1,
ring_count = 6,
width = 0.24,
height = 0.06,
space_x = 0.09,
space_y = 0.08,
space_to_signal = 0.1,
min_space_corner = 0.081,
stagger_x = 0.165
);
M1
fill
See Also
fill_pattern()
filter()
The filter() function filters devices based on:
• Predefined filter options
• Filter functions
This function must be called before the compare() function. See Chapter 7, “Compare
Functions Basics” in the IC Validator LVS User Guide for more information about
complementary functions and precedence rules.
Syntax
filter(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...}, //optional
filter_options = {option, ...}, //optional
filter_function = "string", //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...}, //optional
schematic_filter_options = {option, ...}, //optional
layout_filter_options = {option, ...}, //optional
short_pins = {"string" ...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. The filter() function
information is added.
device_type
Required. Specifies the device type.
device_names
Optional. Specifies the layout devices that have filter options applied. Each device must
match a device specified in a device_name argument of a device configuration function.
By default, all devices of the type specified in the device_type argument are filtered.
filter_options
Optional. Specifies the list of filtering options for device types, which are shown in
Table 2-23. The option type must match the device_type argument, and it applies to the
devices specified by the device_names argument. The default is no filter option ({}),
which unsets all filtering options.
These options apply to the layout and schematic netlists. The net names are specified in
the layout_power and layout_ground arguments of the text_options() function and
the schematic_power and schematic_ground arguments of the net_options()
function. In addition, you can use the schematic_filter_options argument to filter
schematic devices and the layout_filter_options argument to filter layout devices.
Note:
You must use the filter_function argument or at least one of the filter options
arguments: filter_options, schematic_filter_options, or
layout_filter_options. The IC Validator tool filters devices by first checking the
filter options arguments and then using the remote filter function.
Table 2-23 Filtering Options
Option Description
Option Description
NMOS_1 Filters devices when gate, source, and drain pins are shorted.
NMOS_2 Filters devices when gate, source, and drain pins are floating.
NMOS_4 Filters devices when source and drain pins are tied to ground.
NMOS_5 Filters devices when source and drain pins are shorted.
NMOS_7 Filters devices when the gate pin and either the source or drain pin are floating.
NMOS_9 Filters devices when the gate pin is tied to power and source and drain pins are
tied to ground.
NMOS_10 Filters devices when source or drain is floating, and the gate net is tied only to the
gate pin.
NMOS_11 Filters devices when the gate pin is tied to ground, and source and drain pins are
tied together.
NMOS_12 Filters devices when the gate pin is tied to ground, and either the source or drain
pin is floating.
NMOS_13 Filters devices when gate, source, drain, and first bulk pins are shorted.
NMOS_15 Filters devices when the gate pin and either the source or drain pin are floating,
and the other source or drain pin is tied to a power or ground net.
NMOS_16 Filters devices when gate and first bulk pins are tied to the same net.
NMOS_17 Filters devices when the gate pin is floating, and either the source or drain pin has
a path to ground.
NMOS_19 Filters devices when the gate pin is floating, and source and drain pins are
shorted.
Option Description
NMOS_20 Filters devices when source and drain pins are floating.
NMOS_21 Filters devices when gate and first bulk pins are tied to the same ground.
NMOS_22 Filters devices when the gate pin is floating and source and drain pins are tied to
a single power net.
NMOS_23 Filters devices when the gate pin is floating and source and drain pins are tied to
a single ground net.
NMOS_24 Filters devices when all pins are shorted including, bulk and optional pins.
NMOS_25 Filters devices when gate is tied to either power or ground and source and drain
are shorted.
NPN_1 Filters devices when emitter, base, and collector pins are shorted.
NPN_2 Filters devices when emitter, base, and collector pins are floating.
NPN_5 Filters devices when the base pin is floating, and collector is tied to power (filters
multiple-emitter devices).
This filter applies only to multiple-emitter NPN devices extracted as individual
3-terminal devices with parallel connections to the base and collector terminals.
NPN_6 Filters devices when emitter and base pins are floating.
NPN_7 Filters devices when all emitters are floating (filters multiple-emitter devices).
This filter applies only to multiple-emitter NPN devices extracted as individual
3-terminal devices with parallel connections to the base and collector terminals.
Option Description
PMOS_1 Filters devices when gate, source, and drain pins are shorted.
PMOS_2 Filters devices when gate, source, and drain pins are floating.
PMOS_4 Filters devices when source and drain pins are tied to power.
PMOS_5 Filters devices when source and drain pins are shorted.
PMOS_7 Filters devices when the gate pin and either the source or drain pin are floating.
PMOS_8 Filters devices when the gate, source, or drain pin is floating.
PMOS_9 Filters devices when the gate pin is tied to ground and source and drain pins are
tied to power.
PMOS_10 Filters devices when source or drain is floating, and the gate net is tied only to the
gate pin.
PMOS_11 Filters devices when the gate is tied to power, and source and drain are tied
together.
PMOS_12 Filters devices when the gate is tied to power, and either source or drain is
floating.
PMOS_13 Filters devices when gate, source, drain, and first bulk pins are shorted.
PMOS_15 Filters devices when the gate pin and either source or drain pin are floating, and
the other source or drain pin is tied to a power or ground net.
PMOS_16 Filters devices when gate and first bulk pins are tied to the same net.
PMOS_17 Filters devices when the gate pin is floating, and either the source or drain pin has
a path to power.
PMOS_19 Filters devices when the gate pin is floating, and source and drain pins are
shorted.
Option Description
PMOS_20 Filters devices when source and drain pins are floating.
PMOS_21 Filters devices when gate and the first bulk pins are tied to the same power.
PMOS_22 Filters devices when the gate pin is floating and source and drain pins are tied to
a single power net.
PMOS_23 Filters devices when the gate pin is floating and source and drain pins are tied to
a single ground net.
PMOS_24 Filters devices when all pins are shorted, including bulk and optional pins.
PMOS_25 Filters devices when gate is tied to either power or ground and source and drain
are shorted.
PNP_1 Filters devices when emitter, base, and collector pins are shorted.
PNP_2 Filters devices when emitter, base, and collector pins are floating.
PNP_4 Filters devices when all pins are floating (filters multiple-collector devices).
This filter applies only to multiple-collector PNP devices extracted as individual
3-terminal devices with parallel connections to the base and emitter terminals.
PNP_5 Filters devices when all collectors are floating (filters multiple-collector devices).
This filter applies only to multiple-collector PNP devices extracted as individual
3-terminal devices with parallel connections to the base and emitter terminals.
Option Description
filter_function
Optional. Specifies the remote function that defines filtering conditions. If the function is
satisfied, the devices listed in the device_names argument are removed. See “Compare
Utility Functions” in Chapter 4 for more information about the utility functions you can use
to define a remote function.
Note:
You must use the filter_function argument or at least one of the filter options
arguments: filter_options, schematic_filter_options, or
layout_filter_options. The IC Validator tool filters devices by first checking the
filter options arguments and then using the remote filter function.
equiv_cells
Optional. Lists the schematic and layout cell name pairs for which the filter() function
applies. You must specify the equiv_cells pairs in the equiv_options() function
before calling the filter() function. If only one cell name in the pair is specified, the
names are assumed to be the same.
Note:
The filter() instruction is observed only when comparing each listed equivalence
cell pair. If an equivalence cell pair is exploded into the parent equivalence cell pair
while comparing the parent, the filter() instruction is discarded for the content of
the exploded cell.
schematic_filter_options
Optional. Specifies the filtering options for each device type, as shown in Table 2-23. The
option type must match the type specified by the device_type argument, and it applies
to the devices specified by the device_names argument.
These options apply only to the schematic netlists. The net names are specified in the
schematic_power and schematic_ground arguments of the net_options() function.
In addition, you can use the filter_options argument to filter all devices and the
layout_filter_options argument to filter layout devices.
Note:
You must use the filter_function argument or at least one of the filter options
arguments: filter_options, schematic_filter_options, or
layout_filter_options. The IC Validator tool filters devices by first checking the
filter options arguments and then using the remote filter function.
layout_filter_options
Optional. Specifies the filtering options for each device type, as shown in Table 2-23. The
option type must match the type specified by the device_type argument, and it applies
to the devices specified by the device_names argument.
These options apply to the layout netlists. The net names are specified in the
layout_power and layout_ground arguments of the text_options() function. In
addition, you can use the filter_options argument to filter all devices and the
schematic_filter_options argument to filter schematic devices.
Note:
You must use the filter_function argument or at least one of the filter options
arguments: filter_options, schematic_filter_options, or
layout_filter_options. The IC Validator tool filters devices by first checking the
filter options arguments and then using the remote filter function.
short_pins
Optional. Specifies the pins that are shorted after filtering rather than being left as
floating. Pins that are not listed are kept as floating after filtering. When listed in the
short_pins argument,
❍ The pins of devices that are filtered by the options listed in the filter_options,
schematic_filter_options, or layout_filter_options arguments are shorted.
❍ The pins of devices that are filtered by the lvs_remove_device() function are
shorted.
At least two pin names must be listed, and all pin names must belong to a device
specified in the device_names argument.
Note:
A short between two or more port and static nets is not allowed. If the filtering of a
group of one or more devices results in a short between two or more port nets, all
devices in the group are not filtered and an error is reported.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
The following example uses predefined filter options that specify device names:
my_compare_settings : compare_state = init_compare_matrix();
filter(my_compare_state, NMOS, {"nm1", "nm2"}, {NMOS_3})
filter(my_compare_state, PMOS, {"pm1", "pm2"}, {PMOS_1, PMOS_2});
The following example uses predefined filter options that specify device types:
filter(my_compare_state, device_type = NMOS,
filter_options = {NMOS_1, NMOS_2} );
The following example uses filter functions to process the pin connectivity information. It
filters out devices that have their gates only connected to other gates.
Note:
Use the entry point qualifier to designate as remote functions all functions in the user
functions file that are directly referenced in the main runset file.
You can control whether to filter on the layout or schematic side using the
lvs_is_schematic_device() and lvs_is_layout_device() functions.
filter(my_compare_state, PMOS, {"pm1", "pm2"},
filter_function = "filter_gates_conn_to_gates");
The following example uses filter functions to process properties of devices. It filters out
resistors that have a value less than 0.001.
filter(my_compare_state, PMOS, {"pm1", "pm2"},
filter_function = "filter_small_resistors");
current_id = lvs_current_device();
found_property =
lvs_get_double_property(current_id, "rval", rval_value);
if (found_property == true && dbllt(rval_value, 0.001))
{lvs_remove_device();}
}
See Also
fopen()
filter_off()
The filter_off() function disables filtering of the specified devices.
This function must be called before the compare() function. See Chapter 7, “Compare
Functions Basics” in the IC Validator LVS User Guide for more information about
complementary functions and precedence rules.
Syntax
filter_off(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...}, //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. Information from the
filter_off() function is added.
device_type
Required. Specifies the device type.
device_names
Optional. Specifies the layout devices that do not have filter options applied. Each device
must match a device specified in a device_name argument of a device configuration
function.
equiv_cells
Optional. Lists the schematic and layout cell name pairs for which the filter_off()
function applies. You must specify the equiv_cells pairs in the equiv_options()
function before calling the filter_off() function. If only one cell name in the pair is
specified, the names are assumed to be the same.
Note:
The filter_off() instruction is observed only when comparing each listed
equivalence cell pair. If an equivalence cell pair is exploded into the parent
equivalence cell pair while comparing the parent, the filter_off() instruction is
discarded for the content of the exploded cell.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
filter()
flatten_by_cells()
The flatten_by_cells() function flattens data in the hierarchy under the specified cells
into the specified cells. The output layer is a copy of the input layer with data moved by the
flatten operation for the specified cells.
Important:
This is a methodology check function. See disclaimers 1 (Preserving Cells) and 2
(Hierarchy) in “Methodology Check Functions” on page 1-4.
Syntax
flatten_by_cells(
layer1 = polygon_layer,
cells = {"string", ...}, //optional
name = "layer_label", //optional
keep_cells = true | false //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the layer that is flattened.
cells
Optional. Specifies the cells that are flattened. If the list is empty, the
flatten_by_cells() function returns a copy. String matching using metacharacters is
allowed. See “String Matching” on page A-11 for more information. By default, the
IC Validator tool flattens all cells.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
keep_cells
Optional. Specifies the exploding of cells in the select_cells list. The default is true.
❍ true. Does not explode cells during hierarchy optimization.
❍ false. The selected cells are allowed to explode during hierarchy optimization. If a
selected cell does get exploded, the selected data (the cell’s extents in this case) are
placed in the parent cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
flat_gate = flatten_by_cells (gate, {"*"});
See Also
level()
fopen()
The fopen() function generates a handle for the file to be written by the df_fnote() and
pf_fnote() utility functions.
Syntax
fopen(
file = "string",
mode = OVERWRITE | APPEND //optional
);
Returns
ascii_file_handle
Arguments
file
Required. Specifies the file name.
mode
Optional. If the file existed before the IC Validator run, specifies if the content of the file
is either overwritten or appended. (The content of the file is not overwritten or appended
for every call to the df_fnote() and pf_fnote() functions.) The default is OVERWRITE.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
df_fnote()
pf_fnote()
four_color()
The four_color() function is used in multi-patterning flows to decompose the input layer
into four colors. Optional precoloring assignments are used during graph coloring.
Syntax
Note: The definitions for the arguments are after the Returns section.
four_color(
nodes = polygon_layer,
links = geometry_layer,
pre_color2 = polygon_layer, //optional
pre_color2 = polygon_layer, //optional
pre_color3 = polygon_layer, //optional
pre_color4 = polygon_layer, //optional
stitch_nodes = polygon_layer, //optional
optional_links = {geometry_layer, ...}, //optional
effort_level = integer, //optional
shift_min_length = double, //optional
shift_ratio = double, //optional
shift_mode = {SHORTEST, CENTER, CENTER_ALL_ANGLE,
OPPOSITE, ERROR_CENTER, ...}, //optional
color_preference = NONE | BALANCED, //optional
same_color_links = geometry_layer //optional
);
Returns
The output is a structure of polygons:
four_color_result_s : newtype struct of {
color1 : polygon_layer;
color2 : polygon_layer;
color3 : polygon_layer;
color4 : polygon_layer;
color_conflicts : polygon_layer;
intersecting_links : polygon_layer;
pre_color_errors : polygon_layer;
color_conflict_extended_fix_guidance : polygon_layer;
color_conflict_fix_guidance : polygon_layer;
};
color1
Input polygons colored with color 1.
color2
Input polygons colored with color 2.
color3
Input polygons colored with color 3.
color4
Input polygons colored with color 4.
color_conflicts
Conflict links, where a conflict link has the same color assigned to the polygons
connected by this link. This layer is empty if the input layer is successfully decomposed.
intersecting_links
Merged or intersecting links.
pre_color_errors
Input polygons with precolor conflicts. There are three types of precolor conflicts: nodes
that are precolored with more than one color, required different-color links that are
connected to two nodes with the same precolors, and same-color links that are
connected to two nodes with different precolors.
color_conflict_extended_fix_guidance
Part of the error visualization outputs, this contains nodes and links interacting with
color_conflict_fix_guidance output to provide more context for the areas of the
layout that contain errors.
color_conflict_fix_guidance
One of the error visualization outputs that is used if the input is not 4-colorable. It
contains the alternative minimum conflict link configurations and nodes interacting with
them. That is, the color_conflicts output contains one set of minimum conflict links,
whereas color_conflict_fix_guidance output contains a superset of those and
nodes interacting with them to give you more choices to make the layout 4-colorable.
Arguments
nodes
Required. Specifies the polygon layer that contains the polygons targeted for coloring.
links
Required. Specifies the input geometry layer that contains polygons that connect nodes
polygons to complete the graph description. Each polygon in the links geometry layer
must interact, either by edge touch or polygon overlap, with at most four nodes polygons
to achieve correct coloring. If a links polygon is connected to four nodes polygons, all
three connected nodes polygons must be assigned to different colors.
The links geometry layer is commonly generated using dimensional commands on the
nodes polygon layer. For example, it is generated using an external spacing check on the
nodes polygon layer that captures multi-patterning critical spacing relationships.
pre_color1
Optional. Specifies the marker layers representing color 1 precoloring of the polygons.
All the polygons must be included in the nodes layer. The precolors are markers on the
nodes. If a precolor marker does not intersect with any node, the marker is ignored.
pre_color2
Optional. Specifies the marker layers representing color 2 precoloring of the polygons.
See pre_color1 for more information.
pre_color3
Optional. Specifies the marker layers representing color 3 precoloring of the polygons.
See pre_color1 for more information.
pre_color4
Optional. Specifies the marker layers representing color 4 precoloring of the polygons.
See pre_color1 for more information.
stitch_nodes
Optional. Specifies a marker layer representing stitches.
optional_links
Optional. Specifies a list of geometry layers. Each layer is a link layer and has an implied
weight associated with it. The first layer has weight 1 and has the highest priority after
the required link layer. The second layer has weight 2 and has the next highest priority,
and so on. The tool uses these weights in optimization, for example, density balancing.
You can specify up to seven layers. The default is empty.
Note:
All the link layers, including the required link layer and layers defined in the
optional_links argument, must be the same type, that is, they all must be either
polygon layers, edge layers, or error layers.
Color conflicts that involve only optional links are not output.
effort_level
Optional. Specifies the coloring effort level. The minimum value is 1, and the maximum
value is 6. Using a higher effort level in more complicated designs can increase accuracy
(fewer color conflicts) but might increase the runtime. The default is 4.
shift_min_length
Optional. Specifies the link shifting threshold. A link is shifted only when its length is
equal to or greater than this value. The default is 0 (zero).
shift_ratio
Optional. Defines the ratio of the shift segment to the overlap segment. For example, if
the overlap segment for an error pair is 100 microns and this value is set to 0.1, the shift
segment is 10 microns. The shifted link is within this segment. The default is 1.
shift_mode
Optional. Specifies the mode used to generate the link, which can be a subset of all
modes. The default is SHORTEST.
❍ SHORTEST. Uses the shortest distance between error pairs to generate a link.
❍ CENTER. Uses center points of the error pair to generate a link. This mode is
applicable only when the run length is less than or equal to 0 (zero) and the link
derived by the default shift mode is orthogonal.
❍ CENTER_ALL_ANGLE. Uses center points of the error pair to generate a link. This mode
is applicable only when the error pair run length is less than or equal to 0 (zero).
❍ OPPOSITE. Shifts two endpoints of the generated link in opposite directions with
respect to the shift ratio. This mode is applicable only when the shift range is positive,
which means the run length is greater than 0 (zero), the link length is greater than or
equal to the shift threshold, and the shift ratio is greater than 0 (zero).
❍ ERROR_CENTER. Uses center points of the error pair to generate a link.
Note:
When you select the ERROR_CENTER option to generate a link, all of the other
modes are disabled.
color_preference
Optional. Specifies if the IC Validator tool balances the coloration on low-degree nodes.
Balancing is based on the area of the nodes. The default is NONE.
❍ NONE. Does not balance coloration. Color selection on low-degree nodes is random.
❍ BALANCED. Balances coloration. When multiple color choices are available, color
selection on low-degree nodes is based on the minimal node area.
same_color_links
Optional. Specifies a geometry layer that contains links that connect same-color nodes.
Same-color links have a higher priority than different-color links because two nodes
connected by a same-color link are treated as one node during the coloring process.
Additional color conflicts can be introduced on a required different-color link, even when
the links have no shared nodes, as shown in Figure 2-254.
Figure 2-254 Extra Color Conflict From Same-Color Link
Same-color link
Required
different-color link
When two nodes are connected with both a same-color link and a different-color link at
the same time, the following priorities apply:
❍ If two nodes are connected by a same-color link and a required different-color link,
the required link has priority and the same-color link is ignored.
❍ If two nodes are connected by a same-color link and an optional different-color link,
the optional link is ignored and the two polygons are assigned the same color.
❍ If two nodes connected by a same-color link are precolored with different colors, the
same-color link is ignored.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
See Also
two_color()
three_color()
gds_library()
The gds_library() function defines a GDSII file name and returns a handle to be used by
the output_library argument of the write_gds() function.
Limitation:
The gds_library() function cannot be called more than one time with the same file
argument. The result, however, can be used in more than one write_gds() function, in
which case the file is overwritten.
Syntax
gds_library(
file = "string"
);
Returns
gds_library_handle
Arguments
file
Required. Specifies the GDSII file name. See the write_gds() function for more
information.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
outlib = gds_library(file = "drc_err.gds");
The outlib variable can now be specified in the output_library argument of the
write_gds() function.
See Also
write_gds()
gds_options()
The gds_options() function specifies the behavior of the IC Validator tool when reading a
GDSII file.
Syntax
gds_options(
box = DROP | CONVERT_TO_RECT, //optional
cell_name_map = {{search_string = "string",
replace_string = "string"}, ...},
//optional
force_cell_name_case = UPPER | LOWER | MIXED, //optional
path_type_1 = ABORT | ACCEPT, //optional
path_type_4 = ABORT | ACCEPT, //optional
missing_end_construct = ABORT | CONTINUE, //optional
generate_property_text = NONE | TOP | ALL, //optional
text = {objects = {PROPERTY_TEXT, TEXT},
properties = {integer, ...}}, //optional
duplicate_cell = REPLACE | DROP | MERGE, //optional
merge_references = true | false, //optional
replace_instance_name_characters = {{search_string = "string",
replace_string = "string"},
...} //optional
);
Returns
void
Arguments
box
Optional. Specifies the action taken when reading in a GDSII box structure. The default
is DROP.
❍ DROP. Drops the box structures.
cell_name_map
Optional. Specifies a list that tells how cell names are remapped as data is read in. By
default, the IC Validator tool does not remap cell names.
❍ search_string. Required. Specifies the existing cell name in the input stream.
force_cell_name_case
Optional. Forces the character case of cell names. The default is MIXED.
❍ UPPER. Converts all cell names to uppercase characters when the GDSII file is read.
❍ LOWER. Converts all cell names to lowercase characters when the GDSII file is read.
❍ MIXED. Maintains the character case that cell names have in the GDSII file.
path_type_1
Optional. Specifies if the run stops when PathType=1 is encountered while reading the
GDSII file. When set to ABORT, the run stops. The default is ACCEPT.
path_type_4
Optional. Specifies if the run stops when PathType=4 is encountered while reading the
GDSII file. When set to ABORT, the run stops. The default is ACCEPT.
missing_end_construct
Optional. Specifies if the run stops when ENDSTRUCT or ENDLIB is missing. When set
to ABORT, the run stops. The default is CONTINUE.
generate_property_text
Optional. Specifies if text points are generated from polygon properties in the input
library. The default is NONE.
❍ NONE. Does not generate text from properties in the input library.
❍ TOP. Generates property text only for the top cell of the design.
text
Optional. Controls the reading of text from a GDSII file for each assigned text layer. If the
generate_property_text argument is TOP or ALL, text points are generated for
polygons with associated properties. The text is located on the polygon and has the
same layer and datatype.
Note:
This global option is overwritten by selections made in the gds argument of the
assign_text() function.
❍ objects. Optional. Assigns the specified text types to a layer when reading a GDSII
file. The default is TEXT.
■ PROPERTY_TEXT. Assigns automatically generated text for polygons.
❍ properties. Optional. Specifies the property numbers to use when the objects
argument contains PROPERTY_TEXT. The property numbers must be in the range of
0–255, inclusive. If this list is empty, no property text is assigned.
duplicate_cell
Optional. Specifies how the duplicate cells are processed when reading multiple GDSII
files. The default is MERGE.
❍ REPLACE. For any duplicate cells, replaces any previously read cells of the same
name with the last cell read.
❍ DROP. Does not replace the first cell read with any subsequently read cells of the
same name.
❍ MERGE. Merges all geometric data into a single cell. References, however, are further
controlled by the merge_references argument.
Note:
IC Validator tool behavior is arbitrary when multiple definitions of a cell exist in a
single GDSII file. The duplicate_cell argument only applies to duplicate cells in
different GDSII files.
merge_references
Optional. Specifies the merging of cell references when duplicate cells are found in
multiple GDSII files.
The merge_references argument applies only when the duplicate_cell argument is
MERGE. If the duplicate_cell argument is REPLACE, the references in the last cell read
replace any previously read cells of the same name. If the duplicate_cell argument is
DROP, the references of the first cell read are used. The default is true.
❍ true. Merges cell references into existing cells when duplicate cells are found.
replace_instance_name_characters
Optional. Lists the strings to be replaced in instance names. Neither string can use string
matching. By default, the IC Validator tool does not replace any characters.
❍ search_string. Required. Specifies the string to replace.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
gds_options (
cell_name_map = {{search_string="A", replace_string="B"},
{search_string="C", replace_string="D"}},
path_type_1 = ABORT,
path_type_4 = ABORT,
missing_end_construct = ABORT
);
See Also
assign()
assign_edge()
assign_text()
milkyway_options()
oasis_options()
openaccess_options()
gendev()
The gendev() function collects extraction configuration information about generic devices.
The configuration information, which contains device body and terminal layers, property
extraction information, schematic device mappings, and pin handling instructions, is stored
in the device matrix that is passed to the extract_devices() function.
Use the gendev() function to represent generic devices that cannot be handled by one of
the standard device configuration functions: capacitor(), inductor(), nmos(), pmos(),
np(), pn(), npn(), pnp(), or resistor().
Note:
See “Device Names” in Appendix A for the device_name argument restrictions.
Syntax
gendev(
matrix = device_matrix,
device_name = "string",
device_body = polygon_layer,
device_layers = {{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK,
pin_compared = true | false},
...},
mapped_device_pin = "string",
recognition_layer = polygon_layer, //optional
reference_layer = polygon_layer, //optional
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
properties = {{name = "string",
type = DOUBLE | DOUBLE_LIST | STRING,
scale = FEMTO | PICO | NANO | MICRO |
MILLI | KILO | MEGA | NONE},
...}, //optional
write_property_to =
NETLIST_XTR_SPICE | NETLIST_PEX_SPICE |
SPICE | ANNOTATION_FILE |
NETLIST_ANNOTATION_FILE_SPICE |
NETLIST | AUTO | NETLIST_SKIP_PCELL,
processing_layer_hash_map =
{"string", ...},
pin_map = {"string", ...}},
...}, //optional
property_function = function, //optional
merge_parallel = true | false, //optional
bulk_relationship = ENCLOSE | INTERACT, //optional
swappable_pins = {{"string", ...}, ...}, //optional
schematic_devices = {{device_name = "string",
terminals = {"string", ...},
Returns
void
Arguments
matrix
Required. Specifies the device matrix used by the extraction functions. The matrix must
be defined by the init_device_matrix() function. Configuration details for device
extraction are stored in the matrix data object for use by the extract_devices()
function.
device_name
Required. Specifies the generic device. A device name can be reused across multiple
calls of the gendev() function if all calls have
❍ Equivalent numbers of optional pins with equivalent values for the pin_name and
pin_compared options.
device_body
Required. Specifies the body layer of the device.
device_layers
Required. Specifies a list that defines new terminal layers, including pin names and pin
types. You can specify up to 20 pins.
Note:
Do not apply a layer to two device terminals when pin_type = BULK and pin_type =
TERMINAL, or the tool will ignore the setting of pin_type = BULK in the first terminal
and report a warning message. For example:
device_layers = { { aLAYER2, "A" }, { aLAYER2, "B", BULK } }
The layout pin names that are defined or mapped in the gendev() function must
contain all required default pin types of the mapped_device_type argument, unless
the type is GENERIC. You can explicitly specify the pin mapping using this argument
or define its pin name as the default pin name.
When any required default pins are not specified, the tool searches for pins that have
a default pin name. An error occurs if no default pin name is found.
recognition_layer
Optional. Specifies the layer used to recognize a device when the device body layer does
not interact with all terminal layers and processing layers. All processing layers must
interact with this specified recognition layer. This layer is also used to identify device
instances that are merged during layout extraction when multiple individual devices
occur within a single recognition layer polygon. See the merge_parallel argument for
more information.
reference_layer
Optional. Specifies the intended location in the hierarchy for the extracted device. The
layer is usually an assign layer.
processing_layer_hash
Optional. Specifies a hash of string to a processing layer and range pair. In the remote
property function, each layer is retrieved as a polygon set by passing the hash key to the
dev_processing_layer() function.
❍ layer1. Required. Specifies the processing layer, which is a non-terminal layer used
for calculating properties.
❍ range. Optional. Specifies the maximum distance value from a device body polygon.
This value defines a window around the device body for data collection.
A nonnegative range value collects processing polygons that are within the specified
range of the body polygon which might or might not interact with the body polygon.
The default is -1.
■ When the range value is -1, only processing_layer_hash polygons interacting
with the body layer polygon are selected for the polygon set.
■ When the range value is >0, a window is created by oversizing the body layer
polygon by the range value. All processing_layer_hash polygons interacting
with this window, either by overlap or by an externally touching edge, are selected
for the polygon set.
See the description of the processing_layer_hash argument of the nmos() and
pmos() function for diagrams that illustrate the application of the range value.
properties
Optional. Lists the property values that define the device. By default, the IC Validator tool
does not extract any properties.
❍ name. Required. Specifies the property name. See “Predefined Name Matches” in
Chapter 7, “Compare Functions Basics” of the IC Validator LVS User Guide for the
names and associated matches that are predefined during LVS compare.
Note:
More than one property sharing the same name is prohibited. Furthermore, the
property name is case-insensitive.
❍ type. Optional. Specifies the data type of the property. The default is DOUBLE.
Note:
The compare() function does not support the DOUBLE_LIST property. When
running dual-hierarchy extraction, the list of double properties is always written to
the annotation file unless the write_property_to argument is explicitly
specified.
❍ scale. Optional. Specifies the scale factor applied to property values output by the
write_spice(), write_xref_spice(), pex_generate_results(), and
write_annotation_file() functions. The default is NONE, which means no scaling.
You can use this scale option to convert dimensional property values from the
IC Validator native base unit of microns into the base unit of meters for SPICE
simulation.
❍ write_property_to. Optional. Specifies to which file the property is written. The
default is AUTO.
■ NETLIST_XTR_SPICE. Writes the corresponding property to
- The property lists of cell instances matching the extracted device inside the
parasitic extraction layout database generated by the IC Validator tool.
The property is not written to
- The annotation file by the write_annotation_file()function.
■ SPICE. Writes the corresponding property to
- The property lists of cell instances matching the extracted device inside the
parasitic extraction layout database generated by the IC Validator tool.
■ AUTO. Writes the corresponding property to
If the pin name of a terminal layer is not referenced in the pin map for any property,
then that layer is never leveled, regardless of whether dual-hierarchy extraction is
enabled or disabled.
property_function
Optional. Specifies the remote function that calculates the geometric properties for each
extracted device. There is no default calculation. The default
calc_gendev_properties() function is defined in the device_public.rh header file.
If you use a remote function, you must specify the device properties in the properties
argument. See Chapter 4, “Utility Functions,” for more information about the utility
functions you can use to define a remote function.
merge_parallel
Optional. Specifies whether parallel devices enclosed by the same recognition layer
polygon are merged. The default is false.
❍ true. Merges parallel devices enclosed by the same recognition layer polygon.
Multiple banks of parallel-merged devices can occur within a single recognition layer
polygon.
❍ false. Does not merge parallel devices enclosed by the same recognition layer
polygon.
bulk_relationship
Optional. Specifies the required relationship between the bulk polygon and the device
polygon. The default is ENCLOSE.
❍ ENCLOSE. Specifies that the bulk polygon must enclose the device polygon.
❍ INTERACT. Specifies that the bulk polygon must interact with the device polygon by
one of these methods: enclosing, cutting, or outside edge touching.
swappable_pins
Optional. Lists the pins that can be swapped for a successful comparison with the
schematic device. By default, no pins can be swapped.
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Specifies the corresponding schematic devices and terminals used for
comparison. By default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
device configuration function.
■ The schematic pin names do not match the pin names provided in the
device_layers argument of the gendev() function.
❍ ignore_pins. Optional. Ignores the specified schematic pins during pin connectivity
comparison between the layout and schematic. If a pin name is listed that matches a
pin name defined by the terminals list, that pin is ignored both in the layout and
schematic. This behavior is similar to the pin_compared option of the
device_layers argument of the gendev() function.
If the schematic device has an optional pin that does not correspond to any pin in the
gendev() function, that pin can be specified with the ignore_pins. Otherwise, this
optional pin produces an error during the compare operation.
spice_netlist_function
Optional. Specifies the function used to format instances of the device in netlists
generated by the write_spice() and write_xref_spice() functions. See “Flexible
Netlisting Utility Functions” in Chapter 4 for more information.
connectivity
Optional. Lists the connections for different layers that make up the body of an inductor.
This information is used by the dev_coil_path_length() utility function.
❍ layers. Required. Specifies the layers that make up the inductor.
❍ by_layer. Required. Specifies the polygon layer by which specified layers are
connected.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
unique_identifier
Specifies the user-derived string used by the remote property function. The
unique_identifier argument value is retrieved from the remote property function with
the dev_unique_identifier() utility function. See the Examples section of the
capacitor() function for more information. You must ensure that the string is valid and
unique because the IC Validator tool does not check the value. The default is an empty
string ("").
This functionality is used to access data objects created outside of a remote property
function but passed in as global variables. Use this functionality when access to these
global variables must be synchronized to a specific device configuration function call. For
example, you can create a global hash object containing property extraction parameters
for several device configuration functions. The hash key is a unique identifier string that
matches the unique_identifier argument value. Then, you can clear the hash key by
invoking the dev_unique_identifier() function that is in the property function. The
dev_unique_identifier() function retrieves the unique_identifier argument value
to the corresponding device configuration function call.
swappable_properties
Optional. Specifies the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped. By default, the IC Validator tool does not map swappable pins to
properties.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
simulation_model_name
Optional. Specifies the simulation netlist model name. As needed, define this model
name for each device configuration function. This name is output to the runset report file.
The device name is not changed.
dlink_libraries
Optional. Specifies the libraries that can be used to pass measurement data to external
libraries. See the Dynamic-Link Library Support chapter in the IC Validator User Guide
and “Dynamic Linking Utility Functions” in Chapter 4 for more information.
extract_shorted_device
Optional. Specifies whether shorted devices, that is, devices with only one terminal, are
extracted. The default is true.
❍ true. Extracts shorted devices.
mapped_device_type
Optional. Specifies the target device type that the specified devices are mapped to. The
default is GENERIC. The target device types are:
❍ NMOS, PMOS, RESISTOR, CAPACITOR, INDUCTOR, NP, PN, NPN, PNP, GENERIC
top_simulation_properties
Optional. Controls whether properties identified as simulation properties are extracted
hierarchically or in the top cell. The default is false.
❍ true. Extracts simulation properties in the top cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
library(library_name = "hierxtract.gds",
cell = "gate2bulk",
format = GDSII
);
my_device = init_device_matrix(cdb1);
device_db = extract_devices(my_device);
layout_netlist = netlist(device_db);
gdsout = gds_library("graphics.gds");
write_gds(output_library = gdsout,
holding_cell = "top",
layers = {{ngate, {1}}, {nsd, {2}}}
);
See Also
extract_devices()
init_device_matrix()
gendev_select()
The gendev_select() function selects device polygons from generic devices on the
specified layers that fit the specified criteria. A remote function specifies arithmetic
conditions relative to generic device parameters.
Syntax
gendev_select(
device_body = polygon_layer,
device_layers = {{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK,
pin_compared = true | false},
...},
mapped_device_pin = "string",
gendev_func = function,
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
recognition_layer = polygon_layer, //optional
connect_sequence = connect_database,
connectivity = {{layer = {polygon_layer, ...}
by_layer = polygon_layer}, ...}, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
extract_shorted_device = true | false //optional
);
Returns
polygon layer or error result
Arguments
device_body
Required. Specifies the body layer of the device.
device_layers
Required. Specifies a list that defines new terminal layers, including pin names and pin
types. You can specify up to 20 pins.
❍ device_layer. Required. Specifies the device layer.
Note:
When the layer created from the cell_extent() or buildsub() function is a
substrate, specify the pin_type as BULK (default is TERMINAL) to improve
performance.
❍ pin_compared. Optional. Specifies whether the pin connectivity is compared
between the schematic and layout netlists. The default is true.
■ true. The pin connectivity is compared between the schematic and layout
netlists.
■ false. The pin is discarded for schematic to layout comparison. This setting is
useful when a layout netlist instance has a bulk pin but the corresponding
schematic instance does not.
❍ mapped_device_pin. Optional. Specifies the default pin name that a specific pin is
mapped to. Each device type has its own predefined default pin names, which are
summarized below:
Table 2-28 Default Pin Names
The layout pin names that are defined or mapped in the gendev() function must
contain all required default pin types of the mapped_device_type argument, unless
the type is GENERIC. You can explicitly specify the pin mapping using this argument
or define its pin name as the default pin name.
When any required default pins are not specified, the tool searches for pins that have
a default pin name. An error occurs if no default pin name is found.
gendev_func
Required. Specifies the remote function that selects devices based on geometric criteria.
See Chapter 4, “Utility Functions,” for more information about the utility functions you can
use to define a remote function.
processing_layer_hash
Optional. Specifies a hash of string to a processing layer and range pair. In the remote
property function, each layer is retrieved as a polygon set by passing the hash key to the
dev_processing_layer() function.
❍ layer1. Required. Specifies the processing layer, which is a non-terminal layer used
for calculating properties.
❍ range. Optional. Specifies the maximum distance value from a device body polygon.
This value defines a window around the device body for data collection.
A nonnegative range value collects processing polygons that are within the specified
range of the body polygon which might or might not interact with the body polygon.
The default is -1.
■ When the range value is -1, only processing_layer_hash polygons interacting
with the body layer polygon are selected for the polygon set.
■ When the range value is >0, a window is created by oversizing the body layer
polygon by the range value. All processing_layer_hash polygons interacting
with this window, either by overlap or by an externally touching edge, are selected
for the polygon set.
See the description of the processing_layer_hash argument of the nmos() and
pmos() functions for diagrams that illustrate the application of the range value.
recognition_layer
Optional. Specifies the layer used to recognize a device when the device body layer does
not interact with all terminal layers and processing layers. All processing layers must
interact with this specified recognition layer. This layer is also used to identify device
instances that are merged during layout extraction when multiple individual devices
occur within a single recognition layer polygon. See the merge_parallel argument for
more information.
connect_sequence
Optional. Specifies the connect database. If specified, the connection is considered in
the device checking process.
connectivity
Optional. Lists the connections for different layers that make up the body of an inductor.
This information is used by the dev_coil_path_length() utility function.
❍ layers. Required. Specifies the layers that make up the inductor.
❍ by_layer. Required. Specifies the polygon layer by which specified layers are
connected.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
extract_shorted_device
Optional. Specifies whether shorted devices, that is, devices with only one terminal, are
extracted. The default is true.
❍ true. Extracts shorted devices.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
calc_nf_prop_func: published function (void) returning void
{
nf = dev_parallel_device_count();
dev_save_polygon_double_property("nf", nf);
}
See Also
mos_select()
res_select()
get_layout_drawn_violation()
The get_layout_drawn_violation() function returns the violation that layout drawn
errors (such as self-intersection) are written to during preprocessing. This violation can be
used as an argument to the write_gds(), write_milkyway(), and write_oasis()
functions to output polygons for the violation.
Note:
Because layout grid errors consist of a single point, the layer output from this violation
contains a generated polygon for each violation. The generated polygon is an X, and the
polygon is identical to what is displayed in VUE. When a self-intersection polygon
disappears a vanishing polygon error is reported. This polygon error is the bounding box
of the original boundary.
Syntax
get_layout_drawn_violation();
Returns
violation
Arguments
This function has no arguments.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
drawn_errs = get_layout_drawn_violation();
write_gds("./error_results.gds",
errors = {{drawn_errs, {100,1}}}
);
See Also
layout_drawn_options()
get_layout_grid_violation()
The get_layout_grid_violation() function returns the violation that layout grid errors
are written to during preprocessing. This violation can be used as an argument to the
write_gds(), write_milkyway(), and write_oasis() functions to output polygons for
the violation.
Note:
Because layout grid errors consist of a single point, the layer output from this violation
contains a generated polygon for each violation. The generated polygon is an X, and the
polygon is identical to what is displayed in VUE.
Syntax
get_layout_grid_violation();
Returns
violation
Arguments
This function has no arguments.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
grid_errs = get_layout_grid_violation();
write_gds("./error_results.gds",
errors = {{grid_errs, {100,1}}}
);
See Also
layout_grid_options()
get_netlist_connect_database()
The get_netlist_connect_database() function allows you to access the connect
database from which the layout netlist is generated from the given device database.
The extract_devices() function modifies the input connect database with hierarchy
preprocessing, such as leveling and merging. In your write function, you can use the same
connect database from which the layout netlist is generated so that the net names in the
output layout match the netlist.
Call this function after the extract_devices() function.
Syntax
get_netlist_connect_database(
device_db = device_database
);
Returns
connect database
Arguments
device_db
Required. Generates the layout netlist from the specified device database. The
extract_devices() function generates this database.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
If you want the results of a write function to match the netlist, define the connect_sequence
argument with the result of the get_netlist_connect_database() function. For example,
write_gds (
output_library = my_gds_outlib,
connect_sequence = get_netlist_connect_database(my_device_db),
layers = {{M1, {1}}, {M2, {2}}, {M3,{3}}}, properties =
{instance_name = 112,
net_name = 4
}
);
See Also
extract_devices()
get_substrate()
The get_substrate() function returns a hierarchical layer representing the substrate that
is typically used for device extraction and connection. The returned substrate layer contains
a single rectangle in each cell of the hierarchy. The rectangle in each cell is the size of the
extents for that cell.
Syntax
get_substrate();
Returns
polygon layer
Arguments
This function has no arguments.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
buildsub()
chip_extent()
get_text_merged()
The get_text_merged() function returns a new violation that contains only the merged text
opens from the input violation.
Syntax
get_text_merged(
violation1 = violation
);
Returns
violation
Arguments
violation1
Required. Specifies the violation from which the output is derived. The violation is usually
the left side of an @= assignment. For more information about violations, see the Violation
Block section in the IC Validator User Guide.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Examples section of the text_net() function for more information.
See Also
get_text_reassign_shorted()
get_text_renamed()
get_text_shorted()
get_text_unused()
text_net()
get_text_reassign_shorted()
The get_text_reassign_shorted() function returns a new violation that contains only the
reassigned text shorts from the input violation.
Syntax
get_text_reassign_shorted(
violation1 = violation
);
Returns
violation
Arguments
violation1
Required. Specifies the violation from which the output is derived. The violation is usually
the left side of an @= assignment. For more information about violations, see the Violation
Block section in the IC Validator User Guide.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Examples section of the text_net() function for more information.
See Also
get_text_merged()
get_text_renamed()
get_text_shorted()
get_text_unused()
text_net()
get_text_renamed()
The get_text_renamed() function returns a new violation that contains only the renamed
text opens from the input violation.
Syntax
get_text_renamed(
violation1 = violation
);
Returns
violation
Arguments
violation1
Required. Specifies the violation from which the output is derived. The violation is usually
the left side of an @= assignment. For more information about violations, see the Violation
Block section in the IC Validator User Guide.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Examples section of the text_net() function for more information.
See Also
get_text_merged()
get_text_reassign_shorted()
get_text_shorted()
get_text_unused()
text_net()
get_text_shorted()
The get_text_shorted() function returns a new violation that contains only the text shorts
from the input violation.
Syntax
get_text_shorted(
violation1 = violation
);
Returns
violation
Arguments
violation1
Required. Specifies the violation from which the output is derived. The violation is usually
the left side of an @= assignment. For more information about violations, see the Violation
Block section in the IC Validator User Guide.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Examples section of the text_net() function for more information.
See Also
get_text_merged()
get_text_reassign_shorted()
get_text_renamed()
get_text_unused()
text_net()
get_text_unused()
The get_text_unused() function returns a new violation that contains only the unused text
errors from the input violation.
Syntax
get_text_unused(
violation1 = violation
);
Returns
violation
Arguments
violation1
Required. Specifies the violation from which the output is derived. The violation is usually
the left side of an @= assignment. For more information about violations, see the Violation
Block section in the IC Validator User Guide.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Examples section of the text_net() function for more information.
See Also
get_text_merged()
get_text_reassign_shorted()
get_text_renamed()
get_text_shorted()
text_net()
get_top_cell()
The get_top_cell() function returns the top cell name. The top cell name is obtained from
the cell argument of the library() function or from the -c command-line option. The -c
command-line option overrides the top cell name. See the Command-Line Options section
in the “IC Validator Basics” chapter of the IC Validator User Guide for more information.
Syntax
get_top_cell();
Returns
string
Arguments
This function has no arguments.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
top_cell = get_top_cell();
m1_extent = cell_extent_layer(m1, cell_list = {top_cell});
See Also
library()
gradient_density()
The gradient_density() function checks layout density changes (gradients) between
neighboring the delta_window subwindow based on user-programmable density
equations.
The gradient_density() function calls a remote density function for each subwindow. The
remote function calls various utility functions that operate on the current subwindow or
neighboring subwindow to produce error output and density statistics.
Syntax
gradient_density(
window_layer = polygon_layer,
layer_hash = {"string" => polygon_layer, ...},
window_function = function,
delta_window = {width = double, height = double},
//optional
rows = integer, //optional
columns = integer, //optional
x_edge_process_amount = double, //optional
y_edge_process_amount = double, //optional
area_clip_delta_percent = double //optional
statistics_files = {density_statistics_file_handle, ...},
//optional
statistics_file_modes = {OVERWRITE | APPEND, ...}, //optional
centered_square_size = double, //optional
boundary = CLIP | ALIGN | IGNORE |
REPLICATE_WINDOW | BACKUP //optional
output_type = DELTA_WINDOW | CLIPPED_DELTA_WINDOW |
CENTER | CLIPPED_CENTER, //optional
output_center_dimensions = {width = double, height = double},
//optional
process_delta_windows = OVERLAPPING | ALL, //optional
name = "layer_label", //optional
delta_x = double, //optional
delta_y = double //optional
);
Returns
polygon layer or error result
Arguments
window_layer
Required. Specifies the polygon layer containing one or more polygons that define the
boundaries where layers are processed for density calculations.
layer_hash
Required. Specifies the hash of string to polygon layer that is processed for density
calculations. Data in this hash is accessible via the hash key within the remote window
function. When referencing data from within the window function, only the portion of the
layer within the current delta_window subwindow or the current window_layer polygon
is seen.
window_function
Required. Specifies the remote function that calculates the gradient density. See
“Gradient Density Utility Functions” in Chapter 4 for more information about the utility
functions you can use to define a remote function.
delta_window
Optional. Specifies the subwindow stepped across each window_layer polygon. The
density equations are evaluated within each subwindow. The default is calculated based
on the number of rows and columns, specified using the rows and columns arguments,
and the extents of each window_layer polygon.
rows
Optional. Specifies the number of rows each window_layer polygon is divided into. The
default is 1.
columns
Optional. Specifies the number of columns each window_layer polygon is divided into.
The default is 1.
x_edge_process_amount
Optional. If the delta_window subwindow overhangs the right edge of the boundary by
the specified value or more, specifies to shift the current subwindow left to make it flush
with the right edge of the current boundary.
y_edge_process_amount
Optional. If the delta_window subwindow overhangs the top edge of the boundary by
the specified value or more, specifies to shift the current subwindow down to make it
flush with the top edge of the current boundary.
area_clip_delta_percent
Optional. Ignores the current delta_window subwindow if the density ratio of the
window_layer material inside the current subwindow is less than the specified value. By
default, the IC Validator tool ignores any subwindow with a window_layer density of 0.
statistics_files
Optional. Specifies the handles of the files written to by gden_window_statistics()
utility functions included in the specified remote window function. Do not specify the
same file more than one time. These files are defined using the
density_statistics_file() function.
statistics_file_modes
Optional. Specifies the action taken when the file already exists for each statistics file of
the gradient_density() function. If only one mode is specified, it is used for all files.
The default is OVERWRITE.
❍ OVERWRITE. Overwrites the previous statistics file. That is, the statistics file contains
only statistics from this function.
❍ APPEND. Appends the new data to the previous statistics file. That is, the statistics file
contains the statistics from previous density functions along with the new statistics
from this function.
centered_square_size
Optional. Specifies that squares centered on polygons inside the window layer are used
as the windows for density calculations. The default is 0.0.
❍ The value must be greater than or equal to 0.
❍ If the value is 0, the gradient_density() function does not output centered
squares.
If the value is greater than 0, then the IC Validator tool performs the following steps:
1. For each polygon of the window layer, find the rectangular extent.
2. Find the center point of the rectangular extent, whose coordinates are (x,y).
3. Set
■ X1 = x - centered_square_size/2
■ Y1 = y - centered_square_size/2
■ X2 = x + centered_square_size/2
■ Y2 = y + centered_square_size/2
Note:
If the values are not on grid, they are rounded up to the next grid value.
4. Perform all normal density operations with X1, Y1, X2, Y2 defining the window layer.
For example,
gradient_density(
window_layer = metal1_extent,
layer_hash = { "layer1" => metal1 },
window_function = my_density_function,
centered_square_size = 15
);
boundary
Optional. Specifies how to process a delta_window subwindow that overlaps the
boundary of the extents of a window layer polygon. The default is CLIP.
❍ CLIP. Truncates the subwindow at the limits of the window layer.
if the x_edge_process_amount or y_edge_process_amount argument is not equal
to -1 when the boundary argument is CLIP, then
■ If the overhang is less than the x_edge_process_amount or
y_edge_process_amount value, a clip is performed.
data are duplicated and added to the right or top side of the original bounding box.
The density measurement on the boundary subwindow is calculated considering the
original data and the duplicated data.
Note:
Both the x_edge_process_amount and y_edge_process_amount arguments
must be -1 when the boundary argument is REPLICATE_WINDOW.
Figure 2-79 shows a replicated subwindow.
❍ BACKUP. Shifts the overlapping subwindow the same way the ALIGN option shifts it.
See ALIGN for more details.
In addition, BACKUP prevents gradient evaluation between the center subwindow
and any adjacent subwindows that overlap the row or column of the center
subwindow.
Figure 2-256 shows examples comparing the gradient evaluation between the center
subwindow and adjacent subwindows by the ALIGN and BACKUP options.
Figure 2-256 Gradient Evaluation Between the Center Subwindow and Adjacent Subwindows
output_type
Optional. Specifies the type of output generated. The default is DELTA_WINDOW.
❍ DELTA_WINDOW. Outputs the delta_window subwindow saved by the
gden_save_window() utility function.
❍ CLIPPED_CENTER. Output the intersection between the rectangle placed at the center
of the subwindow and the window_layer polygon. This intersection is performed
after the remote window function calculations are completed. This option ensures all
center subwindows are inside the boundaries of the window_layer polygons.
output_center_dimensions
Optional. Specifies the dimensions of the rectangle output when the output_type
argument is CENTER.
process_delta_windows
Optional. Controls the handling of delta_window subwindow processing within the
extents of a window layer polygon. The default is OVERLAPPING.
❍ OVERLAPPING. Specifies to process only subwindows that overlap the window layer
polygon.
❍ ALL. Specifies to process all subwindows that fall within the extent of the window layer
polygon.
When using the ALL option,
■ Do not set the output_type argument to CLIPPED_DELTA_WINDOW or
CLIPPED_CENTER.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
delta_x
Optional. Specifies the delta_window subwindow step distance in the x-direction. The
delta_x value must evenly divide into the width option of the delta_window argument.
The default is the width option of the delta_window argument.
delta_y
Optional. Specifies the delta_window subwindow step distance in the y-direction. The
delta_y value must evenly divide into the height option of the delta_window
argument. The default is the height option of the delta_window argument.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
densityEQ_check_gradient : function(
areaL_center : double,
ratio_center : double,
layer_name : string
)
returning void
{
areaL_neighbor : double;
areaW_neighbor : double;
ratio_neighbor : double;
gradient : double;
num_errors : integer = 0;
densityEQ_single_layer_ratio_and_gradient : function(void)
returning void
{
areaL_center : double = gden_polygon_area(layer1);
areaW_center : double = gden_window_area();
ratio_center : double = areaL_center / areaW_center;
L1_extent = layer_extent(Layer1);
{ @"ERR102";
gradient_density(
window_layer = L1_extent,
layer_hash = {"layer1" => Layer1},
window_function = densityEQ_single_layer_ratio_and_gradient,
delta_window = {2, 2}
);
}
See Also
density()
grid_pattern_edge()
The grid_pattern_edge() function outputs the imaginary grid lines that are inside or
coincident with the layer extent of the union of the bounding layer and reference layer.
Syntax
grid_pattern_edge(
bounding_layer = polygon_layer,
reference_layer = polygon_layer,
grid_pattern = list of double,
offset = double,
orientation = VERTICAL | HORIZONTAL,
name = "layer_label" //optional
);
Returns
edge layer
Arguments
bounding_layer
Required. Specifies the input polygon layer to limit the edges that can be snapped. Both
the data to be snapped and the snapped result should be inside or coincident with the
bounding layer.
reference_layer
Required. Specifies the input polygon layer to use (left, bottom) of its layer extents as the
reference point to define the grid pattern.
grid_pattern
Required. Specifies different distance values to form the repeated pattern.
offset
Required. Specifies the distance before the repeated pattern, measured from the
reference point, which depends on the orientation argument:
❍ orientation=VERTICAL. Uses the left of the layer extents of the reference layer.
orientation
Required. Specifies the orientation used to snap to the grids.
❍ VERTICAL. Snaps the x-coordinate of vertices from vertical edges.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Figure 2-257 grid_pattern_edge() Function
reference layer
bounding layer
See Also
resolution_options()
snap()
snap_edge()
snap_to_pattern()
snap_to_pattern_edge()
group_library()
The group_library() function defines a group library path and returns a handle to be used
by the output_library argument of the write_group() function and the input_library
argument of the read_group() and read_group_edge() functions.
Note:
The group_library() function cannot be called more than one time with the same path
value. Multiple read_group() and read_group_edge() functions can use the same
handle within a run; however, these functions cannot have the same handle as a
write_group() function within that run.
Syntax
group_library(
path = "string"
);
Returns
group_library_handle
Arguments
path
Required. Specifies the library path.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
handle = group_library("./save1");
See Also
read_group()
read_group_edge()
write_group()
grouped_by()
The grouped_by() function selects polygons from layer1 layer that interact with the
layer2 layer and satisfy the specified filter. The filter is applied to groups of layer1
polygons that are formed by gathering any layer1 and layer2 polygons that interact. Only
one polygon is selected from each group. Because the filter is not a unique characteristic,
the polygon selection is arbitrary.
Note:
Interaction includes overlap and edge touch but not point touch.
Syntax
grouped_by(
layer1 = polygon_layer,
layer2 = polygon_layer,
filter = MAX_AREA | MIN_AREA,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer from which polygons are selected.
layer2
Required. Specifies the polygon layer defining grouping of layer1.
filter
Required. Specifies the criteria for polygon selection.
❍ MAX_AREA. Selects a layer1 polygon with maximum area from each group.
❍ MIN_AREA. Selects a layer1 polygon with minimum area from each group.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In Figure 2-258, all data from layer1 is grouped by layer2. For each group, the polygon from
layer1 with the specified area, minimum or maximum, is selected, and the result is output to
Result.
Figure 2-258 grouped_by() Function Examples
layer1
layer2
Result
See Also
area() and not_area()
grow()
The grow() function creates polygons from the input layer that are oversized in the specified
directions by the specified distances. If the north, south, east, and west arguments are all
0 (zero) then the output is the original layer. See the prototype_options() function for
more information about defining the criteria for the creation of prototype cells during
hierarchical preprocessing.
Syntax
grow(
layer1 = polygon_layer,
north = double, //optional
south = double, //optional
east = double, //optional
west = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
north
Optional. Specifies the oversize distance in the northern direction, or the top of the
polygons. The default is 0.
south
Optional. Specifies the oversize distance in the southern direction, or the bottom of the
polygons. The default is 0.
east
Optional. Specifies the oversize distance in the eastern direction, or right of the polygons.
The default is 0.
west
Optional. Specifies the oversize distance in the western direction, or left of the polygons.
The default is 0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 2-259 shows using the direction arguments.
layer1 result
See Also
edge_grow()
edge_shrink()
move()
shrink()
size()
size_inside()
size_outside()
hierarchy_auto_options()
The hierarchy_auto_options() function specifies the hierarchy optimizations that are
automatically performed on the input design hierarchy. These optimizations maximize
performance. This function can be called only one time in a runset.
Syntax
hierarchy_auto_options(
application = AUTO_DETECT | DRC | LVS | FILL, //optional
flow = NONE | ERROR_CLASSIFICATION, //optional
optimizations = {REDUCTION, INSERTION}, //optional
no_explode_with_text = true | false //optional
);
Returns
void
Arguments
application
Optional. Specifies the type of run being performed so that the IC Validator tool can
optimally set the hierarchy. The default is AUTO_DETECT.
❍ AUTO_DETECT. Determines the type of run based on the functions within the runset.
❍ DRC. Optimizes the hierarchy for performance when generating DRC violations.
❍ LVS. Optimizes the hierarchy for netlist generation, device extraction, LVS
performance, and LVS debugging.
❍ FILL. Optimizes the hierarchy for performance when generating fill.
flow
Optional. Restricts automatic hierarchy optimizations to increase consistency of error
output between subsequent IC Validator runs. The default is NONE.
Note:
This option is typically set to ERROR_CLASSIFICATION when you run error
classification in CELL_LEVEL mode, including for the initial IC Validator run. However,
HIERARCHICAL mode is the recommended mode for error classification, and the flow
argument must be NONE. See the partially_exploded_cells argument of the
error_options() function for more information on HIERARCHICAL mode.
optimizations
Optional. Specifies optimizations to occur during hierarchy preprocessing. The default is
{REDUCTION, INSERTION}.
❍ REDUCTION. Explodes cells to reduce ineffective hierarchy. Virtual cells, vcells, are not
created.
❍ INSERTION. Inserts virtual cells to provide more effective hierarchy.
no_explode_with_text
Optional. Specifies the exploding of cells with text. The default is false.
❍ true. Does not explode cells with text.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
To disable all optimizations, use this setting of the optimizations argument:
hierarchy_auto_options (optimizations = {});
See Also
hierarchy_options()
hierarchy_options()
The hierarchy_options() function modifies the hierarchy in the input layout. See the
hierarchy_auto_options() function for arguments related to the automatic optimization
of the hierarchy.
Syntax
hierarchy_options(
delete =
{"string", ...}, //optional
explode =
{"string", ...}, //optional
explode_all =
{"string", ...}, //optional
flatten =
{"string", ...}, //optional
no_explode =
{"string", ...}, //optional
arefs_to_srefs =
{"string", ...}, //optional
pairs =
{{pair_cells = {"string", ...},
iterate_max = integer,
explode_into_vcell = ON | OFF | AUTO,
x_pairing = true | false,
y_pairing = true | false},
... }, //optional
sets = {{base_cells = {"string", ...},
programming_cells = {"string", ...},
iterate_max = integer,
explode_into_vcell = ON | OFF | AUTO,
flatten_sets = true | false,
min_cell_overlap = integer,
share_base_cells = true | false},
...}, //optional
flatten_by_layer = {{layer_num_range = integerconstraint,
data_type_range = integerconstraint},
...}, //optional
flatten_by_layer_purpose = {{layer_names = {"string", ...},
purpose_names = {"string", ...}},
...} //optional
);
Returns
void
Arguments
delete
Optional. Specifies the cells that are deleted from the hierarchy. Therefore, these cells
are not checked. String matching using metacharacters is allowed. See “String Matching”
on page A-11 for more information. By default, the IC Validator tool does not delete cells.
explode
Optional. Specifies the cells that are exploded into their parent cells. All data placements
within an exploded cell are translated and stored in the parent cell. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information. By
default, the IC Validator tool does not explode cells other than those cells that meet the
automatic explode criteria, for example, placed only one time.
explode_all
Optional. Specifies the cells that are hierarchically exploded, along with all cells beneath
the specified cells, into the parent of the specified cells. (This argument is, therefore, a
combination of the flatten and explode arguments for the specified cells.) The result
is flat data in the parent cell. String matching using metacharacters is allowed. See
“String Matching” on page A-11 for more information. By default, the IC Validator tool
does not explode cells and their children other than those cells, and all of their
descendants, that meet the automatic explode criteria.
flatten
Optional. Specifies the cells that are beneath where the specified cells are exploded up
so that the specified cells contain only flat data. String matching using metacharacters is
allowed. See “String Matching” on page A-11 for more information. By default, the
IC Validator tool does not flatten cells other than those cells that get flattened as a by
product of the automatic explode criteria.
no_explode
Optional. Specifies cells that are not exploded. This list takes precedence over any
explode argument for a specified cell or any automatic optimization. String matching
using metacharacters is allowed. See “String Matching” on page A-11 for more
information. By default, the IC Validator tool does not protect cells from exploding during
preprocessing.
Note:
Arguments to other functions in the OPTIONS section can also prevent the explosion
of specifically named cells during preprocessing. For example, the cells specified in
the select_cells argument of the assign() function are not exploded even if they
are listed in the explode or explode_all arguments.
The no_explode argument takes precedence over the explode and explode_all
arguments, but it does not prevent a cell from being flattened. If a cell is in the
no_explode and flatten lists, then it is preserved (not exploded into its parent
cells), but it is still flattened. That is, all of its children are exploded up into it, so that
it has no children; it is a flat cell.
Disabling or limiting automatic hierarchy optimization can have a significant negative
impact on performance and is discouraged.
arefs_to_srefs
Optional. Specifies the cells for which the AREFs (array references) are broken into their
component SREFs (structured references). String matching using metacharacters is
allowed. See “String Matching” on page A-11 for more information. The default is only
those AREFs that meet the default conversion criteria are converted to SREFs.
pairs
Optional. Lists the structures that determine the criteria for creating pairs. Pairing creates
new virtual cells from pairs of child cells that interact, often across the chip. The entries
in the list are processed in order. Sets are processed before pairs. By default, there is no
pairing.
❍ pair_cells. Required. Specifies the cells that can be paired. Cells not in this list are
not paired. String matching using metacharacters is allowed. See “String Matching”
on page A-11 for more information.
❍ iterate_max. Optional. Specifies the maximum number of iterations for the pairing
feature. The default is 15.
❍ explode_into_vcell. Optional. Specifies the options for the exploding of paired
cells. The default is AUTO.
■ OFF. Does not explode paired cells.
sets
Optional. Lists the structures that determine the criteria for creating sets. Sets are
created by combining instances of programming and base cells in design styles such as
gate arrays and programmed ROMs.
Important:
Do not use this feature unless sets are applicable to the design style.
The entries in the list are processed in order. Sets are processed before pairs. By default,
the IC Validator tool does not create sets.
❍ base_cells. Required. Specifies the base cells that are considered for set creation.
A base cell should be a cell consisting of layers that will be programmed because of
the interaction with layers in the programming cell. Cells not in this list are ignored.
String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information.
❍ programming_cells. Optional. Specifies the programming cells that are considered
for set creation. Programming cells are cells that hierarchically overlap sibling cells or
other cells across the hierarchy and have layers in them that program base cells to
be a logical function or type of programmed memory cell. Cells not in this list are
ignored. An empty list specifies that no cells are considered. By default, the
IC Validator tool considers all cells to be programming cells.
String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information.
❍ iterate_max. Optional. Specifies the maximum number of iterations for creating
sets. The default is 4.
❍ explode_into_vcell. Optional. Specifies the options for the exploding of
placements that form sets. The default is AUTO.
■ OFF. Does not explode cells instances that form sets.
■ AUTO. Optimizes explosion of cell instances that form sets for performance.
❍ flatten_sets. Optional. Specifies if the newly created sets are flattened. When set
to true, the sets are flattened. The default is false.
❍ min_cell_overlap. Optional. Specifies the minimum base cell percentage of
overlap required to create a set. The default is 60.
❍ share_base_cells. Optional. Specifies if a single placement of a base cell can be
shared in different sets. When set to true, a single placement of a base cell can be
shared in different sets. The default is true.
flatten_by_layer
Optional. Lists layer range and datatype range pairs that are flattened. Cells that contain
at least one polygon on the specified layers and datatypes are not flattened. By default,
there is no flattening of cells by layer. The data_type_range value for each pair is
optional, with a default of all datatypes. See Layout Layer and Datatype Ranges for
information about the limits of the values.
flatten_by_layer_purpose
Optional. Lists layer range and purpose name pairs that are flattened. Cells in an
OpenAccess layout that contain at least one polygon on the specified layers and
purposes are flattened. The purpose name for each pair is optional, with a default of all
purpose names. By default, there is no flattening of cells by layer.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
This example first pairs filler cells, and then pairs all cells:
hierarchy_options (pairs = {{pair_cells = {"fill1", "fill2", "fill3"}},
{pair_cells = {"*"}}});
This example forms sets with base cells that start with “arr”:
hierarchy_options ( sets = {{base_cells = {"arr*"}}});
See Also
hierarchy_auto_options()
icvread()
The icvread() function runs the ICVread application.
Note:
If this function is in the runset, you do not need to use the -icvread command-line
option.
The compare result does not need to be clean in order for the ICVread application to start.
If the compare result is not clean, then the ICVread application only reports the matched
nets and devices, and it ignores the unmatched ones. A warning message is written when
compare is not clean:
Warning: This design did not compare clean. Only matched nets and devices
will be available for icvread.
Syntax
icvread(
compare_result =
xref_database_handle,
icvread_result =
icvread_database,
output_data =
{NETS, INSTANCES}, //optional
output_per_net =
ONE_POLYGON_PER_LAYER | ALL_POLYGONS,
//optional
slash_in_instance_name = true | false //optional
);
Returns
void
Arguments
compare_result
Required. Specifies the handle of the database from which cross-reference information
is generated. The handle must be previously defined by the compare() function.
icvread_result
Required. Specifies the handle of the ICVread database generated by the
icvread_generate_results() function.
output_data
Optional. Specifies the types of output data that are generated. By default, the
IC Validator tool generates both net and instance data.
❍ NET. Generates net polygon data.
output_per_net
Optional. Specifies the count of polygons to be written into the net polygon database.
The default is ALL_POLYGONS.
❍ ALL_POLYGONS. Writes data for all polygons into net polygon database.
❍ ONE_POLYGON_PER_LAYER. Writes data for only one polygon in each net on each layer
into net polygon database.
slash_in_instance_name
Optional. Specifies if names containing the slash character (/) are in the layout database.
The default is false.
❍ true. Specifies that the instance names might contain a slash character. Because the
IC Validator default hierarchical delimiter is the slash character, there can be conflicts
with the instance names. With the true setting, the ICVread application takes into
consideration the possible conflicts.
❍ false. Specifies that the instance names in layout database do not contain a slash.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
icvread_generate_results()
icvread_layer_map()
icvread_spec_file()
init_icvread_matrix()
icvread_generate_results()
The icvread_generate_results() function generates all outputs used by the ICVread
application. The outputs are
• The ICVread specification file. The icvread_spec_file() function specifies the name
of this file.
• An internal layout database that contains the layers mapped by icvread_layer_map()
function calls. This internal database is used by the ICVread application to generate
individual layer databases that can be used by third-party tools.
After the icvread_generate_results() function generates those outputs, you can use the
icvread() function to run the ICVread application. Or, you can run the ICVread application
from the command line after the IC Validator tool completes the run.
Syntax
icvread_generate_results(
icvread_matrix = icvread_matrix,
icvread_spec_file = icvread_spec_file_handle,
schematic_top = "string",
selected_nets = {"string", ...}, //optional
skip_nets = {"string", ...} //optional
);
Returns
ICVread database or void
Arguments
icvread_matrix
Required. Specifies the data structure that stores mapping information from
icvread_layer_map() function calls.
icvread_spec_file
Required. Specifies the handle for the ICVread specification file. The file handle is
defined using the icvread_spec_file() function.
schematic_top
Required. Specifies the top cell in the schematic used during LVS compare.
selected_nets
Optional. Specifies the net names for which polygon information is written into the
ICVread np files. For the specified nets, the entry SELECTED_NETS is added to the
ICVread specification file. When the ICVread application is run, it writes the polygons
connecting to these nets. For example, if your runset has:
icvread_generate_results(
...
selected_nets = {a, b}
)
Warning:
When you use this argument, the output database will be incomplete. Therefore, only
use this argument when you are debugging a net that seems incorrect. For example,
when you find that the result generated by the ICVread application seems incorrect,
use the selected_nets argument to narrow the output to a specific net.
The default ({}) is no selected net names, and as a result, no SELECTED_NETS entries
are created in the ICVread specification file. If there are no SKIPPED_NETS entries, the
ICVread application generates np files for all nets.
Note:
Do not use the selected_nets argument when you use the skip_nets argument.
skip_nets
Optional. Specifies the net names for which polygon information is not written into the
ICVread np files. For the specified nets, the entry SKIPPED_NETS is added to the
ICVread specification file. When the ICVread application is run, it bypasses the polygons
connecting to these nets. For example, if your runset has:
icvread_generate_results(
...
skip_nets = {a, b}
)
Warning:
When you use this argument, the output database will be incomplete. Therefore, only
use this argument when you are debugging a net that seems incorrect. For example,
use the skip_nets argument to filter out correct nets connecting to huge amount of
polygons, such as VSS and VDD.
The default ({}) is no selected net names, and as a result, no SKIPPED_NETS entries
are created in the ICVread specification file. If there are no SELECTED_NETS entries,
the ICVread application generates np files for all nets.
Note:
Do not use the skip_nets argument when you use the selected_nets argument.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
icvread()
icvread_layer_map()
icvread_spec_file()
init_icvread_matrix()
icvread_layer_map()
The icvread_layer_map() function stores the mapping between PXL layer objects and
ICVread layer parameter in the ICVread matrix. This mapping allows you to use familiar
layer names and numbers for layer data that are saved by IC Validator. These layer
mappings are used in the ICVread specification file. The specification file is read by the
ICVread application. You must call this function for every layer you want to output to the
ICVread application.
Note:
The name of the ICVread specification file is used by the icvread_spec_file()
function.
Syntax
icvread_layer_map(
matrix = icvread_matrix,
layer1 = polygon_layer,
tagname = "string",
layer_number = integer //optional
);
Returns
void
Arguments
matrix
Required. Specifies the ICVread matrix for the ICVread application. The matrix must be
previously defined by the init_icvread_matrix() function, where ICVread matrix is
the result of the init_icvread_matrix() function.
layer1
Required. Specifies the polygon layer written to the layout database that is used by the
ICVread application.
tagname
Required. Associates a user-defined name with the layer1 polygon layer. This tag name
is used to represent the layer in all files that require a layer identity, including the
database generated by the ICVread application for that layer. Each specified tag name
must be unique and cannot be reused in other icvread_layer_map() function calls.
layer_number
Optional. Specifies a layer number to assign to the layer during device extraction. The
value can be from 0 to 255. If this argument is not used, the layer number is derived from
the extract devices output library. The ICVread application outputs the layer_number.np
files.
Note:
If you specify duplicate layer numbers, an error message is given. If a layer number
you provide conflicts with an internal layer number, the specified layer number is used
and the internal layer is given a different number.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
icvread()
icvread_generate_results()
icvread_spec_file()
init_icvread_matrix()
icvread_spec_file()
The icvread_spec_file() function generates a handle for the ICVread specification file
read by the ICVread application. This file is used by the icvread_generate_results()
and icvread_layer_map() functions.
The ICVread specification file contains the following sections. After each section identifier,
the value for that setting is written. See the Example section for more information.
• RUN_DETAILS_PATH. Path to the run_details directory. This path is specified in the
run_details_path argument of the run_options() function.
• COMPARE_PATH. Path to the compare directory. This path is the location of the
compare directory (run_directory/run_details/compare).
• LAYOUTTOP. Layout top cell name. This cell is the top cell of the layout.
• SCHEMATICTOP. Schematic top cell name. This path is specified in the
schematic_top_cell argument of the compare() function.
• LAYER. List of layer numbers and tag names that are used by the ICVread application to
generate the polygon database of each layer. Every layer that is mapped with an
icvread_layer_map() function has an entry in the LAYER section. The layer IDs used
in the LAYER section correspond to the file names of the layer_number.np files (layer
databases) that are generated by the ICVread application.
Syntax
icvread_spec_file(
file = "string"
);
Returns
icvread_spec_file_handle
Arguments
file
Optional. Specifies the output file name for the ICVread specification file. The default is
"icvread.spec".
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
Here is an example ICVread specification file.
LAYOUT <- This is the section keyword/identifier
MWLIB <- This is the value associated with "LAYOUT"
RUN_DETAILS_PATH
./run_details
COMPARE_PATH
./run_details/compare
LAYOUTTOP
Top
SCHEMATICTOP
Top
LAYER
1 poly <- Layer #1 in the OUTLIB maps to the tagname 'poly'
2-2 ngate <- Layer #2 datatype 2 maps to the tagname 'ngate'
3 pgate
4 M1
See Also
icvread()
icvread_generate_results()
icvread_layer_map()
init_icvread_matrix()
identify_fill()
The identify_fill() function identifies floating fill in layer1 by layer2. After the floating fill
is identified, it is optimized in the connect database.
Note:
All commands that check floating fill do so as usual and do the same work as without this
optimization.
To optimize floating fill for all layers, use the optimize_floating_fills argument of
the run_options() function.
Syntax
identify_fill(
layer1 = polygon_layer,
layer2 = polygon_layer,
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
layer1
Required. Specifies a polygon layer.
layer2
Required. Specifies a polygon layer. These polygons usually are a subset of the layer1
polygons.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
In the following example, dummy metal is part of the corresponding metal layer: {1,45} is part
of layer {1}, and {3,45} is part of layer {2}.
metal1 = assign({{1}});
dummy1 = assign({{1,45}});
metal2 = assign({{3}});
dummy2 = assign({{3,45}});
via1 = assign({{2,1}});
metal1 = identify_fill(metal1,dummy1);
metal2 = identify_fill(metal2,dummy2);
connect(
{metal1, metal2}, via1}
. . .
);
In the following example, dummy metal is not part of the metal layers.
metal1 = assign({{1}});
metal2 = assign({{3}});
via1 = assign({{2,1}});
dummy1 = assign({{10}});
dummy2 = assign({{11}});
. . .
metal1 = metal1 or dummy1;
metal2 = metal2 or dummy2;
…
/* Floating shapes must be identified and produce metal before
being used in connect(). Use the identify_fill() function on
input layers to the connect() function.*/
metal1 = identify_fill(metal1,dummy1);
metal2 = identify_fill(metal2,dummy2);
connect(
{metal1, metal2}, via1}
. . .
);
In the following example, the identify_fill() function is used to identify floating data in a
set of layer data. This usage prevents the inclusion of floating polygons in the connect
database.
metal1 = assign({{1}});
metal2 = assign({{3}});
via1 = assign({{2,1}});
metal1 = identify_fill(metal1,metal1);
metal2 = identify_fill(metal2,metal2);
connect(
{metal1, metal2}, via1}
. . .
);
See Also
connect()
import_gds_cell()
The import_gds_cell() function reads the hierarchy tree of a cell from the specified GDSII
library.
Using the result of the import_gds_cell() function as input to the cell option of the
place_cells argument of a write function, you can place the cell based on shapes in a
marker layer.
Note:
A GDSII file can be gzipped. The IC Validator tool automatically detects if a GDSII file is
gzipped.
Syntax
import_gds_cell(
input_library = gds_library_handle,
cell = "string"
);
Returns
cell_handle
Arguments
input_library
Required. Specifies the library that has the cell to be placed. See the gds_library()
function for information about defining the gds_library_handle.
cell
Required. Specifies the top cell name of the cell to be placed.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
The following example shows using the import_gds_cell() function to specify a cell to be
imported and then written out using the write_gds() function.
fill_lib = gds_library("fill_library.gds");
c1 = import_gds_cell(fill_lib, "C1");
c2 = import_gds_cell(fill_lib, "C2");
// Output to GDSII
g = gds_library("fill.gds");
write_gds(
output_library = g,
place_cells = {
{ fill_marker_1, c1 },
{ fill_marker_2, c2, compress = AUTO }
}
);
See Also
write_gds()
import_oasis_cell()
The import_oasis_cell() function reads the hierarchy tree of a cell from the specified
OASIS library.
Using the result of the import_oasis_cell() function as input to the cell option of the
place_cells argument of a write function, you can place the cell based on shapes in a
marker layer.
Note:
An OASIS file can be gzipped. The IC Validator tool automatically detects if an OASIS file
is gzipped.
Syntax
import_oasis_cell(
input_library = oasis_library_handle,
cell = "string"
);
Returns
cell_handle
Arguments
input_library
Required. Specifies the library that has the cell to be placed. See the oasis_library()
function for information about defining the oasis_library_handle.
cell
Required. Specifies the top cell name of the cell to be placed.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the import_gds_cell() function for an example of using an import cell function.
See Also
write_oasis()
incremental_connect()
The incremental_connect() function creates a new connect database by adding
electrical connectivity for the specified layers to a previously created connect database. For
each entry within the connect_items argument, connectivity is independently established
from each layer in the layers list to the layer specified with the by_layer option. The
resulting connect database is untexted.
Syntax
incremental_connect(
connect_sequence = connect_database,
connect_items = {{layers = {polygon_layer, ...},
by_layer = polygon_layer,
include_touch = NONE | EDGE,
by_layer_connection = ALL | SHIELDED_OVERLAP},
...}
);
Returns
connect database
Arguments
connect_sequence
Required. Specifies the connect database.
connect_items
Required. Lists the connection specifications.
❍ layers. Required. Specifies a list of the polygon layers to connect.
❍ by_layer. Optional. Specifies the polygon layer by which the layers specified in the
layers argument are connected. By default, these layers connect directly with each
other; they are not connected through a by layer.
In the following example, the layers are all connected to each other without a by layer.
Figure 2-260 illustrates this example.
incremental_connect(connect_database, connect_items = {{{layer1,
layer2, layer3, layer4}}} );
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
cdb2 = incremental_connect(cdb1, {{{metal1, metal2}, via2}});
See Also
connect()
create_ports()
stamp()
text_net()
incremental_options()
The incremental_options() function specifies a subset of the input layout to be
processed. Window selection is performed first followed by the punching of holes with the
exclude windows.This function can be called only one time in a runset.
Syntax
incremental_options(
exclude_window = {{left = double, bottom = double,
right = double, top = double}, ...},
//optional
exclude_window_by_cells = {"string", ...}, //optional
exclude_window_by_cells_delta = double, //optional
select_window = {{left = double, bottom = double,
right = double, top = double}, ...},
//optional
clip_window = false | true, //optional
window_error_filter = KEEP_ALL | KEEP_INTERACTING |
KEEP_ENCLOSED, //optional
window_ambit = double, //optional
apply_window = {INPUT_LAYOUT, OUTPUT_ERRORS}, //optional
select_window_by_cells = {"string", ...} //optional
);
Returns
void
Arguments
exclude_window
Optional. Lists the windows in the coordinate system of the top cell that defines areas
excluded from processing. See the clip_window argument to define the action for data
that crosses the window boundaries. The default is an empty list ({}).
exclude_window_by_cells
Optional. Specifies the cells excluded from processing. This is achieved by clipping and
removing any shapes within the bounding boxes of placements of the specified cells, and
is performed in the top cell. Any shape originating from any cell is removed if it is within
a specified cell's bounding box from a flat view in the top cell. There is no support for
excluding a rectilinear shape within specified cells; the rectangular extents are used
instead. The default is an empty list ({}).
Note:
When using the exclude_window_by_cells argument, the clip_window argument
must be true.
exclude_window_by_cells_delta
Optional. Specifies the minimum spacing between cells. A positive delta shrinks the cells
and a negative delta expands the cells. The default is 0.
select_window
Optional. Lists the windows in the coordinate system of the top cell that defines areas
selected for processing. All areas outside of these windows are excluded from
processing. See the clip_window argument to define the action for data that crosses the
window boundaries. The default is an empty list ({}).
clip_window
Optional. Specifies whether polygons overlapping window boundaries are clipped. The
default is false.
❍ true. Clips overlapping polygons at the window boundary.
window_error_filter
Optional. Specifies how top cell errors are filtered when writing to the error database. The
default is KEEP_ALL.
Note:
Only errors reported in the top cell are filtered. Errors reported in other cells are not
filtered.
❍ KEEP_ALL. Specifies that no error filtering occurs. All errors are written to the error
database.
❍ KEEP_INTERACTING. Specifies that only errors that touch or overlap the selected area
are written to the error database.
❍ KEEP_ENCLOSED. Specifies that only errors that are completely enclosed by the
selected areas are written to the error database.
window_ambit
Optional. Oversizes the selected windows when filtering layout data to be read. The
filtering of errors based on select window values is not be affected.
Oversizes the windows specified with the select_window argument by the specified
amount when reading layout data, but not when filtering errors. Any windows specified
with the exclude_window argument are undersized by the specified amount. The default
is 0.0.
apply_window
Optional. Chooses the type of data to be filtered: input layout data, error output data, both
types of data, or neither type, when you use the select_window, exclude_window, and
exclude_window_by_cells arguments of the incremental_options() function. The
default is filtering, that is selection or exclusion from the specified windows, of input
layout and error output data, {INPUT_LAYOUT, OUTPUT_ERRORS}.
Note:
The window_error_filter argument affects filtering only when it is
KEEP_INTERACTING or KEEP_ENCLOSED and the apply_window argument specifies
the OUTPUT_ERRORS option.
The clip_window argument affects filtering only when the apply_window argument
specifies the INPUT_LAYOUT option.
❍ INPUT_LAYOUT. Filters input layout data.
select_window_by_cells
Optional. Specifies a list of cells to be included for processing. All areas outside of these
cells are excluded from processing. See the clip_window argument for more
information about how to define the action for data that crosses the window boundaries.
The default is an empty list ({}).
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
incremental_options (
select_window = {{2, 2, 4, 4}, {8, 8, 10, 10}}
);
See Also
hierarchy_options()
inductor()
The inductor() function collects extraction configuration information about designed
inductors that have a device layer and two terminal layers. One or more optional pin layers
can also be specified. The configuration information, which contains device body and
terminal layers, property extraction information, schematic device mappings, and pin
handling instructions, is stored in the device matrix that is passed to the
extract_devices() function.
To recognize inductor devices, the device body layer polygons must interact with one
polygon from each terminal layer and from each specified optional pins layer. Multiple
polygons from one terminal layer can be treated as a single pin if those terminal layer
polygons belong to the same net. If an optional pin layer with the pin_type option set to
BULK is specified, the required relationship between the pin layer polygon and the device
body layer polygon is defined by the bulk_relationship argument. If an optional pin layer
with the pin_type option set to TERMINAL is specified, the optional pin layer polygon must
interact with the device body layer polygon but is not required to enclose the device body
layer polygon.
The device layer is usually generated by an and() function call between an inductor
recognition layer and the inductor material. The device layer is then used to cut the inductor
material using a not() function call to form the inductor terminals.
Note:
See “Device Names” in Appendix A for the device_name argument restrictions.
Syntax
inductor(
matrix = device_matrix,
device_name = "string",
device_body = polygon_layer,
terminal_a = polygon_layer,
terminal_b = polygon_layer,
optional_pins = {{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK,
pin_compared = true | false},
...}, //optional
recognition_layer = polygon_layer, //optional
reference_layer = polygon_layer, //optional
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
properties = {{name = "string",
type = DOUBLE | DOUBLE_LIST | STRING,
scale = FEMTO | PICO | NANO | MICRO |
MILLI | KILO | MEGA | NONE},
...}, //optional
write_property_to =
NETLIST_XTR_SPICE | NETLIST_PEX_SPICE |
SPICE | ANNOTATION_FILE |
NETLIST_ANNOTATION_FILE_SPICE |
NETLIST | AUTO | NETLIST_SKIP_PCELL,
processing_layer_hash_map =
{"string", ...},
pin_map = {"string", ...}},
...}, //optional
property_function = function, //optional
merge_parallel = true | false, //optional
bulk_relationship = ENCLOSE | INTERACT, //optional
swappable_pins = {{"string", ...}, ...}, //optional
schematic_devices = {{device_name = "string",
terminal_a = "string",
terminal_b = "string",
optional_pins = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
x_card = true | false, //optional
spice_netlist_function = "string", //optional
connectivity = {{layer = {polygon_layer, ...}
by_layer = polygon_layer}, ...}, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
unique_identifier = "string", //optional
swappable_properties = {{pin_name = "string",
property_list = {"string", ...}},
...}, //optional
simulation_model_name = "string", //optional
dlink_libraries = {dev_dlink_library_handle, ...}, //optional
extract_shorted_device = true | false, //optional
top_simulation_properties = true | false //optional
);
Returns
void
Arguments
matrix
Required. Specifies the device matrix used by the extraction functions. The matrix must
be defined by the init_device_matrix() function. Configuration details for device
extraction are stored in the matrix data object for use by the extract_devices()
function.
device_name
Required. Specifies the inductor. A device name can be reused across multiple calls of
the inductor() function if all calls have
❍ Equivalent numbers of optional pins with equivalent values for the pin_name and
pin_compared options.
device_body
Required. Specifies the body layer of the inductor.
terminal_a
Required. Specifies the device layer that contains the first terminal of the inductor. The
pin name generated by the IC Validator tool is “A”.
terminal_b
Required. Specifies the device layer that contains the second terminal of the inductor.
The pin name generated by the IC Validator tool is “B”.
optional_pins
Optional. Lists additional bulk or terminal layers. You can specify up to 20 pins.
❍ device_layer. Required. Specifies the device layer.
recognition_layer
Optional. Specifies the layer used to recognize a device when the device body layer does
not interact with all terminal layers and processing layers. All processing layers must
interact with this specified recognition layer. This layer is also used to identify device
instances that are merged during layout extraction when multiple individual devices
occur within a single recognition layer polygon. See the merge_parallel argument for
more information.
reference_layer
Optional. Specifies the intended location in the hierarchy for the extracted device. The
layer is usually an assign layer.
processing_layer_hash
Optional. Specifies a hash of string to a processing layer and range pair. In the remote
property function, each layer is retrieved as a polygon set by passing the hash key to the
dev_processing_layer() function.
❍ layer1. Required. Specifies the processing layer, which is a non-terminal layer used
for calculating properties.
❍ range. Optional. Specifies the maximum distance value from a device body polygon.
This value defines a window around the device body for data collection.
A nonnegative range value collects processing polygons that are within the specified
range of the body polygon which might or might not interact with the body polygon.
The default is -1.
■ When the range value is -1, only processing_layer_hash polygons interacting
with the body layer polygon are selected for the polygon set.
■ When the range value is >0, a window is created by oversizing the body layer
polygon by the range value. All processing_layer_hash polygons interacting
with this window, either by overlap or by an externally touching edge, are selected
for the polygon set.
See the description of the processing_layer_hash argument of the nmos() and
pmos() functions for diagrams that illustrate the application of the range value.
properties
Optional. Lists the property values that define the device. The default is
properties = {{"l", DOUBLE, NONE}},
Note:
The compare() function does not support the DOUBLE_LIST property. When
running dual-hierarchy extraction, the list of double properties is always written to
the annotation file unless the write_property_to argument is explicitly
specified.
❍ scale. Optional. Specifies the scale factor applied to property values output by the
write_spice(), write_xref_spice(), pex_generate_results(), and
write_annotation_file() functions. The default is NONE, which means no scaling.
You can use this scale option to convert dimensional property values from the
IC Validator native base unit of microns into the base unit of meters for SPICE
simulation.
❍ write_property_to. Optional. Specifies to which file the property is written. The
default is AUTO.
■ NETLIST_XTR_SPICE. Writes the corresponding property to
Table 2-29 Dual-Hierarchy Extraction Treatment for Processing Layers Mapped Using the
processing_layer_hash_map Argument (Continued)
Table 2-30 Dual-Hierarchy Extraction Treatment for Terminal Layers Mapped Using pin_map
If the pin name of a terminal layer is not referenced in the pin map for any property,
then that layer is never leveled, regardless of whether dual-hierarchy extraction is
enabled or disabled.
property_function
Optional. Specifies the remote function that calculates the geometric properties for each
extracted inductor. The default calculations are for the inductance, the length from one
end of the polygon path to another end, the width of the polygon path, turns of the spiral
inductor, the space of the closest polygon path, the area of the bounding box, the height
of the bounding box, and the width of the bounding box. The default
calc_inductor_properties() function is defined in the device_public.rh header file.
If you use a remote function, you must specify the device properties in the properties
argument. See Chapter 4, “Utility Functions,” for information about the utility functions
you can use to define a remote function.
merge_parallel
Optional. Specifies whether parallel devices enclosed by the same recognition layer
polygon are merged. The default is false.
❍ true. Merges parallel devices enclosed by the same recognition layer polygon.
Multiple banks of parallel-merged devices can occur within a single recognition layer
polygon.
❍ false. Parallel devices enclosed by the same recognition layer polygon are not
merged.
bulk_relationship
Optional. Specifies the required relationship between the bulk polygon and the device
polygon. The default is ENCLOSE. The bulk polygon is defined as the first member of the
optional_pins argument list for which the pin_type option is BULK.
❍ ENCLOSE. Specifies that the bulk polygon must enclose the device polygon.
❍ INTERACT. Specifies that the bulk polygon must interact with the device polygon by
one of these methods: enclosing, cutting, or outside edge touching.
swappable_pins
Optional. Lists the pins that can be swapped for a successful comparison with the
schematic device. By default, pins “A” and “B” can be swapped. Use an empty list to
disable swapping of all pins:
swappable_pins = {}
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals used for comparison.
By default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
device configuration function.
■ The schematic pin names do not match the standard “A”, “B”, and “BULK” pin
names, in addition to optional pin names provided in the optional_pins list of
structures argument of the device configuration function.
❍ device_name. Required. Specifies the schematic device.
❍ terminal_a. Optional. Specifies the first terminal of the device. The default is "A".
❍ terminal_b. Optional. Specifies the second terminal of the device. The default
is "B".
❍ optional_pins. Optional. Specifies the schematic pins that correspond to the
pin_name option in the optional_pins argument.
❍ ignore_pins. Optional. Ignores the specified schematic pins during pin connectivity
comparison between the layout and schematic. If a pin name is listed that matches a
pin name defined by the optional_pins argument, that pin is ignored both in the
layout and schematic. This behavior is similar to the pin_compared option of the
optional_pins argument of the inductor() function.
If the schematic device has an optional pin that does not correspond to any pin in the
inductor() function, that pin can be specified with the ignore_pins. Otherwise, this
optional pin produces an error during the compare operation.
x_card
Optional. Specifies if the instance name prefix is replaced. The default is false.
❍ true. Replaces the default instance name prefix for the layout extracted device with
an X-card. This option facilitates the use of SPICE SUBCKT models to represent
devices in simulation.
❍ false. The default instance name prefix for the layout extracted device is not
replaced.
spice_netlist_function
Optional. Specifies the function used to format instances of the device in netlists
generated by the write_spice() and write_xref_spice() functions. See “Flexible
Netlisting Utility Functions” in Chapter 4 for more information.
connectivity
Optional. Lists the connections for different layers that make up the body of an inductor.
This information is used by the dev_coil_path_length() utility function.
❍ layers. Specifies the layers that make up the inductor.
❍ by_layer. Specifies the polygon layer by which specified layers are connected.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
unique_identifier
Optional. Specifies the user-derived string used by the remote property function. The
unique_identifier argument value is retrieved from the remote property function with
the dev_unique_identifier() utility function. See the Examples section of the
capacitor() function for more information. You must ensure that the string is valid and
unique because the IC Validator tool does not check the value. The default is an empty
string ("").
This functionality is used to access data objects created outside of a remote property
function but passed in as global variables. Use this functionality when access to these
global variables must be synchronized to a specific device configuration function call. For
example, you can create a global hash object containing property extraction parameters
for several device configuration functions. The hash key is a unique identifier string that
matches the unique_identifier argument value. Then, you can clear the hash key by
invoking the dev_unique_identifier() function that is in the property function. The
dev_unique_identifier() function retrieves the unique_identifier argument value
to the corresponding device configuration function call.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped. By default, the IC Validator tool does not map swappable pins to
properties.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
simulation_model_name
Optional. Specifies the simulation netlist model name. As needed, define this model
name for each device configuration function. This name is output to the runset report file.
The device name is not changed.
dlink_libraries
Optional. Specifies the libraries that can be used to pass measurement data to external
libraries. See the Dynamic-Link Library Support chapter in the IC Validator User Guide
and “Dynamic Linking Utility Functions” in Chapter 4 for more information.
extract_shorted_device
Optional. Specifies whether shorted devices, that is, devices with only one terminal, are
extracted. The default is true.
❍ true. Extracts shorted devices.
top_simulation_properties
Optional. Controls whether properties identified as simulation properties are extracted
hierarchically or in the top cell. The default is false.
❍ true. Extracts simulation properties in the top cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for information.
Example
matrix = init_device_matrix(cdb1);
inductor(
matrix,
device_name = "IND",
device_body = dev,
terminal_a = term,
terminal_b = term
);
device_db = extract_devices(matrix);
netlist_db = netlist(device_db);
See Also
capacitor()
resistor()
init_compare_matrix()
The init_compare_matrix() function creates a compare matrix. Invoke this function
before the compare functions. You can call this function only one time in a runset.
The compare functions add data to the matrix by collecting information from settings.
Syntax
init_compare_matrix(
netlist_vs_netlist = FULL_RUNSET | PARTIAL_RUNSET
);
Returns
compare state
Arguments
netlist_vs_netlist
Optional. Specifies if automatic device mappings are performed for netlist-versus-netlist
flows. Netlist-versus-netlist flows differ from layout-versus-schematic flows in that
netlist-versus-netlist flows do not perform device extraction from layout. Instead, two
standalone netlists are imported into the IC Validator tool and compared. IC Validator
netlist-versus-netlist runsets optionally include calls to the following functions to map
device names in the imported netlists to IC Validator device types:
map_capacitor()
map_gendev()
map_inductor()
map_nmos() and map_pmos()
map_np() and map_pn()
map_npn() and map_pnp()
map_resistor()
The netlist_vs_netlist argument of the compare() function regulates whether
netlist-versus-netlist mapping function calls are required for every device instance in
each imported netlist, or whether the mapping of device instance to device type is
inferred from the netlist without an explicit mapping function call for each instance.
The default is FULL_RUNSET.
❍ FULL_RUNSET. Does not perform automatic device mappings. A full
netlist-versus-netlist runset containing netlist-versus-netlist mapping function calls for
every device instance in each imported netlist is required. Otherwise, an error results
for any imported device instance that is not mapped to an IC Validator device type by
a mapping function.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
check_property()
compare()
equiv_options()
filter()
match()
merge_parallel()
merge_series()
recalculate_property()
search_include_path()
init_device_matrix()
The init_device_matrix() function creates the device matrix that is used to store
configuration information for device extraction for use by the extract_devices() function.
The device matrix data is populated by configuration information for device extraction by
calls to device configuration functions, including capacitor(), gendev(), inductor(),
nmos() and pmos(), np() and pn(), npn() and pnp(), and resistor().
In addition, this function is used to activate the dual-hierarchy extraction flow that extracts
environment-sensitive properties from postflattened hierarchy for simulation while
maintaining preflattened hierarchy for use in compare. See the write_annotation_file()
function for more information.
Syntax
init_device_matrix(
connect_sequence = connect_database,
dual_hierarchy_extraction = true | false, //optional
dfm_files = {"string", ...}, //optional
device_properties = ALL | LVS //optional
);
Returns
device_matrix
Arguments
connect_sequence
Required. Specifies the connect database.
dual_hierarchy_extraction
Optional. Selects either dual-hierarchy extraction or standard device extraction. The
default is false.
❍ true. Specifies to run two device extractions internally within the IC Validator tool to
generate the environment-sensitive property annotation file:
1. Annotation file hierarchy extraction
All of the device extraction functions are considered during the
extract_devices() function run. Hierarchical preflattening is performed so that
all processing_layer_hash layers can be passed to the internal device property
configuration function.
Also, certain device terminal layers with hierarchically interacting polygons are
leveled to ensure accurate property extraction.
2. Ideal compare hierarchy extraction
dfm_files
Optional. Specifies the files to use for table-based functionality. The tool uses the lookup
tables in these files to import poly and diffusion rounding effects into the hierarchy
extraction flow, providing a more accurate estimate of the effective width and length of a
MOS device.
For more information, see the mos_get_dfm_double() utility function and Chapter 7,
“Table-Based Lookup Functionality in the IC Validator LVS User Guide.
device_properties
Optional. Defines which properties are extracted during device extraction. The default is
ALL.
❍ ALL. Extracts all of the properties defined in the device commands in the runset.
❍ LVS. Extracts only the properties that the compare() functions reference, or the
properties whose write_property_to settings are explicitly specified as
NETLIST_XTR_SPICE, NETLIST_PEX_SPICE, NETLIST, or
NETLIST_ANNOTATION_FILE_SPICE.
Note:
The dual_hierarchy_extraction argument is ignored if
device_properties=LVS.
For more information, See the -dhe command-line option in the Command-Line Options
section in the “IC Validator Basics” chapter of the IC Validator User Guide
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
extract_devices()
property_annotation_file()
write_annotation_file()
init_icvread_matrix()
The init_icvread_matrix() function creates an ICVread matrix where layer mappings
and other settings required by the icvread_generate_results() function are stored. The
icvread_layer_map() function populates the ICVread matrix with mapping information.
This database is used to generate the ICVread specification file and a library with polygon
data. The specification file and library are used to interface with the ICVread application. The
flow is:
• Include the icvread_public.rh header file in your runset.
• Use the init_icvread_matrix() function to initialize a matrix that collects all options
needed for writing the output for the ICVread application.
• For each layer that you want to make available to the ICVread application, invoke the
icvread_layer_map() function to map a static name to a polygon layer variable.
Syntax
init_icvread_matrix(
device_db = device_database
);
Returns
ICVread matrix
Arguments
device_db
Required. Generates the layout netlist from the specified device database. The
extract_devices() function generates this database.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
icvread()
icvread_generate_results()
icvread_layer_map()
icvread_spec_file()
init_pex_layer_matrix()
The init_pex_layer_matrix() function creates a PEX layer matrix database where
configuration values are stored.
In the runset you can have multiple PEX layer matrix databases. The databases are
generated by multiple calls to the init_pex_layer_matrix() function. You can populate
these PEX layer matrix databases using the following functions:
pex_cell_extents_file()
pex_conducting_layer_map()
pex_ignore_cap_layer_map()
pex_marker_layer_map()
pex_remove_layer_map()
pex_via_layer_map()
pex_viewonly_layer_map()
The parasitic extraction map functions populate the PEX layer matrix database with
mapping information that is used to generate the two StarRC parasitic extraction mapping
files, MAPPING_FILE and OA_LAYER_MAPPING_FILE, which are used in the IC Validator
to StarRC tool flow. You can use the populated PEX layer matrix databases to generate
these two files plus a connected layout database using the following functions:
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
You create output file handles for the parasitic extraction data generation functions using the
following file-handle functions:
milkyway_library()
pex_lpp_map_file()
pex_process_map_file()
pex_runset_report_file()
Syntax
init_pex_layer_matrix(
device_db = device_database
);
Returns
PEX layer matrix (pex_layer_matrix)
Arguments
device_db
Required. Specifies the device database. The extract_devices() function generates
this database.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
initialize_net_property()
The initialize_net_property() function initializes the net-based property that is used
as input to the in_property argument of the net_property_select() function.
Syntax
initialize_net_property(
name_list_merge_method = {{property_name = "string",
property_merge_method = MAX | MIN | SUM},
...}
);
Returns
net_property
Arguments
name_list_merge_method
Required. Lists the property settings that defines the property names and merge
methods.
❍ property_name. Specifies the property name.
❍ property_merge_method. Specifies the merge method type when new nets are
formed from an incremental connect. The default is MAX.
■ MAX. Selects the property with the maximum value as the new property value.
■ MIN. Selects the property with the minimum value as the new property value.
■ SUM. Selects the cumulative total of all properties as the new net property value.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
p1 = initialize_net_property({{"ratio"}, {"metal area"}, {"gate_area"}});
See Also
net_property_select()
initialize_property()
The initialize_property() function creates a property layer from a polygon layer.
Syntax
initialize_property(
layer1 = polygon_layer,
name_list = {"string", ...}
);
Returns
property layer
Arguments
layer1
Required. Specifies the polygon layer.
name_list
Required. Specifies the strings used to access properties on the returned property layer.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
p1 = initialize_property(gate, {"damage"});
See Also
net_polygon_select()
Syntax
inside(
layer1 = polygon_layer,
layer2 = polygon_layer,
include_touch = POINT | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_inside(
layer1 = polygon_layer,
layer2 = polygon_layer,
include_touch = POINT | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer from which polygons are selected.
layer2
Required. Specifies the polygon layer that defines the selection region.
include_touch
Optional. Specifies the inside touches that are included in the definition of fully enclosed
for layer2 polygons. The default is ALL.
❍ POINT. Considers point touch as enclosed.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In Figure 2-262, all data from layerA that is fully inside layerB is selected.
Result = layerA inside layerB;
layerA
layerB
In Figure 2-263, all data from layerA that is not fully inside layerB is selected.
Result = layerA not_inside layerB;
layerA
layerB
include_touch include_touch
= ALL = POINT Result
See Also
inside_touching_edge() and not_inside_touching_edge()
outside() and not_outside()
outside_touching() and not_outside_touching()
outside_touching_edge() and not_outside_touching_edge()
touching() and not_touching()
touching_edge() and not_touching_edge()
Syntax
inside_hole(
layer1 = polygon_layer,
layer2 = polygon_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_inside_hole(
layer1 = polygon_layer,
layer2 = polygon_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer from which polygons are selected.
layer2
Required. Specifies the polygon layer against which the layer1 layer is checked.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In Figure 2-264all data from layerB that is inside a hole of layerA is selected.
Result = layerB inside_hole layerA;
layerA
Output
layerB
Result
See Also
donut_holes()
inside_point_touching_edge() and
not_inside_point_touching_edge()
The inside_point_touching_edge() function selects entire layer1 edges that have any
inside point touching with layer2 edges. The complement of this function is the
not_inside_point_touching_edge() function.
Syntax
inside_point_touching_edge(
layer1 = data_layer,
layer2 = data_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_inside_point_touching_edge(
layer1 = data_layer,
layer2 = data_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Description
The behavior of the point edge touching functions [inside_point_touching_edge() and
not_inside_point_touching_edge(), outside_point_touching_edge() and
not_outside_point_touching_edge(), and point_touching_edge() and
not_point_touching_edge()] is as follows:
• The output of the inside_point_touching_edge() function when layer1 is a polygon
layer is the same as when layer1 is the result of the length_edge() function with the
distance argument set to >0, that is, length_edge(layer1, distance >0).
• If layer2 is a polygon layer, a point touch happens when an endpoint of layer1 touches
a layer2 polygon boundary. To determine whether a point touch is inside or outside:
❍ The type of point touch is the same as the type of line touch if there is also a line touch
with the layer2 polygon that includes the endpoint of a point touch.
❍ Otherwise, the type of point touch is defined by whether the layer1 edge is inside or
outside the layer1 polygon near the point touch.
• If layer2 is an edge layer, a point touch happens when an endpoint of a layer1 edge
point touches a layer2 edge. To determine whether a point touch is inside or outside:
❍ When a layer1 edge point touches the endpoint of a layer2 edge:
■ The touch is inside if the edges are in the same direction. That is, if the layer1
edge head point touches the layer2 edge tail or the layer1 edge tail point
touches the layer2 edge head.
■ The touch is outside if the edges are in different directions. That is, if the layer1
edge head point touches the layer2 edge head or the layer1 edge tail point
touches the layer2 edge tail.
❍ When a layer1 edge point touches the interior point of a layer2 edge:
■ The touch is inside if layer1 edge is on the right side of the layer2 edge.
■ The touch is outside if layer1 edge is on the left side of the layer2 edge.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Examples
In Figure 2-266 the red edges are all inside point touch because they are inside polygon
near point touch. Note that for the rightmost red edge, the outside line touch elsewhere is
irrelevant to the type of point touch.
Figure 2-266 inside_point_touching_edge() Function Example 2
See Also
inside() and not_inside()
outside() and not_outside()
outside_point_touching_edge() and not_outside_point_touching_edge()
outside_touching() and not_outside_touching()
outside_touching_edge() and not_outside_touching_edge()
point_touching_edge() and not_point_touching_edge()
touching() and not_touching()
touching_edge() and not_touching_edge()
Syntax
inside_touching_edge(
layer1 = data_layer,
layer2 = data_layer,
count = integerconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
coincidence = EDGE | ENDPOINT | ALL //optional
);
not_inside_touching_edge(
layer1 = data_layer,
layer2 = data_layer,
count = integerconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
coincidence = EDGE | ENDPOINT | ALL //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
count
Optional. Specifies the number of touches that must occur for an edge to be selected. If
layer2 is a polygon layer, then polygons are counted. If layer2 is an edge layer, then
individual edges are counted. See “Constraints” on page A-4 for more information. The
default is >0.
Figure 2-269 shows the effect of the count argument settings with the
inside_touching_edge() function.
Figure 2-270 shows the effect of the count argument settings with the
not_inside_touching_edge() function.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
coincidence
Optional. Specifies the types of coincidence that cause a selection. The default is EDGE.
❍ EDGE. Only edge coincidence causes an edge to be selected.
❍ ENDPOINT. Only those edges that have no edge coincidence, but have collinear,
endpoint, coincidence are selected.
❍ ALL. All types of coincidence cause an edge to be selected.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
inside() and not_inside()
outside() and not_outside()
outside_touching() and not_outside_touching()
outside_touching_edge() and not_outside_touching_edge()
touching() and not_touching()
touching_edge() and not_touching_edge()
instance_property_number()
The instance_property_number() function redefines the property number used for cell
instance names.
Syntax
instance_property_number(
property_number = integer
);
Returns
void
Arguments
property_number
Required. Redefines the property number. The default is 4.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
gds_options()
write_gds()
write_oasis()
Syntax
interacting(
layer1 = polygon_layer,
layer2 = data_layer,
count = integerconstraint, //optional
include_touch = NONE | EDGE | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
count_parity = ALL, ODD, EVEN, //optional
count_by = SHAPE | NET, //optional
connect_sequence = connect_database, //optional
name = "layer_label" //optional
);
not_interacting(
layer1 = polygon_layer,
layer2 = data_layer,
count = integerconstraint, //optional
include_touch = NONE | EDGE | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
count_parity = ALL, ODD, EVEN, //optional
count_by = SHAPE | NET, //optional
connect_sequence = connect_database, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer from which polygons are selected.
layer2
Required. Specifies the edge or polygon layer against which the layer1 layer is
checked.
count
Optional. Specifies the number of layer2 polygons or edges that must be interacted
with. Edges are counted individually; there is no recognition of edge chains. The default
is >0.
Figure 2-271 shows the effect of the count argument settings with the interacting()
function.
Figure 2-271 count Argument Example With the interacting() Function
Figure 2-272 shows the effect of the count argument settings with the
not_interacting() function.
include_touch
Optional. When layer2 is a polygon layer, layer1 polygons that share active area with
layer2 are always selected. The layer1 polygons that share no active area with layer2
can optionally be selected based on outside touches, as specified by this argument.
When layer2 is an edge layer, layer1 polygons that share active area with a layer2
edges are always selected. The layer1 polygons that share no active area with layer2
edges, can optionally be selected based on edges that interact their boundary, as
specified by this argument.
The default is EDGE.
❍ NONE. Specifies that neither either point touch nor line touch causes a polygon to be
selected.
❍ EDGE. Edge touch causes a polygon to be selected.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
count_parity
Optional. Specifies the parity of the number of layer2 polygons that must touch layer1
polygons. The default is ALL.
❍ EVEN. Specifies that the layer1 polygons must have an even number of interactions
with layer2 data.
❍ ODD. Specifies that the layer1 polygons must have an odd number of interactions
with layer2 data.
❍ ALL. Does not check the parity based on the number of interactions.
The count argument can be used with the count_parity argument. For example, when
count = [4, 9] and count_parity is EVEN, the layer1 polygons that interact with four,
six, or eight layer2 polygons are selected.
Figure 2-275 shows an example of two interacting layers.
Figure 2-275 count_parity Argument Example
L1
L2
L1
L2
result
count_by
Optional. Provides selection by net feature. The default is SHAPE.
❍ NET. Selects a layer1 polygon if it interacts with distinct nets on the layer2 layer the
number of times specified by the count argument.
❍ SHAPE. Selects a layer1 polygon if it interacts the layer2 layer the number of times
specified by the count argument.
Refer to Figure 2-277 for the following examples.
Figure 2-277 count_by Argument Example
L1
L2
❍ Net 3 is not counted because it is a point touch. Nets 1, 2, and 4 are each counted
two times. Therefore, only polygon A meets the count=4 restriction.
interacting(L1, L2, count==4)
connect_sequence
Optional. Specifies the connect database that has the layer2 connection. The database
is used when the count_by argument is NET.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In the following example, all data from layerA that interacts with black_edge is selected.
Result = layerA interacting black_edge;
Input
layerA
Output black_edge
Result
In the following example, all data from layerA that interacts with layerB is selected.
Result = layerA interacting layerB;
Input
layerA
Output layerB
Result
See Also
inside() and not_inside()
touching() and not_touching()
Syntax
interacting_edge(
layer1 = data_layer,
layer2 = data_layer,
include_touch = EDGE | ALL, //optional
count = integerconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_interacting_edge(
layer1 = data_layer,
layer2 = data_layer,
include_touch = EDGE | ALL, //optional
count = integerconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
include_touch
Optional. Specifies the touches that cause a layer1 edge to be selected. The default is
ALL.
When layer2 is a polygon layer, layer1 edges that have any portion inside layer2,
including inside coincident, are always selected. For interacting edges that do not have
any portion inside layer2:
❍ EDGE. Outside edge touch causes a layer1 edge to be selected.
❍ ALL. All outside touches (edge and point) cause a layer1 edge to be selected.
When layer2 is an edge layer, layer1 edges that cross a layer2 edge are always
selected. For interacting edges that do not cross a layer2 edge.
❍ EDGE. Edge touch causes a layer1 edge to be selected.
❍ ALL. All outside touches (edge and point) cause a layer1 edge to be selected.
count
Optional. Specifies the number of interactions that must occur for an edge to be selected.
If layer2 is a polygon layer, then polygons are counted. If layer2 is an edge layer, then
individual edges are counted. See “Constraints” on page A-4 for more information. The
default is >0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
This example shows layer1 as a polygon layer. The results are the same if magenta is an
edge layer.
green = magenta interacting_edge red_polygons;
See Also
inside_touching_edge() and not_inside_touching_edge()
outside_touching_edge() and not_outside_touching_edge()
touching_edge() and not_touching_edge()
Syntax
interacting_error(
layer1 = error_layer,
layer2 = polygon_layer,
count = integerconstraint, //optional
include_touch = NONE | EDGE | ALL, //optional
error_shape = EDGES | REGION, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_interacting_error(
layer1 = error_layer,
layer2 = polygon_layer,
count = integerconstraint, //optional
include_touch = NONE | EDGE | ALL, //optional
error_shape = EDGES | REGION, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
error layer or error result
Arguments
layer1
Required. Specifies the error layer.
layer2
Required. Specifies the polygon layer.
count
Optional. Specifies the number of layer2 polygons that must be interacted with. See
“Constraints” on page A-4 for more information. The default is >0.
include_touch
Optional. Specifies the outside touches that are included in the interaction check
between the primary layer and the secondary layers. The default is EDGE.
error_shape
Optional. Specifies how errors are treated in the interaction check between the primary
layer and the secondary layer. The default is EDGES.
❍ EDGES. Recognizes interaction only with the violating edges. The errors are treated as
pairs of edges, and if either edge meets the interaction specification, the error is
selected. A center-to-center error is treated as a pair of endpoints. If either endpoint
meets the interaction specification, the error is selected.
❍ REGION. Recognizes interaction with any part of the violating region. The errors are
treated as polygons, as created when the output_type argument is REGION in the
spacing check functions that produce polygons. A center-to-center error is treated as
an edge. If the edge meets the interaction specification, the error is selected.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
This example shows red errors from layer1 that interact with green polygons from layer2.
Depending on the settings of the error_shape and include_touch arguments, some of the
errors are output (YES) and other errors are not output (NO).
See Also
inside_touching_edge() and not_inside_touching_edge()
outside_touching_edge() and not_outside_touching_edge()
touching_edge() and not_touching_edge()
internal_corner1()
The internal_corner1() function creates polygons that are formed by pairs of violation
corners. It measures inside-to-inside spacing on layer1 based on distance specified.
Other arguments define various geometric conditions for measuring the point-to-point
distance between the corners. The measurements are limited to corners that are on the
same polygon, and are never made through obstructions.
The output consists of rectangles that are the extents of the point-to-point violations. In the
case where the violation is horizontal or vertical, the output rectangle is generated by
expanding the violation three times the input library resolution on both sides.
Corner-to-corner distance is checked only when each corner falls within the check zone of
the other corner.
The check zone for convex corners (interior angle of less than 180 degrees) is determined
by the following steps:
1. For each adjacent edge of the corner, draw a perpendicular line toward the check side.
See “Spacing Checks” on page A-18 for more information about the check side.
2. The check zone is bounded by the two lines.
The check zone for concave corners (exterior angle of less than 180 degrees) is determined
by the following steps:
1. Extend each adjacent edge of the corner.
2. The check zone is bounded by the two lines.
Corner-to-edge distance is checked only when the corner falls in the perpendicular
projection region of the edge, and the perpendicular projection point from the edge to the
corner falls in the projection zone of the corner.
For edge input, the internal_corner1() function optionally includes terminal edge
endpoints as corners; there is no adjacent edge. In this case, the angle argument is not
used. The check zone of an edge endpoint with no adjacent edge is determined by the
following steps:
1. Draw a line extending the edge beyond the endpoint.
2. From the endpoint, draw a perpendicular line toward the check side of the edge.
3. The check zone is bounded by the two lines. The boundary defined by the line extending
the edge is always inclusive.
Syntax
internal_corner1(
layer1 = data_layer,
distance = doubleconstraint,
type = {CONCAVE_TO_CONCAVE,
CONCAVE_TO_EDGE, CONVEX_TO_CONCAVE,
PARALLEL_POINT_PROJECTION}, //optional
angle = ALL | RIGHT, //optional
region = RADIAL, SQUARE, //optional
concave_to_concave_boundary = INCLUSIVE_PARALLEL | EXCLUSIVE,
//optional
convex_to_concave_boundary = INCLUSIVE, EXCLUSIVE, //optional
edge_endpoints = CORNER | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
type
Optional. Specifies the corner types included in the spacing check. By default, the
IC Validator tool selects all types.
❍ CONCAVE_TO_CONCAVE. Specifies that the check-zone boundary is controlled by the
concave_to_concave_boundary argument.
length equal to 0. The boundary for convex corners is inclusive, whereas the
boundary for concave corners is exclusive.
Note:
The region argument is not used for this corner type.
The edge_endpoints and angle arguments are ALL.
Figure 2-278 shows the effect of the type argument settings.
Figure 2-278 type Argument Examples
CONCAVE_TO_CONCAVE CONVEX_TO_CONCAVE
CONCAVE_TO_EDGE PARALLEL_POINT_PROJECTION
layer1 Result
angle
Optional. Specifies the angles of the corners that are included in the spacing check. The
default is ALL.
❍ ALL. Specifies that all angles are checked.
region
Optional. Specifies the shape of the corner-check region. Intrusion into the corner-check
region results in a spacing violation. The default is RADIAL.
❍ RADIAL. Connects check-zone boundaries with a radial arc at the specified distance
from the corner. The boundary of the arc is inclusive or exclusive depending on the
distance argument.
❍ SQUARE. Defines the check region with two squares. For each corner check-zone
boundary, a square equal in size to the specified distance is placed point-touching
the corner. One edge is coincident to the boundary. For right corners, the two boxes
are coincident. The far boundaries of the boxes are inclusive or exclusive depending
on the distance argument.
Figure 2-279 shows the effect of the region argument settings.
Figure 2-279 region Argument Examples
layer1
Result
RADIAL SQUARE
concave_to_concave_boundary
Optional. For concave-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. INCLUSIVE_PARALLEL applies only
when two edges from the corners are parallel and not collinear. The default is
EXCLUSIVE.
Figure 2-280 shows the effect of the concave_to_concave_boundary argument
settings.
Figure 2-280 concave_to_concave_boundary Argument Examples
layer1
Result
EXCLUSIVE INCLUSIVE_PARALLEL
convex_to_concave_boundary
Optional. For convex-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. The default is EXCLUSIVE.
Note:
This function never measures through obstructions, therefore convex
corner-check-zone boundaries are always exclusive.
edge_endpoints
Optional. Specifies the edge endpoints measured. The default is CORNER.
Note:
This argument is used only when the input layer is an edge layer.
❍ CORNER. Checks only the endpoints that form a corner.
❍ ALL. Checks all endpoints, including those that have no adjacent edge.
Figure 2-281 shows the effect of the edge_endpoints argument settings.
Figure 2-281 edge_endpoints Argument Examples
layer1
Result
CORNER ALL
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
external_corner1()
internal_corner1_edge()
internal_corner1_edge()
The internal_corner1_edge() function creates edges that consist of pairs of violation
corners. It measures inside-to-inside spacing on layer1 based on distance specified.
Other arguments define various geometric conditions for measuring the point-to-point
distance between the corners.
Corner-to-corner distance is checked only when each corner falls within the check zone of
the other corner.
The check zone for convex corners (interior angle of less than 180 degrees) is determined
by the following steps:
1. For each adjacent edge of the corner, draw a perpendicular line toward the check side.
See “Spacing Checks” on page A-18 for more information about the check side.
2. The check zone is bounded by the two lines.
The check zone for concave corners (exterior angle of less than 180 degrees) is determined
by the following steps:
1. Extend each adjacent edge of the corner.
2. The check zone is bounded by the two lines.
Corner-to-edge distance is checked only when the corner falls in the perpendicular
projection region of the edge, and the perpendicular projection point from the edge to the
corner falls in the projection zone of the corner.
For edge input, the internal_corner1_edge() function optionally includes terminal edge
endpoints as corners; there is no adjacent edge. In this case, the angle argument is not
used. The check zone of an edge endpoint with no adjacent edge is determined by the
following steps:
1. Draw a line extending the edge beyond the endpoint.
2. From the endpoint, draw a perpendicular line toward the check side of the edge.
3. The check zone is bounded by the two lines. The boundary defined by the line extending
the edge is always inclusive.
Syntax
internal_corner1_edge(
layer1 = data_layer,
distance = doubleconstraint,
type = {CONCAVE_TO_CONCAVE,
CONCAVE_TO_EDGE, CONVEX_TO_CONCAVE,
PARALLEL_POINT_PROJECTION}, //optional
angle = ALL | RIGHT, //optional
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
type
Optional. Specifies the corner types included in the spacing check. By default, the
IC Validator tool selects all types.
❍ CONCAVE_TO_CONCAVE. Specifies that the check-zone boundary is controlled by the
concave_to_concave_boundary argument.
CONCAVE_TO_CONCAVE CONVEX_TO_CONCAVE
CONCAVE_TO_EDGE PARALLEL_POINT_PROJECTION
layer1 Result
angle
Optional. Specifies the angles of the corners that are included in the spacing check. The
default is ALL.
❍ ALL. Specifies that all angles are checked.
region
Optional. Specifies the shape of the corner-check region. Intrusion into the corner-check
region results in a spacing violation. The default is RADIAL.
❍ RADIAL. Connects check-zone boundaries with a radial arc at the specified distance
from the corner. The boundary of the arc is inclusive or exclusive depending on the
distance argument.
❍ SQUARE. Defines the check region with two squares. For each corner check-zone
boundary, a square equal in size to the specified distance is placed point-touching
the corner. One edge is coincident to the boundary. For right corners, the two boxes
are coincident. The far boundaries of the boxes are inclusive or exclusive depending
on the distance argument.
Figure 2-283 shows the effect of the region argument settings.
layer1
Result
RADIAL SQUARE
concave_to_concave_boundary
Optional. For concave-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. INCLUSIVE applies only when two
edges from the corners are parallel and not collinear. The default is EXCLUSIVE.
Figure 2-284 shows the effect of the concave_to_concave_boundary argument
settings. The red outlines highlight the selected boundaries.
Figure 2-284 concave_to_concave_boundary Argument Examples
layer1
Result
EXCLUSIVE INCLUSIVE_PARALLEL
convex_to_concave_boundary
Optional. For convex-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. The default is EXCLUSIVE.
Note:
This function never measures through obstructions, therefore convex
corner-check-zone boundaries are always exclusive.
edge_endpoints
Optional. Specifies the edge endpoints measured. The default is CORNER.
Note:
This argument is used only when the input layer is an edge layer.
❍ ALL. Checks all endpoints, including those that have no adjacent edge.
Figure 2-285 shows the effect of the edge_endpoints argument settings.
Figure 2-285 edge_endpoints Argument Examples
layer1
Result
CORNER ALL
output_type
Optional. Specifies the edge types that are output. The default is FAIL.
❍ FAIL. Specifies that the portions of the edges that fall within the check region are
output.
❍ POINT_TO_POINT. Specifies that violations are output as an edge connecting the two
corners that are in violation. The orientation of POINT_TO_POINT edges from a
layer1 check is arbitrary. POINT_TO_POINT creates an orphan edge layer.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
external_corner1_edge()
internal_corner1()
internal_corner2()
The internal_corner2() function creates polygons that are formed by pairs of violation
corners. It measures inside-to-inside spacing between two layers based on the distance
specified. The arguments define various geometric conditions for measuring the
point-to-point distance between the corners.
The output consists of rectangles that are the extents of the point-to-point violations. In the
case where the violation is horizontal or vertical, the output rectangle is generated by
expanding the violation three times the input library resolution on both sides.
The corner-to-corner distance is checked only when each corner falls within the check zone
of the other corner.
The check zone for convex corners (interior angle of less than 180 degrees) is determined
by the following steps:
1. For each adjacent edge of the corner, draw a perpendicular line toward the check side.
See “Spacing Checks” on page A-18 for more information about the check side.
2. The check zone is bounded by the two lines.
The check zone for concave corners (exterior angle of less than 180 degrees) is determined
by the following steps:
1. Extend each adjacent edge of the corner.
2. The check zone is bounded by the two lines.
The corner-to-edge distance is checked only when the corner falls in the perpendicular
projection region of the edge, and the perpendicular projection point from the edge to the
corner falls in the projection zone of the corner. A portion of the edge must fall in the corner
projection zone, and neither of the edges forming the corner can be parallel to the edge.
For edge input, the internal_corner2() function optionally includes terminal edge
endpoints as corners; there is no adjacent edge. In this case, the angle argument is not
used. The check zone of an edge endpoint with no adjacent edge is determined by the
following steps:
1. Draw a line extending the edge beyond the endpoint.
2. From the endpoint, draw a perpendicular line toward the check side of the edge.
3. The check zone is bounded by the two lines. The boundary defined by the line extending
the edge is always inclusive.
Syntax
internal_corner2(
layer1 = data_layer,
layer2 = data_layer,
distance = doubleconstraint,
type = {CONCAVE_TO_CONCAVE,
CONCAVE_TO_EDGE, CONVEX_TO_CONCAVE,
CONVEX_TO_EDGE,
PARALLEL_POINT_PROJECTION}, //optional
angle = ALL | RIGHT, //optional
region = RADIAL | SQUARE, //optional
convex_to_concave_boundary = INCLUSIVE | EXCLUSIVE, //optional
concave_to_concave_boundary = INCLUSIVE_PARALLEL | EXCLUSIVE,
//optional
edge_endpoints = CORNER | ALL, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL,
//optional
connect_sequence = connect_database, //optional
look_thru = NONE | COINCIDENT | OUTSIDE |
ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
type
Optional. Specifies the corner types included in the spacing check. By default, the
IC Validator tool selects all types.
❍ CONCAVE_TO_CONCAVE. Specifies that the check-zone boundary is controlled by the
concave_to_concave_boundary argument.
CONCAVE_TO_CONCAVE CONVEX_TO_CONCAVE
CONCAVE_TO_EDGE PARALLEL_POINT_PROJECTION
angle
Optional. Specifies the angles of the corners that are included in the spacing check. The
default is ALL.
❍ ALL. Specifies that all angles are checked.
region
Optional. Specifies the shape of the corner-check region. Intrusion into the corner-check
region results in a spacing violation. The default is RADIAL.
❍ RADIAL. Connects check-zone boundaries with a radial arc at the specified distance
from the corner. The boundary of the arc is inclusive or exclusive depending on the
distance argument.
❍ SQUARE. Defines the check region with two squares. For each corner check-zone
boundary, a square equal in size to the specified distance is placed point-touching
the corner. One edge is coincident to the boundary. For right corners, the two boxes
are coincident. The far boundaries of the boxes are inclusive or exclusive depending
on the distance argument.
Figure 2-287 shows the effect of the region argument settings.
Figure 2-287 region Argument Examples
layer1
layer2
Result
RADIAL SQUARE
convex_to_concave_boundary
Optional. For convex-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. The default is EXCLUSIVE.
Note:
This function never measures through obstructions, therefore convex corner
check-zone boundaries are always exclusive.
concave_to_concave_boundary
Optional. For concave-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. INCLUSIVE applies only when two
edges from the corners are parallel and not collinear. The default is EXCLUSIVE.
Figure 2-288 shows the effect of the concave_to_concave_boundary argument
settings.
layer1
layer2
edge_endpoints
Optional. Specifies the edge endpoints measured. The default is CORNER.
Note:
This argument is used only when an input layer is an edge layer.
■ If layer1 is an edge layer, then the argument applies to layer1.
■ If layer2 is an edge layer, then the argument applies to layer2.
■ If layer1 and layer2 are edge layers, then the argument applies to both layers.
❍ CORNER. Checks only the endpoints that form a corner.
❍ ALL. Checks all endpoints, including those that have no adjacent edge.
Figure 2-289 shows the effect of the edge_endpoints argument settings.
Figure 2-289 edge_endpoints Argument Examples
layer1
layer2
Result
CORNER ALL
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Measures corners from polygons that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
external_corner2()
internal_corner2_edge()
internal_corner2_edge()
The internal_corner2_edge() function creates edges that consist of pairs of violation
corners. It measures inside-to-inside spacing between two layers based on the distance
specified. Other arguments define various geometric conditions for measuring the
point-to-point distance between the corners.
Corner-to-corner distance is checked only when each corner falls within the check zone of
the other corner.
The check zone for convex corners (interior angle of less than 180 degrees) is determined
by the following steps:
1. For each adjacent edge of the corner, draw a perpendicular line toward the check side.
See “Spacing Checks” on page A-18 for more information about the check side.
2. The check zone is bounded by the two lines.
The check zone for concave corners (exterior angle of less than 180 degrees) is determined
by the following steps:
1. Extend each adjacent edge of the corner.
2. The check zone is bounded by the two lines.
Corner-to-edge distance is checked only when the corner falls in the perpendicular
projection region of the edge, and the perpendicular projection point from the edge to the
corner falls in the projection zone of the corner. A portion of the edge must fall in the corner
projection zone, and neither of the edges forming the corner can be parallel to the edge.
For edge input, the internal_corner2_edge() optionally includes terminal edge endpoints
as corners; there is no adjacent edge. In this case, the angle argument is not used. The
check zone of an edge endpoint with no adjacent edge is determined by the following steps:
1. Draw a line extending the edge beyond the endpoint.
2. From the endpoint, draw a perpendicular line toward the check side of the edge.
3. The check zone is bounded by the two lines. The boundary defined by the line extending
the edge is always inclusive.
Syntax
internal_corner2_edge(
layer1 = data_layer,
layer2 = data_layer,
distance = doubleconstraint,
type = {CONCAVE_TO_CONCAVE,
CONVEX_TO_EDGE,
PARALLEL_POINT_PROJECTION}, //optional
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
type
Optional. Specifies the corner types included in the spacing check. By default, the
IC Validator tool selects all types.
❍ CONCAVE_TO_CONCAVE. Specifies that the check-zone boundary is controlled by the
concave_to_concave_boundary argument.
CONCAVE_TO_CONCAVE CONVEX_TO_CONCAVE
CONCAVE_TO_EDGE PARALLEL_POINT_PROJECTION
angle
Optional. Specifies the angles of the corners that are included in the spacing check. The
default is ALL.
❍ ALL. Specifies that all angles are checked.
region
Optional. Specifies the shape of the corner-check region. Intrusion into the corner-check
region results in a spacing violation. The default is RADIAL.
❍ RADIAL. Connects check-zone boundaries with a radial arc at the specified distance
from the corner. The boundary of the arc is inclusive or exclusive depending on the
distance argument.
❍ SQUARE. Defines the check region with two squares. For each corner check-zone
boundary, a square equal in size to the specified distance is placed point-touching
the corner. One edge is coincident to the boundary. For right corners, the two boxes
are coincident. The far boundaries of the boxes are inclusive or exclusive depending
on the distance argument.
Figure 2-296 shows the effect of the region argument settings.
Figure 2-292 region Argument Examples
RADIAL SQUARE
convex_to_concave_boundary
Optional. For convex-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. INCLUSIVE applies only when two
edges from the corners are parallel and not collinear. The default is EXCLUSIVE.
Figure 2-293 shows the effect of the concave_to_concave_boundary argument
settings.
Figure 2-293 concave_to_concave_boundary Argument Examples
EXCLUSIVE INCLUSIVE_PARALLEL
concave_to_concave_boundary
Optional. For concave-to-concave measurements, specifies whether the corner
check-zone boundaries are exclusive or inclusive. INCLUSIVE applies only when two
edges from the corners are parallel and not collinear. The default is EXCLUSIVE.
edge_endpoints
Optional. Specifies the edge endpoints measured. The default is CORNER.
Note:
This argument is used only when an input layer is an edge layer.
■ If layer1 is an edge layer, then the argument applies to layer1.
■ If layer2 is an edge layer, then the argument applies to layer2.
■ If layer1 and layer2 are edge layers, then the argument applies to both layers.
❍ CORNER. Checks only the endpoints that form a corner.
❍ ALL. Checks all endpoints, including those that have no adjacent edge.
Figure 2-289 shows the effect of the edge_endpoints argument settings.
Figure 2-294 edge_endpoints Argument Examples
CORNER ALL
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Measures corners from polygons that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges, including edge endpoints.
output_layer
Optional. Specifies the layer whose edges are output for the violations. The default is
LAYER1.
output_type
Optional. Specifies the edge types that are output. The default is FAIL.
❍ FAIL. Specifies that the portions of the edges that fall within the check region are
output.
❍ POINT_TO_POINT. Specifies that violations are output as an edge connecting the two
corners that are in violation. Edge endpoints are ordered from layer1 to layer2.
POINT_TO_POINT creates an orphan edge layer.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
external_corner2_edge()
internal_corner2()
internal1()
The internal1() function creates polygons that are formed by pairs of violation edges. It
measures inside-to-inside spacing on one layer based on the specified distance. The
arguments define various geometric conditions for measuring the distance between the
edges. This check is limited to edges that are on the same polygon. For edge layers,
polygon membership is determined by layer ancestry.
Syntax
internal1(
layer1 = data_layer,
distance = doubleconstraint,
extension = NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE,
extension_distance = double, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR}, //optional
intersecting = {ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH}, //optional
point_touch_shape = EXTENTS | SQUARE, //optional
shape_size = double, //optional
output_type = REGION | CENTERLINE | EXTENTS, //optional
width = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
name = "layer_label", //optional
membership = ALL | SAME_POLYGON | DIFFERENT_POLYGON
//optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
extension
Required. Specifies the extension of the check region, beyond the endpoints of the edge
being checked.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. See the description of the output_type argument for more information.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function for more information.
Figure 2-296 shows the effect of the extension argument settings.
Figure 2-296 extension Argument Examples
layer1
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
Figure 2-297 shows the effect of the extension_distance argument settings.
Figure 2-297 extension_distance Argument Examples
layer1
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
layer1
ACUTE PARALLEL PERPENDICULAR ACUTE and
PARALLEL
(Default) Result
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
layer1
Result
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
❍ The orientation argument cannot contain PERPENDICULAR.
❍ The intersecting argument cannot contain PERPENDICULAR.
❍ The corner_configuration argument cannot be CORNER_TO_CORNER.
❍ The extension argument must be NONE.
❍ The projection argument must contain IN.
Note:
See the cumulative_projection_length argument for more information.
layer1
Result
NONE <0.2 >0.2
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
layer1 Result
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
layer1 Result
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
Figure 2-305 shows the effect of the extension_look_past argument settings.
Figure 2-305 extension_look_past Argument Examples
layer1
extension_obstructions
Optional. Specifies how obstructions are processed in the check region extension. Some
endpoint violations might be undesirable even though they are unobstructed. This
argument specifies how aggressively the check finds and refines endpoint violations in
accordance with obstructed regions. The default is POINT_TO_POINT.
layer1
ALL POINT_TO_POINT
(Default) Result
relational
Optional. Specifies if a check outputs additional violations based on the relationship of
the polygons. The default is no additional reporting.
❍ POINT_TOUCH. Creates a violation where there is an outside-to-outside point touch.
The format of the violation is determined by the point_touch_shape and
shape_size arguments. The POINT_TOUCH argument is not available for edge input.
Figure 2-307 shows the effect of the relational argument settings.
Figure 2-307 relational Argument Example
layer1
Result
POINT_TOUCH
point_touch_shape
Optional. Specifies the shapes that are generated for point touches. The default is
EXTENTS.
❍ EXTENTS. Specifies that the length of the violation is equal to the maximum of the
distance constraint, with a minimum value of two times the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution. The violation region is approximated with edges that are either
perpendicular, parallel, or at a 45-degree angle, to the edges that form the point
touch, to avoid creating odd-angle data.
❍ SQUARE. Specifies that a square is centered on the point touch. The sides of the
square are horizontal and vertical. The size of the square is determined by the
shape_size argument.
Figure 2-308 shows the effect of the point_touch_shape argument settings.
Figure 2-308 point_touch_shape Argument Examples
layer1
shape_size
Optional. Specifies the length of the sides of the squares generated when
point_touch_shape = SQUARE. The default is twice the maximum of the spacing
distance. This value must be positive. It is rounded to the nearest even multiple of the
internal resolution, with a minimum value of twice the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution.
Figure 2-309 shows the effect of the shape_size argument settings.
Figure 2-309 shape_size Argument Examples
layer1 Result
output_type
Optional. Specifies the type of output generated. The default is REGION.
❍ REGION. Reports violations as polygons, which are generated by connecting the
violation edges.
❍ CENTERLINE. Reports violations as an expanded line at the center of the projection
region. The midpoints of the sides of the violation region form a line that is expanded
in both directions by width/2. When the output_type argument is CENTERLINE, only
parallel spacing is supported.
❍ EXTENTS. Reports violations as boxes, oriented along the violation edges, that
contain the extents of the violation. This setting is used to avoid the creation of
odd-angle data normally seen when extension is RADIAL or SQUARE.
The following violations require special consideration when generating output shapes:
❍ When set to REGION, point-to-point violations are reported as rectangles by
expanding the line connecting the two points by the width value on both sides.
❍ When set to CENTERLINE, point-to-point violations are reported as squares, centered
on the midpoint of the line connecting the two points, with a dimension equal to the
width value. Violations are oriented along the line.
❍ When set to EXTENTS, point-to-point violations are reported the same as when set to
REGION.
Figure 2-310 shows the effect of the output_type argument settings.
Figure 2-310 output_type Argument Examples
layer1
Result
width
Optional. Specifies the value used to expand a single edge violation into a polygon,
including perpendicular spacing violations that are a single edge. The minimum value for
the argument is the internal resolution. The internal_resolution argument of the
resolution_options() function sets the internal resolution. The default is .001.
Figure 2-311 shows the effect of the width argument settings.
Figure 2-311 width Argument Examples
layer1
Result
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
cumulative_projection_length
Optional. Specifies how the projection length is measured when there are multiple
violations. See the projection_length argument for more information. The default is
NONE.
See the cumulative_projection_length argument of the enclose() function for
more information about the SAME_EDGE and JOGGING_EDGE options.
❍ NONE. Measures each violation separately.
layer1
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
❍ INDIVIDUAL. Measures edges if either edge matches the projection criteria as
specified in the projection argument.
❍ MUTUAL. Measures edges only if both edges match the following projection criteria:
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
region or that fall exactly on the boundary of the projection region are measured.
The projection argument is ignored.
■ Otherwise, both edges must match the projection criteria as specified in the
projection argument.
❍ MUTUAL_NON_ORTHOGONAL.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The orthogonal argument is not ignored.
See the intersection_angle argument of the internal2() function for an example.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
membership
Optional. Specifies how to check between edges that are on the same polygon or
different polygons. For edge layers, polygon membership is determined by layer
ancestry. The default is SAME_POLYGON.
❍ ALL. Checks all edges regardless of polygon membership.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Distance
Error1 @= {@ "This is an example of an internal1() function
min spacing 0.5";
internal1(met1, distance <= 0.5, extension = RADIAL );
};
Extension
Error1 @= { @ "min spacing 0.5 opposite edges only";
internal1(met1, distance < 0.5, extension = NONE);
};
Orientation
Error1 @= { @ "min spacing 0.5 for met1" + "measure only parallel edges";
internal1(met1, distance < 0.5, extension = RADIAL,
orientation = {PARALLEL});
};
Orthogonal
Error1 @= { @ "min spacing 0.5 for met1" +
"measure all parallel angled edges";
internal1(met1, distance < 0.5, extension = RADIAL,
orthogonal = BOTH, orientation = {PARALLEL});
};
Output type
c1 = internal1(met1, distance < 0.5, extension = RADIAL,
output_type = CENTERLINE);
See Also
internal1_edge() and not_internal1_edge()
wide()
Syntax
internal1_edge(
layer1 = data_layer,
distance = doubleconstraint,
extension = NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE, //optional
extension_distance = double, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR}, //optional
intersecting = {ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH}, //optional
spacing_edge = ALL | PROJECTING, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
output_type = FAIL | CENTERLINE, //optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
name = "layer_label", //optional
membership = ALL | SAME_POLYGON | DIFFERENT_POLYGON,
//optional
output_side = ALL | HIGH | LOW //optional
);
not_internal1_edge(
layer1 = data_layer,
distance = doubleconstraint,
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
extension
Optional. Specifies the extension of the check region, beyond the endpoints of the edge
being checked. The default is RADIAL.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. The edges reported have a length equal to the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function for more information.
Figure 2-313 shows the effect of the extension argument settings.
layer1
Result
Areas shown
NONE SQUARE RADIAL for illustration
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
Figure 2-314 shows the effect of the extension_distance argument settings.
Figure 2-314 extension_distance Argument Examples
layer1
Result
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
layer1
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
Figure 2-317 shows the effect of the projection argument settings.
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
❍ The orientation argument cannot contain PERPENDICULAR.
❍ The intersecting argument cannot contain PERPENDICULAR.
❍ The corner_configuration argument cannot be CORNER_TO_CORNER.
❍ The extension argument must be NONE.
❍ The projection argument must contain IN.
Note:
See the cumulative_projection_length argument for more information.
layer1
Result
(Default) <0.2 >0.2
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
Figure 2-322 shows the effect of the extension_look_past argument settings.
Figure 2-322 extension_look_past Argument Examples
layer1
Result
extension_obstructions
Optional. Specifies how obstructions are processed in the check region extension. Some
endpoint violations might be undesirable even though they are unobstructed. This
argument specifies how aggressively the check finds and refines endpoint violations in
accordance with obstructed regions. The default is POINT_TO_POINT.
layer1
Result
relational
Optional. Specifies if a check outputs violations based on the relationship of the
polygons. Connectivity is considered when generating these violations. The default is no
additional reporting.
❍ POINT_TOUCH. Creates a violation where there is an inside-to-inside point touch. The
length of the violation is equal to the maximum of the distance constraint, with a
minimum value of two times the internal resolution. The internal_resolution
argument of the resolution_options() function sets the internal resolution. The
POINT_TOUCH argument is not available for edge input.
Figure 2-324 shows the effect of the relational argument settings.
Figure 2-324 relational Argument Example
layer1
Result
POINT_TO_POINT
spacing_edge
Optional. Specifies the violation edges that are selected from spacing violations. Each
spacing violation consists of one edge that creates a projection region, and another edge
that falls inside that region. The default is ALL.
❍ PROJECTING. Specifies that only the violation edge that created the projection region
is output. For nonparallel violations, the violation edge is the edge that is
perpendicular to the violation.
Note:
The projection region in parallel violations is commutative, therefore PROJECTING
has no effect on parallel violations.
Endpoint violations have no projecting edge, so they are not reported with this
setting.
Figure 2-325 shows the effect of the spacing_edge argument settings.
Figure 2-325 spacing_edge Argument Examples
layer1
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
cumulative_projection_length
Optional. Specifies how the projection length is measured when there are multiple
violations. See the projection_length argument for more information. The default is
NONE.
See the cumulative_projection_length argument of the enclose() function for
more information about the SAME_EDGE and JOGGING_EDGE options.
layer1
output_type
Optional. Specifies the type of output generated. The default is FAIL.
Note:
The output_type argument is not available for the not_internal1_edge()
function.
❍ FAIL. Specifies that the portions of the edges that fall within the check region are
output.
❍ CENTERLINE. Outputs spacing violations as lines at the center of the projection
region. A line is two points connected with no specific order. The midpoints of the
sides of the violation region are used to create the lines. When the output_type
argument is CENTERLINE, only parallel spacing is supported.
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
❍ INDIVIDUAL. Measures edges if either edge matches the projection criteria as
specified in the projection argument.
❍ MUTUAL. Measures edges only if both edges match the following projection criteria:
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
❍ MUTUAL_NON_ORTHOGONAL.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The orthogonal argument is not ignored.
See the intersection_angle argument of internal2_edge() and
not_internal2_edge() functions for an example.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
membership
Optional. Specifies how to check between edges that are on the same polygon or
different polygons. For edge layers, polygon membership is determined by layer
ancestry. The default is SAME_POLYGON.
❍ ALL. Checks all edges regardless of polygon membership.
output_side
Optional. Specifies to output only the check edges on the specified side of any violation
projected from an orthogonal edge. The default is ALL.
Note:
To use the HIGH or LOW options,
■ The direction argument needs to be HORIZONTAL or VERTICAL.
■ The extension argument needs to be NONE.
❍ ALL. Outputs all check edges
■ For any violation projected from a horizontal edge, only the edge on the top side
is output.
■ For any violation projected from a vertical edge, only the edge on the right side is
output.
❍ LOW. Outputs all check edges.
■ For any violation projected from a horizontal edge, only the edge on the bottom
side is output.
■ For any violation projected from a vertical edge, only the edge on the left side is
output.
For examples, see the output_side argument of the enclose_edge() and
not_enclose_edge() functions.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Distance
Error1 @= {@ "This is an example of the internal1_edge() function
min spacing 0.5";
internal1_edge(met1, distance <= 0.5 );
};
Extension
Error1 @= { @ "min spacing 0.5 opposite edges only";
internal1_edge(met1, distance < 0.5, extension = NONE);
};
Orientation
Error1 @= { @ "min spacing 0.5 for met1" + "measure only parallel edges";
internal1_edge(met1, distance < 0.5, orientation = {PARALLEL});
};
Orthogonal
Error1 @= { @ "min spacing 0.5 for met1" +
"measure all parallel angled edges";
internal1_edge(met1, distance < 0.5, orthogonal = BOTH,
orientation = {PARALLEL});
};
See Also
internal1()
wide_edge()
internal1_error()
The internal1_error() function measures inside-to-inside spacing between the edges of
one layer based on the specified distance. The arguments define various geometric
conditions for measuring the distance between the layer edges. The output is unmerged
errors.
Derived error layers are unformatted. These layers can be used by the drc_features()
function. The layers can be formatted and merged into normal layers using the
error_merge() and error_merge_edge() functions.
Syntax
internal1_error(
layer1 = data_layer,
distance = doubleconstraint,
extension = NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE,
extension_distance = double, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR}, //optional
intersecting = {ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE |
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
name = "layer_label", //optional
membership = ALL | SAME_POLYGON | DIFFERENT_POLYGON,
//optional
relational = {POINT_TOUCH} //optional
);
Returns
error layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
extension
Required. Specifies the extension of the check region, beyond the endpoints of the edge
being checked.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. See the description of the output_type argument for more information.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function for more information.
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
See the examples for the extension_distance argument of the internal1() function
for more information.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
See the examples for the projection argument of the internal1() function for more
information.
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
❍ The orientation argument cannot contain PERPENDICULAR.
❍ The intersecting argument cannot contain PERPENDICULAR.
❍ The corner_configuration argument cannot be CORNER_TO_CORNER.
❍ The extension argument must be NONE.
❍ The projection argument must contain IN.
See the examples for the projection_length argument of the internal1() function
for more information.
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
See the examples for the orthogonal argument of the internal1() function for more
information.
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
See the examples for the extension_look_past argument of the internal1()
function for more information.
extension_obstructions
Optional. Specifies how obstructions are processed in the check region extension. Some
endpoint violations might be undesirable even though they are unobstructed. This
argument specifies how aggressively the check finds and refines endpoint violations in
accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
See the examples for the extension_obstructions argument of the internal1()
function for more information.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
❍ INDIVIDUAL. Measures edges if either edge matches the projection criteria as
specified in the projection argument.
❍ MUTUAL. Measures edges only if both edges match the following projection criteria:
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
❍ MUTUAL_NON_ORTHOGONAL.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The orthogonal argument is not ignored.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
membership
Optional. Specifies how to check between edges that are on the same polygon or
different polygons. For edge layers, polygon membership is determined by layer
ancestry. The default is SAME_POLYGON.
❍ ALL. Checks all edges regardless of polygon membership.
relational
Optional. Specifies if a check outputs violations based on the relationship of the
polygons. Connectivity is considered when generating these violations. The default is no
additional reporting.
❍ POINT_TOUCH. Creates a violation where there is an inside-to-inside point touch. The
length of the violation is equal to the maximum of the distance constraint, with a
minimum value of two times the internal resolution. The internal_resolution
argument of the resolution_options() function sets the internal resolution. The
POINT_TOUCH argument is not available for edge input.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
To set a minimum spacing of 0.5:
int1_errs = internal1_error(layer1 = met1, distance <= 0.5,
extension = RADIAL);
See Also
drc_features()
internal1()
internal1_edge() and not_internal1_edge()
internal2()
The internal2() function creates polygons that are formed by pairs of violation edges. It
measures inside-to-inside spacing between two layers based on the specified distance.
The arguments define various geometric conditions for measuring the distance between the
layer edges.
Syntax
internal2(
layer1 =
data_layer,
layer2 =
data_layer,
distance =
doubleconstraint,
extension =
NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE,
extension_distance = double, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR}, //optional
intersecting = {TOUCH, ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
from_layer = LAYER1 | LAYER2 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | COINCIDENT | RELATED_COINCIDENT |
OUTSIDE | NOT_ADJACENT | //optional
NOT_CONTAINED | ALL, //optional
look_thru_count = integerconstraint, //optional
look_thru_from_layer = LAYER1 | LAYER2 | ALL, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH}, //optional
point_touch_shape = EXTENTS | SQUARE, //optional
shape_size = double, //optional
output_type = REGION | CENTERLINE | EXTENTS, //optional
width = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
line_touch_shape = OUTSIDE | INSIDE | BOTH, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer against which the layer1 layer is
checked.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
Figure 2-327 shows the effect of the distance argument settings. For example,
Result = internal2(layer1, layer2, <=1.0, extension = NONE);
extension
Required. Specifies the extension of the check region, beyond the endpoints of the edge
being checked.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. See the description of the output_type argument for more information.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function for more information.
Figure 2-328 and Figure 2-329 show the effect of the extension argument settings.
Figure 2-328 extension Argument Examples
layer1
layer2
Result
NONE RADIAL
layer1
layer2
Result
SQUARE RECTANGLE
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
layer1
layer2
Result
0.0 0.5 1.0
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the edges that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ TOUCH. Creates a violation where two layers outside touch. There is no measurement
in this case.
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
layer1
layer2
Result
IN OUT ON
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
❍ The orientation argument cannot contain PERPENDICULAR.
❍ The intersecting argument cannot contain PERPENDICULAR.
❍ The corner_configuration argument cannot be CORNER_TO_CORNER.
❍ The extension argument must be NONE.
❍ The projection argument must contain IN.
Note:
See the cumulative_projection_length argument for more information.
layer1
layer2
Result
<=0.2 <=0.4
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
from_layer
Optional. Specifies the layer that is used to create check regions. The default is ALL.
❍ LAYER1. Specifies that only layer1 edges create check regions.
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
look_thru
Optional. Specifies how the dimensional check looks through obstructions when
measuring the separation between check edges. The default is NONE.
❍ NONE. Does not look through any edges.
❍ RELATED_COINCIDENT. Uses COINCIDENT if the two input layers have the same layer
ancestry; otherwise, NONE is used.
❍ OUTSIDE. Looks outside both layer1 and layer2.
❍ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not look
through any edges that share endpoint X with edge A. This setting avoids false
violations that might be reported when the look_thru argument is ALL.
Note:
When the edge_containment argument is not ALL, the NOT_ADJACENT behavior
is changed.
After filtering edges by edge_containment, when two checked edges do not
project onto each other, an adjacent edge of the extension past the endpoint of
one checked edge can block the extension check. If the adjacent edge fully blocks
the shape of the extension violation, then the extension violation is not reported.
The extension is not measured.
❍ NOT_CONTAINED. Looks through all edges, except polygons or edges that contain the
projection. A projection is contained when any of the following are true:
■ Edges of one layer are inside or outside coincident with projecting edges of the
other layer.
■ The projection is inside a polygon of any layer. For edge layers, this contain does
not apply.
Figure 2-341 shows an example of using the NOT_CONTAINED option.
internal2(purple, green, look_thru = NOT_CONTAINED);
look_thru_count
Optional. Specifies the number of edges that must be looked through for a measurement
to occur. Edges coincident to the edge being measured are not included in the count.
The value must be nonnegative. See “Constraints” on page A-4 for more information.
The default is >=0, which means the count is ignored.
Note:
Use this argument only when the extension argument is NONE and the look_thru
argument is ALL.
Figure 2-343 shows the effect of the look_thru_count argument settings.
Figure 2-343 look_thru_count Argument Examples
=1 =2 <=3
look_thru_from_layer
Optional. Controls which edges are counted for the look_thru_count argument. The
default is ALL.
❍ LAYER1. Counts only layer1 edges.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
layer1
layer2
Result
NONE POINT_TO_POINT
extension_obstructions
Optional. Specifies how look_thru is processed for the check region extension. Some
endpoint violations might be undesirable even though they fit the look_thru setting.
This argument specifies how aggressively the check finds and refines endpoint violations
in accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
Figure 2-346 shows the effect of the extension_obstructions argument settings.
Figure 2-346 extension_obstructions Argument Examples
layer1
layer2
Result
ALL POINT_TO_POINT
relational
Optional. Specifies if a check outputs additional violations based on the relationship of
the polygons. Connectivity is considered when generating these violations. The default
is no additional reporting.
❍ POINT_TOUCH. Creates a violation where there is an inside-to-inside point touch. The
format of the violation is determined by the point_touch_shape and shape_size
arguments.
When the edge_containment argument is specified, the POINT_TOUCH argument
creates a violation by using an intersection angle for all edges that touch any
point-touch point. The angle of the intersection angle must be greater than or equal
to 0 and less than 180. When the edge_containment argument is specified, the
point_touch_shape and shape_size arguments are ignored.
The POINT_TOUCH argument is not available for edge input.
Figure 2-347 shows the effect of the relational argument settings.
Figure 2-347 relational Argument Example
layer1
layer2
point_touch_shape
Optional. Specifies the shapes that are generated for point touches. The default is
EXTENTS.
❍ EXTENTS. Specifies that the length of the violation is equal to the maximum of the
distance constraint, with a minimum value of two times the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution. The violation region is approximated with edges that are either
perpendicular, parallel, or at a 45-degree angle, to the edges that form the point
touch, to avoid creating odd-angle data.
❍ SQUARE. Specifies that a square is centered on the point touch. The sides of the
square are horizontal and vertical. The size of the square is determined by the
shape_size argument.
layer1
layer2
Result
EXTENTS SQUARE
shape_size
Optional. Specifies the length of the sides of the squares generated when
point_touch_shape = SQUARE. The default is twice the maximum of the spacing
distance. This value must be positive. It is rounded to the nearest even multiple of the
internal resolution, with a minimum value of twice the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution.
Figure 2-349 shows the effect of the point_touch_shape argument settings.
Figure 2-349 shape_size Argument Examples
output_type
Optional. Specifies the type of output generated. The default is REGION.
❍ REGION. Reports violations as polygons, which are generated by connecting the
violation edges.
❍ CENTERLINE. Reports violations as an expanded line at the center of the projection
region. The midpoints of the sides of the violation region form a line that is expanded
in both directions by width/2. When the output_type argument is CENTERLINE, only
parallel spacing is supported.
❍ EXTENTS. Reports violations as boxes, oriented along the violation edges, that
contain the extents of the violation. This setting is used to avoid the creation of
odd-angle data normally seen when the extension argument is RADIAL or SQUARE.
The following violations require special consideration when generating output shapes:
❍ When set to REGION, point-to-point violations are reported as rectangles by
expanding the line connecting the two points by the width value on both sides.
❍ When set to CENTERLINE, point-to-point violations are reported as squares, centered
on the midpoint of the line connecting the two points, with a dimension equal to the
width value. Violations are oriented along the line.
❍ When set to EXTENTS, point-to-point violations are reported the same as when set to
REGION.
Figure 2-350 shows the effect of the output_type argument settings.
Figure 2-350 output_type Argument Examples
width
Optional. Specifies the value used to expand a single edge violation into a polygon,
including perpendicular spacing violations that are a single edge. The minimum value for
the argument is the internal resolution. The internal_resolution argument of the
resolution_options() function sets the internal resolution. The default is .001.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
line_touch_shape
Optional. Specifies how to expand a line-touch edge violation into a polygon. The default
is OUTSIDE.
❍ OUTSIDE. Outputs a line-touch polygon outside of the dimensional function layer1
polygon. The output polygon size equals the value of the width option.
❍ INSIDE. Outputs a line-touch polygon inside of layer1. The output polygon size
equals the value of the width option.
❍ BOTH. Outputs a line touch polygon inside and outside of the layer1. The total output
size is 2*width option.
cumulative_projection_length
Optional. Specifies how the projection length is measured when there are multiple
violations. See the projection_length argument for more information. The default is
NONE.
See the cumulative_projection_length argument of the enclose() function for
more information about the SAME_EDGE and JOGGING_EDGE options.
❍ NONE. Measures each violation separately.
layer1
layer2
Result
SAME_EDGE JOGGING_EDGE
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
❍ INDIVIDUAL. Measures edges if either edge matches the projection criteria as
specified in the projection argument.
❍ MUTUAL. Measures edges only if both edges match the following projection criteria:
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
❍ MUTUAL_NON_ORTHOGONAL.
layer1
layer2
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
edge_containment
Optional. Filters edges, based on the topological relation of the two layers, before the
tool makes any measurements. Edges are broken into segments that are inside, outside,
inside coincident, and outside coincident with the other layer. The default is ALL.
Note:
When the edge_containment argument is not ALL and the two input layers do not
have the same layer ancestry, the break_edges argument is forced to true.
❍ INSIDE. Includes the following measurements:
If layer1 is a polygon, edges on the layer1 polygon measure those layer2 edges
that are inside of the same layer1 polygon.
Note:
When you specify the connectivity argument, edges on the layer1 polygon
measure those layer2 edges that are inside of any layer1 polygon.
If layer2 is a polygon, edges on the layer2 polygon measure those layer1 edges
that are inside of the same layer2 polygon.
Note:
When you specify the connectivity argument, edges on the layer2 polygon
measure those layer1 edges that are inside of any layer2 polygon.
If the other layer is an edge layer, those edges that are neither inside coincident nor
outside coincident inside of the other layer are included in the measurements.
Important:
Edges that are outside coincident with the other layer are included in the
measurement for touch violations.
In Figure 2-357, the dash lines are filtered out before the measurement.
internal2(layer1 = orange, layer2 = blue, ...)
❍ COINCIDENT. Includes layer1 and layer2 edges that are inside coincident with the
other layer.
❍ ALL. Does not filter edges.
break_edges
Optional. Controls edge breaking behavior for two-layer spacing checks when the two
input layers do not have the same layer ancestry. The segments resulting from the edge
breaking are processed individually by the edge filters and spacing constraints. The
default is false.
❍ true. Enables edge breaking behavior when the two input layers do not have the
same layer ancestry. Edges are broken into individual segments as follows:
■ Specifies that edges are broken at every point of intersection with the other layer.
■ Specifies that coincident edges are broken at the point where they become
not-coincident.
❍ false. Specifies that edges are not broken.
membership
Optional. Specifies whether to check all distances between edges that are on the same
polygon. Polygon membership is determined by layer ancestry. The SAME_POLYGON
option is valid only if the two input layers have the same layer ancestry. The default is
ALL.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Distance
Error1 @= {@ "This is an example of the internal2() function
min spacing 0.5";
internal2(met1, met2, distance <= 0.5, extension = RADIAL );
};
Extension
Error1 @= { @ "min spacing 0.5 opposite edges only";
internal2(met1, met2 , distance < 0.5, extension = NONE);
};
Connectivity
Error1 @= { @ "min spacing 0.5 for all polygons on the same net";
internal2(met1, met2, distance < 0.5,
extension = RADIAL, connectivity = SAME_NET);
};
Orientation
Error1 @= { @ "min spacing 0.5 for met1 to met2" +
"measure only parallel edges";
internal2(met1, met2, distance < 0.5, extension = RADIAL,
orientation = {PARALLEL});
};
Orthogonal
Error1 @= { @ "min spacing 0.5 for met1 to met2" +
"measure all parallel angled edges";
internal2(met1, met2, distance < 0.5, extension = RADIAL,
orthogonal = BOTH, orientation = {PARALLEL});
};
See Also
enclose()
internal2_edge() and not_internal2_edge()
Syntax
internal2_edge(
layer1 =
data_layer,
layer2 =
data_layer,
distance =
doubleconstraint, //optional
extension =
NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE, //optional
extension_distance = double, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR}, //optional
intersecting = {TOUCH, ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
from_layer = LAYER1 | LAYER2 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | COINCIDENT | RELATED_COINCIDENT |
OUTSIDE | NOT_ADJACENT |
NOT_CONTAINED | ALL, //optional
look_thru_count = integerconstraint, //optional
look_thru_from_layer = LAYER1 | LAYER2 | ALL, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH}, //optional
output_layer = LAYER1 | LAYER2, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
cumulative_projection_length= NONE | SAME_EDGE | JOGGING_EDGE,
//optional
output_type = FAIL | CENTERLINE, //optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
name = "layer_label", //optional
not_internal2_edge(
layer1 =
data_layer,
layer2 =
data_layer,
distance =
doubleconstraint, //optional
extension =
NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE, //optional
extension_distance = double, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR}, //optional
intersecting = {TOUCH, ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
from_layer = LAYER1 | LAYER2 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | COINCIDENT | RELATED_COINCIDENT |
OUTSIDE | NOT_ADJACENT |
NOT_CONTAINED | ALL, //optional
look_thru_count = integerconstraint, //optional
look_thru_from_layer = LAYER1 | LAYER2 | ALL, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
relational = {POINT_TOUCH}, //optional
output_layer = LAYER1 | LAYER2, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
cumulative_projection_length = NONE | SAME_EDGE | JOGGING_EDGE,
//optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
name = "layer_label", //optional
edge_containment = INSIDE | COINCIDENT | ALL, //optional
output_side = ALL | HIGH | LOW, //optional
break_edges = true | false, //optional
membership = ALL | SAME_POLYGON //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer against which the layer1 layer is
checked.
distance
Optional. Specifies the check distance. See “Constraints” on page A-4 for more
information. The default is 0.
See the distance example.
Note:
The only constraint operators allowed are <, <=, and ==.
Figure 2-358 shows the effect of the distance argument settings. For example,
result = internal2_edge(layer1, layer2, <=1.0, extension = NONE);
extension
Optional. Specifies the extension of the check region, beyond the endpoints of the edge
being checked. The default is RADIAL.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. The edges reported have a length equal to the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function for more information.
In the conceptual diagram shown in Figure 2-359, the current edge being checked is
shown in solid black. The check region is dashed.
Figure 2-359 Check Region Extension
Figure 2-360 and Figure 2-361 show the effect of the extension argument settings.
Figure 2-360 extension Argument Examples
layer1
layer2
Result
NONE RADIAL
layer1
layer2
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the edges that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ TOUCH. Creates a violation where two layers outside touch. There is no measurement
in this case.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
❍ IN. Measures edges that have any portion inside the projection region.
❍ ON. Measures edges that fall exactly on the boundary of the projection region.
In Figure 2-366, the projection region for edge A is shown in gray. The green edges are
IN, the red edges are OUT, and the magenta edges are ON.
IN OUT ON
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
layer1
layer2
Result
<=0.2 <=0.4
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
Figure 2-370 and Figure 2-371 show the effects of the direction argument settings.
Figure 2-370 direction Argument Examples
from_layer
Optional. Specifies the layer that is used to create check regions. The default is ALL.
❍ LAYER1. Specifies that only layer1 edges create check regions.
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
look_thru
Optional. Specifies the edges that the spacing check looks through when measuring.
The default is NONE.
❍ NONE. Does not look through any edges.
❍ RELATED_COINCIDENT. Uses COINCIDENT if the two input layers have the same layer
ancestry; otherwise, NONE is used.
❍ OUTSIDE. Looks outside both layer1 and layer2.
❍ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not look
through any edges that share endpoint X with edge A. This setting avoids false
violations that might be reported when the look_thru argument is ALL.
Note:
When the edge_containment argument is not ALL, the NOT_ADJACENT behavior
is changed.
After filtering edges by edge_containment, when two checked edges do not
project onto each other, an adjacent edge of the extension past the endpoint of
one checked edge can block the extension check. If the adjacent edge fully blocks
the shape of the extension violation, then the extension violation is not reported.
The extension is not measured.
❍ NOT_CONTAINED. Looks through all edges, except polygons or edges that contain the
projection. See the NOT_CONTAINED option of the look_thru argument of the
internal2() function for exceptions and examples.
look_thru_count
Optional. Specifies the number of edges that must be looked through for a measurement
to occur. Edges coincident to the edge being measured are not included in the count.
The value must be nonnegative. See “Constraints” on page A-4 for more information.
The default is >=0, which means the count is ignored.
Note:
Use this argument only when the extension argument is NONE and the look_thru
argument is ALL.
Figure 2-375 shows the effect of the look_thru_count argument settings.
Figure 2-375 look_thru_count Argument Examples
=1 =2 <=3
look_thru_from_layer
Optional. Controls which edges are counted for the look_thru_count argument. The
default is ALL.
❍ LAYER1. Counts only layer1 edges.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
layer1
layer2
Result
Areas shown
NONE POINT_TO_POINT for illustration
extension_obstructions
Optional. Specifies how look_thru is processed for the check region extension. Some
endpoint violations might be undesirable even though they fit the look_thru setting.
This argument specifies how aggressively the check finds and refines endpoint violations
in accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
See Figure 2-378 for an example of the extension_obstructions argument.
Figure 2-378 extension_obstructions Argument Examples
POINT_TO_POINT ALL
relational
Optional. Specifies if a check outputs additional violations based on the relationship of
the polygons. Connectivity is considered when generating these violations. The default
is no additional reporting.
❍ POINT_TOUCH. Creates a violation where there is an inside-to-inside point touch. The
length of the violation is equal to the maximum of the distance constraint, with a
minimum value of two times the internal resolution. The internal_resolution
argument of the resolution_options() function sets the internal resolution.
When the edge_containment argument is specified, the POINT_TOUCH argument
creates a violation by using an intersection angle for all edges that touch any
point-touch point. The angle of the intersection angle must be greater than or equal
to 0 and less than 180. When the edge_containment argument is specified, the
point_touch_shape and shape_size arguments are ignored.
The POINT_TOUCH argument is not available for edge input.
See Figure 2-379 for an example of the relational argument.
Figure 2-379 relational Argument Example
layer1
layer2
Result
Default POINT_TOUCH
output_layer
Optional. Specifies the layer that is output for the violations. The default is LAYER1.
❍ LAYER1. Specifies that only layer1 edges are output.
layer1
layer2
Result
LAYER1 LAYER2
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
cumulative_projection_length
Optional. Specifies how the projection length is measured when there are multiple
violations. See the projection_length argument for more information. The default is
NONE.
See the cumulative_projection_length argument of the enclose() function for
more information about the SAME_EDGE and JOGGING_EDGE options.
❍ NONE. Measures each violation separately.
layer1
layer2
output_type
Optional. Specifies the type of output generated. The default is FAIL.
Note:
The output_type argument is not available for the not_internal2_edge()
function.
❍ FAIL. Specifies that the portions of the edges that fall within the check region are
output.
❍ CENTERLINE. Outputs spacing violations as lines at the center of the projection
region. A line is two points connected with no specific order. The midpoints of the
sides of the violation region are used to create the lines. When the output_type
argument is CENTERLINE, only parallel spacing is supported.
See Figure 2-382 for an example of the output_type argument.
Figure 2-382 output_type Argument Examples
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
❍ INDIVIDUAL. Measures edges if either edge matches the projection criteria as
specified in the projection argument.
❍ MUTUAL. Measures edges only if both edges match the following projection criteria:
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
■ Otherwise, both edges must match the projection criteria as specified in the
projection argument.
❍ MUTUAL_NON_ORTHOGONAL.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The look_thru argument is ignored, except when it is NOT_CONTAINED
and two intersecting edges are cut. The connectivity and orthogonal arguments
are not ignored.
< 180 90 45
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
edge_containment
Optional. Filters edges, based on the topological relation of the two layers, before the
tool makes any measurements. Edges are broken into segments that are inside, outside,
inside coincident, and outside coincident with the other layer. The default is ALL.
Note:
When the edge_containment argument is not ALL and the two input layers do not
have the same layer ancestry, the break_edges argument is forced to true.
output_side
Optional. Specifies to output only the check edges on the specified side of any violation
projected from an orthogonal edge. The default is ALL.
Note:
To use the HIGH or LOW options,
■ The direction argument needs to be HORIZONTAL or VERTICAL.
■ The extension argument needs to be NONE.
❍ ALL. Outputs all check edges
■ For any violation projected from a horizontal edge, only the edge on the top side
is output.
■ For any violation projected from a vertical edge, only the edge on the right side is
output.
❍ LOW. Outputs all check edges.
■ For any violation projected from a horizontal edge, only the edge on the bottom
side is output.
■ For any violation projected from a vertical edge, only the edge on the left side is
output.
For examples, see the output_side argument of the enclose_edge() and
not_enclose_edge() functions.
break_edges
Optional. Controls edge breaking behavior for two-layer spacing checks when the two
input layers do not have the same layer ancestry. The segments resulting from the edge
breaking are processed individually by the edge filters and spacing constraints. The
default is false.
❍ true. Enables edge breaking behavior when the two input layers do not have the
same layer ancestry. Edges are broken into individual segments as follows:
■ Specifies that edges are broken at every point of intersection with the other layer.
■ Specifies that coincident edges are broken at the point where they become
not-coincident.
❍ false. Specifies that edges are not broken.
membership
Optional. Specifies whether to check all distances between edges that are on the same
polygon. Polygon membership is determined by layer ancestry. The SAME_POLYGON
option is valid only if the two input layers have the same layer ancestry. The default is
ALL.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Examples
distance
Error1 @= {@ "This is an example of the internal2_edge() function
min spacing 0.5";
internal2_edge(met1, met2, distance <= 0.5 );
};
extension
Error1 @= { @ "min spacing 0.5 opposite edges only";
internal2_edge(met1, met2, distance < 0.5, extension = NONE);
};
connectivity
Error1 @= { @ "min spacing 0.5 for all polygons on the same net";
interna2_edge(met1, met2, distance < 0.5, connectivity = SAME_NET);
};
orientation
Error1 @= { @ "min spacing 0.5 for met1 to met2" +
"measure only parallel edges";
internal2_edge(met1, met2, distance < 0.5, orientation = {PARALLEL});
};
orthogonal
Error1 @= { @ "min spacing 0.5 for met1 to met2" +
"measure all parallel angled edges";
internal2_edge(met1, met2, distance < 0.5, orthogonal = BOTH,
orientation = {PARALLEL});
};
See Also
enclose_edge() and not_enclose_edge()
internal2()
internal2_error()
The internal2_error() function measures inside-to-inside spacing between two layers
based on the specified distance. The arguments define various geometric conditions for
measuring the distance between the layer edges. The output is unmerged errors.
Derived error layers are unformatted. These layers can be used by the drc_features()
function. The layers can be formatted and merged into normal layers using the
error_merge() and error_merge_edge() functions.
Syntax
internal2_error(
layer1 = data_layer,
layer2 = data_layer,
distance = doubleconstraint,
extension = NONE | NONE_INCLUSIVE | RADIAL |
SQUARE | RECTANGLE | EDGE,
extension_distance = double, //optional
connectivity = SAME_NET | DIFFERENT_NET | ALL, //optional
connect_sequence = connect_database, //optional
orientation = {ACUTE, PARALLEL, PERPENDICULAR}, //optional
intersecting = {TOUCH, ACUTE, PERPENDICULAR}, //optional
projection = {IN, OUT, ON}, //optional
projection_length = doubleconstraint, //optional
orthogonal = ALL | BOTH | NEITHER | ONE
ONE_OR_NEITHER | ONE_OR_BOTH, //optional
direction = HORIZONTAL | VERTICAL |
NON_ORTHOGONAL | ORTHOGONAL |
POSITIVE_45 | NEGATIVE_45 | ALL, //optional
from_layer = LAYER1 | LAYER2 | ALL, //optional
corner_configuration = ALL | CORNER_TO_CORNER_OR_EDGE |
CORNER_TO_CORNER | CORNER_TO_EDGE |
NOT_CORNER, //optional
look_thru = NONE | COINCIDENT | RELATED_COINCIDENT
OUTSIDE | NOT_ADJACENT |
NOT_CONTAINED | ALL, //optional
look_thru_count = integerconstraint, //optional
look_thru_from_layer = LAYER1 | LAYER2 | ALL, //optional
extension_look_past = NONE | POINT_TO_POINT, //optional
extension_obstructions = POINT_TO_POINT | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL //optional
projection_mode = SYMMETRIC | SYMMETRIC_NON_INTERSECTING |
ASYMMETRIC, //optional
projection_filter = INDIVIDUAL | MUTUAL |
MUTUAL_NON_ORTHOGONAL, //optional
intersection_angle = doubleconstraint, //optional
name = "layer_label", //optional
edge_containment = INSIDE | COINCIDENT | ALL, //optional
Returns
error layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer against which the layer1 layer is
checked.
distance
Required. Specifies the check distance. See “Constraints” on page A-4 for more
information.
Note:
The only constraint operators allowed are <, <=, and ==.
extension
Required. Specifies the extension of the check region, beyond the endpoints of the edge
being checked.
❍ NONE. Does not extend the check region; it is formed with right-angle boundaries at
the edge endpoints. The right-angle boundaries of the check region are exclusive.
The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
❍ NONE_INCLUSIVE. Does not extend the check region; it is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
inclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value. When the projection argument includes ON,
the NONE_INCLUSIVE setting generates point-to-point violations whose edges have
no length. See the description of the output_type argument for more information.
❍ RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
❍ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
❍ EDGE. Forms the check region by extending the edges using the
extension_distance, and creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or exclusive
depending on the constraint of the distance value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero, and the extension_distance is nonzero.
See Figure 2-101 for an example of RECTANGLE and Figure 2-102 for an example of EDGE
in the enclose() function for more information.
extension_distance
Optional. Specifies the check region extension distance when the extension argument
is RECTANGLE or EDGE. The value must be nonnegative. The default is 0.
connectivity
Optional. Specifies how to consider connectivity. The default is ALL.
❍ SAME_NET. Checks the edges that are on the same net.
connect_sequence
Optional. Specifies the connect database for spacing based on connectivity. This
database must be a valid connect database when the connectivity argument is
SAME_NET or DIFFERENT_NET.
orientation
Optional. Specifies the orientations of nonintersecting edges that are checked. The
default is {ACUTE, PARALLEL}.
❍ ACUTE. Measures all nonintersecting edges that are oriented at an acute angle.
See the examples for the orientation argument of the internal2() function for more
information.
intersecting
Optional. Specifies the intersecting edge types that are checked. Use an empty list ({})
to not measure intersecting edges. The default is ACUTE.
❍ TOUCH. Creates a violation where two layers outside touch. There is no measurement
in this case.
❍ ACUTE. Measures separation of intersecting edges that form an acute angle.
projection
Optional. Specifies the projections that must be satisfied for an edge measurement to
occur. Each edge creates a projection region bounded by perpendicular lines at each
endpoint, extended to the check side of the edge indefinitely. The other edges fall either
in, out, or exactly on this region. The default is {IN, OUT, ON}. See “Spacing Checks”
on page A-18 for more information about the check side.
Note:
Projection is mutual for parallel spacing. For nonparallel spacing, there are two
separate measurements and each is individually compared with the projection
specification.
See the examples for the projection argument of the internal2() function for more
information.
projection_length
Optional. Reports spacing violations if the projection length meets the specification. The
default is >0, which means to ignore the projection length.
The projection length is the length of the projecting edge, where the projecting edge is
the violation edge that created the projection region. For nonparallel violations, the
projecting edge is the edge that is perpendicular to the violation.
The restrictions are
❍ The orientation argument cannot contain PERPENDICULAR.
❍ The intersecting argument cannot contain PERPENDICULAR.
❍ The corner_configuration argument cannot be CORNER_TO_CORNER.
orthogonal
Optional. Measures two edges only when the number of orthogonal edges in the pair
meets the specification. The default is ALL.
❍ ALL. Checks all pairs of edges regardless of orthogonality.
❍ ONE_OR_NEITHER. Checks the pairs of edges where one or neither are orthogonal.
direction
Optional. Specifies the direction of the spacing check. The specification refers to the
perpendicular projection being measured. The default is ALL.
❍ HORIZONTAL. Specifies that only horizontal projections are measured.
from_layer
Optional. Specifies the layer that is used to create check regions. The default is ALL.
❍ LAYER1. Specifies that only layer1 edges create check regions.
See the examples for the from_layer argument of the internal2() function for more
information.
corner_configuration
Optional. Specifies how to check edges in a corner orientation. This argument applies
only to nonintersecting edges. If this argument is not ALL, it overrides the orthogonal,
projection, and orientation arguments for nonintersecting edges. The default is ALL.
Note:
Use the vertex() function to find corners of a specific angle.
❍ ALL. Measures edge pairs regardless of corner orientation.
look_thru
Optional. Specifies how the dimensional check looks through obstructions when
measuring the separation between check edges. The default is NONE.
❍ NONE. Does not look through any edges.
❍ RELATED_COINCIDENT. Uses COINCIDENT if the two input layers have the same layer
ancestry; otherwise, NONE is used.
❍ OUTSIDE. Looks outside both layer1 and layer2.
❍ NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not look
through any edges that share endpoint X with edge A. This setting avoids false
violations that might be reported when the look_thru argument is ALL..
Note:
When the edge_containment argument is not ALL, the NOT_ADJACENT behavior
is changed.
look_thru_count
Optional. Specifies the number of edges that must be looked through for a measurement
to occur. Edges coincident to the edge being measured are not included in the count.
The value must be nonnegative. See “Constraints” on page A-4 for more information.
The default is >=0, which means the count is ignored.
Note:
Use this argument only when the extension argument is NONE and the look_thru
argument is ALL.
look_thru_from_layer
Optional. Controls which edges are counted for the look_thru_count argument. The
default is ALL.
❍ LAYER1. Counts only layer1 edges.
extension_look_past
Optional. Specifies which extension obstructions are looked past during the violation
discovery process. When processing a measurement from edge a to edge b, the check
begins at the shortest distance between the two edges in the extension region of edge a.
The term past refers to portions of edge b that are farther away from edge a than the
portion that is obstructed. The default is NONE.
❍ NONE. Specifies that this check does not look past any extension obstructions. The
violation discovery process stops when an obstruction is encountered.
❍ POINT_TO_POINT. Specifies that this check looks past point-to-point obstructions to
measure edges beyond the obstruction. The discovery process stops when anything
other than a point-to-point obstruction is found.
extension_obstructions
Optional. Specifies how look_thru is processed for the check region extension. Some
endpoint violations might be undesirable even though they fit the look_thru setting.
This argument specifies how aggressively the check finds and refines endpoint violations
in accordance with obstructed regions. The default is POINT_TO_POINT.
❍ POINT_TO_POINT. Reports violations. If the shortest distance from edge to edge is
obstructed, there is no violation; otherwise a violation is reported. Other obstructions
are ignored.
❍ ALL. Reports the same violations as POINT_TO_POINT; however, the violations are
corrected for other obstructions.
See the examples for the extension_obstructions argument of the internal2()
function for more information.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
projection_mode
Optional. Specifies which projection is measured for nonparallel spacing, where exactly
one edge is orthogonal, and extension argument is NONE or NONE_INCLUSIVE. The
default is SYMMETRIC.
❍ SYMMETRIC. Measures both projections.
❍ SYMMETRIC_NON_INTERSECTING
projection_filter
Optional. Controls the measurement of nonparallel edges based on their respective
projection status. The default is INDIVIDUAL.
❍ INDIVIDUAL. Measures edges if either edge matches the projection criteria as
specified in the projection argument.
❍ MUTUAL. Measures edges only if both edges match the following projection criteria:
■ If the extension argument is NONE, both edges must match the IN option; that is,
edges that have any portion inside the projection region are measured. The
projection argument is ignored.
❍ MUTUAL_NON_ORTHOGONAL.
intersection_angle
Optional. Specifies the required angle of separation between two intersecting edges for
additional violations. The angle must be greater than or equal to 0 and less than 180.
When an intersection angle is not specified, the angle of separation is not checked.
When an intersection angle is specified, the intersecting argument must be an empty
list ({}).
Note:
The orientation, intersecting, projection, projection_length, and
corner_configuration arguments are ignored for the intersection_angle
argument. The look_thru argument is ignored, except when it is NOT_CONTAINED
and two intersecting edges are cut. The connectivity and orthogonal arguments
are not ignored.
See the intersection_angle argument of the internal2() and internal2_edge()
and not_internal2_edge() functions for examples.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
edge_containment
Optional. Filters edges, based on the topological relation of the two layers, before the
tool makes any measurements. Edges are broken into segments that are inside, outside,
inside coincident, and outside coincident with the other layer. The default is ALL.
Note:
When the edge_containment argument is not ALL and the two input layers do not
have the same layer ancestry, the break_edges argument is forced to true.
❍ INSIDE. Includes the following measurements:
If layer1 is a polygon, edges on the layer1 polygon measure those layer2 edges
that are inside of the same layer1 polygon.
Note:
When you specify the connectivity argument, edges on the layer1 polygon
measure those layer2 edges that are inside of any layer1 polygon.
If layer2 is a polygon, edges on the layer2 polygon measure those layer1 edges
that are inside of the same layer2 polygon.
Note:
When you specify the connectivity argument, edges on the layer2 polygon
measure those layer1 edges that are inside of any layer2 polygon.
If the other layer is an edge layer, those edges that are neither inside coincident nor
outside coincident inside of the other layer are included in the measurements.
Important:
Edges that are outside coincident with the other layer are included in the
measurement for touch violations.
See Figure 2-357 for an example.
❍ COINCIDENT. Includes layer1 edges that are inside coincident.
break_edges
Optional. Controls edge breaking behavior for two-layer spacing checks when the two
input layers do not have the same layer ancestry. The segments resulting from the edge
breaking are processed individually by the edge filters and spacing constraints. The
default is false.
❍ true. Enables edge breaking behavior when the two input layers do not have the
same layer ancestry. Edges are broken into individual segments as follows:
■ Specifies that edges are broken at every point of intersection with the other layer.
■ Specifies that coincident edges are broken at the point where they become
not-coincident.
❍ false. Specifies that edges are not broken.
membership
Optional. Specifies whether to check all distances between edges that are on the same
polygon. Polygon membership is determined by layer ancestry. The SAME_POLYGON
option is valid only if the two input layers have the same layer ancestry. The default is
ALL.
relational
Optional. Specifies if a check outputs additional violations based on the relationship of
the polygons. Connectivity is considered when generating these violations. The default
is no additional reporting.
❍ POINT_TOUCH. Creates a violation where there is an inside-to-inside point touch. The
length of the violation is equal to the maximum of the distance constraint, with a
minimum value of two times the internal resolution. The internal_resolution
argument of the resolution_options() function sets the internal resolution.
When the edge_containment argument is specified, the POINT_TOUCH argument
creates a violation by using an intersection angle for all edges that touch any
point-touch point. The angle of the intersection angle must be greater than or equal
to 0 and less than 180. When the edge_containment argument is specified, the
point_touch_shape and shape_size arguments are ignored.
The POINT_TOUCH argument is not available for edge input.
layer1
layer2
Result
Default POINT_TOUCH
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
To set a minimum spacing of 0.5:
int2_errs = internal2_error(layer1 = met1, layer2 = met2,
distance <= 0.5, extension = RADIAL);
See Also
drc_features()
internal2()
internal2_edge() and not_internal2_edge()
intersections()
The intersections() function creates polygons that represent the specified intersections
with the specified output format. Each intersection between the layer1 edges and the
layer2 edges is compared to the angle list. Intersections includes endpoints. Collinear
edges do not match any angle specifications.
The intersections() function considers only the smallest of the two angles for a given
intersection. For example, as shown in Figure 2-387, with a specification of
outside-to-outside angle measurement, the intersection A has two angles. Only the smallest
of the two, the 90-degree angle, is measured.
Figure 2-387 Outside-to-Outside Example
270°
90°
A
layer1
layer2
The following figures, Figure 2-388, Figure 2-389, and Figure 2-390, show intersections with
defined angle measurements.
Figure 2-388 Defined Angle Measurement: Crossing Point of Two Edges
Figure 2-389 Defined Angle Measurement: Point Where the End of One Edge is Coincident With
the Start of Another; Edges Are Not Collinear
Figure 2-390 Defined Angle Measurement: T Intersection That Is on the Check Side of the Edge;
for Checking the Outside of Blue
The following figures, Figure 2-391 and Figure 2-392, show intersections that do not have
angle measurements.
Figure 2-391 No Angle Measurement: Collinear edges
Figure 2-392 No Angle Measurement: T Intersection That Is Not on the Check Side of the Edge;
Not for Checking the Outside of Blue
You specify which side of the edges of each layer is used for angle measurement, inside or
outside. This side is the check side of the edges. The inside is always to the right of the
edge. For example, as shown in Figure 2-393, for two arbitrary edges, the inside is always
on the right. See “Spacing Checks” on page A-18 for more information about the check side.
Inside to outside
Outside to outside
layer2
Syntax
intersections (
layer1 = data_layer,
layer2 = data_layer,
layer1_side = OUTSIDE | INSIDE,
layer2_side = OUTSIDE | INSIDE,
angles = {doubleconstraint, ...},
shape = TRIANGLE | EXTENTS | DIAMOND | SQUARE, //optional
shape_size = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
layer1_side
Required. Specifies the check side of the layer1 edges.
layer2_side
Required. Specifies the check side of the layer2 edges.
angles
Required. Specifies the angles that determine the intersections to find. The angles must
be greater than 0 and less than 360. A value of 180 does not match any intersections.
shape
Optional. Specifies the shape of the polygon generated at each selected intersection.
The default is SQUARE.
❍ TRIANGLE. Marks the intersection with a triangle that fills the interior of convex angles
and the exterior of concave angles.
❍ EXTENTS. Creates extents boxes from the TRIANGLE shapes.
shape_size
Optional. Specifies the size of the output squares. The value must be positive. The
default is DRC_ERROR_BOX, which has a default of 0.1.
❍ When the shape is SQUARE or DIAMOND, the value is rounded to the nearest even
multiple of the internal resolution, with a minimum of twice the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution.
❍ Otherwise, the value is rounded to the nearest internal resolution unit, with a
minimum of one internal resolution unit.
❍ When the shape is TRIANGLE, the sides of the shape coincident with the input edges
are not longer than the edges forming the intersection.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In the first example, shown in Figure 2-394,
Answer = intersections(A, A_EDGE, INSIDE, INSIDE, {90},
shape=EXTENTS, shape_size = .2);
In this example, A is blue; A_EDGE is red; and, Answer is the empty green shapes with
dotted lines showing the markers before merging.
See Also
intersections_edge()
vertex()
intersections_edge()
The intersections_edge() function creates edges that represent the specified
intersections. Each intersection between the layer1 edges and the layer2 edges is
compared to the angle list. Intersections includes endpoints. Collinear edges do not match
any angle specifications. See the examples for the intersections() function for more
information.
Syntax
intersections_edge (
layer1 = data_layer,
layer2 = data_layer,
layer1_side = OUTSIDE | INSIDE,
layer2_side = OUTSIDE | INSIDE,
angles = {doubleconstraint, ...},
output_layer = LAYER1 | LAYER2, //optional
shape_size = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
layer1_side
Required. Specifies the check side of the layer1 edges.
layer2_side
Required. Specifies the check side of the layer2 edges.
angles
Required. Specifies the angles that determine the intersections to find. The angles must
be greater than 0 and less than 360. A value of 180 does not match any intersections.
output_layer
Optional. Specifies the layer whose edges are output for the violations. The default is
LAYER1.
shape_size
Optional. Specifies the maximum length of the output edges. The value must be positive.
The default is DRC_ERROR_BOX, which has a default of 0.1. The value is rounded to the
nearest internal resolution unit, with a minimum of one internal resolution unit.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In the first example, as shown in Figure 2-397,
red = intersections_edge(A, A_EDGE, INSIDE, INSIDE, {90},
shape_size = .2);
In this example, A is blue; A_EDGE is black; and, Answer is the red edges.
Figure 2-397 INSIDE Check Side
.2
See Also
intersections()
vertex()
3
Runset Functions: J - Z 3
This chapter provides an alphabetical listing of the functions available with the IC Validator
physical verification tool.
See Chapter 2, “Runset Functions: A - I” for more functions. Chapter 1, “Tables of Runset
Functions” lists the runset functions by various types, in addition to a table of all runset
functions.
To help you understand and use the functions, see Appendix A, “Runset Basics” and the
IC Validator User Guide.
In addition to the documentation conventions shown in the Preface, the following convention
is used in the documentation of the IC Validator syntax.
Convention Description
label_text()
The label_text() function creates a text layer that contains text strings for any probe layer
polygon that edge touches or overlaps a connect layer polygon. A point touch is not
considered an interaction. The text is placed at an arbitrary location on the probe polygon.
Each text string consists of the path to the connect layer net from the top cell of the design
and the net name. The created text layer can be attached to a probe layer with net names
by connecting and texting the probe layer.
The probe layer must be in the top cell. Any probe layer that is not in the top cell is ignored.
If the probe layer interacts with more than one connect polygon that has text at the same
level, the results are arbitrary.
An error occurs if a connect layer is already texted but text opens are ignored by the setting
the opens argument of the text_net()function to IGNORE.
A text file can be written to any output layout database, such as GDSII and Milkyway.
Untexted nets use the net prefix specified in the text_options() function.
Syntax
label_text(
layer1 = polygon_layer,
layer2 = polygon_layer,
connect_sequence = connect_database,
include_path = true | false, //optional
use_text = UPPER | LOWER, //optional
name = "layer_label" //optional
);
Returns
text layer
Arguments
layer1
Required. Specifies the probe layer.
layer2
Required. Specifies the connect layer.
connect_sequence
Required. Specifies the connect database that contains layer2, the connect layer.
include_path
Optional. Specifies if the created text string includes the full path to the net. The default
is true.
❍ true. Specifies that the text string has the full path to the net.
❍ false. Specifies that the text string has only the net name.
use_text
Optional. Specifies from where the text is selected. This argument is used only when a
probe layer interacts more than one physical polygon on the same net. The default is
LOWER.
❍ UPPER. Acquires the text from the highest polygon in the net that has direct interaction
with the probe layer.
❍ LOWER. Acquires the net name from the lowest interacting probe polygon, even if the
polygon is not texted.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
// Probe layer can also be created through IC Validator tool operations.
met1 = assign({{8}});
met1_text = assign_text({{42}});
met2 = assign({{10}});
met2_text = assign_text({{43}});
via = assign({{11}});
probe_met1 = assign({{80}});
probe_met2 = assign({{90}});
cdb1 = text_net(cdb1,
text_layer_items = {
{layer = met1, text_layer = met1_text},
{layer = met2, text_layer = met2_text}}
);
// Write output to the output GDSII, getting text as both net info and
// text information.
gdsout = gds_library("label_out.gds");
write_gds(output_library = gdsout,
layers = {
{layer = met1, layer_num = {8}},
{layer = met2, layer_num = {10}},
{layer = via, layer_num = {11}},
{layer = probe_met1, layer_num = {100}},
{layer = probe_met2, layer_num = {101}},
{layer = met1probe_text, layer_num = {100}},
{layer = met2probe_text, layer_num = {101}}},
properties = {net_name = 4},
connect_sequence = cdb3
);
See Also
text_options()
layer_empty()
The layer_empty() function is a runtime-conditional function that is used within flow control
constructs. The function returns a value of true if the specified input layer is empty;
otherwise the function returns a value of false. Use this function to check whether a
particular function or group of functions produced error output.
Note:
Use of runtime-conditional functions might inhibit distributed scheduling and runset
optimization.
Syntax
layer_empty(
layer1 = data_layer
);
Returns
Boolean
Arguments
layer1
Required. Specifies the edge or polygon layer.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
if (layer_empty(m1))
{
note("Layer m1 is empty");
}
else
{
note("Layer m1 is not empty");
}
if (!layer_empty(m1))
{
note("Layer m1 is not empty");
copy(m1);
}
See Also
violation_empty()
layer_extent()
The layer_extent() function creates a polygon layer consisting of a single rectangle in the
top cell that is equal to the extents of the input layer in the top cell and all its placements. The
top cell is defined by the library() function.
Syntax
layer_extent(
layer1 = data_layer,
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
layer1
Required. Specifies the edge or polygon layer.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 3-1 shows how a single rectangle is created in the top cell. The rectangle is equal to
the extents of the specified layer.
layer1
layer2
layer_extent( layer_extent(
layer1); layer2); Result
See Also
cell_extent()
chip_extent()
layer_extent_list()
layer_extent_list()
The layer_extent_list() function creates a polygon layer consisting of a single rectangle
in the top cell that is equal to the extents of the input layers in the top cell and all its
placements. The top cell is defined by the library() function.
Syntax
layer_extent_list(
layers = {data_layer, ...},
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
layers
Required. Specifies the edge and polygon layers.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
layer_extent()
layer_statistics()
The layer_statistics() function reports statistics of the input layer. Use this function for
debugging purposes.
Syntax
layer_statistics(
layer1 = data_layer,
file = layer_statistics_file_handle, //optional
mode = OVERWRITE | APPEND, //optional
user_input = "string" //optional
);
Returns
void
Arguments
layer1
Required. Reports statistics for this data layer.
file
Optional. Writes statistics to this file. The file is defined using the
layer_statistics_file() function. By default, the IC Validator tool writes the
statistics to the summary file (cell.sum) and to the screen when the -verbose option is
used. Table 3-1 lists the reported statistics.
Table 3-1 Reported Statistics
Statistic Definition
Hierarchical Total number of placements (SREFs and AREFs) at each level in the
placements specified layer
Flat placements Total number of placements (SREFs and AREFs) in the specified layer
Hierarchical DATA Number of data primitives (polygons, paths, and rectangles) in each cell
of the specified layer
Statistic Definition
Flat DATA Total number of data primitives in the specified layer. This number is
obtained by:
1. Multiplying the number of data primitives within each cell by the
number of flat placements of the cell.
2. Adding the resulting counts for each cell.
Hierarchical overlap of data is not considered.
Hierarchical TRAPS Number of trapezoids in the hierarchical data in the specified layer
Flat TRAPS Number of trapezoids in the flat data in the specified layer. This number
is obtained by:
1. Multiplying the trap count within each cell by the number of flat
placements of the cell.
2. Adding the resulting counts for each cell.
Hierarchical overlap of data is not considered.
Hierarchical SREF Total number of cell references at each hierarchical level in the specified
placements layer
Hierarchical AREFs Total number of array references at each hierarchical level in the
specified layer
Hierarchical AREF Total number of references in each array reference at each hierarchical
placements level in the specified layer
Total data coverage Percentage of the material coverage by this layer over the area of the
extent of the top cell
Group file size Size of the group file for the specified layer
Highest TRAP Highest trapezoid count found in a polygon in the specified layer
count in a polygon
Highest cell level Highest trapezoid count found in a cell in the specified layer
TRAP count
Statistic Definition
Highest cell level Highest count of data primitives found in a cell in the specified layer
DATA count
Highest cell level Highest placement count found in a cell in the specified layer. If a
PLACEMENT count placement is an AREF, the number of references in the array at the first
hierarchical level is counted.
The total sum of Sum of the perimeters of all polygons in the specified layer.
polygon perimeter
The total sum of Sum of the areas of all polygons in the specified layer.
polygon area
mode
Optional. Specifies the action for when the statistics file already exists. The default is
OVERWRITE.
user_input
Optional. Specifies a user comment. This comment is written to the file specified by the
file argument or to the summary file (cell.sum).
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
// Output to the summary file
layer_statistics(l1);
See Also
layer_statistics_file()
layer_statistics_file()
The layer_statistics_file() function defines a layer statistics file. This file is specified
in the file argument of the layer_statistics() function
Limitation:
The layer_statistics_file() function cannot be called more than one time with the
same file argument. The result can be used in more than one layer_statistics()
function.
Syntax
layer_statistics_file(
file = "string"
);
Returns
layer_statistics_file_handle
Arguments
file
Required. Specifies the layer statistics file name. See the layer_statistics() function
for more information.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
layer_statistics()
layout_drawn_options()
The layout_drawn_options() function specifies criteria for checking and, where
appropriate, correction of various invalid layout data. (Problems with drawn data are
corrected automatically whenever possible.) If this function is not in the runset, it is
automatically invoked with the default values. This function can be called only one time in a
runset.
This checking occurs only on layers specified in assign functions, such as assign() or
assign_edge(). When a runset is optimized, unused assign layers are pruned and,
therefore, are not checked for invalid data.
Errors are reported to the LAYOUT_ERRORS file with the tag layout_drawn_errors. The
errors appear as an X in VUE.
Syntax
layout_drawn_options(
backtracking_points = true | false, //optional
collinear_points = true | false, //optional
duplicate_placements = true | false, //optional
duplicate_points = true | false, //optional
path_check = CENTERLINE | BOUNDARY, //optional
path_length = true | false, //optional
path_length_end = true | false, //optional
path_invalid_styles = {SQUARE, ROUND, SQUARE_EXTENDED,
CUSTOM}, //optional
scaled_instances = true | false, //optional
self_intersect = true | false, //optional
self_intersect_action = EMPTY | FILL, //optional
zero_area = true | false, //optional
zero_path = true | false, //optional
zero_segment = true | false //optional
);
Returns
void
Arguments
backtracking_points
Optional. Specifies if backtracking points are reported. When set to true, these points
are reported. (A backtrack point is the second point in a sequence of three points in a
polygon boundary where the first and third points are identical.) The default is false.
collinear_points
Optional. Specifies if collinear polygon points are reported. When set to true, these
points are reported. (A collinear polygon point is a point that is collinear with the
preceding and following points on a straight edge of a boundary.) The default is false.
duplicate_placements
Optional. Specifies if duplicate instance placements of a child cell within a cell are
reported. When set to true, these placements are reported. The default is false.
duplicate_points
Optional. Specifies if duplicate polygon points are reported. When set to true, these
points are reported. (Duplicate polygon points are a series of identical points along a
boundary.) The default is false.
path_check
Optional. Specifies which feature of a path is checked. The default is BOUNDARY.
❍ BOUNDARY. Specifies that the resulting boundary, after path expansion, is checked for
violations in accordance with the other argument settings.
❍ CENTERLINE. Specifies that only the centerline of the path, before path expansion, is
checked for violations in accordance with the other argument settings.
For example, a path is drawn in the shape of a P. When the path is converted into a
polygon, it intersects where the end of the path curls in upon itself. The IC Validator
tool does not report this intersection as a self-intersection; it reports errors in the
LAYOUT_ERRORS file only for path centerlines that actually cross each other. Path
centerlines are also checked for duplicate, collinear, and backtracking points when
the backtracking_points, collinear_points, and duplicate_placements
arguments are set to true.
path_length
Optional. Specifies if a segment of a path that has a length less than one-half of the path
width is a violation. When set to true, any segment of a path that has a length less than
one-half of the path width is a violation. All path types are checked. The default is false.
path_length_end
Optional. Specifies if the first or last segment of a path that has a length less than
one-half of the path width and that would remove material is a violation. When set to
true, the first or last segment of a path that has a length less than one-half of the path
width and that would remove material is a violation. The default is false.
Note:
The GDSII path types 0 and 1 that do not have an extension larger than one-half of
the path width can remove material.
Use the path_length argument to check all segments of a path. Single-segment paths
are not checked by the path_length_end argument.
path_invalid_styles
Optional. Reports paths that have any of the following specified styles. By default, the
IC Validator tool does not report paths.
The styles are:
❍ SQUARE
❍ ROUND
❍ SQUARE_EXTENDED
❍ CUSTOM
scaled_instances
Optional. Specifies if scaled instances are reported. When set to true, these instances
are reported. The default is false.
self_intersect
Optional. Controls the reporting of self-intersecting polygons. The default is false.
❍ true. Reports all self-intersecting polygons.
❍ false. Does not report self-intersecting polygons unless the IC Validator tool cannot
form a closed boundary with the points given.
A self-intersecting polygon is a polygon with edges that cross each other. Edges that
simply touch are not self-intersecting. A self-intersecting polygon can also be a polygon
with edges that cross in such a way that it appears as a polygon is within a polygon.
Figure 3-2 shows examples of self-intersecting polygons.
Figure 3-2 Examples of Self-Intersecting Polygons
self-intersecting
polygon areas
The IC Validator tool always attempts to create a closed boundary from every
self-intersecting polygon, according to the setting of the self_intersect_action
argument.
self_intersect_action
Optional. Specifies whether an area of self-intersection is filled. The default is EMPTY.
❍ EMPTY. Specifies that the area of self-intersection is left as an empty area within the
polygon.
❍ FILL. Specifies that the area of self-intersection is filled within the polygon.
This argument affects only polygons. Areas of self-intersection in paths are always filled,
as shown in Figure 3-3.
Figure 3-3 Areas of Self-Intersecting Polygons
Input Output
self_intersect_action self_intersect_action
= EMPTY = FILL
zero_area
Optional. Specifies if zero-area polygons are reported. When set to true, these polygons
are reported. The default is false.
zero_path
Optional. Specifies if paths with assigned widths of 0 are reported. When set to true,
these paths are reported. The default is false.
Figure 3-4 shows a zero width path.
Figure 3-4 Example of Zero Width Path
zero_segment
Optional. Specifies if any part of a polygon that is a line segment or a zero width segment
is a violation. When set to true, if any part of a polygon is effectively a line segment or a
zero width segment, a violation occurs. The default is false.
Figure 3-5 shows a zero width segment within a polygon.
Figure 3-5 Examples of Zero Width Path Within a Polygon
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
layout_drawn_options (
self_intersect = true,
path_invalid_styles = {ROUND, CUSTOM},
path_length_end = true
);
See Also
get_layout_drawn_violation()
layout_grid_options()
layout_grid_options()
The layout_grid_options() function specifies criteria for grid checking of input layers. If
this function is not in the runset, it is automatically invoked with the default values. This
function can be called only one time in a runset.
Grid checking occurs only on layers specified in assign functions, such as assign() or
assign_edge(). When a runset is optimized, unused assign layers are pruned and,
therefore, are not checked for grid violations.
Errors are reported to the LAYOUT_ERRORS file with the tag layout_grid_errors. The errors
appear as an X in VUE.
Syntax
layout_grid_options(
resolution = double, //optional
check_45 = {POLYGON, PATH}, //optional
check_90 = {POLYGON, PATH} //optional
);
Returns
void
Arguments
resolution
Optional. Specifies if layout layers are inspected for off-grid data. When set to a value
greater than the input library resolution, layout layers are inspected for off-grid data. To
specify a different resolution for a layer, use the grid_check argument of the assign()
and assign_edge() functions. The default is 0.
❍ Checks paths using their centerline, and checks path width with two times the
resolution value.
Note:
The IC Validator tool always checks that the path width is an even value. If it is an
odd value, the IC Validator tool reports an error. You cannot disable this checking.
❍ Checks polygon vertices.
❍ Checks cell placement points.
check_45
Optional. Specifies how layout data is checked for angles that are not even multiples of
45 degrees. To specify a different check for a layer, use the grid_check argument of the
assign() and assign_edge() functions. The default is PATH.
❍ POLYGON. Reports polygon edges as an error if the angle, with respect to the x-axis of
the cell where the edges are defined, is not a multiple of 45 degrees.
❍ PATH. Reports path centerline segments as an error if the angle, with respect to the
x-axis of the cell where the edges are defined, is not a multiple of 45 degrees.
check_90
Optional. Specifies how layout data is checked for angles or rotations that are not even
multiples of 90 degrees. To specify a different check for a layer, use the grid_check
argument of the assign() and assign_edge() functions. The default is PATH.
❍ POLYGON. Reports polygon edges as an error if the angle, with respect to the x-axis of
the cell where the edges are defined, is not a multiple of 90 degrees.
❍ PATH. Reports path centerline segments as an error if the angle, with respect to the
x-axis of the cell where the edges are defined, is not a multiple of 90 degrees.
Note:
When errors are reported for both the check_45 and check_90 arguments, the
violation is reported only one time as a non-45 violation. For example, if both the
check_45 and check_90 arguments contain POLYGON, a 30-degree polygon edge is
reported as non-45, from which you can assume that it is also non-90; only 45-degree
polygon edges are reported as non-90.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
layout_grid_options (
resolution = 0.001,
check_45 = { PATH, POLYGON }
);
See Also
get_layout_grid_violation()
layout_drawn_options()
layout_integrity_by_cell()
The layout_integrity_by_cell() function checks the specified cells against the layout
integrity databases (LIDBs) specified in the layout_integrity_options() function.
Multiple checksums can be present in the LIDBs listed for any given design cell. A design
cell is considered a match if its calculated checksums match any set of checksums for a cell
of the same name in any input LIDB specified in the layout_integrity_options()
function.
Note:
Although the layout_integrity_by_cell() function executes a check on the design,
because the check occurs while reading the layout, this function must appear in the
OPTIONS section and before assign functions.
Syntax
layout_integrity_by_cell(
cells = {"string", ...},
integrity_mismatch = REPORT | ABORT, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL //optional
);
Returns
void
Arguments
cells
Required. Specifies the cells to check. If a design cell specified in this list exists in any
LIDB specified in the layout_integrity_options() function, the checksum values are
calculated and compared against cells of the same name in the LIDB list. String matching
using metacharacters is allowed. See “String Matching” on page A-11 for more
information.
integrity_mismatch
Optional. Specifies whether to terminate the IC Validator tool if a cell is checked and fails
to match any set of checksums in the LIDB list. The default is REPORT: The IC Validator
tool reports the mismatch in the LAYOUT_ERRORS file and continues to run.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is CELL_LEVEL.
❍ CELL_LEVEL. Checks cells that match the cell name list; children in the hierarchy of
the cell are not checked, but placements within the cell are checked. The cell names
of the child cells in the layout must match the child cell names in the LIDB, or a cell
name map must be used in the LIDB specification of the
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
This example shows a typical layout integrity check, for all cells in the input layout.
layout_integrity_options(
databases = {
{ db_name = "db1.lidb"
cell_name_map = { {"A_golden","A"}, {"B_golden","B"} }
}
}
);
layout_integrity_by_cell(cells = {"*"});
See Also
layout_integrity_by_marker_layer()
layout_integrity_options()
layout_integrity_by_marker_layer()
The layout_integrity_by_marker_layer() function checks any design cell containing
data on the specified marker layer against the layout integrity databases (LIDBs) specified
in the layout_integrity_options() function. A design cell is considered a match if its
calculated checksums match any set of checksums for a cell with data present on the
marker layer in any input LIDB specified in the layout_integrity_options() function.
Note:
Although the layout_integrity_by_marker_layer() function executes a check on
the design, because the check occurs while reading the layout, this function must appear
in the OPTIONS section and before assign functions.
Syntax
layout_integrity_by_marker_layer(
marker_layer = {layer_num = integer, data_type = integer},
//optional
marker_layer_purpose = {layer_name = "string",
purpose_name = "string"}, //optional
integrity_mismatch = REPORT | ABORT, //optional
check_layers = {{layer_num_range = integerconstraint,
data_type_range = integerconstraint},
...}, //optional
check_layer_purposes = {{layer_names = {"string", ...},
purpose_names = {"string", ...}},
...}, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL //optional
);
Returns
void
Arguments
marker_layer
Optional. Specifies the layer and datatype of the marker layer. Either the marker_layer
or marker_layer_purpose argument is required. The default of the data_type option
is 0. See “Layout Layer and Datatype Ranges” on page A-6 for information about the
limits of the values.
marker_layer_purpose
Optional. Specifies the layer and purpose name of the marker layer, for OpenAccess
input layouts. Either the marker_layer or marker_layer_purpose argument is
required.
integrity_mismatch
Optional. Specifies whether to terminate the IC Validator tool if a cell is checked and fails
to match any set of checksums in the LIDB list. The default is REPORT: The IC Validator
tool reports the mismatch in the LAYOUT_ERRORS file and continues to run.
check_layers
Optional. Lists the layer range and datatype range pairs that determine which layers to
compare against checksum entries in the LIDB. If this list is specified, only mismatches
on those layers count as a cell mismatch. By default, the IC Validator tool checks all
layers in each cell. See Layout Layer and Datatype Ranges for information about the
limits of the values.
check_layer_purposes
Optional. Lists the layer name and purpose name pairs that determine which layers to
compare against checksum entries in the LIDB for OpenAccess layouts. If this list is
specified, only mismatches on those layers count as a cell mismatch. By default, the
IC Validator tool checks all layers in each cell.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is CELL_LEVEL.
❍ CELL_LEVEL. Checks cells with a marker layer polygon without regard to children in
the hierarchy, but placements within the cell are checked. The cell names of the child
cells in the layout must match the child cell names in the LIDB, or a cell name map
must be used in the LIDB specification of the layout_integrity_options()
function. CELL_LEVEL mode does not look down the hierarchy. Therefore, while the
placements within the parent cell are checked, the contents of the child cells do not
contribute to the outcome of a CELL_LEVEL check on the parent cell.
❍ HIERARCHICAL. Checks cells with a marker layer polygon; all children in the hierarchy
are also checked. Any layout integrity mismatch in a child cell is reported in all
parents that contain a marker layer. It is not necessary for child cell names under the
layout cell with the marker layer polygon to match the child cell names in the LIDB, as
the child cells are matched based on their contents.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Examples
layout_integrity_options(
databases = {{ db_name = "db1.lidb" } }
);
See Also
layout_integrity_by_cell()
layout_integrity_options()
layout_integrity_options()
The layout_integrity_options() function specifies which layout integrity databases
(LIDBs) should be used for checking cells in the design. The databases are searched in
order for a matching cell. Use the icv_lidb utility to generate and manage layout integrity
databases.
Note:
For the mixed Milkyway and GDSII flow, each replacement library has its own list of
layout integrity databases. In this flow, only Milkyway cells are matched against the
database list specified in the layout_integrity_options() function.
Syntax
layout_integrity_options(
databases = {{db_name = "string",
missing_db = = ABORT | IGNORE, //optional
cell_name_map = {{search_string = "string",
replace_string = "string"},...},
...} //optional
);
Returns
void
Arguments
databases
Optional. Specifies the list of layout integrity databases that the IC Validator tool uses for
layout integrity checking. By default, the IC Validator tool does not check layout integrity.
❍ db_name. Required. Specifies the path to the layout integrity database.
❍ missing_db. Optional. Specifies the behavior when the IC Validator tool does not find
the specified layout integrity database. By default, the IC Validator tool terminates
with an error.
■ ABORT. Specifies that the run stops when the layout integrity database is not
found.
■ IGNORE. Continues the IC Validator run if the tool cannot find the layout integrity
database.
❍ cell_name_map. Optional. Specifies lists that tells how cell names are remapped as
data is read from the LIDB. By default, the IC Validator tool does not remap cell
names.
■ search_string. Required. Specifies the existing cell name in the input LIDB.
■ replace_string. Required. Specifies the cell name used for layout integrity
checking within IC Validator.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
layout_integrity_options (
databases = {
{ db_name = "db1.lidb"
cell_name_map = { {"A_golden","A"}, {"B_golden","B"} }
}
}
);
See Also
layout_integrity_by_cell()
layout_integrity_by_marker_layer()
Syntax
length_edge(
layer1 = data_layer,
distance = doubleconstraint,
corners = CONNECT | IGNORE, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_length_edge(
layer1 = data_layer,
distance = doubleconstraint,
corners = CONNECT | IGNORE, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer from which edges are selected.
distance
Required. Length specification.
Figure 3-6 shows the effect of the distance argument setting with the length_edge()
function.
layer1 Result
corners
Optional. The processing at corners. The default is IGNORE.
❍ CONNECT. Connects the edges at corners, measuring the entire length.
layer1 Result
layer1 shadow
IGNORE CONNECT shown for illustration
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
adjacent_edge() and not_adjacent_edge()
level()
The level() function creates a copy of the input layer, where hierarchically interacting data
is moved up to a common point in the hierarchy. The interaction is limited to overlap and
abutment.
Syntax
level(
layer1 = polygon_layer,
allow_duplicate_output = true | false, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
allow_duplicate_output
Optional. Specifies how the level() function processes data with duplicate shapes. The
default is false.
❍ true. Keeps duplicate shapes that are in different cells, or placements of the same
cell, rather than leveling the shapes to the common parent and merging one away.
Setting the allow_duplicate_output argument to true can help IC Validator
performance when there are multiple duplicate shapes throughout the hierarchy. For
example, performance is helped for vias where each placement of a cell has an exact
overlapping column or row of vias with the previous placement.
❍ false. Does not keep duplicate shapes.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
TOP
X
Z Y
TOP
TOP
X X Y Z
Z Y
The leveling operation is performed throughout the entire design hierarchy, regardless of
cell name. As shown in Figure 3-9, the level() function creates one output layer. Polygons
from the input hierarchy that do not hierarchically overlap other polygons remain in their
initial cell.
lvl_met1 = level(met1);
Z
Y
Flat Representation Output Hierarchy
TOP
TOP
Y Z
Y
Z
c2
c2
c2
When the allow_duplicate_output argument is true, the overlapping cells are retained.
The result is the same as the input: there are no polygons on TOP, two polygons on each c1
cell, and one polygon on each c2 cell.
When the allow_duplicate_output argument is false, which is the default setting, the
polygons of c1 and c2 that interact are leveled to TOP. These polygons are marked with a
green X in Figure 3-11.
Figure 3-11 allow_duplicate_output = false
TOP
c1 c1 c1 c1
X X X X
c2
X
c2
X
c2
See Also
level_edge()
level_to()
level_to_edge()
pull_down()
pull_down_edge()
level_edge()
The level_edge() function creates a copy of the input layer, where hierarchically
interacting data is moved up to a common point in the hierarchy. For edge layers, any
interaction (including point touch) is considered a hierarchical interaction.
Syntax
level_edge(
layer1 = edge_layer,
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge layer.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In the example shown in Figure 3-12, in_layer has TOP and X.
out_layer = level_edge(in_layer);
TOP
X
X
in_layer
(edge layer)
TOP
Cell boundary
X
X
out_layer
(edge layer)
TOP Cell boundary
See Also
level()
level_to()
level_to_edge()
pull_down()
pull_down_edge()
level_to()
The level_to() function creates a copy of the layer1 polygon layer where data that is
hierarchically interacting with data in the layer2 data layer is moved up to a common point
in the hierarchy. It also moves hierarchically interacting data within the layer1 polygon layer
to a common point. If both layers are polygon data, the definition of interacting is limited to
overlap and abutment. When layer2 is an edge layer, any interaction, including point touch,
is considered a hierarchical interaction.
Syntax
level_to(
layer1 = polygon_layer,
layer2 = data_layer,
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer that is leveled.
layer2
Required. Specifies the data layer to which the layer1 polygon layer is leveled.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In the example shown in Figure 3-13, the cell PROG_ROM is a holding cell that contains
one placement of the cell POL_CELL and one placement of the cell DIF_CELL. POL_CELL
contains only polygons from the poly layer and DIF_CELL contains only polygons from the
diff layer. The two cell placements overlap each other. Notice that some of the diff polygons
do not overlap poly polygons.
lvl_output = level_to(diff,poly);
PROG_ROM
POL_CELL DIF_CELL
PROG_ROM
POL_CELL DIF_CELL
This level_to() function creates an output layer, lvl_output, shown in Figure 3-14. Only
three of the input polygons in DIF_CELL overlap polygons in POL_CELL, so only three diff
polygons are leveled to the common ancestor. Three of the diff polygons remain in the cell
DIF_CELL for the lvl_output output layer.
poly
DIFF_CELL
PROG_ROM
DIF_CELL
See Also
level()
level_edge()
level_to_edge()
pull_down()
pull_down_edge()
level_to_edge()
The level_to_edge() function creates a copy of layer1 where data that is hierarchically
interacting with layer2 data is moved up to a common point in the hierarchy. It also moves
hierarchically interacting data within the layer1 layer to a common point. For edge layers,
any interaction (including point touch) is considered a hierarchical interaction.
Syntax
level_to_edge(
layer1 = edge_layer,
layer2 = data_layer,
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge layer that is leveled.
layer2
Required. Specifies the edge or polygon layer to which the layer1 edge layer is leveled.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Figure 3-15 shows an example of the level_to_edge() function.
out_layer = level_to_edge(in_layer1, in_layer2);
TOP
Input
TOP
X
X
in_layer1
(edge layer)
TOP in_layer2
(edge layer)
TOP
out_layer
(edge layer)
TOP
Cell boundary
See Also
level()
level_edge()
level_to()
pull_down()
pull_down_edge()
library()
The library() function registers a library for other functions, such as the assign()
function. You must use the appropriate arguments of the library() function for each input
layout format. Otherwise, the input layout file is not found and the run ends with an error.
The library() function defines the design library. Call it before calling assign functions. If
you are importing additional libraries, as opposed to merging additional libraries into the
main library using the merge_libraries argument, also call the library_import()
function in the OPTIONS section of the runset.
Note:
A runset cannot call both the library() and the library_create() functions, and
neither can be called more than one time.
Syntax
library(
library_name = "string",
format = GDSII | OASIS | MILKYWAY | OPENACCESS | NDM,
cell = "string",
library_path = "string", //optional
library_definition_file = "string", //optional
magnification_factor = double, //optional
merge_libraries = {{library_name = "string",
format = GDSII | OASIS,
layer_map_file = "string"}, ...}, //optional
golden_libraries = {{library_name = "string",
format = GDSII | OASIS}, ...} //optional
);
Returns
library or void
The library() function does not return a value when the merge_libraries argument is
used.
Arguments
library_name
Required. Specifies the path and file name for GDSII and OASIS formats; library name
for Milkyway, NDM, and OpenAccess formats.
Note:
The -i command-line option overrides this name. See the Command-Line Options
section in the “IC Validator Basics” chapter of the IC Validator User Guide for more
information.
A GDSII or OASIS file can be gzipped. The IC Validator tool automatically detects if a
GDSII or OASIS file is gzipped.
format
Required. Specifies the format of the input: GDSII, MILKYWAY, NDM, OASIS, or
OPENACCESS. See the ldt_list argument of assign functions for information about the
layer and datatype range limits.
Note:
The -f command-line option overrides this format. See the Command-Line Options
section in the “IC Validator Basics” chapter of the IC Validator User Guide for more
information.
cell
Required. Specifies the cell to be checked. This structure must be in the specified library.
Note:
The -c command-line option overrides this name. See the Command-Line Options
section in the “IC Validator Basics” chapter of the IC Validator User Guide for more
information.
By specifying -cell "*" you can run the IC Validator tool using the OASIS or GDSII
format without specifying the top cell. The tool finds the top cell in the database. If there
is more than one potential top cell, the IC Validator tool chooses the first one it finds in
the database and writes a warning message in the summary file. Do not use -cell "*"
in these situations:
❍ LVS runsets; that is, runsets with a call to the compare() function.
❍ Runsets that call the get_top_cell() function before the end of the ASSIGN
section.
❍ With the -ndg or -C command-line options.
❍ Runsets that set the select_window or exclude_window argument of the
incremental_options() function.
library_path
Required when the format argument is MILKYWAY or NDM. Specifies the path of the
parent directory for the Milkyway or NDM library. This file is not used for GDSII, OASIS,
or OpenAccess input.
library_definition_file
Required when the format argument is OPENACCESS. Specifies the library definition file
for the OpenAccess input database. This file is not used for GDSII, Milkyway, or OASIS
input.
magnification_factor
Optional. Scales data as it is read in. A magnification factor between 0.0 and less than
1.0 shrinks data. A magnification factor greater than 1.0 enlarges data. The default is 1.0
(no magnification).
merge_libraries
Optional. Specifies a list of the libraries that are merged. The merge_libraries
argument supports only the GDSII and OASIS formats, and all libraries must have the
same format as the main library. Cells with the same name are merged. The library()
function does not return a value when using the merge_libraries argument.
Note:
The -i command-line option overrides this list. See the Command-Line Options
section in the “IC Validator Basics” chapter of the IC Validator User Guide for more
information.
❍ library_name
Required. Specifies the path and file name for GDSII and OASIS formats.
❍ format
Required. Specifies the format of the library: GDSII or OASIS. This format must be the
same as the main library format.
❍ layer_map_file
Optional. Specifies the layer mapping file for this library. The file format is:
DstLayer[:DstDatatype] SrcLayer[:SrcDatatype]
Comments are specified with a semicolon. All text following the semicolon on the
current line is part of the comment.
For example, to map layer 5 to layer 35, datatype 2
35:2 5
golden_libraries
Optional. Specifies a list of “golden” libraries that the IC Validator tool can use when
performing geometric matches to determine which cells to select in the assign()
function. The golden_libraries argument supports only the GDSII and OASIS
formats.
❍ library_name. Required. Specifies the path and file name for a GDSII and OASIS
format library.
❍ format. Required. Specifies the format of the library: GDSII or OASIS. This format
must be the same as the main library format.
Note:
The library_import() function is not supported when this geometry-match flow is
active.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
Note: Reading an NDM database requires native licensing.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
library (
library_name = "/path/design.oasis",
format = OASIS,
cell = "chip"
);
See the gendev() function for an example with GDSII format and the
openaccess_options() function for an example with OpenAccess format.
See Also
assign()
get_top_cell()
library_create()
library_import()
library_create()
The library_create() function creates a one-cell library that has no data. This library is
internal to the IC Validator tool to be used during the run. This function allows you to create
a top-level holding cell. Each library_import() function call places its top cell under the
holding cell.
Note:
A runset cannot call both the library() and the library_create() functions, and
neither can be called more than one time.
Syntax
library_create(
cell = "string"
);
Returns
void
Arguments
cell
Required. Names the cell.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
See the Examples section of the library_import() function for more information.
See Also
library()
library_import()
library_import()
The library_import() function reads in the specified library and places its top cell under
the top cell of the design library defined by the library() or library_create() function.
You can call the library_import() function multiple times in a runset. Use this function to
• Read in multiple libraries and place them under a holding cell.
• Add a fill library to a design library. The top cell of the fill library is placed under the top
cell of the design library.
You can use the return value of this function and of the library() function in assign
functions.
Note:
If you use the library_import() function, you must use the libraries argument of an
assign function that is in the runset. (The assign(), assign_edge(), and
assign_text() functions have a libraries argument. Assign functions that support
OpenAccess do not have a libraries argument.)
Syntax
library_import(
library_name = "string",
format = GDSII | OASIS,
cell = "string",
magnification_factor = double, //optional
cell_prefix = "string", //optional
apply_prefix = LOWER_CELLS | ALL_CELLS, //optional
layer_map_file = "string" //optional
);
Returns
library
Arguments
library_name
Required. Specifies the path and file name for GDSII and OASIS formats.
Note:
A GDSII or OASIS file can be gzipped. The IC Validator tool automatically detects if a
GDSII or OASIS file is gzipped.
format
Required. Specifies the format of the input: GDSII or OASIS. See the ldt_list argument
of assign functions for information about the layer and datatype range limits.
cell
Required. Specifies the cell to be imported. This structure must be in the specified library.
magnification_factor
Optional. Scales data as it is read in. A magnification factor between 0.0 and less than
1.0 shrinks data. A magnification factor greater than 1.0 enlarges data. The default is 1.0
(no magnification).
cell_prefix
Optional. Specifies the prefix for the cells in this library.
Note:
If the runset calls the library() function, as opposed to the library_create()
function, then you should not use an empty cell_prefix string for any of the
library_import() functions calls unless you know that there are no naming
conflicts between any of the imported libraries and the main design library specified
in the library() function.
apply_prefix
Optional. Specifies if the cell_prefix is applied to only the cells below the top cell or to
all cells. The default is ALL_CELLS.
layer_map_file
Optional. Specifies the data layer mapping file for this library. The file format is:
DstLayer[:DstDatatype] SrcLayer[:SrcDatatype]
Comments are specified with a semicolon. All text following the semicolon on the current
line is part of the comment.
For example, to map layer 4, datatype 8 to layer 43, datatype 4
43:4 4:8
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
The following example shows the use of the library_import() function with the
library() function.
#include "icv.rh"
The following example shows using the library_import() function with the
library_create() function.
#include "icv.rh"
library_create("HOLD");
See Also
library()
library_create()
lvs_black_box_options()
The lvs_black_box_options() function defines which equivalence cells are black-box
cells. Any device and connection data contained within the black-box cell is ignored; only the
port connections of the black-box cells are checked. If a black-box cell exists in the
schematic or layout, it is maintained during the compare process.
This function must be called before assign functions.
Note:
You can use the -e command-line option to add equivalence options that you have
defined in a separate file. See the Command-Line Options section in the “IC Validator
Basics” chapter of the IC Validator User Guide for more information.
Syntax
lvs_black_box_options(
equiv_cells = {{schematic_cell
"string", =
layout_cell =
"string"}, ...},
equate_ports = {{schematic_port
"string", =
layout_port =
"string"}, ...},
//optional
remove_schematic_ports = {"string", ...}, //optional
remove_layout_ports = {"string", ...}, //optional
schematic_swappable_ports = {{"string", ...}, ...} //optional
);
Returns
void
Arguments
equiv_cells
Required. Lists the schematic and layout cell name pairs. If only one cell name of a cell
pair is specified, both cell names are assumed to be the same. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
equate_ports
Optional. Lists the schematic and layout port pairs that determine the port
correspondence between the schematic and layout cells. These pairs are treated as if
they compare. Ports not listed are matched by name. By default, the IC Validator tool
matches all ports by name.
remove_schematic_ports
Optional. Specifies the schematic ports to be removed. Use this argument to list the ports
in the schematic netlist that do not have an equivalent port in the layout netlist. The
IC Validator tool matches all other ports with the same name. You can use the "*"
metacharacter in the list of ports.
remove_layout_ports
Optional. Specifies the layout ports to be removed. Use this argument to list the ports in
the layout netlist that do not have an equivalent port in the schematic netlist. The
IC Validator tool matches all other ports with the same name. You can use the "*"
metacharacter in the list of ports.
The following example uses multiple metacharacters. Ports with names like
floatingnet_1_fill_1, floatingnet_1_fill_2, and floatingnet_2_fill_1 are removed from
black-box cells during the compare operation.
remove_layout_ports = {"floatingnet_*_fill_*"}
schematic_swappable_ports
Optional. Lists the port names that are treated as being logically equivalent for
comparison purposes at higher levels of the design hierarchy.
Description
Equivalence and Black-Box Conflict Behavior
The IC Validator tool handles equivalence and black-box conflict behavior by using the
following priority setting rules when input settings are in conflict.
• Full name wins wildcard
For example:
Schematic side has cells A1, D1
Layout side has cells B1, C1
Table 3-2 Priority Rule: Full Name Wins Wildcard
equiv_options({"A*","C*"}) equiv(D1,B1)
equiv_options({"A*","B*"}) equiv(A1,C1)
equiv_options({"D1","B1"})
lvs_black_box_options({"A*","C*"}) black_box(D1,B1)
lvs_black_box_options({"A*","B*"}) black_box(A1,C1)
lvs_black_box_options({"D1","B1"})
black_box_options({"A*","B*"}) equiv(A1,B1)
equiv_options({"A1","B1"})
lvs_black_box_options({"D1","C1"}) black_box(D1,C1)
equiv_options({"D*","C*"})
lvs_black_box_options({"A1","B1"}) black_box(A1,B1)
equiv_options({"A1","C1"})
lvs_black_box_options({"D*","C*"}) black_box(D1,C1)
equiv_options({"A*","C*"})
• equiv_options(full name)
• lvs_black_box_options(wildcard)
• equiv_options(wildcard)
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
match()
lvs_options()
The lvs_options() function generates user-intended and system-generated equivalence
cell pairs. This functionality generates equivalences without the use of the
equiv_options() function.
The lvs_options() function provides two arguments to separately control the generation
of user-intended and system-generated equivalences.
• A user-intended equivalence cell pairing is a pairing that you intend to be logically
equivalent in the design. You want to see errors for user-intended equivalence cell
pairings reported in all compare error outputs to enable your design debugging.
• A system-generated equivalence cell pairing is heuristically generated by the
IC Validator tool to improve the hierarchical performance of the compare engine. You do
not necessarily intend this pairing to be logically equivalent. As such, you do not want to
see errors for system-generated equivalence cell pairings in standard compare error
outputs. Furthermore, system-generated equivalence cell pairings that fail the compare
operation are exploded when using the compare(action_on_error=NO_EXPLODE)
setting, thereby enabling the compare run to continue as if the pairing never existed.
Syntax
lvs_options(
generate_user_equivs = FULL_NAME_CASE_SENSITIVE |
FULL_NAME_CASE_INSENSITIVE |
SCHEMATIC_CELL_NAME |
NONE, //optional
generate_system_equivs = true | false, //optional
device_extraction_preserved_cells = {"string", ...}, //optional
spice_multiplier_names = {"string", ...}, //optional
spice_device_multipliers = {
{device_multiplier_names = {"string", ...},
device_type = spice_device_type,
device_names = {"string", ...}}, ...}, //optional
extract_devices_in_black_box_cells = true | false //optional
);
Returns
void
Arguments
generate_user_equivs
Optional. Specifies the user-intended equivalence cell pairings for cells with the same
name. Those cells are not exploded. The default is NONE.
❍ FULL_NAME_CASE_SENSITIVE. Generates equivalence cell pairings for all cell name
pairings having identical case-sensitive matching strings, in addition to those
equivalence cell pairings generated by equiv_options() and
lvs_options(generate_system_equivs).
generate_system_equivs
Optional. Enables the generation of system-generated equivalence cell pairings.
System-generated equivalence cell pairings are generated heuristically according to cell
names and instance counts within the cells. Cells with the same name might be explode
to improve the overall runtime. The default is true.
❍ true. Generates system-only equivalence cell pairings.
❍ false. Does not generate system-only equivalence cell pairings that have no
runset-level control options; an equivalent option must be in the runset.
device_extraction_preserved_cells
Optional. Specifies parameterized cells (pcells) to preserve in the device extraction flow.
If you select the dual-hierarchy flow, the preserved cell setting is applied in only the
compare pass. When extracting simulation properties, device extraction levels the
device inside the preserved cell to ensure property correctness.
A preserved cell is a parameterized cell or pcell that is placed in the layout to represent
a device. These device cells are pre-characterized and are not equiv points. The
purpose of this argument is to maintain the device within the cell even if there is cross
hierarchy interaction between the device body, terminal, and the processing layers. (The
processing layers are specified with the processing_layer_hash argument of the
device configuration functions.)
The typical application for this argument is a flow in which parameterized cells (pcells)
are specified as preserved cells in the StarRC tool with the SKIP_PCELLS command.
Note:
This option is not intended to be a “brute force” mechanism to prevent devices from
leveling out of equivalence points, nor is this option intended to be used in lieu of
using the dual-hierarchy flow for preserving LVS netlist hierarchy for compare. Do not
declare a cell as a preserved device cell unless all body, terminal, and recognition
and processing layers for the devices are defined within the preserved cell prior to
calling the extract_devices() function. Otherwise, if some of the polygons for a
device in the preserved cell reside in hierarchies outside of the preserved cell,
including other preserved cells, the device might not be recognized correctly or the
property values might be incorrect.
You select the dual-hierarchy flow by setting the dual_hierarchy_extraction
argument of the init_device_matrix() function to true.
See the Examples section on page 3-59 for more information.
spice_multiplier_names
Optional. Specifies multiplier factors that can be used in the LVS flow. The names can
consist of letters and digits. The initial character must be a letter, and the letters are
case-insensitive. The length of each multipliers must be less than or equal to 1024.
This argument can be used with or without the -sp-multiplier command-line option of
NetTran. See the -sp-multiplier command-line option in the Command-Line Syntax
for NetTran section in the “Netlist Formats” section of the IC Validator LVS User Guide
for more information.
spice_device_multipliers
Optional. Specifies device-specific multipliers used to indicate parallel device instances.
❍ device_multiplier_names. Specifies multiplier factors that can be used with device
types specified with the device_type option. The multiplier names must be specified
with the spice_multiplier_names argument.
❍ device_type. Specifies the SPICE device type where the device specific multipliers
are applied. Table 3-4 lists the SPICE device types.
Table 3-4 SPICE Device Types
the “Device Names” section of the “Strings and Names” section of Appendix A,
“Runset Basics.”
extract_devices_in_black_box_cells
Optional. Specifies if device extraction processes black-box cells. The default is true.
❍ true. Extracts devices in black-box cells.
❍ false. Does not extract devices in black-box cells. The netlist outputs a black box as
an empty cell.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
The following examples illustrate how the device_extraction_preserved_cells
argument preserves cells.
As shown in Figure 3-16, the IC Validator tool does not level a device body polygon layer out
of a preserved cell even if there is a cross interaction between the body and terminal or
processing layer polygons located in the parent cell.
Figure 3-16 shows hierarchical device extraction when there are two placements of a cell,
“MY_CELL,” with an instance-specific interaction on the “Term2” polygon from a polygon in
the parent cell.
Figure 3-16 Preserved Cells in Hierarchy Device Extraction
❍ Device extraction levels this device to the parent of MY_CELL, and it extracts this
device by Term1 and Term2, including the Term2 data from the parent cell.
• MY_CELL is a preserved cell:
❍ Device extraction extracts this device in MY_CELL, and it uses only Term1 and Term2
polygons within MY_CELL to form this device.
Figure 3-17 shows the processing layer and property calculations for the preserved cell.
Shapes with dashed outlines are in the top cell. The brown layer is the WELL layer and is in
both the top cell and MY_CELL. The yellow layer is DIFFUSION and the blue layer is
POLYSILICON.
Figure 3-17 Processing Layer and Property Calculations for Preserved Cells
Notice that for the device “T”, which is not in a preserved cell, the polygons in MY_CELL are
always considered whether MY_CELL is preserved or not. In other words, measurements
made from outside a preserved cell can extend within a preserved cell, but measurements
made from within a preserved cell will not extend beyond the preserved cell boundary.
The layer for body formation (yellow) and terminal formation (blue) are both in
MY_CELL_SUB, as shown in Figure 3-18. The blue dashed layer is the same layer used for
terminal formation and is in cell MY_CELL.
• MY_CELL is not a preserved cell:
❍ Device extraction levels and extracts this device in MY_CELL.
• MY_CELL is a preserved cell:
❍ Device extraction still levels and extracts this device in MY_CELL. Devices can be
leveled out of non-preserved child cells, such as MY_SUB_CELL and extracted in
parent preserved cells.
The body and recognition layers must not overlap across the boundaries of the preserved
cells, as it affects the number of extracted devices. See Figure 3-19.
The layer for body formation (yellow) and terminal formation (blue) are both in MY_SUB.
The blue dashed layer is the same layer used for terminal formation and is in the parent cell.
• MY_CELL is not a preserved cell:
❍ Device extraction levels and extracts one device in the parent cell.
• MY_CELL is a preserved cell:
❍ Device extraction does not level the device out of MY_CELL. Two devices are
extracted. One device is extracted in MY_CELL, and another small device is
extracted in the parent cell where the dashed blue and yellow polygons overlap.
See Also
compare()
equiv_options()
map_capacitor()
The map_capacitor() function is used in netlist-versus-netlist compare runsets to specify
characteristics of capacitor device instances and to provide device mappings between the
two netlists being compared. In the netlist-versus-netlist flow, references to the schematic
refer to the netlist imported by the schematic() function, while references to the layout refer
to the netlist imported by the read_layout_netlist() function.
Syntax
map_capacitor(
state =
compare_state,
device_name =
"string",
terminal_a =
"string", //optional
terminal_b =
"string", //optional
optional_pins =
{{pin_name = "string",
pin_compared = true | false},
...}, //optional
swappable_pins = {{"string", ...}, ...}, //optional
schematic_devices = {{device_name = "string",
terminal_a = "string",
terminal_b = "string",
optional_pins = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
swappable_properties = {{pin_name = "string",
property_list = {"string", ...}},
...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function.
device_name
Required. Specifies the capacitor in the layout netlist.
terminal_a
Optional. Specifies terminal "a" of the device in the layout netlist. The default is "A".
terminal_b
Optional. Specifies terminal "b" of the device in the layout netlist. The default is "B".
optional_pins
Optional. Lists additional pins of the device in the layout netlist.
❍ pin_name. Optional. Specifies the pin. The default is "BULK".
swappable_pins
Optional. Lists the pins that can be swapped for a successful comparison with the
schematic device. By default, pins “A” and “B” can be swapped. Use an empty list to
disable swapping of all pins:
swappable_pins = {}
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals used for comparison.
By default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
map_capacitor() function.
■ The schematic pin names do not match the pin names provided in the
terminal_a, terminal_b, or optional_pins arguments of the
map_capacitor() function.
❍ terminal_a. Optional. Specifies the first terminal of the device. The default is "A".
❍ terminal_b. Optional. Specifies the second terminal of the device. The default
is "B".
❍ optional_pins. Optional. Specifies the schematic pins that correspond to the
optional_pins list of structures argument of the map_capacitor() function.
❍ ignore_pins. Optional. Ignores the specified schematic pins during pin connectivity
comparison between the layout and schematic. If a pin name is listed that matches a
pin name defined by the optional_pins argument, that pin is ignored both in the
layout and schematic. This behavior is similar to the pin_compared option of the
optional_pins argument of the map_capacitor() function.
If the schematic device has an optional pin that does not correspond to any pin in the
map_capacitor() function, that pin can be specified with the ignore_pins.
Otherwise, this optional pin produces an error during the compare operation.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
read_layout_netlist()
map_gendev()
The map_gendev() function is used in netlist-versus-netlist compare runsets to specify
characteristics of generic device instances and to provide device mappings between the two
netlists being compared. In the netlist-versus-netlist flow, references to the schematic refer
to the netlist imported by the schematic() function, while references to the layout refer to
the netlist imported by the read_layout_netlist() function.
Syntax
map_gendev(
state = compare_state,
device_name = "string",
terminals = {{pin_name = "string",
pin_compared = true | false}, ...},
swappable_pins = {{"string", ...}, ...}, //optional
schematic_devices = {{device_name = "string",
terminals = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
swappable_properties = {{pin_name = "string",
property_list = {"string", ...}},
...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function.
device_name
Required. Specifies the generic device in the layout netlist.
terminals
Required. Lists the pins that define the terminals.
❍ pin_name. Required. Specifies the pin name.
■ false. The pin is discarded for schematic to layout comparison. This setting is
useful when a layout netlist instance has a bulk pin but the corresponding
schematic instance does not.
swappable_pins
Optional. Specifies lists pins that can be swapped for a successful comparison with the
schematic device. By default, no pins can be swapped.
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals used for comparison.
By default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
map_gendev() function.
■ The schematic pin names do not match the pin names provided in the terminals
argument of the map_gendev() function.
❍ device_name. Required. Specifies the schematic device.
❍ ignore_pins. Optional. Ignores the specified schematic pins during pin connectivity
comparison between the layout and schematic. If a pin name is listed that matches a
pin name defined by the terminals list, that pin is ignored both in the layout and
schematic. This behavior is similar to the pin_compared option of the terminals
argument of the map_gendev() function.
If the schematic device has an optional pin that does not correspond to any pin in the
map_gendev() function, that pin can be specified with the ignore_pins. Otherwise,
this optional pin produces an error during the compare operation.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
read_layout_netlist()
map_inductor()
The map_inductor() function is used in netlist-versus-netlist compare runsets to specify
characteristics of inductor device instances and to provide device mappings between the
two netlists being compared. In the netlist-versus-netlist flow, references to the schematic
refer to the netlist imported by the schematic() function, while references to the layout refer
to the netlist imported by the read_layout_netlist() function.
Syntax
map_inductor(
state =
compare_state,
device_name =
"string",
terminal_a =
"string", //optional
terminal_b =
"string", //optional
optional_pins =
{{pin_name = "string",
pin_compared = true | false},
...}, //optional
swappable_pins = {{"string", ...}, ...}, //optional
schematic_devices = {{device_name = "string",
terminal_a = "string",
terminal_b = "string",
optional_pins = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
swappable_properties = {{pin_name = "string",
property_list = {"string", ...}},
...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function.
device_name
Required. Specifies the inductor in the layout netlist.
terminal_a
Optional. Specifies terminal "a" of the device in the layout netlist. The default is "A".
terminal_b
Optional. Specifies terminal "b" of the device in the layout netlist. The default is "B".
optional_pins
Optional. Lists additional pins of the device in the layout netlist.
❍ pin_name. Optional. Specifies the pin name. The default is "BULK".
swappable_pins
Optional. Lists the pins that can be swapped for a successful comparison with the
schematic device. By default, pins “A” and “B” can be swapped. Use an empty list to
disable swapping of all pins:
swappable_pins = {}
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals used for comparison.
By default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
map_inductor() function.
■ The schematic pin names do not match the pin names provided in the
terminal_a, terminal_b, or optional_pins arguments of the map_inductor()
function.
❍ device_name. Required. Specifies the schematic device.
❍ terminal_a. Optional. Specifies the first terminal of the device. The default is "A".
❍ terminal_b. Optional. Specifies the second terminal of the device. The default
is "B".
❍ optional_pins. Optional. Specifies the schematic pins that correspond to the
optional_pins list of structures argument.
❍ ignore_pins. Optional. Ignores the specified schematic pins during pin connectivity
comparison between the layout and schematic. If a pin name is listed that matches a
pin name defined by the optional_pins argument, that pin is ignored both in the
layout and schematic. This behavior is similar to the pin_compared option of the
optional_pins argument of the map_inductor() function.
If the schematic device has an optional pin that does not correspond to any pin in the
map_inductor() function, that pin can be specified with the ignore_pins.
Otherwise, this optional pin produces an error during the compare operation.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
read_layout_netlist()
Syntax
map_nmos(
state =
compare_state,
device_name =
"string",
drain =
"string", //optional
gate =
"string", //optional
source =
"string", //optional
optional_pins =
{{pin_name = "string",
pin_compared = true | false},
...}, //optional
swappable_pins = {{"string", ...}, ...}, //optional
schematic_devices = {{device_name = "string",
drain = "string",
gate = "string",
source = "string",
optional_pins = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
swappable_properties = {{pin_name = "string",
property_list = {"string", ...}},
...} //optional
);
map_pmos(
state = compare_state,
device_name = "string",
drain = "string", //optional
gate = "string", //optional
source = "string", //optional
optional_pins = {{pin_name = "string",
pin_compared = true | false},
...}, //optional
swappable_pins = {{"string", ...}, ...}, //optional
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function.
device_name
Required. Specifies the MOS device in the layout netlist.
drain
Optional. Specifies the drain of the device in the layout netlist. The default is "DRN".
gate
Optional. Specifies the gate of the device in the layout netlist. The default is "GATE".
source
Optional. Specifies the source in the layout netlist. The default is "SRC".
optional_pins
Optional. Lists additional pins of the device in the layout netlist.
❍ pin_name. Optional. Specifies the pin name. The default is "BULK".
■ false. The pin is discarded for schematic to layout comparison. This setting is
useful when a layout netlist instance has a bulk pin but the corresponding
schematic instance does not.
swappable_pins
Optional. Lists the pins that can be swapped for a successful comparison with the
schematic device. By default, pins “SRC” and “DRN” can be swapped. Use an empty list
to disable swapping of all pins:
swappable_pins = {}
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals used for comparison.
By default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
map_nmos() and map_pmos() functions.
■ The schematic pin names do not match the pin names provided in the drain,
gate, source, or optional_pins arguments of the map_nmos() and map_pmos()
functions.
❍ device_name. Required. Specifies the schematic device.
❍ drain. Optional. Specifies the first terminal of the device. The default is "DRN".
❍ gate. Optional. Specifies the second terminal of the device. The default is "GATE".
❍ source. Optional. Specifies the source of the device. The default is "SRC".
ignore_pins. Otherwise, this optional pin produces an error during the compare
operation.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped.
The default is
{{"SRC",{"AS","PS","NRS"}},{"DRN",{"AD","PD","NRD"}}}.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
read_layout_netlist()
Syntax
map_np(
state =
compare_state,
device_name =
"string",
anode =
"string", //optional
cathode =
"string", //optional
optional_pins =
{{pin_name = "string",
pin_compared = true | false},
...}, //optional
swappable_pins = {{"string", ...}, ...}, //optional
schematic_devices = {{device_name = "string",
anode = "string",
cathode = "string",
optional_pins = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
swappable_properties = {{pin_name = "string",
property_list = {"string", ...}},
...} //optional
);
map_pn(
state = compare_state,
device_name = "string",
anode = "string", //optional
cathode = "string", //optional
optional_pins = {{pin_name = "string",
pin_compared = true | false},
...}, //optional
swappable_pins = {{"string", ...}, ...}, //optional
schematic_devices = {{device_name = "string",
anode = "string",
cathode = "string",
optional_pins = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function.
device_name
Required. Specifies the diode in the layout netlist.
anode
Optional. Specifies the anode of the device in the layout netlist. The default is "ANODE".
cathode
Optional. Specifies the cathode of the device in the layout netlist. The default is
"CATHODE".
optional_pins
Optional. Lists additional pins for the device in the layout netlist.
❍ pin_name. Optional. Specifies the pin. The default is "BULK".
swappable_pins
Optional. Lists the pins that can be swapped for a successful comparison with the
schematic device. By default, no pins can be swapped.
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals used for comparison.
By default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
map_np() and map_pn() functions.
■ The schematic pin names do not match the pin names provided in the anode,
cathode, or optional_pins arguments of the map_np() and map_pn() functions.
❍ anode. Optional. Specifies the anode terminal of the device. The default is "ANODE".
❍ cathode. Optional. Specifies the cathode terminal of the device. The default is
"CATHODE".
❍ ignore_pins. Optional. Ignores the specified schematic pins during pin connectivity
comparison between the layout and schematic. If a pin name is listed that matches a
pin name defined by the optional_pins argument, that pin is ignored both in the
layout and schematic. This behavior is similar to the pin_compared option of the
optional_pins argument of the map_np() and map_pn() functions.
If the schematic device has an optional pin that does not correspond to any pin in the
map_np() and map_pn() functions, that pin can be specified with the ignore_pins.
Otherwise, this optional pin produces an error during the compare operation.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
read_layout_netlist()
Syntax
map_npn(
state =
compare_state,
device_name =
"string",
collector =
"string", //optional
base =
"string", //optional
emitter =
"string", //optional
optional_pins =
{{pin_name = "string",
pin_compared = true | false},
...}, //optional
swappable_pins = {{"string", ...}, ...}, //optional
schematic_devices = {{device_name = "string",
collector = "string",
base = "string",
emitter = "string",
optional_pins = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
swappable_properties = {{pin_name = "string",
property_list = {"string", ...}},
...} //optional
);
map_pnp(
state = compare_state,
device_name = "string",
collector = "string", //optional
base = "string", //optional
emitter = "string", //optional
optional_pins = {{pin_name = "string",
pin_compared = true | false},
...}, //optional
swappable_pins = {{"string", ...}, ...}, //optional
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function.
device_name
Required. Specifies the bipolar transistor in the layout netlist.
collector
Optional. Specifies the collector of the device in the layout netlist. The default is "COLL".
base
Optional. Specifies the base of the device in the layout netlist. The default is "BASE".
emitter
Optional. Specifies the emitter of the device in the layout netlist. The default is "EMIT".
optional_pins
Optional. Lists additional pins of the device in the layout netlist.
❍ pin_name. Optional. Specifies the pin. The default is "BULK".
■ false. The pin is discarded for schematic to layout comparison. This setting is
useful when a layout netlist instance has a bulk pin but the corresponding
schematic instance does not.
swappable_pins
Optional. Lists the pins that can be swapped for a successful comparison with the
schematic device. By default, no pins can be swapped.
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals used for comparison.
By default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
map_npn() and map_pnp() functions.
■ The schematic pin names do not match the pin names provided in the collector,
base, emitter, or optional_pins arguments of the map_npn() and map_pnp()
functions.
❍ device_name. Required. Specifies the schematic device.
❍ collector. Optional. Specifies the collector terminal of the device. The default is
"COLL".
❍ base. Optional. Specifies the base terminal of the device. The default is "BASE".
❍ emitter. Optional. Specifies the emitter terminal of the device. The default is "EMIT".
ignore_pins. Otherwise, this optional pin produces an error during the compare
operation.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
read_layout_netlist()
map_resistor()
The map_resistor() function is used in netlist-versus-netlist compare runsets to specify
characteristics of resistor device instances and to provide device mappings between the two
netlists being compared. In the netlist-versus-netlist flow, references to the schematic refer
to the netlist imported by the schematic() function, while references to the layout refer to
the netlist imported by the read_layout_netlist() function.
Syntax
map_resistor(
state =
compare_state,
device_name =
"string",
terminal_a =
"string", //optional
terminal_b =
"string", //optional
optional_pins =
{{pin_name = "string",
pin_compared = true | false},
...}, //optional
swappable_pins = {{"string", ...}, ...}, //optional
schematic_devices = {{device_name = "string",
terminal_a = "string",
terminal_b = "string",
optional_pins = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
swappable_properties = {{pin_name = "string",
property_list = {"string", ...}},
...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function.
device_name
Required. Specifies the resistor in the layout netlist.
terminal_a
Optional. Specifies terminal "a" of the device in the layout netlist. The default is "A".
terminal_b
Optional. Specifies terminal "b" of the device in the layout netlist. The default is "B".
optional_pins
Optional. Lists additional pins of the device in the layout netlist.
❍ pin_name. Optional. Specifies the pin. The default is "BULK".
swappable_pins
Optional. Specifies lists pins that can be swapped for a successful comparison with the
schematic device. By default, pins “A” and “B” can be swapped. Use an empty list to
disable swapping of all pins:
swappable_pins = {}
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals for comparison. By
default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
map_resistor() function.
■ The schematic pin names do not match the pin names provided in the
terminal_a, terminal_b, or optional_pins arguments of the map_resistor()
function.
❍ device_name. Required. Specifies the schematic device.
❍ terminal_a. Optional. Specifies the first terminal of the device. The default is "A".
❍ terminal_b. Optional. Specifies the second terminal of the device. The default
is "B".
❍ optional_pins. Optional. Specifies the schematic pins that correspond to the
optional_pins list of structures argument of the map_resistor() function.
❍ ignore_pins. Optional. Ignores the specified schematic pins during pin connectivity
comparison between the layout and schematic. If a pin name is listed that matches a
pin name defined by the optional_pins argument, that pin is ignored both in the
layout and schematic. This behavior is similar to the pin_compared option of the
optional_pins argument of the map_resistor() function.
If the schematic device has an optional pin that does not correspond to any pin in the
map_resistor() function, that pin can be specified with the ignore_pins.
Otherwise, this optional pin produces an error during the compare operation.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
read_layout_netlist()
marker_merge()
The optional marker_merge() function converts a marker layer to a polygon layer.
A marker layer is returned by the pattern_learn() and pattern_match() functions, and
can be processed only by the marker_merge(), select_marker_by_string_property(),
select_marker_by_double_property(), drc_feature_marker(), write_gds(), and
write_oasis() functions.
Syntax
marker_merge(
layer1 = marker_layer,
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the marker layer from which polygons are selected.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
pattern_learn()
pattern_match()
match()
The optional match() function defines rules for matching equivalence cells, such as
cell-level port swappability. You can also use this function to configure errors and warnings,
such as for texted port matching.
Syntax
match(
state =
compare_state,
detect_permutable_ports =
true | false, //optional
match_by_net_name =
true | false, //optional
match_condition =
{condition = ERROR | WARNING | NONE,
...}, //optional
no_explode_condition = NONE | PROPERTY_ERRORS_ONLY |
PORT_TOPOLOGY_MATCHED |
PORT_TEXT_MATCHED, //optional
report_black_box_errors =
{extra_layout_ports = NONE | WARNING | ERROR_NO_ABORT | ERROR,
untexted_layout_ports = NONE | WARNING | ERROR_NO_ABORT | ERROR,
extra_schematic_ports = NONE | WARNING | ERROR_NO_ABORT | ERROR},
//optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. The information from the
match() function is added.
detect_permutable_ports
Optional. Specifies how to handle independent or dependent swappability without
additional input. When set to true, the IC Validator tool extracts symmetries for the cell
to which it is applied. It does not affect whether the cells compare. This information is
applied in determining equivalence for the parent cell. Therefore, when the
detect_permutable_ports argument is specified globally, it does not operate on the
top-level cell. To extract symmetries for the top-level cell, you must explicitly invoke the
match() function using the detect_permutable_ports argument for the top-level cell.
The default is false.
match_by_net_name
Optional. Specifies if text is used to resolve swappability. The default is false.
❍ true. Uses text to resolve port swappability.
match_condition
Optional. Specifies the conditions that can be reported as errors or warnings, or not
reported. Table 3-5 lists the conditions along with the default setting of each condition.
Table 3-5 Match Conditions
equate_by_net_name_fails The net name, found in both the schematic and WARNING
layout, was not used as an initial match reference
point because the number of connections to the net
is not the same between the two cells. Nets with
different numbers of connections never match. This
match condition is checked when the
match_by_net_name argument of the match()
function is true.
equate_nets_fails The net pair set in the equate_nets argument of the WARNING
equiv_options() function was not used as an initial
match reference point because the number of
connections to the net is not the same between the
two cells. Nets with different numbers of connections
never match.
missing_black_box_cell The cell specified in the black-box file does not exist WARNING
in the corresponding netlist. The black-box cell is
ignored.
missing_black_box_port The port specified for a black-box cell does not exist WARNING
on that cell in the netlist.
empty_cell_not_defined_as_d Empty cells that are not defined as a device are NONE
evice reported.
properties_contradict_conne The external gate connections and the inner device NONE
ctions properties are not consistent between two schematic
and layout composite devices.
nets_matched_with_different Schematic and layout nets with the same names NONE
_name were matched but not to each other. Normally, text in
the layout database matches with corresponding
names in the schematic database.
Note:
For a real texted net or a compound that contains
one or more text nets, there must be at least one
common text name in between the text nets to
PASS the name checking phase.
layout_ports_without_name For cells below the top cell, reports all ports in the NONE
layout that do not have text. No messages are
written for untexted ports that occur on the top cell
unless the top_layout_ports_without_name
condition is also specified.
top_layout_ports_without_na For the top cell, reports all ports in the layout that do NONE
me not have text. No messages are output for untexted
ports that occur within cells beneath the top cell
unless the layout_ports_without_name condition
is also specified.
port_net_match_non_port_net For cells below the top cell, it reports any layout port NONE
nets that are matched to nets that are not port nets in
the schematic or vice versa. No messages are
written for mismatches that occur on top cell nets
unless both
top_schematic_port_net_match_non_port_net
and top_layout_port_net_match_non_port_net
conditions are also specified.
top_schematic_port_net_matc For the top cell, reports any schematic port nets that NONE
h_non_port_net are matched to nets that are not port nets in the
layout. No messages are written for mismatches that
occur within cells beneath the top cell unless the
port_net_match_non_port_net condition is also
specified.
top_layout_port_net_match_n For the top cell, reports any layout port nets that are NONE
on_port_net matched to nets that are not port nets in the
schematic. No messages are written for mismatches
that occur within cells beneath the top cell unless the
port_net_match_non_port_net condition is also
specified.
ports_matched_with_differen For cells below the top cell, reports any texted port NONE
t_name nets in the layout that match port nets having
different net names in the schematic. No messages
are written for mismatches that occur on top cell
ports unless the
top_ports_matched_with_different_name
condition is also specified.
Note:
For a real texted net or a compound that contains
one or more text nets, there must be at least one
common text name between the text nets to
PASS the name checking phase.
top_ports_matched_with_diff For the top cell, reports any texted port nets in the NONE
erent_name layout that match port nets having different net
names in the schematic. No messages are written
for mismatches that occur within cells beneath the
top cell unless the
ports_matched_with_different_name condition is
also specified.
That is, when either net, from schematic or layout, is
not texted, this condition does not report a difference.
For example, these names result in a reported error:
• Schematic net name is “A” and layout net name is
“B”.
These names result in a clean report:
• Schematic net name is “A” and layout net name is
“A”.
These names result in a clean report because the
names are not checked:
• Schematic net name is “A” and layout net name is
a non-text name, N_2.
• Schematic net name is a non-text name, N_3,
and layout net name is “B”.
See the layout_ports_without_name and
top_layout_ports_without_name conditions for
more information.
Note:
For a real texted net or a compound that contains
one or more text nets, there must be at least one
common text name between the text nets to
PASS the name checking phase.
top_schematic_ports_matched For the top cell, reports all schematic ports which NONE
_with_different_or_missing_ match to different text and untext layout ports.
name Schematic generated ports are excluded
one_connection_non_port_net The indicated net contains only one connection, and NONE
the net is not a port of the cell. This condition
indicates that the net is dangling because it only
connects to a single device pin.
no_explode_condition
Optional. Determines if this equivalence is retained as a device when comparing its
parent equivalence. The default is NONE.
❍ NONE. Retains only compare-clean equivalences.
❍ PROPERTY_ERRORS_ONLY. Retains the equivalence only if all nodes match and there
is a property error.
❍ PORT_TOPOLOGY_MATCHED. Retains if port nets match topologically, thus checking to
ensure that all port connections match.
❍ PORT_TEXT_MATCHED. Retains only matching text and port counts. The port nets do
not need to match topologically.
report_black_box_errors
Optional. Determines how the IC Validator tool behaves when cells are treated as black
boxes during LVS compare. You can change the messages or errors generated when
extra ports are found on black-box structures in the layout or schematic netlist, and you
have additional control when black boxes have extra ports that are not texted.
❍ extra_layout_ports. Applies only to texted nets. The default is ERROR.
❍ ERROR_NO_ABORT. Ignores any extra ports. At the top level, however, the design fails
LVS compare because extra ports were found on LVS black-box structures. This
option you to compare the design but be alerted that you need to investigate why
extra ports are being formed on the black boxes. The log files give the error
information:
■ The cell.LVS_ERRORS file shows that the design failed.
■ In the first priority cells, any cell that contained a black-box cell with extra ports is
be listed. The error message tells you to check the black-box cells placed in the
equivalence point and to check the extra ports on the cell in the lvs.log file.
■ The sum.cell.cell file shows black-box cells inside of an equivalence point that had
extra ports. The error summary shows the number of black-box cells that had
extra ports.
■ In the cell_lvs.log file, for each equivalence point that has black-box cells with
extra ports, a message says that the equivalence point has black-box cells with
extra ports.
❍ ERROR. If extra ports are found, writes an error to the cell_lvs.log file and the run stops.
equiv_cells
Optional. Specifies schematic and layout cell name pairs for which the match() function
applies. You must specify the equiv_cells pairs in the equiv_options() function
before calling the match() function. If only one cell name in the pair is specified, the
names are assumed to be the same.
Note:
The match() instruction is observed only when comparing each listed equivalence
cell pair. If an equivalence cell pair is exploded into the parent equivalence cell pair
while comparing the parent, the match() instruction is discarded for the content of
the exploded cell.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
The following is an example of using the match()function.
match(state = my_compare_state
match_condition = {
ports_matched_with_different_name = ERROR,
nets_matched_with_different_name = ERROR,
property_mismatch = ERROR
}
);
In the following example, all black-box port names are matched automatically. However, for
any extra ports in the layout, texted or untexted, warnings are generated.
match(
report_black_box_errors = {
extra_layout_ports = WARNING,
untexted_layout_ports = WARNING
}
);
See Also
compare()
init_compare_matrix()
merge_parallel()
The merge_parallel() function defines the criteria for merging devices connected in
parallel during the compare operation.
This function must be called before the compare() function. See Chapter 7, “Compare
Functions Basics” in the IC Validator LVS User Guide for more information about
complementary functions and precedence rules.
Syntax
merge_parallel(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...}, //optional
exclude_tolerances = {{property = "string",
tolerance = doubleconstraint,
tolerance_type = RELATIVE | ABSOLUTE},
...}, //optional
exclude_function = "string", //optional
property_functions = {{property_function = "string",
property = "string"}, ...}, //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. The information from the
merge_parallel() function is added.
device_type
Required. Specifies the device type.
device_names
Optional. Specifies the layout devices that are merged. Each device must match a device
specified in a device_name argument of a device configuration function.
Only devices with a matching name are merged.
exclude_tolerances
Optional. Lists the tolerance settings that exclude candidate devices from being merged
based on the property values of the devices.
❍ property. Required. Specifies the property name.
❍ tolerance. Optional. Specifies the tolerance. The property option is checked for
violations based on this tolerance. The tolerance must be specified as a range. The
tolerance_type option specifies if the tolerance is a percentage (default) or
absolute value. The default is [-10,+10].
The minimum resolution allowed for tolerance checking is as follows:
■ When schematic_property !=0, the minimum resolution value is
absolute_value(schematic_property*1e-6)
If the specified tolerance range is less than this minimum value, for example, [-0,0],
the property option is checked for violations according to the minimum resolution.
❍ tolerance_type. Optional. Checks property tolerances based on a relative or
absolute property difference. The default is RELATIVE.
■ RELATIVE. Specifies that tolerances are checked based on a percentage
difference.
■ ABSOLUTE. Specifies that tolerances are checked based on an absolute value
difference. The units are based on the lvs_user_unit argument of the
run_options() function.
exclude_function
Optional. Specifies the remote function that defines exclusions based on property
tolerances. If one of the exclusions is satisfied, the devices listed in the device_names
argument are removed. The default is the predefined exclude_device_by_tolerance
function,. This function excludes devices that do not meet the specified tolerance.
See “Compare Utility Functions” in Chapter 4 for more information about the utility
functions you can use to define a remote function.
property_functions
Optional. Lists the functions that define how a merged property for a merged device is
calculated. The default is the internal merge functions. See the following tables for more
information.
❍ property. Optional. Specifies the property that must satisfy the tolerance range.
Note:
The property name is needed here only if you are using one of the predefined
functions: sum_merge_method, min_merge_method, average_merge_method, or
max_merge_method. If you are using a user-defined function, the property is
specified in the property function.
The default property calculations are shown in the following tables. Table 3-6 shows the
calculations for NMOS, PMOS, and generic device parallel merging device properties.
Table 3-6 NMOS, PMOS, and Generic Device Parallel Merging Device Properties
l (length) n
Mi Li
i=1
L eq = ---------------------
n
Mi
i=1
w (width) n
W eq = Mi Wi
i=1
m (multiplier) n
M eq = Mi
i=1
Table 3-6 NMOS, PMOS, and Generic Device Parallel Merging Device Properties (Continued)
Table 3-7 shows the calculations for NP and PN parallel merging device properties.
Table 3-7 NP and PN Parallel Merging Device Properties
l (length) n
Mi Li
i=1
L eq = ---------------------
n
Mi
i=1
w (width) n
W eq = Mi Wi
i=1
area n
A eq = Mi Ai
i=1
m (multiplier) n
M eq = Mi
i=1
pj (perimeter n
of junction)
PJ eq = Mi PJi
i=1
Table 3-8 shows the calculations for NPN and PNP parallel merging device properties.
Table 3-8 NPN and PNP Parallel Merging Device Properties
l (length) n
Mi Li
i=1
L eq = ---------------------
n
Mi
i=1
w (width) n
W eq = Mi Wi
i=1
area n
A eq = Mi Ai
i=1
m (multiplier) n
M eq = Mi
i=1
Table 3-9 shows the calculations for resistor parallel merging device properties.
Table 3-9 Resistor Parallel Merging Device Properties
r (resistance) 1
R eq = ---------------
n
-
Mi
------ Ri
i 1
l (length) Unequal widths && unequal lengths L is not legal
W eq = Mi Wi
i=1
Table 3-10 shows the calculations for capacitor parallel merging device properties.
Table 3-10 Capacitor Parallel Merging Device Properties
c (capacitance) i
C eq = Mi Ci
n=1
L eq = Li
i=1
W eq = Mi Wi
i=1
equiv_cells
Optional. Lists the schematic and layout cell name pairs for which the
merge_parallel() function applies. You must specify the equiv_cells pairs in the
equiv_options() function before calling the merge_parallel() function. If only one
cell name in the pair is specified, the names are assumed to be the same.
Note:
The merge_parallel() instruction is observed only when comparing each listed
equivalence cell pair. If an equivalence cell pair is exploded into the parent
equivalence cell pair while comparing the parent, the merge_parallel() instruction
is discarded for the content of the exploded cell.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
This example uses previously defined my_exclude_function and my_user_calculation
remote functions.
merge_parallel(compare_state, PMOS, {"pm1"},
exclude_tolerances = {{"w",[-20,+20]},
{"l",[-30, +40]}},
exclude_function = "my_exclude_function",
property_functions = {{"sum_merge_method", "w"},
{"average_merge_method", "l"},
{"my_user_calculation"}}
);
See Also
init_compare_matrix()
merge_parallel_off()
recalculate_property()
merge_parallel_off()
The merge_parallel_off() function disables parallel merging for specific devices.
This function must be called before the compare() function. See Chapter 7, “Compare
Functions Basics” in the IC Validator LVS User Guide for more information about
complementary functions and precedence rules.
Syntax
merge_parallel_off(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...}, //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. The information from the
merge_parallel_off() function is added.
device_type
Required. Specifies the device type.
device_names
Optional. Specifies the layout devices that are not merged. Each device must match a
device specified in a device_name argument of a device configuration function.
equiv_cells
Optional. Specifies the schematic and layout cell name pairs for which the
merge_parallel_off() function applies. You must specify the equiv_cells pairs in
the equiv_options() function before calling the merge_parallel_off() function. If
only one cell name in the pair is specified, the names are assumed to be the same.
Note:
The merge_parallel_off() instruction is observed only when comparing each
listed equivalence cell pair. If an equivalence cell pair is exploded into the parent
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
merge_parallel()
merge_series()
The merge_series() function defines the criteria for merging devices connected in series
during the compare operation.
This function must be called before the compare() function. See Chapter 7, “Compare
Functions Basics” in the IC Validator LVS User Guide for more information about
complementary functions and precedence rules.
Limitation:
A device can be merged by the merge_series() function or recognized by the
recognize_gate() function, but not both in the same runset.
Syntax
merge_series(
state = compare_state,
device_type = NMOS | PMOS | RESISTOR | CAPACITOR |
INDUCTOR | GENERIC,
device_names = {"string", ...}, //optional
exclude_tolerances = {{property = "string",
tolerance = doubleconstraint,
tolerance_type = RELATIVE | ABSOLUTE},
...}, //optional
exclude_function = "string", //optional
property_functions = {{property_function = "string",
property = "string"}, ...}, //optional
merge_connected_gates = true | false, //optional
multiple_paths = true | false, //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...}, //optional
gendev_series_pins = {pin_a = "string",
pin_b = "string"} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. The information from the
merge_series() function is added.
device_type
Required. Specifies the device type.
device_names
Optional. Specifies the layout devices that are merged. Each device must match a device
specified in a device_name argument of a device configuration function.
Only devices with a matching name are merged.
exclude_tolerances
Optional. Lists the functions that exclude candidate devices from being merged based on
their property values.
❍ property. Required. Specifies the property for which to check the tolerance range.
❍ tolerance. Optional. Specifies the tolerance. The property option is checked for
violations based on this tolerance. The tolerance must be specified as a range. The
tolerance_type option specifies if the tolerance is a percentage (default) or
absolute value. The default is [-10,+10].
The minimum resolution allowed for tolerance checking is as follows:
■ When schematic_property !=0, the minimum resolution value is
absolute_value(schematic_property*1e-6)
If the specified tolerance range is less than this minimum value, for example, [-0,0],
the property option is checked for violations according to the minimum resolution.
❍ tolerance_type. Optional. Checks property tolerances based on a relative or
absolute property difference. The default is RELATIVE.
■ RELATIVE. Specifies that tolerances are checked based on a percentage
difference.
■ ABSOLUTE. Specifies that tolerances are checked based on an absolute value
difference. The units are based on the lvs_user_unit argument of the
run_options() function.
exclude_function
Optional. Specifies the remote function that defines exclusions based on property
tolerances. If one of the exclusions is satisfied, the devices listed in the device_names
argument are removed. The default is the predefined exclude_device_by_tolerance
function. This function excludes devices that do not meet the specified tolerance.
See “Compare Utility Functions” on page 4-181 for more information about the utility
functions you can use to define a remote function.
property_functions
Optional. Lists the functions that define how a merged property for a merged device is
calculated.
❍ property_function. Optional. Specifies the remote function that calculates
properties.
See “Compare Utility Functions” on page 4-181 for more information about the utility
functions you can use to define a remote function.
The available predefined functions are as follows:
■ sum_merge_method. Adds the property values of the individual devices together.
L eq = Li
i=1
Table 3-11 NMOS and PMOS Series Merging Device Properties (Continued)
Mi Wi
i=1
W eq = -----------------------
n
Mi
i=1
Table 3-12 shows the calculations for resistor series merging device properties.
Table 3-12 Resistor Series Merging Device Properties
r (resistance) n
Ri
R eq = ------
Mi
i=1
L eq = Li
i=1
Table 3-13 shows the calculations for capacitor series merging device properties.
Table 3-13 Capacitor Series Merging Device Properties
c (capacitance) 1
C eq = ---------------------
n
-
1
-----------
Mi Ci
-
i 1
l (length) Only lengths are given && L is not legal
unequal lengths
merge_connected_gates
Optional. Specifies whether connected gate pins of series-merged transistors are
merged. The default is false.
❍ true. If connected gate pins of series-merged transistors are tied to the same net, the
gate pins are merged into a gate pin.
❍ false. If connected gate pins of series-merged transistors are tied to the same net,
the gate pins are not merged into a gate pin.
multiple_paths
Optional. Specifies when transistors are combined. The default is false.
❍ true. Searches the schematic and layout netlists for stacks of NMOS or PMOS
devices that can be rearranged to create a logically equivalent structure. When two
or more transistors are found in a path, they are combined into a single device with
logically equivalent gate-pin inputs. Recognition of these constructs allows devices in
the schematic to be equated to devices in the layout that are logically equivalent even
though their implementations might not match.
❍ false. Does not search for these paths.
equiv_cells
Optional. Specifies the schematic and layout cell name pairs for which the
merge_series() function applies. You must specify the equiv_cells pairs in the
equiv_options() function before calling the merge_series() function. If only one cell
name in the pair is specified, the names are assumed to be the same.
Note:
The merge_series() instruction is observed only when comparing each listed
equivalence cell pair. If an equivalence cell pair is exploded into the parent
equivalence cell pair while comparing the parent, the merge_series() instruction is
discarded for the content of the exploded cell.
gendev_series_pins
Optional. Specifies the names of the two pins being connected in series of a generic
device.
The gendev_series_pins argument is required when the device_type argument is set
to GENERIC. It is not necessary when device_type is set to a primitive device type, such
as NMOS, PMOS, or RESISTOR.
❍ pin_a. Optional. Specifies the name of the first pin in the series to be merged.
❍ pin_b. Optional. Specifies the name of the second pin in the series to be merged.
Note:
The series pins can only be swapped among themselves. The swappable pins are
defined in the gendev() and map_gendev() functions.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
This example uses previously defined remote functions my_exclude_function and
my_user_calculation.
merge_series(compare_state, PMOS, {"pm1"},
exclude_tolerances = {{"w",[-20,+20]},
{"l",[-30,+30]}},
exclude_function = "my_exclude_function",
/* by using built-in functions,
* my_exclude_function
* retrieves the tolerances
* specified for "l" & "w" */
property_functions = {{"sum_merge_method","w"},
{"average_merge_method","l"},
{"my_user_calculation"}},
multiple_paths = false
);
See Also
init_compare_matrix()
merge_parallel()
merge_parallel_off()
merge_series_off()
recalculate_property()
recognize_gate()
merge_series_off()
The merge_series_off() function disables series merging for specific devices.
This function must be called before the compare() function. See Chapter 7, “Compare
Functions Basics” in the IC Validator LVS User Guide for more information about
complementary functions and precedence rules.
Syntax
merge_series_off(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...}, //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. The information from the
merge_series_off() function is added.
device_type
Required. Specifies the device type.
device_names
Optional. Specifies the layout devices that are not merged. Each device must match a
device specified in a device_name argument of a device configuration function.
equiv_cells
Optional. Lists the schematic and layout cell name pairs for which the
merge_series_off() function applies. You must specify the equiv_cells pairs in the
equiv_options() function before calling the equiv_options() function. If only one cell
name in the pair is specified, the names are assumed to be the same.
Note:
The merge_series_off() instruction is observed only when comparing each listed
equivalence cell pair. If an equivalence cell pair is exploded into the parent
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
merge_series()
milkyway_library()
The milkyway_library() function defines a Milkyway library name and returns a handle to
be used by the output_library argument of the write_milkyway() function.
Limitation:
The milkyway_library() function cannot be called more than one time with the same
library_name and library_path arguments. The result, however, can be used in more
than one write_milkyway() function.
Syntax
milkyway_library(
library_name = "string",
library_path = "string" //optional
);
Returns
milkyway_library_handle
Arguments
library_name
Required. Specifies the Milkyway library name. See the output_library argument of
the write_milkyway() function for more information.
library_path
Optional. Specifies the path to the Milkyway library. The default is ".".
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
write_milkyway()
milkyway_merge_library_options()
The milkyway_merge_library_options() function specifies a mapping from the master
and reference Milkyway libraries to replacement GDSII, OASIS. and OpenAccess libraries
that are read in with Milkyway data at the start of a verification run. This function can be
called only one time in a runset.
You can use the -ml command-line option to override the settings in the
milkyway_merge_library_options() function. See the Command-Line Options section
in the “IC Validator Basics” chapter of the IC Validator User Guide for more information.
For example, if cell “A” has a FRAM view and a CEL view in the Milkyway library, the CEL
view is replaced with the GDSII or OASIS data for cell “A”. If cell “A” only has a FRAM view
in the Milkyway library, the missing CEL view data is created with data from the GDSII or
OASIS replacement library.
When using the milkyway_merge_library_options() function, read all required GDSII,
OASIS, OpenAccess, and Milkyway data during an IC Validator run to emulate the complete
mask data set for a designated top-level structure. The lower-level cells in the replacement
data are not permanently merged into the input Milkyway library. Data is temporarily merged
for only this run.
Note:
The master Milkyway library and top-level cell are identified in the runset by the
library() function. The mapping specified in the
milkyway_merge_library_options() function never looks for a replacement of the top
cell.
When using the milkyway_merge_library_options() function, you should be familiar
with
• Master Milkyway libraries and reference libraries, and the order in which Milkyway
searches these libraries to find a cell. See the Milkyway Database Application Note,
which is available on SolvNet.
• The milkyway_options() function. Use this function to control the reading of FRAM
and CEL views, and the reading of other Milkyway data.
• The -lf command-line option. Use this command-line option to specify mapping of the
Milkyway layers to the runset layers. See the Command-Line Options section in the
“IC Validator Basics” chapter of the IC Validator User Guide for more information.
You can see the replacements in the run_details/top_cell.tree0 file. A tree file is shown in the
Example section.
Syntax
milkyway_merge_library_options(
Returns
void
Arguments
libraries
Required. Lists the Milkyway and replacement libraries.
❍ library_name. Required. Specifies the Milkyway library name. You only need to list
the Milkyway libraries for which you want to do replacements.
❍ library_path. Optional. Specifies the Milkyway library path, which can be either
relative or absolute. Use the library_path argument if your library is not in the run
directory. The default is the current working directory.
❍ replacement_libraries. Required. Specifies the replacement libraries. The
IC Validator tool searches the replacement libraries in the order specified looking for
cells. The first cell found is the one used.
Note:
A GDSII or OASIS file can be gzipped. The IC Validator tool automatically detects
if a GDSII or OASIS file is gzipped.
■ file. Specifies the replacement file. It is the library definition file when the format
option is OPENACCESS.
■ format. Specifies the format of the replacement libraries, GDSII, OASIS, or
OpenAccess.
■ cell_name_map. Optional. Specifies a list that tells how cell names are mapped
as data is read in. Use this list when the GDSII, OASIS, or OpenAccess cell name
does not match the corresponding Milkyway cell name. If you do not use this list
to map duplicate cell names, the IC Validator tool automatically does the mapping
and resolves all hierarchical references to the new name.
- search_string. Specifies the cell name in the GDSII, OASIS, or OpenAccess
data that is renamed.
- replace_string. Specifies the new cell name given to the cell in the GDSII,
OASIS, or OpenAccess data. This cell name is used within the IC Validator
tool after the input data is read.
■ layer_map_file. Optional. Specifies the layer mapping file for the replacement
library. You can map GDSII, OASIS, or OpenAccess data to Milkyway data.
Note:
When the OpenAccess layer mapping format is used, OpenAccess data is
mapped directly to the runset. This behavior differs from when the GDSII or
OASIS layer mapping formats are used, as there is no standard layer mapping
file format from OpenAccess to Milkyway that supports color mapping.
Note:
The layer_map_file option is required for the OpenAccess format. For the
OpenAccess layer map format, see the cell_mapping_file argument of the
openaccess_options() function.
The file format for Milkyway is:
MilkywayLayer[:MilkywayDatatype] SrcLayer[:SrcDatatype]
Note:
The maximum layer and datatype values for Milkyway are 0–255, inclusive, for
libraries in normal layer mode or 0–4095, inclusive, for libraries in extended
layer mode.
Comments are specified with a semicolon. All text following the semicolon on the
current line is part of the comment.
For example, to map
- missing_db. Optional. Specifies the behavior when the IC Validator tool does
not find the specified layout integrity database. The default is ABORT.
¤ ABORT. Specifies that the run stops when the layout integrity database is not
found.
¤ IGNORE. Continues the IC Validator run if the tool cannot find the layout
integrity database.
- cell_name_map. Optional. Specifies a list that tells how cell names are
remapped as data is read from the layout integrity databases (LIDBs). By
default, the IC Validator tool does not remap cell names.
¤ search_string. Required. Specifies the existing cell name in the input
LIDB.
¤ replace_string. Required. Specifies the cell name used for layout
integrity checking within IC Validator.
■ openaccess. Required when the replacement library format is OpenAccess; that
is when the format option is OPENACCESS. (Do not use this openaccess option
when the replacement library format is GDSII or OASIS.) Maps OpenAccess data
to Milkyway data. See the cell_mapping_file argument of the
openaccess_options() function for more information.
missing_cell
Optional. Specifies the action taken if a cell is missing from the replacement file. The
default is ABORT.
❍ ABORT. Specifies if the run stops when a cell in the Milkyway library is not found in a
replacement file.
❍ USE_MILKYWAY. If a cell in the Milkyway library is not found in a GDSII, OASIS, or
OpenAccess replacement file, takes the Milkyway CEL view from the Milkyway
library.
icc_cell_map_file
Optional. Specifies the global cell map that applies to all GDSII, OASIS, or OpenAccess
files. It maps GDSII and OASIS cells only and not Milkyway cells. The cell_name_map
option of the replacement_libraries option applies to only one GDSII, OASIS, or
OpenAccess file. You can use both the cell_name_map option and the
icc_cell_map_file argument if the two maps are mutually exclusive; that is, the
arguments do not define the same cell names.
Because the master library is in Milkyway format, use this icc_cell_map_file
argument instead of the cell_name_map argument of the gds_options() or
oasis_options() function or the cell_mapping_file argument of the
openaccess_options() function. The gds_options(), oasis_options(), and
openaccess_options() functions can be used only when a GDSII, OASIS, or
OpenAccess library is the main library. See the library() function for more information.
The IC Compiler cell mapping file format is:
NewCellName OldCellName
Note:
In the cell_name_map option in this function and the cell_name_map argument in the
gds_options() or oasis_options() function, the strings are mapped in the reverse
order, with the replacement string being in the second place.
For example, to map TOP.CEL to NEWTOP.CEL, enter:
NEWTOP TOP
report
Optional. Specifies the information written to the milkyway_merge_library_options.log
file. The categories you can specify for output are USED_CELLS, UNUSED_CELLS,
MISSING_CELLS, LAYER_MAPS, and DUPLICATE_CELLS. The default output reports all
categories.
missing_library
Optional. Specifies the IC Validator action when the replacement library does not exist.
The default is ABORT.
❍ ABORT. Issues an error message when a replacement library does not exist.
❍ CONTINUE. Behaves as if the replacement library was never specified and continues
running.
lef_foreign_cell_name
Optional. Specifies if LEF (Library Exchange Format) foreign cell names are used for
replacement cells. The default is IGNORE.
❍ USE. Uses LEF foreign cell names for replacement cells.
❍ IGNORE. Does not use LEF foreign cell names for replacement cells.
unmatched_reference_library
Optional. Specifies the IC Validator action when the reference library is unmatched. The
default is WARN.
❍ ABORT. Stops the run if the two Milkyway library names are the same, with two
different paths in this function and in the reference libraries.
❍ WARN. Writes a warning message in the milkyway_merge_library_options.log file and
continues to run.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
In the following example, the design has seven libraries: A, B1, B2, C1, C2, C3, and C4. “A”
is the master library and cell “A” is the top cell of the entire design. To make the example
easy to study, each library has the same name as its top cell. Here is the mapping
represented as a table:
Table 3-14 Mapping Milkyway Libraries
B1
B2
C1 ./C1_REPL.gds
C2
C3 ./C3_REPL.gds
C4
library(
library_name = "A",
library_path = ".",
cell = "A",
format = MILKYWAY
);
milkyway_merge_library_options(
libraries = {
{"C1", ".",
{{"./C1_REPL.gds", GDSII, {{"C1_GEORGE","C1"}, {"E1_GEORGE", "E1"}}, "lmf1"}}
},
{"C3", ".",
{{"./C3_REPL.gds", GDSII, {{"C3_IGLOP","C3"}, {"E3_IGLOP", "E3"}}, "lmf3"}}
}
},
missing_cell = ABORT,
icc_cell_map_file = "cmf"
);
The .DUP# suffix is only used for Milkyway cells with the same name. For example,
Milkyway libraries C1, C2, C3, and C4 all have a “D” cell. Therefore, all but the first one are
renamed to avoid conflict. This functionality is not part of the
milkyway_merge_library_options() function, but is done when Milkyway data is read.
The cells that are replaced are C1 and C3, and their replacements, are unconditionally
appended with the suffix .REPL#, regardless of whether or not their name conflicts with an
existing Milkyway cell name. You can see this in the hierarchical tree. For example,
C1
C1.REPL#0
C1 is the original Milkyway cell (CEL view data suppressed) and C1.REPL#0 is the
replacement GDSII cell. The numeral following the # corresponds to the order in which the
replacement GDSII and OASIS libraries are specified in the
milkyway_merge_library_options() function.
********
Unused Cells (GDSII/OASIS)
********
Cell Name GDSII/OASIS File Name
(from GDSII/OASIS) (cell pulled from)
------------------ ---------------------
********
Missing Cells (milkyway cell exists but corresponding GDSII/OASIS cell does not)
********
Cell Name
(from GDSII/OASIS) Milkyway Library Name
------------------ ---------------------
********
Layer Maps (from GDSII/OASIS to Milkyway)
********
GDSII/OASIS File Layer Map File
---------------- --------------
./C1_REPL.gds lmf1
./C3_REPL.oas lmf3
See Also
milkyway_options()
ndm_merge_library_options()
openaccess_merge_library_options()
milkyway_options()
The milkyway_options() function specifies the behavior of the IC Validator tool when
reading a Milkyway library.
Syntax
milkyway_options(
drc_black_box_cells = {"string", ...}, //optional
lvs_black_box_cells = {{schematic_cell = "string",
layout_cell = "string"},
...}, //optional
merge_fram_view = NONE | PINS, //optional
missing_required_view = IGNORE | ABORT, //optional
generate_pin_text = NONE | TOP | ALL, //optional
merge_view_library_mode = ALL | MAIN | SAME, //optional
merged_view_list = {{name = "string",
outdated_views = ABORT | USE | DISCARD},
...}, //optional
pin_text = NET_NAME | PIN_NAME | REASSIGN, //optional
replace_instance_name_characters = {{search_string = "string",
replace_string = "string"},
...}, //optional
alternate_cel_view = NONE | FRAM, //optional
cell_types = {cell_type, ...}, //optional
exclude_cell_types = {cell_type, ...}, //optional
net_types = {net_type, ...}, //optional
route_guide_layers = {layer_type, ...}, //optional
route_types = {route_type, ...}, //optional
generate_polygon_text = NONE | TOP | ALL, //optional
datatype_mappings = {high_voltage_text = integer,
low_voltage_text = integer}, //optional
rule_name_delimiter = {search_string = "string",
ignore_case = true | false}, //optional
cut_table_datatype_mapping = ALWAYS | NEVER | DATATYPE_ZERO_ONLY,
//optional
instance_names = KEEP | DISCARD //optional
);
Returns
void
Arguments
drc_black_box_cells
Optional. Specifies the black-box cells for DRC. For these cells, polygon data from the
FRAM view is read, and the CEL view is not read. For other cells, polygons from CEL
view and pins from FRAM view are read. String matching using metacharacters is
allowed. See “String Matching” on page A-11 for more information.
Note:
If DRC black-box cells are listed, the lvs_black_box_cells argument cannot be
used. If neither DRC nor LVS black-box cells are specified, polygons from CEL view
and pins from FRAM view are read. If the milkyway_merge_library_options()
function is used in the same IC Validator session, it has precedence over any of its
replacement cells that might also exist in the DRC black-box cell list.
For the top cell, all data from the CEL view is read. If the CEL view does not exist for
the top cell, an error is reported and the run stops.
lvs_black_box_cells
Optional. Lists the black-box cells for LVS. For these cells, only pins from FRAM view are
read. For other cells, polygons from CEL view and pins from FRAM view are read.
Note:
If LVS black-box cells are listed, the drc_black_box_cells argument cannot be
used. If neither DRC nor LVS black-box cells are specified, pins from FRAM view are
read. If the milkyway_merge_library_options() function is used in the same
IC Validator session, it has precedence over any of its replacement cells that might
also exist in the LVS black-box cell list.
For the top cell, all data from the CEL view is read. If the CEL view does not exist for
the top cell, an error is reported and the run stops.
merge_fram_view
Optional. Controls the reading of the FRAM view of cells that are not in the DRC or LVS
black-box cells lists. The default is PINS.
Note:
If a cell is either a DRC or LVS black-box cell, the FRAM view is read and the CEL
view is not. The CEL view is always read for the top cell.
❍ PINS. Reads pins from the FRAM view in addition to data from the CEL view.
missing_required_view
Optional. Specifies behavior if a cell is missing a required view, as defined by the
drc_black_box_cells and lvs_black_box_cells arguments. The default is IGNORE.
❍ IGNORE. Continues the IC Validator run. A warning is reported and missing Milkyway
cells are empty.
❍ ABORT. Writes an error message and the run stops. If a cell is in either the DRC or LVS
black-box cells list, the FRAM view is required for that cell. If the cell is not in a
black-box cells list, the CEL view is required.
generate_pin_text
Optional. Specifies if pin text is generated. In some design styles, generating net names
from pin text can create false text-open error messages. To avoid these error messages,
set this argument to NONE or TOP. The default is ALL.
❍ NONE. Specifies that net names of pins in the hierarchy are not converted to text.
❍ TOP. Specifies that only net names of pins in the top-level cell are converted to text.
❍ ALL. Specifies that net names of all pins in the hierarchy are converted to text.
merge_view_library_mode
Optional. Specifies the libraries to search to find a non-CEL cell. The default is SAME.
❍ ALL. Searches all libraries.
❍ MAIN. Specifies that only the main library for an associated cell is searched.
❍ SAME. Searches for a non-CEL cell in the same library as the cell that references it (by
placement or association).
merged_view_list
Optional. Lists the merging of views other than CEL and FRAM. These views of the top
cell of the design are read and merged into the top cell. By default, the IC Validator tool
merges the FILL view.
❍ name. Required. Specifies the view.
pin_text
Optional. Determines where to get generated text for pins in the Milkyway library. The
default is NET_NAME.
❍ NET_NAME. Reads texts from the net names of the pins.
❍ REASSIGN. Reads texts from both the pin name and net name for pins. If the pin name
and net name are the same, the IC Validator tool uses the pin name. If the pin name
and net name are different, the IC Validator tool uses the net name and tags the text
as an assigned net for hierarchical net assignment.
Setting pin_text(REASSIGN) has the same functionality as manually entering cell
and net names in the reassign_text argument of the text_options() function.
Using pin_text(REASSIGN) provides automated assignments when you are using a
Milkyway library.
replace_instance_name_characters
Optional. Lists the strings to be replaced in instance names. Neither string can use string
matching. By default, the IC Validator tool does not replace any characters.
❍ search_string. Required. Specifies the string to replace.
alternate_cel_view
Optional. Specifies behavior if the CEL view is missing. The default is FRAM.
❍ NONE. Applies the behavior specified by the missing_required_view argument.
❍ FRAM. Reads the entire FRAM view of a cell if the CEL view is missing. If both the CEL
and FRAM views are missing, the behavior specified by the
missing_required_view argument applies.
Note:
The CEL view is always required for the top cell of the design.
cell_types
Optional. Specifies the cell types that determine which cells are read from the Milkyway
library. Using the milkyway argument of the assign() and assign_edge() functions,
you can specify the cell types for certain layers. You can use the
exclude_milkyway_cell_types() function to obtain a list of all possible cell types
except those specified by the exclude argument. By default, the IC Validator tool reads
all cell types. Table 3-15 lists the cell types.
Table 3-15 Milkyway cell_types Options
XO_CELL
exclude_cell_types
Optional. Specifies the cell types that determine which cells are not read from the
Milkyway library. If a cell type is listed in the cell_types and exclude_cell_types
arguments, it is excluded. By default, the IC Validator tool does not exclude any cell
types. See Table 3-15 for more information.
Note:
If a cell type is excluded, no data is read from the cell and no subtrees under the cell
are placed.
net_types
Optional. Specifies the net types that are read from the Milkyway library. Using the
milkyway argument of the assign() and assign_edge() functions you can specify the
net types for specific layers. You can use the exclude_milkyway_net_types() function
to obtain a list of all possible net types except those specified. By default, the IC Validator
tool reads all net types. Table 3-16 lists the net types.
Table 3-16 Milkyway net_types Options
1
GROUND NON_CONT_PG NONE
2
TIE_LOW UNCONNECTED
1.NONE specifies that connected objects which do not have a set net type are read.
2.UNCONNECTED specifies that objects which do not have an associated net are read.
route_guide_layers
Optional. Specifies the route guides that are read from the Milkyway library. Route guides
are rectangles on a specific layer that have a BlockLayer property set which defines the
blocked layers. This argument filters based on the BlockLayer property. Using the
milkyway argument of the assign() function you can specify which route guides are
read for specific layers. You can use the exclude_milkyway_route_guide_layers()
function to obtain a list of all possible route guides except those specified by the exclude
argument. By default, the IC Validator tool reads all route guides. Table 3-17 lists the
route guide layers.
Table 3-17 Milkyway route_guide_layers Options
1
NONE POLY_ROUTE_GUIDE
1. NONE specifies that polygons which do not have a BlockLayer property are read.
route_types
Optional. Specifies the route types that are read from the Milkyway library. Using the
milkyway argument of the assign() and assign_edge() functions you can specify the
route types for specific layers. You can use the exclude_milkyway_route_types()
function to obtain a list of all possible route types except those specified. By default, the
IC Validator tool reads all route types. Table 3-18 lists the route types.
Note:
The route type is only used for the shapes RECTANGLE, PATH, HORIZONTALWIRE, and
VERTICALWIRE, as specified in the milkyway argument of the assign() and
assign_edge() functions.
Table 3-18 Milkyway route_types Options
1
NONE PG_FOLLOW_PIN PG_PIN
SIGNAL_GLOBAL SIGNAL_USER
1.NONE specifies that objects that do not have a route type set are read. In the route type specified
in layers and errors arguments of the write_milkyway() function, NONE specifies to not set
a route type even if writing rectangles to the FILL view.
generate_polygon_text
Optional. Specifies if text points are generated from polygon net names. In some design
styles, generating text from polygon net names can create false text-open error
messages. To avoid these error messages, set this argument to NONE or TOP. The default
is ALL.
❍ NONE. Specifies that net names of polygons in the hierarchy are not converted to text.
❍ TOP. Specifies that only net names of polygons in the top-level cell are converted to
text.
❍ ALL. Specifies that net names of all polygons in the hierarchy are converted to text.
datatype_mappings
Optional. Specifies datatypes that identify the layers in the Milkyway library from which
operating voltage text is selected.
❍ high_voltage_text. Optional. Specifies the datatype for selecting the high voltage
text.
❍ low_voltage_text. Optional. Specifies the datatype for selecting the low voltage
text.
For example,
milkyway_options(...,
datatype_mappings = {high_voltage_text = 231,
low_voltage_text = 230}
);
You can use the -lf command-line option instead of the datatype_mappings argument
to specify a layer mapping file that has voltage text mapping. For information about -lf,
see the Command-Line Options section in the “IC Validator Basics” chapter of the
IC Validator User Guide. For example, the layer mapping could specify:
PL * *:230
PH * *:231
PL indicates the low voltage text, and PH indicates the high voltage text.
rule_name_delimiter
Optional. Defines a delimiter for rule names. Use this argument to separate the rule
name from the violation comment. The violation comment is truncated at the first
instance of this delimiter for reporting in the icv_sdrc.conclude file.
Note:
This delimiter is used only to determine the rule name for the Milkyway
icv_sdrc.conclude file.
If the delimiter is not matched, the entire violation comment is reported in the
icv_sdrc.conclude file. The violation comment might be truncated for length; the
maximum length of a violation comment is 1024 characters.
❍ search_string. Specifies the delimiter. The search string must be a GNU extended
regular expression. The default is
"[[:space:]]+:|[[:space:]]*:[[:space:]]"
That is, the default is one of the following:
■ One or more white space characters followed by a colon.
■ Zero or more white space characters followed by a colon followed by one white
space character.
❍ ignore_case. Specifies if the character case in the violation comment is considered
when matching the delimiter. The default is false.
■ true. The search is case-sensitive.
cut_table_datatype_mapping
Optional. Specifies how the IC Validator tool uses cutDataTypeTbl table definitions in the
Milkyway technology file.
❍ ALWAYS. Always uses the cut datatype table, if available in the Milkyway technology
file, and sets datatypes for cut layer shapes as defined in the table.
❍ NEVER. Always uses the datatype of the shape stored in the Milkyway database and
does not change the datatype based on cut datatype table information in the
technology file.
❍ DATATYPE_ZERO_ONLY. Sets datatypes for cut layer shapes as defined in the cut
datatype table only if the datatype of the Milkyway shape is zero. If the datatype of a
Milkyway shape is non-zero, the datatype is preserved.
instance_names
Optional. Specifies whether instance names from the input layout should be retained by
the IC Validator tool. The instance names can be used for netlisting or possibly reused
for the output layout. Retaining instance names could result in extra processing time
during the reading of the input layout. The default is KEEP.
❍ KEEP. Retains instance names from the input layout.
❍ DISCARD. Does not retain instance names from the input layout.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
milkyway_options (
merge_fram_view = NONE,
replace_instance_name_characters = {{"AND", "AND_A"},
{"OR", "OR_A"}}
);
See Also
assign()
assign_edge()
assign_text()
gds_options()
oasis_options()
openaccess_options()
milkyway_route_directives()
The milkyway_route_directives() function provides better control over automatic DRC
repair. (The ADR flow uses the signoff_autofix_drc command within the IC Compiler
tool.) The bounding boxes are output to the LAYOUT_ERRORS file, and VUE displays the
specified display markers. The directive layers specified in this function, including
combinations of add shapes, subtract shapes, and multiple error markers, are passed
directly to the IC Compiler tool in the ADR flow.
This function is also compatible with IC Validator pattern matching.
Syntax
milkyway_route_directives(
display_marker = polygon_layer,
group_marker = polygon_layer,
error_layers = {layername = polygon_layer, ...}, //optional
route_directives = {{add_layer = polygon_layer,
subtract_layer = polygon_layer}, ...} //optional
);
Returns
void
Arguments
display_marker
Required. Specifies the layer that contains the shapes used to display the errors.
group_marker
Required. Specifies the layer with the shapes that enclose the shapes defined by the
display_marker, error_layers, and route_directives arguments.
error_layers
Optional. Specifies the layers that are used to specify the errors. These layers are
interpreted by the signoff_autofix_drc command as alternative representations.
Each of these layers is used in an independent fixing attempt in the ADR flow.
route_directives
Optional. Specifies the layers that contain shapes which identify surgical fixes for the
IC Compiler Zroute router. For a given set of add_layer and subtract_layer shapes
contained by a single group_marker layer, the shapes are implemented by the Zroute
router if they are allowed actions.
Description
The following restrictions apply to the milkyway_route_directives() function:
• All shapes altered by the route_directives argument must be on the minimum
manufacturing grid. (The manufacturing grid is specified in the Milkyway technology file.)
• An add_layer directive must not create a short, even if a subtract_layer directive
would resolve it.
• The result of a route directive must not be an open or floating shape.
• A layer specified by a subtract_layer argument must not interact with any via
enclosure.
• Any route_directives layer must not overlap with power and ground straps, shapes
that have a route type of fixed or user enter, and pins.
• A subtract layer can interact only with shapes having a route type of SIGNAL_DETAIL.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
Use the pattern_learn() function to create a new pattern library, patternLib.
pattern_learn(
pattern_library_name = "patternLib",
pattern_layers = {layerInput},
pattern_marker = layerMarker,
optional_pattern_markers = {
layerPatternExtent,
layerAdd,
layerRemove
}
);
Figure 3-20 shows an example of user-specified layers that are represented in the pattern
library, patternLib.
Figure 3-20 Pattern in patternLib Library
layerPatternExtent
Use the pattern_match() function to capture patterns on a design that match patterns in a
pattern library. Then, use the optional_pattern_markers() function to list polygon layers
associated with the pattern marker layer, allowing you to do additional error filtering. Finally,
use the milkyway_route_directives() function to specify error markers that are used in
the ADR flow.
marker_layer = pattern_match(
pattern_library_name = "patternLib",
pattern_layers = {metal1}
);
extra_layers = optional_pattern_markers(
pattern_library_name = "patternLib",
layerMarker = marker_layer
);
pattern_extent = extra_layers[0];
m1_add = extra_layers[1];
m1_subtract = extra_layers[2];
@ “Add/Remove Layer”;
Figure 3-21 shows an example of layers in the pattern database in the context of a pattern
match for the layout. These layers are used as the directive layers for the
milkyway_route_directives() function.
pattern_extent
Add to the pattern library the exact modifications you want, as specified in the
milkyway_route_directives() function.
milkyway_route_directives(
marker_layer = metal1,
group_marker = pattern_extent,
route_directives = {{add_layer = m1_add,
subtract_layer = m1_subtract}}
);
Figure 3-22 shows an example of what the input layers might look like at the completion of
the ADR flow, with the directive layers shown for context. Note that the jog on the metal1
layer has moved north to cover the m1_add shape and to uncover the m1_remove shape.
Figure 3-22 Layers After ADR
pattern_extent
See Also
pattern_learn()
pattern_match()
mos_select()
The mos_select() function selects device polygons from MOS devices on the specified
layers that fit the specified criteria. A remote function specifies arithmetic conditions relative
to MOS parameters.
Syntax
mos_select(
drain = polygon_layer,
gate = polygon_layer,
source = polygon_layer,
mos_func = function,
optional_pins = {{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK},
...}, //optional
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
recognition_layer = polygon_layer, //optional
connect_sequence = connect_database, //optional
source_drain_config = {NORMAL, SINGLE}, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL |
LEVEL_SOURCE_DRAIN //optional
);
Returns
polygon layer or error result
Arguments
drain
Required. Specifies the drain layer of the MOS device. Drain and source terminal layers
are required to determine the gate direction.
gate
Required. Specifies the gate layer of the MOS device.
source
Required. Specifies the source layer of the MOS device. Drain and source terminal
layers are required to determine the gate direction.
mos_func
Required. Specifies the remote function that selects devices based on geometric criteria.
See Chapter 4, “Utility Functions,” for more information about the utility functions you can
use to define a remote function.
optional_pins
Optional. Lists additional bulk or terminal layers.
❍ device_layer. Required. Specifies the device layer.
❍ pin_type. Optional. Specifies whether the layer is a terminal or bulk. The default is
BULK.
processing_layer_hash
Optional. Specifies a hash of string to a processing layer and range pair. In the remote
property function, each layer is retrieved as a polygon set by passing the hash key to the
dev_processing_layer() function.
❍ layer1. Required. Specifies the processing layer, which is a non-terminal layer used
for calculating properties.
❍ range. Optional. Specifies the maximum distance value from a device body polygon.
This value defines a window around the device body for data collection.
A nonnegative range value collects processing polygons that are within the specified
range of the body polygon which might or might not interact with the body polygon.
The default is -1.
■ When the range value is -1, only processing_layer_hash polygons interacting
with the body layer polygon are selected for the polygon set.
■ When the range value is >0, a window is created by oversizing the body layer
polygon by the range value. All processing_layer_hash polygons interacting
with this window, either by overlap or by an externally touching edge, are selected
for the polygon set.
See the description of the processing_layer_hash argument of the nmos() and
pmos() functions for diagrams that illustrate the application of the range value.
recognition_layer
Optional. Specifies the layer used to form a MOS transistor when the gate polygon layer
does not interact with all other terminal polygons. All polygons required to form a
transistor must interact with a single polygon on this layer.
connect_sequence
Optional. Specifies the connect database. If specified, the connection is considered in
the device checking process.
source_drain_config
Optional. Specifies the MOS device types to be checked. The default is {NORMAL,
SINGLE}.
❍ SINGLE. Extracts only MOS devices that touch a single source or drain.
❍ NORMAL. Extracts only MOS devices that have separate regions for source and drain.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
check_device : function (void) returning void {
L : double = mos_length_min();
if (dblgt(L, 0.1))
{dev_set_error("L = " + L);}
};
optional_pins = {{bulk}},
connect_sequence = cdb1,
mos_func = check_device);
output_layer2 @= { @ "comment";
mos_select(drain = nsd,
gate = ngate,
source = nsd,
optional_pins = {{bulk}},
connect_sequence = cdb1,
mos_func = check_device);
};
See Also
gendev_select()
res_select()
move()
The move() function creates polygons by shifting all polygons on the input layer by the
specified offsets. See the prototype_options() function for more information about
defining the criteria for the creation of prototype cells during hierarchical preprocessing.
Syntax
move(
layer1 = polygon_layer,
x = double,
y = double,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
x
Required. Specifies the offset in the x-direction.
y
Required. Specifies the offset in the y-direction.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Figure 3-23 shows the shifting of the gate polygon according to the specified xy offsets.
Result = move( gate, -5, 5);
See Also
move_edge()
polygons()
shrink()
size()
move_edge()
The move_edge() function creates edges by shifting all edges on the input layer by the
specified offsets.
Syntax
move_edge(
layer1 = edge_layer,
x = double,
y = double,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge layer.
x
Required. Specifies the offset in the x-direction.
y
Required. Specifies the offset in the y-direction.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
x = move_edge( gate_edges, .1, .2 );
See Also
edge_size()
extend_edge()
move()
ndm_library()
The ndm_library() function defines an NDM library name and returns a handle to be used
by the output_library argument of the write_ndm() function.
Limitation:
The ndm_library() function cannot be called more than one time with the same
library_name and library_path arguments. The result, however, can be used in more
than one write_ndm() function.
Syntax
ndm_library(
library_name = "string",
library_path = "string"
);
Returns
ndm_library_handle
Arguments
library_name
Required. Specifies the NDM library name. See the output_library argument of the
write_ndm() function for more information.
library_path
Optional. Specifies the path to the NDM library. The default is ".".
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
ndm_merge_library_options()
ndm_options()
write_ndm()
ndm_merge_library_options()
The ndm_merge_library_options() function specifies a mapping from the master and
reference NDM libraries to replacement GDSII and OASIS libraries that are read in with
NDM data at the start of a verification run. This function can be called only one time in a
runset.
Note:
You can use the -ml command-line option to override the settings in the
ndm_merge_library_options() function. See the Command-Line Options section in
the “IC Validator Basics” chapter of the IC Validator User Guide for more information.
For example, if cell “A” has a frame view and a design view in the NDM library, the design
view is replaced with the GDSII or OASIS data for cell “A”. If cell “A” only has a frame view
in the NDM library, the missing design view data is created with data from the GDSII or
OASIS replacement library.
Using the ndm_merge_library_options() function, you can read all required GDSII,
OASIS, and NDM data during an IC Validator run to emulate the complete mask data set for
a designated top-level structure. The lower-level cells in the replacement data are not
permanently merged into the input NDM library. Data is temporarily merged for only this run.
Note:
The master NDM library and top-level cell are identified in the runset by the library()
function. The mapping specified in the ndm_merge_library_options() function never
looks for a replacement of the top cell.
When using the ndm_merge_library_options() function, you should be familiar with
• Master NDM libraries and reference libraries, and the order in which NDM searches
these libraries to find a cell.
• The ndm_options() function. Use this function to control the reading of frame and
design views, and the reading of other NDM data.
• The -lf command-line option. Use this command-line option to specify mapping of the
NDM layers to the runset layers. See the Command-Line Options section in the
“IC Validator Basics” chapter of the IC Validator User Guide for more information.
You can see the replacements in the run_details/top_cell.tree0 file. A tree file is shown in the
Example section.
Syntax
ndm_merge_library_options(
libraries = {{library_name = "string",
library_path = "string",
replacement_libraries = {{
file = "string",
Returns
void
Arguments
libraries
Required. Lists the NDM and replacement libraries.
❍ library_name. Required. Specifies the NDM library name. You only need to list the
NDM libraries for which you want to do replacements.
❍ library_path. Optional. Specifies the NDM library path, which can be either relative
or absolute. Use the library_path argument if your library is not in the run directory.
The default is the current working directory.
❍ replacement_libraries. Required. Specifies the replacement libraries. The
IC Validator tool searches the replacement libraries in the order specified looking for
cells. The first cell found is the one used.
Note:
A GDSII or OASIS file can be gzipped. The IC Validator tool automatically detects
if a GDSII or OASIS file is gzipped.
■ file. Specifies the replacement file.
■ layer_map_file. Optional. Specifies the layer mapping file for the replacement
library. You can map GDSII, OASIS, or OpenAccess data to NDM data.
Note:
When the OpenAccess layer mapping format is used, OpenAccess data is
mapped directly to the runset. This behavior differs from when the GDSII or
OASIS layer mapping formats are used, as there is no standard layer mapping
file format from OpenAccess to NDM or MILKYWAY that supports color
mapping.
The NDM layer mapping format used for the replacement libraries is:
ndm_layer_no[:ndm_purpose][:use_type][:mask_type]
oasis_or_gdsii_layer_no[:oasis_or_gdsii_data_type]
when the replacement library format is GDSII or OASIS.) Maps OpenAccess data
to NDM data. See the cell_mapping_file argument of the
openaccess_options() function for more information.
missing_cell
Optional. Specifies the action taken if a cell is missing from the replacement file. The
default is ABORT.
❍ ABORT. Specifies if the run stops when a cell in the NDM library is not found in a
replacement file.
❍ USE_NDM. If a cell in the NDM library is not found in a GDSII or OASIS replacement
file, takes the NDM design view from the NDM library.
report
Optional. Specifies the information written to the ndm_merge_library_options.log file.
The categories you can specify for output are USED_CELLS, UNUSED_CELLS,
MISSING_CELLS, LAYER_MAPS, and DUPLICATE_CELLS. The default output reports all
categories.
The ndm_merge_library_options.log file contains the information about cell usage during
replacement, layer mapping, and cell name modifications caused by mapping. This file
is in the run_details directory.
Note:
For errors, the error messages are written to the summary file (cell.sum) and to the
screen when you use the -verbose option, but not listed in the
ndm_merge_library_options.log file.
missing_library
Optional. Specifies the IC Validator action when the replacement library does not exist.
The default is ABORT.
❍ ABORT. issues an error message when a replacement library does not exist.
❍ CONTINUE. Behaves as if the replacement library was never specified and continues
running.
lef_foreign_cell_name
Optional. Specifies if LEF (Library Exchange Format) foreign cell names are used for
replacement cells. The default is IGNORE.
❍ USE. Uses LEF foreign cell names for replacement cells.
❍ IGNORE. Does not use LEF foreign cell names for replacement cells.
unmatched_reference_library
Optional. Specifies the IC Validator action when the reference library is unmatched. The
default is WARN.
❍ ABORT. Stops the run if the two NDM library names are the same, with two different
paths in this function and in the reference libraries.
❍ WARN. Writes a warning message in the ndm_merge_library_options.log file and
continues to run.
default_replacement_libraries
Optional. Specifies the replacement libraries to be used for all NDM libraries that are not
specified in the libraries argument of the ndm_merge_library_options() function.
❍ file. Specifies the replacement file.
❍ layer_map_file. Optional. Specifies the layer mapping file for replacement library.
You can map GDSII, OASIS, OpenAccess data to NDM data.
Note:
When the OpenAccess layer mapping format is used, OpenAccess data is
mapped directly to the runset. This behavior differs from when the GDSII or
OASIS layer mapping formats are used, as there is no standard layer mapping file
format from OpenAccess to NDM or Milkyway that supports color mapping.
The NDM layer mapping format used for the replacement libraries is:
ndm_layer_no[:ndm_purpose][:use_type][:mask_type]
oasis_or_gdsii_layer_no[:oasis_or_gdsii_data_type]
Note:
The object_mapping_file option does not map to NDM layers and data
types. This behavior is consistent with the behavior of the OpenAccess layer
mapping file.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
In the following example, the design has seven libraries: A, B1, B2, C1, C2, C3, and C4. “A”
is the master library and cell “A” is the top cell of the entire design. To make the example
easy to study, each library has the same name as its top cell. Here is the mapping
represented as a table:
Table 3-19 Mapping NDM Libraries
B1
B2
C1 ./C1_REPL.gds
C2
C3 ./C3_REPL.oas
C4
In the runset file, the ndm_merge_library_options() function maps the cells, as shown
here:
#include "icv.rh"
library(
library_name = "A",
library_path = ".",
cell = "A",
format = NDM
);
ndm_merge_library_options(
libraries = {
{"C1", ".", {{"./C1_REPL.gds", GDSII, "lmf1"}}},
{"C3", ".", {{"./C3_REPL.oas", OASIS, "lmf3"}}}
},
missing_cell = ABORT
);
The .DUP# suffix is only used for NDM cells with the same name. For example, NDM
libraries C1, C2, C3, and C4 all have a “D” cell. Therefore, all but the first one are renamed
to avoid conflict. This functionality is not part of the ndm_merge_library_options()
function, but is done when NDM data is read. The cells that are replaced are C1 and C3, and
their replacements, are unconditionally appended with the suffix .REPL#, regardless of
whether or not their name conflicts with an existing Milkyway cell name. You can see this in
the hierarchical tree. For example,
C1
C1.REPL#0
C1 is the original NDM cell (CEL view data suppressed) and C1.REPL#0 is the replacement
GDSII cell. The numeral following the # corresponds to the order in which the replacement
GDSII and OASIS libraries are specified in the ndm_merge_library_options() function.
Example 3-3 Tree File Example
A
B1
C1
C1.REPL#0
D.REPL#0
E1.REPL#0
C2
D.DUP#1
E2
D.DUP#1
B2
C3
C3.REPL#1
D.REPL#1
E3.REPL#1
C4
D
E4
D
D
In addition to the tree file, the ndm_merge_library_options.log file gives detailed information
about all NDM replacements that have been made. Example 3-2 shows the resulting
ndm_merge_library_options.log file.
Example 3-4 ndm_merge_library_options.log File Example
********
Used Cells (GDSII/OASIS)
********
Cell Name Name Mapping Final Used Name GDSII/OASIS File
(from GDSII/OASIS) (from icc_cell_map_file option) (in NDM) (cell pulled from)
------------------ ------------------------------- --------------- ------------------
C1_GEORGE C1 C1.REPL#0 ./C1_REPL.gds
C3_IGLOP C3 C3.REPL#1 ./C3_REPL.oas
E1_GEORGE E1 E1.REPL#0 ./C1_REPL.gds
D_GEORGE D D.REPL#0 ./C1_REPL.gds
E3_IGLOP E3 E3.REPL#1 ./C3_REPL.oas
D_IGLOP D D.REPL#1 ./C3_REPL.oas
********
Unused Cells (GDSII/OASIS)
********
Cell Name GDSII/OASIS File Name
(from GDSII/OASIS) (cell pulled from)
------------------ ---------------------
********
Missing Cells (ndm cell exists but corresponding GDSII/OASIS cell does not)
********
Cell Name
(from GDSII/OASIS) NDM Library Name
------------------ ---------------------
********
Layer Maps (from GDSII/OASIS to NDM)
********
GDSII/OASIS File Layer Map File
---------------- --------------
./C1_REPL.gds lmf1
./C3_REPL.oas lmf3
See Also
ndm_library()
ndm_options()
write_ndm()
ndm_options()
The ndm_options() function specifies the behavior of the IC Validator tool when reading an
NDM library. By default, the tool reads the design view of a cell if it is present. If the design
view is missing, the tool looks for a frame view based on the setting of the alternate_view
argument. If, after looking for the alternate view, the cell cannot be found, the tool either
continues with an empty cell or aborts, depending on the setting of the missing_cell
argument.
This function can be called only one time in a runset.
Syntax
ndm_options(
generate_pin_text = NONE | TOP | ALL, //optional
pin_text = NET_NAME | PIN_NAME |
REASSIGN | PORT_NAME, //optional
generate_polygon_text = NONE | TOP | ALL, //optional
replace_instance_name_characters = {{search_string = "string",
replace_string = "string"},
...}, //optional
rule_name_delimiter = "string", //optional
drc_black_box_cells = {"string", ...}, //optional
lvs_black_box_cells = {"string", ...}, //optional
alternate_view = NONE | FRAME_VIEW | DESIGN_VIEW, //optional
missing_cell = ABORT | IGNORE, //optional
design_types = {ndm_design_type, ...}, //optional
exclude_design_types = {ndm_design_type, ...}, //optional
internal_designs = {{use = FILL_USE | FILL_BLOCKAGE_USE,
out_of_date = ABORT | USE | DISCARD,
read_from = TOP | ALL}, ...}, //optional
search_path = "string", //optional
design_label = "string", //optional
cut_table_datatype_mapping = ALWAYS | NEVER | DATATYPE_ZERO_ONLY,
//optional
merge_blockage_with_layer = {views = {view_type, ...},
cells = {"string", ...}},
//optional
mask_shifted_cell_name_suffix = {name = "string",
extension = NONE | LAYER_NUM_SHIFT},
//optional
instance_names = KEEP | DISCARD, //optional
layout_view_cells = {"string", ...}, //optional
merge_blockage_with_layer_before_layer_map = true | false //optional
);
Returns
void
Arguments
generate_pin_text
Optional. Specifies if pin text is generated. In some design styles, generating net names
from pin text can create false text-open error messages. To avoid these error messages,
set this argument to NONE or TOP. The default is ALL.
❍ NONE. Specifies that net names of pins in the hierarchy are not converted to text.
❍ TOP. Specifies that only net names of pins in the top-level cell are converted to text.
❍ ALL. Specifies that net names of all pins in the hierarchy are converted to text.
pin_text
Optional. Determines where to get generated text for pins in the NDM library. The default
is NET_NAME.
❍ NET_NAME. Reads texts from the net names of the pins.
❍ REASSIGN. Reads texts from both the pin name and net name for pins. If the pin name
and net name are the same, the IC Validator tool uses the pin name. If the pin name
and net name are different, the IC Validator tool uses the net name and tags the text
as an assigned net for hierarchical net assignment.
Setting pin_text(REASSIGN) has the same functionality as manually entering cell
and net names in the reassign_text argument of the text_options() function.
Using pin_text(REASSIGN) provides automated assignments when you are using
an NDM library.
❍ PORT_NAME. Reads texts from the port names.
generate_polygon_text
Optional. Specifies if text points are generated from the net names of polygons in the
input library. The default is NONE.
❍ NONE. Does not generate text from polygons in the input library.
❍ TOP. Generates polygon text only for the top cell of the design.
replace_instance_name_characters
Optional. Lists the strings to be replaced in instance names. Neither string can use string
matching. By default, the IC Validator tool does not replace any characters.
rule_name_delimiter
Optional. Defines a delimiter for rule names. Use this argument to separate the rule
name from the violation comment. The violation comment is truncated at the first
instance of this delimiter for reporting in the icv_sdrc.conclude file.
Note:
This delimiter is used only to determine the rule name for the NDM icv_sdrc.conclude
file and used for the IC Compiler II error browser in In-Design runs.
If the delimiter is not matched, the entire violation comment is reported in the
icv_sdrc.conclude file. The violation comment might be truncated for length; the
maximum length of a violation comment is 1024 characters.
❍ search_string. Specifies the delimiter. The search string must be a GNU extended
regular expression. The default is
"[[:space:]]+:|[[:space:]]*:[[:space:]]"
That is, the default is one of the following:
■ One or more white space characters followed by a colon.
■ Zero or more white space characters followed by a colon followed by one white
space character.
❍ ignore_case. Specifies if the character case in the violation comment is considered
when matching the delimiter. The default is false.
■ true. The search is case-sensitive.
drc_black_box_cells
Optional. Specifies the black-box cells for DRC. For these cells, the tool first tries to read
the frame view. If the frame view cannot be found, the tool looks for a design view. If still
no views can be found for the cell, the tool continues with an empty cell. The tool reads
all objects from the frame view. String matching using metacharacters is allowed. See
“String Matching” on page A-11 for more information.
Note:
If DRC black-box cells are listed, the lvs_black_box_cells argument cannot be
used. If neither DRC nor LVS black-box cells are specified, polygons from design
view and pins from frame view are read. If the ndm_merge_library_options()
function is used in the same IC Validator session, it has precedence over any of its
replacement cells that might also exist in the DRC black-box cell list.
For the top cell, all data from the design view is read. If the design view does not exist
for the top cell, an error is reported and the run stops.
lvs_black_box_cells
Optional. Lists the black-box cells for LVS. If the frame view cannot be found, the tool
looks for a design view. If still no views can be found for the cell, the tool continues with
an empty cell. The tool reads only pins from the frame view. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
Note:
If LVS black-box cells are listed, the drc_black_box_cells argument cannot be
used. If neither DRC nor LVS black-box cells are specified, pins from frame view are
read. If the ndm_merge_library_options() function is used in the same
IC Validator session, it has precedence over any of its replacement cells that might
also exist in the LVS black-box cell list.
alternate_view
Optional. Specifies behavior if the design view is missing. The default is FRAME_VIEW.
❍ NONE. Applies the behavior specified by the missing_cell argument.
❍ FRAME_VIEW. Reads the entire frame view of a cell if the design view is missing. If
both the design and frame views are missing, the behavior specified by the
missing_cell argument applies.
Note:
The design view is always required for the top cell of the design.
❍ DESIGN_VIEW.
missing_cell
Optional. Specifies behavior if a cell is missing a required view, as defined by the
drc_black_box_cells and lvs_black_box_cells arguments. The default is IGNORE.
❍ IGNORE. Continues the IC Validator run. A warning is reported and missing NDM cells
are empty.
❍ ABORT. Writes an error message and the run stops. If a cell is in either the DRC or LVS
black-box cells list, the frame view is required for that cell. If the cell is not in a
black-box cells list, the design view is required.
design_types
Optional. Specifies the design types that determine which cells are read from the NDM
library. It does not apply to the top cell. Using the ndm argument of the assign() and
assign_edge() functions, you can specify the design types for certain layers. You can
use the exclude_ndm_design_types() function to obtain a list of all possible design
types except those specified by the exclude argument. By default, the IC Validator tool
reads all design types. Table 2-9 in the assign() function lists the design types.
exclude_design_types
Optional. Specifies the design types that determine which cells are not read from the
NDM library. It does not apply to the top cell. If a design type is listed in the
design_types and exclude_design_types arguments, it is excluded. By default, the
IC Validator tool does not exclude any design types. Table 2-9 in the assign() function
lists the design types.
Note:
If a cell type is excluded, no data is read from the cell and no subtrees under the cell
are placed.
internal_designs
Optional. Specifies the data that is read from internal designs. It is only used for fill. The
default is
{{use = FILL_USE, out_of_date = ABORT, read_from = ALL}}
Note:
The fill internal design is read by default. To disable the reading of all internal design
settings including fill, set internal_designs = {}.
❍ use. Optional. Specifies the class of internal designs are read.
Using the ndm argument of the assign() and assign_edge() functions, you can
specify the internal design settings for certain layers.
■ FILL_USE. Specifies reading internal designs that are for fill. These internal
designs have the extension .FILL.
■ FILL_BLOCKAGE_USE. Specifies reading internal designs that are for fill blockage
or guidance. These internal designs have the extension .FILLBLKG.
❍ out_of_date. Optional. Specifies the action taken by the tool if the timestamp of the
internal design is earlier than that of the parent design it is being read from. The
timestamp is only checked on the first level internal design underneath a given parent
design view. The default is ABORT.
■ ABORT. Stop the run if the internal design timestamp is earlier than the design view.
■ DISCARD. Discards the internal design if the internal design timestamp is earlier
than the design view. A warning is reported.
❍ read_from. Optional. Specifies the design view cells that the tool reads internal
designs from. The default is TOP.
search_path
Optional. Specifies the paths to search for reference libraries. The paths are searched in
the order listed. This option is equivalent to the search_path variable within the
IC Compiler II tool.
design_label
Optional. Specifies the design label of the top cell. The default is no design label. This
option might be overridden by the -ndm_design_label command-line option.
cut_table_datatype_mapping
Optional. Specifies how the IC Validator tool uses cutDataTypeTbl table definitions in the
NDM library. The default is ALWAYS.
❍ ALWAYS. Always uses the cut datatype table, if available in the NDM library, and sets
datatypes for cut layer shapes as defined in the table.
❍ NEVER. Always uses the datatype of the shape stored in the NDM library and does not
change the datatype based on cut datatype table information.
❍ DATATYPE_ZERO_ONLY. Sets datatypes for cut layer shapes as defined in the cut
datatype table only if the datatype of the NDM shape is zero. If the datatype of an
NDM shape is non-zero, the datatype is preserved.
merge_blockage_with_layer
Optional. Specifies that a routing blockage, which occurs when the isZeroSpacing
attribute is false, merges with the associated routing layer and is treated as a routing
metal. The blockage considered for merging can further be filtered by views and cells.
❍ views. Includes the list of NDM views to consider for merging blockages. See
Table 2-5 in the assign() function section for a list of views. By default, the
IC Validator tool reads all views.
❍ cells. Includes the list of NDM cells to consider for merging blockages. String
matching using metacharacters is allowed. For more information, see “String
Matching” on page A-11. By default, all cells are included when views are specified.
mask_shifted_cell_name_suffix
Optional. Specifies how the cell name suffix is generated for new cells created from mask
shifting on instance placements.
❍ name. Specifies the name to use for the suffix. The default is SHIFT.
❍ extension. Specifies whether to add an additional extension based on layer and shift
values to make the final cell name unique. The default is LAYER_NUM_SHIFT.
■ NONE. Specifies that no additional extension is used.
Original cell name Shifted layers Shifted amount Final cell name
A 15 15 by 1 A_SHIFT_15_1
B 17 17 by 1 B_SHIFT_17_1
mask_shifted_cell_name_suffix={"MYSHIFT", NONE}
Original cell name Shifted layers Shifted amount Final cell name
A 15 15 by 1 A_MYSHIFT
B 17 17 by 1 B_MYSHIFT
instance_names
Optional. Specifies whether instance names from the input layout should be retained by
the IC Validator tool. The instance names can be used for netlisting or possibly reused
for the output layout. Retaining instance names could result in extra processing time
during the reading of the input layout. The default is KEEP.
❍ KEEP. Retains instance names from the input layout.
❍ DISCARD. Does not retain instance names from the input layout.
layout_view_cells
Optional. Specifies the layout view that is used for the cell name. For these cells, the tool
reads the layout view first. If a layout view cannot be found, the tool looks for a design
view. If still no views can be found for the cell, the tool looks for a frame view. The tool
reads all objects from the frame view. String matching using metacharacters is allowed.
See “String Matching” on page A-11 for more information. The default is an empty string
("").
Note:
The layout view cells are always specified prior to DRC or LVS black-box cells, but
not to their GDSII or OASIS replacement cells.
merge_blockage_with_layer_before_layer_map
Optional. Specifies whether the merge_blockage_with_layer argument takes
precedence over layer mapping. The default is false.
❍ true. Specifies that the merge_blockage_with_layer argument takes precedence
over layer mapping.
❍ false. Specifies that layer mapping takes precedence over the
merge_blockage_with_layer argument.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
ndm_library()
ndm_merge_library_options()
write_ndm()
negate()
The negate() function creates the inverse of the input layer. The boundaries of the inverse
can be either the layer or chip extents, and can be adjusted with an explicit border. A
boundary with a negative area results in an empty output layer.
Syntax
negate(
layer1 = polygon_layer,
extents = LAYER | CHIP, //optional
border = double, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
extents
Optional. Specifies the extent used. The default is LAYER.
❍ LAYER. Uses the extents of the input layer.
❍ CHIP. Uses the extents of the entire chip, as defined by the layers specified in assign
functions.
border
Optional. Specifies the value for sizing the extents box. A negative value shrinks the
extents; a positive value expands the extents. The default is 0.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Consider the input data shown in Figure 3-24. Both layerA and layerB are specified in the
assign() function.
In Example 4, the boundary extents are equivalent to the chip extents. In this example, the
chip extents are defined by the extents of layerA and layerB.
Result = negate(layer1 = layerA, extents = CHIP);
Example 3 Example 4
See Also
assign()
negate_in_window()
not()
negate_in_window()
The negate_in_window() function creates the inverse of the layer1 layer that is within the
specified window.
Syntax
negate_in_window(
layer1 = polygon_layer,
window = {left = double, bottom = double,
right = double, top = double},
border = double, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
window
Required. Specifies the window used for the negate. The window coordinates are in the
context of the top cell.
border
Optional. Specifies the value for sizing the extents box. A negative value shrinks the
extents; a positive value expands the extents. The default is 0.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Example
In Figure 3-26 layerA is negated in the boundary formed by the specified window region.
Result = negate_in_window(layer1 = layerA, window = {0, 0, 24, 16});
(24,16)
(0,0)
See Also
negate()
not()
polygons()
net_color_check()
The net_color_check() function checks the specified nets to determine if the color of the
net is expected. In the runset, you must call this function after the
color_conflict_layers() function.
Syntax
net_color_check(
connect_sequence = connect_database,
color_db = color_database,
color_file = "string",
report_file = color_report_handle,
xref_db = xref_database_handle, //optional
error_net_output = ONE | ALL, //optional
report_errors = {UNMATCHED_TEXT}, //optional
ignore_missing_color = true | false, //optional
ignore_terminal_missing_color = true | false, //optional
name = "layer_label" //optional
);
Returns
void
Arguments
connect_sequence
Required. Specifies the connect database. If you are using the xref_db argument, this
database must be the same as the connect database used by device extraction and LVS
comparison; that is, the connect database used by the init_device_matrix() function.
color_db
Required. Specifies the color database generated by the color_conflict_layers()
function. The color database describes the colors of all interested layers. All layers in the
color database must be connected in the connect database.
color_file
Required. Specifies the color rules file, which is an ASCII file. This file defines the rules
that the net_color_check() function checks.
report_file
Required. Specifies the handle of the color report. This report includes all errors and a
summary of the violations for the execution of the net_color_check(). The
color_report_handle must be defined by the net_color_report_file() function before
you call the net_color_check() function.
xref_db
Optional. Specifies the handle of the database from which all the cell names and net
names in the color file are interpreted as schematic names. If an xref_db is not
provided, all of the names are interpreted as layout names. The handle must be
previously defined by the compare() function.
error_net_output
Optional. Specifies the coordinates used for error reporting. The default is ONE.
The net_color_check() function checks each color rule based on the input color
database and connectivity from the connect database. The checking of each rule is
independent.
Each color rule specifies the expected colors of one net. If the target net connects to an
unexpected color, it is considered as a conflict color layer and violations are reported.
❍ ONE. Reports only one coordinate from each conflict color layer.
report_errors
Optional. Specifies the types of additional errors to report. The default is an empty list.
❍ UNMATCHED_TEXT. Reports an error if the net is not texted with a net name that is in
the color rules file. The color rules file is specified with the color_file argument.
This option is available only when you specify a database with the xref_db
argument.
ignore_missing_color
Optional. Specifies how missing layers are treated if a device terminal. The default is
false.
ignore_terminal_missing_color
Optional. Specifies how missing layers are treated if a device terminal does not interact
with any conflict or correct colors. The default is false.
❍ true. Ignores missing layers.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Example
In the following example,
Result = negate_in_window(layer1 = layerA, window = {0, 0, 24, 16});
Example:
// This is a comment
// Cell Net Color Check
// cellName netName colors
CELL1 net1 M1A, M2A
CELL2 I1/I2/net2 M1B, M2B
CELL3 net3 // Colors missing = rule ignored silently
See Also
color_conflict_layers()
net_color_report_file()
net_color_report_file()
The net_color_report_file() function defines a file where the net_color_check()
function reports error data.
Note:
You must define a unique error report file for net_color_check() function.
Syntax
net_color_report_file(
file = "string"
);
Returns
color_report_handle
Arguments
file
Required. Names the error report file.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
net_color_check()
net_device_count()
The net_device_count() function selects polygons from nets in the device database that
fit the specified criteria.
Syntax
net_device_count(
device_db = device_database,
count = integer, //optional
devices = {{device_name = "string",
device_layers = {polygon_layer, ...},
device_type = NMOS | PMOS | NPN | PNP | PN |
NP | RESISTOR | CAPACITOR |
INDUCTOR | GENERIC | ALL},
...}, //optional
connected_to_any = {polygon_layer, ...}, //optional
net_type = NOT_TEXTED | TEXTED | ALL, //optional
texted_with = {"string," ...}, //optional
output_from_layers = {polygon_layer, ...}, //optional
error_coordinates = TEXT | POLYGON, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL //optional
);
Returns
polygon layer or error result
Arguments
device_db
Required. Generates the layout netlist from the specified device database. The
extract_devices() function generates this database.
count
Optional. Specifies the number of unique devices that must be on a net for the net to be
selected. These values must be nonnegative. See “Constraints” on page A-4 for more
information. The default is 0.
❍ If count is 0, a net is selected if there are no devices connected to the net. (This net
is a floating net.)
❍ If count is 1, a net is selected if there is only one device connected to the net. (This
net is a one-connection net.)
devices
Optional. Lists the devices and layers that determine if a net is connected to a device.
The default is all devices.
❍ device_layers. Optional. Specifies the layers that must be defined for a particular
device. When the layer list is empty, all terminal layers are used.
❍ device_type. Optional. Specifies the device type. The default is ALL.
connected_to_any
Optional. Specifies the layers to be selected for output. At least one of these layers must
be on the net. By default, the IC Validator tool does not require any specific layers.
net_type
Optional. Specifies the net types to be considered for selection. The default is ALL.
❍ NOT_TEXTED. Specifies that only untexted nets are considered.
❍ ALL. Specifies that both texted and untexted nets are considered.
texted_with
Optional. Specifies the text strings. To be selected for output, one of these strings must
text the net. String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information. By default, the IC Validator tool considers all nets for
selection.
output_from_layers
Optional. Specifies the layers from which polygons are collected from selected nets.
These layers must be in the connect database that is in the device database.
By default, the IC Validator tool collects polygons from all layers specified in the
connected_to_any argument. If the connected_to_any argument is empty, then
polygons from all layers in the connect database are collected.
error_coordinates
Optional. Coordinates used for error reporting. The default is POLYGON.
Note:
This argument is used only for error reporting. It does not affect the derived layer.
❍ POLYGON. Reports an arbitrary coordinate on an arbitrary polygon from an arbitrary
layer in the output_from_layers argument on the selected nets.
❍ TEXT. Reports the coordinate of the text on the selected nets. If there is no text on the
net, then the error_coordinates argument setting reverts to POLYGON.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_ERC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
net_device_count(
device_db = device_db, // from previous extract device function
count > 0,
connected_to_any = { M1, M2 },
net_type = TEXTED,
text = {"VSS", "VDD"}
);
See Also
device_net_count()
net_options()
The net_options() function controls the declaration of schematic power, ground, and
global nets in the schematic netlist. Netlists can be modified to join nets in both the
schematic and layout netlists. This function must be called before assign functions.
You can choose the source of the global nets:
Note:
The global net settings in the schematic() function add global netlists into the translated
netlist. The read_netlist_global argument of the net_options() function controls if
the global netlists are used during the compare operation.
• Do not use any global nets by setting
schematic_global = { }
read_netlist_global = false
Syntax
net_options(
schematic_power = {"string", ...}, //optional
schematic_ground = {"string", ...}, //optional
schematic_global = {"string", ...}, //optional
schematic_join_net = {{"string", ...}, ...}, //optional
layout_join_net = {{"string", ...}, ...}, //optional
read_netlist_global = true | false, //optional
report_coordinates = {DEVICE_PIN, EQUIV_PORT} //optional
);
Returns
void
Arguments
schematic_power
Optional. Specifies the net names used to name a power net in the schematic. These
names are used by compare during merging and filtering operations.
The following characters are not allowed in net names: space, tab, and the reserved
characters
= { } , "
schematic_ground
Optional. Specifies the net names used to name the ground net in the schematic. These
names are used by compare during merging and filtering operations.
The following characters are not allowed in net names: space, tab, and the reserved
characters
= { } , "
schematic_global
Optional. Specifies the schematic net names that are treated as global during netlist
comparison. These nets are also referred to as runset global nets. Typically, these nets
are power and ground nets, which are assumed to be globally connected. If no nets are
specified in an LVS runset, the compare process attempts to automatically produce them
based on global net information in the schematic netlist and typical global net names.
Global schematic nets not specified as global are treated as local nets.
The following characters are not allowed in net names: space, tab, and the reserved
characters
= { } , "
schematic_join_net
Optional. Lists the individual schematic net names to be joined to form single nets. You
can only join top-level nets.
layout_join_net
Optional. Lists the individual layout net names to be joined to form single nets. You can
only join top-level nets.
read_netlist_global
Optional. Selects the reading and processing of global nets from the input netlist. The
default is true.
Note:
The IC Validator tool uses global nets from the netlist independently of the
schematic_global argument of the net_options() function and the promote_text
argument of the text_options() function.
If the read_netlist_global argument is true and the runset specifies a non-empty list
for the schematic_global argument of the net_options() function or the
promote_text argument of the text_options() function, the list of global nets is the
concatenation of the runset specified values and the values read from the global nets in
the netlist.
❍ true. Reads the global nets from the schematic netlist for schematic global texts.
Also, reads layout global texts from the specified layout file if the layout_file
argument of the read_layout_netlist() function is used. This information is used
for propagating global nets inside the netlist.
❍ false. Ignores the global nets from the specified layout file if the layout_file
argument of the read_layout_netlist() function is used.
report_coordinates
Optional. Controls the reporting of equivalence cell port coordinates in the sum.cell.cell
file and the highlighting of equivalence cell ports in VUE. By default, the IC Validator tool
does not display or report any port or pin coordinates.
❍ EQUIV_PORT. Reports equivalence cell port coordinates in the sum.cell.cell file and
highlights equivalence cell ports in VUE.
❍ DEVICE_PIN. Reports device pin coordinates in the sum.cell.cell file and highlights
device pins in VUE.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
net_options(
schematic_power = {"VCC", "VDD", "AVDD"},
schematic_ground = {"GND", "AGND"},
schematic_global = {"VCC", "VDD", "AVDD", "GND", "AGND"},
schematic_join_net = {{"net1", "net2"}, {"net3", "net4"}}
);
See Also
text_net()
net_path_check()
The net_path_check() function selects polygons from nets on the specified path, path_to
argument, of the device database that fit the specified criteria. This function checks nets to
determine if a path exists to a power or ground net through resistor devices and the source
or drain of MOS devices. All nets are processed within the context of the top cell.
Syntax
net_path_check(
device_db = device_database,
devices = {"string", ...}, //optional
power = {"string", ...}, //optional
ground = {"string", ...}, //optional
other_nets = {"string", ...}, //optional
filter_nets = {TOP_PORT, FLOATING, POWER, GROUND,
OTHER_NETS, BREAK_PATH}, //optional
path_to = NONE | POWER | GROUND | POWER_AND_GROUND |
POWER_OR_GROUND | POWER_XOR_GROUND, //optional
unused_device = CONNECT | IGNORE, //optional
output_from_layers = {polygon_layer, ...}, //optional
break_path = {{texts = {"string", ...},
cells = {"string", ...}},...} //optional
);
Returns
polygon layer or error result
Arguments
device_db
Required. Generates the layout netlist from the specified device database. The
extract_devices() function generates this database.
devices
Optional. Locates the net paths using the specified devices. The default is all devices.
power
Optional. Determines the text for the power net in the layout using the specified strings.
String matching using metacharacters is allowed. See “String Matching” on page A-11 for
more information.
If no text is specified here, by default, the IC Validator tool uses the text specified in the
layout_power argument of the text_options() function. A runset error occurs if no
text is specified in the layout_power argument of the text_options() function.
Note:
The net_path_check function searches for power text only in the top cell.
ground
Optional. Specifies the text strings for the ground net in the layout. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
If no text is specified here, the default ({}) is to use the text specified in the
layout_ground argument of the text_options() function. A runset error occurs if no
text is specified in the layout_ground argument of the text_options() function.
Note:
The net_path_check() function searches for ground text in only the top cell.
other_nets
Optional. Specifies the text strings for additional nets when the path_to argument is
NONE. String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information. The default is all nets.
Note:
The net_path_check() function searches for text in additional nets only in the top
cell.
filter_nets
Optional. During output, ignores the specified net types. The default is no filtering.
❍ TOP_PORT. Ignores nets that are connected to top-level ports.
❍ FLOATING. Ignores nets that are floating (not connected to any device).
❍ OTHER_NETS. Ignores additional nets when the path_to argument is NONE. See the
other_nets argument for more information.
path_to
Optional. Specifies the connections required for a net to be selected. The default is NONE.
❍ NONE. Specifies that the net does not connect to the specified power, ground, or other
nets.
❍ POWER. Specifies that the net connects only to power.
❍ POWER_AND_GROUND. Specifies that the net connects to both power and ground.
❍ POWER_XOR_GROUND. Specifies that the net connects to power or ground but not both.
unused_device
Optional. Specifies if unused devices are used in forming paths. The default is CONNECT.
❍ CONNECT. Specifies that unused devices form connections.
output_from_layers
Optional. Specifies the layers from which polygons are collected from selected nets to
create the output layer or report errors. These layers must be in the connect database
that is in the device database.
By default, the IC Validator tool collects polygons from all layers in the connect database.
break_path
Optional. Lists the text on specified cells that breaks path propagation.
❍ texts. Required. Specifies the text strings that break path propagation. String
matching using metacharacters is allowed. See “String Matching” on page A-11 for
more information.
❍ cells. Optional. Specifies the cells from which text from the texts option breaks
propagation. String matching using metacharacters is allowed. See “String Matching”
on page A-11 for more information. By default, path breaking applies to all cells for
text specified in the texts option.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_ERC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
net_path_check(
device_db = device_db, // from previous extract device function
power = {"VDD", "VDDIO"},
ground = {"GND", "VSSIO"},
output_from_layers = {M1, M2},
path_to = NONE
);
net_path_check(
device_db = device_db, // from previous extract device function
power = {"VDD"},
ground = {"GND"},
other_nets = {"GRA"},
path_to = NONE
);
In this file,
• Structure Parent Struct is the name of the parent structure where the error is located.
• Cell Struct is the name of the cell structure where the error is located.
• Cell Coords are the coordinates of the error in the cell structure (Note: The same error
(if it is repeated) has different coordinates based on where an instance is located and
what is causing the error.)
• Net is the net name.
• Path To is the state indicating whether the net has a path to None, Net1, Net2, or Net1
XOR Net2.
Note:
If an error is found in all instances of a structure, the first line reports "In All Instances Of."
See Also
device_net_count()
net_device_count()
net_polygon_by_property()
The net_polygon_by_property() function makes a copy of a polygon layer with
properties collected from net information. A remote function is executed one time for each
polygon specified in the output_from_layer argument. The remote function specifies the
properties to be written for each polygon.
Note:
Properties on a polygon layer are only recognized by the drc_features(),
net_polygon_by_property(), and select_by_double_property() functions. All
other functions ignore properties on a polygon layer and do not propagate the properties
to their result.
For example, you can use this function for a metal spacing based on text check:
1. Call the text_to_double_property() function to convert text to properties.
2. Use the connect() function to add the output of the text_to_double_property()
function to the connect database.
3. Use a remote function called in the net_polygon_by_property() function to
accumulate net properties for each polygon.
4. Perform spacing checks using the IC Validator functions.
5. Use the drc_features() function to check the properties on the polygons associated with
each spacing violation.
Syntax
net_polygon_by_property(
connect_sequence = connect_database,
output_from_layer = polygon_layer,
net_polygon_function = function,
layer_groups = {"string" => {polygon_layer, ...}, ...},
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
connect_sequence
Required. Specifies the connect database.
output_from_layer
Required. Specifies the layer used for selecting polygons for the output. This layer must
be in the connect database.
net_polygon_function
Required. Specifies the remote function containing the conditions relative to net
properties and characteristics. The function calculates and saves the properties. This
function is called one time for every polygon specified in the output_from_layer
argument. See “Net Polygon by Property Utility Functions” in Chapter 4 for more
information about the utility functions you can use to define this remote function.
layer_groups
Required. Specifies a hash of string to polygon layers. The strings are used by the
remote function to access the layer-based properties on a given net. All of these layers
must be connected.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
text_to_double_property()
net_polygon_select()
The net_polygon_select() function selects polygons from nets in the specified connect
database that fit the specified criteria.
The function creates two distinct outputs:
• The function returns a layer that is created by selecting polygons from the input property
layer, which is specified by the in_property_layer argument, that fit the specified
constraints.
• Also, the function can create a property layer, which is specified by the
out_property_layer argument, by selecting polygons from the input property layer that
fit the specified constraints. The property layer polygons have specific properties
attached to them.
A remote function specifies arithmetic conditions relative to net parameters and polygon
properties. To be selected, a polygon must meet all specified constraints and must be saved
in the remote function.
For example, accumulation of charge on the gate layer of a CMOS design can be
represented by saving property values to gate layer polygons, adding additional
connectivity, and then reading the polygon properties and including them into new
calculations.
Errors for the selected polygons are reported to the LAYOUT_ERRORS file, and appear as
an X in VUE.
Syntax
net_polygon_select(
connect_sequence = connect_database,
in_property_layer = property_layer,
out_property_layer = out_property_layer,
net_polygon_function = function,
layer_groups = {"string" => {polygon_layer, ...},
...}, //optional
connected_to_all = {polygon_layer, ...}, //optional
not_connected_to_all = {polygon_layer, ...}, //optional
connected_to_any = {polygon_layer, ...}, //optional
not_connected_to_any = {polygon_layer, ...}, //optional
net_type = NOT_TEXTED | TEXTED | ALL, //optional
texted_with = {"string", ...}, //optional
texted_at = TOP_OF_NET | ANY_LEVEL | HIGHEST_TEXT,
//optional
output_from_layers = {polygon_layer, ...}, //optional
group_errors = true | false, //optional
name = "layer_label", //optional
save_layer_properties = true | false //optional
);
Returns
polygon layer or error result
Arguments
connect_sequence
Required. Specifies the connect database.
in_property_layer
Required. Specifies the property layer where previously stored properties are passed to
the net_polygon_function argument. This layer is created by a previous
net_polygon_select() function or by the initialize_property() function.
out_property_layer
Required. Specifies the output property layer where properties are stored when the
nps_save_property() utility function is called. This layer can be the input property layer
of a subsequent call to the net_polygon_select() function.
net_polygon_function
Required. Specifies the remote function containing the arithmetic conditions for layer
parameters on a net that must be met in order for a polygon or net to be selected. It also
provides access to storing and retrieving properties. See “Net Polygon Select Utility
Functions” in Chapter 4 for more information about the utility functions you can use to
define a remote function.
layer_groups
Optional. Specifies the hash of string to polygon layers. The strings are used by the
remote function to access the layer-based parameters on a given net. The default is an
empty hash ({}).
connected_to_all
Optional. Specifies the layers. To be selected for output, all of these layers must be on
the net. By default, the IC Validator tool does not require any specific layers.
not_connected_to_all
Optional. Specifies the layers. If all layers are on the net, the net is not selected. By
default, the IC Validator tool does not exclude any layers.
connected_to_any
Optional. Specifies the layers. To be selected for output, at least one of these layers must
be on the net. By default, the IC Validator tool does not require any specific layers.
not_connected_to_any
Optional. Specifies the layers. If any one of the layers is on the net, the net is not
selected. By default, the IC Validator tool does not exclude any layers.
net_type
Optional. Specifies the net types to be checked. The default is ALL.
❍ NOT_TEXTED. Checks only untexted nets.
texted_with
Optional. Specifies the text strings. To be selected for output, the text must match at least
one of these strings. String matching using metacharacters is allowed. See “String
Matching” on page A-11 for more information. Specifying {} ignores all text. The default
({*}) is all texted nets.
texted_at
Optional. Specifies where to search for the text. The default is TOP_OF_NET.
Note:
If the net_type argument is NOT_TEXTED, the texted_with argument is ignored.
❍ TOP_OF_NET. Searches only in the top hierarchical level of each net for text. If text is
not found at the top hierarchical location, the net_select() function considers this
net as untexted.
❍ ANY_LEVEL. Searches nets at all hierarchical levels for text.
❍ HIGHEST_TEXT. Looks for the highest hierarchical level on the net for the specified
text. The tool selects the net whose highest level text matches the specified text even
if the net continues untexted higher up. This option is not available when the
processing_mode argument is CELL_LEVEL.
Note:
Multiple texts are classified as HIGHEST_TEXT for nets that are untexted higher up
and have hierarchically connected sibling branches with different net names.
See Figure 3-27 in the net_select() function for an example of the HIGHEST_TEXT
option.
output_from_layers
Optional. Specifies the layers from which polygons are collected from selected nets to
create the output layer or report errors. These layers must be in the connect database.
If you specify an empty list ({}), the in_property_layer polygons are output.
The default is the layers specified in layer_groups argument. If it is empty, all layers in
the connect database are used.
group_errors
Optional. Specifies the type of sorting (grouping) to perform on the errors reported to the
LAYOUT_ERRORS file. The default is false.
❍ true. Sorts errors by their net ID within a given cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
save_layer_properties
Optional. Specifies if the tool saves the properties on the property layer. The default is
false.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_ERC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
This following example illustrates the use of two calls to the net_polygon_select()
function to measure accumulation of charge on a CMOS gate layer. The first call computes
the previous_damage property for connectivity up to m1. The second call reads the
previous_damage property and updates it after the connect database is modified to include
m2.
cdb = connect ({
{{psd, nsd, poly, m1}, cont},
{{gate}, poly}
});
net_polygon_select (
connect_sequence = cdb,
in_property_layer = p1,
out_property_layer = p2,
net_polygon_function = property_rule1,
layer_groups = {"metal"=> {m1}}
);
net_polygon_select (
connect_sequence = cdb,
in_property_layer = p2,
out_property_layer = p3,
net_polygon_function = property_rule2,
layer_groups = {"metal"=> {m2}}
);
See Also
net_polygon_by_property()
net_property_select()
net_select()
net_property_select()
The net_property_select() function selects polygons from nets in the connect database
that meet the criteria specified in the function arguments and remote function.
A remote function is used to read and write net properties as well as specify arithmetic
conditions relative to net parameters. To be selected, a net must fit all specified constraints
and must be saved in the remote function.
For example, you can use the net_property_select() function to detect antenna
violations. The ratio of area or perimeter of one layer to another layer is calculated and
summed using the net-based properties for several increments of connect databases. The
remote function can be coded to output errors when the cumulative antenna ratio exceeds
a certain threshold.
Errors are reported to the LAYOUT_ERRORS file, and appear as an X in VUE.
Syntax
net_property_select(
connect_sequence = connect_database,
in_property = net_property,
out_property = out_net_property,
net_property_function = function,
layer_groups = {"string" => {polygon_layer, ...},
...}, //optional
connected_to_all = {polygon_layer, ...}, //optional
not_connected_to_all = {polygon_layer, ...}, //optional
connected_to_any = {polygon_layer, ...}, //optional
not_connected_to_any = {polygon_layer, ...}, //optional
net_type = NOT_TEXTED | TEXTED | ALL, //optional
texted_with = {"string", ...}, //optional
texted_at = TOP_OF_NET | ANY_LEVEL | HIGHEST_TEXT,
//optional
output_from_layers = {polygon_layer, ...}, //optional
group_errors = true | false, //optional
error_net_output = ONE | ALL | TEXT, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
connect_sequence
Required. Specifies a connect database.
in_property
Required. Specifies the net-based property layer. Use the
initialize_net_property() function to initialize the property.
out_property
Required. Specifies the updated net-based property layer.
net_property_function
Required. Specifies the remote function containing the conditions relative to net
properties and net layers that must be met for a net to be selected. This function is called
one time for every net that meets the constraints specified by the
net_property_select() function. See “Net Property Select Utility Functions” in
Chapter 4 for more information about the utility functions you can use to define this
remote function.
layer_groups
Optional. Specifies the hash of string to polygon layers. The strings are used by the
remote function to access the layer-based properties on a given net. The default is an
empty hash.
connected_to_all
Optional. Specifies the layers. To be selected for output, all of these layers must be on
the net. By default, the IC Validator tool does not require any specific layers.
not_connected_to_all
Optional. Specifies the layers. If all layers are on the net, the net is not selected. By
default, the IC Validator tool does not exclude any layers.
connected_to_any
Optional. Specifies the layers. To be selected for output, at least one of these layers must
be on the net. By default, the IC Validator tool does not require any specific layers.
not_connected_to_any
Optional. Specifies the layers. If any one of the layers is on the net, the net is not
selected. By default, the IC Validator tool does not exclude any layers.
net_type
Optional. Specifies the net types to be checked. The default is ALL.
❍ NOT_TEXTED. Checks only untexted nets.
texted_with
Optional. Specifies the strings. To be selected for output, the text must match at least one
of these strings. String matching using metacharacters is allowed. See “String Matching”
on page A-11 for more information. Specifying {} ignores all text. By default, the
IC Validator tool selects all text nets.
Note:
To select only texted nets, the net_type argument must be set to TEXTED.
If the net_type argument is left at the default setting of ALL, the
net_property_select() function returns both texted and untexted nets. For
example, if you set texted_with={"VCC"} but do not specify the net_type
argument, then the net_property_select() function returns all nets texted with
VCC and all untexted nets.
If the net_type argument is NOT_TEXTED, the texted_with argument is ignored.
texted_at
Optional. Specifies where to search for the text. The default is TOP_OF_NET.
❍ TOP_OF_NET. Searches only in the top hierarchical level of each net for text. If text is
not found at the top hierarchical location, the net_select() function considers this
net as untexted.
❍ ANY_LEVEL. Searches nets at all hierarchical levels for text.
❍ HIGHEST_TEXT. Looks for the highest hierarchical level on the net for the specified
text. The tool selects the net whose highest level text matches the specified text even
if the net continues untexted higher up. This option is not available when the
processing_mode argument is CELL_LEVEL.
Note:
Multiple texts are classified as HIGHEST_TEXT for nets that are untexted higher up
and have hierarchically connected sibling branches with different net names.
See Figure 3-27 in the net_select() function for an example of the HIGHEST_TEXT
option.
output_from_layers
Optional. Specifies the layers from which polygons are collected from selected nets to
create the output layer or report errors. These layers must be in the connect database.
The default is the layers specified in layer_groups argument. If it is empty, all layers in
the connect database are used.
group_errors
Optional. Specifies the type of sorting (grouping) to perform on the errors reported to the
LAYOUT_ERRORS file. The default is false.
❍ true. Sorts errors by their net ID within a given cell.
error_net_output
Optional. Specifies the coordinates used for error reporting. The default is ONE.
Note:
This argument is used only for error reporting and does not affect the derived layer.
❍ ONE. Reports an arbitrary coordinate on an arbitrary polygon from an arbitrary layer
listed in the output_from_layers argument on the selected nets.
❍ ALL. Reports an arbitrary coordinate on every polygon from each layer listed in the
output_from_layers argument on the selected nets.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_ERC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
THRESHOLD1 = 130;
my_function : function (void) returning void {
metal_area = nprops_net_area("2");
gate_area = nprops_net_area("1");
net_property_select(
connect_sequence = cdb3,
net_property_function = my_function,
in_property = p2,
out_property = p3,
layer_groups = {"1" => {gate}, "2" => {M2}},
output_from_layers = { gate },
connected_to_all= {gate}
);
See Also
initialize_net_property()
net_polygon_select()
net_select()
net_select()
The net_select() function selects polygons from nets in the specified connect database
that fit the specified criteria.
A remote function can be used to specify arithmetic conditions relative to net parameters. To
be selected, a net must fit all specified constraints and must be saved in the remote function.
For example, the net_select() function is used to select layers from all nets that are texted
with VDD and are connected to an n-well polygon. Also, this function is used to detect
antenna violations. These types of net errors result from the ratio of area or perimeter of one
layer on the net compared to another layer or layers on the net not meeting the specification.
Errors are reported to the LAYOUT_ERRORS file, and appear as an X in VUE.
Syntax
net_select(
connect_sequence = connect_database,
net_function = function, //optional
layer_groups = {"string" => {polygon_layer, ...},
...}, //optional
connected_to_all = {polygon_layer, ...}, //optional
not_connected_to_all = {polygon_layer, ...}, //optional
connected_to_any = {polygon_layer, ...}, //optional
not_connected_to_any = {polygon_layer, ...}, //optional
net_type = NOT_TEXTED | TEXTED | ALL, //optional
texted_with = {"string", ...}, //optional
texted_at = TOP_OF_NET | ANY_LEVEL | HIGHEST_TEXT,
//optional
output_from_layers = {polygon_layer, ...}, //optional
group_errors = true | false, //optional
error_net_output = ONE | ALL | TEXT, //optional
coupled_layers = {{"string1" => polygon_layer1,
"string2" => polygon_layer2},
...}, //optional
output_from_coupled_layers = {polygon_layer, ...}, //optional
name = "layer_label", //optional
schematic_nets = {"string", ...}, //optional
schematic_nets_file = "string", //optional
texted_with_file = "string", //optional
xref_db = xref_database_handle //optional
);
Returns
polygon layer or error result
Arguments
connect_sequence
Required. Specifies the connect database. If you are using the xref_db argument, this
database must be the same as the connect database used by device extraction and LVS
comparison; that is, the connect database used by the init_device_matrix() function.
net_function
Optional. Specifies the remote function containing the conditions relative to the
parameters of layers on a net that must be met for a net to be selected. This function is
called one time for every net that meets the constraints specified by the net_select
argument. The default saves each net. See “Net Select Utility Functions” in Chapter 4 for
more information about the utility functions you can use to define a remote function.
layer_groups
Optional. Specifies the hash of string to polygon layers. The strings are used by the
remote function to access the layer-based parameters on a given net. The default is an
empty hash.
connected_to_all
Optional. Specifies the layers. To be selected for output, all of these layers must be on
the net. By default, the IC Validator tool does not require any specific layers.
not_connected_to_all
Optional. Specifies the layers. If all layers are on the net, the net is not selected. By
default, the IC Validator tool does not exclude any layers.
connected_to_any
Optional. Specifies the layers. To be selected for output, at least one of these layers must
be on the net. By default, the IC Validator tool does not require any specific layers.
not_connected_to_any
Optional. Specifies the layers. If any one of the layers is on the net, the net is not
selected. By default, the IC Validator tool does not exclude any layers.
net_type
Optional. Specifies the net types to be checked. The default is ALL.
❍ NOT_TEXTED. Checks only untexted nets.
texted_with
Optional. Specifies the text strings. To be selected for output, the text must match at least
one of these strings. String matching using metacharacters is allowed. See “String
Matching” on page A-11 for more information. Specifying {} ignores all text. By default,
the IC Validator tool selects all text nets.
Note:
To select only texted nets, the net_type argument must be set to TEXTED.
If the net_type argument is left at the default setting of ALL, the net_select()
function returns both texted and untexted nets. For example, if you set
texted_with={"VCC"} but do not specify the net_type argument, then the
net_select() function returns all nets texted with VCC and all untexted nets.
texted_at
Optional. Specifies where to search for the text. The default is TOP_OF_NET.
Note:
If the net_type argument is NOT_TEXTED, the texted_with argument is ignored.
❍ TOP_OF_NET. Searches only in the top hierarchical level of each net for text. If text is
not found at the top hierarchical location, the net_select() function considers this
net as untexted.
❍ ANY_LEVEL. Searches nets at all hierarchical levels for text.
❍ HIGHEST_TEXT. Looks for the highest hierarchical level on the net for the specified
text. The tool selects the net whose highest level text matches the specified text even
if the net continues untexted higher up. This option is not available when the
processing_mode argument is CELL_LEVEL.
Note:
Multiple texts are classified as HIGHEST_TEXT for nets that are untexted higher up
and have hierarchically connected sibling branches with different net names.
In Figure 3-27, text B and A are selected as HIGHEST_TEXT. Text A from inst1 and
inst2 is selected because no higher text is found. Text B is also selected because
there is no higher text in the TOPCELL.
output_from_layers
Optional. Specifies the layers from which polygons are collected from selected nets to
create the output layer or report errors. These layers must be in the connect database.
The default is the layers specified in the layer_groups argument. If no layers are
specified, all layers in the connect database are used.
group_errors
Optional. Specifies the type of sorting (grouping) to perform on the errors reported to the
LAYOUT_ERRORS file. The default is false.
❍ true. Sorts errors by their net ID within a given cell.
error_net_output
Optional. Specifies the coordinates used for error reporting. The default is ONE.
Note:
This argument is used only for error reporting and does not affect the derived layer.
❍ ONE. Reports an arbitrary coordinate on an arbitrary polygon from an arbitrary layer
listed in the output_from_layers argument on the selected nets.
❍ ALL. Reports an arbitrary coordinate on every polygon from each layer listed in the
output_from_layers argument on the selected nets.
coupled_layers
Optional. Lists the hash of string to polygon layer. Each hash element contains two
paired layers that establish a coupling relationship between different nets. The layer
name strings are used by the remote net_function function to access layer-based
parameters on a given net. The default is an empty hash.
output_from_coupled_layers
Optional. Specifies the layers from which polygons are collected from selected coupled
nets to create the output layer or to report errors. These layers must be listed in the
coupled_layers argument. The default is the layers specified in the coupled_layers
argument.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
schematic_nets
Optional. Specifies hierarchical schematic net names to select target layout nets based
on LVS comparison results. That is, nets that matched during LVS are supported; any
nets that did not match during LVS are not supported. Note that ports of LVS exploded
cells are not supported. For example, "X1/N1" selects the layout net that LVS found
which matches the N1 schematic net under the X1 schematic cell instance.
Note:
Use the schematic_nets_file argument instead of the schematic_nets argument
if you need to specify more than 20,000 schematic net names. For performance
reasons, IC Validator rejects the runset if schematic_nets contains more than
20,000 entries.
This argument works in conjunction with other arguments of the net_select() function,
such as connected_to_all, not_connected_to_all, texted_with, and net_type. To
select only specified schematic nets, set those arguments so that they do not select data.
For example, only select the layout net corresponding to the schematic net name "X1/
N1",
net_select(
connect_sequence = cdb1,
net_type = TEXTED
texted_with = {},
schematic_nets = {"X1/N1" ...},
xref_db = xref_database_handle
);
Note:
If a schematic net cannot be cross-referenced successfully, a violation is reported to
the LAYOUT_ERRORS file.
schematic_nets_file
Optional. Specifies a file that contains the schematic nets to be checked. The nets in this
file are equivalent to the nets selected by the schematic_nets argument.
The schematic_net_file argument can be used with the schematic_nets argument.
If a net is declared in both the schematic_net_file and schematic_nets arguments,
the net is considered only one time.
The file format is the same for both the schematic_net_file and texted_with_file
arguments. The format is:
❍ There is one net or text string per line.
❍ Each mapping relation must appear on a new line.
The following is an example of a net name file:
1 /I1/I2/N3
2 /I1/I2/N4
3 /I1/I2/I5/N6
4 /I1/I2/I5/N7
Note:
If a schematic net cannot be cross-referenced successfully, a violation is reported to
the LAYOUT_ERRORS file.
texted_with_file
Optional. Specifies a file that contains the text strings to be considered by the
net_select() function. The text strings in this file are equivalent to the text strings
specified by the texted_with argument.
The texted_with_file argument can be used with the texted_with argument. If a text
string is declared in both the texted_with_file and texted_with arguments, the text
is considered only one time. If the texted_with argument is used with the default value,
that is, all text strings are considered, then text strings specified by the
texted_with_file argument are ignored. See Table 3-22.
See the schematic_nets_file argument for the file format.
Table 3-22 texted_with_file Argument Used With texted_with Argument
Specified Specified All unique text strings from both texted_with and
texted_with_file statements
Note:
To enable only text strings from the texted_with_file argument, set the
texted_with argument to an empty string ("").
xref_db
Optional. Specifies the handle of the database from which the layout hierarchical net
corresponding to the names specified in the schematic_nets argument is selected. The
handle must be previously defined by the compare() function. See “Example Using the
xref_db Argument” on page 3-210 for more information.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_ERC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Example 1
do_per_net : published function( void ) returning void
{
Met_area : double = ns_net_area("metal");
Gate_area : double = ns_net_area("gate");
ratio : double = Met_area / Gate_area;
if (ratio > 500)
{
See Also
net_polygon_select()
net_property_select()
net_select_error()
net_select_inside_of_layer()
net_select_error()
The net_select_error() function selects error layer polygons that fit the specified criteria.
A remote function determines which error layer polygons are selected based on coupling
information in the specified connect database and other criteria defined by the
net_function argument.
You can use a remote function to access and process layer-based net parameters. To select
information for output, you must specify an error layer in the
output_from_coupled_layers argument and use the ns_save_coupled_layer() utility
function in the net_select_error() remote function. The output can be written as an error
result to the LAYOUT_ERRORS file or to a runset error layer that can be processed by
another error-layer-processing function, such as the drc_features() function.
The net_select_error() function can use any of the net select functions with the following
exceptions:
• You cannot use the ns_save_net() and ns_save_all_nets() functions.
• You cannot use the ns_coupled_layer_area() function to return the area information
of an error layer defined in the coupled_layer argument.
Syntax
net_select_error(
connect_sequence = connect_database,
net_function = function,
coupled_layers = {{layers = {"string" => geometry_layer},
by_layer = geometry_layer}, ...},
output_from_coupled_layers = {error_layer},
layer_groups = {"string" => {polygon_layer, ...},
...}, //optional
connected_to_all = {polygon_layer, ...}, //optional
not_connected_to_all = {polygon_layer, ...}, //optional
connected_to_any = {polygon_layer, ...}, //optional
not_connected_to_any = {polygon_layer, ...}, //optional
net_type = NOT_TEXTED | TEXTED | ALL, //optional
texted_with = {"string", ...}, //optional
texted_at = TOP_OF_NET | ANY_LEVEL | HIGHEST_TEXT,
//optional
name = "string", //optional
schematic_nets = {"string", ...}, //optional
schematic_nets_file = "string", //optional
texted_with_file = "string", //optional
xref_db = xref_database_handle, //optional
report_net_names = true | false, //optional
report_string_properties = {{error_name = "string",
property_name = "string",
append_to_vue_description =
true | false}} //optional
);
Returns
error layer or error result
Arguments
connect_sequence
Required. Specifies the connect database. If you are using the xref_db argument, this
database must be the same as the connect database used by device extraction and LVS
comparison; that is, the connect database used by the init_device_matrix() function.
net_function
Required. Specifies the remote function containing the conditions, relative to the
parameters of layers on a net, that must be met for a net to be selected. This function is
called one time for each net that meets the constraints specified by the following
arguments: connected_to_all, not_connected_to_all, connected_to_any,
not_connected_to_any, net_type, texted_with, texted_with_file,
schematic_nets, schematic_nets_file, and output_from_coupled_layers.
By default, the remote function is called one time for each net touching the error layer
specified in the output_from_coupled_layers argument.
See “Net Select Utility Functions” in Chapter 4 for more information about the utility
functions you can use to define a remote function. However, do not use the
ns_save_net() utility function because the net_select_error() function does not
have an output_from_layer argument.
coupled_layers
Required. Specifies a list of hash of string to polygon and error layers, which is used to
define the coupling relationships between different nets for certain types of checks.
Each hash in this argument contains two options, a required layers option and an
optional by_layer option. The layers option should contain all of the layers needed to
define the coupling relationship between two nets. Use the by_layer option to specify
an unconnected polygon layer or error layer that defines the coupling relationship
between the connected layers listed in the layers option.
The coupled_layers argument supports two different usage models. When a by layer
is not specified, the layers option must contain two connected layers. These connected
layers are considered to be coupled at locations where they interact. When a by layer is
specified, the layers option must contain one or two connected layers and the by layer.
The connected layers are considered to be coupled at locations where they touch the by
layer. With this usage, the unconnected by layer establishes the coupling relationship
between the connected layers.
❍ layers.
Lists the hash of string to polygon layer. Each hash element can contain two or three
layers that establish a coupling relationship between different nets.
The remote function specified in the net_function argument uses the layer name
strings to access layer-based parameters on a net. If you use the by_layer option,
you must specify the by layer in the layers option.
Figure 3-28 demonstrates the creation of a coupling relationship between the
all_mos_gates layer and the all_moss_diff layers. The coupling relationship is
established through the all_mos_gates layer because it touches both of the
all_mos_diff layers.
In this example, the all_mos_gates and all_moss_diff layers must all be in the
connected database because they are listed as layers in the layers option. No by
layer is needed because the layers all touch each other.
Figure 3-28 Touching Layer Example
❍ by_layer.
Specifies an optional layer that provides coupling between the connected layers
provided in the layers option. This by layer acts as a bridge between two connected
layers without forming a connection between the layers.
The by layer must be either a polygon layer or an error layer and must not be used in
the connection database specified by the connect_sequence argument. If you use
the by_layer option, you must specify the by layer in the layers option.
Note:
The error layer polygon in the by layer must contain only orthogonal shapes. Due
to a rounding issue, the error edges and metal layers cannot be exactly matched.
Figure 3-29 demonstrates the creation of a coupling relationship between the two
separate all_moss_diff layers. The coupling relationship is established through the
all_mos_gates layer because it touches both of the all_mos_diff layers. The
all_mos_gates layer is needed as a by layer because it touches both of the
all_mos_diff layers and these layers do not touch each other.
coupled_layers = {layers = {"GATE" => all_mos_gates,
"SD" => all_mos_diff},
by_layer = all_mos_gates}, ...},
In this example, the all_mos_gates layer must be in the connected database because
it is listed as a layer in the layers option. Because the all_mos_diff layer is listed as
a by layer in the by_layer option, it does not need to be connected to anything and
can be used as demonstrated in this case.
Figure 3-30 demonstrates the creation of a coupling relationship between the M1 and
M2 layers. The coupling relationship is established through the M1_M2_err layer
because it touches both the M1 and M2 layers. The M1_M2_err layer is needed as a
by layer because it touches both the M1 and M2 layers and these layers do not touch
each other.
coupled_layers = {layers = {“M1" => M1, “M2" => M2,
“ERR” => M1_M2_err},
by_layer = M1_M2_err}, ...},
In this example, both the M1 and M2 layers must be in the connect database because
they are listed as layers in the layers option and are not by layers. Because the
M1_M2_err layer is listed as a by layer in the by_layer option, it does not need to be
connected to anything.
Figure 3-30 By Layer Example With 3 Layers
output_from_coupled_layers
Required. Specifies the error layer that is used for output.
layer_groups
Optional. Specifies the hash of string to polygon layers. The strings are used by the
remote function to access the layer-based parameters on a given net. The default is an
empty hash.
connected_to_all
Optional. Specifies the layers. To be selected for output, all of these layers must be on
the net. By default, the IC Validator tool does not require any specific layers.
not_connected_to_all
Optional. Specifies the layers. If all layers are on the net, the net is not selected. By
default, the IC Validator tool does not exclude any layers.
connected_to_any
Optional. Specifies the layers. To be selected for output, at least one of these layers must
be on the net. By default, the IC Validator tool does not require any specific layers.
not_connected_to_any
Optional. Specifies the layers. If any one of the layers is on the net, the net is not
selected. By default, the IC Validator tool does not exclude any layers.
net_type
Optional. Specifies the net types to be checked. The default is ALL.
❍ NOT_TEXTED. Checks only untexted nets.
texted_with
Optional. Specifies the text strings. To be selected for output, the text must match at least
one of these strings. String matching using metacharacters is allowed. See “String
Matching” on page A-11 for more information. Specifying {} ignores all text. By default,
the IC Validator tool selects all text nets.
Note:
To select only texted nets, the net_type argument must be set to TEXTED.
If the net_type argument is left at the default setting of ALL, the net_select()
function returns both texted and untexted nets. For example, if you set
texted_at
Optional. Specifies where to search for the text. The default is TOP_OF_NET.
Note:
If the net_type argument is NOT_TEXTED, the texted_with argument is ignored.
❍ TOP_OF_NET. Searches only in the highest hierarchical level of each net for text. If text
is not found at the highest hierarchical location, the net_select_error() function
considers this net as untexted.
❍ ANY_LEVEL. Searches nets at all hierarchical levels for text.
❍ HIGHEST_TEXT. Looks for the highest hierarchical level on the net for the specified
text. The tool selects the net whose highest level text matches the specified text even
if the net continues untexted higher up. This option is not available when the
processing_mode argument is CELL_LEVEL.
Note:
Multiple texts are classified as HIGHEST_TEXT for nets that are untexted higher up
and have hierarchically connected sibling branches with different net names.
See Figure 3-27 in the net_select() function for an example of the HIGHEST_TEXT
option.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
schematic_nets
Optional. Specifies hierarchical schematic net names to select target layout nets based
on LVS comparison results. That is, nets that matched during LVS are supported; any
nets that did not match during LVS are not supported. Note that ports of LVS exploded
cells are not supported. For example, "X1/N1" selects the layout net that LVS found
which matches the N1 schematic net under the X1 schematic cell instance.
This argument works in conjunction with other arguments of the net_select_error()
function, such as connected_to_all, not_connected_to_all, texted_with, and
net_type. To select only specified schematic nets, set those arguments so that they not
select data.
See the schematic_nets argument of the net_select() function for an example.
schematic_nets_file
Optional. Specifies a file that contains the schematic nets to be checked. The nets in this
file are equivalent to the nets selected by the schematic_nets argument.
The schematic_net_file argument can be used with the schematic_nets argument.
If a net is declared in both the schematic_net_file and schematic_nets arguments,
the net is considered only one time.
The file format is the same for both the schematic_net_file and texted_with_file
arguments. The format is:
❍ There is one net or text string per line.
❍ Each mapping relation must appear on a new line.
The following is an example of a net name file:
1 /I1/I2/N3
2 /I1/I2/N4
3 /I1/I2/I5/N6
4 /I1/I2/I5/N7
texted_with_file
Optional. Specifies a file that contains the text strings to be considered by the
net_select() function. The text strings in this file are equivalent to the text strings
specified by the texted_with argument.
The texted_with_file argument can be used with the texted_with argument. If a text
string is declared in both the texted_with_file and texted_with arguments, the text
is considered only one time. If the texted_with argument is used with the default value,
that is, all text strings are considered, then text strings specified by the
texted_with_file argument are ignored.
See the schematic_nets_file argument for the file format. See Table 3-23.
Table 3-23 texted_with_file Argument Used With texted_with Argument
Specified Specified All unique text strings from both texted_with and
texted_with_file statements
Note:
To enable only text strings from the texted_with_file argument, set the
texted_with argument to an empty string ("").
xref_db
Optional. Specifies the handle of the database from which the layout hierarchical net
corresponding to the names specified in the schematic_nets argument is selected. The
handle must be previously defined by the compare() function. See “Example Using the
xref_db Argument” on page 3-210 for more information.
report_net_names
Optional. Specifies whether layout and schematic net names are added to the
LAYOUT_ERRORS file. This argument is used only for error reporting. For each error
selected from the ns_save_coupled_layer() function, the names of the nets that it
couples are included in the error report. If the xref_db argument is not specified, only
layout net names are included. The default is false.
report_string_properties
Optional. Specifies the string property name for each error and attaches a new string
value to the violation entry.
The report_string_properties argument can only be used with the error report
version argument.
❍ error_name. Specifies the error name that is written to the LAYOUT_ERRORS file.
■ false. Does not specify the message that is appended to the Netlist Visualizer
interface.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_ERC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
The following example shows a runset with a net_select_error() function:
err_M1 = external1_error(M1, < 0.05, connectivity = DIFFERENT_NET,
connect_sequence = cdb, extension = RADIAL);
for(i = 0 to coupled_net_count - 1)
{
gate_existed = ns_coupled_layer_exist(i, "GATE");
sd_existed = ns_coupled_layer_exist(i, "SD");
err_m1_existed = ns_coupled_layer_exist(i, "err_M1");
err_M1_coupled1 =
net_select_error(connect_sequence = cdb,
net_function = my_coupled_net,
coupled_layers = {{{"GATE" => GATE, "SD" => SD}},
{{"M1" => M1, "err_M1" => err_M1},
by_layer = err_M1},
{{"GATE" => GATE, "SD" => SD}, by_layer = GATE}},
output_from_coupled_layers = {err_M1});
The following example shows an example of the LAYOUT_ERRORS file for the
report_string_properties argument:
top (-0.0600, -0.3900) (0.2550, 0.0000)
Distance = 0.315
Vmax1 = 0
Vmin1 = 0
Vmax2 = 5
Vmin2 = 2
waiver info = RELAXED RULE: RULE WAS CHECKED USING RELAXED MIN
SPACINGVALUE OF 0.4
ce = df_get_current_data();
df_save_string_property(ce, "waiverMsg", waiver_string);
df_save_data(ce);
}
See Also
net_polygon_select()
net_property_select()
net_select()
net_select_inside_of_layer()
net_select_inside_of_layer()
The net_select_inside_of_layer() function selects net polygons inside a layer in the
specified connect database. Only polygons that fit the specified criteria and are located
inside the layer specified by the inside_of_layer argument are selected.
A remote function can be used to specify arithmetic conditions relative to the portion of the
net inside each specified polygon or cluster of polygons with the same net. The polygons are
saved if the net parameters fit all of the constraints specified in the remote function.
The portion of net areas is also available for user-defined equations implemented in the
remote function.
Note:
If the remote function calls the nsil_save_double_property() utility function, any net
polygons that are not enclosed by the inside_of_layer polygon are discarded.
Errors are reported to the LAYOUT_ERRORS file and appear as an X in VUE.
Syntax
net_select_inside_of_layer(
connect_sequence = connect_database,
net_function = function,
layer_groups = {"string" => {polygon_layer, ...},
...},
inside_of_layer = polygon_layer,
output_from_layers = {polygon_layer, ...},
mode = BY_SHAPE | BY_NET, //optional
connected_to_all = {polygon_layer, ...}, //optional
not_connected_to_all = {polygon_layer, ...}, //optional
connected_to_any = {polygon_layer, ...}, //optional
not_connected_to_any = {polygon_layer, ...}, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
connect_sequence
Required. Specifies the connect database.
net_function
Required. Specifies the remote function that contains the conditions relative to the
parameters of layers on a net inside the polygon (or cluster of polygons with same net)
specified by the inside_of_layer argument. This function is called one time for each
portion of each selected net.
See “Net Select Inside of Layer Utility Functions” in Chapter 4 for more information about
the utility functions you can use to define a remote function.
layer_groups
Required. Specifies the hash of string to polygon layers. You must specify at least one
layer group in the hash.
inside_of_layer
Required. Specifies the layer inside of which the polygons are selected. If mode is set to
BY_NET, this layer must be in the connect database.
output_from_layers
Required. Specifies the layers where polygons are collected from selected nets to create
the output layer or report errors. These layers must be in the connect database.
mode
Optional. Specifies how the inside_of_layer argument gathers the net polygons. The
default is BY_SHAPE.
❍ BY_SHAPE. Selects the net polygons from each shape in the layer specified by
inside_of_layer.
❍ BY_NET. Selects the net polygons that touch polygons connected to the same net in
the layer specified by inside_of_layer.
For example, you can apply net_select_inside_of_layer() to determine if a net
contains polygons from multiple connected layers inside a specified shape, by default, or
shapes that belong to the same net when mode is set to BY_NET.
In Figure 3-31, the net_select() function would select both net1 and net2. However,
the net_select_inside_of_layer() function, with the specified layer inside_layer
= I, has no output because the net polygons A and B from layer I are checked separately
inside two individual shapes, P1 and P2, and neither shape contains both A and B from
a net.
Figure 3-32 shows a similar example in which P1 and P2 are connected. If you set the
mode argument to BY_SHAPE to select a cluster of polygons with the same net, the
net_select_inside_of_layer() function selects both net1 and net2.
connected_to_all
Optional. Specifies the layers. To be selected for output, all of these layers must be on
the net. By default, the IC Validator tool does not require any specific layers.
not_connected_to_all
Optional. Specifies the layers. If all layers are on the net, the net is not selected. By
default, the IC Validator tool does not exclude any layers.
connected_to_any
Optional. Specifies the layers. To be selected for output, at least one of these layers must
be on the net. By default, the IC Validator tool does not require any specific layers.
not_connected_to_any
Optional. Specifies the layers. If any one of the layers is on the net, the net is not
selected. By default, the IC Validator tool does not exclude any layers.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_ERC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
The following example shows a simple runset using net_select_inside_of_layer() to
check if a net contains both polygons from connected layers A and B inside a particular
shape I:
my_func : published function (void) returning void
{
L2_area = nsil_net_area("L2");
L3_area = nsil_net_area("L3");
See Also
net_polygon_select()
net_property_select()
net_select()
net_select_error()
Syntax
net_texted_with(
connect_sequence = connect_database,
text = {"string", ...},
output_from_layers = {polygon_layer, ...}, //optional
texted_at = TOP_CELL | TOP_OF_NET | ANY_LEVEL |
HIGHEST_TEXT, //optional
colon_text = EQUATE_NETS | REGULAR_TEXT, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
net_not_texted_with(
connect_sequence = connect_database,
text = {"string", ...},
output_from_layers = {polygon_layer, ...}, //optional
texted_at = TOP_CELL | TOP_OF_NET | ANY_LEVEL |
HIGHEST_TEXT, //optional
colon_text = EQUATE_NETS | REGULAR_TEXT, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
connect_sequence
Required. Specifies the connect database.
text
Required. Specifies the strings that determine the text used for selection. String matching
using metacharacters is allowed. See “String Matching” on page A-11 for more
information.
output_from_layers
Optional. Specifies the layers from which polygons are collected to create the output
layer or error report. These layers must be in the connect database. By default, polygons
are collected from all layers in the connect database.
texted_at
Optional. Specifies where to look for the text specified with the text argument. The
default is ANY_LEVEL.
❍ TOP_CELL. Looks only in the top cell of each net for the specified text.
Note:
With this setting, the net_not_texted_with() function is not the complement of
the net_texted_with() function. When the texted_at argument is TOP_CELL,
both functions only select polygons from top cell nets.
❍ TOP_OF_NET. Looks at all cells on the highest hierarchical level on the net for the
specified text. The tool selects the net whose text on the highest level matches the
specified text; the net does not have higher hierarchical levels. This option is not
available when the processing_mode argument is CELL_LEVEL.
❍ ANY_LEVEL. Looks at all cells on the net for the specified text.
❍ HIGHEST_TEXT. Looks for the highest hierarchical level on the net for the specified
text. The tool selects the net whose highest level text matches the specified text even
if the net continues untexted higher up. This option is not available when the
processing_mode argument is CELL_LEVEL.
Note:
Multiple texts are classified as HIGHEST_TEXT for nets that are untexted higher up
and have hierarchically connected sibling branches with different net names.
See Figure 3-27 in the net_select() function for an example of the HIGHEST_TEXT
option.
colon_text
Optional. Specifies how the colon ( : ) is processed. The default is REGULAR_TEXT.
❍ EQUATE_NETS. For net text, ignores the colon and characters following it. For
example, "a:", "a:a", and "a:xyz" all match the text “a”. This setting applies only
when the text_options() function is called with colon_text = EQUATE_NETS.
❍ REGULAR_TEXT. Retains the colon and does not give the colon special processing.
processing_mode
Optional. Specifies how the polygons are collected from selected nets. The default is
HIERARCHICAL.
❍ CELL_LEVEL. Specifies that only polygons in the cell with the matching text are
collected.
❍ HIERARCHICAL. Specifies that polygons are collected from any hierarchical location
on the selected nets.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
x = net_texted_with(connectdb1, {"VDD"});
See Also
connect()
text_net()
texted_with() and not_texted_with()
netlist()
The netlist() function invokes the netlist utility (icv_netlist) to generate the layout netlist
output file for LVS comparison. The output is named cell.net, where cell is the string
specified by library() function cell argument. For an ICV flow, the output is an ICV netlist.
For SPICE flow, the output is SPICE netlist.
The layout netlist data is created using the device database output from the
extract_devices() function and the polygon layers specified in the connect() function.
Therefore, call the netlist() function after these functions.
See the Example section for more information about the output netlist.
Note:
The icv_netlist utility is in the IC Validator installation directory.
Syntax
netlist(
device_db = device_database,
include_empty_cells = NONE | WITH_PORTS | ALL, //optional
precision = integer //optional
);
Returns
layout_netlist_file_handle
Arguments
device_db
Required. Generates the layout netlist from the specified device database. The
extract_devices() function generates this database.
include_empty_cells
Optional. Specifies which empty cells are written to the cell.net file. Empty cells do not
have devices or instances. A cell is always written out when it is defined as an
equivalence or black-box cell. The default is NONE.
❍ NONE. Does not write empty cells to the cell.net file.
❍ WITH_PORTS. Writes empty cells that have ports to the cell.net file.
precision
Optional. Specifies the number of digits after the decimal point reported in the output
netlist for all device properties and xy coordinates. When the precision argument is <=0,
the IC Validator tool treats this value as the default precision, which is the maximum
precision value supported. The default is the maximum precision value supported.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DEVICE and HERCULES_NETLIST
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
The following is an example of the version 2 netlist format.
{NETLIST add4
{VERSION 2 0 0}
/* Level 2 */
{CELL invb
{PORT VDD B GND A}
{PROP top=50.000000 bottom=0.000000 left=0.000000 right=12.000000}
{INST M1=n {TYPE MOS} {COORD x=5.5000 y=10.5000}
{PROP nrd=0.2308 nrs=0.2308 pd=32.0000 ad=39.0000 ps=32.0000
as=39.0000 w=13.0000 l=1.0000}
{PIN A=GATE GND=SRC B=DRN GND=BULK }}
{INST M2=p {TYPE MOS} {COORD x=5.5000 y=35.7500}
{PROP nrd=0.1463 nrs=0.1463 pd=47.0000 ad=61.5000 ps=47.0000
as=61.5000 w=20.5000 l=1.0000}
{PIN A=GATE VDD=SRC B=DRN VDD=BULK }}
}
{CELL nor2b
{PORT VDD QN GND A B}
{PROP top=50.000000 bottom=0.000000 left=0.000000 right=18.000000}
{INST M1=n {TYPE MOS} {COORD x=11.0000 y=10.5000}
{PROP nrd=0.2308 nrs=0.1731 pd=32.0000 ad=39.0000 ps=17.5000
as=29.2500 w=13.0000 l=1.0000}
{PIN B=GATE QN=SRC GND=DRN GND=BULK }}
{INST M2=n {TYPE MOS} {COORD x=5.5000 y=10.5000}
{PROP nrd=0.2308 nrs=0.1731 pd=32.0000 ad=39.0000 ps=17.5000
as=29.2500 w=13.0000 l=1.0000}
{PIN A=GATE QN=SRC GND=DRN GND=BULK }}
{INST M3=p {TYPE MOS} {COORD x=8.5000 y=35.7500}
{PROP nrd=0.2683 nrs=0.0488 pd=52.0000 ad=112.7500 ps=22.5000
See Also
extract_devices()
write_spice()
write_xref_spice()
When the shape is a simple rectangle, the area is simply divided in half.
Syntax
nmos(
matrix =
device_matrix,
device_name =
"string",
drain =
polygon_layer,
gate =
polygon_layer,
source =
polygon_layer,
optional_pins =
{{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK,
pin_compared = true | false},
...}, //optional
recognition_layer = polygon_layer, //optional
reference_layer = polygon_layer, //optional
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
properties = {{name = "string",
type = DOUBLE | DOUBLE_LIST | STRING,
scale = FEMTO | PICO | NANO | MICRO |
MILLI | KILO | MEGA | NONE,
write_property_to =
NETLIST_XTR_SPICE | NETLIST_PEX_SPICE |
SPICE | ANNOTATION_FILE |
NETLIST_ANNOTATION_FILE_SPICE | NETLIST, |
AUTO | NETLIST_SKIP_PCELL,
processing_layer_hash_map = {"string", ...},
pin_map = {"string", ...}},
...}, //optional
property_function = function, //optional
merge_parallel = true | false, //optional
bulk_relationship = ENCLOSE | INTERACT, //optional
swappable_pins = {{"string", ...}, ...}, //optional
pmos(
matrix =
device_matrix,
device_name =
"string",
drain =
polygon_layer,
gate =
polygon_layer,
source =
polygon_layer,
optional_pins =
{{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK,
pin_compared = true | false},
...}, //optional
recognition_layer = polygon_layer, //optional
reference_layer = polygon_layer, //optional
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
properties = {{name = "string",
type = DOUBLE | DOUBLE_LIST | STRING,
scale = FEMTO | PICO | NANO | MICRO |
MILLI | KILO | MEGA | NONE,
write_property_to =
NETLIST_XTR_SPICE | NETLIST_PEX_SPICE |
SPICE | ANNOTATION_FILE |
NETLIST_ANNOTATION_FILE_SPICE | NETLIST |
AUTO | NETLIST_SKIP_PCELL,
processing_layer_hash_map = {"string", ...},
pin_map = {"string", ...}},
...}, //optional
property_function = function, //optional
merge_parallel =
true | false, //optional
bulk_relationship =
ENCLOSE | INTERACT, //optional
swappable_pins =
{{"string", ...}, ...}, //optional
schematic_devices =
{{device_name = "string",
drain = "string",
gate = "string",
source = "string",
optional_pins = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
x_card = true | false, //optional
spice_netlist_function = "string", //optional
contact_layers = {polygon_layer, ...}, //optional
source_drain_config = {NORMAL, SINGLE}, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
unique_identifier = "string", //optional
swappable_properties = {{pin_name = "string",
property_list = {"string", ...}},
...}, //optional
orientation = = {compare_pass = RELATIVE | ABSOLUTE,
simulation_pass = RELATIVE | ABSOLUTE},
//optional
simulation_model_name = "string", //optional
dlink_libraries = {dev_dlink_library_handle, ...}, //optional
top_simulation_properties = true | false //optional
);
Returns
void
Arguments
matrix
Required. Specifies the device matrix used by the extraction functions. The matrix must
be defined by the init_device_matrix() function. Configuration details for device
extraction are stored in the matrix data object for use by the extract_devices()
function.
device_name
Required. Specifies the MOS device. A device name can be reused across multiple calls
of the nmos() function and pmos() function, but not across the two functions, if all calls
have
❍ Equivalent numbers of optional pins with equivalent values for the pin_name and
pin_compared options.
drain
Required. Specifies the drain layer of the MOS device. The pin name generated by the
IC Validator tool is “DRN”.
gate
Required. Specifies the gate layer of the MOS device. The pin name generated by the
IC Validator tool is “GATE”.
source
Required. Specifies the source layer of the MOS device. The pin name generated by the
IC Validator tool is “SRC”.
optional_pins
Optional. Lists additional bulk or terminal layers. You can specify up to 20 pins.
❍ device_layer. Required. Specifies the device layer.
recognition_layer
Optional. Specifies the layer used to recognize a device when the device body layer does
not interact with all terminal layers and processing layers. All processing layers must
interact with this specified recognition layer. This layer is also used to identify device
instances that are merged during layout extraction when multiple individual devices
occur within a single recognition layer polygon. See the merge_parallel argument for
more information.
reference_layer
Optional. Specifies the intended location in the hierarchy for the extracted device. The
layer is usually an assign layer.
processing_layer_hash
Optional. Specifies a hash of string to a processing layer and range pair. In the remote
property function, each layer is retrieved as a polygon set by passing the hash key to the
dev_processing_layer() function.
❍ layer1. Required. Specifies the processing layer, which is a non-terminal layer used
for calculating properties.
❍ range. Optional. Specifies the maximum distance value from a device body polygon.
This value defines a window around the device body for data collection.
A nonnegative range value collects processing polygons that are within the specified
range of the body polygon which might or might not interact with the body polygon.
The default is -1.
■ When the range value is -1, only processing_layer_hash polygons interacting
with the body layer polygon are selected for the polygon set.
■ When the range value is >0, a window is created by oversizing the body layer
polygon by the range value. All processing_layer_hash polygons interacting
with this window, either by overlap or by an externally touching edge, are selected
for the polygon set.
Figure 3-33 illustrates both the interaction method of selection, that is, a range value
of -1, and the window method of selection, that is, a range value >0.
Figure 3-34 shows the selected polygon set when this setting is used:
processing_layer_hash = { "poly" => {poly, 1.0}, "NW" => {NW, -1.0}}
properties
Optional. Lists the property values that define the device. The default is
properties = {{"l", DOUBLE, MICRO},
{"w", DOUBLE, MICRO}}
❍ name. Required. Specifies the property name. See “Predefined Name Matches” in
Chapter 7, “Compare Functions Basics” of the IC Validator LVS User Guide for the
names and associated matches that are predefined during LVS compare.
Note:
More than one property sharing the same name is prohibited. Furthermore, the
property name is case-insensitive.
❍ type. Optional. Specifies the data type of the property. The default is DOUBLE.
Note:
The compare() function does not support the DOUBLE_LIST property. When
running dual-hierarchy extraction, the list of double properties is always written to
the annotation file unless the write_property_to argument is explicitly
specified.
❍ scale. Optional. Specifies the scale factor applied to the property values output by
the write_spice(), write_xref_spice(), pex_generate_results(), and
write_annotation_file() functions. The default is NONE, which means no scaling.
You can use this scale option to convert dimensional property values from the
IC Validator native base unit of microns into the base unit of meters for SPICE
simulation.
❍ write_property_to. Optional. Specifies to which file the property is written. The
default is AUTO.
■ NETLIST_XTR_SPICE. Writes the corresponding property to
processing layer is retained during both the dual-hierarchy extraction phase which
generates properties for the layout netlist (compare pass) and the phase which
generates properties for the annotation file (simulation pass).
This behavior is summarized in Table 3-24.
Table 3-24 Dual-Hierarchy Extraction Treatment for Processing Layers Mapped Using the
processing_layer_hash_map Argument
If the pin name of a terminal layer is not referenced in the pin map for any property,
then that layer is never leveled, regardless of whether dual-hierarchy extraction is
enabled or disabled.
property_function
Optional. Specifies the remote function that calculates the geometric properties for each
extracted device. The default calculations are for the length of the gate region (l) and the
width of the gate region (w). The default calc_capacitor_properties() function is
defined in the device_public.rh header file.
If you use a remote function, you must specify the device properties in the properties
argument. See Chapter 4, “Utility Functions,” for more information about the utility
functions you can use to define a remote function.
merge_parallel
Optional. Specifies whether parallel devices enclosed by the same recognition layer
polygon are merged. The default is false.
❍ true. Merges parallel devices enclosed by the same recognition layer polygon.
Multiple banks of parallel-merged devices can occur within a single recognition layer
polygon.
❍ false. Does not merge parallel devices enclosed by the same recognition layer
polygon.
bulk_relationship
Optional. Specifies the required relationship between the bulk polygon and the device
polygon.
❍ ENCLOSE. Specifies that the bulk polygon must enclose the device polygon.
❍ INTERACT. Specifies that the bulk polygon must interact with the device polygon by
one of these methods: enclosing, cutting, or outside edge touching.
swappable_pins
Optional. Lists the pins that can be swapped for a successful comparison with the
schematic device. By default, pins “SRC” and “DRN” can be swapped. Use an empty list
to disable swapping of all pins:
swappable_pins = {}
In the following example, “A” and “B” can be swapped and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals used for comparison.
By default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
device configuration function.
■ The schematic pin names do not match the standard “DRN”, “GATE”, “SRC”, and
“BULK” pin names, in addition to optional pin names provided in the
optional_pins list of structures argument of the device configuration function.
❍ drain. Optional. Specifies the drain terminal of the device. The default is "DRN".
❍ gate. Optional. Specifies the gate terminal of the device. The default is "GATE".
❍ source. Optional. Specifies the source terminal of the device. The default is "SRC".
❍ ignore_pins. Optional. Ignores the specified schematic pins during pin connectivity
comparison between the layout and schematic. If a pin name is listed that matches a
pin name defined by the optional_pins argument, that pin is ignored both in the
layout and schematic. This behavior is similar to the pin_compared option of the
optional_pins argument of the nmos() and pmos() functions.
If the schematic device has an optional pin that does not correspond to any pin in the
nmos() and pmos() functions, that pin can be specified with the ignore_pins.
Otherwise, this optional pin produces an error during the compare operation.
x_card
Optional. Specifies if the instance name prefix is replaced. The default is false.
❍ true. Replaces the default instance name prefix for the layout extracted device with
an X-card. This option facilitates the use of SPICE SUBCKT models to represent
devices in simulation.
❍ false. The default instance name prefix for the layout extracted device is not
replaced.
spice_netlist_function
Optional. Specifies the function used to format instances of the device in netlists
generated by the write_spice() and write_xref_spice() functions. See “Flexible
Netlisting Utility Functions” on page 4-110 for more information.
contact_layers
Optional. Specifies the additional layers that are used for calculating the nrs and nrd
properties accurately.
source_drain_config
Optional. Specifies the MOS type to be checked. The default is {NORMAL, SINGLE}.
❍ SINGLE. Extracts only MOS devices that touch a single source or drain.
❍ NORMAL. Extracts only MOS devices that have separate regions for source and drain.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
unique_identifier
Optional. Specifies the user-derived string used by the remote property function. The
unique_identifier argument value is retrieved from the remote property function with
the dev_unique_identifier() utility function. See the Examples section of the
capacitor() function for more information. You must ensure that the strings are valid and
unique. (The IC Validator tool does not check values to ensure that they are unique.) The
default is an empty string ("").
This functionality is used to access data objects created outside of a remote property
function but passed in as global variables. Use this functionality when access to these
global variables must be synchronized to a specific device configuration function call. For
example, you can create a global hash object containing property extraction parameters
for several device configuration functions. The hash key is a unique identifier string that
matches the unique_identifier argument value. Then, you can clear the hash key by
invoking the dev_unique_identifier() function that is in the property function. The
dev_unique_identifier() function retrieves the unique_identifier argument value
to the corresponding device configuration function call.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped. By default, the IC Validator tool does not map swappable pins to
properties.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
orientation
Optional. Controls the orientation of the measurements. The default is RELATIVE.
Note:
An error occurs when the orientation argument of the mos_proximity_list()
function is ABSOLUTE and the orientation argument of the nmos() or pmos()
function is RELATIVE.
❍ RELATIVE. Specifies that the orientation is relative to the source and drain layers of
the gate.
❍ ABSOLUTE. Specifies that the orientation is relative to the body within the coordinate
space of the top cell.
simulation_model_name
Optional. Specifies the simulation netlist model name. As needed, define this model
name for each device configuration function. This name is output to the PEX runset
report file, which is used by the StarRC tool. The device name is not changed.
dlink_libraries
Optional. Specifies the libraries that can be used to pass measurement data to external
libraries. See the Dynamic-Link Library Support chapter in the IC Validator User Guide
and “Dynamic Linking Utility Functions” on page 4-114 for more information.
top_simulation_properties
Optional. Controls whether properties identified as simulation properties are extracted
hierarchically or in the top cell. The default is false.
❍ true. Extracts simulation properties in the top cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
In the following nmos() function example, shown in Figure 3-35, notice that an instance of
an NMOS device is formed by the interaction between two psd polygons with one ngate
polygon.
ndiff
poly
matrix = init_device_matrix(cdb1);
nmos(
matrix,
device_name = "n",
drain = psd,
gate = ngate,
source = psd,
optional_pins = {{bulk}}
);
device_db = extract_devices(matrix);
netlist_db = netlist(device_db);
In the following pmos() function example, shown in Figure 3-36, notice that an instance of
an PMOS device is formed by the interaction between two nsd polygons with one pgate
polygon.
(bulk)
pdiff
poly
matrix = init_device_matrix(cdb1);
pmos(
matrix,
device_name = "p",
drain = nsd,
gate = pgate,
source = nsd,
optional_pins = {{bulk}}
);
device_db = extract_devices(matrix);
netlist_db = netlist(device_db);
See Also
np() and pn()
npn() and pnp()
not()
The not() function creates polygons that represent the layer1 polygons that are not
common to the layer2 polygons. Any layer1 polygons that overlap with layer2 polygons
have the overlapping portion removed in the output.
Syntax
not(
layer1 = polygon_layer,
layer2 = polygon_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies a polygon layer.
layer2
Required. Specifies a polygon layer.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 3-37 shows examples of the not() function.
Figure 3-37 not() Function Examples
lay1
lay2
Result = Result =
lay1 not lay2; lay2 not lay1; Result
See Also
and()
and_edge()
not_edge()
or()
or_edge()
xor()
xor_edge()
The contained_by() function selects rectangles from the layer1 layer that fit containment
specifications within layer2. It is the complement of the not_contained_by() function.
Four check regions are specified using a distance and extension, one for each edge of the
enclosed rectangles. These check regions are combined to form a containment region for
each rectangle. A selection rule is shown in the Examples section.
• For the not_contained_by() function,
❍ If the containment region cannot fit inside layer2, in any orientation, the rectangle
does not fit the containment specification and is selected for output.
❍ If any orientation of the containment region fits inside layer2, the rectangle is not
selected.
• For the contained_by() function,
❍ If any orientation of the containment region fits inside layer2, the rectangle is
selected.
❍ If the containment region cannot fit inside layer2, in any orientation, the rectangle
does not fit the containment specification and is not selected for output.
Syntax
not_contained_by(
layer1 = polygon_layer,
layer2 = polygon_layer,
distances = {{distance1 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance2 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance3 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance4 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
...},
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
contained_by(
layer1 = polygon_layer,
layer2 = polygon_layer,
distances = {{distance1 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance2 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance3 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance4 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
...},
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
layer2
Required. Specifies the polygon layer.
distances
Required. Lists the distances and extensions for check regions. The distances can be
applied in either clockwise or counterclockwise order. That is, a rectangle fits the
specification if the four minimum distances can be satisfied in at least one of the eight
possible permutations: four possible rotations, in forward or reverse order.
❍ distance1, distance2, distance3, distance4. Specify the containment values,
one for each side of the layer1 rectangle. The distances must be positive values.
❍ extension. Optional. Specifies the endpoint extension for the check region. The
default is NONE.
■ NONE. Does not extend the check region.
■ RADIAL. Extends the check region with the distance value past the endpoints of
the edge being checked, forming a radial curve.
■ SQUARE. Extends the check region with the distance value past the endpoints of
the edge being checked, forming a square box.
■ INTERSECTION. Extends the check region with the adjacent distance value past
the endpoints of the edge being checked.
■ RECTANGLE. Extends the check region past the endpoints of the edges using the
extension_distance value with a rectangle. See the diagram in the extension
argument of the enclose() function for more information.
Figure 3-38 illustrates a rectangle and the check regions for a single permutation of
the given distances using the various extension settings.
.8 .8 .8 .8
.4 .4 .4 .4 .4 .4 .4 .4
.8 .8 .8 .8
layer1
layer2
containment
region
❍ extension_distance. Optional. Specifies the check region extension distance when
the extension argument is RECTANGLE. The value must be nonnegative. The default
is 0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Description
In cases where the four distances are not symmetric, containment is checked both
clockwise and counterclockwise around the rectangle to determine acceptance. For
example, as shown in Figure 3-40, both rectangles fit the specification
distances = {{{2},{4},{1},{1}}}
4 1 1 4 layer1
2 2 layer2
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 3-41 shows a line-end rule using the not_contained_by() function. To fail, a
contact must be less than any of the specified distances: 0.02 m and 0.03 m from the
opposing metal line ends and less than 0.01 m from the other two opposing metal sides.
Because these contacts meet the containment specifications, they are not selected.
bad_contact = contact not_contained_by [
distances = {{{0.01, INTERSECTION}, {0.02, INTERSECTION},
{0.01, INTERSECTION}, {0.03, INTERSECTION}}}
] metal;
0.02 0.03
contact layer
0.01
0.01
0.01
metal layer
0.03
In the following example, the not_contained_by() function selects rectangles on the cont
layer that do not fit either of these specifications:
• Enclosed by at least 0.1 on all sides.
• Opposite sides as close as 0.0 if the other two sides are enclosed by at least 0.2.
notcont = not_contained_by(cont, metal,
{{{.1}, {.1}, {.1}, {.1}}, {{.2}, {0}, {.2}, {0}}}
);
See Also
covered_by()
enclose()
not_covered_by()
not_covered_by()
The not_covered_by() function checks multiple enclosure specifications for rectangles
using a spacing check. This function selects
• The layer1 rectangles that do not fit the enclosure specifications within layer2.
• The layer1 polygons that are not inside layer2.
• The layer1 data that is not rectangular.
When evaluating enclosure specifications, spacing is not checked between the following
edge pairs:
• Between collinear edges; that is, edges along the same line. Figure 3-42 shows an
example.
Figure 3-42 Collinear Edges
layer1
layer2
• Between perpendicular edges, or any edges forming an angle greater than 90 degrees.
Figure 3-43 shows an example.
Figure 3-43 Perpendicular Edges
layer1
layer2
• Between a layer1 edge and any outside layer2 edge. Figure 3-44 shows an example.
Figure 3-44 Outside Edge
layer1
layer2
For any extension argument setting other than NONE, a point touch satisfies only a distance
of 0. Figure 3-45 shows an example.
Figure 3-45 Point Touch
layer1
layer2
More information about selection rules and check region examples are shown in the
Examples section.
Syntax
not_covered_by(
layer1 = polygon_layer,
layer2 = polygon_layer,
distances = {{distance1 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance2 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
layer2
Required. Specifies the enclosing polygon layer.
distances
Required. Lists the distances and extensions for check regions. The distances can be
applied in either clockwise or counterclockwise order. That is, a rectangle fits the
specification if the four minimum distances can be satisfied in at least one of the eight
possible permutations: four possible rotations, in forward or reverse order.
❍ distance1, distance2, distance3, distance4. Specify the minimum enclosure
values, one for each side of the layer1 rectangle. The distances specify the
minimum distance from the outside of layer1 to the inside of layer2. The distances
must be positive values. A distance of 0 indicates that the layers can be touching.
Note:
For the not_covered_by() function, the distances must be less than (<) the
values.
❍ extension. Optional. Specifies the endpoint extension for the check region. The
default is NONE.
■ NONE. Does not extend the check region; only layer1 and layer2 edges with a
positive perpendicular projection between them are measured.
■ RADIAL. Extends the check region with the distance value past the endpoints of
the layer1 edge being checked, forming a radial curve.
■ SQUARE. Extends the check region with the distance value past the endpoints of
the layer1 edge being checked, forming a square box.
■ INTERSECTION. Extends the check region with the adjacent distance value past
the endpoints of the layer1 edge being checked.
■ RECTANGLE. Extends the check region past the endpoints of the layer1 edges
using the extension_distance value with a rectangle. The boundary of the
check region is inclusive or exclusive depending on the constraint of the distance
value. See the diagram in the extension argument of the enclose() function for
more information.
Figure 3-46 illustrates a rectangle and the check regions for a single permutation of
the given distances using the various extension argument settings.
Figure 3-46 extension Argument Examples
.8 .8 .8 .8
.4 .4 .4 .4 .4 .4 .4 .4
.8 .8 .8 .8
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
intersecting
Optional. Specifies the intersecting edge types that are included in the measurement. By
default, the IC Validator tool includes all intersecting edge types in the measurement.
Note:
Intersection edges that are not measured pass the enclosure specification
automatically. For example, if TOUCH is not included in this list, touching edges pass
without measurement and only the remaining nontouching edges must fit the
enclosure specification for the rectangle to pass.
❍ ACUTE. Specifies that intersecting edges that form acute angles fail any nonzero
distance.
❍ POINT_TOUCH. Specifies that intersecting edges that point touch fail any nonzero
distance when the extension argument is not NONE.
❍ TOUCH. Specifies that intersecting edges that edge touch fail any nonzero distance.
not_inside
Optional. Specifies whether layer1 rectangles that are not enclosed in layer2 are
selected. The default is FAIL.
❍ FAIL. Selects rectangles that are not inside layer2.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Description
To determine if a minimum distance is satisfied, the following selection rules apply:
• A given rectangle edge satisfies the minimum distance only if there are no spacing
violations within a specified distance. In Figure 3-47, edge 1 satisfies any distance less
than or equal to x; it does not satisfy a distance of y.
Figure 3-47 Satisfying the Minimum Distance
x layer1
y 1
layer2
• Obstructions are ignored when measuring the enclosure. In Figure 3-48, edge 1 satisfies
any distance less than or equal to x, and edge 2 satisfies any distance less than or equal
to y.
x y layer1
1 2
layer2
• Measurements always include parallel and nonparallel spacing. In Figure 3-49, edge 1
satisfies any distance less than or equal to x.
Figure 3-49 Parallel and Nonparallel Spacing
x layer1
1
layer2
• Measurements are always made from the enclosed rectangle. This behavior is
significant only in nonparallel situations when the extension argument is NONE. In
Figure 3-50, edge 1 satisfies any distance less than or equal to y. The enclosure distance
x from enclosing layer to enclosed layer is ignored.
Figure 3-50 Satisfying a Distance
x
layer1
1 y
layer2
• In cases where the four distances are not symmetric, measurements are checked both
clockwise and counterclockwise around the rectangle to determine acceptance. For
example, as shown in Figure 3-51, both rectangles fit the specification
distances = {{{2},{4},{1},{1}}}
4 1 1 4 layer1
2 2 layer2
x layer1
layer2
y
• Measurements are made only between edges that oppose; that is, the angle formed
between the check sides of the edges is less than 90 degrees. Figure 3-53 shows an
example. See “Spacing Checks” on page A-18 for more information about the check
side.
Figure 3-53 Check Sides
layer1
layer2
check
region
Passes Fails
Note:
Passes: The enclosing edge falls within the check region but there is no spacing
violation.
Fails: There is a spacing violation within the check region.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 3-54 shows a line-end rule using the not_covered_by() function. To fail, a contact
must be less than any of the specified distances: 0.02 m and 0.03 m from the opposing
metal line ends and less than 0.01 m from the other two opposing metal sides. Because
these contacts meet the containment specifications, they are not selected.
bad_contact = contact not_covered_by [
distances = {{{0.01, INTERSECTION}, {0.02, INTERSECTION},
{0.01, INTERSECTION}, {0.03, INTERSECTION}}}
] metal;
0.01
0.02
0.02 0.03
contact layer
0.01 0.01 0.01
metal layer
0.03
In the following example, the not_covered_by() function selects any rectangles on the
cont layer that do not fit any of the specifications:
• Enclosed by at least 0.1 on all sides.
• Opposite sides as close as 0.0 if the other two sides are enclosed by at least 0.2.
notcont = not_covered_by(cont, metal,
{{{.1}, {.1}, {.1}, {.1}}, {{.2}, {0}, {.2}, {0}}}
);
In Figure 3-55, TOUCH is excluded from the intersecting argument list. As a result the
touching edges are not measured, and the blue rectangle is not selected.
not_covered_by(
blue, red,
{{{0.01,RADIAL}, {0.01,RADIAL}, {0.01,RADIAL}, {0.01,RADIAL}}},
intersecting = {ACUTE, POINT_TOUCH}
);
red layer
In Figure 3-56, TOUCH and ACUTE are excluded from the intersecting argument list.
Therefore, both touching and acute intersecting edges are not measured, and the blue
rectangle is not selected.
not_covered_by(
blue, red,
{{{0.01,RADIAL}, {0.01,RADIAL}, {0.01,RADIAL}, {0.01,RADIAL}}},
intersecting = {POINT_TOUCH}
);
Figure 3-56 Touching and Acute Intersecting Edges Are Not Measured
blue layer
red layer
See Also
covered_by()
not_contained_by() and contained_by()
enclose()
not_edge()
The not_edge() function selects the portion of all layer1 edges that are outside the
layer2 polygons.
Syntax
not_edge(
layer1 = data_layer,
layer2 = polygon_layer,
coincident = true | false, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer from which polygons are selected.
layer2
Required. Specifies the polygon layer against which the layer1 layer is checked.
coincident
Optional. When set to true, outside coincident is included in the result. The default is
true.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In Figure 3-57 both layers are polygon layers: magenta is layer1; red is layer2. The results
are the same if magenta is an edge layer.
green = magenta not_edge red;
See Also
and_edge()
coincident_edge() and not_coincident_edge()
coincident_inside_edge() and not_coincident_inside_edge()
coincident_outside_edge() and not_coincident_outside_edge()
Syntax
not_enclosed_by(
layer1 = polygon_layer,
layer2 = polygon_layer,
distances = {{distance1 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance2 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance3 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance4 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
...},
intersecting_failures = {ACUTE, PERPENDICULAR, POINT_TOUCH,
TOUCH}, //optional
non_orthogonal = CHECK | FAIL | IGNORE,
not_inside = FAIL | CHECK, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
enclosed_by(
layer2 = polygon_layer,
distances = {{distance1 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance2 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance3 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
distance4 = {distance = double,
extension = NONE | RADIAL |
SQUARE | INTERSECTION |
RECTANGLE,
extension_distance = double},
...},
intersecting_failures = {ACUTE, PERPENDICULAR, POINT_TOUCH,
TOUCH}, //optional
non_orthogonal = CHECK | FAIL | IGNORE,
not_inside = FAIL | CHECK, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer from which polygons are selected. This is the
enclosed layer.
layer2
Required. Specifies the polygon layer against which the layer1 layer is checked. This is
the enclosing layer.
distances
Required. Lists the distances and extensions for check regions.
❍ For a logical containment check, only distance values are used.
❍ For a spatial enclosure check, distance, extension, and extension_distance are
all used.
The distances can be applied in either clockwise or counterclockwise order. That is, a
rectangle fits the specification if the four minimum distances can be satisfied in at least
one of the eight possible permutations: four possible rotations, in forward or reverse
order.
❍ distance1, distance2, distance3, distance4. Specify the minimum distance
values, one for each side of the layer1 rectangle. The distances specify the
minimum distance from the outside of layer1 to the inside of layer2.
The distances must be positive values. A distance of 0 indicates that the layers can
be touching.
❍ extension. Optional. Specifies the endpoint extension for the check region. The
default is NONE.
■ NONE. Does not extend the check region. Only layer1 and layer2 edges with a
positive perpendicular projection between them are measured.
■ RADIAL. Extends the check region with the distance value past the endpoints of
the layer1 edge being checked, forming a radial curve.
■ SQUARE. Extends the check region with the distance value past the endpoints of
the layer1 edge being checked, forming a square box.
■ INTERSECTION. Extends the check region with the adjacent distance value past
the endpoints of the layer1 edge being checked.
■ RECTANGLE. Extends the check region past the endpoints of the layer1 edges
using the extension_distance value with a rectangle. The boundary of the
check region is inclusive or exclusive depending on the constraint of the distance
value. See the diagram in the extension argument of the enclose() function for
more information.
❍ extension_distance. Optional. Specifies the check region extension distance when
the extension argument is RECTANGLE. The value must be nonnegative. The default
is 0.
intersecting_failures
Optional. Specifies the intersecting types that are forbidden. If a rectangle intersects its
enclosing layer with a forbidden intersecting type, the rectangle is placed in the output
layer. By default, the IC Validator tool includes all intersecting types in the measurement.
❍ ACUTE. Specifies that intersecting edges that form acute angles fail.
❍ PERPENDICULAR. Specifies that intersecting edges that form right angles fail.
non_orthogonal
Optional. Specifies how non-orthogonal rectangles are processed. The default is CHECK.
❍ CHECK. Checks nonorthogonal data during the workflow of this function. See
Figure 3-58.
❍ FAIL. Puts nonorthogonal data directly into the output layer.
not_inside
Optional. Specifies how to process the inside and not-inside rectangles. The default is
CHECK.
❍ FAIL. Puts directly into the output layer all rectangles that are not fully inside the
enclosing layer.
❍ CHECK. For spatial enclosure checks, checks the sections of rectangles inside the
enclosing layer. If a rectangle is completely outside its enclosing polygon, then it is
not written into the output layer.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
enclose()
not_contained_by() and contained_by()
Syntax
np(
matrix = device_matrix,
device_name = "string",
device_body = polygon_layer,
anode = polygon_layer,
cathode = polygon_layer,
optional_pins = {{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK,
pin_compared = true | false},
...}, //optional
recognition_layer = polygon_layer, //optional
reference_layer = polygon_layer, //optional
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
properties = {{name = "string",
type = DOUBLE | DOUBLE_LIST | STRING,
scale = FEMTO | PICO | NANO | MICRO |
MILLI | KILO | MEGA | NONE},
...}, //optional
write_property_to =
NETLIST_XTR_SPICE | NETLIST_PEX_SPICE |
SPICE | ANNOTATION_FILE |
NETLIST_ANNOTATION_FILE_SPICE |
NETLIST | AUTO | NETLIST_SKIP_PCELL,
processing_layer_hash_map =
{"string", ...},
pin_map = {"string", ...}},
...}, //optional
property_function =function, //optional
merge_parallel =true | false, //optional
bulk_relationship =ENCLOSE | INTERACT, //optional
swappable_pins ={{"string", ...}, ...}, //optional
schematic_devices ={{device_name = "string",
anode = "string",
cathode = "string",
bulk_terms = {"string", ...},
optional_pins = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
x_card = true | false, //optional
extract_shorted_device = true | false, //optional
spice_netlist_function = "string", //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
unique_identifier = "string", //optional
swappable_properties = {{pin_name = "string",
property_list = {"string", ...}},
...}, //optional
simulation_model_name = "string", //optional
dlink_libraries = {dev_dlink_library_handle, ...}, //optional
top_simulation_properties = true | false //optional
);
pn(
matrix = device_matrix,
device_name = "string",
device_body = polygon_layer,
anode = polygon_layer,
cathode = polygon_layer,
optional_pins = {{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK,
pin_compared = true | false},
...}, //optional
recognition_layer = polygon_layer, //optional
reference_layer = polygon_layer, //optional
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
properties = {{name = "string",
type = DOUBLE | DOUBLE_LIST | STRING,
scale = FEMTO | PICO | NANO | MICRO |
MILLI | KILO | MEGA | NONE},
...}, //optional
write_property_to =
NETLIST_XTR_SPICE | NETLIST_PEX_SPICE |
SPICE | ANNOTATION_FILE |
NETLIST_ANNOTATION_FILE_SPICE |
NETLIST | AUTO | NETLIST_SKIP_PCELL,
processing_layer_hash_map =
{"string", ...},
Returns
void
Arguments
matrix
Required. Specifies the device matrix used by the extraction functions. The matrix must
be defined by the init_device_matrix() function. Configuration details for device
extraction are stored in the matrix data object for use by the extract_devices()
function.
device_name
Required. Specifies the diode. A device name can be reused across multiple calls of the
np() function or pn() function, but not across both functions, if all calls have
❍ Equivalent numbers of optional pins with equivalent values for the pin_name and
pin_compared options.
device_body
Required. Specifies the body layer of the diode.
anode
Required. Specifies the anode layer of the diode. The pin name generated by the
IC Validator tool is “ANODE”.
cathode
Required. Specifies the cathode layer of the diode. The pin name generated by the
IC Validator tool is “CATHODE”.
optional_pins
Optional. Lists additional bulk or terminal layers. You can specify up to 20 pins.
❍ device_layer. Required. Specifies the device layer.
recognition_layer
Optional. Specifies the layer used to recognize a device when the device body layer does
not interact with all terminal layers and processing layers. All processing layers must
interact with this specified recognition layer. This layer is also used to identify device
instances that are merged during layout extraction when multiple individual devices
occur within a single recognition layer polygon. See the merge_parallel argument for
more information.
reference_layer
Optional. Specifies the intended location in the hierarchy for the extracted device. The
layer is usually an assign layer.
processing_layer_hash
Optional. Specifies a hash of string to a processing layer and range pair. In the remote
property function, each layer is retrieved as a polygon set by passing the hash key to the
dev_processing_layer() function.
❍ layer1. Required. Specifies the processing layer, which is a non-terminal layer used
for calculating properties.
❍ range. Optional. Specifies the maximum distance value from a device body polygon.
This value defines a window around the device body for data collection.
A nonnegative range value collects processing polygons that are within the specified
range of the body polygon which might or might not interact with the body polygon.
The default is -1.
■ When the range value is -1, only processing_layer_hash polygons interacting
with the body layer polygon are selected for the polygon set.
■ When the range value is >0, a window is created by oversizing the body layer
polygon by the range value. All processing_layer_hash polygons interacting
with this window, either by overlap or by an externally touching edge, are selected
for the polygon set.
See the description of the processing_layer_hash argument of the nmos() and
pmos() functions for diagrams that illustrate the application of the range value.
properties
Optional. Lists the property values that define the device. The default is
properties = {{"area", DOUBLE, PICO},
{"pj", DOUBLE, MICRO}},
❍ name. Specifies the property name. See “Predefined Name Matches” in Chapter 7,
“Compare Functions Basics” of the IC Validator LVS User Guide for the names and
associated matches that are predefined during LVS compare.
Note:
More than one property sharing the same name is prohibited. Furthermore, the
property name is case-insensitive.
❍ type. Specifies the data type of the property. The default is DOUBLE.
Note:
The compare() function does not support the DOUBLE_LIST property. When
running dual-hierarchy extraction, the list of double properties is always written to
the annotation file unless the write_property_to argument is explicitly
specified.
❍ scale. Optional. Specifies the scale factor applied to property values output by the
write_spice(), write_xref_spice(), pex_generate_results(), and
write_annotation_file() functions. The default is NONE, which means no scaling.
You can use this scale option to convert dimensional property values from the
IC Validator native base unit of microns into the base unit of meters for SPICE
simulation.
❍ write_property_to. Optional. Specifies to which file the property is written. The
default is AUTO.
■ NETLIST_XTR_SPICE. Writes the corresponding property to
If the pin name of a terminal layer is not referenced in the pin map for any property,
then that layer is never leveled, regardless of whether dual-hierarchy extraction is
enabled or disabled.
property_function
Optional. Specifies the remote function that calculates the geometric properties for each
extracted diode. The default calculations are for the area of the diode (area) and the
perimeter of the junction (pj). The default calc_diode_properties() function is defined
in the device_public.rh header file.
If you use a remote function, you must specify the device properties in the properties
argument. See Chapter 4, “Utility Functions,” for more information about the utility
functions you can use to define a remote function.
merge_parallel
Optional. Specifies whether parallel devices enclosed by the same recognition layer
polygon are merged. The default is false.
❍ true. Merges parallel devices enclosed by the same recognition layer polygon.
Multiple banks of parallel-merged devices can occur within a single recognition layer
polygon.
❍ false. Does not merge parallel devices enclosed by the same recognition layer
polygon.
bulk_relationship
Optional. Specifies the required relationship between the bulk polygon and the device
polygon.
❍ ENCLOSE. Specifies that the bulk polygon must enclose the device polygon.
❍ INTERACT. Specifies that the bulk polygon must interact with the device polygon by
one of these methods: enclosing, cutting, or outside edge touching.
swappable_pins
Optional. Lists the pins that can be swapped for a successful comparison with the
schematic device. By default, no pins can be swapped.
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals used for comparison.
By default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
device configuration function.
■ The schematic pin names do not match the standard “ANODE”, “CATHODE”, and
“BULK” pin names, in addition to optional pin names provided in the
optional_pins list of structures argument of the device configuration function.
❍ anode. Optional. Specifies the anode terminal of the device. The default is "ANODE".
❍ cathode. Optional. Specifies the cathode terminal of the device. The default is
"CATHODE".
❍ ignore_pins. Optional. Ignores the specified schematic pins during pin connectivity
comparison between the layout and schematic. If a pin name is listed that matches a
pin name defined by the optional_pins argument, that pin is ignored both in the
layout and schematic. This behavior is similar to the pin_compared option of the
optional_pins argument of the np() and pn() functions.
If the schematic device has an optional pin that does not correspond to any pin in the
np() and pn() functions, that pin can be specified with the ignore_pins. Otherwise,
this optional pin produces an error during the compare operation.
x_card
Optional. Specifies if the instance name prefix is replaced. The default is false.
❍ true. Replaces the default instance name prefix for the layout extracted device with
an X-card. This option facilitates the use of SPICE SUBCKT models to represent
devices in simulation.
❍ false. The default instance name prefix for the layout extracted device is not
replaced.
spice_netlist_function
Optional. Specifies the function used to format instances of the device in netlists
generated by the write_spice() and write_xref_spice() functions. See “Flexible
Netlisting Utility Functions” on page 4-110 for more information.
extract_shorted_device
Optional. Specifies whether shorted diodes, that is, diodes with only one terminal, are
extracted. The default is true.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
unique_identifier
Specifies the user-derived string used by the remote property function. The
unique_identifier argument value is retrieved from the remote property function with
the dev_unique_identifier() utility function. See the Examples section of the
capacitor() function for more information. You must ensure that the strings are valid and
unique. (The IC Validator tool does not check values to ensure that they are unique.) The
default is an empty string ("").
This functionality is used to access data objects created outside of a remote property
function but passed in as global variables. Use this functionality when access to these
global variables must be synchronized to a specific device configuration function call. For
example, you can create a global hash object containing property extraction parameters
for several device configuration functions. The hash key is a unique identifier string that
matches the unique_identifier argument value. Then, you can clear the hash key by
invoking the dev_unique_identifier() function that is in the property function. The
dev_unique_identifier() function retrieves the unique_identifier argument value
to the corresponding device configuration function call.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped. By default, the IC Validator tool does not map swappable pins to
properties.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
simulation_model_name
Optional. Specifies the simulation netlist model name. As needed, define this model
name for each device configuration function. This name is output to the runset report file.
The device name is not changed.
dlink_libraries
Optional. Specifies the libraries that can be used to pass measurement data to external
libraries. See the Dynamic-Link Library Support chapter in the IC Validator User Guide
and “Dynamic Linking Utility Functions” on page 4-114 for more information.
top_simulation_properties
Optional. Controls whether properties identified as simulation properties are extracted
hierarchically or in the top cell. The default is false.
❍ true. Extracts simulation properties in the top cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
matrix = init_device_matrix(cdb1);
np(
matrix,
device_name = "DNP_dev",
device_body = l_body,
anode = l_newll,
cathode = l_psd,
reference_layer = l_ref
);
device_db = extract_devices(matrix);
netlist_db = netlist(device_db);
See Also
npn() and pnp()
nmos() and pmos()
Syntax
npn(
matrix = device_matrix,
device_name = "string",
collector = polygon_layer,
base = polygon_layer,
emitter = polygon_layer,
optional_pins = {{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK,
pin_compared = true | false},
...}, //optional
recognition_layer = polygon_layer, //optional
reference_layer = polygon_layer, //optional
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
properties = {{name = "string",
type = DOUBLE | DOUBLE_LIST | STRING,
scale = FEMTO | PICO | NANO | MICRO |
MILLI | KILO | MEGA | NONE},
...}, //optional
write_property_to =
NETLIST_XTR_SPICE | NETLIST_PEX_SPICE |
SPICE | ANNOTATION_FILE |
NETLIST_ANNOTATION_FILE_SPICE |
NETLIST | AUTO | NETLIST_SKIP_PCELL,
processing_layer_hash_map =
{"string", ...},
pin_map = {"string", ...}},
...}, //optional
property_function = function, //optional
merge_parallel = true | false, //optional
bulk_relationship = ENCLOSE | INTERACT, //optional
pnp(
matrix = device_matrix,
device_name = "string",
collector = polygon_layer,
base = polygon_layer,
emitter = polygon_layer,
optional_pins = {{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK,
pin_compared = true | false},
...}, //optional
recognition_layer = polygon_layer, //optional
reference_layer = polygon_layer, //optional
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
properties = {{name = "string",
type = DOUBLE | DOUBLE_LIST | STRING,
scale = FEMTO | PICO | NANO | MICRO |
MILLI | KILO | MEGA | NONE},
...}, //optional
write_property_to =
NETLIST_XTR_SPICE | NETLIST_PEX_SPICE |
SPICE | ANNOTATION_FILE |
NETLIST_ANNOTATION_FILE_SPICE |
NETLIST | AUTO | NETLIST_SKIP_PCELL,
processing_layer_hash_map =
{"string", ...},
pin_map = {"string", ...}},
...}, //optional
property_function = function, //optional
merge_parallel = true | false, //optional
Returns
void
Arguments
matrix
Required. Specifies the device matrix used by the extraction functions. The matrix must
be defined by the init_device_matrix() function. Configuration details for device
extraction are stored in the matrix data object for use by the extract_devices()
function.
device_name
Required. Specifies the bipolar transistor. A device name can be reused across multiple
calls of the npn() function or pnp() function, but not across both functions, if all calls
have
❍ Equivalent numbers of optional pins with equivalent values for the pin_name and
pin_compared options.
collector
Required. Specifies the collector layer of the transistor device. The pin name generated
by the IC Validator tool is “COLL”.
base
Required. Specifies the base layer of the transistor device. The pin name generated by
the IC Validator tool is “BASE”.
emitter
Required. Specifies the emitter layer of the transistor device. The pin name generated by
the IC Validator tool is “EMIT”.
optional_pins
Optional. Lists additional bulk or terminal layers. You can specify up to 20 pins.
❍ device_layer. Required. Specifies the device layer.
recognition_layer
Optional. Specifies the layer used to recognize a device when the device body layer does
not interact with all terminal layers and processing layers. All processing layers must
interact with this specified recognition layer. This layer is also used to identify device
instances that are merged during layout extraction when multiple individual devices
occur within a single recognition layer polygon. See the merge_parallel argument for
more information.
reference_layer
Optional. Specifies the intended location in the hierarchy for the extracted device. The
layer is usually an assign layer.
processing_layer_hash
Optional. Specifies a hash of string to a processing layer and range pair. In the remote
property function, each layer is retrieved as a polygon set by passing the hash key to the
dev_processing_layer() function.
❍ layer1. Required. Specifies the processing layer, which is a non-terminal layer used
for calculating properties.
❍ range. Optional. Specifies the maximum distance value from a device body polygon.
This value defines a window around the device body for data collection.
A nonnegative range value collects processing polygons that are within the specified
range of the body polygon which might or might not interact with the body polygon.
The default is -1.
■ When the range value is -1, only processing_layer_hash polygons interacting
with the body layer polygon are selected for the polygon set.
■ When the range value is >0, a window is created by oversizing the body layer
polygon by the range value. All processing_layer_hash polygons interacting
with this window, either by overlap or by an externally touching edge, are selected
for the polygon set.
See the description of the processing_layer_hash argument of the nmos() and
pmos() function for diagrams that illustrate the application of the range value.
properties
Optional. Lists the property values that define the device. The default is
properties = {{"area", DOUBLE, PICO}},
❍ name. Specifies the property name. See “Predefined Name Matches” in Chapter 7,
“Compare Functions Basics” of the IC Validator LVS User Guide for the names and
associated matches that are predefined during LVS compare.
Note:
More than one property sharing the same name is prohibited. Furthermore, the
property name is case-insensitive.
❍ type. Specifies the data type of the property. The default is DOUBLE.
Note:
The compare() function does not support the DOUBLE_LIST property. When
running dual-hierarchy extraction, the list of double properties is always written to
- The property lists of cell instances matching the extracted device inside the
parasitic extraction layout database generated by the IC Validator tool.
- The annotation file by the write_annotation_file() function.
■ ANNOTATION_FILE. Writes the corresponding property to
- The property lists of cell instances matching the extracted device inside the
parasitic extraction layout database generated by the IC Validator tool.
■ NETLIST_SKIP_PCELL. Writes the corresponding property to
Table 3-28 Dual-Hierarchy Extraction Treatment for Processing Layers Mapped Using the
processing_layer_hash_map Argument (Continued)
Table 3-29 Dual-Hierarchy Extraction Treatment for Terminal Layers Mapped Using pin_map
If the pin name of a terminal layer is not referenced in the pin map for any property,
then that layer is never leveled, regardless of whether dual-hierarchy extraction is
enabled or disabled.
property_function
Optional. Specifies the remote function that calculates the geometric properties for each
extracted device. The default calculation is for the active area. The default
calc_bjt_properties() function is defined in the device_public.rh header file.
If you use a remote function, you must specify the device properties in the properties
argument. See Chapter 4, “Utility Functions,” for more information about the utility
functions you can use to define a remote function.
merge_parallel
Optional. Specifies whether parallel devices enclosed by the same recognition layer
polygon are merged. The default is false.
❍ true. Merges parallel devices enclosed by the same recognition layer polygon.
Multiple banks of parallel-merged devices can occur within a single recognition layer
polygon.
❍ false. Does not merge parallel devices enclosed by the same recognition layer
polygon.
bulk_relationship
Optional. Specifies the required relationship between the bulk polygon and the device
polygon.
❍ ENCLOSE. Specifies that the bulk polygon must enclose the device polygon.
❍ INTERACT. Specifies that the bulk polygon must interact with the device polygon by
one of these methods: enclosing, cutting, or outside edge touching.
swappable_pins
Optional. Lists the pins that can be swapped for a successful comparison with the
schematic device. By default, no pins can be swapped.
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals used for comparison.
By default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
device configuration function.
■ The schematic pin names do not match the standard COLL, BASE, EMIT, and BULK
pin names, in addition to optional pin names provided in the optional_pins list
of structures argument of the device configuration function.
❍ device_name. Required. Specifies the schematic device.
❍ collector. Optional. Specifies the collector terminal of the device. The default is
"COLL".
❍ base. Optional. Specifies the base terminal of the device. The default is "BASE".
❍ emitter. Optional. Specifies the emitter terminal of the device. The default is "EMIT".
❍ optional_pins. Optional. Specifies the schematic pins that correspond to the pin
name in the optional_pins argument.
❍ ignore_pins. Optional. Ignores the specified schematic pins during pin connectivity
comparison between the layout and schematic. If a pin name is listed that matches a
pin name defined by the optional_pins argument, that pin is ignored both in the
layout and schematic. This behavior is similar to the pin_compared option of the
optional_pins argument of the npn() and pnp() functions.
If the schematic device has an optional pin that does not correspond to any pin in the
npn() and pnp() functions, that pin can be specified with the ignore_pins.
Otherwise, this optional pin produces an error during the compare operation.
x_card
Optional. Specifies if the instance name prefix is replaced. The default is false.
❍ true. Replaces the default instance name prefix for the layout extracted device with
an X-card. This option facilitates the use of SPICE SUBCKT models to represent
devices in simulation.
❍ false. The default instance name prefix for the layout extracted device is not
replaced.
spice_netlist_function
Optional. Specifies the function used to format instances of the device in netlists
generated by the write_spice() and write_xref_spice() function. See “Flexible
Netlisting Utility Functions” on page 4-110 for more information.
body_position
Optional. Specifies the body layer of the bipolar transistor. The default is EMITTER.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
unique_identifier
Specifies the user-derived string used by the remote property function. The
unique_identifier argument value is retrieved from the remote property function with
the dev_unique_identifier() utility function. See the Examples section of the
capacitor() function for more information. You must ensure that the strings are valid and
unique. (The IC Validator tool does not check values to ensure that they are unique.) The
default is an empty string ("").
This functionality is used to access data objects created outside of a remote property
function but passed in as global variables. Use this functionality when access to these
global variables must be synchronized to a specific device configuration function call. For
example, you can create a global hash object containing property extraction parameters
for several device configuration functions. The hash key is a unique identifier string that
matches the unique_identifier argument value. Then, you can clear the hash key by
invoking the dev_unique_identifier() function that is in the property function. The
dev_unique_identifier() function retrieves the unique_identifier argument value
to the corresponding device configuration function call.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped. By default, the IC Validator tool does not map swappable pins to
properties.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
simulation_model_name
Optional. Specifies the simulation netlist model name. As needed, define this model
name for each device configuration function. This name is output to the runset report file.
The device name is not changed.
dlink_libraries
Optional. Specifies the libraries that can be used to pass measurement data to external
libraries. See the Dynamic-Link Library Support chapter in the IC Validator User Guide
and “Dynamic Linking Utility Functions” on page 4-114 for more information.
top_simulation_properties
Optional. Controls whether properties identified as simulation properties are extracted
hierarchically or in the top cell. The default is false.
❍ true. Extracts simulation properties in the top cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
matrix = init_device_matrix(cdb1);
npn(
matrix,
device_name = "npn1",
emitter = emitter,
base = base,
collector = collector
);
device_db = extract_devices(matrix);
netlist_db = netlist(device_db);
See Also
np() and pn()
nmos() and pmos()
oasis_library()
The oasis_library() function defines an OASIS file name and returns a file handle to be
used by the output_library argument of the write_oasis() function.
Limitation:
The oasis_library() function cannot be called more than one time with the same file
argument. The result, however, can be used in more than one write_oasis() function,
in which case the file is overwritten.
Syntax
oasis_library(
file = "string"
);
Returns
oasis_library_handle
Arguments
file
Required. OASIS file name. See the write_oasis() function for more information.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
write_oasis()
oasis_options()
The oasis_options() function specifies the behavior of the IC Validator tool when reading
an OASIS file.
Syntax
oasis_options(
duplicate_cell = REPLACE | DROP | MERGE, //optional
cell_name_map = {{search_string = "string",
replace_string = "string"},
...}, //optional
force_cell_name_case = UPPER | LOWER | MIXED, //optional
merge_references = true | false, //optional
circles = DROP | CONVERT_TO_POLYGON | ABORT, //optional
abort_path_extension_3 = true | false, //optional
generate_property_text = NONE | TOP | ALL, //optional
text = {objects = {PROPERTY_TEXT, TEXT},
properties = {integer, ...}}, //optional
named_property_map = {{name = "string",
number = integer}, ...}, //optional
replace_instance_name_characters = {{search_string = "string",
replace_string = "string"},
...} //optional
);
Returns
void
Arguments
duplicate_cell
Optional. Specifies how the duplicate cells are processed when reading multiple OASIS
input files.
❍ REPLACE. Replaces any previously read cells of the same name with the last cell read
for any duplicate cells.
❍ DROP. Does not replace the first cell read with any subsequently read cells of the
same name.
❍ MERGE. Merges all geometric data into a single cell. References, however, are further
controlled by the merge_references argument.
cell_name_map
Optional. Specifies a list that tells how cell names are remapped as data is read in. By
default, the IC Validator tool does not remap cell names.
❍ search_string. Required. Specifies the existing cell name in the input stream.
force_cell_name_case
Optional. Forces the character case of cell names. The default is MIXED.
❍ UPPER. Converts all cell names to uppercase characters when the OASIS file is read.
❍ LOWER. Converts all cell names to lowercase characters when the OASIS file is read.
❍ MIXED. Maintains the character case that cell names have in the OASIS file.
merge_references
Optional. Specifies the merging of cell references when duplicate cells are found in
multiple OASIS input files.
The merge_references argument applies only when the duplicate_cell argument is
MERGE. If the duplicate_cell argument is REPLACE, the references in the last cell read
replace any previously read cells of the same name. If the duplicate_cell argument is
DROP, the references of the first cell read are used. The default is true.
❍ true. Merges cell references into existing cells when duplicate cells are found.
circles
Optional. Specifies the conversion of circles from the input OASIS file to polygons. The
default is CONVERT_TO_POLYGON.
❍ DROP. Does not convert circles to polygons.
abort_path_extension_3
Optional. Specifies when the run stops. When set to true, the run stops when
encountering a path with a variable extension (type 3). The default is false.
generate_property_text
Optional. Specifies if text points are generated from polygon properties in the input
library. The default is NONE.
❍ NONE. Does not generate text from properties in the input library.
❍ TOP. Generates property text only for the top cell of the design.
text
Optional. Controls the reading of text from an OASIS input library for each assigned text
layer. If generate_property_text is TOP or ALL, text points are generated for polygons
with associated properties. The text is located on the polygon and has the same layer
and datatype.
Note:
This global option is overwritten by selections made in the oasis argument of the
assign_text() function.
❍ objects. Optional. Assigns the specified text types to a layer when reading an
OASIS library. The default is TEXT.
■ PROPERTY_TEXT. Assigns automatically generated text for polygons.
named_property_map
Optional. Lists the name and number pairs that support the reading of named properties
from an OASIS stream. For each pair, properties of the given name are read as
GDSII-compatible numbered properties of the given number.
❍ name. Specifies the property name.
❍ number. Specifies the number to assign to the property. The property numbers must
be in the range of 0–255, inclusive.
For example, this argument reads property “Net” onto property 2:
oasis_options(named_property_map = {"Net", 2});
replace_instance_name_characters
Optional. Lists the strings to be replaced in instance names. Neither string can use string
matching. By default, the IC Validator tool does not replace any characters.
❍ search_string. Required. Specifies the string to replace.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
oasis_options (
cell_name_map = {{search_string="A", replace_string="B"},
{search_string="C", replace_string="D"}},
circles = ABORT
);
See Also
gds_options()
milkyway_options()
openaccess_options()
off_grid()
The off_grid() function creates squares that indicate vertices and cell placements that are
off the specified grid. This function is a cell-level operation.
Syntax
off_grid(
layer1 = data_layer,
resolution = double,
shape_size = double, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
resolution
Required. Specifies the resolution value for the grid check.
shape_size
Optional. Specifies the size of the output squares. The value must be positive. It is
rounded to the nearest even multiple of the internal resolution, with a minimum value of
twice the internal resolution. The internal_resolution argument of the
resolution_options() function sets the internal resolution. The default is
DRC_ERROR_BOX, which has a default of 0.1.
Figure 3-59 shows the effect of the resolution argument setting with the off_grid()
function.
Figure 3-59 resolution Argument Example With the off_grid() Function
layer1
Figure 3-60 shows the effect of the shape_size argument setting with the off_grid()
function.
Figure 3-60 shape_size Argument Example With the off_grid() Function
layer1
Result
0.05 0.02
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
metal_grid_error = off_grid(metal, 0.05);
See Also
layout_grid_options()
off_grid_xy()
snap()
off_grid_xy()
The off_grid_xy() function supports grid checking in the x- and y-directions. It checks the
center of rectangles, polygons, and edges, as well as polygon and edge vertices.
Syntax
off_grid_xy(
layer1 = data_layer,
x_resolution = double,
y_resolution = double,
coordinates = VERTICES | CENTER,
shape_size = double, //optional
reference_layer = polygon_layer, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
x_resolution
Required. Specifies the x-coordinate resolution value for the grid check.
y_resolution
Required. Specifies the y-coordinate resolution value for the grid check.
coordinates
Optional. Specifies how to check for off-grid coordinates. The default is VERTICES.
❍ VERTICES. Checks edge or polygon vertices.
shape_size
Optional. Specifies the size of the output squares. The value must be positive. The value
is rounded to the nearest even multiple of the internal resolution, with a minimum value
of twice the internal resolution. The internal_resolution argument of the
resolution_options() function sets the internal resolution. The default is
DRC_ERROR_BOX, which has a default of 0.1.
reference_layer
Optional. Specifies the reference layer. Only polygons specified by the layer1 argument
that are enclosed by the reference layer are processed. The reference for grid checking
is the lower-left coordinate of the extent of each reference layer polygon.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In the following example, centers must lie on the contact layer x- and y-grid points that are
50 nm in the x-direction and 20 nm in the y-direction.
off_grid_xy(
contact,
x_resolution = 0.05,
y_resolution = 0.02,
coordinates = CENTER,
shape_size = 0.01
);
See Also
off_grid()
openaccess_library()
The openaccess_library() function defines an OpenAccess library definition file name
and returns a file handle to be used by the output_library argument of the
write_openaccess() function.
Limitation:
The openaccess_library() function cannot be called more than one time with the
same file argument. The result, however, can be used in more than one
write_openaccess() function.
Syntax
openaccess_library(
library_definition_file = "string"
);
Returns
openaccess_library_handle
Arguments
library_definition_file
Required. OpenAccess file name. See the write_openaccess() function for more
information.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
write_openaccess()
openaccess_merge_library_options()
The openaccess_merge_library_options() function specifies a mapping from the
master and reference OpenAccess libraries to replacement GDSII and OASIS libraries that
are read in with OpenAccess data at the start of a verification run. This function can be
called only one time in a runset.
You can use the -ml command-line option to override the settings in the
openaccess_merge_library_options() function. See the Command-Line Options
section in the “IC Validator Basics” chapter of the IC Validator User Guide for more
information.
For example, if cell ref1.A.layout is in the OpenAccess library, the layout view is replaced
with the GDSII or OASIS data for cell A.
When using the openaccess_merge_library_options() function, read all required GDSII
and OASIS data during an IC Validator run to emulate the complete mask data set for a
designated top-level structure. The lower-level cells in the replacement data are not
permanently merged into the input OpenAccess library. Data is temporarily merged for only
this run.
Note:
The master OpenAccess library and top-level cell are identified in the runset by the
library() function. The mapping specified in the
openaccess_merge_library_options() function never looks for a replacement of the
top cell.
When using the openaccess_merge_library_options() function, you should be familiar
with OpenAccess library/cell/view triples.
Syntax
openaccess_merge_library_options(
libraries = {{library_name = "string",
view_name = "string",
replacement_libraries = {{
file = "string",
format = GDSII | OASIS,
cell_name_map = {{search_string = "string",
replace_string = "string"},
...},
layer_map_file = "string",
layout_integrity = {{db_name = "string",
missing_db = ABORT | IGNORE,
cell_name_map =
{{search_string = "string",
replace_string = "string"},
...}},
...},
},
...},
...}},
missing_cell = ABORT | USE_OPENACCESS, //optional
report = {USED_CELLS, UNUSED_CELLS,
MISSING_CELLS, LAYER_MAPS,
DUPLICATE_CELLS}, //optional
missing_library = ABORT | CONTINUE //optional
);
Returns
void
Arguments
libraries
Required. Lists the OpenAccess and replacement libraries.
❍ library_name. Required. Specifies the OpenAccess library name. You only need to
list the OpenAccess libraries for which you want to do replacements.
❍ view_name. Optional. Specifies the OpenAccess view name for cells being replaced.
Use this option if you want to set the view name for these cells to something other
than the default view of “layout.”
❍ replacement_libraries. Required. Specifies the replacement libraries. The
IC Validator tool searches the replacement libraries in the order specified looking for
cells. The first cell found is the one used.
Note:
A GDSII or OASIS file can be gzipped. The IC Validator tool automatically detects
if a GDSII or OASIS file is gzipped.
■ file. Specifies the replacement file.
■ cell_name_map. Optional. Specifies a list that tells how cell names are mapped
as data is read in. Use this list when the GDSII or OASIS cell name does not
match the corresponding OpenAccess cell name. If you do not use this list to map
duplicate cell names, the IC Validator tool automatically does the mapping and
resolves all hierarchical references to the new name.
- search_string. Specifies the cell name in the GDSII or OASIS data that is
renamed.
- replace_string. Specifies the new cell name given to the cell in the GDSII or
OASIS data. This cell name is used within the IC Validator tool after the input
data is read.
■ layer_map_file. Optional. Specifies the layer mapping file for this set of libraries.
You can map GDSII or OASIS data to OpenAccess data. The file can be a basic
layer/datatype mapping or OpenAccess format:
- Basic format:
DestinationLayer[:DestinationDatatype] SrcLayer[:SrcDatatype]
All the geometric and text data on SrcLayer and SrcDatatype are moved to
DestinationLayer and DestinationDatatype.
When using this format, the layer/datatype are mapped from the replacement
GDSII or OASIS file directly to the runset assigns.
- OpenAccess format:
#layer_name layerPurpose layerNo. layerDataType
layer1 layerPurpose1 layerNo1 layerDataType1
layer2 layerPurpose2 layerNo2 layerDataType2
...
All the geometric and text data on layerNo1 and layerDataType1 in GDSII and
OASIS are moved to the OpenAccess layer1 layer and the layerPurpose1
purpose.
When using this format, the layer/datatype are mapped from the replacement
GDSII or OASIS file to OpenAccess layer/purpose in the main OpenAccess
database. If a layer mapping file is provide in the openaccess_options()
function, then that mapping is applied after the mapping specified with this
layer_map_file option to map from OpenAccess layer/purpose to the runset
layer/datatype.
See the layer_mapping_file argument of the openaccess_options()
function for more information.
■ layout_integrity. Optional. Specifies the list of layout integrity databases that
the IC Validator tool uses for layout integrity checking. By default, the IC Validator
tool does not check layout integrity.
Note:
The layout integrity database applies to cells in the replacement library.
OpenAccess cells are checked against global layout integrity options, if any.
- db_name. Required. Specifies the path to the layout integrity database.
- missing_db. Optional. Specifies the behavior when the IC Validator tool does
not find the specified layout integrity database. The default is ABORT.
¤ ABORT. Specifies that the run stops when the layout integrity database is not
found.
¤ IGNORE. Continues the IC Validator run if the tool cannot find the layout
integrity database.
- cell_name_map. Optional. Specifies a list that tells how cell names are
remapped as data is read from the layout integrity databases (LIDBs). By
default, the IC Validator tool does not remap cell names.
¤ search_string. Required. Specifies the existing cell name in the input
LIDB.
¤ replace_string. Required. Specifies the cell name used for layout
integrity checking within IC Validator.
missing_cell
Optional. Specifies the action taken if a cell is missing from the replacement file. The
default is ABORT.
❍ ABORT. Specifies if the run stops when a cell in the OpenAccess library is not found in
a replacement file.
❍ USE_OPENACCESS. If a cell in the OpenAccess library is not found in a GDSII or OASIS
replacement file, then the tool uses the OpenAccess cell that is supposed to be
replaced.
report
Optional. Specifies the information written to the openaccess_merge_library_options.log
file. The categories you can specify for output are USED_CELLS, UNUSED_CELLS,
MISSING_CELLS, LAYER_MAPS, and DUPLICATE_CELLS. The default output reports all
categories. This file is in the run_details directory.
missing_library
Optional. Specifies the IC Validator action when the replacement library does not exist.
The default is ABORT.
❍ ABORT. issues an error message when a replacement library does not exist.
❍ CONTINUE. Behaves as if the replacement library was never specified and continues
running.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information about
licensing.
Example
The openaccess_merge_library_options() function allows the direct replacement of
child cells in an OpenAccess library with cells from GDSII and OASIS files. When each cell
is replaced, the OpenAccess library, view, and name (L,C,V) triplets are used to find a cell in
GDSII and OASIS files.
For example, in the OpenAccess library:
main.top.layout
• main.sub_blockA.layout
❍ main.f_block.layout
■ stdlib.gateA.layout
■ stdlib.gateB.layout
• main.sub_blockB.layout
❍ vendorA.ipblockA.frame
■ vendorA.ipblockA.layout
• main.sub_blockC.layout
❍ vendorB.ipblock1.layout
❍ vendorC.ipblock2.layout
❍ vendorD.ipblock3.layout
To replace library references and the layout view with layout data from file an OASIS file:
openaccess_merge_library_options(
libraries = {
{library_name = "vendorA",
view_name = "layout",
replacement_libraries = {
{file = "vendorA.oasis", format = OASIS }
}}
{library_name = "vendorB",
view_name = "layout",
replacement_libraries = {
{file = "vendorB.oas", format = OASIS}
}}
{library_name = "vendorC",
view_name = "layout",
replacement_libraries = {
{file = "vendor_c.gds", format = GDSII}
}}
}
);
If you have multiple GDSII and OASIS files, then use multiple replacement_libraries
entries. The precedence follows the order in the specified replacement libraries. For
example,
openaccess_merge_library_options(
libraries = {
{library_name = "stdlib",
view_name = "layout",
replacement_libraries = {
{file = "stdcells_group1.gds", format = GDSII },
{file = "stdcells_rev2_3.oas", format = OASIS}
}}
}
);
See Also
assign()
assign_openaccess()
assign_openaccess_edge()
assign_openaccess_text()
milkyway_merge_library_options()
ndm_merge_library_options()
openaccess_options()
openaccess_options()
The openaccess_options() function specifies the behavior of the IC Validator tool when
reading OpenAccess input.
In an OpenAccess database, every cell is specified by library, cell, and view. When reading
OpenAccess, each library/cell/view triplet is read into a unique cell in IC Validator. In the
IC Validator output files, the naming scheme for cells is
• The name of any cell that is part of the original library and view of the top cell is used
unmodified.
• The name of any cell with a different library or view name from the top cell is renamed as
library.cell.view
• If this new name conflicts with an existing cell in the design or if it is very long, the
IC Validator tool ensures a unique name by further renaming.
Layer-purpose names for blockage and boundary OpenAccess objects are not predefined.
To extract polygon layer objects from the OpenAccess oaBoundary and oaBlockage family
objects, use the pr_boundary, area_blockage, area_halo, area_boundary,
layer_blockage, and layer_halo arguments. If you do not specify these objects in the
openaccess_options() function, they are not read by the IC Validator tool.
Syntax
openaccess_options(
view =
"string", //optional
layer_mapping_file =
"string", //optional
generate_pin_text =
NONE | TOP | ALL, //optional
pin_text =
NET_NAME | PIN_NAME | REASSIGN,
//optional
replace_instance_name_characters = {{search_string = "string",
replace_string = "string"},
...}, //optional
generate_polygon_text = NONE | TOP | ALL, //optional
merged_view_list = {{view = "string",
cell = "string",
library = "string",
outdated_views = ABORT | USE | DISCARD},
...}, //optional
pr_boundary = {layer_name = "string",
purpose_name = "string"}, //optional
area_blockage = {layer_name = "string",
purpose_name = "string"}, //optional
area_halo = {layer_name = "string",
purpose_name = "string"}, //optional
area_boundary = {layer_name = "string",
purpose_name = "string"}, //optional
layer_blockage = "string", //optional
Returns
void
Arguments
view
Optional. Specifies the view to be read for the top cell of the design. The default is
"layout".
layer_mapping_file
Optional. Specifies the OpenAccess layer mapping file that specifies which layer/
purpose pairs are read from the OpenAccess database and the layer/datatype numbers
onto which the pairs are read. This file is required if you use the assign(),
assign_edge(), or assign_text() functions for OpenAccess data. If an object is
mapped in the layer mapping file as well as the object mapping file, the object mapping
file takes precedence.
In the OpenAccess layer mapping file,
❍ Each mapping relation must appear on a new line.
❍ Each attribute on a line must be separated with a space.
❍ Comments are specified with a pound sign (#). All text following the pound sign on the
current line is part of the comment.
❍ If there are duplicate rows, the IC Validator tool uses the last row in the file.
The OpenAccess layer mapping file contains data columns in a table-like structure,
where each row defines the relationship between the layer/purpose pairs and the
corresponding layer/datatype numbers.
Note:
If a row contains any of the three optional OpenAccess attributes, which come after
the four required attributes, the optional attributes are ignored by IC Validator.
The format of the OpenAccess layer mapping file for shapes which have a layer name
and purpose name is:
#layer_name layerPurpose layerNo layerDataType
layer1 layerPurpose1 layerNo1 layerDataType1
The format of the OpenAccess layer mapping file for objects, which do not have a
purpose name or layer name, except for layer blockages which do have layer names is:
#layerName layerPurpose layerNo. layerDataType
#Map for PR Boundary objects
pr_boundary boundary layerNo layerDataType
The pr_boundary, snap, PinBorder, boundary, and blockage strings are literal values.
You cannot have multiple mappings of the PR Boundary, Snap Boundary, or Area
Blockage objects.
For example, the first mapping means that nwell layer and drawing purpose are moved
to geometries and texts at layer1 and datatype0.
#layerName layerPurpose layerNo layerDataType
nwell drawing 1 0
diff drawing 2 0
pplus drawing 4 0
nplus drawing 5 0
pr_boundary boundary 6 0
snap boundary 7 0
PinBorder blockage 8 0
M1 blockage 9 0
M2 blockage 10 0
In addition to these basic mappings, the IC Validator tool supports some standard
extensions to the layer mapping file for layer mapping based on multiple patterning color
attributes. These extensions appear as extra columns after the layer and datatype
numbers, and they have one of two formats:
mask1Color|mask2Color|mask3Color [locked|unlocked]
color:<colorname> [locked|unlocked]
metal1 drawing 10 0
metal1 drawing 10 1 color:red
metal1 drawing 10 2 color:green locked
metal1 drawing 10 3 color:green unlocked
metal1 drawing 10 4 color:same
The IC Validator tool also supports a standard extension to the OpenAccess layer
mapping file, which can map cut layer rectangles of specified dimensions to certain layer
and datatype numbers. The cut size specification comes after the layer and datatype
numbers (and typically after the optional “material” specifier), and it has the following
format:
cutsize:<width>:<height>
where width and height are floating point numbers representing the dimensions of the
rectangle to be mapped in microns. For example:
via1 drawing 51 0 cut
via1 drawing 51 1 cut cutsize:0.05:0.05
via1 drawing 51 2 cut cutsize:0.10:0.20
This example maps via1 rectangles that are 0.05x0.05 microns to layer 51:1, via1
rectangles that are 0.10x0.20 microns to layer 51:2, and all other via1 rectangles to layer
51:0.
generate_pin_text
Optional. Specifies if pin text is generated. In some design styles, generating net names
from pin text can create false text-open error messages. To avoid these error messages,
set this argument to NONE or TOP. The default is ALL.
❍ NONE. Specifies that net names of pins in the hierarchy are not converted to text.
❍ TOP. Specifies that only net names of pins in the top-level cell are converted to text.
❍ ALL. Specifies that net names of all pins in the hierarchy are converted to text.
pin_text
Optional. Determines where to get generated text for pins in the OpenAccess database.
The default is NET_NAME.
❍ NET_NAME. Reads texts from the net names of the pins.
❍ REASSIGN. Reads texts from both the pin name and net name for pins. If the pin name
and net name are the same, the IC Validator tool uses the pin name. If the pin name
and net name are different, the IC Validator tool uses the net name and tags the text
as an assigned net for hierarchical net assignment.
Setting pin_text(REASSIGN) has the same functionality as manually entering cell
and net names in the reassign_text argument of the text_options() function.
Using pin_text(REASSIGN) provides automated assignments when you are using
an OpenAccess database.
replace_instance_name_characters
Optional. Lists the strings to be replaced in instance names. Neither string can use string
matching. By default, the IC Validator tool does not replace any characters.
❍ search_string. Required. Specifies the string to replace.
generate_polygon_text
Optional. Specifies if text points are generated from polygon net names. In some design
styles, generating text from polygon net names can create false text-open error
messages. To avoid these error messages, set this argument to NONE or TOP. The default
is NONE.
❍ NONE. Specifies that net names of polygons in the hierarchy are not converted to text.
❍ TOP. Specifies that only net names of polygons in the top-level cell are converted to
text.
❍ ALL. Specifies that net names of all polygons in the hierarchy are converted to text.
merged_view_list
Optional. Specifies a list used for the merging of views. These views of the top cell of the
design are read and merged into the top cell. By default, the IC Validator tool does not
merge any views.
❍ view. Required. Specifies the view to be merged.
❍ cell. Optional. Specifies the cell to be merged. The default is the top cell name of the
design.
❍ library. Optional. Specifies the library name for the view to be merged. The default
is the top library of the design.
❍ outdated_views. Optional. Specifies the behavior of the function if the timestamp of
the merged view is older than the timestamp of the top cell view. The default is
ABORT.
■ ABORT. If the merged view is older than the top cell view, the run stops.
■ USE. If the merged view is older than the top cell view, the newer view is read and
the run continues.
■ DISCARD. If the merged view is older than the top cell view, the merged view is not
read, and the run continues.
pr_boundary
Optional. Specifies the layer name and purpose name pair of an oaPRBoundary object.
To read an oaPRBoundary object, both the layer and purpose must be specified.
Polygons representing the oaPRBoundary are created on the specified layer and
purpose. These polygons can be used in an assign() or assign_openaccess()
function.
For example,
openaccess_options(pr_boundary = {"prBoundary","prBoundary"});
Using assign_openaccess():
prBoundary = assign_openaccess({{{"prBoundary"},{"prBoundary"}}});
area_blockage
Optional. Specifies the layer name and purpose name pair of an oaAreaBlockage object.
This object is a blockage not associated with a specific layer. To read oaAreaBlockage
objects, both the layer and purpose must be specified. Polygons representing the
oaAreaBlockage are created on the specified layer. These polygons can be used in an
assign() or assign_openaccess() function.
Note:
You can filter by blockage type in the assign() and assign_openaccess()
functions.
For example,
openaccess_options(area_blockage = {"area","blockage"});
Using assign_openaccess():
area_blockages = assign_openaccess({{{"area"},{"blockage"}}});
placement_blockages = assign_openaccess(
{{{"area"},{"blockage"}}},
blockage_types = {PLACEMENT_BLOCKAGE}
);
area_halo
Optional. Specifies the layer name and purpose name pair of an oaAreaHalo object. This
object is an oversized ring around an instance or PRBoundary. To read oaAreaHalo
objects, both the layer and purpose must be specified. The object around which the halo
is created must be rectilinear. The halo specifies offsets for top, left, right, and bottom.
Polygons representing the oaAreaHalo are created on the specified layer and purpose.
These polygons can be used in an assign() or assign_openaccess() function.
Note:
You can filter by blockage type in the assign() and assign_openaccess()
functions.
For example,
openaccess_options(area_halo = {"area","halo"});
Using assign_openaccess():
area_halo = assign_openaccess({{{"area"},{"halo"}}});
area_boundary
Optional. Specifies the layer name and purpose name pair of an oaAreaBoundary object.
To read an oaAreaBoundary object, both the layer and purpose must be specified.
Polygons representing the oaAreaBoundary are created on the specified layer and
purpose. These polygons can be used in an assign() or assign_openaccess()
function.
Note:
You can filter area boundaries by name in the assign() and assign_openaccess()
functions.
For example,
openaccess_options(area_boundary = {"area","boundary"});
Using assign_openaccess():
all_area_boundaries = assign_openaccess({{{"area"},{"boundary"}}});
layer_blockage
Optional. Specifies the purpose name of an oaLayerBlockage object, which is needed
because an oaLayerBlockage is associated with a given layer but not a specific purpose.
Polygons representing the oaLayerBlockage objects are created on their associated
layer and the purpose given here. These polygons can be used in an assign() or
assign_openaccess() function.
Note:
You can filter by blockage type in the assign() and assign_openaccess()
functions.
For example, to read metal1 fill blockages:
openaccess_options(layer_blockage = "blockage");
Using the assign() function with the OpenAccess layer mapping file having:
M1 drawing 17 0
M1 blockage 17 100
layer_halo
Optional. Specifies the purpose name of an oaLayerHalo object. This object is an
oversized ring around an instance or PRBoundary. The purpose name is needed
because an oaLayerHalo is associated with a given layer, but not a specific purpose.
Polygons representing the oaLayerHalo objects are created on their associated layer
and the purpose specified here. These polygons can be used in an assign() or
assign_openaccess() function.
Note:
You can filter by blockage type in the assign() and assign_openaccess()
functions.
For example,
openaccess_options(layer_halo = "halo");
Using the assign() function with the OpenAccess layer mapping file having:
m1 drawing 17 0
m1 halo 17 200
cell_mapping_file
Optional. Specifies the OpenAccess cell mapping file that allows you to specify the
unique name IC Validator tool uses for a given library/cell/view triplet. The IC Validator
tool creates a unique name for each library/cell/view triplet read from an OpenAccess
layout. If the IC Validator tool encounters a library/cell/view triplet in the OpenAccess
database that is not defined in the cell mapping file, it uses the default cell naming
scheme described in the openaccess_options() description.
In the OpenAccess cell mapping file:
❍ Each mapping relation must appear on a new line.
❍ Each attribute on a line must be separated with a space.
❍ Comments are specified with a pound sign (#). All text following the pound sign on the
current line is part of the comment.
❍ The IC Validator tool issues an error message if the same unique name is used more
than one time.
The OpenAccess cell mapping file contains data columns in a table-like structure. Each
row defines the relationship between a library/cell/view triplet and the unique cell name
used by the IC Validator tool for that triplet. The format of the OpenAccess cell mapping
file is:
# library cell view unique_name
For example,
# library cell view unique_name
mainlib inv layout inv
reflib1 inv layout inv_ref1
mainlib buf layout buf
The -oa_cell_map command-line option overrides this name. See the Command-Line
Options section in the “IC Validator Basics” chapter of the IC Validator User Guide for
more information.
generate_terminal_text
Optional. Specifies which terminal names are converted to text. In some design styles,
generating text from terminal names can create false text-open error messages. To avoid
these error messages, set this argument to NONE or TOP. The default is NONE.
❍ NONE. Does not convert terminal names of polygons in the hierarchy to text.
❍ TOP. Converts only terminal names of polygons in the top-level cell to text.
terminal_text
Optional. Selects the type of text used for instance terminals in the OpenAccess
database. To use the text, set the objects argument to TERMINAL_TEXT in the
OpenAccess assign function. The default is NET_NAME.
❍ NET_NAME. Reads texts from the net names of the pins.
triplet_naming
Optional. Specifies how the IC Validator tool determines a unique name for OpenAccess
cells. The default is LIBRARIES_AND_VIEWS.
❍ LIBRARIES_AND_VIEWS. Renames cells in libraries or views except those of the top
cell of the design with the full triplet, library.cell.view. Any remaining conflicts in cell
names are resolved by appending a suffix.
❍ CONFLICT. Uses the original cell name as the unique cell name in the IC Validator
tool. Conflicting cell names are renamed using the full triplet, library.cell.view. Any
remaining conflicts in cell names are resolved by appending a suffix.
instance_names
Optional. Specifies whether instance names from the input layout should be retained by
the IC Validator tool. The instance names can be used for netlisting or possibly reused
for the output layout. Retaining instance names could result in extra processing time
during the reading of the input layout. The default is KEEP.
❍ KEEP. Retains instance names from the input layout.
❍ DISCARD. Does not retain instance names from the input layout.
object_mapping_file
Optional. Specifies the OpenAccess object mapping file. If an object is mapped in the
layer mapping file as well as the object mapping file, the object mapping file takes
precedence.
The format of the OpenAccess object mapping file is:
#objectType subType layerNo layerDataType
#Map for PR Boundary objects
Boundary PR layerNo layerDataType
The Boundary, layerBlockage, and all subType strings are literal values.
You cannot have multiple mappings of the Boundary or Layer Blockage objects.
For example, the first mapping means that nwell layer and drawing purpose are moved
to geometries and texts at layer1 and datatype0.
#objectType subType layerNo layerDataType
nwell drawing 1 0
diff drawing 2 0
pplus drawing 4 0
nplus drawing 5 0
Boundary boundary 6 0
PR boundary 7 0
Snap blockage 8 0
Area blockage 9 0
wiring blockage 10 0
fill blockage 11 0
slot blockage 12 0
pin blockage 13 0
feedthru blockage 14 0
screen blockage 15 0
viarouting blockage 16 0
routing blockage 17 0
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
Here are examples of using the OpenAccess functions.
Using OpenAccess with native assigns:
#include <icv.rh>
library(
format=OPENACCESS,
library_definition_file="./lib.defs", // the lib.defs file contains
// the actual paths to all
// libraries in the database
library_name="MYLIB"
);
openaccess_options(
view="layout"
);
l1 = assign_openaccess({{{"metal1"},{"drawing"}}});
l2 = assign_openaccess({{{"poly"},{"drawing"}}});
all_metal1 = assign_openaccess({{{"metal1"}}});
metal1_rect = assign_openaccess({{{"metal1"}}},
objects={RECTANGLE});
library(
format=OPENACCESS,
library_definition_file="./lib.defs",
library_name="MYLIB"
);
openaccess_options(
view="layout",
layer_mapping_file="layer1.map"
);
l1 = assign({{==1},{==0}});
l2 = assign({{==2},{==0}});
all_metal1 = assign({{==1}});
metal1_rect = assign({{==1}},openaccess={objects={RECTANGLE}});
In the following example, different types of text are assigned to different layers: m1_pin_text
gets the pin names, m1_text gets the actual text objects, m1_net_text gets the polygon net
names, and m1_all_text gets all text points.
openaccess_options(
generate_pin_text = ALL,
pin_text = PIN_NAME,
generate_polygon_text = ALL
);
m1 = assign_openaccess({{{"metal1"},{"drawing"}}});
m1_pin_text = assign_openaccess_text({{{"metal1","drawing"}}},
objects={PIN_TEXT});
m1_text = assign_openaccess_text({{{"metal1","drawing"}}},
objects={TEXT,TEXT_DISPLAY});
m1_net_text = assign_openaccess_text({{{"metal1","drawing"}}},
objects={POLYGON_TEXT});
// Default is all text objects
m1_all_text = assign_openaccess_text({{{"metal1","drawing"}}});
See Also
assign()
assign_openaccess()
assign_openaccess_edge()
assign_openaccess_text()
gds_options()
milkyway_options()
oasis_options()
optional_pattern_markers()
The optional_pattern_markers() function returns the optional pattern markers for
matched patterns. The optional pattern markers are attached to patterns during pattern
library creation and might vary in size and location when retrieved, as compared with the
original pattern markers in the pattern library. This function is useful for post
pattern-matching processes, such as error filtering and passing the user-defined fixing
guidance to the router for the ADR flow.
Syntax
optional_pattern_markers(
pattern_library_name = "string",
pattern_marker = marker_layer,
pattern_library_handle = NULL_PATTERN_LIBRARY //optional
);
Returns
list of polygon layers
Arguments
pattern_library_name
Required. Specifies the pattern library used for performing pattern matching with the
pattern_match() function.
pattern_marker
Required. Specifies the marker layer, which is returned by the pattern_match()
function.
pattern_library_handle
Optional. Specifies the handle of the pattern library that is used for performing pattern
matching with the pattern_match() function. The handle must be previously defined by
the pattern_library() function.
Note:
The pattern_library_name argument has backward compatible support for
previous pattern matching runset. The pattern_library_handle argument is
selected if defined.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Example
In the following example, the optional_pattern_markers() function is applied to separate
level-one hotspots from level-two hotspots following pattern matching. See the
pattern_learn() function for how to use the optional_pattern_markers argument to
attach hotspot severity information during pattern library creation.
// define pattern library handle
TEST_CASE_Mx = pattern_library (
library_name = "TEST_CASE_Mx",
library_path = "./pattern_lib"
);
See Also
marker_merge()
pattern_learn()
pattern_library_lock()
pattern_library_read()
pattern_match()
pattern_options()
or()
The or() function creates a polygon that represents the union of the polygons on the two
input layers.
Note:
If you want to OR a list of layers, use the or_list() function.
Syntax
or(
layer1 = polygon_layer,
layer2 = polygon_layer,
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies a polygon layer.
layer2
Required. Specifies a polygon layer.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In Figure 3-61, layerA is merged with layerB.
Result = layerA or layerB;
layerA
layerB
Result
See Also
and()
and_edge()
and()
not()
not_edge()
or_edge()
or_list()
xor()
xor_edge()
or_edge()
The or_edge() function combines the edges of the two input layers. Redundant data points
are removed.
Syntax
or_edge(
layer1 = edge_layer,
layer2 = edge_layer,
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge layer.
layer2
Required. Specifies the edge layer.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 3-62 shows an example of the or_edge() function.
Figure 3-62 or_edge() Function Example
in_layer1
in_layer2
out_layer
Figure 3-62 shows how the edges are output from the or_edge() function.
out_layer = or_edge(in_layer1, in_layer2);
See Also
and()
and_edge()
not()
not_edge()
or()
or_edge()
or_error()
or_list()
xor()
xor_edge()
or_error()
The or_error() function combines the errors of the two input layers. Redundant data
points are removed.
Syntax
or_error(
layer1 = error_layer,
layer2 = error_layer,
name = "layer_label" //optional
);
Returns
error layer
Arguments
layer1
Required. Specifies an error layer.
layer2
Required. Specifies an error layer.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
and()
and_edge()
not()
not_edge()
or()
or_edge()
or_list()
xor()
xor_edge()
or_list()
The or_list() function creates a polygon that represents the union of the polygons on the
input layers.
Syntax
or_list(
layers = {polygon_layer, ...},
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layers
Required. Specifies a list of polygon layers.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
See the or() function for an example of an OR operation.
See Also
and()
and_edge()
and()
not()
not_edge()
or()
or_edge()
or_error()
or_list()
xor()
xor_edge()
Syntax
outside(
layer1 = polygon_layer,
layer2 = polygon_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_outside(
layer1 = polygon_layer,
layer2 = polygon_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer from which polygons are selected.
layer2
Required. Specifies the polygon layer against which the layer1 layer is checked.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In Figure 3-64, all polygons from layer2 that are outside layer1 are selected.
Result = layer1 outside layer2
layer2
Result
In Figure 3-65, all polygons from layer2 that are not outside layer1 are selected.
Result = layer1 not_outside layer2
layer1
layer2
Result
See Also
inside() and not_inside()
inside_touching_edge() and not_inside_touching_edge()
outside_touching() and not_outside_touching()
outside_touching_edge() and not_outside_touching_edge()
outside_point_touching_edge() and
not_outside_point_touching_edge()
The outside_point_touching_edge() function selects entire layer1 edges that have the
specified outside point touching with layer2 edges. The complement of this function is the
not_outside_touching_edge() function.
Syntax
outside_point_touching_edge(
layer1 = data_layer,
layer2 = data_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_outside_point_touching_edge(
layer1 = data_layer,
layer2 = data_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In Figure 3-67 the red edges are all outside point touch because they are outside polygon
near point touch. Note that for the rightmost red edge, the inside/outside line touch
elsewhere is irrelevant to the type of point touch.
See Also
inside() and not_inside()
inside_point_touching_edge() and not_inside_point_touching_edge()
outside() and not_outside()
outside_touching() and not_outside_touching()
outside_touching_edge() and not_outside_touching_edge()
point_touching_edge() and not_point_touching_edge()
touching() and not_touching()
touching_edge() and not_touching_edge()
Syntax
outside_touching(
layer1 = polygon_layer,
layer2 = polygon_layer,
count = integerconstraint, //optional
point_touch = true | false, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
count_parity = ALL | ODD | EVEN, //optional
count_by = SHAPE | NET, //optional
connect_sequence = connect_database, //optional
name = "layer_label" //optional
);
not_outside_touching(
layer1 = polygon_layer,
layer2 = polygon_layer,
count = integerconstraint, //optional
point_touch = true | false, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
count_parity = ALL | ODD | EVEN, //optional
count_by = SHAPE | NET, //optional
connect_sequence = connect_database, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer from which polygons are selected.
layer2
Required. Specifies the polygon layer against which the layer1 layer is checked.
count
Optional. Specifies the number of layer2 polygons that must touch layer1. See
“Constraints” on page A-4 for more information. The default is >0.
Figure 3-69 shows the effect of the count argument settings with the
outside_touching() function.
layer1
layer2
Result
count=1 count>=2
Figure 3-70 shows the effect of the count argument settings with the
not_outside_touching() function.
layer1
layer2
Result
count=1 count>=2
point_touch
Optional. Specifies whether point touch is considered a touch. The default is false.
Figure 3-71 shows the effect of the point_touch argument settings with the
outside_touching() function.
layer1
layer2
Result
point_touch = point_touch =
false true
Figure 3-72 shows the effect of the point_touch argument settings with the
not_outside_touching() function.
layer1
layer2
Result
point_touch = point_touch =
false true
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
count_parity
Optional. Specifies the parity of the number of layer2 polygons that must touch layer1
polygons. The default is ALL.
❍ EVEN. Specifies that the layer1 polygons must have an even number of interactions
with layer2 data.
❍ ODD. Specifies that the layer1 polygons must have an odd number of interactions
with layer2 data.
❍ ALL. Does not check the parity based on the number of interactions.
The count argument can be used with the count_parity argument. For example, when
count = [4, 9] and count_parity is EVEN, the layer1 polygons that interact with four,
six, or eight layer2 polygons are selected.
count_by
Optional. Provides selection by net feature. The default is SHAPE.
❍ NET. Selects a layer1 polygon if it touches with distinct nets on the layer2 layer the
number of times specified by the count argument.
❍ SHAPE. Selects a layer1 polygon if it touches the layer2 layer the number of times
specified by the count argument.
Refer to Figure 3-73 for the following examples.
L1
L2
❍ Nets 1, 2, and 3 are not counted because only outside touching polygons are
considered. Net 4 is counted two times. Therefore, polygon B meets the count=2
restriction.
outside_touching (L1, L2, count==2);
connect_sequence
Optional. Specifies the connect database that has the layer2 connection. The database
is used when the count_by argument is NET.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In the following example,
• In Output 1, all data from layerB that touches layerA is selected.
Result = layerB outside_touching layerA;
• In Output 2, all data from layerB that touches only one polygon of layerA is selected.
Result = layerB outside_touching layerA(count = 1);
Input layerA
layerB
Result
Output 1 Output 2
See Also
inside() and not_inside()
inside_touching_edge() and not_inside_touching_edge()
outside() and not_outside()
outside_touching_edge() and not_outside_touching_edge()
touching() and not_touching()
touching_edge() and not_touching_edge()
Syntax
outside_touching_edge(
layer1 = data_layer,
layer2 = data_layer,
count = integerconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
coincidence = EDGE | ENDPOINT | ALL //optional
);
not_outside_touching_edge(
layer1 = data_layer,
layer2 = data_layer,
count = integerconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
coincidence = EDGE | ENDPOINT | ALL //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
count
Optional: Specifies the number of touches that must occur for an edge to be selected. If
layer2 is a polygon layer, polygons are counted. If layer2 is an edge layer, individual
edges are counted. See “Constraints” on page A-4 for more information. The default
is >0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
coincidence
Optional. Specifies the types of coincidence that cause a selection. The default is EDGE.
❍ EDGE. Only edge coincidence causes an edge to be selected.
❍ ENDPOINT. Only those edges that have no edge coincidence, but have collinear,
endpoint, coincidence are selected.
❍ ALL. All types of coincidence cause an edge to be selected.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In Figure 3-74, both layers are polygon layers: magenta is layer1; red is layer2. The
results are the same if either layer is an edge layer.
green = magenta outside_touching_edge red;
See Also
inside() and not_inside()
inside_touching_edge() and not_inside_touching_edge()
outside() and not_outside()
outside_touching() and not_outside_touching()
touching() and not_touching()
touching_edge() and not_touching_edge()
partition()
The partition() function breaks complex shapes into regular rectangles. The IC Validator
tool finds the maximum number of largest rectangles in the region being partitioned. The
output partitions interact by no more than a point touch.
Syntax
partition(
layer1 = polygon_layer,
min_space = double, //optional
min_width = double, //optional
output_type = {HORIZONTAL, VERTICAL, SQUARE}, //optional
name = "layer_label", //optional
orientation = NONE | HORIZONTAL | VERTICAL, //optional
min_space_x = double, //optional
min_space_y = double, //optional
min_height = double //optional
);
Returns
polygon layer
Arguments
layer1
Required. Specifies the polygon layer that is partitioned.
min_space
Optional. Specifies the minimum spacing between partitions. The value must be greater
than 0.0. If the min_space_x and min_space_y arguments are specified, the min_space
argument is ignored. If the orientation argument specifies a horizontal or vertical
orientation, the min_space value applies only the direction that is perpendicular to the
orientation.
min_width
Optional. Specifies the minimum length of a partition side. Each side of a rectangular
partition must have a length of at least the minimum width value. The default is 0.0.
When you specify a min_width value greater than 0.0, the IC Validator tool partitions the
input layer based on the shapes specified by the output_type argument. If you do not
specify a min_width value, the tool partitions the layer based on the direction specified
by the orientation argument and ignores the output_type argument.
output_type
Optional. Specifies the shapes of partitions selected for output. The default is
{HORIZONTAL, VERTICAL, SQUARE}, which means that all rectangles are selected
irrespective of their aspect ratio. At least one option must be selected; that is, an empty
list is not allowed.
❍ HORIZONTAL. Selects partitions with a dimension in the x-direction that is greater than
the dimension in the y-direction.
❍ VERTICAL. Selects partitions with a dimension in the y-direction that is greater than
the dimension in the x-direction.
❍ SQUARE. Selects partitions with a dimension in the x-direction that equals the
dimension in the y-direction.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
orientation
Optional. Controls the direction in which the IC Validator tool partitions the input layer.
The default is NONE.
When you specify a horizontal or vertical orientation, the min_space value applies only
to the direction that is perpendicular to the orientation.
❍ NONE. Partitions the layer based on the shapes specified by the output_type
argument.
❍ HORIZONTAL. Partitions the layer in the x-direction along the horizontal edges.
❍ VERTICAL. Partitions the layer in the y-direction along the vertical edges.
min_space_x
Optional. Specifies the minimum spacing between partitions in the x-direction. The value
must be greater than 0.0. If the min_space_x and min_space_y arguments are
specified, the min_space argument is ignored.
min_space_y
Optional. Specifies the minimum spacing between partitions in the y-direction. The value
must be greater than 0.0. If the min_space_x and min_space_y arguments are
specified, the min_space argument is ignored.
min_height
Optional. Specifies the minimum height of each partition. The value must be greater than
0.0 and can be used only when the min_width argument is specified.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In the following example, all polygons on the input layer, in_layer, are broken into regular
rectangles. The partitions are spaced apart by 0.01 m. The smallest allowed partition is a
square with a side of 0.05 m.
rect_layer = partition(in_layer, min_space = 0.01, min_width = 0.05);
0.01 m
rect_layer
in_layer
In the following example, all the square partitions in addition to rectangles that have a
dimension in the x-direction greater than the dimension in the y-direction are selected.
rect_layer = partition(in_layer, min_space = 0.01, min_width = 0.05,
output_type = {HORIZONTAL, SQUARE});
See Also
aspect_ratio() and not_aspect_ratio()
rectangles() and not_rectangles()
partition_chip()
The partition_chip() function breaks the extents of the top-level cell into a specified
number of horizontal or vertical partitions with equal areas of the input polygon layer.
Syntax
partition_chip(
layer = polygon_layer,
max_partitions = integer,
overlap = double,
min_partition_size = double,
orientation = HORIZONTAL | VERTICAL,
exclude_layers = {polygon_layer, ...} //optional
);
Returns
list of polygon layers
Arguments
layer
Required. Specifies the polygon layer used to calculate the area considered for
partitioning.
max_partitions
Required. Specifies the number of partitions. This value must be greater than 1.
overlap
Required. Specifies the size of the overlap between adjacent partitions. This value
should always be greater than 0 (zero).
min_partition_size
Required. Specifies the minimum size of the partition (the partition height if orientation
= HORIZONTAL or the partition width if orientation = VERTICAL).
orientation
Required. Specifies the direction of the partition. The default is HORIZONTAL.
exclude_layers
Optional. Specifies a list of polygon layers to exclude from the layer argument.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
The following example shows horizontal partitioning to four partitions from the bottom up.
The return list consists of four layers, with one layer per partition.
If the resulting layer is empty after removing all of the exclude_layers from layer, the
partition_chip() function returns an empty list.
The partition_chip() function can return fewer layers in the output list than the number
specified in max_partitions argument.
For example, if the size of the remaining fillable region (green rectangle) after removing the
exclude layers (white rectangles) is H < (count * min_slice_size), the number of layers
that the function returns depends on the values of H and the min_partition_size
argument.
pattern_learn()
The pattern_learn() function creates a new pattern library or updates an existing pattern
library with source patterns. It can be called multiple times within a runset.
For pattern library generation, two types of results are reported to the
cell.LAYOUT_ERRORS file: patterns that fail to be registered to the pattern library due to
invalid input and patterns that are successfully registered to the pattern library. For more
information about types of invalid input, see the descriptions of the pattern_layers,
pattern_marker, edge_tolerance_layers, pattern_type, and pattern_extent
arguments.
Syntax
pattern_learn(
pattern_library_handle =
pattern_library_handle,
pattern_layers =
{polygon_layer, ...},
pattern_marker =
polygon_layer,
pattern_text_id =
text_layer, //optional
pattern_extent =
polygon_layer, //optional
ignore_region_layers =
{polygon_layer, ...}, //optional
edge_tolerance_layers =
{polygon_layer, ...}, //optional
match_ambit =
{left=double, bottom=double,
right=double, top=double}, //optional
ambit_mode = PM_MARKER_CENTER | PM_MARKER_EDGE,
//optional
pattern_fuzziness = PM_EXACT | PM_EDGE_UNIFORM |
PM_EDGE_NONUNIFORM, //optional
uniform_fuzzy_size = double, //optional
edge_jog_size = double, //optional
pattern_reflect = true | false, //optional
pattern_rotate = true | false //optional
ignore_extra_polygons = true | false, //optional
output_pattern_xml = true | false, //optional
pattern_prefix = "string", //optional
anchor = FIRST_PATTERN_LAYER | AUTO, //optional
optional_pattern_markers = {polygon_layer, ...}, //optional
pattern_text_properties = {{property_name = "string",
property_text_layer = text_layer,
property_type = STRING | DOUBLE},
...}, //optional
pattern_type = PM_TWO_DIMENSIONAL | PM_ONE_DIMENSIONAL,
//optional
optional_region_layers = {polygon_layer, ...}, //optional
pattern_naming_mode = PM_NAME_SEQUENTIAL | PM_NAME_UNIQUE,
//optional
pattern_anchor_optimization = PM_ALL | PM_SIZE | PM_ANGLE |
PM_ENCLOSE | PM_CENTER, //optional
optional_pattern_marker_type = FIXED | DYNAMIC //optional
pattern_run_length = ALL | RUN_LENGTH_GE //optional
);
Returns
marker layer or error result
The marker layer is an unmerged layer under the geometry layer. The marker layer can be
converted to a polygon layer using the marker_merge() function.
Arguments
pattern_library_handle
Required. Specifies the handle of a pattern library to be created or updated. The handle
must be previously defined by the pattern_library() function.
The pattern_learn() function writes pattern information to a binary file named
pattern.dat. It also records pattern library creation parameters and pattern statistics to a
text file named log. Both files are saved to the directory defined by the
pattern_library_handle argument.
Note:
When you add new patterns to an existing pattern library, the new pattern library must
have the same set of arguments and values as the existing pattern library. Otherwise,
a runtime error occurs.
The pattern_library_handle argument replaces the previous
pattern_library_name argument for better usability, but it breaks the backward
compatibility of the previous runset, which is defined using the
pattern_library_name argument.
pattern_layers
Required. Lists the input layers. A multiple-layer source pattern, such as a pattern
consisting of a metal layer and a via layer, is supported. A maximum of 32 layers can be
specified.
Limitation:
Do not use different layer names for the same pattern layer in the pattern layer list.
This can cause the IC Validator run to stop.
pattern_marker
Required. Specifies the layer that contains polygons placed on each source pattern. The
pattern marker specifies the location of interest, such as the pinch and bridge locations
of a lithographic hotspot or a DRC violation location. This marker is output to report the
match between the pattern in the pattern library and the input design captured by the
pattern_match() function.
pattern_text_id
Optional. Specifies the text layer that contains the text ID of the source patterns. To be
recognized, the coordinates of the text ID must be located inside the pattern marker. If
the text ID is not defined, or defined but resides outside of the pattern marker, a
tool-generated text ID is attached to each pattern registered to the pattern library. The
pattern_match() function reports the pattern ID to the error database and
cell.LAYOUT_ERRORS file.
If the same text ID is used for different source patterns, the text ID of the corresponding
registered patterns in the pattern library is suffixed by a sequence number to resolve the
name conflict. For example, if hs_1 is used for three different source patterns, the three
patterns are named hs_1, hs_1_1, and hs_1_2.
If a different text ID is used for the same source pattern, only one text ID is kept for the
registered pattern in the pattern library.
pattern_extent
Optional. Specifies the layer that contains polygons that define the bounding region of a
source pattern. The pattern layers inside the bounding region are processed and
registered to the pattern library. When the pattern_extent argument is set, the
match_ambit argument is ignored. Pattern extent can also be defined using the
match_ambit and ambit_mode arguments.
The following situations can cause the corresponding source pattern to not be added to
the pattern library and be reported in the cell.LAYOUT_ERRORS file as invalid input.
❍ Nonrectangular pattern extent.
❍ Unpaired pattern marker and pattern extent, such as a pattern extent interacting with
no pattern marker or more than one pattern marker.
Figure 3-76 illustrates the use of the pattern_extent argument to define a pattern
during pattern library creation.
Note:
The pattern extent must not exceed 50 m on every side or the IC Validator tool
reports an invalid input to the cell.LAYOUT_ERRORS file.
---------------------------------------
Violation/Invalid input: pattern extent > 50 m is not supported
pattern_learn ...................................... 1 violation
found.
---------------------------------------
ignore_region_layers
Optional. Lists the input polygon layers that define areas on a source pattern excluded
from the pattern_match() function matching process.
This argument applies only when the pattern_extent argument is specified.
The restrictions for using the argument are:
❍ You must specify the ignore region layer list in the same order as the pattern layer list.
❍ The ignore region layer list must be either empty or contain the same number of
layers as the pattern layer list.
Additional restrictions for using the argument for one-dimensional pattern types are:
❍ The ignore region layer must have the same direction as the pattern layer.
❍ The ignore regions must be rectilinear polygons.
❍ There must be two or more true pattern layer edges inside of the pattern extent that
are not covered by the ignore region and are not on the pattern boundary.
❍ The number of the pattern layer must be one.
Figure 3-77 shows edges, including partial edges that interact with the ignore regions,
that are excluded from pattern registration during pattern library creation. Therefore, any
edge specification attached to those edges or partial edges, such as the edge tolerance,
are not registered with the pattern in the pattern library.
Figure 3-77 Defining Ignore Regions on a Source Pattern
Avoid overlapping valid edge tolerance with the ignore region area. As shown in
Figure 3-78, the edge tolerance of the right vertical edge of the source pattern is lost after
pattern registration. This edge tolerance loss can cause missing patterns during pattern
matching.
Figure 3-78 Defining Ignore Regions on a Source Pattern With Edge Tolerance.
edge_tolerance_layers
Optional. Lists the input layers that contain polygons which define the edge placement
variation of each pattern edge. This argument applies only when the
pattern_fuzziness argument is PM_EDGE_NONUNIFORM. Any pattern on a design with
all edges falling inside of the edge tolerance layers is reported as a match by the
pattern_match() function.
This argument supports both one-dimensional and two-dimensional pattern types.
The restrictions for using the argument are:
❍ You must specify the edge tolerance layer list in the same order as in the pattern layer
list.
❍ The edge tolerance layer list must be either empty or contain the same number of
layers as that of the pattern layer list.
❍ The following incorrect edge tolerance definitions are reported as invalid input and
can cause the corresponding source pattern to not be registered to the pattern library.
■ Any edge of a pattern layer interacting with any nonrectangular polygon on the
corresponding edge tolerance layer.
■ Any edge of a pattern layer interacting with more than one polygon on the
corresponding edge tolerance layer.
■ More than one edge of a pattern layer interacting with the same polygon on the
corresponding edge tolerance layer.
■ For a one-dimensional pattern type, the edge tolerance layer must be
one-dimensional and on the same direction as the pattern layer.
Figure 3-79 illustrates the use of the edge_tolerance_layers argument to define a
pattern during pattern library creation.
Figure 3-79 Defining a Pattern With the edge_tolerance_layers Argument
match_ambit
Optional. Specifies the extensions for generating the pattern extent based on the pattern
marker in the direction order of left, bottom, right, and top. The default is 0. Set
match_ambit to >0 when the ambit_mode argument is PM_MARKER_CENTER. See
Figure 3-80 for an example of how to use the match_ambit argument with the
ambit_mode argument to define a pattern extent during pattern library creation. The
pattern extent can also be specified using the pattern_extent argument.
This argument supports only the two-dimensional pattern type.
Note:
The x-direction extensions can be different from the y-direction extensions, but
extensions in the same direction must be the same.
ambit_mode
Optional. Specifies the starting point for the ambit extension specified in the
match_ambit argument. The default is PM_MARKER_CENTER.
❍ PM_MARKER_EDGE. Starts from each of the four edges of the pattern marker.
pattern_fuzziness
Optional. Specifies the pattern matching mode of the pattern library. The
pattern_match() function performs the pattern matching. The default is PM_EXACT.
❍ PM_EXACT. Reports as a match when all pattern edges of an input pattern fall exactly
on the edges of a library pattern.
This matching mode supports both one-dimensional and two-dimensional pattern
types.
❍ PM_EDGE_UNIFORM. Reports as a match when all pattern edges of an input pattern fall
within the uniform edge placement variation, as defined by the uniform_fuzzy_size
argument, of a library pattern.
This matching mode supports only the two-dimensional pattern type.
❍ PM_EDGE_NONUNIFORM. Reports as a match when all pattern edges of an input pattern
fall within the edge placement variations, as defined by the edge_tolerance_layers
argument, of a library pattern.
■ Flexible pattern extent with the edge-to-edge constraint being defined in the
generated pattern.xml file, as shown in Figure 3-82.
The restrictions for using the application are:
- The edge_tolerance_layers argument must be set to empty layers. This
enables the IC Validator tool to set the output_pattern_xml argument to
TRUE.
</Pattern>
<Pattern key="0003AM000NwQ0M3rh00gwwAz" text_id="pattern_6">
<Edge2Edge>{e6-e8=[60,80]}</Edge2Edge>
</Pattern>
uniform_fuzzy_size
Optional. Specifies the uniform placement variation for edges of all pattern layers. The
variation is applied on both sides of each edge. This argument is applied only when the
pattern_fuzziness argument is PM_EDGE_UNIFORM. The default is 0.
This argument supports only the two-dimensional pattern type.
edge_jog_size
Optional. Specifies the minimum jog size. This jog size is used only when the
pattern_fuzziness argument is PM_EDGE_NONUNIFORM. A jog smaller than the edge
jog size is smoothed before pattern matching occurs. The two adjacent edges of the jog
are aligned to the longer one. The default is 0.
pattern_reflect
Optional. Specifies whether to match reflected patterns during pattern matching. The
default is true, which allows the following reflections:
❍ Zero orientation (R0)
❍ Flipped in x-direction (FX)
Note:
In the IC Validator tool,
■ The pattern orientation is reported in the LAYOUT_ERRORS file.
■ The zero orientation (R0) might not be the original orientation of the input source
patterns.
■ The original orientation of an input source pattern is kept as zero orientation only
when the pattern_reflect argument is false and the pattern_rotate
argument is false.
■ To match an orientation that is not supported by the pattern_learn() function,
generate a pattern library with this specific orientation and set both the
pattern_reflect and pattern_rotate arguments to false.
pattern_rotate
Optional. Specifies whether to match rotated patterns during pattern matching. The
default is true, which allows the following rotations:
❍ Zero orientation (R0)
❍ Flipped in x-direction (FX)
❍ Flipped in y-direction (FY)
❍ Rotated 180 degrees (R180)
❍ Rotated 90 degrees (R90)
❍ Rotated 270 degrees (R270)
❍ Rotated 90 degrees and flipped in y-direction (R90FY)
❍ Rotated 90 degrees and flipped in x-direction (R90FX)
These rotations are shown in Figure 3-84.
ignore_extra_polygons
Optional. Excludes polygons that do not exist in the pattern library from matching with the
pattern_match() function when set to true. The default is false.
Note:
The ignore_region_layers and the ignore_extra_polygons arguments are
mutually exclusive.
Figure 3-85 shows that a matched pattern when the ignore_extra_polygons argument
is true.
output_pattern_xml
Optional. Specifies whether to generate the pattern.xml file when the
pattern_fuzziness argument is PM_EDGE_NONUNIFORM. The default is false.
The pattern.xml file contains the edge placement variations, which are defined by the
edge_tolerance_layers argument, in XML format. In the generated pattern.xml file,
you can
❍ Add a new or modify the existing edge tolerance using the <EdgeTolerance>
element.
❍ Add definitions for edge-to-edge dimensional constraints as an additional fuzziness
specification for the existing pattern library using the <Edge2Edge> element.
❍ Specify the edge pair between the optional pattern marker edge and pattern layer
edge for enabling the optional pattern marker as a dynamic type for a
one-dimensional pattern library using the <OpmEdgePair> element.
The pattern.xml file is part of the pattern library. Changes made to the file are retained
when changes are valid and you do not change the file name.
See the Examples section for more information about the format and use of the
pattern.xml file.
Note:
The pattern.xml file is not generated when the pattern_fuzziness argument is
PM_EDGE_NONUNIFORM for a fixed pattern extent application for a one-dimensional
pattern type.
Note:
The pattern.xml file is automatically generated when the pattern_fuzziness
argument is PM_EDGE_NONUNIFORM for the flexible pattern extent application for a
one-dimensional pattern type.
pattern_prefix
Optional. Specifies the prefix of the tool-generated pattern text ID when the
pattern_text_id argument is not user-defined. If the pattern_prefix argument is not
user-defined, the tool-generated pattern text ID is named with the default followed by a
sequence number, that is, pattern_1, pattern_2, and so on.
Note:
The “#” is not allowed to be used in defining the pattern prefix when the
pattern_naming_mode argument is set to PM_NAME_UNIQUE option.
anchor
Optional. Specifies how IC Validator tool selects the anchor layer when there are multiple
pattern layers for a two-dimensional pattern type. The IC Validator tool requires that the
anchor layer have at least one corner inside the pattern extent on every source pattern.
The failed source patterns are reported in the cell.LAYOUT_ERRORS file. The default is
FIRST_PATTERN_LAYER.
❍ FIRST_PATTERN_LAYER. Selects the anchor layer to be the first pattern layer specified
by the pattern_layers argument.
❍ AUTO. Automatically identifies the anchor layer among the pattern layers by starting
from the first pattern layer until it finds a layer that meets the requirement.
optional_pattern_markers
Optional. Lists the input layers that contain the polygons placed on the source patterns.
Unlike the required pattern marker, these pattern markers are optional. They are used to
define other information that a source pattern might carry, such as hotspot severity,
hotspot type, pattern extent, and user-defined fixing guidance that can be passed to the
router for fixing hotspots. These markers can be retrieved using the
optional_pattern_markers() function after the pattern_match() function in the
runset.
Optional pattern markers can be fixed or dynamic. See the
optional_pattern_marker_type argument for more information.
level_one_hotspot = layer_one;
level_two_hotspot = layer_two;
hotspot_location = level_one_hotspot or level_two_hotspot;
pattern_learn (
pattern_library_handle = TEST_CASE_Mx,
pattern_layers = {metal},
pattern_marker = hotspot_location,
optional_pattern_markers = {level_one_hotspot, level_two_hotspot},
...
);
See the optional_pattern_markers() function for information about how to return the
hotspot severity information after pattern matching with the pattern_match() function.
pattern_text_properties
Optional. Lists the pattern properties that are attached to source pattern. A pattern
property is specified through a name, a text layer, and the type of the text layer. The text
must be placed inside the pattern marker in order for it to be recognized and attached to
the pattern library. Up to 31 properties can be specified.
❍ property_name. Specifies the property name. The name must be fewer than 64
characters. It cannot contain the characters: space, = (equal sign), and ; (semicolon).
If you specify a property name more than one time, the IC Validator tool uses one of
the specified values.
❍ property_text_layer. Specifies the text layer that contains the value of the
property. The length of the property string must be fewer than 1024 characters. See
“Text Strings” on page A-10 for information about text string rules.
❍ property_type. Specifies the data type of the property. The default is STRING.
Note:
The property_type and property_text_layer options must agree in data type.
If not, IC Validator reports an invalid input in the cell.LAYOUT_ERRORS file.
See the Examples section for an example of defining pattern properties.
pattern_type
Optional. Specifies the dimensional type of the source pattern. Types are mutually
exclusive. The default is PM_TWO_DIMENSIONAL.
❍ PM_TWO_DIMENSIONAL. Specifies the two-dimensional pattern type.
The following restriction is applied to the two-dimensional pattern type:
■ At least one vertex of the first pattern layer of a source pattern must be within the
pattern extent if the anchor argument is the default.
❍ PM_ONE_DIMENSIONAL. Specifies the one-dimensional pattern type.
The following restrictions are applied to the one-dimensional pattern type:
■ All lines must be in the same direction, either horizontal or vertical.
■ The pattern extent must be specified with the pattern_extent argument.
■ The ignore_extra_polygons argument must be false.
■ The first pattern layer cannot be empty.
■ The jog size, which is set with the edge_jog_size argument, must be 0 (zero).
When converting a one-dimensional pattern library into a graphic format using the
pattern_library_read() function or the pdb_utility.pl script, patterns are output in
the following format:
■ Run length is used as the pattern extent.
■ The pattern marker has the same extent as the pattern extent.
■ Optional pattern markers reside the pattern extent.
Figure 3-86 shows an example of these normalizations.
optional_region_layers
Optional. Specifies a list of polygon layers that define areas on the source pattern that
are optional in the pattern_match() function matching process. Pattern layer polygons
enclosed by an optional region layer are considered to be in the same optional group. A
pattern layer polygon can belong to more than one optional group. The matched pattern
reported by the pattern_match() function can have none, one, or more pattern layer
polygons that are from the same optional group. See Figure 3-87 and Figure 3-88 for an
example.
Figure 3-87 Source Pattern for optional_region_layers Argument Example
pattern_naming_mode
Optional. Specifies how to name the patterns. Pattern names are reported in
LAYOUT_ERRORS file and saved in the pattern library. The default is
PM_NAME_SEQUENTIAL.
❍ PM_NAME_UNIQUE. Specifies that a pattern is named with a unique text string. The
name is defined by the following format:
{pattern_prefix}#string
Note:
The PM_NAME_UNIQUE option supports only the exact matching mode using the
tool-generated pattern extent for the two-dimensional pattern type for pattern
library comparison or merging. See the pattern_library_merge() and
pattern_library_compare() functions for more information.
pattern_anchor_optimization
Optional. Specifies the anchor optimization method that is applied during pattern
matching using the pattern_matching() function to filter out irrelevant anchors for
two-dimensional pattern types. The default is PM_ALL.
❍ PM_ALL. Requires that all corners are used as anchors.
Note:
Anchor optimization is performed automatically during pattern matching for
pattern libraries where
- pattern_anchor_optimization = PM_ALL
- pattern_fuzziness = PM_EDGE_NONUNIFORM
❍ PM_SIZE. Requires that all source patterns must have at least one complete rectangle
shape in the first pattern layer. The rectangle shape size is calculated during pattern
library creation. During pattern matching, only the corners of the rectangles within the
shape size are used as anchors. Other corners are filtered out. See Figure 3-89 for
an example of the PM_SIZE argument.
❍ PM_ANGLE. Requires that all source patterns must have concave corner in the first
pattern layer. During pattern matching. only concave corners are used as anchors.
Other corners are filtered out. See Figure 3-90 for an example of the PM_ANGLE
argument.
❍ PM_ENCLOSE. Requires that all source patterns have the first pattern layer as a via
layer and the other pattern layers as metal layers. The via edge is enclosed by a
metal line end that must be completely inside the pattern extent. The enclosing range
is calculated during pattern library creation. During pattern matching, only the corners
of the via edge, which is enclosed by a metal line end within the enclosing range, is
used as an anchor. Other corners are filtered out. See Figure 3-91 for an example of
the PM_ENCLOSE argument.
❍ PM_CENTER. Requires that all source patterns must have at least one complete
rectangle shape in the first pattern layer. During pattern matching, only the center of
the rectangle shape within the shape-size range is used as an anchor. Corners are
filtered out. See Figure 3-92 for an example of PM_CENTER argument.
Figure 3-89 Anchor Optimization With PM_SIZE
optional_pattern_marker_type
Optional. Specifies the type of optional pattern marker layers. The default is FIXED.
❍ FIXED. Specifies that the output of optional pattern markers of a matched pattern is
fixed in size and location as they are defined in the pattern library.
❍ DYNAMIC. Specifies that the output of optional pattern markers of a matched pattern
can vary in size and location compared with the optional pattern markers defined in
the pattern library.
To enable DYNAMIC, the optional pattern marker must establish a certain correlation rule
with one or more pattern polygons. This correlation rule is different for one-dimensional
and two-dimensional pattern types.
The following correlation rules apply to the two-dimensional pattern type:
❍ Optional pattern markers that do not share any corner with a pattern polygon are
treated as fixed types even if the optional_pattern_marker_type is DYNAMIC. See
Figure 3-93 for output examples of fixed optional pattern markers.
❍ Optional pattern markers that share corners with one or more pattern polygons are
enabled to be dynamic when the optional_pattern_marker_type is DYNAMIC. The
shared corner of an optional pattern marker moves accordingly with its associated
pattern corner when an optional pattern marker is retrieved with the
optional_pattern_marker() function following pattern matching. See Figure 3-94
for output examples of dynamic optional pattern markers.
Figure 3-93 Fixed Optional Pattern Markers
pattern_run_length
Optional. Specifies whether to check the run length for one-dimensional patterns during
pattern matching. The default is ALL.
❍ All. Specifies that run length is not checked. The pattern_match() function outputs
a matched pattern regardless of its run length.
❍ RUN_LENGHT_GE. Specifies run length is checked. The pattern_match() function
outputs only a matched pattern that has a run length greater than or equal to the run
length of its referenced pattern captured during pattern library creation.
See Figure 3-96 for an example of the pattern_run_length argument.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Examples
library (
format = GDSII,
library_name = "TEST_CASE.gds",
cell = "all_patterns"
);
//declare layers
metal : polygon_layer = assign ( {{1,0}} );
pattern_marker : polygon_layer = assign ( {{5,0}} );
pattern_text_id : text_layer = assign_text( {{6,0}} );
pattern_learn (
pattern_library_handle = TEST_CASE_Mx,
pattern_layers = {metal},
pattern_marker = pattern_marker,
pattern_text_id = pattern_text_id,
match_ambit = {0.2, 0.2, 0.2, 0.2},
ambit_mode = PM_MARKER_CENTER,
pattern_fuzziness = PM_EDGE_UNIFORM,
uniform_fuzzy_size = 0.005,
edge_jog_size = 0.010,
pattern_reflect = true,
pattern_rotate = true
);
After pattern library generation is completed, the TEST_CASE_Mx pattern library directory
is written to the path defined by the PM_LIB_PATH environment variable. The
corresponding pattern library log file indicates that 12 unique patterns are added into this
pattern library:
Registered 12 new unique pattern(s); total # of unique pattern(s)=12.
Created reflected/rotated pattern(s); total # of pattern(s)=96.
---------------------------------------------------------------------------
total # of patterns learned
---------------------------------------------------------------------------
/runset/sample_match.rs:77:pattern_match
--------------------------------------------------------------------
Structure ( lower left x, y ) ( upper right x, y ) Pattern Orientation
--------------------------------------------------------------------
all_patterns (2.1510, 0.2150) (2.1680, 0.2650) hs_12 R0
all_patterns (1.1750, 2.1430) (1.2250, 2.1770) hs_8 R0
all_patterns (1.1920, 0.2150) (1.2070, 0.2650) hs_11 R0
all_patterns (0.2150, 2.1510) (0.2650, 2.1680) hs_7 R0
all_patterns (0.2320, 0.2150) (0.2480, 0.2650) hs_10 R0
all_patterns (2.1510, 3.0950) (2.1680, 3.1450) hs_6 R0
all_patterns (2.1350, 1.1920) (2.1850, 1.2090) hs_4 R0
all_patterns (1.1910, 3.0950) (1.2080, 3.1450) hs_5 R0
all_patterns (1.1830, 1.1750) (1.2160, 1.2250) hs_3 R0
all_patterns (0.2150, 3.1030) (0.2650, 3.1360) hs_1 R0
all_patterns (0.2150, 1.1920) (0.2650, 1.2080) hs_9 R0
all_patterns (2.1430, 2.1350) (2.1770, 2.1850) hs_2 R0
If no user violation comment is specified in the runset, the default violation comment,
violation, is specified in the cell.LAYOUT_ERRORS file.
pattern_learn (
pattern_library_handle = TEST_CASE_Mx,
pattern_layers = {metal},
pattern_marker = pattern_marker,
pattern_text_properties = {
{"pattern_type", pattern_type_layer,STRING},
{"min_cd", pattern_cd_layer,DOUBLE}
},
...
);
To view the properties that were saved for the pattern in the pattern library, use the
pattern_library_read() function.
Example of Using the pattern.xml File to Define Edge Tolerance and Edge-to-Edge
Constraints
A pattern.xml file contains the edge tolerance and edge-to edge constraint in the following
format:
<?xml version="1.0"?>
<PatternMatch unit="nm" DBU="0.5 nm">
<Pattern key="000PPo001y7b000PPo001y7b" text_id="pat_1">
<EdgeTolerance>{}</EdgeTolerance>
</Pattern>
<Pattern key="0003XL000EYQ0003XL000EYQ" text_id="pat_2">
<EdgeTolerance>{e8=[-1,5],e11=[-5,5],e4=[0,10],e12=[-8,0]}</
EdgeTolerance>
<Edge2Edge>{e8-e10=[150,150],e11-e15=[150,200],e10-e12=(140,-),
e4-e6=(-,200]}</Edge2Edge>
</Pattern>
</PatternMatch>
where:
<left_delimiter>. [ denotes inclusion or ( denotes exclusion.
<right_delimiter>. ] denotes inclusion or ) denotes exclusion.
<inside_tolerance>. Nonpositive double.
<outside_tolerance>. Nonnegative double.
• Edge2Edge: Each edge-to-edge constraint is defined by the following format:
<edge_label>-<edge_label>=<e2e_double_range>
where:
<left_delimiter>. [ denotes inclusion or ( denotes exclusion.
<right_delimiter>. ] denotes inclusion or ) denotes exclusion.
<lower_limit>. Can be "-" or double value, where "-" represents negative infinity. For
example, e4-e6=(-, 200] defines that the distance tolerance between edge 4 and
edge 6 is equal to or less than 200 nm.
<upper_limit>. Can be "-" or double value, where "-" represents positive infinity. For
example, e10-e12=(140,-) defines that the distance between edge 10 and edge 12 is
greater than 140 nm.
Figure 3-98 shows part the graphical view of pattern_8. The corresponding description in
the pattern.xml file is:
<Pattern key="0003XL000EYQ0003XL000EYQ" text_id="pattern_8">
<EdgeTolerance>{e11=[-20,20],e6=[-20,40],e17=[-30,30]}</EdgeTolerance>
</Pattern>
Figure 3-99 shows how pattern matching interprets the edge-to-edge constraint with the
following description in the pattern.xml file. The edge-to-edge constraint is calculated based
on the x-coordinates when both edges are vertical or based on the y-coordinates when both
edges are horizontal edges. The corresponding description in pattern.xml is
<Pattern key="adcdefg" text_id="pattern_6">
<Edge2Edge>{e5-e4=[-40,20]}</Edge2Edge>
</Pattern>
Example of Using the pattern.xml File to Define the Edge Pair between the Optional
Pattern Marker and Pattern Layer
A pattern.xml file supports the defining of the edge pair between the optional pattern marker
and the pattern layer for enabling a dynamic optional pattern marker for a one-dimensional
pattern type.
Figure 3-100 shows the graphical view of pattern_3, which defines edge tolerances and the
optional pattern marker layer. The optional pattern marker edge, opm.e8, is paired with
pattern edge, e6; and the other edge, opm.e10, is paired with pattern edge, e8.
Figure 3-100 Edge Pair Between Optional Pattern Marker and Pattern Layer
Multiple edge pairs can be separated by a comma for one pattern. The edge labels are
generated by the IC Validator tool during pattern library creation. You define the
correlation pair in the pattern.xml file using the converted pattern library.
See Also
marker_merge()
optional_pattern_markers()
pattern_library_lock()
pattern_library_read()
pattern_match()
pattern_options()
select_marker_by_double_property()
select_marker_by_string_property()
pattern_library()
The pattern_library() function defines the name and path of a pattern library and returns
a handle to be used by the pattern_library_handle argument of all the pattern matching
functions.
Syntax
pattern_library(
library_name = "string",
library_path = "string"
);
Returns
pattern_library_handle
Arguments
library_name
Required. Specifies the pattern library name.
library_path
Required. Specifies the pattern library path.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Example
The following runset example shows how the pattern_library() function can be used in
a runset that has different pattern matching function calls.
#include <icv.rh>
//define input layout for source hotspot patterns
library (
format = GDSII,
library_name = "TOP.gds",
cell = "TOP"
);
error_options (
error_limit_per_check = ERROR_LIMIT_UNLIMITED
);
//assign layers
pattern_layer1 : polygon_layer = assign ( {{3,0}} );
pattern_layer2 : polygon_layer = assign ( {{4,0}} );
pattern_marker : polygon_layer = assign ( {{1,0}} );
pattern_text_id : text_layer = assign_text( {{1,1}}, use_exploded_text =
{ {"*"}, {"*"}} );
pattern_extent : polygon_layer = assign ( {{2,0}} );
edge_tolerance1 : polygon_layer = assign ( {{3,2}} );
edge_tolerance2 : polygon_layer = assign ( {{4,2}} );
optional_markers : list of polygon_layer = {pattern_extent,
pattern_marker};
learn_violation @= {
@"pattern_learn result";
pattern_learn (
pattern_library_handle = M1_V0_lv2,
pattern_layers = {pattern_layer2, pattern_layer1},
pattern_marker = pattern_marker,
pattern_text_id = pattern_text_id,
optional_pattern_markers = optional_markers,
pattern_extent = pattern_extent,
edge_tolerance_layers =
{edge_tolerance2,edge_tolerance1},
pattern_fuzziness = pattern_fuzziness,
pattern_anchor_optimization = PM_ENCLOSE,
pattern_reflect = pattern_reflect,
pattern_rotate = pattern_rotate
);
};
error_list.push_back({learn_violation,{0,0}});
match_violation @= {
@"pattern match result";
pattern_match (
pattern_library_handle = M1_V0_lv2,
pattern_library_name = " ",
pattern_layers = {pattern_layer2, pattern_layer1}
);
};
error_list.push_back({match_violation,{1,0}});
//for debugging
output_lib=gds_library("out.gds");
write_gds(
output_library=output_lib,
errors=error_list
);
See Also
optional_pattern_markers()
pattern_learn()
pattern_library_read()
pattern_match()
pattern_options()
pattern_library_compare()
The pattern_library_compare() function compares two pattern libraries and outputs a
text report. The ASCII file handle is defined using the fopen() function before calling this
function. This function applies only to the pattern libraries generated when the
pattern_naming_mode argument of the pattern_learn() function is PM_NAME_UNIQUE.
The pdb_utility.pl script, which is in the contrib directory, allows you to perform the
functionality of the pattern_library_compare() function without executing a runset and
without using a dummy GDSII file. See the Example section for how to run the script.
Syntax
pattern_library_compare(
pattern_library1 = pattern_library_handle,
pattern_library2 = pattern_library_handle,
compare_report = ascii_file_handle
);
Returns
void
Arguments
pattern_library1
Required. Specifies the first pattern library to be compared with the second pattern
library. The handle must be previously defined by the pattern_library() function.
pattern_library2
Required. Specifies the second pattern library to be compared with the first pattern
library. The handle must be previously defined by the pattern_library() function.
compare_report
Required. Specifies the ASCII file for the compare results.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Example
Example 1
The following runset example shows how the pattern_library_compare() function
compares pattern library M1_V1_1 with pattern library M1_V1_2.
#include <icv.rh>
library (
format = GDSII,
library_name = "TOP.gds",
cell = "TOP"
);
//assign layers
dummy_layer : ldt_range_s = {0};
foo = assign(dummy_layer);
M1_V1_1 = pattern_library (
library_name = "M1_V1_1",
library_path = "../pattern_lib"
);
M1_V1_2 = pattern_library (
library_name = "M1_V1_2",
library_path = "../pattern_lib"
);
report = fopen (
file = "compare_report"
);
pattern_library_compare (
pattern_library1 = M1_V1_1,
pattern_library2 = M1_V1_2,
compare_report = report
);
*******Overview*********
*******Common Patterns*******
pat#001w0x004BtY1_RCFL2_EcFx
pat#000jOs00183i0bdjMC2Q_1@O
pat#000xeW002V4U1dh4hH1x1oqG
pat#001tIl004JhP3qj2ly1RYRpN
pat#0011zE002lYs2ixOMx0e9HI0
pat#002MMb004G@c0zO@a@1@7lcO
……
pat#000KQS001HAE0ah_lD3RcopT
pat#000WNQ002AtR0t6PTj1TyJ2B
pat#0015No002BuA3DKq@y2FffnV
pat#0007S4000kE10tJ3ab1hYa6v
pat#000a5H001KNp0Laiiz0SmE7B
……
pat#001fUM002@pe30CRhO3Kdcu6
pat#000PjS3__rNn2njNMh2JGW_z
pat#000VYV000ce036apkl0@SxSS
pat#001OpZ002ogk1m3ie30Yk4v1
pat#002MXw001rtF1L6fr32T6MsK
pat#001EGe0021ii1ZFIoT028duP
pat#000L5Q000kPD0nFhbQ1cwS5j
……
Example 2
The pdb_utility.pl script, which is in the contrib directory, allows you to perform the
functionality of the pattern_library_compare() function without executing a runset and
without a dummy GDSII file. The general usage is
pdb_utility.pl -compare -i1 <plib1> -i2 <plib2> -not -common -list
See Also
optional_pattern_markers()
pattern_learn()
pattern_library_read()
pattern_match()
pattern_options()
pattern_library_lock()
The pattern_library_lock() function adds read and write protection to a pattern library.
A locked pattern library is neither accessible by the pattern_learn() function for adding
new patterns nor by the pattern_library_read() function for converting it to a graphical
format file.
The pattern_library_lock() function cannot reverse the locking process. The locked
pattern library is then delivered to the end user.
When you use the pattern_library_lock() function:
• A dummy GDSII or OASIS file is required as input. See the Example section for an
example of defining a dummy file.
• A dummy ASSIGN section is required in the runset. See the Example section for an
example of a dummy ASSIGN section.
The pdb_utility.pl script, which is in the contrib directory, lets you perform the functionality of
the pattern_library_lock() function without executing a runset and without a dummy
GDSII file. See the pdb_utility.pl script for information about how to rerun the script.
Syntax
pattern_library_lock(
pattern_library_handle = pattern_library_handle
);
Returns
void
Arguments
pattern_library_handle
Required. Specifies the pattern library to be locked. The handle must be previously
defined by the pattern_library() function.
Note:
The pattern_library_handle argument replaces the previous
pattern_library_name argument for better usability, but it breaks the backward
compatibility of the previous runset, which is defined using the
pattern_library_name argument.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Example
Example 1
The following runset example shows how the pattern_library_lock() function locks the
TEST_CASE_Mx pattern library.
#include <icv.rh>
TEST_CASE_Mx = pattern_library (
library_name = "TEST_CASE_Mx",
library_path = "../pattern_lib"
);
pattern_library_lock (
pattern_library_handle = TEST_CASE_Mx
);
Before the locking process, pattern library, TEST_CASE_Mx, is writable and viewable. This
information is in the pattern library log file with the following lines:
[Wed Oct 5 11:39:51 2016]: Learned new pattern(s) with ICV_Engine
2016.12-DEV-161004.3389406.
Registered 12 new unique pattern(s); total # of unique pattern(s)=12.
Created reflected/rotated pattern(s); total # of pattern(s)=96.
viewable=true; writable=true.
After the locking process, the pattern library, TEST_CASE_Mx, is neither writable nor
viewable. This information is in the same log file with the following newly added lines:
[Wed Nov 16 11:31:37 2016]: Locked pattern library with ICV_Engine
2016.12-BETA-161116.3440453.
viewable=false; writable=false.
Example 2
The pdb_utility.pl script, which is in the contrib directory, allows you to perform the
functionality of the pattern_library_lock() function without executing a runset and
without using a dummy GDSII file. The general usage is:
pdb_utility.pl <pdb_lib_path> <pdb_lib_name> -lock [output_name]
See Also
optional_pattern_markers()
pattern_learn()
pattern_library_read()
pattern_match()
pattern_options()
pattern_library_merge()
The pattern_library_merge() function merges a list of pattern libraries into one pattern
library. This function applies only to the pattern libraries generated when the
pattern_naming_mode argument of the pattern_learn() function is PM_NAME_UNIQUE.
The pdb_utility.pl script, which is in the contrib directory, allows you to perform the
functionality of the pattern_library_merge() function without executing a runset and
without using a dummy GDSII file. See the Example section for how to run the script.
Syntax
pattern_library_merge(
input_pattern_libraries = {pattern_library_handle, ...},
output_pattern_library = pattern_library_handle
);
Returns
void
Arguments
input_pattern_libraries
Required. Specifies the list of input pattern libraries to be merged. The handle must be
previously defined by the pattern_library() function.
output_pattern_library
Required. Specifies the output pattern library to be merged. The handle must be
previously defined by the pattern_library() function.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Example
Example 1
The following runset example shows how the pattern_library_merge() function merges
two pattern libraries, M1_V1 and M2_V2 into one pattern library, Mx_Vx.
#include <icv.rh>
library (
format = GDSII,
library_name = "TOP.gds",
cell = "TOP"
);
//assign layers
dummy_layer : ldt_range_s = {0};
foo = assign(dummy_layer);
M1_V1 = pattern_library (
library_name = "M1_V1",
library_path = "../pattern_lib"
);
M2_V2 = pattern_library (
library_name = "M2_V2",
library_path = "../pattern_lib"
);
Mx_Vx = pattern_library (
library_name = "Mx_Vx",
library_path = "../pattern_lib"
);
pattern_library_merge (
input_pattern_libraries = {M1_V1,M2_V2},
output_pattern_library = Mx_Vx
);
Example 2
The pdb_utility.pl script, which is in the contrib directory, allows you to perform the
functionality of the pattern_library_merge() function without executing a runset and
without using a dummy GDSII file. The general usage is:
pdb_utility.pl -merge -i <plib1> <plib2>...<plibn> -o [merged_lib]
See Also
optional_pattern_markers()
pattern_learn()
pattern_library_read()
pattern_match()
pattern_options()
pattern_library_read()
The pattern_library_read() function converts a pattern library to IC Validator group files.
These files can then be written to a GDSII or OASIS file using the write_gds() function or
the write_oasis() function.
This function is required when converting a pattern library to GDSII or OASIS output with the
IC Validator tool.
When you use the pattern_library_read() function,
• A dummy GDSII or OASIS file is required. See the Examples section for an example of
defining a dummy file.
• A dummy ASSIGN section is required in the runset. See the Examples section for an
example of a dummy ASSIGN section.
• The resolution in the write_gds() and write_oasis() functions must be equal to or
finer than the pattern library resolution to avoid pattern snapping. See the
resolution_options() function for more information about how to specify a resolution
other than the input library resolution. Also, see the write_gds() or write_oasis()
functions for more information about how to specify an output resolution other than the
input library resolution.
The pdb_utility.pl script, which is in the contrib directory, allows you to perform the
functionality of the pattern_library_read() function without executing a runset and
without a dummy GDSII file. See the pdb_utility.pl script for information about how to run the
script.
Syntax
pattern_library_read(
pattern_library_name = "string",
pattern_text_id = out_text_layer,
pattern_marker = out_polygon_layer,
pattern_extent = out_polygon_layer,
pattern_layers = {out_polygon_layer, ...},
edge_tolerance_layers = {out_polygon_layer, ...},
ignore_region_layers = {out_polygon_layer, ...},
edge_label_layers = {out_text_layer, ...},
optional_pattern_markers = {out_polygon_layer, ...},
string_property_layers = {out_text_layer, ...},
double_property_layers = {out_text_layer, ...},
optional_pattern_marker_edge_label_layers = {out_text_layer, ...},
pattern_library_handle = NULL_PATTERN_LIBRARY
);
Returns
void
Arguments
pattern_library_name
Required. Specifies the pattern library to be converted.
pattern_text_id
Required. Specifies the output layer that contains the pattern ID.
pattern_marker
Required. Specifies the output layer that contains the pattern markers.
pattern_extent
Required. Specifies the output layer that contains the pattern extent.
pattern_layers
Required. Lists the output layers that consist of one or more pattern layers.
edge_tolerance_layers
Required. Lists the output layers that contain the edge tolerance of each pattern layer.
ignore_region_layers
Required. Lists the output layers that contain the ignored regions of each pattern layer.
edge_label_layers
Required. Lists the output layers that consist of one or more edge-label layers. Edges of
each pattern are labeled in clockwise order from the lower-left edge of the lower-left
polygon, starting from zero. Edges touching either the pattern extent or the ignored
region are treated as false edges and are not output.
Note:
The edge-label layers are output only when the pattern_fuzziness argument of the
pattern_learn() function is PM_EDGE_NONUNIFORM. See the output_pattern_xml
argument of the pattern_learn() function for more information.
optional_pattern_markers
Required. Lists the output layers that contain optional pattern markers which are placed
on each pattern.
string_property_layers
Required. Lists the output text layers that have a pattern property type of STRING. See
the pattern_type_properties argument of the pattern_learn() function for more
information.
double_property_layers
Required. Lists the output text layers that have a pattern property type of DOUBLE. See
the pattern_type_properties argument of the pattern_learn() function for more
information.
optional_pattern_marker_edge_label_layers
Required. Lists the output layers that consist of one or more edge-label layers for
optional pattern markers. Edges of each marker layer are labeled in clockwise order from
the lower-left edge of the lower-left polygon, starting from 0 (zero). To distinguish from
the pattern edge label, the optional pattern marker edge label is prefixed with opm. For
example, opm.e1 represents optional pattern marker edge 1.
Note:
The optional pattern marker edge-label layers are output only when the
pattern_fuzziness argument of the pattern_learn() function is
PM_DIMENSION_UNBOUNDED.
pattern_library_handle
Required. Specifies the pattern library to be read. The handle must be previously defined
by the pattern_library() function.
Note:
The pattern_library_name argument has backward compatible support for the
previous pattern matching runset. The pattern_library_handle argument is
selected if defined.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Examples
Example 1
The following example shows how the pattern_library_read() function converts the
TEST_CASE_Mx pattern library and outputs it to a new GDSII file.
#include <icv.rh>
library (
format =GDSII,
library_name = ./dummy.gds",
cell = "dummy1"
);
//assign layers
dummy_layer : ldt_range_s = {0};
foo = assign(dummy_layer);
pattern_marker: polygon_layer;
pattern_extent: polygon_layer;
pattern_text: text_layer;
edge_label_layers: list of text_layer;
str_prop_layers: list of text_layer;
dbl_prop_layers: list of text_layer;
pattern_layer_list: list of polygon_layer;
edge_tolerance_layer_list: list of polygon_layer;
ignore_region_layers_list: list of polygon_layer;
optional_pattern_markers_list: list of polygon_layer;
opm_edge_label_layers_list: list of text_layer;
TEST_CASE_Mx = pattern_library (
library_name = "TEST_CASE_Mx",
library_path = "../pattern_lib"
);
);
for(i=0 to str_prop_layers.size()-1){
out_layer.push_back({str_prop_layers[i],{200+i,0}});
}
for(i=0 to dbl_prop_layers.size()-1){
out_layer.push_back({dbl_prop_layers[i],{300+i,0}});
}
for(i=0 to optional_pattern_markers_list.size()-1){
out_layer.push_back({optional_pattern_markers_list[i],{100+i,0}});
}
for(i=0 to opm_edge_label_layers_list.size()-1){
out_layer.push_back({opm_edge_label_layers_list[i],{400+i,0}});
}
//for debugging
graphic_output = gds_library("TEST_CASE_Mx.gds");
write_gds (
output_library = graphic_output,
resolution = 0.0005,
output_cell = "all_patterns",
layers = out_layer
);
Example 2
The pdb_utility.pl script, which is in the contrib directory, lets you perform the functionality of
the pattern_library_read() function without executing a runset and without a dummy GDSII
file. The general usage is:
pdb_utility.pl <pdb_lib_path> <pdb_lib_name> -read [output_name]
Example 3
Figure 3-101 shows an example of a converted pattern library in IC WorkBench EV Plus. In
the converted GDSII file, each child cell represents one pattern in the pattern library. The cell
is named using the following naming convention:
p$(index)_h$(hit number)_pattern-id_R0
• The patterns in a pattern library are automatically indexed starting from zero.
• The hit number indicates how many times a pattern is hierarchically processed during
pattern library creation.
• The pattern ID is the user-defined pattern text ID.
• All patterns are displayed in zero orientation (R0). This orientation might not be the
original orientation of the input source patterns.
Figure 3-101 Converted Pattern Library in IC WorkBench EV Plus
See Also
optional_pattern_markers()
pattern_learn()
pattern_library_lock()
pattern_match()
pattern_options()
pattern_match()
The pattern_match() function captures patterns on a design that match patterns in a
pattern library. The pattern library is generated by the pattern_learn() function. The
pattern_match() function is required when performing pattern matching with the
IC Validator tool and can be called multiple times within a runset.
Syntax
pattern_match(
pattern_library_name = "string",
pattern_layers = {polygon_layer, ...},
pattern_library_handle = NULL_PATTERN_LIBRARY, //optional
group_errors_by_pattern = true | false, //optional
select_by_pattern_properties = {{name = "string",
string_values = {“string”, …},
double_values =
{doubleconstraint, …}}},
...}, //optional
explode_data_limit = integer, //optional
report_orientations = ALL | ONE //optional
);
Returns
marker layer or error result
The marker layer return value contains the unmerged pattern markers.
A marker layer can be converted to a polygon layer using the marker_merge() function.
Arguments
pattern_library_name
Required. Specifies the pattern library for pattern matching.
Note:
The pattern_library_name argument has backward compatible support for the
previous pattern matching runset. The pattern_library_handle argument is
selected if defined.
pattern_layers
Required. Lists the input pattern layers on which pattern matching is performed. For this
list,
❍ The size of the pattern layer list must match the size of the pattern layer list used to
generate the pattern library.
❍ The pattern layer list must be in the same order as in the pattern layer list used to
generate the pattern library.
pattern_library_handle
Optional. Specifies the pattern library for pattern matching. The handle must be
previously defined by the pattern_library() function.
group_errors_by_pattern
Optional. Specifies whether to store and report errors based on the pattern ID to the error
database and the LAYOUT_ERRORS file. The default is false.
See the Examples section for an example of the LAYOUT_ERRORS file.
select_by_pattern_properties
Optional. Selects patterns based on their text property values. The selected patterns are
used for pattern matching instead of the patterns in the pattern library specified with the
pattern_library_name argument.
The following example selects patterns with the property name Ptype and the property
value bitcell:
select_by_pattern_properties = { {{"Ptype", {"bitcell"}}} },
The following example selects patterns with a predefined critical dimension greater than
or equal to 0.06 m:
select_by_pattern_properties = {
{{name="min_cd", double_values = {>=0.06}}}
},
The following example selects patterns named BIT_P_2 or BIT_P_3 with the revision
value 1.0.
select_by_pattern_properties = {
{{“PATTERN_NAME”, {“BIT_P_2”, BIT_P_3”}},
{“revision”, double_values = {1.0}}}
},
Notes:
❍ Pattern text properties are user-defined input and are attached to the pattern library
during pattern library creation through the pattern_text_properties argument of
the pattern_learn() function.
❍ The relation is AND within each property set and OR among the property sets.
The following example specifies three pattern property sets. Each property set
contains one pattern property. Any pattern that meets one of the three property
specifications is selected.
select_by_pattern_properties = {
{{"PATTERN_NAME", {"*", "!pat_13*"}}},
{{"pattern_type", {"space"}}},
{{name="min_cd", double_values = {>=0.06}}}
},
The following example specifies one pattern property set. This property set contains
three pattern properties. Any pattern that meets all three property specifications is
selected.
select_by_pattern_properties = {
{{"PATTERN_NAME", {"*", "!pat_13*"}},
{"pattern_type", {"space"}},
{name="min_cd", double_values = {>=0.06}}}
},
explode_data_limit
Optional. Specifies the exploding data limit for hierarchy optimization, which occurs
during pattern matching to maximize performance. The default is 100. A smaller value is
recommended for FEOL (front-end-of-the-line). For example, set the exploding data limit
to 0 (does not explode the cell) for a contact layer to prevent data exploding that might
cause performance degradation.
report_orientations
Optional. Specifies how to report a matched pattern with different orientations. The
default is ALL.
❍ ALL. Reports all orientations.
❍ ONE. Reports only one orientation. This orientation is selected by the IC Validator tool.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Examples
library (
format = GDSII,
library_name = "TOP.gds",
cell = "TOP"
);
error_options (
error_limit_per_check = ERROR_LIMIT_UNLIMITED
);
//assign layers
metal2 : polygon_layer = assign ( {{3,0}} );
Mx = pattern_library (
library_name = "Mx",
library_path = "/pattern_lib"
);
tmp_violation1 @= {
@"pattern match result";
pattern_match (
pattern_library_handle = Mx,
pattern_library_name = " ",
pattern_layers = {metal2}
);
};
METAL1 PM RESULT:
pattern_match .................................6 violations found.
ERROR DETAILS
--------------------------------------------------------------------
pattern match result:
--------------------------------------------------------------------
/runset/sample_match.rs:77:pattern_match
--------------------------------------------------------------------
Structure ( lower left x, y ) ( upper right x, y ) Pattern Orientation
--------------------------------------------------------------------
TOP (1154.6210, 1277.3630) (1154.6790, 1277.4740) pattern_5 FY
TOP (1154.9010, 1279.4860) (1154.9590, 1279.5970) pattern_5 R180
TOP (1151.1210, 1240.4240) (1151.1790, 1240.5350) pattern_6 FY
TOP (1149.7210, 1222.3660) (1149.7790, 1222.4770) pattern_5 R180
TOP (1154.0610, 1225.7050) (1154.1190, 1225.8160) pattern_6 R180
TOP (1163.4410, 1255.9450) (1163.4990, 1256.0560) pattern_6 R180
The highlighted lines in the following LAYOUT_ERRORS file show the additional reporting
based on the pattern ID when the group_errors_by_pattern argument is true:
LAYOUT ERRORS RESULTS: ERRORS
ERRORS
====================================================================
ERROR SUMMARY
METAL1 PM RESULT:
pattern_match ................................. 6 violations found.
See Also
marker_merge()
optional_pattern_markers()
pattern_learn()
pattern_library_lock()
pattern_library_read()
pattern_options()
pattern_options()
The pattern_options() function defines the path for the pattern library when the
pattern_library_name argument of the pattern_library_read(),
optional_pattern_markers(), and pattern_match() functions is used to specify the
pattern library. It can be called only one time within a runset.
Syntax
pattern_options(
pattern_library_path = "string"
);
Returns
void
Arguments
pattern_library_path
Required. Specifies the pattern library path. An error occurs if the path does not exist.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
The following example specifies the pattern library path with an environment variable:
pattern_options(pattern_library_path = $PM_LIB_PATH);
See Also
marker_merge()
optional_pattern_markers()
pattern_learn()
pattern_library_lock()
pattern_library_read()
pattern_match()
pex_cell_extents_file()
The pex_cell_extents_file() function defines a cell extents file. The file handle
generated by this function is used as an input argument to the pex_generate_database()
function.
Syntax
pex_cell_extents_file(
file = "string"
);
Returns
pex_cell_extents_file_handle
Arguments
file
Required. Specifies the cell extents file name.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
init_pex_layer_matrix()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_cell_port_file()
The pex_cell_port_file() function defines a cell port file. The file handle generated by
this function is used as an input argument to the pex_generate_database() function.
Syntax
pex_cell_port_file(
file = "string"
);
Returns
pex_cell_port_file_handle
Arguments
file
Required. Specifies the cell port file name.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_color_layer_map()
The pex_color_layer_map() function stores, in the PEX layer matrix, mapping between
PXL layer objects and parasitic extraction color layer parameters. You must call this function
for the color layers you want to map to a StarRC COLOR process layer. The layer mapping
is written to the color_layers section of the StarRC MAPPING_FILE. Mapping information is
also optionally written to the StarRC OA_LAYER_MAPPING_FILE.
Syntax
pex_color_layer_map(
matrix = pex_layer_matrix,
layer1 = layer,
process_layer = "string",
lpp_layer = {lpp_polygon_layer = "string",
lpp_polygon_purpose = "string",
lpp_port_layer = "string",
lpp_port_purpose = "string",
lpp_subnode_layer = "string",
lpp_subnode_purpose = "string"}, //optional
tagname = "string", //optional
append_string = "string" //optional
);
Returns
void
Arguments
matrix
Required. Specifies the PEX layer matrix in which parasitic extraction details are stored
for use by the pex_generate_database(), pex_generate_lpp_map(),
pex_generate_process_map(), and pex_generate_results() parasitic extraction
functions. (The pex_layer_matrix argument in these functions selects the PEX layer
matrix.) The matrix must be previously defined by the init_pex_layer_matrix()
function.
layer1
Required. Specifies the polygon, edge, or text layer that is written to the output parasitic
extraction layout database for the StarRC tool.
process_layer
Required. Specifies the COLOR layer from the StarRC TCAD_GRD_FILE.
lpp_layer
Optional. Stores OpenAccess (OA) or Cadence® CDBA layer purpose pairs (LPPs) to
generate the StarRC OA_LAYER_MAPPING_FILE.
tagname
Required. Associates a user-defined name with a PXL layer. This tag name is used to
represent the layer in all files requiring a layer identity, including the
❍ Parasitic extraction runset report file
❍ Parasitic extraction cell port file
❍ Parasitic extraction process mapping file (StarRC MAPPING_FILE)
❍ Parasitic extraction LPP mapping file (StarRC OA_LAYER_MAPPING_FILE)
❍ Output parasitic extraction layout database (Milkyway) read by the StarRC tool
Restrictions for the tag name are:
❍ Square brackets ([]) are not allowed.
❍ Each specified tag name must be unique and cannot be reused in other
pex_*_layer_map() function calls.
append_string
Optional. Specifies a string to be appended to the end of the corresponding mapping
entry within the StarRC MAPPING_FILE. That is, the string is used to add information to
the end of a StarRC mapping file command.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Example
With the following in the IC Validator runset,
M1_E1 = assign({{110}});
pex_color_layer_map(matrix = pex_matrix,
layer1 = M1_E1,
process_layer = "M1",
tagname = "M1_E1",
append_string = "X=0.004 Y=0.004");
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_conducting_layer_map()
The pex_conducting_layer_map() function stores, in the PEX layer matrix, mapping
between PXL layer objects and parasitic extraction conducting layer parameters. You must
call this function for every PXL layer variable you want to map to a StarRC CONDUCTOR
process layer. The layer mapping is written to the conducting_layers section of the StarRC
MAPPING_FILE. Mapping information is also optionally written to the StarRC
OA_LAYER_MAPPING_FILE.
Syntax
pex_conducting_layer_map(
matrix = pex_layer_matrix,
layer1 = layer,
process_layer = "string",
lpp_layer = {lpp_polygon_layer = "string",
lpp_polygon_purpose = "string",
lpp_port_layer = "string",
lpp_port_purpose = "string",
lpp_subnode_layer = "string",
lpp_subnode_purpose = "string"}, //optional
tagname = "string",
device_layer = true | false, //optional
model_name = "string", //optional
rpsq = double, //optional
precedence = integer, //optional
table_name = "string", //optional
append_string = "string" //optional
);
Returns
void
Arguments
matrix
Required. Specifies the PEX layer matrix in which parasitic extraction details are stored
for use by the pex_generate_database(), pex_generate_lpp_map(),
pex_generate_process_map(), and pex_generate_results() parasitic extraction
functions. (The pex_layer_matrix argument in these functions selects the PEX layer
matrix.) The matrix must be previously defined by the init_pex_layer_matrix()
function.
layer1
Required. Specifies the polygon, edge, or text layer that is written to the output parasitic
extraction layout database for the StarRC tool.
process_layer
Required. Specifies the CONDUCTOR layer from the StarRC TCAD_GRD_FILE.
lpp_layer
Optional. Stores OpenAccess (OA) or Cadence CDBA layer purpose pairs (LPPs) to
generate the StarRC OA_LAYER_MAPPING_FILE.
tagname
Required. Associates a user-defined name with a PXL layer. This tag name is used to
represent the layer in all files requiring a layer identity, including the
❍ Parasitic extraction runset report file
❍ Parasitic extraction cell port file
❍ Parasitic extraction process mapping file (StarRC MAPPING_FILE)
❍ Parasitic extraction LPP mapping file (StarRC OA_LAYER_MAPPING_FILE)
❍ Output parasitic extraction layout database (Milkyway) read by the StarRC tool
Restrictions for the tag name are:
❍ Square brackets ([]) are not allowed.
❍ Each specified tag name must be unique and cannot be reused in other
pex_*_layer_map() function calls.
device_layer
Optional. Corresponds to the StarRC MAPPING_FILE option of the same name. See the
StarRC User Guide and Command Reference manual for more information. The default
is false.
model_name
Optional. Corresponds to the StarRC MAPPING_FILE option MODEL. See the StarRC
User Guide and Command Reference manual for more information.
rpsq
Optional. Corresponds to the StarRC MAPPING_FILE option of the same name. See the
StarRC User Guide and Command Reference manual for more information.
precedence
Optional. Corresponds to the StarRC MAPPING_FILE option of the same name. See the
StarRC User Guide and Command Reference manual for more information.
table_name
Optional. Corresponds to the StarRC MAPPING_FILE option of the same name. See the
StarRC User Guide and Command Reference manual for more information.
append_string
Optional. Specifies a string to be appended to the end of the corresponding mapping
entry within the StarRC MAPPING_FILE. That is, the string is used to add information to
the end of a StarRC mapping file command.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
pex_conducting_layer_map(
matrix = pex_matrix,
layer1 = fpoly,
process_layer = "POLY",
lpp_layer = { "POLY", "drawing", "nil", "nil", "POLY", "net"},
rpsq = 12.0,
tagname = "fpoly"
);
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_generate_database()
The pex_generate_database() function generates the following outputs needed by the
StarRC tool to perform parasitic extraction:
• Parasitic extraction layout database. Connected layout polygon and device database in
GDSII or SPICE format.
• Parasitic extraction mapping file. Parasitic extraction process layer mapping file
corresponding to the StarRC MAPPING_FILE command option.
• Parasitic extraction runset report file. Parasitic extraction runset report file corresponding
to the StarRC ICV_RUNSET_REPORT_FILE command option.
• Parasitic extraction LPP mapping file. Parasitic extraction LPP mapping file
corresponding to the StarRC OA_LAYER_MAPPING_FILE command option.
Note:
Use the pex_generate_database() function with GDSII and SPICE formats. Use the
pex_generate_results() function with Milkyway databases.
Limitation:
The IC Validator parasitic extraction layout database generated for annotated GDS
(AGDS) and SPICE flows cannot be used with the XREF:COMPLETE option of the StarRC
tool.
Syntax
pex_generate_database(
pex_matrix = pex_layer_matrix,
pex_library = gds_library_handle,
pex_library_layer_map = pex_layout_library_layer_map_handle,
pex_netlist_file = spice_netlist_file_handle,
pex_cell_extents_file = pex_cell_extents_file_handle,
pex_cell_port_file = pex_cell_port_file_handle,
pex_process_map_file = pex_process_map_file_handle,
pex_runset_report_file = pex_runset_report_file_handle,
pex_lpp_map_file = pex_lpp_map_file_handle, //optional
precision = integer, //optional
resolution = double //optional
);
Returns
void
Arguments
pex_matrix
Required. Specifies the PEX layer matrix where PEX layer mapping settings are stored.
The matrix is defined by the matrix argument of the pex_*_layer_map() functions.
pex_library
Required. Specifies the handle for the annotated GDSII layout database. The handle is
defined using the gds_library() function.
pex_library_layer_map
Required. Specifies the handle for the layer mapping file. The file handle is defined using
the pex_library_layer_map_file() function.
pex_netlist_file
Required. Specifies the handle for the SPICE netlist file. The file handle is defined using
the spice_netlist_file() function.
pex_cell_extents_file
Required. Specifies the handle for the cell extents file. The file handle is defined using
the pex_cell_extents_file() function.
pex_cell_port_file
Required. Specifies the handle for the cell port file. The file handle is defined using the
pex_cell_port_file() function.
pex_process_map_file
Required. Specifies the handle for the parasitic extraction process mapping file. The file
handle is defined using the pex_process_map_file() function. This file corresponds to
the StarRC MAPPING_FILE option.
pex_runset_report_file
Required. Specifies the handle for the parasitic extraction runset report file. The file
handle is defined using the pex_runset_report_file() function. This file corresponds
to the StarRC ICV_RUNSET_REPORT_FILE option.
pex_lpp_map_file
Optional. Specifies the handle for the LPP mapping file. The file handle is defined using
the pex_lpp_map_file() function. This file corresponds to the StarRC
OA_LAYER_MAPPING_FILE option.
precision
Optional. Specifies the maximum number of significant figures reported in the GDSII
library or SPICE format for extracted device properties from the extract_devices()
function. The value can be from 1 through 15. The default is 6.
resolution
Optional. Snaps the output data to the specified resolution before it is written to the
extraction layout database. The default is the IC Validator engine resolution.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
pex_matrix = init_pex_layer_matrix(device_db);
pex_process_handle = pex_process_map_file("agds_grd_map");
pex_report_handle = pex_runset_report_file("agds_runset_report");
pex_lpp_map_handle = pex_lpp_map_file("agds_lpp_layer_map");
gds_out = gds_library("agds.gds");
pex_layout_library_layer_map_handle =
pex_library_layer_map_file("agds_layer_map");
spice_netlist_file_handle = spice_netlist_file("agds.sp");
pex_cell_extents_file_handle =
pex_cell_extents_file("agds_cell_extents");
pex_cell_port_file_handle = pex_cell_port_file("agds_cell_port");
pex_generate_database(
pex_matrix = pex_matrix,
pex_library = gds_out,
pex_library_layer_map = pex_layout_library_layer_map_handle,
pex_netlist_file = spice_netlist_file_handle,
pex_cell_extents_file = pex_cell_extents_file_handle,
pex_cell_port_file = pex_cell_port_file_handle,
pex_process_map_file = pex_process_handle,
pex_lpp_map_file = pex_lpp_map_handle,
pex_runset_report_file = pex_report_handle
);
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_generate_lpp_map()
The pex_generate_lpp_map() function generates the parasitic extraction LPP mapping
file. The parasitic extraction LPP mapping file corresponds to the StarRC
OA_LAYER_MAPPING_FILE command option.
Typically, when multiple PEX layer matrixes exist, you use the pex_generate_lpp_map()
function to generate an LPP mapping file from a different PEX layer matrix than the one
used by the pex_generate_database() and pex_generate_results() functions.
Syntax
pex_generate_lpp_map(
pex_matrix = pex_layer_matrix,
pex_lpp_map_file = pex_lpp_map_file_handle
);
Returns
void
Arguments
pex_matrix
Required. Specifies the PEX layer matrix where PEX layer mapping settings are stored.
The matrix is defined by the matrix argument of the pex_*_layer_map() functions.
pex_lpp_map_file
Required. Specifies the handle for the LPP mapping file. The file handle is defined using
the pex_lpp_map_file() function. This file corresponds to the StarRC
OA_LAYER_MAPPING_FILE option.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DEVICE.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Using the following runset excerpt:
pex_matrix = init_pex_layer_matrix(device_db);
pex_conducting_layer_map(
matrix = pex_matrix,
layer1 = M3,
process_layer = "metal3",
lpp_layer = {"M3", "drawing", "M3", "pin", "M3", "net"},
tagname = "metal3.1"
);
pex_conducting_layer_map(
matrix = pex_matrix,
layer1 = M2,
process_layer = "metal2",
lpp_layer = {"M2", "drawing", "M2", "pin", "M2", "net"},
tagname = "metal2.1"
);
pex_conducting_layer_map(
matrix = pex_matrix,
layer1 = M1,
process_layer = "metal1",
lpp_layer = {"M1", "drawing", "M1", "pin", "M1", "net"},
tagname = "metal1.1"
);
pex_generate_lpp_map(
pex_matrix = pex_matrix,
pex_lpp_map_file = pex_lpp_map_file("lpp_map")
);
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_generate_process_map()
The pex_generate_process_map() function generates the parasitic extraction layer
mapping file. The parasitic extraction layer mapping file corresponds to the StarRC
MAPPING_FILE command option.
A common scenario for using the pex_generate_process_map() function is when multiple
PEX layer matrixes are used to store data for multiple parasitic extraction process corners.
In this scenario, you can use the pex_generate_database() or
pex_generate_results() function to generate all parasitic extraction files for the nominal
process corner, and use the pex_generate_process_map() function to generate additional
layer mapping files for other process corners.
Syntax
pex_generate_process_map(
pex_matrix = pex_layer_matrix,
pex_process_map_file = pex_process_map_file_handle
);
Returns
void
Arguments
pex_matrix
Required. Specifies the PEX layer matrix where PEX layer mapping settings are stored.
The matrix is defined by the matrix argument of the pex_*_layer_map() functions.
pex_process_map_file
Required. Specifies the handle for the process mapping file. The file handle is defined
using the pex_process_map_file() function. This file corresponds to the StarRC
MAPPING_FILE option.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DEVICE.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Using the following runset excerpt:
// pex_layer_matrix for nominal corner – metal rpsq = 0.05
pex_matrix_nom = init_pex_layer_matrix(device_db);
via_layers
via2.1 via2
via1.1 via1
(map_max)
conducting_layers
via_layers
via2.1 via2
via1.1 via1
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_generate_results()
The pex_generate_results() function generates the following outputs needed by the
StarRC tool to perform parasitic extraction:
• Parasitic extraction layout database. Connected layout polygon and device database in
Milkyway format.
• Parasitic extraction mapping file. Parasitic extraction process layer mapping file
corresponding to the StarRC MAPPING_FILE command option.
• Parasitic extraction runset report file. Parasitic extraction runset report file corresponding
to the StarRC ICV_RUNSET_REPORT_FILE command option.
• Parasitic extraction LPP mapping file. Parasitic extraction LPP mapping file
corresponding to the StarRC OA_LAYER_MAPPING_FILE command option.
Note:
Use the pex_generate_results() function with Milkyway databases. Use the
pex_generate_database() function with GDSII and SPICE formats.
Syntax
pex_generate_results(
pex_matrix = pex_layer_matrix,
layout_database = milkyway_library_handle,
pex_process_map_file = pex_process_map_file_handle,
pex_runset_report_file = pex_runset_report_file_handle,
pex_lpp_map_file = pex_lpp_map_file_handle, //optional
precision = integer, //optional
resolution = double //optional
);
Returns
void
Arguments
pex_matrix
Required. Specifies the PEX layer matrix where PEX layer mapping settings are stored.
The matrix is defined by the matrix argument of the pex_*_layer_map() functions.
layout_database
Required. Specifies the library handle for the parasitic extraction layout database
(Milkyway). The handle is defined using the milkyway_library() function.
pex_process_map_file
Required. Specifies the handle for the parasitic extraction process mapping file. The file
handle is defined using the pex_process_map_file() function. This file corresponds to
the StarRC MAPPING_FILE option.
pex_runset_report_file
Required. Specifies the handle for the parasitic extraction runset report file. The file
handle is defined using the pex_runset_report_file() function. This file corresponds
to the StarRC ICV_RUNSET_REPORT_FILE option.
pex_lpp_map_file
Optional. Specifies the handle for the LPP mapping file. The file handle is defined using
the pex_lpp_map_file() function. This file corresponds to the StarRC
OA_LAYER_MAPPING_FILE option.
precision
Optional. Specifies the maximum number of significant figures reported in the Milkyway
library for extracted device properties from the extract_devices() function. The value
can be from 1 through 15. The default is 6.
resolution
Optional. Snaps the output data to the specified resolution before it is written to the
extraction layout database. The default is the IC Validator engine resolution.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DEVICE.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
pex_process_handle = pex_process_map_file("pex_grd_map");
pex_report_handle = pex_runset_report_file("pex_runset_report");
mw_handle = milkyway_library("XTROUT");
pex_generate_results(
pex_matrix = pex_matrix,
layout_database = mw_handle,
pex_process_map_file = pex_process_handle,
pex_runset_report_file = pex_report_handle,
);
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_generate_simple_database()
The pex_generate_simple_database() function generates the following outputs needed
by the StarRC tool to perform parasitic extraction:
• Parasitic extraction layout database. Connected layout polygon and device database in
GDSII or SPICE format.
• Parasitic extraction runset report file. Parasitic extraction runset report file corresponding
to the StarRC ICV_RUNSET_REPORT_FILE command option.
Note:
Use the pex_generate_simple_database() function with GDSII and SPICE formats.
Use the pex_generate_simple_results() function with Milkyway databases. An
empty layer is not written to the generated GDSII database.
Note:
The generated tag name might be unexpected or inconsistent with the layer name when
user-coded functions are involved in the related layer creation. In this case, you should
explicitly specify the tag names for the layers.
Limitation:
The IC Validator parasitic extraction layout database generated for annotated GDS
(AGDS) and SPICE flows cannot be used with the XREF:COMPLETE option of the StarRC
tool.
Syntax
pex_generate_simple_database(
pex_matrix = pex_layer_matrix,
pex_library = gds_library_handle,
pex_library_layer_map = pex_layout_library_layer_map_handle,
pex_netlist_file = spice_netlist_file_handle,
pex_runset_report_file = pex_runset_report_file_handle,
pex_cell_extents_file = pex_cell_extents_file_handle,
pex_cell_port_file = pex_cell_port_file_handle, //optional
precision = integer, //optional
resolution = double //optional
);
Returns
void
Arguments
pex_matrix
Required. Specifies the PEX layer matrix where PEX layer mapping settings are stored.
The matrix is defined by the matrix argument of the pex_simple_layer_maps()
function.
pex_library
Required. Specifies the handle for the annotated GDSII layout database. The handle is
defined using the gds_library() function.
pex_library_layer_map
Required. Specifies the handle for the layer mapping file. The file handle is defined using
the pex_library_layer_map_file() function.
pex_netlist_file
Required. Specifies the handle for the SPICE netlist file. The file handle is defined using
the spice_netlist_file() function.
pex_runset_report_file
Required. Specifies the handle for the parasitic extraction runset report file. The file
handle is defined using the pex_runset_report_file() function. This file corresponds
to the StarRC ICV_RUNSET_REPORT_FILE option.
pex_cell_extents_file
Required. Specifies the handle for the cell extents file. The file handle is defined using
the pex_cell_extents_file() function.
pex_cell_port_file
Optional. Specifies the handle for the cell port file. The file handle is defined using the
pex_cell_port_file() function. If the StarRC marker layers are a part of the
generated annotated GDS (AGDS), this cell port file not needed and can be omitted.
precision
Optional. Specifies the maximum number of significant figures reported in the GDSII
library or SPICE format for extracted device properties from the extract_devices()
function. The value can be from 1 through 15. The default is 6.
resolution
Optional. Snaps the output data to the specified resolution before it is written to the
extraction layout database. The default is the IC Validator engine resolution.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
pex_matrix = init_pex_layer_matrix(device_db);
pex_report_handle = pex_runset_report_file("agds_runset_report");
gds_out = gds_library("agds.gds");
pex_layout_library_layer_map_handle =
pex_library_layer_map_file("agds_layer_map");
spice_netlist_file_handle = spice_netlist_file("agds.sp");
pex_cell_extents_file_handle =
pex_cell_extents_file("agds_cell_extents");
pex_cell_port_file_handle = pex_cell_port_file("agds_cell_port"); \
/*optional */
pex_generate_database(
pex_matrix = pex_matrix,
pex_library = gds_out,
pex_library_layer_map = pex_layout_library_layer_map_handle,
pex_netlist_file = spice_netlist_file_handle,
pex_runset_report_file = pex_report_handle
pex_cell_extents_file = pex_cell_extents_file_handle,
pex_cell_port_file = pex_cell_port_file_handle,
);
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_generate_simple_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_simple_layer_maps()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_generate_simple_results()
The pex_generate_simple_results() function generates the following outputs needed
by the StarRC tool to perform parasitic extraction:
• Parasitic extraction layout database. Connected layout polygon and device database in
Milkyway format.
• Parasitic extraction runset report file. Parasitic extraction runset report file corresponding
to the StarRC ICV_RUNSET_REPORT_FILE command option.
Note:
Use the pex_generate_simple_results() function with Milkyway databases. Use the
pex_generate_simple_database() function with GDSII and SPICE formats. An empty
layer is not written to the generated Milkyway database.
Note:
The generated tag name might be unexpected or inconsistent with the layer name when
user-coded functions are involved in the related layer creation. In this case, you should
explicitly specify the tag names for the layers.
Syntax
pex_generate_simple_results(
pex_matrix = pex_layer_matrix,
layout_database = milkyway_library_handle,
pex_runset_report_file = pex_runset_report_file_handle,
precision = integer, //optional
resolution = double //optional
);
Returns
void
Arguments
pex_matrix
Required. Specifies the PEX layer matrix where PEX layer mapping settings are stored.
The matrix is defined by the matrix argument of the pex_simple_layer_maps()
function.
layout_database
Required. Specifies the library handle for the parasitic extraction layout database
(Milkyway). The handle is defined using the milkyway_library() function.
pex_runset_report_file
Required. Specifies the handle for the parasitic extraction runset report file. The file
handle is defined using the pex_runset_report_file() function. This file corresponds
to the StarRC ICV_RUNSET_REPORT_FILE option.
precision
Optional. Specifies the maximum number of significant figures reported in the Milkyway
library for extracted device properties from the extract_devices() function. The value
can be from 1 through 15. The default is 6.
resolution
Optional. Snaps the output data to the specified resolution before it is written to the
extraction layout database. The default is the IC Validator engine resolution.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DEVICE.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
pex_matrix = init_pex_layer_matrix(device_db);
pex_report_handle = pex_runset_report_file("pex_runset_report");
mw_handle = milkyway_library("XTROUT") ;
pex_generate_simple_results(
pex_matrix = pex_matrix,
layout_database = mw_handle,
pex_runset_report_file = pex_report_handle,
);
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_simple_database()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_simple_layer_maps()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_ignore_cap_layer_map()
The pex_ignore_cap_layer_map() function creates entries in the
IGNORE_CAP_LAYERS section of the parasitic extraction process mapping file based on
PXL layer objects. This file is created by the pex_generate_results() or
pex_generate_process_map() function.
• pex_remove_layer_map()
• pex_viewonly_layer_map()
Syntax
pex_ignore_cap_layer_map(
matrix = pex_layer_matrix,
ignore_cap_layer_list = {polygon_layer, ...},
ignore_to_substrate = true | false, //optional
l = double, //optional
append_string = "string" //optional
);
Returns
void
Arguments
matrix
Required. Specifies the PEX layer matrix in which parasitic extraction details are stored
for use by the pex_generate_database(), pex_generate_lpp_map(),
pex_generate_process_map(), and pex_generate_results() parasitic extraction
functions. (The pex_layer_matrix argument in these functions selects the PEX layer
matrix.) The matrix must be previously defined by the init_pex_layer_matrix()
function.
ignore_cap_layer_list
Required. Specifies the polygon, edge, or text layers written to the output parasitic
extraction layout database for the StarRC tool.
ignore_to_substrate
Optional. Adds the keyword SUBSTRATE to the list of layers written to the
IGNORE_CAP_LAYERS section of the parasitic extraction process mapping file. The
default is false.
❍ true. Writes the keyword SUBSTRATE at the end of the list of tag names
corresponding to layers specified in the ignore_cap_layer_list argument.
❍ false. Writes only the tag names corresponding to layers specified in the
ignore_cap_layer_list argument.
l
Optional. Corresponds to the StarRC MAPPING_FILE option of the same name. See the
StarRC User Guide and Command Reference manual for more information.
append_string
Optional. Specifies a string to be appended to the end of the corresponding mapping
entry within the StarRC MAPPING_FILE. That is, the string is used to add information to
the end of a StarRC mapping file command.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
pex_ignore_cap_layer_map(
matrix = pex_matrix,
ignore_cap_layer_list = {m1capbody, psub}
);
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_library_layer_map_file()
The pex_library_layer_map_file() function defines a layout library map file. The file
handle generated by this function is used as an input argument to the
pex_generate_database() function.
Syntax
pex_library_layer_map_file(
file = "string"
);
Returns
pex_layout_library_layer_map_handle
Arguments
file
Required. Specifies the layout library map file name.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_lpp_map_file()
The pex_lpp_map_file() function generates a file handle for the output of the parasitic
extraction StarRC OA_LAYER_MAPPING_FILE. The file handle generated by this function
is used as an input argument to the pex_generate_database(),
pex_generate_lpp_map(), and pex_generate_results() functions.
Syntax
pex_lpp_map_file(
file = "string"
);
Returns
pex_lpp_map_file_handle
Arguments
file
Required. Specifies the output file name for the StarRC OA_LAYER_MAPPING_FILE.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_marker_layer_map()
The pex_marker_layer_map() function stores, in the PEX layer matrix, mapping between
PXL layer objects and parasitic extraction marker layers parameters. You must call this
function for every layer you want to output to the marker_layers section of the StarRC
MAPPING_FILE. Mapping information is also optionally written to the StarRC
OA_LAYER_MAPPING_FILE.
Syntax
pex_marker_layer_map(
matrix = pex_layer_matrix,
layer1 = layer,
lpp_layer = {lpp_polygon_layer = "string",
lpp_polygon_purpose = "string",
lpp_port_layer = "string",
lpp_port_purpose = "string",
lpp_subnode_layer = "string",
lpp_subnode_purpose = "string"}, //optional
tagname = "string",
append_string = "string" //optional
);
Returns
void
Arguments
matrix
Required. Specifies the PEX layer matrix in which parasitic extraction details are stored
for use by the pex_generate_database(), pex_generate_lpp_map(),
pex_generate_process_map(), and pex_generate_results() parasitic extraction
functions. (The pex_layer_matrix argument in these functions selects the PEX layer
matrix.) The matrix must be previously defined by the init_pex_layer_matrix()
function.
layer1
Required. Specifies the polygon, edge, or text layer that is written to the output parasitic
extraction layout database for the StarRC tool.
lpp_layer
Optional. Stores OpenAccess (OA) or Cadence CDBA layer purpose pairs (LPPs) to
generate the StarRC OA_LAYER_MAPPING_FILE.
tagname
Required. Associates a user-defined name with a PXL layer. This tag name is used to
represent the layer in all files requiring a layer identity, including the
❍ Parasitic extraction runset report file
❍ Parasitic extraction cell port file
❍ Parasitic extraction process mapping file, StarRC MAPPING_FILE
❍ Parasitic extraction LPP mapping file, StarRC OA_LAYER_MAPPING_FILE
❍ Output parasitic extraction layout database (Milkyway) read by the StarRC tool
Each specified tag name must be unique and cannot be reused in other
pex_*_layer_map() function calls.
append_string
Optional. Specifies a string to be appended to the end of the corresponding mapping
entry within the StarRC MAPPING_FILE. That is, the string is used to add information to
the end of a StarRC mapping file command.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
pex_marker_layer_map(
matrix = pex_matrix,
layer1 = m1_port,
tagname = "m1_port"
);
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_process_map_file()
The pex_process_map_file() function generates a file handle for the output of the StarRC
parasitic extraction MAPPING_FILE. The file handle generated by this function is used as
an input argument to the pex_generate_database(), pex_generate_process_map(),
and pex_generate_results() functions.
Syntax
pex_process_map_file(
file = "string"
);
Returns
pex_process_map_file_handle
Arguments
file
Required. Specifies the output file name for StarRC MAPPING_FILE.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_qtf_layers()
The pex_qtf_layers() function specifies which layers from Quickcap Technology File
(QTF) are used during StarRC–QTF extraction flow. For example, if TCAD_GRD file has
accurately modeled layers M1 and above, then only layers below M1 need to be specified in
the qtf_layers argument.
The TCAD_GRD file contains conductor sheet resistances and models for 3-D parasitic
capacitance calculation. For information about creating the TCAD_GRD file, see the StarRC
User Guide and Command Reference.
Syntax
pex_qtf_layers(
matrix = pex_layer_matrix,
qtf_layers = {"string", ...}
);
Returns
void
Arguments
matrix
Required. Specifies the PEX layer matrix in which parasitic extraction details are stored
for use by the pex_generate_lpp_map() and pex_generate_process_map() parasitic
extraction functions. The matrix must be previously defined by the
init_pex_layer_matrix() function.
qtf_layers
Required. Specifies the CONDUCTOR layers from the QTF file.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
See the Example section of the pex_qtf_layer_map() function.
See Also
init_pex_layer_matrix()
pex_generate_lpp_map()
pex_generate_process_map()
pex_qtf_layer_map()
pex_qtf_layer_map()
The pex_qtf_layer_map() function stores, in the PEX layer matrix, mapping between PXL
layer objects and parasitic extraction QTF layer parameters. You must call this function for
every PXL layer variable you want to map to a StarRC CONDUCTOR process layer from the
QTF. The layer mapping is written to the conducting_layers section of the StarRC
MAPPING_FILE. Mapping information is also optionally written to the StarRC
OA_LAYER_MAPPING_FILE.
The QTF layer should be defined in the qft_layers argument of the pex_qtf_layers()
function; otherwise, any layer mapped to the QTF layer is ignored. If a layer is defined in
both the pex_conducting_layer_map() and pex_qtf_layer_map() functions, the StarRC
tool considers the QTF layer to have higher precedence. For information about creating a
mapping file, see the StarRC User Guide and Command Reference.
Note:
Use this function for device region capacitance extraction of finFET devices.
Syntax
pex_qtf_layer_map(
matrix = pex_layer_matrix,
layer1 = layer,
qtf_layer = "string",
tagname = "string",
append_string = "string" //optional
);
Returns
void
Arguments
matrix
Required. Specifies the PEX layer matrix in which parasitic extraction details are stored
for use by the pex_generate_lpp_map() and pex_generate_process_map() parasitic
extraction functions. The matrix must be previously defined by the
init_pex_layer_matrix() function.
layer1
Required. Specifies the polygon, edge, or text layer that is written to the output parasitic
extraction layout database for the StarRC tool.
qtf_layer
Required. Specifies the CONDUCTOR layer from the QTF.
tagname
Required. Associates a user-defined name with a PXL layer. This tag name is used to
represent the layer in all files requiring a layer identity.
Each specified tag name must be unique and cannot be reused in other
pex_*_layer_map() function calls.
append_string
Optional. Specifies a string to be appended to the end of the corresponding mapping
entry within the StarRC MAPPING_FILE. That is, the string is used to add comments to
the mapping file entries.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
These examples show how the pex_qtf_layers() and pex_qtf_layer_map() functions
interact.
qtf1
qtf2
map_qtf_layers
TG0N qtf1
See Also
init_pex_layer_matrix()
pex_generate_lpp_map()
pex_generate_process_map()
pex_qtf_layers()
pex_remove_layer_map()
The pex_remove_layer_map() function stores in the PEX layer matrix a PXL layer object
as a parasitic extraction remove layer. You must call this function for every layer you want to
output to the remove_layer section of the StarRC parasitic extraction MAPPING_FILE.
Syntax
pex_remove_layer_map(
matrix = pex_layer_matrix,
layer1 = layer,
tagname = "string",
append_string = "string" //optional
);
Returns
void
Arguments
matrix
Required. Specifies the PEX layer matrix in which parasitic extraction details are stored
for use by the pex_generate_database(), pex_generate_lpp_map(),
pex_generate_process_map(), and pex_generate_results() parasitic extraction
functions. (The pex_layer_matrix argument in these functions selects the PEX layer
matrix.) The matrix must be previously defined by the init_pex_layer_matrix()
function.
layer1
Required. Specifies the polygon, edge, or text layer that is written to the output parasitic
extraction layout database for the StarRC tool.
tagname
Required. Associates a user-defined name with a PXL layer. This tag name is used to
represent the layer in all files requiring a layer identity, including the
❍ Parasitic extraction runset report file
❍ Parasitic extraction cell port file
❍ Parasitic extraction process mapping file (StarRC MAPPING_FILE)
❍ Parasitic extraction LPP mapping file (StarRC OA_LAYER_MAPPING_FILE)
❍ Output parasitic extraction layout database (Milkyway) read by the StarRC tool
Each specified tag name must be unique and cannot be reused in other
pex_*_layer_map() function calls.
append_string
Optional. Specifies a string to be appended to the end of the corresponding mapping
entry within the StarRC MAPPING_FILE. That is, the string is used to add information to
the end of a StarRC mapping file command.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
The following example shows defining a new hash type that is used to select the layer
written to the output parasitic extraction layout database for the StarRC tool:
npterms : newtype hash of string to polygon_layer;
np_bulks : npterms;
pex_remove_layer_map(
matrix = pex_matrix,
layer1 = np_bulks["np_lp"],
tagname = "np_bulk"
);
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_runset_report_file()
The pex_runset_report_file() function generates a handle for the output of the parasitic
extraction runset report file. The file handle generated by this function is used as an input
argument to the pex_generate_database() and pex_generate_results() function.
Syntax
pex_runset_report_file(
file = "string"
);
Returns
pex_runset_report_file_handle
Arguments
file
Required. Specifies the output file name for the StarRC ICV_RUNSET_REPORT_FILE.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_simple_layer_maps()
The pex_simple_layer_maps() function explicitly specifies the tag name for a layer. You
can omit the use of this function and allow the simplified flow to automatically generate the
tag names for the layers.
The generated tag name might be unexpected or inconsistent with the layer name when
user-coded functions are involved in the related layer creation. In this case, you should
explicitly specify the tag names for the layers.
The pex_simple_layer_maps() function is designed for the simplified flow and should not
be used in combination with any other pex_*_layer_map() functions in the same PEX layer
matrix.
Syntax
pex_simple_layer_maps(
pex_matrix = pex_layer_matrix,
layer_maps = {layer1 = layer,
tagname = "string"}
);
Returns
void
Arguments
pex_matrix
Required. Specifies the PEX layer matrix in which parasitic extraction details are stored
for use by the pex_generate_simple_database(), and
pex_generate_simple_results() parasitic extraction functions. The matrix must be
previously defined by the init_pex_layer_matrix() function.
layer_maps
Required. Lists the polygon, edge, and text layers that are written to the output parasitic
extraction layout database for the StarRC tool.
❍ layer1. Required. Lists the polygon, edge, and text layers that are written to the
output parasitic extraction layout database for the StarRC tool.
❍ tagname. Required. Associates a user-defined name with a PXL layer. This tag name
is used to represent the layer in all files requiring a layer identity, including the
■ Parasitic extraction runset report file
■ Parasitic extraction cell port file
■ Parasitic extraction process mapping file (StarRC MAPPING_FILE)
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Example
pex_matrix = init_pex_layer_matrix(device_db);
pex_simple_layer_maps(pex_matrix, {{M1, "metal1"}, {M2, "metal2"}, ...}
);
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_generate_simple_database()
pex_generate_simple_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_unconnected_layer_map()
The pex_unconnected_layer_map() function writes unconnected layers to the output
parasitic extraction layout database for the StarRC tool and to the corresponding section in
the StarRC MAPPING_FILE. You can control the mapping section in which the layer is
written by specifying the layer type, including conductor, via, remove, marker, ignore, color,
or viewonly. Mapping information is also optionally written to the StarRC
OA_LAYER_MAPPING_FILE.
Syntax
pex_unconnected_layer_map(
matrix = pex_layer_matrix,
layer1 = {layer, ...},
layer_type = layertype,
process_layer = "string", //optional
lpp_layer = {lpp_polygon_layer = "string",
lpp_polygon_purpose = "string",
lpp_port_layer = "string",
lpp_port_purpose = "string",
lpp_subnode_layer = "string",
lpp_subnode_purpose = "string"}, //optional
tagname = "string", //optional
qtf_layer = "string",
append_string = "string", //optional
mapping_file_section_name = "string" //optional
);
Returns
void
Arguments
matrix
Required. Specifies the PEX layer matrix in which parasitic extraction details are stored
for use by the pex_generate_database(), pex_generate_lpp_map(),
pex_generate_process_map(), and pex_generate_results() parasitic extraction
functions. (The pex_layer_matrix argument in these functions selects the PEX layer
matrix.) The matrix must be previously defined by the init_pex_layer_matrix()
function.
layer1
Required. Lists the polygon, edge, and text layers that are written to the output parasitic
extraction layout database for the StarRC tool.
layer_type
Required. Specifies the layer-type section in which the layer is written in the StarRC
MAPPING_FILE. The layers must all be unconnected unless the layer_type is
IGNORE_CAP_LAYER_TYPE or USER_DEFINED_LAYER_TYPE. If the layer_type is
IGNORE_CAP_LAYER_TYPE, some or all of the layers must be unconnected.
Note:
If all of the layers are connected, use the pex_ignore_cap_layer_map() function
instead of the pex_unconnected_layer_map() function.
If layer_type is USER_DEFINED_LAYER_TYPE, one or more layers will be specified in
layer1, and the process_layer, lpp_layer, and qtf_layer arguments are ignored.
All of the other layers in layer1, except the first layer, are declared in any of the following
mapping functions:
pex_conducting_layer_map()
pex_via_layer_map()
pex_marker_layer_map()
pex_remove_layer_map()
pex_viewonly_layer_map()
pex_color_layer_map()
pex_unconnected_layer_map()
In this case, layer_type is merely applied to the first layer in layer1, and it causes the
first layer to be written to the StarRC tool. You must declare the mappings of the other
layers in layer1.
Table 3-30 shows the layer types that can be written into the StarRC MAPPING_FILE.
Table 3-30 StarRC MAPPING_FILE Layer Types
process_layer
Required. Specifies the corresponding layer from the StarRC TCAD_GRD_FILE. This
argument must be defined if the layer_type argument is CONDUCTING_LAYER_TYPE,
VIA_LAYER_TYPE, or COLOR_LAYER_TYPE.
lpp_layer
Optional. Stores OpenAccess (OA) or Cadence® CDBA layer purpose pairs (LPPs) to
generate the StarRC OA_LAYER_MAPPING_FILE.
tagname
Required. Associates a user-defined name with a PXL layer. This tag name is used to
represent the layer in all files requiring a layer identity, including the
❍ Parasitic extraction runset report file
❍ Parasitic extraction cell port file
❍ Parasitic extraction process mapping file (StarRC MAPPING_FILE)
❍ Parasitic extraction LPP mapping file (StarRC OA_LAYER_MAPPING_FILE)
❍ Output parasitic extraction layout database (Milkyway) read by the StarRC tool
Restrictions for the tag name are:
❍ Square brackets ([]) are not allowed.
❍ Each specified tag name must be unique and cannot be reused in other
pex_*_layer_map() function calls.
qtf_layer
Required. Specifies the CONDUCTOR layer from the QTF. This argument is required if
the layer_type argument is QTF_LAYER_TYPE.
append_string
Optional. Specifies a string to be appended to the end of the corresponding mapping
entry within the StarRC MAPPING_FILE. That is, the string is used to add information to
the end of a StarRC mapping file command.
mapping_file_section_name
Optional. Specifies a mapping file section name and the layers to be written in an entry.
This argument is referenced only when layer_type is USER_DEFINED_LAYER_TYPE.
In this case, layer_type must not be empty. The following layer types are not allowed:
conducting_layers
via_layers
marker_layers
remove_layers
viewonly_layers
color_layers
ignore_cap_layers
qtf_layers
map_qtf_layers
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Example
In this example, layer TEST_UN is not connected, nor is it the body layer of any devices. To
write this layer into the output database for StarRC, you declare the layer in the
pex_unconnected_layer_map() function with the layer_type CONDUCTING_LAYER_TYPE
argument.
Using the following runset
TEST_UN = assign( { {16, 0} } );
….
pex_matrix = init_pex_layer_matrix(device_db);
pex_conducting_layer_map(pex_matrix, M2, "metal2", tagname = "M2");
pex_conducting_layer_map(pex_matrix, M1, "metal1", tagname = "M1");
pex_unconnected_layer_map(
pex_matrix,
layer1 = TEST_UN,
process_layer = "metal1",
lpp_layer = {"metal1", "T1", "T3", "nil", "T4", "T5"},
tagname = "TEST_UN",
layer_type = CONDUCTING_LAYER_TYPE,
qtf_layer = "Q1",
append_string = "QA_TEST"
);
The following layer mapping is written into the conducting_layer section in the GRD mapping
file:
conducting_layers
M2 metal2
M1 metal1
field_poly fpoly
ngate gpoly
pgate gpoly
nsd SUBSTRATE
psd SUBSTRATE
welltie SUBSTRATE
subtie SUBSTRATE
NWELL SUBSTRATE
TEST_UN metal1 QA_TEST
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
pex_viewonly_layer_map()
pex_via_layer_map()
The pex_via_layer_map() function stores, in the PEX layer matrix, mapping between PXL
layer objects and parasitic extraction via layer parameters. You must call this function for
every layer you want to map to a StarRC layer via process layer. The layer mapping is
written to the via_layers section of the StarRC parasitic extraction MAPPING_FILE.
Mapping information is also optionally written to the StarRC OA_LAYER_MAPPING_FILE.
Syntax
pex_via_layer_map(
matrix = pex_layer_matrix,
layer1 = layer,
process_layer = "string",
lpp_layer = {lpp_polygon_layer = "string",
lpp_polygon_purpose = "string",
lpp_port_layer = "string",
lpp_port_purpose = "string",
lpp_subnode_layer = "string",
lpp_subnode_purpose = "string"}, //optional
tagname = "string",
device_layer = true | false, //optional
model_name = "string", //optional
via_resistance = {rpv = double, area = double}, //optional
max_via_array_length = double, //optional
max_via_array_spacing = double, //optional
append_string = "string" //optional
);
Returns
void
Arguments
matrix
Required. Specifies the PEX layer matrix in which parasitic extraction details are stored
for use by the pex_generate_database(), pex_generate_lpp_map(),
pex_generate_process_map(), and pex_generate_results() parasitic extraction
functions. (The pex_layer_matrix argument in these functions selects the PEX layer
matrix.) The matrix must be previously defined by the init_pex_layer_matrix()
function.
layer1
Required. Specifies the polygon, edge, or text layer that is written to the output parasitic
extraction layout database for the StarRC tool.
process_layer
Required. Specifies the via layer from the StarRC TCAD_GRD_FILE.
lpp_layer
Optional. Stores OpenAccess (OA) or Cadence CDBA layer purpose pairs (LPPs) to
generate the StarRC OA_LAYER_MAPPING_FILE.
tagname
Required. Associates a user-defined name with a PXL layer. This tag name is used to
represent the layer in all files requiring a layer identity, including the
❍ Parasitic extraction runset report file
❍ Parasitic extraction cell port file
❍ Parasitic extraction process mapping file (StarRC MAPPING_FILE)
❍ Parasitic extraction LPP mapping file (StarRC OA_LAYER_MAPPING_FILE)
❍ Output parasitic extraction layout database (Milkyway) read by the StarRC tool
Each specified tag name must be unique and cannot be reused in other
pex_*_layer_map() function calls.
device_layer
Optional. Corresponds to the MAPPING_FILE option of the same name. See the StarRC
User Guide and Command Reference manual for more information. The default is
false.
model_name
Optional. Corresponds to the StarRC MAPPING_FILE option MODEL. See the StarRC
User Guide and Command Reference manual for more information.
via_resistance
Optional. Stores resistance per via (rpv) and area as an ordered pair. Corresponds to the
StarRC MAPPING_FILE options rpv and area. See the StarRC User Guide and
Command Reference manual for more information.
max_via_array_length
Optional. Corresponds to the StarRC MAPPING_FILE option of the same name. See the
StarRC User Guide and Command Reference manual for more information.
max_via_array_spacing
Optional. Corresponds to the StarRC MAPPING_FILE option of the same name. See the
StarRC User Guide and Command Reference manual for more information.
append_string
Optional. Specifies a string to be appended to the end of the corresponding mapping
entry within the StarRC MAPPING_FILE. That is, the string is used to add information to
the end of a StarRC mapping file command.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
pex_via_layer_map(
matrix = pex_matrix,
layer1 = v1,
process_layer = "VIA1",
tagname = "v1",
via_resistance = {2, 0.001}
);
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_viewonly_layer_map()
pex_viewonly_layer_map()
The pex_viewonly_layer_map() function stores extra PXL layer objects within the output
StarRC parasitic extraction layout database. By default, only connected layers and resistor
device body layers can to be written to this database. However, the
pex_viewonly_layer_map() function enables additional layers not meeting these default
criteria to be written as well. Layers specified by this function are also written to the
view-only layers section of the StarRC MAPPING_FILE generated by the
pex_generate_process_map() and pex_generate_results() functions.
Syntax
pex_viewonly_layer_map(
matrix = pex_layer_matrix,
layer1 = layer,
lpp_layer = {lpp_polygon_layer = "string",
lpp_polygon_purpose = "string",
lpp_port_layer = "string",
lpp_port_purpose = "string",
lpp_subnode_layer = "string",
lpp_subnode_purpose = "string"}, //optional
tagname = "string",
append_string = "string" //optional
);
Returns
void
Arguments
matrix
Required. Specifies the PEX layer matrix in which parasitic extraction details are stored
for use by the pex_generate_database(), pex_generate_lpp_map(),
pex_generate_process_map(), and pex_generate_results() parasitic extraction
functions. (The pex_layer_matrix argument in these functions selects the PEX layer
matrix.) The matrix must be previously defined by the init_pex_layer_matrix()
function.
layer1
Required. Specifies the polygon, edge, or text layer that is written to the output parasitic
extraction layout database for the StarRC tool.
lpp_layer
Optional. Stores OpenAccess (OA) or Cadence CDBA layer purpose pairs (LPPs) to
generate the StarRC OA_LAYER_MAPPING_FILE.
tagname
Required. Associates a user-defined name with a PXL layer. This tag name is used to
represent the layer in all files requiring a layer identity, including the
❍ Parasitic extraction runset report file
❍ Parasitic extraction cell port file
❍ Parasitic extraction process mapping file (StarRC MAPPING_FILE)
❍ Parasitic extraction LPP mapping file (StarRC OA_LAYER_MAPPING_FILE)
❍ Output parasitic extraction layout database (Milkyway) read by the StarRC tool
Each specified tag name must be unique and cannot be reused in other
pex_*_layer_map() function calls.
append_string
Optional. Specifies a string to be appended to the end of the corresponding mapping
entry within the StarRC MAPPING_FILE. That is, the string is used to add information to
the end of a StarRC mapping file command.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function does not require any additional IC Validator licenses.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
pex_viewonly_layer_map(
matrix = pex_matrix,
layer1 = capbody,
lpp_layer = {"CAP", "drawing", "nil", "nil", "nil", "nil"},
tagname = "capbody"
);
See Also
init_pex_layer_matrix()
pex_cell_extents_file()
pex_cell_port_file()
pex_color_layer_map()
pex_conducting_layer_map()
pex_generate_database()
pex_generate_lpp_map()
pex_generate_process_map()
pex_generate_results()
pex_ignore_cap_layer_map()
pex_library_layer_map_file()
pex_lpp_map_file()
pex_marker_layer_map()
pex_process_map_file()
pex_remove_layer_map()
pex_runset_report_file()
pex_via_layer_map()
Syntax
point_touching_edge(
layer1 = data_layer,
layer2 = data_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_point_touching_edge(
layer1 = data_layer,
layer2 = data_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
See Also
inside() and not_inside()
inside_point_touching_edge() and not_inside_point_touching_edge()
outside() and not_outside()
outside_point_touching_edge() and not_outside_point_touching_edge()
outside_touching() and not_outside_touching()
outside_touching_edge() and not_outside_touching_edge()
polygon_centers()
The polygon_centers() function creates a square at the center of the extents of each
polygon in the input layer.
Syntax
polygon_centers(
layer1 = polygon_layer,
shape_size = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
shape_size
Optional. Specifies the size of the squares. The value must be positive. It is rounded to
the nearest even multiple of the internal resolution, with a minimum value of twice the
internal resolution. The internal_resolution argument of the
resolution_options() function sets the internal resolution. The default is
DRC_ERROR_BOX, which has a default of 0.1.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
Figure 3-103 shows how the polygon_centers() function creates squares for each
polygon in the specified layer.
Result = polygon_centers(layer1 = metal1, shape_size = 2.5);
metal1
Result
See Also
polygon_features()
vertex()
polygon_extents()
The polygon_extents() function creates rectangles from the extents of each layer1
polygon.
Syntax
polygon_extents(
layer1 = polygon_layer,
rotate = NONE | FORTY_FIVE, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
inside_layer = polygon_layer //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
rotate
Optional. Specifies the orientation of the extents rectangle. The default is NONE.
❍ NONE. Specifies that the extents rectangle consists of horizontal and vertical edges.
❍ FORTY_FIVE. Specifies that the extents rectangle is the smallest rectangle consisting
of 45-degree edges that contains the polygon.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
inside_layer
Optional. Creates rectangles that are the total extents of all the layer1 polygons inside
each inside_layer polygon.
Note:
If you use this argument, the rotate argument is set to NONE.
For example,
polygon_extents(
layer1 = layerA,
inside_polygon = layerB
);
merged area
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Figure 3-105 shows how rectangles are created for each polygon in the specified layer.
Result = polygon_extents(data);
data
Result
See Also
cell_extent()
edge_extents()
layer_extent()
polygon_features()
The polygon_features() function creates user-defined geometries based on
characteristics of the input polygons. The polygons are defined as a list of xy coordinates
with each vertex listed one time. The points are ordered clockwise around the outside of the
polygon. Donuts are defined by boundaries that abut themselves.
This function calls a remote function for each polygon in the input layer. The remote function
calls various utility functions that operate on the current polygon to create new polygons and
to write these polygons to the output layer. The polygons created by this function are merged
on output.
Syntax
polygon_features(
layer1 = polygon_layer,
polygon_function = function,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
files = {ascii_file_handle, ...}, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
polygon_function
Required. Specifies the remote function. See “Polygon Features Utility Functions” on
page 4-174 for more information about the utility functions you can use to define a
remote function.
processing_mode
Optional. Specifies how the polygons are processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Polygons are defined only within the context of each individual cell.
❍ HIERARCHICAL. Polygons are defined within the context of the lowest cell that
contains the complete hierarchical polygon.
files
Optional. Specifies the files that can be written to using the pf_fnote() function. The
files are defined using the fopen() function. The order of the files determines the index
for accessing the files in the remote functions; the first file listed has an index of 0 (zero).
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
where
user_pgon_center : function(void) returning void
{
curr_pgon = pf_get_current_polygon();
pgon = pf_polygon_center_square(curr_pgon, 0.01);
pf_save_polygon(pgon);
}
where
user_pgon_coordsX2 : function(void) returning void
{
curr_pgon = pf_get_current_polygon();
pgon_area = pf_polygon_area(curr_pgon);
if (pgon_area > 10000.0)
{
out_pgon = pf_new_polygon();
num_coord = pf_polygon_num_coordinates(curr_pgon);
for (i = 0 to num_coord - 1)
{
x = pf_polygon_coordinate_x(curr_pgon, i);
y = pf_polygon_coordinate_y(curr_pgon, i);
pf_set_polygon_coordinate(out_pgon, x*2, y*2, i);
}
pf_save_polygon(out_pgon);
/* This call writes to the summary file,
and to screen when you use the -verbose option */
note("pgon area = " + pgon_area +
", num pgon coordinates = " + num_coord + "\n");
}
}
See Also
polygon_centers()
polygons()
vertex()
polygons()
The polygons() function creates polygons in the top cell using specified coordinates. The
function can generate multiple polygons. Intersecting polygons are merged in the result.
Syntax
polygons(
coordinates = {{{x = double, y = double}, ...}, ...},
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
coordinates
Required. Lists the xy coordinate pairs for each created polygon. These coordinates are
scaled by the magnification_factor argument of the library() function. The
coordinates can be either
❍ Two coordinates, which are interpreted as the opposing corners of a rectangle.
❍ Three or more coordinates, which define the outer boundary of a closed polygon. You
do not need to repeat the first coordinate at the end of the list. The coordinates can
be ordered in either direction around the polygon.
Note:
Polygons, or portions of polygons with no area, are ignored. Areas of self-intersection
are left empty and a warning is given.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
Figure 3-106 shows an example of the polygons() function.
mypolys = polygons({
{{-1,-1}, {0,0}, {-1,0}}, // small triangle at left corner of image
{{3.5,4.5}, {10,10}}, // big rectangle in image
{{5,5}, {3,4}} // small rectangle in image
});
10
5
4
-1 3 5 10
-1
See Also
polygon_features()
property_annotation_file()
The property_annotation_file() function defines an annotation file name. This file is
specified in the output_file argument of write_annotation_file().
Syntax
property_annotation_file(
file = "string" //optional
);
Returns
property_annotation_file_handle
Arguments
file
Optional. Specifies the annotation file name. The file must be gzipped and have the
extension .gz. The default is "anno.gz".
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
extract_devices()
write_annotation_file()
property_layer_convert()
The property_layer_convert() function copies a version of the polygon layer from the
original property layer. This polygon layer inherits the layer1 properties that were originally
saved using the nps_read_property() utility function.
For DRC and device property computations, the property on the output polygon layer can be
read using the df_get_polygon_double_property() and
dev_get_polygon_double_property() utility functions, respectively.
Syntax
property_layer_convert(
layer1 = property_layer
);
Returns
polygon layer
Arguments
layer1
Required. Specifies the property layer.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
property_to_net()
The property_to_net() function attaches properties to nets. A remote function is
executed one time for each net in the connect database. Utility routines are provided in the
remote function to aid in generating the desired net property value.
This function is typically used in conjunction with the annotate_by_property(),
external*(), and drc_features*() functions in delta voltage applications.
Note:
If the connect() or incremental_connect() function processes the connect database
generated by property_to_net(), the attached net properties are removed. To add
layers to the connect database and retain the net properties, use the stamp() function.
Syntax
property_to_net(
connect_sequence = connect_database,
net_property_function = function,
layer_groups = {"string" => {polygon_layer, ...}, //optional
...},
sync_layers = {{"string1" => polygon_layer1, //optional
"string2" => polygon_layer2},
...},
sync_name = "string"
);
Returns
connect database
Arguments
connect_sequence
Required. Specifies the connect database.
net_property_function
Required. Specifies the remote function containing the conditions that extract the
layer-based properties and various net-based geometric characteristics needed to
generate the desired net property.
The remote function is called one time for every net in the input connect database. It
extracts properties from polygons on layers specified by the layer_groups argument
that are on the net being processed.
See “Property to Net Utility Functions” in Chapter 4 for more information about the utility
functions you can use to define this remote function.
layer_groups
Optional. Specifies the hash of string to polygon layers. The strings are used by the
remote function to access layer-based properties and net-based geometric
characteristics on a given net. The default is an empty hash.
sync_layers
Optional. Lists the hash of string to polygon layer. The strings are used by the remote
function to access polygons that can sync nets. If a synchronized polygon touches
polygons from different nets, those two nets can be considered in sync. The default is an
empty hash.
Note:
Nets are typically declared in sync in delta voltage applications when both nets are
turned to high or low voltage at the same time.
sync_name
Optional. Specifies the property name to be used to store the sync ID property value.
Note that sync net properties are created only for nets that are in sync with other nets.
Nets that are in sync have the same sync ID property value.
The sync net property is generated automatically; therefore, remote block runset code is
not needed. You can use this property name later in the annotate_by_property()
function to obtain the sync ID property values stored by property_to_net().
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
The following example shows the property_to_net() function usage in a delta voltage
flow:
METAL1_H = text_to_double_property( METAL1_HIGH, "high", MAX);
METAL1_L = text_to_double_property( METAL1_LOW, "low", MIN);
ptn_save_double_property("high", vh);
ptn_save_double_property("low", vl);
}
cdb_dv = property_to_net(
connect_sequence = CONNECT_DB_DV,
sync_layers = {
{"m1"=>METAL1, "m1_sync"=>METAL1_SYNC},
},
net_property_function = net_voltage,
layer_groups = {
"mvh"=>METAL1_H,
"mvl"=>METAL1_L
},
sync_name = "sync"
);
METAL11_prop = annotate_by_property(cdb_dv, METAL1, {"high", "low",
"sync"});
METAL1_H_prop = select_by_double_property(METAL1_prop, "high", < 1);
METAL1_L_prop = select_by_double_property(METAL1_prop, "low", < 2);
if (df_polygon_count(ps) == 2) {
stat = true;
for (i=0 to 1) {
stat = stat && df_get_polygon_double_property(ps, i, "high",
vh[i]);
stat = stat && df_get_polygon_double_property(ps, i, "low",
vl[i]);
}
if(df_polygon_same_net({ps})){
if (stat && (dblgt(abs(vh[0] - vh[1]) ,0.10)) || (dblgt(abs(vl[0]
- vl[1]) ,0.10))) {
df_save_data(ce);
}
}
}
}
drc_features_error (
include_touch = ALL,
primary_layer = errs,
secondary_layers = {"met"=>METAL1_prop},
drc_function = dv_space,
output_from_layer = errs
);
See Also
annotate_by_property()
text_to_double_property()
prototype_options()
The prototype_options() function defines the criteria for the creation of prototype cells
during hierarchical preprocessing. (The creation of prototype cells is a hierarchical
optimization.) If this function is not in the runset, it is automatically invoked with the default
values. This function can be called only one time in a runset.
• Cells placed at a rotation that is not a multiple of 90 degrees are replaced with prototype
cells.
• Cells that are placed with a magnification other than 0 are replaced with prototype cells.
• Relatively large cells that are rotated can be replaced with prototype cells to facilitate
data management.
When new prototype cells are generated, the new cell names contain a suffix indicating the
rotation and reflection of the original cell that is represented by the new prototype cell.
Common angles are abbreviated by the quadrant where they are located. Unusual angles
have longer, more descriptive suffixes. Table 3-31 shows common cell-naming conventions.
Table 3-31 Common Cell-Naming Conventions
INV_1Q 0 no reflection
INV_2Q 90 no reflection
INV_1R 0 reflected
INV_2R 90 reflected
INV_45D_0R 45 no reflection
In addition, a new cell named with the suffix _0x is generated to contain all polygon content
of the original cell that is unaffected by directional operations in the runset. This _0x cell is
instantiated by each generated prototype cell from Table 3-31.
In runsets that have extensive use of directional operations, creation of prototype cells can
provide improved performance. Examples of directional operations are shrink(), grow(),
and move(), and the use of the direction argument in spacing checks, such as
external1(). The prototype cells provide a hierarchical location for the results of directional
operations. Otherwise, storing the directional results can cause considerable flattening of
data.
Note:
The creation of prototype cells can cause a significant increase in the number of cells.
This increase causes overhead for the entire runset. Because most applications have
few directional operations, do not use prototype cells unless a specific performance
problem with a directional operation is detected.
If prototype cells are desired, set symmetry to AUTOMATIC. The prototype cells are created
in accordance with directional operations that appear in the runset.
Warning:
Other settings of symmetry are for debugging or advanced applications only and should
be used with caution.
Syntax
prototype_options(
large_cells = true | false, //optional
symmetry = FULL | HORIZONTAL_AXIS | VERTICAL_AXIS |
DUAL | ROTATIONAL | ASYMMETRIC | AUTOMATIC //optional
);
Returns
void
Arguments
large_cells
Optional. Specifies whether relatively large cells that are rotated can be replaced with
prototype cells. This argument affects only large cells, and it is independent of the
symmetry argument. The default is true.
symmetry
Optional. Describes the symmetry of the directional inputs in the runset. This argument
affects all cells regardless of cell size, and it is independent of the large_cells
argument. The default is FULL.
❍ FULL. Does not create additional prototype cells. Use this option when there are no
directional operations in the runset, or there is complete symmetry of directional
specifications.
❍ AUTOMATIC. Automatically chooses one of the other symmetry settings.
When not set to FULL,
❍ Cells are prototyped in accordance with the specified axes of symmetry to resolve the
instance specificity of directional operations.
Warning:
The remaining settings of the symmetry argument are only for debugging or
advanced applications. Use these settings with caution.
❍ HORIZONTAL_AXIS. Prototypes cells to facilitate directional inputs that have a
horizontal axis of symmetry.
❍ VERTICAL_AXIS. Prototypes cells to facilitate directional inputs that have a vertical
axis of symmetry.
❍ DUAL. Processes hierarchy to improve performance of directional commands for cell
placements with 90 or 270 angle.
❍ ROTATIONAL. Prototypes cells to facilitate directional inputs that have rotational
symmetry, such as for using with the extend_edge() function.
❍ ASYMMETRIC. Replaces all cells that are rotated or reflected with prototype cells. This
results in a hierarchy without any rotation or reflection. Use this option when there is
no symmetry in directional operations.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
prototype_options ( symmetry = DUAL );
See Also
grow()
move()
shrink()
pull_down()
The pull_down() function creates a copy of the layer1 layer by moving data down to the
lowest possible hierarchical level. The intersection of the data overlapping all placement
extents of a given cell is cut out and moved into the cell. Pulled data is removed from its
original position. The extents are determined by all layers that appear in assign functions.In
this context,
• Data refers to any active area.
• Moved down refers to being translated from ancestors into descendants.
• Depth is measured from bottom up, so lowest or deepest refers to how close the cell is
to the leaf cells, not how far it is from the top cell.
Syntax
pull_down(
layer1 = polygon_layer,
duplicate = LOWEST | ALL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer that is copied.
duplicate
Optional. Specifies which descendants can have copies of the data moved into them. In
cases where sibling cells overlap geographically, data moves down multiple branches of
a given subtree. The default is LOWEST.
❍ LOWEST. Duplicates data only in those descendants that are at the lowest level to
which data is moving.
In the hierarchical tree example shown in Figure 3-107,
■ Data in cell T that can be moved down into both cell A and cell B appears only in
A because B is not as deep as A.
■ Data in cell T that can be moved down into both cell A and cell C appears in both
because A and C are at the deepest level to which data is moving.
A B
❍ ALL. Duplicates data in any branch of the subtree, even when the destination is not at
the lowest level to which data is moving.
In the preceding hierarchical tree example, data in cell T that can be moved down into
both cell A and cell B appears in both.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
new_gate = pull_down(gate);
See Also
level()
level_edge()
level_to()
level_to_edge()
pull_down_edge()
pull_down_to()
pull_down_to_edge()
pull_down_edge()
The pull_down_edge() function creates a copy of the layer1 layer by moving data down
to the lowest possible hierarchical level. The intersection of the data overlapping all
placement extents of a given cell is cut out and moved into the cell. The pulled data is
removed from its original position. The extents are determined by all layers that appear in
assign functions. In this context,
• Data refers to edges or edge segments.
• Moved down refers to being translated from ancestors into descendants.
• Depth is measured from bottom up, so lowest or deepest refers to how close the cell is
to the leaf cells, not how far it is from the top cell.
Syntax
pull_down_edge(
layer1 = edge_layer,
duplicate = LOWEST | ALL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge layer that is copied.
duplicate
Optional. Specifies which descendants can have copies of the data moved into them. In
cases where sibling cells overlap geographically, data moves down multiple branches of
a given subtree. The default is LOWEST.
See the hierarchical tree example shown in Figure 3-107 in the pull_down() function
description for more information.
❍ LOWEST. Duplicates data only in those descendants that are at the lowest level to
which data is moving.
❍ ALL. Duplicates data in any branch of the subtree, even when the destination is not at
the lowest level to which data is moving.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
new_gate_edges = pull_down_edge(gate_edges);
See Also
level()
level_edge()
level_to()
level_to_edge()
pull_down()
pull_down_to()
pull_down_to_edge()
pull_down_to()
The pull_down_to() function creates a copy of the layer1 polygon layer by moving data
down to the lowest possible hierarchical level of cells containing layer2. The intersection of
the data overlapping all placement extents of a given cell is cut out and moved into the cell.
The pulled data is removed from its original position. The extents are determined by all
layers that appear in assign functions. In this context,
• Data refers to any active area.
• Moved down refers to being translated from ancestors into descendants.
• Depth is measured from bottom up, so lowest or deepest refers to how close the cell is
to the leaf cells, not how far it is from the top cell.
Syntax
pull_down_to(
layer1 = polygon_layer,
layer2 = data_layer,
duplicate = LOWEST | ALL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer that is copied.
layer2
Required. Specifies the layer to which data is pulled.
duplicate
Optional. Specifies which descendants can have copies of the data moved into them. In
cases where sibling cells overlap geographically, data moves down multiple branches of
a given subtree. The default is LOWEST.
See the hierarchical tree example shown in Figure 3-107 in the pull_down() function
description for more information.
❍ LOWEST. Duplicates data only in those descendants that are at the lowest level to
which data is moving.
❍ ALL. Duplicates data in any branch of the subtree, even when the destination is not at
the lowest level to which data is moving.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
green = pull_down_to(blue, layer2);
Figure 3-108 shows cell A, placed twice, with extents shown in black. Two blue polygons on
layer1 in the parent cell overlap the extents of cell A.
Figure 3-110 shows that the data is removed from the parent.
Figure 3-110 pull_down_to() Function Example
See Also
level()
level_edge()
level_to()
level_to_edge()
pull_down()
pull_down_edge()
pull_down_to_edge()
pull_down_to_edge()
The pull_down_to_edge() function creates a copy of the layer1 edge layer by moving
data down to the lowest possible hierarchical level of cells containing layer2. The
intersection of the data overlapping all placement extents of a given cell is cut out and
moved into the cell. The pulled data is removed from its original position. The extents are
determined by all layers that appear in assign functions. In this context,
• Data refers to edges or edge segments.
• Moved down refers to being translated from ancestors into descendants.
• Depth is measured from bottom up, so lowest or deepest refers to how close the cell is
to the leaf cells, not how far it is from the top cell.
Syntax
pull_down_to_edge(
layer1 = edge_layer,
layer2 = data_layer,
duplicate = LOWEST | ALL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge layer that is copied.
layer2
Required. Specifies the layer to which data is pulled.
duplicate
Optional. Specifies which descendants can have copies of the data moved into them. In
cases where sibling cells overlap geographically, data moves down multiple branches of
a given subtree. The default is LOWEST.
See the hierarchical tree example shown in Figure 3-107 in the pull_down() function
description for more information.
❍ LOWEST. Duplicates data only in those descendants that are at the lowest level to
which data is moving.
❍ ALL. Duplicates data in any branch of the subtree, even when the destination is not at
the lowest level to which data is moving.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
new_gate_edges = pull_down_to_edge(gate_edges, diff);
See Also
level()
level_edge()
level_to()
level_to_edge()
pull_down()
pull_down_edge()
pull_down_to()
python_validate()
The python_validate() function resolves the directory location of the specified Python
module file, by using the IC Validator -I command-line option, and checks the file for Python
parse errors. You can specify the returned, fully-qualified directory path to the Python
module file with the module_file argument in the eerc_analyze_netlist() function. You
can also use the python_validate() function just to check for Python parse errors in
user-defined Python modules.
Syntax
python_validate(
filename = "string"
);
Returns
string or void
Arguments
filename
Required. Specifies the name of the Python module file to be located or checked for
Python parse errors.
Command Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the IC Validator Advanced license.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information.
Examples
This example shows how to use the python_validate() function to get the full path to the
Python module file used in a subsequent eerc_analyze_netlist() function. The function
also checks the check.py Python module file for Python parse errors.
The runset files, including the Python module files, are located in the Includes subdirectory
of the current working directory.
The following command calls the IC Validator tool:
icv -I Includes eerc.rs
See Also
eerc_analyze_netlist()
read_group()
The read_group() function imports layers written by the write_group() function in a
previous IC Validator run to a specified library. The read_group() function matches cells by
name and matches cell placements by xy position, rotation, and reflection. For the returned
polygon layer, the read_group() function flattens cells from the input layer that do not
match a placement in the current run. Flattening occurs for
• Cell placements that moved slightly or were deleted
• Cells that are in the delete or explode lists
• Cells whose names have changed
Before using the read_group() function, the input library must have been defined using the
group_library() function and written using the write_group() function in a previous run.
Note:
Multiple read_group(), read_group_edge(), and read_group_text() functions can
use the same handle within a run; however, they cannot have the same handle as a
write_group() function within that run.
Syntax
read_group(
input_library = group_library_handle,
label = "string",
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
input_library
Required. Specifies the group library handle. The handle is defined using the
group_library() function.
label
Required. Specifies a string defined by the write_group() function that used to
reference the saved layer.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
run1.rs:
POLY = assign({{17}});
. . .
aHandle = group_library("./save1");
/*
write_group() writes layer POLY to "./save1" as "L17" for future use.
POLY is output from any function.
L17 is any label (or name).
*/
run2.rs:
. . .
aHandle = group_library("./save1");
/*
read_group() retrieves the previously saved layer, "L17",
from "./save1".
Use the same label "L17" as used by write_group() in run1.rs.
*/
/*
Use POLY layer in any appropriate function.
*/
See Also
group_library()
read_group_edge()
read_group_text()
write_group()
read_group_edge()
The read_group_edge() function imports layers written by the write_group() function in
a previous IC Validator run to a specified library. The read_group_edge() function matches
cells by name and matches cell placements by xy position, rotation, and reflection. For the
returned edge layer, the read_group_edge() function flattens cells from the input layer that
do not match a placement in the current run. Flattening occurs for
• Cell placements that moved slightly or were deleted,
• Cells that are in the delete or explode lists,
• Cells whose names have changed,
Before using the read_group_edge() function, the input library must have been defined
using the group_library() function and written using the write_group() function in a
previous run.
Note:
Multiple read_group(), read_group_edge(), and read_group_text() functions can
use the same handle within a run; however, they cannot have the same handle as a
write_group() function within that run.
Syntax
read_group_edge(
input_library = group_library_handle,
label = "string",
name = "layer_label" //optional
);
Returns
edge layer
Arguments
input_library
Required. Specifies the group library handle. The handle is defined using the
group_library() function.
label
Required. Specifies a string defined by a write_group() function that is used to
reference the saved layer.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the read_group() function for more information.
See Also
group_library()
read_group()
read_group_text()
write_group()
read_group_text()
The read_group_text() function imports layers written by the write_group() function in
a previous IC Validator run to a specified library. The read_group_text() function matches
cells by name and discards mismatched cells from the input layer.
Before using the read_group_text() function, the input library must have been defined
using the group_library() function and written using the write_group() function in a
previous run.
Note:
Multiple read_group(), read_group_edge(), and read_group_text() functions can
use the same handle within a run; however, they cannot have the same handle as a
write_group() function within that run.
Syntax
read_group_text(
input_library = group_library_handle,
label = "string",
name = "layer_label" //optional
);
Returns
text layer
Arguments
input_library
Required. Specifies the group library handle. The handle is defined using the
group_library() function.
label
Required. Specifies a string defined by a write_group() function that is used to
reference the saved layer.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the read_group() function for more information.
See Also
group_library()
read_group()
read_group_edge()
write_group()
read_layout_netlist()
The read_layout_netlist() function reads one of the two netlists compared in the
netlist-versus-netlist flow and translates it to IC Validator netlist format, if the netlist is not
already in that format and uncompressed. In a netlist-versus-netlist flow, the netlist imported
by the read_layout_netlist() function is designated as the layout netlist, even though
this netlist can be generic and can originate from any source.
Note:
In a SPICE flow (that is, when the lvs_netlist_flow argument of the run_options()
function is SPICE), the schematic file, which is in SPICE format, is not translated. For a
SPICE flow, the -sf command-line option can only be set to SPICE.
The result of this function is used by the compare() function. The NetTran utility does the
translation.
Note:
When you set the -lnf command-line option to ICV, the read_layout_netlist()
function does not run NetTran. In this situation, the IC Validator tool uses the netlist
specified by the -ln option for LVS compare.
Syntax
read_layout_netlist(
layout_file = {{filename = "string",
format = SPICE | VERILOG | ICV},
...},
global_nets = {"string", ...}, //optional
expand_multiple_devices = true | false, //optional
uppercase = true | false, //optional
cell = "string", //optional
add_cell_ports = {"string", ...}, //optional
output_netlist_file = "string", //optional
remove_devices = {"string", ...}, //optional
remove_device_instances = {"string", ...}, //optional
spice_settings = {short_out_devices = {"string", ...},
short_voltage_threshold = double,
remove_instance_prefix = true | false,
remove_device_prefix = true | false,
device_map_file = "string",
ignore_cdl_resi = true | false,
resolve_duplicate_instances = true | false,
duplicate_port = ABORT | WARNING,
scale = double}, //optional
verilog_settings = {global_ground = "string",
global_power = "string",
bus_start_bit = HIGH | LOW,
global_net_map_file = "string",
retain_backslash = true | false, //optional
prefer_module_supply = true | false, //optional
Returns
layout_netlist_file_handle
Arguments
layout_file
Required. Specifies a list of layout files, including the optional path, and their format. The
formats are SPICE, VERILOG, and ICV. The default is ICV.
The file name can be overwritten with the -ln command-line option, and the format can
be overwritten with the -lnf command-line option. (See the Command-Line Options
section in the “IC Validator Basics” chapter of the IC Validator User Guide for more
information.)
global_nets
Optional. Specifies the IC Validator global nets. The default is an empty list.
expand_multiple_devices
Optional. Specifies if devices are netlisted multiple times. The default is false.
❍ true. Lists devices in the netlist multiple times.
uppercase
Optional. Specifies if input is converted to uppercase characters. The default is false.
❍ true. Converts input to uppercase characters.
cell
Optional. Specifies the top cell for the output netlist. The top cell is also the cell to which
ports are added using the add_cell_ports argument. Only cells contained in the
hierarchy of this top cell are output. The default is an empty string (""), meaning that all
cells in the input netlist are translated into the output netlist.
add_cell_ports
Optional. Specifies the ports to add to the cell specified by the cell argument. By
default, the IC Validator tool does not add ports to any cells.
output_netlist_file
Optional. Specifies the output netlist file. If the file already exists, the content of the file is
overwritten. The default name is "cell.sch_out".
remove_devices
Optional. Filters out the devices that have specific model names.
remove_device_instances
Optional. Filters out the devices that have specific instance names. You can use the "*"
metacharacter.
spice_settings
Optional. Specifies settings related to SPICE translations. For Boolean arguments set to
false, the described behavior is not enabled.
option in the Command-Line Syntax for NetTran section in the “Netlist Formats”
chapter of the IC Validator LVS User Guide for more information.
❍ remove_device_prefix. Specifies if the leading R, L, C, Q, D, and M prefixes in
SPICE instance names are stripped. The default is false.
■ true. Strips the leading R, L, C, Q, D, and M prefixes in SPICE instance names
during netlist read-in and before any netlist processing, such as flattening.
■ false. Does not strip the prefixes.
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-sp-chopDevPrefix command-line option. See the -sp-chopDevPrefix
command-line option in the Command-Line Syntax for NetTran section in the “Netlist
Formats” chapter of the IC Validator LVS User Guide for more information.
❍ scale. Overwrites the scaling factor (*.SCALE and .OPTION SCALE) for all input
netlists in the SPICE format. If this argument is not specified, the scaling factor
follows the existing scaling syntax of the input SPICE netlist.
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-sp-scale command-line option. See the -sp-scale command-line option in the
Command-Line Syntax for NetTran section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for more information.
❍ device_map_file. Specifies a map of device model names to new names. See the
CDL Map File section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for an example of the mapping file format.
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-sp-devMap command-line option. See the -sp-devMap command-line option in the
Command-Line Syntax for NetTran section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for more information.
❍ ignore_cdl_resi. Specifies if *.RESI statements in the netlist are ignored. The
default is false.
■ true. Does not short the resistors specified in the *.RESI statements.
When the IC Validator tool runs NetTran, this argument corresponds to the NetTran
-sp-resolveDupInstances command-line option. See the
-sp-resolveDupInstances command-line option in the Command-Line Syntax for
NetTran section in the “Netlist Formats” chapter of the IC Validator LVS User Guide
for more information.
❍ duplicate_port. Controls the duplicate ports in the SPICE cell port list (implicitly
defined). For a $PINS statement, duplicate pins are not allowed. The default is
WARNING.
Note:
The -sp-dupPort NetTran command-line option provides the same functionality.
■ ABORT. Reports an error and aborts the run at the cell definition.
verilog_settings
Optional. Specifies settings related to Verilog translations. For Boolean arguments set to
false, the described behavior is not enabled.
■ LOW. Starts the buses with the least significant bit, for example, Y[0:7].
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-verilog-busLSB command-line option. See the -verilog-busLSB command-line
option in the Command-Line Syntax for NetTran section in the “Netlist Formats”
chapter of the IC Validator LVS User Guide for more information.
❍ global_net_map_file. Specifies the Verilog global net mapping file.
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-verilog-voltmap command-line option. See the -verilog-voltmap
command-line option in the Command-Line Syntax for NetTran section in the “Netlist
Formats” chapter of the IC Validator LVS User Guide for more information.
❍ retain_backslash. Specifies if the backslash (\) is retained on Verilog net names.
The default is false.
■ true. Retains the backslash (\) on Verilog net names.
■ false. Does not retain the backslash (\) on Verilog net names.
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-verilog-R command-line option. See the -verilog-R command-line option in the
Command-Line Syntax for NetTran section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for more information.
❍ prefer_module_supply. Changes the precedence of 1) user-specified global supply
nets, 2) local supply nets, and 3) default global supply nets, VDD and VSS. The
default is false.
■ true. Supply net precedence is 2) > 1) > 3).
■ true. Supply net precedence is 2) > 1) > 3). Global net generation for local supply
nets is disabled.
■ false. Supply net precedence is 1) > 2) > 3).
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-verilog-localizeModuleSupply command-line option. See the
-verilog-localizeModuleSupply command-line option in the Command-Line
Syntax for NetTran section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for more information.
❍ localize_global_supply. Disables global net generation of user-specified global
supply nets and default global supply nets, VDD and VSS. The default is false.
■ true. Global net generation for global supply nets is disabled.
■ false. Global net generation for global supply nets is not disabled.
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-verilog-localizeGlobalSupply command-line option. See the
-verilog-localizeGlobalSupply command-line option in the Command-Line
Syntax for NetTran section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for more information.
floating_pins
Optional. Reports if floating pins are detected. If you use the duplicate_cell argument
with the floating_pins argument, the NetTran utility tries to select duplicate cell
definitions that are not floating pins. The default is ALLOW.
See the -noFloatingPins command-line option in the Command-Line Syntax for
NetTran section in the “Netlist Formats” chapter of the IC Validator LVS User Guide for
more information.
❍ ALLOW. Allows floating pins. When the NetTran utility detects a floating pin, it reports
a warning message. For the port that does not have a corresponding pin connection,
a dummy net, with the name icv_floatnet_xx, is added. See the Translating Standard
Netlists to IC Validator Format section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for more information.
❍ ABORT. Does not allow floating pins. When the NetTran utility detects a floating pin, it
reports an error message.
retain_comments
Optional. Retains comments from the input netlist in the output netlist for the specified
formats. The default is that comments are not output.
Note:
This argument will be retired.
See the -retainComments command-line option in the Command-Line Syntax for
NetTran section in the “Netlist Formats” chapter of the IC Validator LVS User Guide more
information.
duplicate_cell
Optional. Specifies how to handle multiple cell definitions having the same name. The
default is USE_MULTIPLE.
❍ ABORT. Reports an error and aborts the run if more than one cell contains the same
cell name. The -dupCell ABORT NetTran command-line option provides the same
functionality.
❍ USE_MULTIPLE. Specifies the cell definition by using the following rules:
■ Each instance (placement) selects a cell definition with the same netlist type, if it
exists.
■ Each instance (placement) selects a cell definition in the same file, if it exists.
■ If there is no cell definition with the same netlist type or in the same file, NetTran
selects a random cell definition.
The -dupCell USE_MULTIPLE NetTran command-line option provides the same
functionality.
❍ USE_ONE. Selects the first-read definition as the master definition for all instances. If
both empty and non-empty duplicate .subckt cells exist in the input netlists, NetTran
selects the first read non-empty definition. If there are multiple netlist type definitions,
NetTran follows this priority: SPICE -> VERILOG -> ICV, to select the master
definition regardless of input order.
The -dupCell USE_ONE NetTran command-line option provides the same
functionality.
Function Group
ASSIGN. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function does not require any additional licenses.
Shared licensing. This function requires the following IC Validator license: NET-TRAN.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
schematic()
write_spice()
write_xref_spice()
recalculate_property()
The recalculate_property() function creates or modifies device properties before
merging and comparison in an LVS flow. The result of the recalculate_property()
function can be used by compare functionality that reads device properties to affect the
netlist comparison. Some examples are:
• The exclude_tolerances and property_functions arguments of the
merge_parallel() and merge_series() functions
Syntax
recalculate_property(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | NP | PN |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...}, //optional
property_function = "string", //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. The information from the
recalculate_property() function is added.
device_type
Required. Specifies the device type.
device_names
Optional. Specifies the layout devices. Each device must match a device specified in a
device_name argument of a device configuration function.
property_function
Optional. Specifies the remote function that recalculates properties. See “Compare Utility
Functions” in Chapter 4 for more information about the utility functions you can use to
define a remote function.
equiv_cells
Optional. Lists the schematic and layout cell name pairs for which the
recalculate_property() function applies. You must specify the equiv_cells pairs in
the equiv_options() function before calling the merge_series() function. If only one
cell name in the pair is specified, the names are assumed to be the same.
Note:
The recalculate_property() instruction is observed only when comparing each
listed equivalence cell pair. If an equivalence cell pair is exploded into the parent
equivalence cell pair while comparing the parent, the recalculate_property()
instruction is discarded for the content of the exploded cell.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
In the following example, before comparing properties the new W property needs to be
recalculated. In the runset, the recalculate_property() and compare() functions are in
this form:
recalculate_property(cmp_db, INDUCTOR,
property_function="calc_schematic_nmos_w");
compare(cmp_db, sch_db, lay_db, user_functions_file="usrfunc", ...);
See Also
merge_parallel()
merge_series()
recognize_gate()
The recognize_gate() function tells the IC Validator tool to analyze transistor-level
circuitry by looking for logic gates. When found, these gates are represented as composite
devices, similar to the merging process. The IC Validator tool then performs the comparison
based on the recognized gates and the remaining devices. The recognized gates are
described in the Description section.
The devices that form a gate are swappable. That is, you are allowed to swap the order of
the devices that are members of a gate. As shown in Figure 3-111, without the
recognize_gate function, the two circuits do not match; with the recognize_gate function,
both circuits form _SP_NMOS_2_1_1 half gates and the two circuits match.
Figure 3-111 Swappable Gates Example
Without recognize_gate() With recognize_gate()
_SP_NMOS_2_1_1 _SP_NMOS_2_1_1
Limitation:
A device can be merged by the merge_series() function or recognized by the
recognize_gate() function, but not both in the same runset.
Do not use the recognize_gate() function when a remote function is specified by the
property_function argument of the check_property() function.
This function must be called before the compare() function. See Chapter 7, “Compare
Functions Basics” in the IC Validator LVS User Guide for more information about
complementary functions and precedence rules.
Syntax
recognize_gate(
state = compare_state,
type = ALL | SIMPLE, //optional
exclude_tolerances = {device_type = NMOS | PMOS,
device_names = {"string", ...},
tolerances = {
{property = "string",
tolerance = doubleconstraint,
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. The information from the
recognize_gate() function is added.
type
Optional. Specifies the types of gates that are recognized. The gate type name is
reported in the summary file and displayed in the VUE Netlist Visualizer. See the
Description section for information about the types. The default is ALL.
❍ ALL. Specifies that all types of gates are recognized, including
_INV
_NANDn
_NORn
_AOI_n1_n2_...nm
_OAI_n1_n2_...nm
_S_NMOSn
_S_PMOSn
_SP_NMOS_n1_n2_..._nm
_SP_PMOS_n1_n2_..._nm
_SP_PMOS(expression)
_SP_NMOS(expression)
❍ SIMPLE. Specifies that only simple gates are recognized:
_INV
_NANDn
_NORn
_S_NMOSn
_S_PMOSn
_SP_NMOS_n1_n2_..._nm
_SP_PMOS_n1_n2_..._nm
exclude_tolerances
Optional. Lists the tolerance settings composed of device type, list of device names, and
list of property tolerance settings. This is a more general exclude tolerances setting than
that of the merge_series() function.
Note:
The recognize_gate() function does not support swappable properties in the
exclude_tolerances argument.
Use this parameter to constrain gate recognition based on property comparison.
❍ device_type. Required. Specifies the device type. Only NMOS and PMOS device
types are available.
❍ device_names. Optional. Specifies the layout devices. Each device must match a
device specified in a device_name argument of a device configuration function.
❍ tolerances. Optional. Lists the tolerance settings that exclude candidate devices
from being merged based on the device property values.
■ property. Required. Specifies the property used to check the tolerance range.
■ tolerance. Optional. Specifies the tolerance. The property option is checked for
violations based on this tolerance. The tolerance must be specified as a range.
The tolerance_type option specifies either that the tolerance is a percentage
(default) or an absolute value. The default is [-10,+10].
■ tolerance_type. Optional. Checks property tolerances based on a relative or
absolute property difference. The default is RELATIVE.
- RELATIVE. Specifies that tolerances are checked based on a percentage
difference.
- ABSOLUTE. Specifies that tolerances are checked based on an absolute value
difference. The units are based on the lvs_user_unit argument of the
run_options() function.
equiv_cells
Optional. Lists the schematic and layout cell name pairs for which information specified
in the recognize_gate() function applies. You must specify the equiv_cells pairs in
the equiv_options() function before calling the recognize_gate() function. If only
one cell name in the pair is specified, the names are assumed to be the same.
Note:
The recognize_gate() instruction is observed only when comparing each listed
equivalence cell pair. If an equivalence cell pair is exploded into the parent
equivalence cell pair while comparing the parent, the recognize_gate() instruction
is discarded for the content of the exploded cell.
Description
The types of gates and functional equivalences are described in the following sections.
These are the names that are reported in the summary file and that are displayed in the VUE
Netlist Visualizer.
_INV
Figure 3-112 shows how the IC Validator tool handles an inverter.
Figure 3-112 _INV Type Example
_NANDn
This is a standard n-input CMOS NAND gate. All inputs are considered independently
swappable. In Figure 3-113, inputs IN1, IN2, … INn are swappable.
Figure 3-113 _NANDn Type Example
_NORn
This is a standard n-input CMOS NOR gate. All inputs are considered independently
swappable. In Figure 3-114, inputs IN1, IN2, … INn are swappable.
_AOI_n1_n2_..._nm
This is a CMOS AND-or-invert structure. The naming convention sorts the AND groups in
descending order based on the number of inputs to the AND. The inputs to each individual
AND gate are considered swappable.
As shown in Figure 3-115, the two PMOS transistors connected to IN1 and IN2, respectively,
can be placed below the three transistors connected to IN3, IN4, and IN5.
Figure 3-115 _AOI_n1_n2_..._nm Type Example
_OAI_n1_n2_..._nm Type
This is a CMOS OR-and-invert structure. The naming convention sorts the OR groups in
descending order based on the number of inputs to the OR. The inputs to each individual
OR gate are considered swappable.
As shown in Figure 3-116, the two NMOS transistors connected to IN1 and IN2,
respectively, are placed below the three transistors connected to IN3, IN4, and IN5.
Figure 3-119 illustrates an example of this type of gate. IN1 and IN2 are logical equivalent.
The transistor connected to IN4 can be placed up to the substructure of the three transistors
connected to IN1, IN2, and IN3.
Figure 3-119 _SP_NMOS(expression) and _SP_PMOS(expression) Types Example
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function requires native licensing, with no additional licenses required. See the
Licensing and Resource Requirements chapter in the IC Validator User Guide for more
information about licensing.
See Also
merge_series()
recognize_gate_off()
recognize_gate_off()
The recognize_gate_off() function disables gate recognition for specified devices.
This function must be called before the compare() function. See Chapter 7, “Compare
Functions Basics” in the IC Validator LVS User Guide for more information about
complementary functions and precedence rules.
Syntax
recognize_gate_off(
state = compare_state,
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function.
equiv_cells
Optional. Lists the schematic and layout cell name pairs for which information specified
in the recognize_gate_off() function applies. You must specify the equiv_cells
pairs in the equiv_options() function before calling the recognize_gate_off()
function. If only one cell name in the pair is specified, the names are assumed to be the
same.
Note:
The recognize_gate_off() instruction is observed only when comparing each
listed equivalence cell pair. If an equivalence cell pair is exploded into the parent
equivalence cell pair while comparing the parent, the recognize_gate() instruction
is discarded for the content of the exploded cell.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function requires native licensing, with no additional licenses required. See the
Licensing and Resource Requirements chapter in the IC Validator User Guide for more
information about licensing.
See Also
recognize_gate()
rectangle_overlap()
The rectangle_overlap() function oversizes orthogonal rectangles from the input layer
that meet the specified dimensions, and then creates polygons that represent the area
where the oversized rectangles overlap.
Note:
Nonrectangular and nonorthogonal data are ignored.
Each edge of a rectangle must fit one of the length specifications for the rectangle to be
oversized.
Syntax
rectangle_overlap(
layer1 = polygon_layer,
length1 = doubleconstraint,
length2 = doubleconstraint,
size1 = double,
size2 = double,
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
length1
Required. Specifies the length for one side of the rectangles. See “Constraints” on
page A-4 for more information. The default is >0.
length2
Required. Specifies the length for one side of the rectangles. See “Constraints” on
page A-4 for more information. The default is >0.
Note:
If both edges fit both length specifications, the shortest edge gets the smallest
oversize. For a square, the largest oversize is used for the top and bottom
expansions, while the smallest oversize is used for the left and right expansions.
If only one edge fits both length specifications, the other edge is oversized for the
length it fits. The edge that fits both length specifications is oversized for the other
length.
size1
Required. Specifies the oversize distance for edges that fit the length1 argument value.
A value of 0 or less means the edge is not oversized.
Note:
If both size arguments are 0 or less, the output is empty.
size2
Required. Specifies the oversize distance for edges that fit the length2 argument value.
A value of 0 or less means the edge is not oversized.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 3-120 shows an example of oversizing.
Figure 3-120 Oversizing Example
Resulting check region
size1
Side that
fits length2
In Figure 3-121, two of three input rectangles on layerA are selected and sized. The output
consists of the region where the sized rectangles overlap.
Result = rectangle_overlap(layer1 = layerA,
length1 = 1.5, length2 = 3,
size1 = 1.0, size2 = 2.0);
Check region
2
Check region
layerA Result
See Also
rectangles_interacting() and not_rectangles_interacting()
size_overlap()
Syntax
rectangle_spacing1(
layer1 =
polygon_layer,
count =
integerconstraint,
distance =
doubleconstraint,
corner_extension =
RADIAL | SQUARE, //optional
measure =
EDGE_TO_EDGE | CENTER_TO_CENTER,
//optional
center_to_center_direction = ALL | ORTHOGONAL | OCTAGONAL, //optional
name = "layer_label", //optional
inside_layer = polygon_layer //optional
);
not_rectangle_spacing1(
layer1 =
polygon_layer,
count =
integerconstraint,
distance =
doubleconstraint,
corner_extension =
RADIAL | SQUARE, //optional
measure =
EDGE_TO_EDGE | CENTER_TO_CENTER,
//optional
center_to_center_direction = ALL | ORTHOGONAL | OCTAGONAL, //optional
name = "layer_label", //optional
inside_layer = polygon_layer //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
count
Required. Specifies the number of rectangles that must be in violation.
distance
Required. Specifies the distance constraint of orthogonal rectangles for potential
selection. The distance definition is dependent on the corner_extension argument.
corner_extension
Optional. Specifies the shape of the checking zone.
measure
Optional. Specifies how the checking zone is measured. The default is EDGE_TO_EDGE.
❍ EDGE_TO_EDGE. Measures the distance between the borders of the rectangles. That
is, a rectangle is counted if its check zone interacts with another rectangle.
❍ CENTER_TO_CENTER. Measures the distance between the centers of the rectangles.
That is, a rectangle is counted if its check zone interacts with the center of another
rectangle.
Figure 3-122 shows how the corner_extension and measure arguments effect the
selection of rectangles.
Figure 3-122 Spacing of Rectangles: Distance Between the Two Polygons Is < a
center_to_center_direction
Optional. Specifies the alignment of the neighboring rectangles. The default is ALL.
Note:
This argument is used only when the measure argument is CENTER_TO_CENTER.
❍ ALL. Counts all rectangles regardless of the alignment.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
inside_layer
Optional. Selects only layer1 rectangles that are inside the polygons of this layer. These
rectangles must fit the specified count and distance constraints. The counting is
restricted to layer1 rectangles that are inside the same inside_layer polygon.
Note:
The not_rectangle_spacing1() function selects only layer1 rectangles that are
inside the inside_layer polygons but do not fit the specified count and distance
constraints.
In the following examples, shown in Figure 3-123 and Figure 3-124, assume that the
distance constraint between the polygons is met.
Figure 3-123 shows an example with a layer1 layer that has four polygons and an
inside_layer layer that has two polygons.
With the following command, which uses the inside_layer argument, the result is a
layer that only has polygon R because polygons B, C, and D, which are also inside
polygon P1, meet the constraints. Polygon A does not meet the count constraint because
it is the only layer1 polygon that is inside the inside_layer polygon P2.
result = rectangle_spacing1(layer1 = LayerA, distance <= d,
count = 3, inside_layer = layerC);
With the following command, which does not use the inside_layer argument, the result
is a layer that only has polygon R because the layer1 polygons A, B, C, and D, meet the
constraints.
R = rectangle_spacing1(layer1 = LayerA, distance <= d, count = 4);
Figure 3-124 shows an example with a layer1 layer that has four polygons and an
inside_layer layer that has one polygon.
With the following command, which uses the inside_layer argument, the result is a
layer that only has polygon R because polygons A, B, C, and D, which are inside polygon
P3, meet the constraints.
R = rectangle_spacing1(layer1 = LayerA, distance <= d,
count = 4, inside_layer=layerC);
With the following command, which does not use the inside_layer argument, the result
is the same as above where the inside_layer argument is used—a layer that only has
polygon R because polygons A, B, C, and D meet the constraints.
R = rectangle_spacing1(layer1 = LayerA, distance <= d, count = 4);
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 3-125 shows the check regions for three rectangles with the corner_extension
argument set to SQUARE. Rectangles A, B, and C are on the layer1 polygon layer.
Rectangles A and C are selected with the following command because their distance from
each other is greater than "a" but less than "b", thereby meeting the count restraint.
rectangle_spacing1(layer1 = layer1, count = 1, distance = [a,b],
corner_extension = SQUARE, measure = EDGE_TO_EDGE);
Rectangle B is selected with the following command because its distance from both A and
C is less than "a", thereby meeting the count restraint:
rectangle_spacing1(layer1 = layer1, count = <1, distance = [a,b],
corner_extension = SQUARE, measure = EDGE_TO_EDGE);
Figure 3-126 shows the check regions when the corner_extension argument is the default
of RADIAL. Rectangles A, B, C, D, E, F, and G are on the layer1 polygon layer.
See Also
rectangle_spacing2() and not_rectangle_spacing2()
Syntax
rectangle_spacing2(
layer1 =
polygon_layer,
layer2 =
polygon_layer,
count =
integerconstraint,
distance =
doubleconstraint,
corner_extension =
RADIAL | SQUARE, //optional
measure =
EDGE_TO_EDGE | CENTER_TO_CENTER,
//optional
center_to_center_direction = ALL | ORTHOGONAL | OCTAGONAL, //optional
name = "layer_label", //optional
inside_layer = polygon_layer //optional
);
not_rectangle_spacing2(
layer1 =
polygon_layer,
layer2 =
polygon_layer,
count =
integerconstraint,
distance =
doubleconstraint,
corner_extension =
RADIAL | SQUARE, //optional
measure =
EDGE_TO_EDGE | CENTER_TO_CENTER,
//optional
center_to_center_direction = ALL | ORTHOGONAL | OCTAGONAL, //optional
name = "layer_label", //optional
inside_layer = polygon_layer //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies a polygon layer.
layer2
Required. Specifies a polygon layer.
count
Required. Specifies the number of layer1 orthogonal rectangles that must be in
violation.
distance
Required. Specifies the distance constraint of layer1 orthogonal rectangles for potential
selection. The distance definition is dependent on the corner_extension argument.
❍ When the corner_extension argument is SQUARE, the distance of a rectangle is
checked by oversizing.
For example, the distance between rectangle A on the layer1 polygon layer and
rectangle B on the layer2 polygon layer must be less than "a". To determine
distance, rectangle A is oversized by the value "a". If rectangle A then intersects
rectangle B, rectangles A and B are selected because rectangle B is in the checking
zone of rectangle A.
❍ When the corner_extension argument is RADIAL, the distance is a Euclidean
distance.
corner_extension
Optional. Specifies the shape of the checking zone.
measure
Optional. Specifies how the checking zone is measured. The default is EDGE_TO_EDGE.
❍ EDGE_TO_EDGE. Measures the distance between the borders of the rectangles. That
is, a rectangle is counted if its check zone interacts with another rectangle.
❍ CENTER_TO_CENTER. Measures the distance between the centers of the rectangles.
That is, a rectangle is counted if its check zone interacts with the center of another
rectangle.
Figure 3-122 shows how the corner_extension and measure arguments effect the
selection of rectangles.
center_to_center_direction
Optional. Specifies the alignment of the neighboring rectangles. The default is ALL.
Note:
This argument is used only when the measure argument is CENTER_TO_CENTER.
❍ ALL. Counts all rectangles regardless of the alignment.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
inside_layer
Optional. Selects only layer1 rectangles that are inside the polygons of this layer. These
rectangles must fit the specified count and distance constraints for interaction with
layer2 rectangles. The counting is restricted to layer1 and layer2 rectangles that are
inside the same inside_layer polygon.
Note:
The not_rectangle_spacing2() function selects only layer1 rectangles that are
inside the inside_layer polygons but do not fit the specified count and distance
constraints for interaction with layer2 rectangles.
See the examples in the definition of the inside_layer argument of the
rectangle_spacing1() and not_rectangle_spacing1() functions.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 3-127 shows a check region with the corner_extension argument set to the default
RADIAL. Rectangle A is on the layer1 polygon layer, and rectangles B, C, D, and E are on
the layer2 polygon layer.
Rectangle A is selected with the following command because only its interaction with
rectangle E meets the specified distance constraint:
rectangle_spacing2(layer1 = layer1, layer2 = layer2, count = 1,
distance = [a,b], corner_extension = RADIAL,
measure = EDGE_TO_EDGE);
Figure 3-128 shows a check region with the corner_extension argument set to SQUARE.
Rectangle A is on the layer1 polygon layer, and rectangles B, C, and D are on the layer2
polygon layer.
Figure 3-129 shows a check region with the measure argument set to CENTER_TO_CENTER.
Rectangle A is on the layer1 polygon layer, and rectangles B through G are on the layer2
polygon layer.
See Also
rectangle_spacing1() and not_rectangle_spacing1()
Syntax
rectangles(
layer1 = polygon_layer,
sides = {length1 = doubleconstraint,
length2 = doubleconstraint}, //optional
orientation = ORTHOGONAL | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_rectangles(
layer1 = polygon_layer,
sides = {length1 = doubleconstraint,
length2 = doubleconstraint}, //optional
orientation = ORTHOGONAL | ALL, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
sides
Optional. Specifies the dimensions of the rectangles that are selected using two lengths,
one per side. The dimensions must be greater than 0. The length2 value is optional,
with a default of >0. See “Constraints” on page A-4 for more information.
orientation
Optional. Specifies the orientation of rectangles selected. The default is ALL.
❍ ORTHOGONAL. Selects only orthogonal rectangles.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
/* find rectangular vias with one side equal to .1 */
x = rectangles(via, {length1 = 0.1, length2 > 0.0});
See Also
aspect_ratio() and not_aspect_ratio()
not_contained_by() and contained_by()
extent() and not_extent()
Syntax
rectangles_interacting(
layer1 = polygon_layer,
length1 = doubleconstraint,
length2 = doubleconstraint,
size1 = double,
size2 = double,
count = integerconstraint, //optional
corner_extension = CLIP | RADIAL | SQUARE, //optional
include_touch = NONE | ALL, //optional
name = "layer_label" //optional
);
not_rectangles_interacting(
layer1 = polygon_layer,
length1 = doubleconstraint,
length2 = doubleconstraint,
size1 = double,
size2 = double,
count = integerconstraint, //optional
corner_extension = CLIP | RADIAL | SQUARE, //optional
include_touch = NONE | ALL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
length1
Required. Specifies the length for one side of the rectangles. See “Constraints” on
page A-4 for more information.
length2
Required. Specifies the length for one side of the rectangles. See “Constraints” on
page A-4 for more information.
Note:
If both edges fit both length specifications, the shortest edge gets the smallest
oversize. For a square, the largest oversize is used for the top and bottom
expansions, while the smallest oversize is used for the left and right expansions.
If only one edge fits both length specifications, the other edge is oversized for the
length it fits. The edge that fits both length specifications is oversized for the other
length.
size1
Required. Specifies the oversize distance for edges that fit the length1 value. A value
of 0 or less means the edge is not oversized.
Note:
If both size arguments are 0 or less, the output is empty.
size2
Required. Specifies the oversize distance for edges that fit the length2 value. A value
of 0 or less means the edge is not oversized.
count
Optional. Specifies the number of interactions that must be met by the oversize of the
rectangle for it to be selected. The default is >0.
corner_extension
Optional. Specifies how corners are processed in the sizing operation. The layer1
rectangle edges that meet the dimensions specified by the length1 and length2
arguments are oversized based on the dimensions specified by the size1 and size2
arguments, respectively. The result of all oversizing operations forms the check region.
The default is CLIP.
❍ CLIP. Clips corners by connecting the endpoints of oversized adjacent edges.
Figure 3-130 shows oversizing corners by clipping.
Input
Side that rectangle
fits length1
size2
size1
Side that
fits length2
❍ RADIAL. Oversizes corners into radial arcs that connect the endpoints of oversized
adjacent edges. This setting requires that the size1 and size2 arguments have the
same value. Figure 3-131 shows oversizing corners into radial arcs.
Figure 3-131 Corners Oversized Into Radial Arcs
Resulting check region
Input
Side that rectangle
fits length1
size2
❍ SQUARE. Oversizes corners to form squares. This setting requires that the size1 and
size2 arguments have the same value. Figure 3-132 shows oversizing corners to
form squares.
Figure 3-132 Corners Oversized to Form Squares
size2
include_touch
Optional. Specifies the outside touches that cause a layer1 polygon to be selected.
❍ NONE. Specifies that neither point touches nor edge touches cause a polygon to be
selected.
❍ ALL. Specifies that both edge touches and point touches cause a polygon to be
selected.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
The following example shows how the rectangles_interacting() function can be used
to identify 15 x 15 vias that have an interaction with neighboring vias. The larger polygon on
the right does not meet the requirement of having one side less than 20 and the other less
than 30. Therefore, it is not selected. Figure 3-133 shows the input layer.
Figure 3-133 rectangles_interacting() Function Example Input
15 15
15
layerA
All input rectangles on layerA are selected and their edges are projected outward by 10 m.
The results vary, depending on the setting of the corner_extension argument. That is,
Result = rectangles_interacting(layer1 = layerA, length1 < 20,
length2 < 30,
size1 = 10, size2 = 10, count = 3,
corner_extension = CLIP);
Result
Figure 3-135 shows how the output data is selected based on the oversizing of each via and
a count of 3. The check regions for all input polygons are shown. The number beside each
rectangle represents the interaction count for each via.
Figure 3-135 Oversizing Count for rectangles_interacting() Function Example
corner_extension = CLIP corner_extension = RADIAL
2 3 2 3 5 3
3 4 3 5 9 5
Result
2 3 2 3 5 3
See Also
rectangle_overlap()
rectangles() and not_rectangles()
size_overlap()
reduce_four_color_graph()
The reduce_four_color_graph() function is used in quadruple-patterning flows to output
a smaller layout after graph reduction. Optional node precoloring is also input to the function.
Precolored nodes are not deleted during graph reduction.
Syntax
Note: The definitions for the arguments are after the Returns section.
reduce_four_color_graph(
nodes = polygon_layer,
links = geometry_layer,
pre_color1 = polygon_layer, //optional
pre_color2 = polygon_layer, //optional
pre_color3 = polygon_layer, //optional
pre_color4 = polygon_layer, //optional
iterative = true | false, //optional
pre_color_reduce = true | false //optional
);
Returns
The output is a structure of polygons:
reduce_four_color_graph_result_s : newtype struct of {
high_degree_nodes : polygon_layer;
component_nodes : polygon_layer;
component_links : polygon_layer;
subgraphs : polygon_layer;
};
high_degree_nodes
The output contains the nodes polygons that remain after low-degree <4 node deletion.
When iterative reduction is enabled (the iterative option is set to true), the output
layer is empty.
component_nodes
The output contains the nodes that designate the components of the graph from cut
vertices. When iterative reduction is disabled (the iterative argument is false), and
pre_color_reduce is enabled (the pre_color_reduce argument is true), the output
layer is empty. When iterative reduction is enabled (the iterative option is true), the
output contains only the component nodes that are part of the subgraphs.
For an example of cut vertices, see Figure 3-136 on page 3-578.
component_links
The output contains the links that designate the components of the graph from two-edge
cuts. When iterative reduction is enabled (the iterative option is set to true), the
output layer is empty.
For an example of two-edge cuts, see Figure 3-137 on page 3-578.
subgraphs
The output contains the nodes and links found as subgraphs when iterative reduction is
enabled. Otherwise, the output layer is empty.
Arguments
nodes
Required. Specifies the polygon layer that contains the polygons targeted for coloring.
links
Required. Specifies the input geometry layer that contains polygons that connect nodes
polygons to complete the graph description. Each polygon in the links geometry layer
interacts, either by edge touch or polygon overlap, with the nodes polygons.
The links geometry layer is commonly generated using dimensional commands on the
nodes polygon layer. For example, the links geometry layer can be generated by using
an external spacing check on the nodes polygon layer that captures multiple-patterning
critical spacing relationships.
pre_color1
Optional. Specifies the marker layers representing color 1 precoloring of the polygons.
All the polygons must be included in the nodes layer. The precolors are markers on the
nodes. If a precolor marker does not intersect with any node, the marker is ignored.
pre_color2
Optional. Specifies the marker layers representing color 2 precoloring of the polygons.
See pre_color1 for more information.
pre_color3
Optional. Specifies the marker layers representing color 3 precoloring of the polygons.
See pre_color1 for more information.
pre_color4
Optional. Specifies the marker layers representing color 4 precoloring of the polygons.
See pre_color1 for more information.
iterative
Optional. Specifies whether the reduce_four_color_graph() function performs
iterative reduction on the input graph, which is constructed from the nodes and links of
the layout. The default is false.
❍ true. Processes the input graph to apply reductions and find components iteratively.
A component is a part of the input graph obtained after certain reduction operations.
When no further reduction is applicable, the component becomes a subgraph.
❍ false. Does not perform iterative reduction on the input graph.
pre_color_reduce
Optional. Specifies whether the reduce_four_color_graph() function performs
filtering on the precolored data before graph reduction. The default is false.
❍ true. Enables filtering of precolored data.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Example
See the Examples section of the reduce_three_color_graph() function for more
information.
See Also
reduce_three_color_graph()
reduce_three_color_graph()
The reduce_three_color_graph() function is used in triple-patterning flows to output a
smaller layout after graph reduction. Optional node precoloring is also input to the function.
Precolored nodes are not deleted during graph reduction.
Syntax
Note: The definitions for the arguments are after the Returns section.
reduce_three_color_graph(
nodes = polygon_layer,
links = geometry_layer,
pre_color1 = polygon_layer, //optional
pre_color2 = polygon_layer, //optional
pre_color3 = polygon_layer, //optional
iterative = true | false, //optional
pre_color_reduce = true | false //optional
);
Returns
The output is a structure of polygons:
reduce_three_color_graph_result_s : newtype struct of {
high_degree_nodes : polygon_layer;
component_nodes : polygon_layer;
component_links : polygon_layer;
subgraphs : polygon_layer;
};
high_degree_nodes
The output contains the nodes polygons that remain after low-degree <3 node deletion.
When iterative reduction is enabled (the iterative option is set to true), the output
layer is empty.
component_nodes
The output contains the nodes that designate the components of the graph from cut
vertices. Otherwise, the output layer is empty. When iterative reduction is enabled (the
iterative option is set to true), the output contains only the component nodes that are
part of the subgraphs.
In the graph shown in Figure 3-136, node A is a cut node. Removing this node breaks
the graph into two components.
component_links
The output contains the links that designate the components of the graph from two-edge
cuts. When iterative reduction is enabled (the iterative option is set to true), the
output layer is empty.
Note:
When iterative=false, the output of the component_links argument might be
different when setting the pre_color_reduce option to true or false.
In the example shown in Figure 3-137, edges P and Q form a two-edge cut, The removal
of these edges breaks the graph into two components.
Figure 3-137 Example of Two-Edge Cuts
subgraphs
The output contains the nodes and links found as subgraphs when iterative reduction is
enabled. Otherwise, the output layer is empty.
Arguments
nodes
Required. Specifies the polygon layer that contains the polygons targeted for coloring.
links
Required. Specifies the input geometry layer that contains polygons that connect nodes
polygons to complete the graph description. Each polygon in the links geometry layer
interacts, either by edge touch or polygon overlap, with nodes polygons.
The links geometry layer is commonly generated using dimensional commands on the
nodes polygon layer. For example, the links geometry layer can be generated by using
an external spacing check on the nodes polygon layer that captures triple-patterning
critical spacing relationships.
pre_color1
Optional. Specifies the marker layers representing color 1 precoloring of the polygons.
All the polygons must be included in the nodes layer. The precolors are markers on the
nodes. If a precolor marker does not intersect with any node, the marker is ignored.
pre_color2
Optional. Specifies the marker layers representing color 2 precoloring of the polygons.
See pre_color1 for more information.
pre_color3
Optional. Specifies the marker layers representing color 3 precoloring of the polygons.
See pre_color1 for more information.
iterative
Optional. Specifies whether the reduce_three_color_graph() function performs
iterative reduction on the input graph, which is constructed from the nodes and links of
the layout. The default is false.
❍ true. Processes the input graph to apply reductions and find components iteratively.
A component is a part of the input graph obtained after certain reduction operations.
When no further reduction is applicable, the component becomes a subgraph.
❍ false. Does not perform iterative reduction on the input graph.
pre_color_reduce
Optional. Specifies whether the reduce_three_color_graph() function performs
filtering on the precolored data before graph reduction. The default is false.
❍ true. Enables filtering of precolored data.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Examples
Example 1
The following illustrations show the input and output of the reduce_three_color_graph()
function during graph reduction. The input consists of seven nodes and the links that
connect them.
In Figure 3-139, nodes 6 and 2 are deleted first because they have degree 2 and are thus
low-degree nodes. Then, node 0 is deleted because it has degree 2 after node 2 is deleted.
Nodes 1, 3, 4, and 5 are output as high-degree nodes because they all have degree 3.
In Figure 3-140, node 6 is precolored (precoloring does not matter), so it is not deleted by
graph reduction. Node 2 is deleted first, and then node 0 is deleted. Nodes 1, 3, 4, 5, 6 are
output as high-degree nodes.
Figure 3-140 Color Graph Reduction With Precoloring
Example 2
Figure 3-141 shows the color graph reduction output for component nodes and component
links.
Figure 3-141 Color Graph Reduction Output for Component Nodes and Component Links
See Also
reduce_four_color_graph()
redundant_vias()
The redundant_vias() function identifies redundant via polygons and saves properties to
each output redundant via polygon. The redundant via polygon is defined as a polygon that
can be removed without affecting the connectivity of the input layers. Any via polygon that
interacts with zero or one layer is not checked or output.
Syntax
redundant_vias(
layers = {{layer = polygon_layer,
output_layer_key = "string",
output_type = REDUNDANT | NON_REDUNDANT, //optional
save_properties = {group_id = "string",
via_count = "string",
all_vias_count = "string"}},
...}, //optional
connect_items = {{layer1 = polygon_layer,
by_layer = polygon_layer,
layer2 = polygon_layer},
...},
flatten = true | false, //optional
min_via_overlap_ratio = double, //optional
name = "layer_label", //optional
subdivide_groups = true | false //optional
);
Returns
The output is a hash of string to polygon layer.
Arguments
layers
Required. Specifies the output. Each item in the layers argument corresponds to the
output_layer_key -> polygon_layer in the output hash.
❍ layer
Required. Specifies the input polygon layer. This layer must be specified as a
by_layer in the connect_items argument.
❍ output_layer_key
Required. Identifies the output layer in the output hash.
❍ output_type
Optional. Specifies the type of output generated. The default is REDUNDANT.
■ REDUNDANT. Returns all redundant via polygons.
■ NON_REDUNDANT. Returns non-redundant via polygons. Any via that does not meet
the criteria of a redundant via polygon is considered as a non-redundant via,
except those malfunctioning vias that interact with zero or one layer.
❍ save_properties
Optional. Specifies the properties to attach to the output shapes. This option works
only when output_type=REDUNDANT. The properties are collected within the same
redundant via group. A redundant via group is defined as the largest set of redundant
vias that are connected together when all non-redundant vias are removed. The
default is an empty string (""). Any property with an empty string specified is not
saved.
■ group_id. Specifies a user-defined property that contains a unique numeric value
for each redundant via group. This value might vary between runs.
■ via_count. Specifies the number of shapes from the layer within the same
redundant via group.
■ all_vias_count. Specifies the number of shapes from the by_layer in the
connect_items argument within the same redundant via group.
connect_items
Required. Lists the connection specifications.
❍ layer1
Required. Specifies the layer1 polygons.
❍ by_layer
Optional. Specifies the via layer by which layer1 and layer2 are connected.
❍ layer2
Required. Specifies the layer2 polygons.
flatten
Optional. Specifies whether the operation runs in hierarchical or flatten mode. The
default is false.
❍ true. Specifies that output polygons are saved in the top cell.
❍ false. Specifies that the operation runs in hierarchical mode. In this mode, output
polygons are saved in the lower cell, if possible.
min_via_overlap_ratio
Optional. Specifies the minimum overlap area of a via within Mi/Mi+1 transition. Any via
polygon with a ratio of via overlap area within Mi/Mi+1 transition to total via area, greater
than or equal to this value, is a valid via polygon to check. The value must be between
0.5 and 1. The default is 0.5.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
subdivide_groups
Optional. Specifies if redundant groups are to be subdivided into smaller groups. The
subdivide_groups argument applies only when output_type is REDUNDANT, and
affects only the behavior of the save_properties argument. The default is false.
❍ true. Subdivides each redundant group as follows:
All vias between a given pair of Mx/Mx+1 polygons are replaced with a single
pseudo-via. The pseudo-vias are segregated between non-redundant and
redundant, (with non-redundant being those that change connectivity if removed).
Groups are formed by redundant pseudo-vias that are connected when
non-redundant pseudo-vias are removed. Additionally, each non-redundant
pseudo-via forms a separate group.
❍ false. Connects redundant group vias when non-redundant vias are removed.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
my_connect_items : list of redundant_via_connect_item_s =
{{m1, via12, m2}};
RV_h = redundant_vias(
{{via12, "via12_redundant", save_properties = {"", "", "all_count"}}},
connect_items = my_connect_items
);
u_count: function (void) returning result : double {
result = 1.0/dfm_get_double_property("all_count");
}
report_count_dfm: function (void) returning void {
note("total redundant group="+ round(dfm_aggregate("group_count")));
}
dfm_features(
layer_ids = {"L1" => RV_h["via12_redundant"]},
dfm_function = report_count_dfm,
aggregate_functions = {
"group_count" => {u_count, "L1", SUM}
}
);
The “po” layer is the higher preference layer over the “od” layer when establishing a
connection from layer “co” to m1. Figure 3-143 shows the number of redundant groups that
change if the order of connect_items argument is changed.
Figure 3-143 redundant_vias() Function connect_items Argument
subdivide_groups = true
See Also
dfm_features()
remove_fill()
The remove_fill() function removes rectangles that share active area with a blocking
layer. Rectangles from AREFs (array references) are reformed as AREFs or SREFs
(structured references) as much as possible. As a result, new cells and new placements
might be created in the output layer.
To keep the remaining rectangles as AREFs or SREFs, the layer1 polygon layer must
contain only AREFs of rectangles; that is, an output layer created when the output_aref
argument of the fill_pattern() function is true. If the constraints on the layer1 polygon
layer are not met, the function behaves as the outside() function and explodes the
remaining rectangles in AREFs that have some rectangles removed.
Rectangles that are outside the blocking layer, including point and line touches, are kept in
the output layer.
Syntax
remove_fill(
layer1 = polygon_layer,
layer2 = polygon_layer,
cell_prefix = "string", //optional
group_by_cell = true | false, //optional
remove = OVERLAP | OUTSIDE, //optional
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
layer1
Required. Specifies the polygon layer.
layer2
Required. Specifies the blocking polygon layer.
cell_prefix
Optional. Specifies the prefix for all cell names created when fill is removed and
reformed. The default is "$RF". For example, if the cell_prefix argument is not set,
then the generated cell name is of this form: “$RF_1x1s_1”. If the cell_prefix
argument is “pre”, then the generated cell name is of this form: “pre_1x1s_1”.
group_by_cell
Optional. Specifies whether to remove additional polygons. The default is false.
❍ true. In addition to removing the polygons identified by layer2, also removes any
other polygons that belong to the same AREF cell instance as the polygons identified
by layer2.
❍ false. Does not remove additional polygons.
remove
Optional. Specifies whether to delete polygons that interact with layer2 polygons. The
default is OVERLAP.
❍ OVERLAP. Deletes polygons that interact with layer2 polygons.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Figure 3-146 shows the 3x11 AREF and blocking layer used in this example.
result = remove_fill(AREF, block_area);
AREF block_area
Figure 3-147 shows the results in a 2x6 AREF and a 1x11 AREF.
Figure 3-147 remove_fill() Function Example Result
result
See Also
outside() and not_outside()
remove_fill_to_target()
remove_fill_to_target()
The remove_fill_to_target() function removes cell and stack fill patterns to meet the
desired density, based on the input polygon and other arguments.
Syntax
remove_fill_to_target(
window_layer = polygon_layer,
design_layer = polygon_layer,
fill_layer = polygon_layer,
frame_layer = polygon_layer,
cell_stack_pattern = {width = double, height = double,
space_x = double, space_y = double,
stagger_x = double, stagger_y = double},
max_target_density = double,
stack_density = double, //optional
delta_window = double, //optional
delta_step = double, //optional
output_aref = {output_aref = true | false,
cell_prefix = "string"}, //optional
name = "layer_label", //optional
boundary = CLIP | ALIGN | IGNORE | REPLICATE_WINDOW
//optional
);
Returns
polygon layer
Arguments
window_layer
Required. Specifies the polygon layer containing one or more polygons that define the
areas where layers are processed for density calculations and fill removal.
design_layer
Required. Specifies the non-fill polygon layer to be used for density calculations.
fill_layer
Required. Specifies the polygon layer to be used for density calculations and is the input
for fill removal.
frame_layer
Required. Specifies the polygon layer that defines the boundaries of individual fill cells/
stack and is the input for fill removal.
cell_stack_pattern
Required. Specifies the fill cell-chain description.
❍ width. Required. Specifies the width of the fill cell chain.
❍ space_x. Required. Specifies the distance between the fill cell chain in the
x-direction.
❍ space_y. Required. Specifies the distance between the fill cell chain in the
y-direction.
❍ stagger_x. Optional. Specifies the stagger distance between the fill cell chain in the
x-direction. The default is 0.
❍ stagger_y. Optional. Specifies the stagger distance between the fill cell chain in the
y-direction. The default is 0.
max_target_density
Required. Specifies the maximum target density to be achieved as the result of fill
removal.
stack_density
Optional. Specifies the density introduced by fill polygons of one individual cell chain.
The IC Validator tool calculates the value when it is not specified.
delta_window
Optional. Specifies a square subwindow stepped across each window layer polygon.
The density is evaluated within each subwindow. The default is 10.
delta_step
Optional. Specifies the delta_window subwindow step distance in the x- and y-direction.
The default is 10.
output_aref
Optional. Specifies whether to keep fill as AREFs (array references) during fill removal.
❍ output_aref. The default is false.
❍ cell_prefix. Optional. Specifies the prefix for all cell names created when fill is
removed and reformed. The default is "$RT".
name
Optional. Specifies the label used by the IC Validator tool for the output files. This name
is displayed in various output report files. It is used only for log files; runset variables are
not changed. If the name is not specified, default output file names are created.
boundary
Optional. Specifies how to process a delta_window subwindow that overlaps the
boundary of the extents of a window layer polygon. The default is CLIP.
❍ CLIP. Truncates the subwindow at the limits of the window layer.
if the x_edge_process_amount or y_edge_process_amount argument is not equal
to -1 when the boundary argument is CLIP, then
■ If the overhang is less than the x_edge_process_amount or
y_edge_process_amount value, a clip is performed.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
For example, the fill is as shown in Figure 3-148.
15
Figure 3-149 shows the output of the remove_fill_to_target() function with these
values:
max_density = 0.4
delta_window = 5.0
delta_step = 5.0:
Figure 3-150 shows the three resulting windows. The densities are:
• density of density window 1: 0.3985
• density of density window 2: 0.3985
• density of density window 3: 0.3961
See Also
remove_fill()
replace_text()
The replace_text() function creates a text layer from a text layer by replacing the
specified text strings. Any text not matching the replacement specification is unchanged.
Syntax
replace_text(
layer1 = text_layer,
replace = {{search_strings = {"string", ...},
replace_string = "string"},
...},
name = "layer_label" //optional
);
Returns
text layer
Arguments
layer1
Required. Specifies the text layer.
replace
Required. Specifies the text strings replaced with another text string. The replacements
are processed in order, so that the first matching criteria has precedence. When a string
is matched, it is replaced and output to the output text layer. The matched string is not
considered for the remaining search strings.
❍ search_strings. Specifies the text strings replaced. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
Text strings must be a complete match; there is no partial text string replacement.
❍ replace_string. Specifies the string that replaces any text strings matching the
search criteria. An empty string ("") results in the removal of the specified search
string.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
The following examples illustrate how text can be replaced.
Using Metacharacters
In the following example, vdd1a becomes vdd, and vss45aa becomes vss. The string
vss40aa remains the same because it is excluded through use of !. See “String Matching”
on page A-11 for more information about metacharacters.
x = replace_text(met1_text,
{{{"vdd*"}, "vdd"}, {{"vss*aa", "!vss40aa"}, "vss"} }
);
See Also
text_options()
required_layer()
The required_layer() function restricts the pruning of any layer in the runset. The
specified layer is not pruned during IC Validator execution, such as pruning for run-only
execution (-ro command-line option), selectable rules processing (-svn, -svc, -sfn, -uvn,
-uvc, and -ufn command-line options), and incremental layers processing (-il and -iln
command-line options).
Syntax
required_layer(
input = layer
);
Returns
void
Arguments
input
Required. Specifies a layer that is required. It is not pruned by IC Validator.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
res_select()
The res_select() function selects the device polygons that fit the specified dimensional
criteria (width and length) or geometric error-checking criteria. A remote function specifies
arithmetic conditions relative to resistor parameters.
Syntax
res_select(
device_body = polygon_layer,
terminal_a = polygon_layer,
terminal_b = polygon_layer,
res_func = function,
optional_pins = {{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK},
...}, //optional
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
recognition_layer = polygon_layer, //optional
connect_sequence = connect_database, //optional
extract_shorted_device = true | false, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL //optional
);
Returns
polygon layer or error result
Arguments
device_body
Required. Specifies the body layer of the resistor.
terminal_a
Required. Specifies the device layer that contains the first terminal of the resistor.
terminal_b
Required. Specifies the device layer that contains the second terminal of the resistor.
res_func
Required. Specifies the remote function that selects devices based on geometric criteria.
See Chapter 4, “Utility Functions,” for more information about the utility functions you can
use to define a remote function.
optional_pins
Optional. Lists additional bulk or terminal layers.
❍ device_layer. Required. Specifies the device layer.
❍ pin_type. Optional. Specifies whether the layer is a terminal or bulk. The default is
BULK.
processing_layer_hash
Optional. Specifies a hash of string to a processing layer and range pair. In the remote
property function, each layer is retrieved as a polygon set by passing the hash key to the
dev_processing_layer() function.
❍ layer1. Required. Specifies the processing layer, which is a non-terminal layer used
for calculating properties.
❍ range. Optional. Specifies the maximum distance value from a device body polygon.
This value defines a window around the device body for data collection.
A nonnegative range value collects processing polygons that are within the specified
range of the body polygon which might or might not interact with the body polygon.
The default is -1.
■ When the range value is -1, only processing_layer_hash polygons interacting
with the body layer polygon are selected for the polygon set.
■ When the range value is >0, a window is created by oversizing the body layer
polygon by the range value. All processing_layer_hash polygons interacting
with this window, either by overlap or by an externally touching edge, are selected
for the polygon set.
See the description of the processing_layer_hash argument of the nmos() and
pmos() functions for diagrams that illustrate the application of the range value.
recognition_layer
Optional. Specifies the layer used to form a resistor when the device_body polygon
layer does not interact with all other terminal polygons. All polygons required to form a
resistor must interact with a single polygon on this layer.
connect_sequence
Optional. Specifies the connect database. If specified, the connection is considered in
the device checking process.
extract_shorted_device
Optional. Specifies whether shorted resistors, that is, resistors with only one terminal, are
extracted. The default is true.
❍ true. Extracts shorted resistors.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
See the Example section of the resistor() function for more information.
See Also
gendev_select()
mos_select()
resistor()
The resistor() function collects extraction configuration information about designed
resistors that have a device layer, two terminal layers, and one or more optional layers. NP
or PN diodes can also be extracted for diffusion resistors. The configuration information,
which contains device body and terminal layers, property extraction information, schematic
device mappings, and pin handling instructions, is stored in the device matrix that is passed
to the extract_devices() function.
The device body layer polygons must interact with exactly one polygon from each terminal
layer. Also, if an optional pin layer with its pin type set to BULK is specified, the required
relationship between the pin layer polygon and the device body layer polygon is defined by
the bulk_relationship argument. If an optional pin layer with its pin type set to TERMINAL
is specified, the optional pin layer polygon must interact with the device body layer polygon
but is not required to enclose the device body layer polygon. The device body layer is
usually generated by an and() function call between a resistor recognition layer and the
resistor material. Then, the device layer is used to cut the resistor material using a not()
function call to form the resistor terminals.
Note:
See “Device Names” on page A-9 for the device_name argument restrictions.
Syntax
resistor(
matrix = device_matrix,
device_name = "string",
device_body = polygon_layer,
terminal_a = polygon_layer,
terminal_b = polygon_layer,
optional_pins = {{device_layer = polygon_layer,
pin_name = "string",
pin_type = TERMINAL | BULK
pin_compared = true | false},
...}, //optional
recognition_layer = polygon_layer, //optional
reference_layer = polygon_layer, //optional
processing_layer_hash = {"string" => {layer1 = polygon_layer,
range = double},
...}, //optional
properties = {{name = "string",
type = DOUBLE | DOUBLE_LIST | STRING,
scale = FEMTO | PICO | NANO | MICRO |
MILLI | KILO | MEGA | NONE},
...}, //optional
write_property_to =
NETLIST_XTR_SPICE | NETLIST_PEX_SPICE |
SPICE | ANNOTATION_FILE |
NETLIST_ANNOTATION_FILE_SPICE |
NETLIST | AUTO | NETLIST_SKIP_PCELL,
processing_layer_hash_map =
{"string", ...},
pin_map = {"string", ...}},
...}, //optional
property_function = function, //optional
merge_parallel = true | false, //optional
bulk_relationship = ENCLOSE | INTERACT, //optional
swappable_pins = {{"string", ...}, ...}, //optional
schematic_devices = {{device_name = "string",
terminal_a = "string",
terminal_b = "string",
optional_pins = {"string", ...},
ignore_pins = {"string", ...}},
...}, //optional
x_card = true | false, //optional
spice_netlist_function = "string", //optional
resistor_value = double, //optional
parasitic_diodes = {diode_name = "string",
diode_type = NP | PN | NONE}, //optional
extract_shorted_device = true | false, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
unique_identifier = "string", //optional
swappable_properties = {{pin_name = "string",
property_list = {"string", ...}},
...}, //optional
simulation_model_name = "string", //optional
dlink_libraries = {dev_dlink_library_handle, ...}, //optional
top_simulation_properties = true | false //optional
);
Returns
void
Arguments
matrix
Required. Specifies the device matrix used by the extraction functions. The matrix must
be defined by the init_device_matrix() function. Configuration details for device
extraction are stored in the matrix data object for use by the extract_devices()
function.
device_name
Required. Specifies the resistor. A device name can be reused across multiple calls of
the resistor() function if all calls have
❍ Equivalent numbers of optional pins with equivalent values for the pin_name and
pin_compared options.
device_body
Required. Specifies the body layer of the resistor.
terminal_a
Required. Specifies the device layer that contains the first terminal of the resistor. The pin
name generated by the IC Validator tool is “A”.
terminal_b
Required. Specifies the device layer that contains the second terminal of the resistor.
The pin name generated by the IC Validator tool is “B”.
optional_pins
Optional. Lists additional bulk or terminal layers. You can specify up to 20 pins.
❍ device_layer. Required. Specifies the device layer.
recognition_layer
Optional. Specifies the layer used to recognize a device when the device body layer does
not interact with all terminal layers and processing layers. All processing layers must
interact with this specified recognition layer. This layer is also used to identify device
instances that are merged during layout extraction when multiple individual devices
occur within a single recognition layer polygon. See the merge_parallel argument for
more information.
reference_layer
Optional. Specifies the intended location in the hierarchy for the extracted device. The
layer is usually an assign layer.
processing_layer_hash
Optional. Specifies a hash of string to a processing layer and range pair. In the remote
property function, each layer is retrieved as a polygon set by passing the hash key to the
dev_processing_layer() function.
❍ layer1. Required. Specifies the processing layer, which is a non-terminal layer used
for calculating properties.
❍ range. Optional. Specifies the maximum distance value from a device body polygon.
This value defines a window around the device body for data collection.
A nonnegative range value collects processing polygons that are within the specified
range of the body polygon which might or might not interact with the body polygon.
The default is -1.
■ When the range value is -1, only processing_layer_hash polygons interacting
with the body layer polygon are selected for the polygon set.
■ When the range value is >0, a window is created by oversizing the body layer
polygon by the range value. All processing_layer_hash polygons interacting
with this window, either by overlap or by an externally touching edge, are selected
for the polygon set.
See the description of the processing_layer_hash argument of the nmos() and
pmos() functions for diagrams that illustrate the application of the range value.
properties
Optional. Lists the property values that define the device. The default is
properties = {{"l", DOUBLE, MICRO},
{"w", DOUBLE, MICRO},
{"r"}
},
❍ name. Specifies the property name. See “Predefined Name Matches” in Chapter 7,
“Compare Functions Basics” of the IC Validator LVS User Guide for the names and
associated matches that are predefined during LVS compare.
Note:
More than one property sharing the same name is prohibited. Furthermore, the
property name is case-insensitive.
❍ type. Specifies the data type of the property. The default is DOUBLE.
Note:
The compare() function does not support the DOUBLE_LIST property. When
running dual-hierarchy extraction, the list of double properties is always written to
the annotation file unless the write_property_to argument is explicitly
specified.
❍ scale. Optional. Specifies the scale factor applied to property values output by the
write_spice(), write_xref_spice(), pex_generate_results(), and
write_annotation_file() functions. The default is NONE, which means no scaling.
You can use this scale option to convert dimensional property values from the
IC Validator native base unit of microns into the base unit of meters for SPICE
simulation.
❍ write_property_to. Optional. Specifies to which file the property is written. The
default is NETLIST_XTR_SPICE.
■ NETLIST_XTR_SPICE. Writes the corresponding property to
Table 3-32 Dual-Hierarchy Extraction Treatment for Processing Layers Mapped Using the
processing_layer_hash_map Argument (Continued)
Table 3-33 Dual-Hierarchy Extraction Treatment for Terminal Layers Mapped Using pin_map
If the pin name of a terminal layer is not referenced in the pin map for any property,
then that layer is never leveled, regardless of whether dual-hierarchy extraction is
enabled or disabled.
property_function
Optional. Specifies the remote function that calculates the geometric properties for each
extracted resistor. The default calculations are for the length of the resistor between the
terminals, width of the resistor, and resistance. The default
calc_resistor_properties() function is defined in the device_public.rh header file.
If you use a remote function, you must specify the device properties in the properties
argument. See Chapter 4, “Utility Functions,” for more information about the utility
functions you can use to define a remote function.
merge_parallel
Optional. Specifies whether parallel devices enclosed by the same recognition layer
polygon are merged. The default is false.
❍ true. Merges parallel devices enclosed by the same recognition layer polygon.
Multiple banks of parallel-merged devices can occur within a single recognition layer
polygon.
❍ false. Does not merge parallel devices enclosed by the same recognition layer
polygon.
bulk_relationship
Optional. Specifies the required relationship between the bulk polygon and the device
polygon.
❍ ENCLOSE. Specifies that the bulk polygon must enclose the device polygon.
❍ INTERACT. Specifies that the bulk polygon must interact with the device polygon by
one of these methods: enclosing, cutting, or outside edge touching.
swappable_pins
Optional. Lists the pins that can be swapped for a successful comparison with the
schematic device. By default, pins “A” and “B” can be swapped. Use an empty list to
disable swapping of all pins:
swappable_pins = {}
In the following example, “A” and “B” can be swapped, and “C” and “D” can be swapped.
However, “A” and “C” cannot be swapped.
swappable_pins = {{"A","B"}, {"C","D"}}
schematic_devices
Optional. Lists the corresponding schematic devices and terminals for comparison. By
default, the comparison is based on matching names in the layout.
Note:
You need this argument if either of these statements are true:
■ The schematic device name does not match the device_name argument of the
device configuration function.
■ The schematic pin names do not match the standard “A”, “B”, and “BULK” pin
names, in addition to optional pin names provided in the optional_pins list of
structures argument of the device configuration function.
❍ device_name. Required. Specifies the schematic device.
❍ terminal_a. Optional. Specifies the first terminal of the device. The default is "A".
❍ terminal_b. Optional. Specifies the second terminal of the device. The default
is "B".
❍ optional_pins. Optional. Specifies the schematic pins that correspond to the pin
name in the optional_pins argument.
❍ ignore_pins. Optional. Ignores the specified schematic pins during pin connectivity
comparison between the layout and schematic. If a pin name is listed that matches a
pin name defined by the optional_pins argument, that pin is ignored both in the
layout and schematic. This behavior is similar to the pin_compared option of the
optional_pins argument of the resistor() function.
If the schematic device has an optional pin that does not correspond to any pin in the
resistor() function, that pin can be specified with the ignore_pins. Otherwise, this
optional pin produces an error during the compare operation.
x_card
Optional. Specifies if the instance name prefix is replaced. The default is false.
❍ true. Replaces the default instance name prefix for the layout extracted device with
an X-card. This option facilitates the use of SPICE SUBCKT models to represent
devices in simulation.
❍ false. The default instance name prefix for the layout extracted device is not
replaced.
spice_netlist_function
Optional. Specifies the function used to format instances of the device in netlists
generated by the write_spice() and write_xref_spice() functions. See “Flexible
Netlisting Utility Functions” in Chapter 4 for more information.
resistor_value
Optional. Specifies the calculated value of sheet resistance per square unit.
parasitic_diodes
Optional. Specifies the device name for the newly created diodes generated in the netlist.
Note:
When using the parasitic_diodes argument, a bulk layer must be specified using
the optional_pins argument with the pin_type option set to BULK.
❍ diode_name. Specifies the name for the newly created parasitic diodes.
❍ diode_type. Specifies the device type. When you specify a diode name, set the
diode type to PN or NP.
extract_shorted_device
Optional. Specifies whether shorted resistors, that is, resistors with only one terminal, are
extracted. The default is true.
❍ true. Extracts shorted resistors if there are at least two touching edges between the
terminal and device body layers.
❍ false. Reports shorted resistors as error devices.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
unique_identifier
Specifies the user-derived string used by the remote property function. The
unique_identifier argument value is retrieved from the remote property function with
the dev_unique_identifier() utility function. See the Examples section of the
capacitor() function for more information. You must ensure that the strings are valid
and unique. (The IC Validator tool does not check values to ensure that they are unique.)
The default is an empty string ("").
This functionality is used to access data objects created outside of a remote property
function but passed in as global variables. Use this functionality when access to these
global variables must be synchronized to a specific device configuration function call. For
example, you can create a global hash object containing property extraction parameters
for several device configuration functions. The hash key is a unique identifier string that
matches the unique_identifier argument value. Then, you can clear the hash key by
invoking the dev_unique_identifier() function that is in the property function. The
dev_unique_identifier() function retrieves the unique_identifier argument value
to the corresponding device configuration function call.
swappable_properties
Optional. Lists the pins and pin-specific device properties that can be swapped. The
IC Validator tool considers the connectivity of the corresponding swapped pins for
property-based merge exclusion, device merging composite property calculations, and
property comparisons. Pins that have properties with identical property_list indexes
are swapped. By default, the IC Validator tool does not map swappable pins to
properties.
❍ pin_name. Allows the specified pin to be swapped. The pin must be listed in the
swappable_pins argument.
simulation_model_name
Optional. Specifies the simulation netlist model name. As needed, define this model
name for each device configuration function. This name is output to the runset report file.
The device name is not changed.
dlink_libraries
Optional. Specifies the libraries that can be used to pass measurement data to external
libraries. See the Dynamic-Link Library Support chapter in the IC Validator User Guide
and “Dynamic Linking Utility Functions” in Chapter 4 for more information.
top_simulation_properties
Optional. Controls whether properties identified as simulation properties are extracted
hierarchically or in the top cell. The default is false.
❍ true. Extracts simulation properties in the top cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
Figure 3-151 shows the resistor design for the following example.
Figure 3-151 resistor() Function Example
resistor body
resistor terminal
matrix = init_device_matrix(cdb1);
resistor(
matrix,
device_name = "RES",
device_body = res_lay,
terminal_a = res_term,
terminal_b = res_term,
resistor_value = 1e8
);
device_db = extract_devices(matrix);
netlist_db = netlist(device_db);
Figure 3-152 shows the resistor design for the following example.
Figure 3-152 resistor() Function Example 2
M1
resistor body
mt1res
resistor terminal
resistor(
matrix = device_matrix,
device_name = "rm1",
device_body = mt1res,
terminal_a = metal1,
terminal_b = metal1,
extract_shorted_device = true);
See Also
capacitor()
gendev()
gendev_select()
inductor()
np() and pn()
res_select()
resolution_options()
The resolution_options() function specifies resolution and snapping values.
Syntax
resolution_options(
internal_resolution double,= //optional
snap_resolution double,= //optional
snap_instance_resolution double,= //optional
snap_preference =
OVERSIZE | UNDERSIZE |
RETAIN_45 | CLOSEST, //optional
working_resolution_factor = ONE_X | TWO_X | AUTO, //optional
spacing_tolerance = double, //optional
layout_resolution_check = {resolution = double,
action = ABORT | WARN |
IGNORE //optional
);
Returns
void
Arguments
internal_resolution
Optional. Enables the IC Validator tool to use a resolution for processing other than the
input library resolution. The default is the input library resolution.
❍ Use a finer value to provide more grid points for storing data, a finer precision for all
dimensional values specified, and a finer precision for all built-in tolerances.
❍ Use a coarser value to provide a larger coordinate space. A coarser value causes a
loss of precision and it might cause snapping.
❍ Use the internal_resolution argument to ensure that a magnification factor
results in all coordinates falling on grid. The magnification factor is specified in the
library() function.
snap_resolution
Optional. Snaps input data and instances to this resolution. The default is 0.
snap_instance_resolution
Optional. Snaps instances to this resolution. This value overrides the snap_resolution
argument for instances. The default is 0.
snap_preference
Optional. Specifies the preferences when snapping. The default is RETAIN_45.
❍ OVERSIZE. Snaps a polygon so that all vertices are snapped to grid points on or
outside the original polygon boundary.
❍ UNDERSIZE. Snaps a polygon so that all vertices are snapped to grid points on or
inside the original polygon boundary.
❍ RETAIN_45. Attempts to maintain 45-degree edges in the original polygon when
snapping.
❍ CLOSEST. Snaps the polygon vertices to the nearest grid point.
working_resolution_factor
Optional. Enables the IC Validator tool to use a finer working resolution than the internal
resolution for the storage of geometric data. The working resolution factor provides more
grid points to solve merging and snapping issues for 45-degree and all-angle data. Set
the working_resolution_factor argument to ONE_X to solve problems with integer
overflow for coordinates of large chips. The default is AUTO.
❍ ONE_X. Specifies that the working resolution is the same as the internal resolution.
❍ TWO_X. Specifies that the working resolution is twice the internal resolution, which
means there are twice as many grid points for storing data than the internal
resolution.
❍ AUTO. Specifies that the optimum working resolution factor is based on the input
library resolution and the internal resolution. If the input library resolution is an even
multiple of the internal resolution, the working resolution factor is ONE_X, otherwise it
is TWO_X.
spacing_tolerance
Optional. Specifies the tolerance for the distance of the dimensional spacing check on
nonorthogonal data. The default is unspecified to have default tolerances.
The specified spacing_tolerance value is used throughout the runset. It is applied to
all external*(), internal*(), and enclose*() functions except the corner-to-corner
measurements functions, such as external_corner*(), internal_corner*() and
enclose_corner*().
The spacing_tolerance value is applied only to measurements where either of the
edges is nonorthogonal. The effect of the spacing_tolerance option is to decrease the
maximum distance value (< or <=) specified in the dimensional functions. For orthogonal
data measurements, the spacing_tolerance option does not affect the maximum
distance value.
layout_resolution_check
Optional. Checks the input library resolution against the specified resolution value.
❍ resolution. Specifies the resolution value to compare against the input library
resolution. The default is 0.001.
❍ action. Specifies the IC Validator action if the input library resolution does not match
the specified resolution value. The default is IGNORE.
■ ABORT. Aborts the run if the input library resolution does not match the specified
resolution value.
■ WARN. Issues a warning if the input library resolution does not match the specified
resolution value.
■ IGNORE. Does not compare the input library resolution against the specified
resolution value and continues the run.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
resolution_options (
snap_resolution = 0.05
);
See Also
library()
restart()
The restart() function loads a previously saved checkpoint and restores the state of the
run at the checkpoint.
The restart() function replaces the ASSIGN section of a runset. Runsets that have both
an ASSIGN section and a restart() function are not run. The restart() function must be
the first function in the runset and only one restart() function is allowed in a runset. You
must specify the layers you want to reload using the restart_layer(),
restart_layer_edge(), and restart_layer_text() functions immediately after the
restart() function in the runset.
Note:
The IC Validator version used to restart a run must be the same version used to create
the checkpoint. The restart runset can be different from the checkpoint runset as long as
the original layer names are not changed.
Syntax
restart(
path = "string"
);
Returns
void
Arguments
path
Required. Specifies the path of the saved checkpoint files.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
The following is an example of creating a checkpoint and restarting a run.
1. Generate the checkpoint by including the checkpoint() function in the original runset.
#include "icv.rh"
library(
library_name = "test",
cell = "top",
format = GDSII
);
M1 = assign({{1,0}});
@ "external error";
external1(M1, distance < 0.3, extension = NONE);
2. Create a checkpoint runset when executing the original runset.using the following
command:
% icv -checkpoint orig_runset
3. Restart the run from the checkpoint using the restart() function. Because you can
have multiple checkpoint() functions in a single runset, use the path specified for the
checkpoint location of interested.
Note:
Do not include the icv.rh file in the restart runset. The restart_include.rh file
automatically includes the icv.rh file.
Do not have library() or assign() functions in the runset. These functions are not
allowed.
You do not have to read in all layers from your checkpoint into the restart runset. You
choose the layers you need using the restart_layer_*() functions.
#include "./chkpt/restart_include.rh"
restart(path = "./chkpt");
M1 = restart_layer(read_layer = M1);
See Also
checkpoint()
restart_layer()
restart_layer_edge()
restart_layer_text()
snapshot()
restart_layer()
The restart_layer() function specifies the polygon layers for the restart run. Put the
restart_layer() function after the restart() function in the runset. See the
checkpoint() and restart() functions for more information.
Syntax
restart_layer(
read_layer = polygon_layer
);
Returns
polygon layer
Arguments
read_layer
Required. Specifies the polygon layer included in the restart run.
Function Group
ASSIGN. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Example section of the restart() function for more information.
See Also
restart()
restart_layer_edge()
restart_layer_text()
snapshot()
restart_layer_edge()
The restart_layer_edge() function specifies the edge layers for the restart run. Put the
restart_layer_edge() function after the restart() function in the runset. See the
checkpoint() and restart() functions for more information.
Syntax
restart_layer_edge(
read_layer = edge_layer
);
Returns
edge layer
Arguments
read_layer
Required. Specifies the edge layer included in the restart run.
Function Group
ASSIGN. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Example section of the restart() function for more information.
See Also
restart()
restart_layer()
restart_layer_text()
snapshot()
restart_layer_text()
The restart_layer_text() function specifies the text layers for the restart run. Put the
restart_layer_text() function after the restart() function in the runset. See the
checkpoint() and restart() functions for more information.
Syntax
restart_layer_text(
read_layer = text_layer
);
Returns
text layer
Arguments
read_layer
Required. Specifies the text layer included in the restart run.
Function Group
ASSIGN. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the Example section of the restart() function for more information.
See Also
restart()
restart_layer()
restart_layer_edge()
snapshot()
route_directives()
The route_directives() function gives you better control over automatic DRC repair.
(The ADR flow uses the signoff_autofix_drc command within the IC Compiler tool.) The
bounding boxes are output to the LAYOUT_ERRORS file, and VUE displays the specified
display markers. The directive layers specified in this function — including combinations of
add shapes, subtract shapes, and multiple error markers — are passed directly to the
IC Compiler tool in the ADR flow.
This function is also compatible with IC Validator pattern matching.
Syntax
route_directives(
display_marker = polygon_layer,
group_marker = polygon_layer,
error_layers = {layername = polygon_layer, ...}, //optional
route_directives = {{add_layer = polygon_layer,
subtract_layer = polygon_layer}, ...} //optional
);
Returns
void
Arguments
display_marker
Required. Specifies the layer that contains the shapes used to display the errors.
group_marker
Required. Specifies the layer with the shapes that enclose the shapes defined by the
display_marker, error_layers, and route_directives arguments.
error_layers
Optional. Specifies the layers that are used to specify the errors. These layers are
interpreted by the signoff_autofix_drc command as alternative representations.
Each of these layers is used in an independent fixing attempt in the ADR flow.
route_directives
Optional. Specifies the layers that contain shapes which identify surgical fixes for the
IC Compiler Zroute router. For a given set of add_layer and subtract_layer shapes
contained by a single group_marker layer, the shapes are implemented by the Zroute
router if they are allowed actions.
Description
The following restrictions apply to the route_directives() function:
• All shapes altered by the route_directives argument must be on the minimum
manufacturing grid. (The manufacturing grid is specified in the technology file.)
• An add_layer directive must not create a short, even if a subtract_layer directive
would resolve it.
• The result of a route directive must not be an open or floating shape.
• A layer specified by a subtract_layer argument must not interact with any via
enclosure.
• Any route_directives layer must not overlap with power and ground straps, shapes
that have a route type of fixed or user enter, and pins.
• A subtract layer can interact only with shapes having a route type of SIGNAL_DETAIL.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
Use the pattern_learn() function to create a new pattern library, patternLib.
pattern_learn(
pattern_library_name = "patternLib",
pattern_layers = {layerInput},
pattern_marker = layerMarker,
optional_pattern_markers = {
layerPatternExtent,
layerAdd,
layerRemove
}
);
Figure 3-20 shows an example of user-specified layers that are represented in the pattern
library, patternLib.
Figure 3-153 Pattern in patternLib Library
layerPatternExtent
Use the pattern_match() function to capture patterns on a design that match patterns in a
pattern library. Then, use the optional_pattern_markers() function to list polygon layers
associated with the pattern marker layer, allowing you to do additional error filtering. Finally,
use the route_directives() function to specify error markers that are used in the ADR
flow.
marker_layer = pattern_match(
pattern_library_name = "patternLib",
pattern_layers = {metal1}
);
extra_layers = optional_pattern_markers(
pattern_library_name = "patternLib",
layerMarker = marker_layer
);
pattern_extent = extra_layers[0];
m1_add = extra_layers[1];
m1_subtract = extra_layers[2];
@ “Add/Remove Layer”;
Figure 3-21 shows an example of layers in the pattern database in the context of a pattern
match for the layout. These layers are used as the directive layers for the
route_directives() function.
pattern_extent
Add to the pattern library the exact modifications you want, as specified in the
route_directives() function.
route_directives(
marker_layer = metal1,
group_marker = pattern_extent,
route_directives = {{add_layer = m1_add,
subtract_layer = m1_subtract}}
);
Figure 3-22 shows an example of what the input layers might look like at the completion of
the ADR flow, with the directive layers shown for context. Note that the jog on the metal1
layer has moved north to cover the m1_add shape and to uncover the m1_remove shape.
Figure 3-155 Layers After ADR
pattern_extent
See Also
milkyway_route_directives()
pattern_learn()
pattern_match()
run_options()
The run_options() function specifies directories, files, and run variations.
Syntax
run_options(
run_details_path = "string", //optional
group_path = "string", //optional
print_precision = integer, //optional
print_preprocess_files = {TREE, VCELL, TECH}, //optional
tree_files = ALL | FIRST_LAST //optional
flat_polygon_count = true | false, //optional
uppercase = true | false, //optional
instance_prefix = "string", //optional
optimize_floating_fills = true | false, //optional
lvs_netlist_flow = ICV | SPICE, //optional
lvs_user_unit = MICRON | METER, //optional
verbose_results_file = {ERRORS, ASSIGNS}, //optional
assign_layer_out_of_range = ABORT | WARN, //optional
compress_netlist = true | false, //optional
report_streamfile_information = {GDS_LAST_MODIFIED, GDS_LAST_ACCESSED,
MD5SUM, FORMAT, PATH, COMMAND}
//optional
);
Returns
void
Arguments
run_details_path
Optional. Specifies the directory location where files that are not crucial to debugging a
design are stored. The default is run_details in the run directory.
The path can be changed with the -rd command-line option. See the Command-Line
Options section in the “IC Validator Basics” chapter of the IC Validator User Guide for
more information.
group_path
Optional. Specifies the directory that contains layer group files and other files used
during a run. Because these files can be quite large, avoid reading and writing over a
network. The group directory should exist on a local disk of the host executing the run.
The default is the group directory in the run details directory.
Note:
The IC Validator tool does not allow you to set this path to the current working
directory (.).
The path can be changed with the -g command-line option. See the Command-Line
Options section in the “IC Validator Basics” chapter of the IC Validator User Guide for
more information.
print_precision
Optional. Specifies the number of decimal places for the floating point values reported in
output files, including the LAYOUT_ERRORS file and the window statistics files for the
density family of functions. The default is 4.
print_preprocess_files
Optional. Specifies the preprocess files to generate. More than one value can be listed.
These files are useful when debugging runs. The default is {TREE, VCELL, TECH}.
tree_files
Optional. If the print_preprocess_files argument includes the TREE value, the
tree_files argument is used to determine the amount of tree files printed and saved on
disk. The default is ALL.
❍ ALL. Prints tree files for all of the preprocessing phases.
❍ FIRST_LAST. Prints tree files for the first and last preprocessing phases. The first
phase (tree0) represents the read-in hierarchy before hierarchy optimizations; the
last phase (tree999) represents the optimized hierarchy after all of the preprocessing
steps.
flat_polygon_count
Optional. Specifies if functions that derive layers include the flat polygon count along with
the cell level polygon count in the cell.sum file. When set to true, the polygon count is
included in the file. The default is false.
Note:
Using the flat_polygon_count argument is a debug option. Do not use it in
production runsets because there are performance and memory costs for calculating
the flat polygon count.
uppercase
Optional. Specifies if layout text and layout cell names are converted to uppercase
characters for DRC, ERC, extraction, and netlist functions. The default is false.
❍ true. Converts the layout text and layout cell names to uppercase characters for
these functions. This conversion affects all functions that process text and cell
names.
❍ false. Does not convert the layout text or layout cell names to uppercase characters.
instance_prefix
Optional. Serves as a mechanism to make the cell instances different from the X-card
netlisted device instances in the SPICE netlist. To create a valid SPICE netlist when you
are using the x_card option of the device configuration functions, such as nmos(), you
must also set instance_prefix to a non-null string value.
For the SPICE flow, that is when the lvs_netlist_flow argument is SPICE, the tool
adds the prefix X to cell instances. The X is added automatically preceding the specified
instance prefix. For example, specifying instance_prefix="MyCell" and setting
lvs_netlist_flow=SPICE, the cell instance of layout has the prefix XMyCell.
Limitation:
The prefix X might conflict with the exploded_text_options argument of the
text_options() function. If the hierarchical_delimiter option is prefixed with X
in a SPICE flow, The tool cannot differentiate where the X come from and an error
occurs.
optimize_floating_fills
Optional. Specifies if the floating fill is optimized in the connect database. When set to
true, the fill is optimized in the connect database. The default is true.
Note:
All functions that check floating fill do so as usual and do the same work as without
this optimization.
The identify_fill() function optimizes floating fill for specified layers.
lvs_netlist_flow
Optional. Specifies the netlist format for the LVS flow. The default is ICV.
❍ ICV.
lvs_user_unit
Optional. Specifies the unit of measure for the LVS flow, including device extraction and
compare. The units are for length, width, area, and perimeter. The coordinates are
always in microns. The default is MICRON.
Note:
For ICV flows, the units must be microns.
If the input SPICE input is only in meters, then the lvs_user_unit argument can be
set to MICRON or METER. But, if part of the SPICE input is in microns, the
lvs_user_unit argument can only be set to MICRON; setting it to METER causes an
error.
The tolerance-related functions that can be affected by the lvs_user_unit argument
are:
Runset Functions:
check_property()
merge_parallel()
merge_series()
recognize_gate()
short_equivalent_nodes_off()
Compare Utility Functions:
lvs_get_compare_tolerance()
lvs_get_exclude_tolerance()
verbose_results_file
Optional. Specifies if error violation details and assign layer details are reported in the
cell.RESULTS file. The default is an empty list, which indicates that only a summary is
provided in the Results Summary and Assign Layer Statistics sections of the REPORT
file.
❍ ERRORS. Reports each rule name and the total number of violations for that rule.
Note:
When using error classification, the number of waived violations is excluded from
the number of violations found in the cell.RESULTS file. For example, the tool
detects 100 violations, but 60 of them are waived. Therefore, the number of
violations reported is 40.
❍ ASSIGNS. Reports each assign layer name, hierarchical and flat polygon counts for
the layer (or "Pruned" if the layer was pruned), and additional assignment information
for the layer from the assign functions in the runset.
assign_layer_out_of_range
Optional. Specifies the behavior of the IC Validator tool when an assign function contains
layer or datatype numbers that are greater than the maximum allowed range of the input
library format. The default is ABORT.
❍ ABORT. Aborts the run with an error when an assign function contains an out of range
layer.
❍ WARN. Issues a warning and continues the run when an assign function contains an
out of range layer.
See Layout Layer and Datatype Ranges for information about the limits of the values in
the assign functions.
compress_netlist
Optional. Compresses the output layout netlist generated using the netlist() function.
The output file name is cell.net.gz. A file called cell.net is a soft link to the compressed
file, and it enables certain flows to continue to operate normally. The default is false.
report_streamfile_information
Optional. Generates a report in the cell.RESULTS file for the GDSII and OASIS input
libraries, md5sum, GDSII last modified, last accessed data and time stamps, format,
path to the input library, and function specifying the input library, depending on the
settings. The default is no reporting.
❍ GDS_LAST_MODIFIED. Reports the date and time when GDSII was last modified and
extracted from the GDSII library. If this information is unavailable, then “NOT
AVAILABLE” is reported. This occurs when the date fields in GDSII are all “0” or
invalid characters.
❍ GDS_LAST_ACCESSED. Reports the date and time when GDSII was last accessed and
extracted from the GDSII library. If this information is unavailable, then “NOT
AVAILABLE” is reported. This occurs when the date fields in GDSII are all “0” or
invalid characters.
❍ MD5SUM. Reports md5sum of the input library computed on the entire file using the
UNIX command, md5sum -b file. For compressed GDSII, the md5sum is computed
on the compressed file. If this information is unavailable, then “NOT AVAILABLE” is
reported. This occurs when md5sum is not in the user $path.
❍ FORMAT. Reports the GDSII or OASIS input library formats.
❍ COMMAND. Reports the function name, runset, and the line number where the library
was specified in the runset.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
run_options (
group_path = "/localdrive/path/group",
print_precision = 3
);
Example
run_options(
report_streamfile_information =
{MD5SUM,GDS_LAST_ACCESSED,GDS_LAST_MODIFIED, FORMAT, PATH, COMMAND}
);
See Also
error_options()
gds_options()
hierarchy_auto_options()
hierarchy_options()
incremental_options()
library()
milkyway_options()
oasis_options()
openaccess_options()
resolution_options()
text_options()
schematic()
The schematic() function reads a schematic file and translates it to IC Validator netlist
format, if it is not already in that format and uncompressed.
Note:
In a SPICE flow (that is, when the lvs_netlist_flow argument of the run_options()
function is SPICE), the schematic file, which is in SPICE format, is not translated.
The result of this function is used by the compare() function. The NetTran utility does the
translation.
This function must be called before assign functions and can be called only one time in a
runset.
Note:
When you set the -sf command-line option to ICV, the schematic() function does not
run NetTran. In this situation, the IC Validator tool uses the netlist specified by the -s
option for LVS compare.
For a SPICE flow, the -sf command-line option can only be set to SPICE.
Syntax
schematic(
schematic_file = {{filename = "string",
format = SPICE | VERILOG | ICV},
...},
schematic_library_file = {{filename = "string",
format = SPICE | VERILOG | ICV},
...}, //optional
global_nets = {"string", ...}, //optional
expand_multiple_devices = true | false, //optional
uppercase = true | false, //optional
cell = "string", //optional
add_cell_ports = {"string", ...}, //optional
output_netlist_file = "string", //optional
remove_devices = {"string", ...}, //optional
remove_device_instances = {"string", ...}, //optional
spice_settings = {short_out_devices = {"string", ...},
short_voltage_threshold = double,
remove_instance_prefix = true | false,
remove_device_prefix = true | false,
device_map_file = "string",
ignore_cdl_resi = true | false,
resolve_duplicate_instances = true | false,
duplicate_port = ABORT | WARNING,
scale = double}, //optional
verilog_settings = {global_ground = "string",
global_power = "string",
bus_start_bit = HIGH | LOW,
global_net_map_file = "string",
retain_backslash = true | false,
prefer_module_supply = true | false,
localize_module_supply = true | false,
localize_global_supply = true | false}, //optional
floating_pins = ABORT | ALLOW, //optional
retain_comments = {SPICE, VERILOG, ICV}, //optional
duplicate_cell = ABORT | USE_MULTIPLE | USE_ONE //optional
);
Returns
schematic_netlist_file_handle
Arguments
schematic_file
Required. Lists the schematic files, including the optional path, and the format. The
formats are SPICE, VERILOG, and ICV. The default is ICV.
The file can be changed with the -s and -sf command-line options. When using these
command-line options, only one file can be specified. (See the Command-Line Options
section in the “IC Validator Basics” chapter of the IC Validator User Guide for more
information.)
Important:
Do not use cell.net as the schematic netlist file name because this name is the file
name used for the extracted layout netlist. Using this name causes the schematic
netlist to be overwritten.
schematic_library_file
Optional. Lists the schematic files, including the optional path, and the format settings
that are not changed by the -s and -sf command-line options. The formats are SPICE,
VERILOG, and ICV. The default is ICV.
global_nets
Optional. Specifies the IC Validator global nets. The default is an empty list.
expand_multiple_devices
Optional. Specifies if devices are netlisted multiple times. The default is false.
❍ true. Lists devices in the netlist multiple times.
uppercase
Optional. Specifies if input is converted to uppercase characters. The default is false.
cell
Optional. Specifies the top cell for the output netlist. The top cell is also the cell to which
ports are added using the add_cell_ports argument. Only cells contained in the
hierarchy of this top cell are output. The default is an empty string (""), meaning that all
cells in the input netlist are translated into the output netlist.
Note:
The -stc command-line option overrides this name. See the Command-Line Options
section in the “IC Validator Basics” chapter of the IC Validator User Guide for more
information.
add_cell_ports
Optional. Specifies the ports to add to the cell specified by the cell argument. By
default, the IC Validator tool does not add ports to any cells.
output_netlist_file
Optional. Specifies the output netlist file. If the file already exists, the content of the file is
overwritten. The default name is "cell.sch_out".
remove_devices
Optional. Filters out the devices that have specific model names.
remove_device_instances
Optional. Filters out the devices that have specific instance names. You can use the "*"
metacharacter.
spice_settings
Optional. Specifies settings related to SPICE translations. For Boolean arguments set to
false, the described behavior is not enabled.
open. Use this setting to override the open with a short. All sources with a DC voltage
of less than or equal to the threshold are replaced by a short.
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-sp-voltThresh command-line option. See the -sp-voltThresh command-line
option in the Command-Line Syntax for NetTran section in the “Netlist Formats”
chapter of the IC Validator LVS User Guide for more information.
❍ remove_instance_prefix. Specifies if the leading X prefix in SPICE instance
names is stripped. The default is false.
■ true. Strips the leading X prefix in SPICE instance names.
command-line option in the Command-Line Syntax for NetTran section in the “Netlist
Formats” chapter of the IC Validator LVS User Guide for more information.
❍ resolve_duplicate_instances. If duplicate instance names are found within the
same cell, you can rename these instance names by adding a suffix to the following
format: DUP#index. The new names do not cause any naming collisions. The default
is false.
When the IC Validator tool runs NetTran, this argument corresponds to the NetTran
-sp-resolveDupInstances command-line option. See the
-sp-resolveDupInstances command-line option in the Command-Line Syntax for
NetTran section in the “Netlist Formats” chapter of the IC Validator LVS User Guide
for more information.
❍ duplicate_port. Controls the duplicate ports in the SPICE cell port list (implicitly
defined). For a $PINS statement, duplicate pins are not allowed. The default is
WARNING.
Note:
The -sp-dupPort NetTran command-line option provides the same functionality.
■ ABORT. Reports an error and aborts the run at the cell definition.
❍ scale. Overwrites the scaling factor (*.SCALE and .OPTION SCALE) for all input
netlists in the SPICE format. If this argument is not specified, the scaling factor
follows the existing scaling syntax of the input SPICE netlist.
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-sp-scale command-line option. See the -sp-scale command-line option in the
Command-Line Syntax for NetTran section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for more information.
verilog_settings
Optional. Specifies settings related to Verilog translations. For Boolean arguments set to
false, the described behavior is not enabled.
the Command-Line Syntax for NetTran section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for more information.
❍ bus_start_bit. Specifies if Verilog buses start with the most or least significant bit
first in the bus range. The default is HIGH.
■ HIGH. Starts the buses with the most significant bit, for example, Y[7:0].
■ LOW. Starts the buses with the least significant bit, for example, Y[0:7].
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-verilog-busLSB command-line option. See the -verilog-busLSB command-line
option in the Command-Line Syntax for NetTran section in the “Netlist Formats”
chapter of the IC Validator LVS User Guide for more information.
❍ global_net_map_file. Specifies the Verilog supply net mapping file.
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-verilog-voltmap command-line option. See the -verilog-voltmap
command-line option in the Command-Line Syntax for NetTran section in the “Netlist
Formats” chapter of the IC Validator LVS User Guide for more information.
❍ retain_backslash. Specifies if the backslash (\) is retained on Verilog net names.
The default is false.
■ true. Retains the backslash (\) on Verilog net names.
■ false. Does not retain the backslash (\) on Verilog net names.
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-verilog-R command-line option. See the -verilog-R command-line option in the
Command-Line Syntax for NetTran section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for more information.
❍ prefer_module_supply. Changes the precedence of 1) user-specified global supply
nets, 2) local supply nets, and 3) default global supply nets, VDD and VSS. The
default is false.
■ true. Supply net precedence is 2) > 1) > 3).
Global net generation for local supply nets can be disabled as well. The default is
false.
■ true. Supply net precedence is 2) > 1) > 3). Global net generation for local supply
nets is disabled.
■ false. Supply net precedence is 1) > 2) > 3).
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-verilog-localizeModuleSupply command-line option. See the
-verilog-localizeModuleSupply command-line option in the Command-Line
Syntax for NetTran section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for more information.
❍ localize_global_supply. Disables global net generation of user-specified global
supply nets and default global supply nets, VDD and VSS. The default is false.
■ true. Global net generation for global supply nets is disabled.
■ false. Global net generation for global supply nets is not disabled.
When the IC Validator tool runs NetTran, this value corresponds to the NetTran
-verilog-localizeGlobalSupply command-line option. See the
-verilog-localizeGlobalSupply command-line option in the Command-Line
Syntax for NetTran section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for more information.
floating_pins
Optional. Reports if floating pins are detected. If you use the duplicate_cell argument
with the floating_pins argument, the NetTran utility tries to select duplicate cell
definitions that are not floating pins. The default is ALLOW.
See the -noFloatingPins command-line options in the Command-Line Syntax for
NetTran section in the “Netlist Formats” chapter of the IC Validator LVS User Guide for
more information.
❍ ALLOW. Allows floating pins. When the NetTran utility detects a floating pin, it reports
a warning message. For the port that does not have a corresponding pin connection,
a dummy net, with the name icv_floatnet_xx, is added. See the Translating Standard
Netlists to IC Validator Format section in the “Netlist Formats” chapter of the
IC Validator LVS User Guide for more information.
❍ ABORT. Does not allow floating pins. When the NetTran utility detects a floating pin, it
reports an error message.
retain_comments
Optional. Retains comments from the input netlist in the output netlist for the specified
formats. The default is that comments are not output.
Note:
This argument will be retired.
See the -retainComments command-line option in the Command-Line Syntax for
NetTran section in the “Netlist Formats” chapter of the IC Validator LVS User Guide for
more information.
duplicate_cell
Optional. Specifies how to handle multiple cell definitions having the same name. The
default is USE_MULTIPLE.
❍ ABORT. Reports an error and aborts the run if more than one cell contains the same
cell name. The -dupCell ABORT NetTran command-line option provides the same
functionality.
❍ USE_MULTIPLE. Specifies the cell definition by using the following rules:
■ Each instance (placement) selects a cell definition with the same netlist type, if it
exists.
■ Each instance (placement) selects a cell definition in the same file, if it exists.
■ If there is no cell definition with the same netlist type or in the same file, NetTran
selects a random cell definition.
The -dupCell USE_MULTIPLE NetTran command-line option provides the same
functionality.
❍ USE_ONE. Selects the first-read definition as the master definition for all instances. If
both empty and non-empty duplicate .subckt cells exist in the input netlists, NetTran
selects the first read non-empty definition. If there are multiple netlist type definitions,
NetTran follows this priority: SPICE -> VERILOG -> ICV, to select the master
definition regardless of input order.
The -dupCell USE_ONE NetTran command-line option provides the same
functionality.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function does not require any additional licenses.
Shared licensing. This function requires the following IC Validator license: NET-TRAN.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
schematic_netlist_db = schematic({{"sch", ICV}});
See Also
read_layout_netlist()
write_spice()
write_xref_spice()
sconnect()
The sconnect() function selects the layer1 polygons that intersect the layer2 polygons
which belong to the net with the highest layer1 polygon count. The result is
nondeterministic because different nets can have the same polygon count.
Syntax
sconnect(
connect_sequence = connect_database,
layer1 = polygon_layer,
layer2 = polygon_layer,
mode = GLOBAL | LOCAL, //optional
include_touch = NONE | EDGE, //optional
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
connect_sequence
Required. Specifies the connect database.
layer1
Required. Selects polygons from the specified polygon layer, which must be in the
connect database.
layer2
Required. Specifies the second polygon layer. It must not be in the connect database.
mode
Optional. Specifies the context in which the net with the highest layer1 polygon count is
determined. The default is LOCAL.
❍ GLOBAL. Specifies that the context is the entire layer. All layer1 polygons that
intersect layer2 polygons are included in determining the net with the highest
polygon count.
❍ LOCAL. Specifies that the context is within a layer2 polygon. Only the layer1
polygon intersecting the layer2 polygon is included in determining the highest
polygon count.
include_touch
Optional. Specifies the types of touches that provide an electrical connection. The default
is NONE.
❍ NONE. Specifies that no touches form an electrical connection.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_ERC.
Example
x = sconnect(con_db, tap, well);
See Also
soft_check()
soft_connect()
soft_connect_check()
stamp()
select_by_double_property()
The select_by_double_property() function sorts the polygons of the input layer into a
polygon layer based on the specified property name and value pair. Each polygon that fits
the pair is in the output layer. Other polygons are ignored.
Syntax
select_by_double_property(
layer1 = polygon_layer,
property_name = "string",
property_value = doubleconstraint,
name = "layer_label"
);
Returns
polygon layer
Arguments
layer1
Required. Specifies the polygon layer that is sorted.
property_name
Required. Specifies the user-defined name of the property.
property_value
Required. Specifies the constraint that must be satisfied.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See IC Validator
Licenses in the IC Validator User Guide for more information.
Examples
m1_prop1_LT_6 = select_by_double_property (m1_prop1,"prop1", <6);
m1_prop1_EQ_2 = select_by_double_property (m1_prop1,"prop1", ==2);
See Also
net_polygon_by_property()
text_to_double_property()
select_marker_by_double_property()
The select_marker_by_double_property() function retrieves the pattern markers based
on the specified property name and double value pair. Each polygon that fits the pair is in the
output layer.
Syntax
select_marker_by_double_property(
layer1 = marker_layer,
property_name = "string",
property_value = doubleconstraint,
name = "layer_label"
);
Returns
marker_layer
Arguments
layer1
Required. Specifies the pattern markers.
property_name
Required. Specifies the user-defined name of the property.
property_value
Required. Specifies the property value, which is a constraint of double.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See IC Validator
Licenses in the IC Validator User Guide for more information.
Example
In the following example, the select_marker_by_double_property() function selects
hotspots based on its minimum CD.
//output pattern markers of all hotspots
hotspots = pattern_match(
pattern_library_name = "TEST_CASE_Mx",
pattern_layers = {metal}
);
See Also
pattern_learn()
select_marker_by_string_property()
select_marker_by_string_property()
The select_marker_by_string_property() function retrieves the pattern markers based
on the specified property name and string value pair. Each polygon that fits the pair is in the
output layer.
Syntax
select_marker_by_string_property(
layer1 = marker_layer,
property_name = "string",
property_value = "string",
name = "layer_label"
);
Returns
marker_layer
Arguments
layer1
Required. Specifies the pattern markers.
property_name
Required. Specifies the user-defined name of the property.
property_value
Required. Specifies the property value, which is a string.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See IC Validator
Licenses in the IC Validator User Guide for more information.
Examples
In the following example, the select_marker_by_string_property() function selects
hotspots based on its pattern type.
//output pattern markers of all hotspots
hotspots = pattern_match(
pattern_library_name = "TEST_CASE_Mx",
pattern_layers = {metal}
);
//return pattern markers of line type hotspots
line_hotspots = select_marker_by_string_property(
hotspots,
"pattern_type",
"width"
);
//return pattern markers of space type hotspots
space_hotspots = select_marker_by_string_property(
hotspots,
"pattern_type",
"space"
);
See Also
pattern_learn()
select_marker_by_double_property()
shift_symmetry()
The shift_symmetry() function checks the symmetry of the target layer polygons against
the created, mirrored polygons. This function uses a bounding layer to identify symmetry
units within a given context layer bounding box. All of the original polygons (layer1) that
interact with the bounding layer within the context layer are considered to form one
symmetry unit. This unit is checked for symmetry as per the given criteria with the remaining
symmetry units. The function
• Selects a marker shape from the bounding layer for each polygon in the context layer
and creates mirrored bodies of the original polygons (layer1) within each bounding box
of the context layer according to the given symmetry type.
• For each bounding box in the context layer, compares the original polygons that interact
with the unselected marker shapes of the bounding layer against the created mirrored
polygons, and reports the existing part in target polygons not in mirrored polygons.
• Polygons in the context and bounding layers are deposited in the top cell and the
polygons of the bounding layer must be enclosed in the polygons of the context layer.
Syntax
shift_symmetry(
layer1 = polygon_layer,
context_layer = polygon_layer,
bounding_layer = polygon_layer,
symmetry = HORIZONTAL_AXIS | VERTICAL_AXIS | ROTATE_180 | NONE,
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer that is the target layer.
context_layer
Required. Specifies the polygon layer that is the context layer. Polygons in layer1 that
interact with polygons on the context layer are selected.
bounding_layer
Required. Specifies the polygon layer that is the bounding layer. Polygons in the
context_layer that interact with polygons on the bounding layer are selected.
symmetry
Required. Specifies the symmetry type of the pattern. The options are
❍ HORIZONTAL_AXIS.
❍ VERTICAL_AXIS.
❍ ROTATE_180.
❍ NONE.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See IC Validator
Licenses in the IC Validator User Guide for more information.
Example
In Figure 3-156, layer1 (filled green) polygons interacting with the context layer (unfilled
red) polygons are selected for the symmetry checking operation. A bounding layer (unfilled
cyan) is used to identify symmetry units from the layer1 polygons. A marker shape is then
selected from the bounding layer polygons in the context layer, and mirrored polygons within
the marker shape are created as per the symmetry criteria. The mirrored polygons from the
selected marker shape are checked for symmetry with the remaining target symmetry units
(unselected marker shapes), using an XOR operation. Shapes from the target polygons not
in mirrored polygons, and vice versa, are reported.
Original Original
polygons in polygons in
selected unselected
marker shape marker shape
from the from the
bounding layer bounding layer
Y-Axis X-Axis
See Also
check_symmetry()
short_equivalent_nodes()
The short_equivalent_nodes() function creates shorts between electrically equivalent
nodes. The specified criteria must be met in order for the equivalent nodes to be shorted.
Note:
To be a candidate for equivalent node shorting, the bulk potential after shorting must be
consistent with the potential before shorting for every MOSFET in the stack.
See the stack_type argument for support of split series-parallel structure.
All nets are treated as non static except when they have the same name as the opposite
side port or when they are explicitly specified in the layout_static_nets or
schematic_static_nets arguments of the equiv_options() function.
This function must be called before the compare() function. See Chapter 7, “Compare
Functions Basics” in the IC Validator LVS User Guide for more information about
complementary functions and precedence rules.
Syntax
short_equivalent_nodes(
state =
compare_state,
device_type =
NMOS | PMOS,
device_names =
{"string", ...}, //optional
short_nodes =
SAME_DEVICE_NAME_ONLY | ANY_DEVICE_NAME |
ANY_DEVICE_TYPE, //optional
width_ratio_tolerance = {tolerance = doubleconstraint,
tolerance_type = RELATIVE | ABSOLUTE},
//optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...}, //optional
stack_type = {SERIES_PARALLEL} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. The information from the
short_equivalent_nodes() function is added.
device_type
Required. Specifies the device type. Only NMOS and PMOS device types are available.
device_names
Optional. Specifies the layout devices. Each device must match a device specified in a
device_name argument of a device configuration function.
short_nodes
Optional. Specifies when shorts can be created. The default is
SAME_DEVICE_NAME_ONLY.
width_ratio_tolerance
Optional. Specifies the tolerance constraints. The difference of width ratio of devices at
the equivalent nodes must satisfy the tolerance constraints. Otherwise, the shorts are not
created.
❍ tolerance. Specifies the tolerance for the width ratio. The width ratio is checked
based on this tolerance. The tolerance must be specified as a range. The default is
[-10,+10].
equiv_cells
Optional. Specifies the schematic and layout cell name pairs for which the
short_equivalent_nodes() function applies. You must specify the equiv_cells pairs
in the equiv_options() function before calling the short_equivalent_nodes()
function. If only one cell name in the pair is specified, the names are assumed to be the
same.
Note:
The short_equivalent_nodes() instruction is observed only when comparing each
listed equivalence cell pair. If an equivalence cell pair is exploded into the parent
equivalence cell pair while comparing the parent, the short_equivalent_nodes()
instruction is discarded for the content of the exploded cell.
stack_type
Optional. Specifies support for split series-parallel structures.
❍ SERIES_PARALLEL. Shorts nets of each series stack of parallel devices as shown in
Figure 3-158.
Figure 3-158 SERIES_PARALLEL Option of the stack_type Argument
This option applies to the series-parallel structures of MOS devices where each
series stack has the same form of parallel structures. Structures more complex than
series-parallel are not supported.
Description
All devices must satisfy the width_ratio_tolerance argument constraints. The
IC Validator tool calculates the series-to-series width ratio for each of the corresponding
device pairs. The smallest width ratio serves as base ratio and other width ratios are
compared to it. Figure 3-159 illustrates a simple example:
(width_ratio_tolerance = {tolerance=[-10,10], tolerance_type=RELATIVE})
The left series stack is chosen as reference and the smallest ratio is A=2, which is chosen
as the base ratio. As a result, only B violates the width_ratio_tolerance argument value
in that
Difference of ratio BA = (3-2)/2 = 50%
Difference of ratio CA = (2.2-2)/2 = 10%
Figure 3-160 illustrates an example for cases with a series stack of parallel structures:
(width_ratio_tolerance = {tolerance=[-10,10], tolerance_type=RELATIVE})
The left series stack is chosen as reference and the smallest ratio is E=1, which is chosen
as the base ratio. As a result, A, B, and C violate the width_ratio_tolerance argument
value in that:
Difference of ratio AE = (4/3-1)/1 = 33%,
Difference of ratio BE = (5/4-1)/1 = 25%
Difference of ratio CE = (3/2-1)/1 = 50%
Difference of ratio DE = (21/20-1)/1 = 5%
Difference of ratio FE = (11/10-1)/1 = 10%
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See IC Validator
Licenses in the IC Validator User Guide for more information.
Example
short_equivalent_nodes(state = my_compare_state,
device_type = NMOS,
device_names = {"nm1","nm2"},
short_nodes = SAME_DEVICE_NAME_ONLY,
width_ratio_tolerance = { [-10,+10], RELATIVE }
);
See Also
short_equivalent_nodes_off()
text_net()
text_options()
short_equivalent_nodes_off()
The short_equivalent_nodes_off() function prevents equivalent node shorts from being
created on a path that contains one of the specified devices.
This function must be called before the compare() function. See Chapter 7, “Compare
Functions Basics” in the IC Validator LVS User Guide for more information about
complementary functions and precedence rules.
Syntax
short_equivalent_nodes_off(
state = compare_state,
device_type = NMOS | PMOS,
device_names = {"string", ...}, //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"}, ...} //optional
);
Returns
void
Arguments
state
Required. Specifies the structure that contains compare settings. The compare matrix
must be defined by the init_compare_matrix() function. The
short_equivalent_nodes_off() information is added.
device_type
Required. Specifies the device type. Only NMOS and PMOS device types are available.
device_names
Optional. Specifies the layout devices. Each device must match a device specified in a
device_name argument of a device configuration function.
equiv_cells
Optional. Specifies the schematic and layout cell name pairs for which the
short_equivalent_nodes_off() function applies. You must specify the equiv_cells
pairs in the equiv_options() function before calling the
short_equivalent_nodes_off() function. If only one cell name in the pair is specified,
the names are assumed to be the same.
Note:
The short_equivalent_nodes_off() instruction is observed only when comparing
each listed equivalence cell pair. If an equivalence cell pair is exploded into the parent
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
short_equivalent_nodes()
shrink()
The shrink() function creates polygons from the input layer that are undersized in the
specified directions by the specified distances. If the north, south, east, and west
arguments are all 0 (zero) then the output is the original layer. See the
prototype_options() function for more information about defining the criteria for the
creation of prototype cells during hierarchical preprocessing.
Syntax
shrink(
layer1 = polygon_layer,
north = double, //optional
south = double, //optional
east = double, //optional
west = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
north
Optional. Specifies the undersize distance from the northern direction, or the top of the
polygons. The default is 0.
south
Optional. Specifies the undersize distance from the southern direction, or the bottom of
the polygons. The default is 0.
east
Optional. Specifies the undersize distance from the eastern direction, or right of the
polygons. The default is 0.
west
Optional. Specifies the undersize distance from the western direction, or left of the
polygons. The default is 0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 3-161 shows examples of the shrink() function.
layer1 Result
See Also
edge_grow()
edge_shrink()
grow()
move()
size()
size()
The size() function oversizes the polygons on the input layer by the specified value.
Syntax
size(
layer1 = polygon_layer,
distance = double,
corner_extension = INTERSECTION | RADIAL_OUTSIDE |
RADIAL_INSIDE | NONE, //optional
clip_acute = BISECTOR | ORTHOGONAL | OCTAGONAL | NONE,
//optional
corner_steps = integer, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
radial_sectors = integer, //optional
snap = CLOSEST | OVERSIZE | UNDERSIZE //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
distance
Required. Specifies the size distance.
❍ A positive value oversizes the polygons.
❍ A negative value undersizes the polygons.
❍ A value of 0 is a copy.
corner_extension
Optional. Specifies how the corners are processed. The default is INTERSECTION.
❍ INTERSECTION. Forms a new corner at the intersection point of the sized adjacent
edges.
❍ RADIAL_OUTSIDE. Forms a radial corner using an approximation curve that is
generated by a regular polygon circumscribed by a circle with the radius distance.
❍ RADIAL_INSIDE. Forms a radial corner using an approximation curve that is
generated by a regular polygon inscribed by a circle with the radius distance.
clip_acute
Optional. When the corner_extension argument is INTERSECTION, specifies the type
of clipping that occurs when an acute interior angle is oversized, or an acute exterior
angle is undersized. The default is OCTAGONAL.
❍ BISECTOR. Clips acute angles with an edge perpendicular to the angle bisector at
(sqrt(2) x distance) from the original corner.
❍ ORTHOGONAL. When one edge is orthogonal, clips the angle perpendicular to that
edge at the specified distance from the original corner. Otherwise, clips the angle with
an edge perpendicular to the angle bisector at the specified distance away from the
original corner.
❍ OCTAGONAL. Clips acute angles with two edges at the specified distance from the
original corner, perpendicular to each of the edges forming the corner.
❍ NONE. Does not clip acute angles.
corner_steps
Optional. When the corner_extension argument is NONE, this argument provides an
approximation of the oversize of orthogonal corners using the specified number of steps.
Nonorthogonal corners are approximated with a single edge. The default is 0.
If the specified corner_steps value is too big, meaning that the corresponding corner
step size is smaller than the internal resolution, the specified corner_steps value has
no effect. The internal_resolution argument of the resolution_options() function
sets the internal resolution. In this case, the internal resolution is used to determine the
largest possible number to be used as the corner_steps value.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
radial_sectors
Optional. Specifies the number of radial sectors used to approximate a quadrant at the
right corner. The effect of this argument on the sizing depends on the value of the
corner_extension argument.
The minimum value is 0, and the maximum value is 16. The value must be greater than
0 if the corner_extension argument is RADIAL_INSIDE or RADIAL_OUTSIDE. The
default is 0.
snap
Optional. Specifies how non-orthogonal edges are snapped. The default is CLOSEST.
❍ CLOSEST. Specifies that sized vertices are snapped to the closest internal resolution.
❍ OVERSIZE. Specifies that sized vertices are snapped to the closest upper internal
resolution.
❍ UNDERSIZE. Specifies that sized vertices are snapped to the closest lower internal
resolution.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In Figure 3-162, the polygons on layerA are sized by the specified distance, in m. For
example,
result = size(layerA, distance = -0.1);
layerA result
layerA
result
INTERSECTION NONE
(default)
Figure 3-164 shows the clipping that occurs when an acute interior angle is oversized or an
acute exterior angle is undersized. For example,
result = size(layerA, 0.1, clip_acute = BISECTOR);
In Figure 3-165, edges of polygons on layerA are projected outward by 0.3 m.
Nonorthogonal corners are clipped and orthogonal corners are replaced with multiple steps,
approximating a circle. For example,
result = size(layerA, 0.3, NONE, corner_steps = 8);
0 2 8
layerA result
See Also
edge_grow()
edge_shrink()
edge_size()
extend_edge()
move()
shrink()
size_inside()
size_outside()
size_inside()
The size_inside() function is a bounded, incremental, oversize operation. The process
begins with an AND operation to find the active area shared by the two layers. The layer1
or the bounding layer polygons that do not share active areas with the other layer are
ignored. The process continues by repeating these two steps:
1. An oversize using the increment argument value.
2. An AND with the bounding layer.
Each iteration results in data that increasingly fills the area of the enclosing, bounding
polygon. These two steps are repeated until the accumulated oversize meets the specified
distance. By default, the process is completed by subtracting the sized data from the
bounding polygon, such that the result is the portion of the bounding polygon that was not
covered by the incrementally sized data.
Syntax
size_inside(
layer1 = polygon_layer,
bounding = polygon_layer,
distance = double,
increment = double,
output_type = OVERSIZE | REMAINDER, //optional
radial_points = {ONE, TWO, FOUR, EIGHT, SIXTEEN}, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label", //optional
radial_sectors = integer, //optional
corner_extension = INTERSECTION | RADIAL_OUTSIDE | RADIAL_INSIDE,
//optional
start_with = AND | SIZE //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer that is sized.
bounding
Required. Specifies the bounding polygon layer.
distance
Required. Specifies the total oversize distance. It must be a nonnegative number.
increment
Required. Specifies the step size, which must have a value greater than 0.
output_type
Optional. Specifies the type of output generated.
❍ OVERSIZE. Outputs the incremental, bounded, size.
❍ REMAINDER. Outputs the portion of the bounding polygon that is not covered by the
oversized data. The remainder does not include bounding polygons that do not share
an active area with layer1.
radial_points
Optional. Specifies the number of points used to approximate a radial curve when
oversizing right, interior corners. The default is ONE. The possible values are:
❍ ONE (indicates that no approximation curve is formed)
❍ TWO
❍ FOUR
❍ EIGHT
❍ SIXTEEN
Approximation Curves
Approximation curves are formed, as follows:
❍ 90-degree interior corners are approximated with the number of radial points
specified.
❍ The sharper the interior angle, the more points that are used for the approximation.
The number of points used varies across the continuum of angles. That is,
■ The oversizing of 135-degree interior corners is approximated with 0.5 as many
radial points.
■ The oversizing of 45-degree interior corners is approximated with 1.5 as many
radial points.
The objective is to set the increment argument to the largest legal value so that the
size_inside() function takes the fewest iterations to complete.
The limitations are
❍ Too large of an increment can cause the oversized data to jump into adjacent data.
❍ Too small of an increment causes the operation to run in less than optimal time.
TWO 1.09
FOUR 1.02
EIGHT 1.005
SIXTEEN 1.002
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
radial_sectors
Optional. Specifies the number of radial sectors used to approximate a quadrant at the
right corner. The effect of this argument on the sizing depends on the value of the
corner_extension argument. The radial_points argument must be ONE.
The minimum value is 0, and the maximum value is 16. If the value is 0, then the
size_inside() function does not form an approximation curve. The default is 0.
corner_extension
Optional. Specifies how corners are handled when the function causes the adjacent
edges to pull apart. This behavior does not apply to corners where the function causes
the edges to collide. The radial_points argument must be ONE. The default is
INTERSECTION.
❍ INTERSECTION. Forms a new corner at the intersection point of the sized adjacent
edges.
❍ RADIAL_OUTSIDE. A radial corner is formed by the approximation curve is generated
by a regular polygon circumscribed by a circle with the radius distance.
❍ RADIAL_INSIDE. A radial corner is formed by the approximation curve is generated
by a regular polygon inscribed by a circle with the radius distance.
start_with
Optional. Specifies how to start the size_inside operations of layer1. The default is
AND.
❍ AND. Starts with an AND operation to find the area shared by layer1 and a bounding
layer.
Note:
The output of the size_inside() function is empty for a layer1 shape that does
not share an active area with a bounding layer.
❍ SIZE. Starts with a SIZE operation. Use this setting when the size_inside()
function needs to size a layer1 shape inside a bounding layer that does not share an
active area with a boundary layer.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 3-166 shows how to use the size_inside() function to flow around notches. For
example,
boundingLyrNotch : const double = 5.0;
// Note: for 45-degree layer1 data (not shown),
// increment = boundingLyrNotch/(sqrt(2) +1);
// 90-degree layer1 data
incrementValue : const double = boundingLyrNotch/sqrt(2);
// Assign Layers
boundingLyr = assign({{1}});
layerA = assign({{2}});
For example,
boundingLyrNotch : const double = 5.0;
// 90-degree layer1 data
good_incrementValue : const double = boundingLyrNotch/sqrt(2);
// Note: The bad increment jumps over the notch
// rather than going around it.
bad_incrementValue : const double = 7.0;
// Assign Layers
boundingLyr = assign({{1}});
layerA = assign({{2}});
layerA
boundingLyr
result
good increment bad increment
Figure 3-168 shows the results of setting the output_type argument. For example,
// 90-degree layer1 data
boundingLyrNotch : const double = 5.0;
incrementValue : const double = boundingLyrNotch/sqrt(2);
// Assign Layers
boundingLyr = assign({{1}});
layerA = assign({{2}});
layerA
boundingLyr
REMAINDER OVERSIZE
(default) result
Figure 3-169 shows the results of using the radial_points argument. For example,
boundingLyrNotch : const double = 5.0;
// 90-degree layer1 data
// Assign Layers
boundingLyr = assign({{1}});
See Also
edge_grow()
edge_shrink()
edge_size()
size()
size_outside()
size_outside()
The size_outside() function is an incremental oversize operation that sizes around
polygons. The size_outside() operation is performed by repeating two steps:
1. An oversizing operation that sizes layer1 data by the specified increment argument
value;
2. Followed by a NOT operation of the data on the layer1 argument layer and the specified
outside layer.
These two steps are repeated until the total oversizing specified in the operation is
completed. This process creates an oversized region that fills the “empty space” around the
specified outside-layer shapes. The result depends on the specification of the to_layer
argument.
If the to_layer argument is specified as a regular polygon layer, the result is the portions of
the to_layer argument that are not covered by the oversized region. If the to_layer
argument is specified to be NULL_POLYGON_LAYER, the result is the oversized region itself.
This is comparable to the result for the size_inside() function when output_type =
OVERSIZE.
Syntax
size_outside(
layer1 = polygon_layer,
outside = polygon_layer,
to_layer = polygon_layer,
distance = double,
increment = double,
radial_points = {ONE, TWO, FOUR, EIGHT, SIXTEEN}, //optional
name = "layer_label", //optional
radial_sectors = integer, //optional
corner_extension = INTERSECTION | RADIAL_OUTSIDE | RADIAL_INSIDE,
//optional
start_with = NOT | SIZE //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer that is sized.
outside
Required. Specifies the restricting input polygon layer.
to_layer
Required. Specifies the destination input layer.
distance
Required. Specifies the total oversize distance. It must be a nonnegative number.
increment
Required. Specifies the step size, which must have a value greater than 0.
radial_points
Optional. Specifies the number of points used to approximate a radial curve when
oversizing right, interior corners. The default is ONE. The possible values are
❍ ONE (indicates that no approximation curve is formed)
❍ TWO
❍ FOUR
❍ EIGHT
❍ SIXTEEN
Approximation Curves
Approximation curves are formed, as follows:
❍ 90-degree interior corners are approximated with the number of radial points
specified.
❍ The sharper the interior angle, the more points that are used for the approximation.
The number of points used varies across the continuum of angles. That is,
■ The oversizing of 135-degree interior corners is approximated with 0.5 as many
radial points.
■ The oversizing of 45-degree interior corners is approximated with 1.5 as many
radial points.
The objective is to set the increment to the largest legal value so that the
size_outside() function takes the fewest iterations to complete.
The limitations are
❍ Too large of an increment can cause the oversized data to jump into adjacent data.
❍ Too small of an increment causes the operation to take longer to run.
TWO 1.09
FOUR 1.02
EIGHT 1.005
SIXTEEN 1.002
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
radial_sectors
Optional. Specifies the number of radial sectors used to approximate a quadrant at the
right corner. The effect of this argument on the sizing depends on the value of the
corner_extension argument. The radial_points argument must be ONE.
The minimum value is 0, and the maximum value is 16. If the value is 0, then the
size_outside() function does not form an approximation curve. The default is 0.
corner_extension
Optional. Specifies how corners are handled when the function causes the adjacent
edges to pull apart. This behavior does not apply to corners where the function causes
the edges to collide. The radial_points argument must be ONE. The default is
INTERSECTION.
❍ INTERSECTION. Forms a new corner at the intersection point of the sized adjacent
edges.
❍ RADIAL_OUTSIDE. A radial corner is formed by the approximation curve is generated
by a regular polygon circumscribed by a circle with the radius distance.
start_with
Optional. Specifies how to start the size_outside() operations of layer1. The default is
NOT.
❍ NOT. Specifies that size_outside() function starts with a NOT operation to find
layer1 polygons that do not share area with a bounding layer.
Note:
The output of the size_outside() operation is empty for a layer1 shape that is
enclosed by a bounding layer.
❍ SIZE. Specifies that the size_outside() function starts with a SIZE operation. This
setting is necessary when the size_outside() operation must size a layer1 shape
outside of a bounding layer, and it is enclosed by a boundary layer.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
Figure 3-171 shows how to use the size_outside() function to flow around a handle. For
example,
// Determine the increment value using the smallest feature size:
// min(outsideLyrWidth, outsideLyrhandle)
outsideLyrWidth : const double = 10.0;
outsideLyrhandle : const double = 5.0;
// Note: for 45-degree layer1 data (not shown),
// increment = outsideLyrhandle/(sqrt(2) +1);
// 90-degree layer1 data
incrementValue : const double = outsideLyrNotch/sqrt(2);
// Assign Layers
outsideLyr = assign({{1}});
tapLyr = assign({{2}});
ndev = assign({{3}});
For example,
// Determine the increment value using the smallest feature size:
// min(outsideLyrWidth, outsideLyrhandle)
outsideLyrWidth : const double = 10.0;
outsideLyrhandle : const double = 5.0;
// 90-degree layer1 data
good_incrementValue : const double = outsideLyrhandle/sqrt(2);
// Note: The bad increment jumps over the notch
// rather than going around it.
bad_incrementValue : const double = 9.0;
// Assign Layers
outsideLyr = assign({{1}});
tapLyr = assign({{2}});
ndev = assign({{3}});
Figure 3-173 shows the results of using the radial_points argument. For example,
// Determine the increment value using the smallest feature size:
// min(outsideLyrWidth, outsideLyrhandle)
outsideLyrWidth : const double = 10.0;
outsideLyrhandle : const double = 5.0;
// 90-degree layer1 data
incrementValue : const double = outsideLyrhandle/sqrt(2);
// Assign Layers
outsideLyr = assign({{1}});
tapLyr = assign({{2}});
ndev = assign({{3}});
When start_with=SIZE, the purple layer1 polygon is sized first. The sized layer1 polygon
that is outside of the boundary layer is NOTed to continue the size_outside operation.
Because layer1 was enclosed by the boundary layer and start_with=SIZE, the
size_outside operation outputs the blue shaded portions outside of the boundary, as
shown in Figure 3-176.
See Also
edge_grow()
edge_shrink()
edge_size()
size()
size_inside()
size_overlap()
The size_overlap() function oversizes the polygons on the input layer by the specified
value, and then creates polygons that represent the area where the separate, oversized
polygons overlap.
Syntax
size_overlap(
layer1 = polygon_layer,
distance = double,
clip_acute = BISECTOR | ORTHOGONAL | OCTAGONAL | NONE, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
distance
Required. Specifies the oversize distance. It must be positive; a value of 0 results in an
empty output layer.
clip_acute
Optional. When the corner_extension argument is INTERSECTION, this argument
specifies the type of clipping that occurs on acute interior angles. The default is NONE.
❍ BISECTOR. Clips acute angles with an edge perpendicular to the angle bisector at
(sqrt(2) x distance) from the original corner.
❍ ORTHOGONAL. When one edge is orthogonal, clips the angle perpendicular to that
edge at the specified distance from the original corner. Otherwise, clips the angle with
an edge perpendicular to the angle bisector at the specified distance away from the
original corner.
❍ OCTAGONAL. Clips acute angles with two edges at the specified distance from the
original corner, perpendicular to each of the edges forming the corner.
❍ NONE. Does not clip acute angles.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In Figure 3-177 the three squares are oversized by 1 m. Only the areas of overlap are
output.
Result = size_overlap(layer1 = layerA, distance = 1);
See Also
rectangle_overlap()
snap()
The snap() function creates polygons that represent the input polygons with all vertices
snapped to the specified resolution. This function is a cell-level operation.
Note:
The tool does not fill in holes created by a self-intersecting polygons that are created by
the snap() function.
Syntax
snap(
layer1 = polygon_layer,
resolution = double,
preference = OVERSIZE | UNDERSIZE | RETAIN_45 | CLOSEST, //optional
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
layer1
Required. Specifies the polygon layer.
resolution
Required. Specifies the resolution value for snapping the polygons. It must be a positive
value.
preference
Optional. Specifies where vertices are snapped. The default is RETAIN_45.
❍ OVERSIZE. Specifies that vertices are snapped to the closest grid point that is outside
or on the input polygon.
❍ UNDERSIZE. Specifies that vertices are snapped to the closest grid point that is inside
or on the input polygon.
❍ RETAIN_45. Specifies that vertices are snapped to the closest grid point with the
possible exception of 45-degree edges. An attempt is made to maintain 45-degree
edges when snapping.
❍ CLOSEST. Specifies that vertices are snapped to the closest grid point.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
x = snap(grown_metal, 0.05);
See Also
edge_size()
resolution_options()
size()
snap_edge()
snap_edge()
The snap_edge() function creates edges that represent the input edges with all endpoints
snapped to the specified resolution. This function is a cell-level operation.
Syntax
snap_edge(
layer1 = edge_layer,
resolution = double,
preference = OVERSIZE | UNDERSIZE | RETAIN_45 | CLOSEST, //optional
name = "layer_label" //optional
);
Returns
edge layer
Arguments
layer1
Required. Specifies the edge layer.
resolution
Required. Specifies the resolution value for snapping the edges. It must be a positive
value.
preference
Optional. Specifies where endpoints are snapped. The default is RETAIN_45.
❍ OVERSIZE. Specifies that endpoints are snapped to the closest grid point that is
outside or on the input edge.
❍ UNDERSIZE. Specifies that endpoints are snapped to the closest grid point that is
inside or on the input edge.
❍ RETAIN_45. Specifies that endpoints are snapped to the closest grid point with the
possible exception of 45-degree edges. An attempt is made to maintain 45-degree
edges when snapping.
❍ CLOSEST. Specifies that endpoints are snapped to the closest grid point.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
x = snap_edge(metal_edges, 0.05);
See Also
resolution_options()
snap()
snap_to_pattern()
The snap_to_pattern() function creates data that represent the input data snapped to the
specified grid_pattern. This function is a cell-level operation.
Syntax
snap_to_pattern(
layer1 = polygon_layer,
bounding_layer = polygon_layer,
reference_layer = polygon_layer,
grid_pattern = list of double,
offset = double,
orientation = VERTICAL | HORIZONTAL,
preference = OVERSIZE | UNDERSIZE | CLOSEST_OVERSIZE |
CLOSEST_UNDERSIZE, //optional
name = "layer_label", //optional
snap_side = ALL | HIGH | LOW, //optional
output_type = ALL | DELTA //optional
);
Returns
polygon layer
Arguments
layer1
Required. Specifies the input layer to be snapped. The snap_to_pattern() argument
accepts polygon layer and output polygon layer.
bounding_layer
Required. Specifies the input polygon layer to limit the edges that could be snapped.
Both the data to be snapped and the snapped result should be inside or
inside_coincident with the bounding layer.
reference_layer
Required. Specifies the input polygon layer to use (left, bottom) of its layer extents as the
reference point to define the grid pattern.
grid_pattern
Required. Specifies different distance values to form the repeated pattern.
offset
Required. Specifies the distance before the repeated pattern, measured from the
reference point, which depends on the orientation argument:
❍ orientation=VERTICAL. Uses the left of the layer extents of the reference layer.
orientation
Required. Specifies the orientation used to snap to the grids.
❍ VERTICAL. Snaps the x-coordinate of vertices from vertical edges.
preference
Optional. Specifies how edges are snapped. These edges cannot snap exceed the
bounding layer polygon where they are inside or inside_coincident. The default is
CLOSEST_OVERSIZE.
❍ OVERSIZE. Specifies that vertices from candidate edges are snapped to the closest
grid that is outside or on the input polygon or edge.
❍ UNDERSIZE. Specifies that vertices from candidate edges are snapped to the closest
grid that is inside or on the input polygon or edge.
❍ CLOSEST_OVERSIZE. Specifies that vertices from candidate edges are snapped to the
closest grid. If it is in the middle point, choose OVERSIZE.
❍ CLOSEST_UNDERSIZE. Specifies that vertices from candidate edges are snapped to
the closest grid. If it is in the middle point, choose UNDERSIZE.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
snap_side
Optional. Specifies the limit at which the side must be snapped. The default is ALL.
❍ ALL. Specifies that both the LOW and HIGH edges must be snapped.
❍ HIGH. Specifies that if the orientation is HORIZONTAL, the edge on the top side, with a
direction from left to right is snapped. If the orientation is VERTICAL, the edge on the
right side, with a direction from top to bottom, is snapped.
❍ LOW. Specifies that if the orientation is HORIZONTAL, the edge on the bottom side, with
a direction from right to left is snapped. If the orientation is VERTICAL, the edge on the
left side, with a direction from bottom to top is snapped.
output_type
Optional. Specifies how the post-snapping result is returned. The default is ALL.
❍ ALL. Specifies that the post-snap output is the extension and retraction portion along
with the polygon that is input to the snapping operation.
❍ DELTA. Specifies that the post-snap output is just the extension and retraction portion
of the snapping operation.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Figure 3-178 shows the CLOSEST_OVERSIZE and CLOSEST_UNDERSIZE options of the
preference argument.
snap_to_pattern(preference = CLOSEST_OVERSIZE | CLOSEST_UNDERSIZE)
snap_to_pattern(output_type = DELTA)
See Also
grid_pattern_edge()
resolution_options()
snap()
snap_edge()
snap_to_pattern_edge()
snap_to_pattern_edge()
The snap_to_pattern_edge() function creates data that represent the input data snapped
to the specified grid_pattern. This function is a cell-level operation.
Syntax
snap_to_pattern_edge(
layer1 = edge_layer,
bounding_layer = polygon_layer,
reference_layer = polygon_layer,
grid_pattern = list of double,
offset = double,
orientation = VERTICAL | HORIZONTAL,
preference = OVERSIZE | UNDERSIZE | CLOSEST_OVERSIZE |
CLOSEST_UNDERSIZE, //optional
name = "layer_label", //optional
snap_side = ALL | HIGH | LOW //optional
);
Returns
edge layer
Arguments
layer1
Required. Specifies the input layer to be snapped. The snap_to_pattern_edge()
argument accepts edge layer and output edge layer. For edge input, edges are snapped
independently per edge.
bounding_layer
Required. Specifies the input polygon layer to limit the edges that could be snapped.
Both the data to be snapped and the snapped result should be inside or
inside_coincident with the bounding layer.
reference_layer
Required. Specifies the input polygon layer to use (left, bottom) of its layer extents as the
reference point to define the grid pattern.
grid_pattern
Required. Specifies different distance values to form the repeated pattern.
offset
Required. Specifies the distance before the repeated pattern, measured from the
reference point, which depends on the orientation argument:
❍ orientation=VERTICAL. Uses the left of the layer extents of the reference layer.
orientation
Required. Specifies the orientation used to snap to the grids.
❍ VERTICAL. Snaps the x-coordinate of vertices from vertical edges.
preference
Optional. Specifies how edges are snapped. These edges cannot snap exceed the
bounding layer polygon where they are inside or inside_coincident. The default is
CLOSEST_OVERSIZE.
❍ OVERSIZE. Specifies that vertices from candidate edges are snapped to the closest
grid that is outside or on the input polygon or edge.
❍ UNDERSIZE. Specifies that vertices from candidate edges are snapped to the closest
grid that is inside or on the input polygon or edge.
❍ CLOSEST_OVERSIZE. Specifies that vertices from candidate edges are snapped to the
closest grid. If it is in the middle point, choose OVERSIZE.
❍ CLOSEST_UNDERSIZE. Specifies that vertices from candidate edges are snapped to
the closest grid. If it is in the middle point, choose UNDERSIZE.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
snap_side
Optional. Specifies the limit at which the side must be snapped. The default is ALL.
❍ ALL. Specifies that both the LOW and HIGH edges must be snapped.
❍ HIGH. Specifies that if the orientation is HORIZONTAL, the edge on the top side, with a
direction from left to right is snapped. If the orientation is VERTICAL, the edge on the
right side, with a direction from top to bottom, is snapped.
❍ LOW. Specifies that if the orientation is HORIZONTAL, the edge on the bottom side, with
a direction from right to left is snapped. If the orientation is VERTICAL, the edge on the
left side, with a direction from bottom to top is snapped.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
grid_pattern_edge()
resolution_options()
snap()
snap_edge()
snap_to_pattern()
snapshot()
The snapshot() function marks the location in a runset where the IC Validator tool
• Saves data about the state of a run when the -snapshot command-line option is used.
The snapshot() function does not stop the IC Validator run.
• Resumes the run using the saved data when the -snapshot_resume command-line
option is used.
See the Command-Line Options section in the “IC Validator Basics” chapter of the
IC Validator User Guide for information about the command-line options.
The snapshot data includes information about group files, error hierarchy files, and connect
databases. However, violations in the error classification database and other information in
text files are not saved.
No modifications are permitted to the runset after the snapshot is generated. These
modifications include adding, removing, or modifying functions and violation blocks. It also
includes adding, removing or modifying #runonly pragmas and preprocessor macros.
Multiple snapshot() functions are not allowed in a runset.
Syntax
snapshot(
path = "string"
);
Returns
void
Arguments
path
Required. Specifies the path of the saved snapshot files.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
soft_check()
The soft_check() function verifies that all layer1 polygons which intersect a layer2
polygon belong to the same net. It can be used in polygon mode or error mode. Output can
be reported as a polygon layer or error.
Bounding box errors are reported to the LAYOUT_ERRORS file and appear as boxes in
VUE.
The layer1 polygons must be in the connect database while the layer2 polygons must not
be in connect database, as this affects the selection of output.
Syntax
soft_check(
connect_sequence = connect_database,
layer1 = polygon_layer,
layer2 = polygon_layer,
output_layer = LAYER1 | LAYER2 | ALL, //optional
layer1_output = ONE | ALL, //optional
include_touch = NONE | EDGE, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
connect_sequence
Required. Specifies the connect database.
layer1
Required. Specifies a polygon layer. It must be in the connect database.
layer2
Required. Specifies a polygon layer. It must not be in the connect database.
output_layer
Optional. Specifies the layer used to generate the derived output layer. The default is
LAYER2.
❍ LAYER1. Outputs the layer1 polygons that are not connected to the same net.
❍ LAYER2. Outputs the layer2 polygons that intersect the failed layer1 polygons.
❍ ALL. Outputs all layer1 polygons that interact with layer2 polygons and layer2
polygons.
layer1_output
Optional. Specifies the number of layer1 polygons per net reported for a layer2
polygon. This argument affects the generated layer only when the output_layer
argument is LAYER1 or ALL. The default is ONE.
❍ ONE. Outputs one arbitrary layer1 polygon from each net.
❍ ALL. Outputs all layer1 polygons that intersect the layer2 polygon.
include_touch
Optional. Specifies the types of touches that provide an electrical connection. The default
is NONE.
❍ NONE. Specifies that no touches form an electrical connection.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_ERC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
x = soft_check(condb, tap, well, LAYER1, ONE);
The tap1 and tap2 circuits in Figure 3-181 are in the same well, but they are not connected
and therefore produce two disconnected nets. The same well is now connected to two
different circuits, causing a soft_check() violation.
tap2
well
tap1
tap
contact
Result X metal1
Result X
The tap1 and tap2 circuits in Figure 3-182 are connected by metal1 in the upper cell, and
maintain the potential of the well to one potential. Therefore, the circuit produces a clean
soft_check() error.
well
tap2 tap
tap1 contact
metal1
See Also
sconnect()
soft_connect()
soft_connect_check()
stamp()
soft_connect()
The soft_connect() function creates a connect database that defines electrical
connectivity for the specified layers. For each entry within the soft_connect_items
definition, the soft_connect() function passes connectivity from upper to lower layers
when the lower layer interacts with one or multiple upper-layer nets.
When the lower layer interacts with multiple upper-layer nets, the soft_connect() function
selectively passes connectivity between one upper-layer net and the lower layer. The
soft_connect() function detects when the lower layer interacts with multiple upper-layer
nets, even when different by layers are used. The connect database created by the
soft_connect() function retains text from the input connect database. Lower layers
interacting with multiple upper-layer nets can be reported as errors by using the
soft_connect_check() function.
Syntax
soft_connect(
connect_sequence = connect_database,
soft_connect_items = {{upper_layer = polygon_layer,
lower_layers = {polygon_layer, ...},
by_layer = polygon_layer,
include_touch = NONE | EDGE},
...},
allow_connected_lower_layers = true | false, //optional
conflict_resolution = POLYGON_COUNT | TRAPEZOID_COUNT //optional
);
Returns
connect database
Arguments
connect_sequence
Required. Specifies the connect database.
soft_connect_items
Required. Lists the connection specifications.
❍ upper_layer
Required. Specifies the layer used by the soft_connect() to pass connectivity to
the lower layer. This layer must exist in the input connect database or already exist in
the soft_connect_items definition as a lower layer. This is usually a routing layer.
❍ lower_layers
Required. Specifies the layer that receives connectivity from the upper layer. This
layer cannot exist in the input connect database. This layer is usually the well layer.
❍ by_layer
Optional. Specifies the polygon layer by which the upper and lower layers are
connected. These layers are usually contact or tap layers.
❍ include_touch
Optional. Specifies the types of touches that provide an electrical connection. The
default is NONE.
■ NONE. Specifies that no outside edge touches form an electrical connection.
■ EDGE. Specifies that upper layers that outside edge touch the lower layer form an
electrical connection.
Note:
The by layer cannot be used when include_touch=EDGE.
allow_connected_lower_layers
Optional. Specifies whether connected layers are present in the lower layers. This
relaxed condition might indicate that lower-layer polygons are already shorted with their
given connectivity. This scenario suggests a misuse of the argument, but it is still
allowed. Therefore, be aware of the potential risk of setting the
allow_connected_lower_layers argument to true. The default is false.
❍ true. Specifies that any layer in the lower layers can be connected if its connectivity
has nothing to do with any of its corresponding upper layers. Therefore, it still should
not be connected to any of its upper layers, either directly or indirectly.
❍ false. Specifies that the lower layers cannot be connected.
conflict_resolution
Optional. Specifies how a soft connection conflict is resolved. The default is
POLYGON_COUNT.
❍ POLYGON_COUNT. Resolves the conflict on the lower-layer polygon by selecting the net
that has the most contact polygons which interact with this polygon.
Note:
This behavior is similar to the sconnect() function when mode = LOCAL.
❍ TRAPEZOID_COUNT. Resolves the conflict on the lower-layer polygon by selecting the
net that has the most polygon trapezoids among all of the upper layers and by layers.
Note:
A layer in upper layer or by layer is related to the conflict when it is specified as
the same item as the lower-layer polygon of the soft_connect_items definition.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Example
The following examples show the criteria the soft_connect() function uses to pass
connectivity when the lower layer interacts with multiple upper-layer nets.
The soft_connect() function first attempts to pass connectivity from the upper to lower
layer by selecting the net with the most upper layer or by layer local intersections with the
lower layers.
net2 has two tap1 intersections with well1, and net1 has only one tap2. The
soft_connect() function passes connectivity from net2 to well1, as shown in Figure 3-183.
cdb = soft_connect(cdb, {
{upper_layer = diff, lower_layers = {WELL}, by_layer = tap1},
{upper_layer = diff, lower_layers = {WELL}, by_layer = tap2} }
);
If intersections between the upper layer or by layer and lower layers are the same, locally,
the soft_connect() function attempts to pass connectivity through the net that has the
most upper layers or by layer intersections with the lower layer globally, as shown in
Figure 3-184. The soft_connect() function passes connectivity between net1 and well since
this net has the most global tap polygons.
cdb = soft_connect(cdb, {
{upper_layer = diff, lower_layers = {WELL}, by_layer = tap1} }
);
If the intersection count between the upper layer or by layer and lower layer cannot resolve
connectivity, the soft_connect() function chooses the texted net first. If text cannot resolve
the selected net, the engine chooses a net arbitrarily.
See Also
sconnect()
soft_check()
soft_connect_check()
stamp()
soft_connect_check()
The soft_connect_check() function processes a connect database generated by
soft_connect() function to verify that the lower layer touches only one upper layer net.
The soft_connect_check() function creates a polygon or error representing the upper,
lower, and contact layers that do not meet this criteria.
Syntax
soft_connect_check(
connect_sequence = connect_database,
lower_layer = polygon_layer,
output_layer = UPPER | LOWER | CONTACT | ALL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
connect_sequence
Required. Specifies a connect database generated by the soft_connect() function.
lower_layer
Required. Specifies the lower layer needed to verify the number of touching upper-layer
nets. This lower layer must be used as a lower layer in a previous soft_connect()
function.
output_layer
Optional. Specifies the layer used to generate the polygon or error layer when lower
layers interact with multiple upper level nets. When the soft_connect() function
generates a polygon layer, only UPPER and CONTACT polygons, which are not connected
to the lower layers by the soft_connect() function, are candidates for output. When the
soft_connect() function generates an error, all UPPER and CONTACT polygons are
candidates for output. The default is LOWER.
❍ UPPER. Outputs an upper layer used in a previous a soft_connect() function.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Example
net1 has fewer connections in well1, so the soft_connect_check() output layer should be
tap2 on net1, as shown in Figure 3-185.
cdb = soft_connect(cdb,
{
{upper_layer = diff, lower_layers = {WELL}, by_layer = tap1},
{upper_layer = diff, lower_layers = {WELL}, by_layer = tap2} }
);
soft_connect_check(cdb, well, CONTACT);
net1 has fewer connections in well, so the soft_connect_check() output layer should be
diff on net1, as shown in Figure 3-186.
cdb = soft_connect(cdb,
{
{upper_layer = diff, lower_layers = {WELL}, by_layer = tap1},
{upper_layer = diff, lower_layers = {WELL}, by_layer = tap2} }
);
soft_connect_check(cdb, well, UPPER);
See Also
sconnect()
soft_check()
soft_connect()
stamp()
spice_netlist_file()
The spice_netlist_file() function defines a SPICE file name. This file is specified in the
output_file argument of the write SPICE functions, write_spice() and
write_xref_spice().
Limitation:
The spice_netlist_file() function cannot be called more than one time with the
same file argument. The result, however, can be used in more than one write_spice()
or write_xref_spice() function, in which case the file is overwritten.
Syntax
spice_netlist_file(
file = "string"
);
Returns
spice_netlist_file_handle
Arguments
file
Required. Names the SPICE netlist output file. See the write_spice() and
write_xref_spice() functions for more information.
Function Group
No assigned runset section. See “Function Order in Runsets” on page A-11 for more
information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
See Also
write_spice()
write_xref_spice()
stamp()
The stamp() function passes connectivity from one layer to another without modifying the
connectivity of the connected layer.
The stamp() function derives a layer by selecting the layer1 polygons that interact with the
layer2 polygons from the same net. The output connect database retains text from the
input connect database.
A connectivity database, specified by the out_connect_sequence argument, is then
created by incrementally connecting the derived layer (from the stamp() function output) by
the layer2 polygons. The connectivity is determined within the context of the database
specified by the in_connect_sequence argument.
The layer1 polygons are not selected when
• The layer1 polygons do not interact with the layer2 polygons.
• The layer1 polygons interact with the layer2 polygons on more than one net.
Note:
The layer polygons that interact with one hierarchical net, but with more than one
cell-level net, are exploded to a hierarchical location where they interact with only one
cell-level net.
Syntax
stamp(
layer1 = polygon_layer,
layer2 = polygon_layer,
in_connect_sequence = connect_database,
out_connect_sequence = out_connect_database,
include_touch = NONE | EDGE, //optional
name = "layer_label", //optional
check_connectivity = true | false //optional
);
Returns
polygon layer
Arguments
layer1
Required. Specifies the polygon layer that needs connectivity.
layer2
Required. Specifies the polygon layer that is already connected.
in_connect_sequence
Required. Specifies the connect database in which the layer2 layer is connected.
out_connect_sequence
Required. Specifies the output connect database that contains the derived layer.
include_touch
Optional. Specifies the types of touches that provide an electrical connection. The default
is EDGE.
❍ NONE. Specifies that no touches form an electrical connection.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
check_connectivity
Optional. Specifies whether a connectivity check between two input layers are enabled.
The default is true.
❍ true. Specifies that a connectivity check is enabled.
❍ false. Specifies that a connectivity check is disabled. All layer1 polygons are
selected for output regardless of the interaction with layer2 edges.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
PWEL_NODAL = stamp(PWELx, PWELi, global_connect_DWN,
global_connect_DWN);
See Also
connect()
create_ports()
incremental_connect()
sconnect()
soft_check()
stamp_edge()
text_net()
stamp_edge()
The stamp_edge() function passes connectivity from a polygon layer to an edge layer
without modifying the connectivity of the connected layer.
The stamp_edge() function derives an edge layer by selecting the layer1 edges that
interact with the layer2 polygons from the same net. The output connect database retains
text from the input connect database.
A connectivity database, specified by the out_connect_sequence argument, is then
created by incrementally connecting the derived layer (from the stamp() function output) by
layer2 polygons. The connectivity is determined within the context of the database
specified by the in_connect_sequence argument.
The layer1 edges are not selected when
• The layer1 edges do not interact with layer2 polygons.
• The layer1 edges interact with layer2 polygons on more than one net.
Note:
Layer polygons that interact with one hierarchical net, but more than one cell-level net,
are exploded to a hierarchical location where they interact with only one cell-level net.
The summary file contains
• Missing connections are reported if a layer1 edge does not interact with any layer2
polygon.
• Conflicting connections are reported if a layer1 edge interacts with two or more layer2
polygons that have different connectivity.
Syntax
stamp_edge(
layer1 = edge_layer,
layer2 = polygon_layer,
in_connect_sequence = connect_database,
out_connect_sequence = out_connect_database,
include_touch = NONE | EDGE, //optional
name = "layer_label", //optional
check_connectivity = true | false //optional
);
Returns
edge layer
Arguments
layer1
Required. Specifies the edge layer that needs connectivity.
layer2
Required. Specifies the polygon layer that is already connected.
in_connect_sequence
Required. Specifies the connect database in which the layer2 layer is connected.
out_connect_sequence
Required. Specifies the output connect database that contains the derived layer.
include_touch
Optional. Specifies the types of touches that provide an electrical connection. The default
is EDGE.
❍ NONE. Specifies that only intersecting edges form an electrical connection; edge
touches do not form an electrical connection.
❍ EDGE. Specifies that intersecting edges, inside edge touches, and outside edge
touches form electrical connections.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
check_connectivity
Optional. Specifies whether a connectivity check between two input layers are enabled.
The default is true.
❍ true. Specifies that a connectivity check is enabled.
❍ false. Specifies that a connectivity check is disabled. All layer1 edges are selected
for output regardless of the interaction with layer2 edges.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
Consider the edges and polygons in Figure 3-187:
Figure 3-187 stamp_edge() Function Example
A B C D E
See Also
connect()
create_ports()
incremental_connect()
sconnect()
soft_check()
stamp()
text_net()
system()
The system() function executes any valid UNIX command during an IC Validator run. After
the UNIX command is completed, runset execution resumes at the place it stopped.
Note:
When you are using distributed processing, any system() function must be included in
runtime control flow constructs to force it to execute after specific functions.
You cannot use the system() function in a remote function.
Syntax
system(
command = "string"
);
Returns
void
Arguments
command
Required. Specifies any valid UNIX command.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
system("echo Hello World.");
See Also
The following are diagnostic functions that are defined in “Diagnostics Functions” on
page 4-29. These functions can be used in remote functions.
note()
warning()
error()
fatal()
text_net()
The text_net() function applies the specified text to the specified layers in the specified
connect database. A new connect database with the texted nets is created. In addition, this
function resolves text opens as specified.
Note:
For optimal use of the text_net() function, you can use both the text_layer_items
and text_string_items arguments. You must use at least one of these arguments.
Syntax
text_net(
connect_sequence = connect_database,
text_layer_items = {{layer = polygon_layer,
text_layer = text_layer,
create_edtext_file = edtext_file_handle,
create_edtext_ldt =
{layer_num = integer, data_type = integer},
create_edtext_cells = {"string", ...}},
...}, //optional
text_string_items = {{layer = polygon_layer,
text = "string",
apply_to_texted_net = true | false},
...}, //optional
use_text = ALL | TOP, //optional
attach_text = NONE | TOP | ALL, //optional
create_short_finder_nets = {{nets = {"string", ...},
with_nets = {"string", ...}},
...}, //optional
text_priority_list = {"string", ...}, //optional
shorts = KEEP_ONE | DISCARD, //optional
opens = IGNORE | RENAME | MERGE_CONNECTED |
MERGE_CONNECTED_AND_TOP | MERGE_ALL |
MERGE_TOP_THEN_CONNECTED |
MERGE_TOP_PORTS_THEN_CONNECTED, //optional
rename_prefix = "string", //optional
report_errors = {UNUSED, SHORTED, MERGED,
RENAMED, REASSIGN_SHORTED}, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
shorted_violation_comment = "string", //optional
unused_violation_comment = "string", //optional
merged_violation_comment = "string", //optional
renamed_violation_comment = "string", //optional
reassign_shorted_violation_comment = "string", //optional
merge_open_net_names = {"string", ...}, //optional
rename_open_nets = KEEP_ONE | ALL, //optional
error_classifications = {{errors = {UNUSED, SHORTED, MERGED,
RENAMED, REASSIGN_SHORTED},
text = {"string", ...},
cells = {"string", ...},
classification = "string",
cpydb = USE | DISCARD,
comment = "string"}, ...}, //optional
short_debugging = {vue_short_finder = true | false,
static_output = {graphics = NONE | OASIS | GDSII,
ascii = true | false,
error = true | false},
output_limit = integer}, //optional
report_errors_from = ALL_CELLS | TOP_CELL //optional
);
Returns
connect database or void
Arguments
connect_sequence
Required. Specifies the connect database.
text_layer_items
Optional. Lists the polygon layer and text layer pairs. Text whose origin interacts with
polygons in the associated layer is applied to the net containing the polygon. The layers
must be in the specified connect database. By default, no layers are texted by text layer.
Note:
The order of this list is important. The same text layer can be used on multiple
different polygon layers. But, a text string from a text layer is not available after it is
applied to a polygon layer. Therefore, text used on one polygon layer from a text layer
is no longer available if that same text layer is paired with another polygon layer later
in the list.
You can use both the text_layer_items and text_string_items arguments. The
text_layer_items argument selections have precedence over the
text_string_items argument selections. If a text_layer_items selection exists at
the cell level of interest, then the text_string_items argument has no effect. If a
text_layer_items selection does not exist at the cell level of interest, then the
text_string_items argument selection is used.
text_string_items
Optional. Lists the text strings applied to all nets that contain the specified layer and that
were not texted by the text_layer_items argument. The layers must be in the specified
connect database. By default, no layers are texted by text string.
You can use both the text_layer_items and text_string_items arguments. The
text_layer_items argument selections have precedence over the
text_string_items argument selections. If the text_layer_items argument selection
does not exist at the cell level of interest, then the text_string_items argument
selection is used.
❍ layer. Specifies the polygon layer.
❍ text. Specifies the text string to apply. This string cannot contain a space (" ").
use_text
Optional. Specifies the cells whose text is used. The default is ALL.
❍ ALL. Uses text from all cells. Use this option to get text from lower level cells.
❍ TOP. Uses only text from the top cell. The lower-level-cell port names in the layout
netlist are generated by the IC Validator tool.
■ When texting by a text layer, top cell text is text in the top cell of a text file.
■ When texting by a text string, top cell text is applied to all polygons in the top cell.
attach_text
Optional. Controls the attachment of the unused higher-level text to the lower-level
polygon. The default is NONE.
Note:
This argument is used only when the processing_mode argument is HIERARCHICAL.
This argument does not apply to text_string_items.
When a text interacts with a polygon in a lower-level cell, which has a physical port to the
cell containing the text, the text is applied to the associated net. This is the default
behavior of the text_net() function.
This argument provides the capability to create a new port and attach the unused text
that is not attached by the text_net() default behavior.
❍ ALL. When an unused text interacts with a polygon in a lower-level cell,
■ If the lower-level cell net is not connected to a higher level (meaning there is no
physical port connected to a higher level), a port is created in the lower-level cell,
and a parent net is created in a higher-level cell and connected to the port. Then,
the unused text is attached to the parent net.
❍ NONE. There is no additional handling for unused text.
❍ TOP. For text in the top cell, the behavior of text is the same as the behavior for ALL.
For text in the lower cells, the behavior of text is the same as the behavior for NONE.
Figure 3-188 attach_text Argument Example
In Figure 3-188, there are three unused texts: A, B of m1 text at level 0, and D of m1 text
level 1. C has a physical port to level 0 and is attached by default.
❍ A overlaps a net containing m1 in level 1
❍ B does not overlap any m1 at any level
❍ C overlaps a net containing m1 in level 2
❍ D overlaps a net containing m1 in level 2
Results of setting attach_text to ALL:
❍ For A, port m1 is created in level 1, a net for polygon m1 (of level 1) is created in level
0, and A is attached to this net.
❍ For B, there is no text attachment and B is reported as unused text.
❍ For C, a physical port is connected to the net and C is attached to the net by default.
Note:
Physical ports exist for this net between all three levels.
❍ For D, port m1 is created in level 2, a net for m1 is created in level 1, and D is attached
to this net.
Results of setting attach_text to TOP:
❍ For A, port m1 is created in level 1, a net for polygon m1 (of level 1) is created in level
0, and A is attached to this net.
❍ For B, there is no text attachment and B is reported as unused text.
❍ For C, a physical port is connected to the net and C is attached to the net by default.
Note:
Physical ports exist for this net between all three levels.
❍ For D, there is no text attachment and D is reported as unused text.
Results of setting attach_text to NONE:
❍ A, B, and D are reported as unused texts. No text attachment occurs.
❍ For C, a physical port is connected to the net and C is attached to the net by default.
Note:
Physical ports exist for this net between all three levels.
create_short_finder_nets
Optional. Lists the net pairs for which short-finder data is generated for the VUE
interactive Short Finder. A maximum of 200 shorts are reported. See the
short_debugging argument and also the IC Validator VUE User Guide for more
information about the Short Finder.
Note:
The -vueshort command-line option also creates VUE output and extract short data.
With the command-line option you can specify to report only a set number of shorts
or all shorts. See the Command-Line Options section in the “IC Validator Basics”
chapter of the IC Validator User Guide for more information.
This pairing is a many-to-many pairing. If a net listed within the nets list shorts with any
net listed within the with_nets list, short-finder data is generated. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
By default, the IC Validator tool does not create data for short finder. To create
short-finder nets for all nets, specify
create_short_finder_nets = {{nets={"*"}, with_nets={"*"}}}
❍ nets. Specifies the nets to check for shorts against the nets listed in the with_nets
option.
❍ with_nets. Specifies the nets to check for shorts. Power and ground names are
often specified here. This example only extracts short-finder data for nets that short
to VCC or VSS:
create_short_finder_nets = {{{"*"}, {"VCC","VSS"}}}
text_priority_list
Optional. Lists the strings that prioritize the selection of the net name when the shorts
argument is KEEP_ONE. String matching using metacharacters is allowed. See “String
Matching” on page A-11 for more information.
This list prioritizes shorted texts only from the same text categories. The categories are:
❍ Reassign text. This is the highest priority. The text is defined by the reassign_text
argument of the text_options() function.
❍ Promote text. The text is defined by the promote_text argument of the
text_options() function.
❍ Layout power and ground text. The text is defined by the layout_power and
layout_ground arguments of the text_options() function.
❍ Regular text.
❍ Exploded text. This is the lowest priority text.
Here is an example of the prioritization:
1. If “AA” is listed in the promote_text argument and “BB” is regular text, “AA” is kept
without looking at the text_priority_list argument.
2. If “AA” and “BB” belong to the same category, such as both being listed in the
promote_text argument, then the text_priority_list argument is used to decide
which one should be kept.
3. If both “AA” and “BB” belong to the same category and are not listed in the
text_priority_list argument, then alphabetical order is used for the text.
shorts
Optional. Specifies the action taken when a single net has multiple different texts
assigned. The default is KEEP_ONE.
❍ KEEP_ONE. Chooses only one text as the net name. Removes all other text involved
in the short.
❍ DISCARD. Removes all text from the net.
opens
Optional. Specifies processing of text opens. Opens can be ignored or resolved. To be
resolved, opens can be renamed or merged with a virtual connection. The default is
MERGE_CONNECTED_AND_TOP. See the Examples section for more information.
The instance open nets that are connected up to the parent net are reported in the
text_open_merge_inst category of the LAYOUT_ERRORS file. Opens that are not
connected up to parent net are reported in the text_open_merge category.
❍ IGNORE. Ignores text opens. That is, text opens are not renamed nor merged.
Note:
When opens = IGNORE, duplicate pins might be generated. This is prohibited in
the LVS flow.
❍ RENAME. Renames text opens using the rename_prefix argument.
❍ MERGE_CONNECTED.
rename_prefix
Optional. Specifies the prefix for renamed nets. Open nets are renamed with this prefix
plus a unique number to differentiate them. The default is "icv_".
For example, by default, two vdd nets would be named “icv_1_vdd” and “icv_2_vdd”.
report_errors
Optional. Specifies the error types reported to the LAYOUT_ERRORS file. The default is
{UNUSED, SHORTED, MERGED, RENAMED, REASSIGN_SHORTED}.
❍ MERGED. Reports text opens that were merged. Opens that were already connected in
all instances are not reported.
❍ RENAMED. Reports open nets that were renamed.
❍ REASSIGN_SHORTED. Reports shorted nets that were caused by reassigned text. See
the pin_text argument of the milkyway_options() function and the
reassign_text argument of the text_options() function for more information.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
Note:
This argument does not apply to the text_string_items argument.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the current cell; placements
are considered. When unused text interacts with a polygon in a lower-level cell that
has a port to the cell containing the text, the text is applied to the associated net.
shorted_violation_comment
Optional. Specifies the violation comment for text short errors. The default is the current
runset violation comment.
unused_violation_comment
Optional. Specifies the violation comment for unused text errors. The default is the
current runset violation comment.
merged_violation_comment
Optional. Specifies the violation comment for merged text open errors. The default is the
current runset violation comment.
renamed_violation_comment
Optional. Specifies the violation comment for renamed text open errors. The default is
the current runset violation comment.
reassign_shorted_violation_comment
Optional. Specifies the violation comment for reassigned nets that are shorted. The
default is the current runset violation comment. See the pin_text argument of the
milkyway_options() function and the reassign_text argument of the
text_options() function for more information.
merge_open_net_names
Optional. Specifies the list of nets that are processed for opens. By default, the
IC Validator tool processes all open nets.
If the opens argument is RENAME, MERGE_CONNECTED, MERGE_CONNECTED_AND_TOP,
MERGE_ALL, or MERGE_TOP_THEN_CONNECTED, the merge_open_net_names argument
determines which of the nets are processed for opens.
❍ For MERGE_CONNECTED_AND_TOP or MERGE_TOP_THEN_CONNECTED, the IC Validator
tool merges in the top cell the nets listed in the merge_open_net_names argument.
The IC Validator tool processes the open nets in lower cells without considering
merge_open_net_names. That is,
rename_open_nets
Optional. Specifies which nets are renamed. The default is ALL.
❍ ALL. Renames all open nets. All open nets are reported in the LAYOUT_ERRORS
file.
❍ KEEP_ONE. Retains the text on the first open net found, and renames the other open
nets. The renamed nets are reported in the LAYOUT_ERRORS file.
error_classifications
Optional. Lists the structures that specify the error classification for the various errors
reported by the text_net() function.
Note:
The order of the list is crucial to the error classification. See the following
error_classifications examples for more information.
The classification is a cell-level feature. The default is an empty list, which means no
errors are classified.
❍ errors. Required. Lists the error types that are reclassified. The error types are:
UNUSED, SHORTED, MERGED, RENAMED, and REASSIGN_SHORTED.
❍ text. Required. Lists strings that specify which text strings are included in the
classification. String matching using metacharacters is allowed. See “String
Matching” on page A-11 for more information.
❍ cells. Required. Lists strings that specify which cells are included in the
classification. String matching using metacharacters is allowed. See “String
Matching” on page A-11 for more information.
Note:
The tool makes no effort to preserve the cells in this list. See the
no_explode_with_text argument of the hierarchy_auto_options() function
for more information about exploding cells.
❍ classification. Required. Specifies the new classification. The possible
classification are:
Error. This value is the default; it is not the same as not classified.
Ignore
Waive
Watch
Fixed
Note:
These classifications are the same as those listed in the Error Classifications table
in the Running IC Validator Within VUE chapter of the IC Validator VUE User
Guide, except that Unmatched is not valid.
❍ cpydb. Required. Specifies how to handle classifications from the error classification
database, cPYDB, that match the errors being reclassified by this instance of the
text_net() function.
■ USE. Uses the classifications from the cPYDB, if any. Any comments in the cPYDB
are used.
■ DISCARD. Discards any classifications from the cPYDB.
❍ comment. Required. Specifies the classification comment that is attached to the errors
in the error database, PYDB.
For example, the following code classifies all RENAMED text errors in cells that start with
INV or RAM to Ignore.
c1 = text_net(c1, {{...}},
error_classifications = {
{errors = {RENAMED},
text = {"*"},
cells = {"INV*", "RAM*"},
classification = "Ignore",
cpydb = USE,
comment = "ignore this one"}}
);
The order of the error classification list is crucial to the results. The list is processed
sequentially. Reclassifications of a given error type can either refine or destroy previous
classifications, depending on whether the reclassified error type is a subset or superset
of the specified texts and cells.
In the following example, the second list item is a refinement of the first list item:
c1 = text_net(c1, {{...}},
error_classifications = {
{errors = {RENAMED},
text = {"*"},
cells = {"*"},
classification = "Ignore",
cpydb = USE,
comment = "ignore this one"},
{errors = {RENAMED},
text = {"*"},
cells = {"INV*", "RAM*"},
classification = "Watch",
cpydb = USE,
comment = "watch this one"}}
);
In the following example, the second list item makes the first item useless.
c1 = text_net(c1, {{...}},
error_classifications = {
{errors = {RENAMED},
text = {"VDD"},
cells = {"*"},
classification = "Ignore",
cpydb = USE,
comment = "ignore this one"},
{errors = {RENAMED},
text = {"*"},
cells = {"*"},
classification = "Watch",
cpydb = USE,
comment = "watch this one"}}
);
short_debugging
Optional. Specifies the way to debug shorts, using either VUE Short Finder or static
output from VUE Short Finder, or both. Short debugging takes as input the result from the
create_short_finder_nets argument or the -vueshort command-line option. The
default is using VUE Short Finder; that is, the vue_short_finder option is true and the
static_output option is false.
Note:
If the create_short_finder_nets argument or the -vueshort command-line
option is not used, then the short_debugging argument has no effect.
❍ static_output. Optional. Saves the path, which is a list of polygons starting from
one text to another, found in each text short violation in the specified format. The
output files are saved in the run_details/short_path directory. The default is that static
output is not generated.
■ graphics. Optional. Specifies the format of the static output file: NONE, OASIS,
GDSII. The default is NONE.
- true. Adds short paths to the error output (PYDB). Each short path is reported
as one violation. In VUE, the complete path is highlighted as one error and the
text locations for the short path are marked.
- false. Does not add the short paths to the error output.
❍ output_limit. Optional. Specifies the maximum number of text shorts extracted and
reported. The default is 200.
report_errors_from
Optional. Specifies the text errors that are reported. The default is ALL_CELLS.
❍ ALL_CELLS. Reports all text errors.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
Here is a simple example of the text_net() function.
cdb1 = text_net(
connect_sequence = cdb1,
text_layer_items = {
{ M1, M1_text },
{ M2, M2_text }
}
);
v1_shorts = get_text_shorted(v1);
v1_merged = get_text_merged(v1);
v1_renamed = get_text_renamed(v1);
v1_unused = get_text_unused(v1);
g = gds_library("out.gds");
write_gds(
output_library = g,
errors = {
// All errors from text_net()
{v1, { 1 }},
// Only text shorts from text_net()
{v1_shorts, { 2 }},
// Only text opens from text_net()
{v1_merged, { 3 }},
{v1_renamed, { 3 }},
// Only unused text errors from text_net()
{v1_unused, { 4 }}
}
);
The following examples show how the opens argument of the text_net() function
regulates handling nets that cause a text open. Figure 3-190 shows the device structure.
Figure 3-190 Device Structure for text_net(opens) Examples
T1 T1
T1 T1
N1 N1
N1 N1
T1 T1
Top cell L0
In this example,
• Cell L1_A has two ports, each named T1.
• Cell L1_B has two ports, each named N1.
• Top Cell L0 has two nets, each named T1.
Inside the top cell,
• One instance of cell L1_A has the two T1 pins connected together, while another does
not.
• Each instance of cell L1_B has the two N1 pins connected together.
opens = IGNORE
When the opens argument is IGNORE, the resulting layout netlist reflects separate identically
named nodes for nets having a text open. Figure 3-191 shows the resulting circuit, in which
all open nets retain their original names. Text opens are not reported in the
LAYOUT_ERRORS file.
T1 T1
T1 T1
N1 N1
N1 N1
T1 T1
Top cell L0
opens = RENAME
When the opens argument is RENAME, the competing texts are all renamed by the
rename_prefix argument, plus a unique number to differentiate them.
icv_0_T1 icv_0_T1
icv_1_T1 icv_1_T1
icv_2_N1 icv_2_N1
icv_3_N1 icv_3_N1
icv_0_T1 icv_1_T1
Top cell L0
opens = MERGE_CONNECTED
When the opens argument is MERGE_CONNECTED,
• For cells placed below the top cell, the open is merged into a single net only if the nets
forming the open are connected together in the parent hierarchy for all instances of the
cell.
• Otherwise, nets are renamed using the rename_prefix argument.
icv_0_T1 icv_0_T1
icv_1_T1 icv_1_T1
N1 N1
icv_0_T1 icv_1_T1
Top cell L0
An entry is written to the cell.LAYOUT_ERRORS file for each renamed text. An entry is not
written to the cell.LAYOUT_ERRORS file if a cell-level text open is resolved by connections
in the parent.
runset.rs:40:text_net:text_open_rename
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Structure Text layerNo dtype (position x, y) NetID NewText TextOn TextFrom
layerNo dtype (position x, y) NetID NewText TextOn TextFrom
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
L0 T1 1 1 (102.4440, -66.0520) 5 icv_2_T1 m1 LAYER
1 1 (103.0530, -102.0090) 7 icv_3_T1 m1 LAYER
L1_A T1 1 1 (101.9160, 70.0280) 2 icv_1_T1 m1 LAYER
1 1 (103.0350, 34.7830) 4 icv_0_T1 m1 LAYER
opens = MERGE_CONNECTED_AND_TOP
When the opens argument is MERGE_CONNECTED_AND_TOP,
• For cells placed below the top cell, the open is merged into a single net only if the nets
forming the open are connected together in the parent hierarchy for all instances of the
cell.
• In the top cell, the open is merged into a single net.
• Otherwise, nets are renamed using the rename_prefix argument.
Figure 3-194 shows the resulting circuit, in which:
• The two original T1 ports of cell L1_A are renamed as icv_0_T1 and icv_1_T1. This
renaming happens because one instance of cell L1_A inside the parent hierarchy does
not connect the two T1 pins together.
• The two original N1 ports of cell L1_B are merged into a single port N1. This merging
happens because all instances of cell L1_B inside the parent hierarchy connect the two
N1 pins together.
• The two top cell nets T1 are merged into a single net T1.
Figure 3-194 text_net(opens = MERGE_CONNECTED_AND_TOP) Example
icv_0_T1 icv_0_T1
icv_1_T1 icv_1_T1
N1 N1
T1
Top cell L0
An entry is not written to the cell.LAYOUT_ERRORS file if a cell-level text open is resolved
by connections in the parent.
runset.rs:40:text_net:text_open_merge
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Structure BaseText layerNo dtype (ParentText x, y) BaseNetID TextOn TextFrom Info
layerNo dtype (ParentText x, y) TextOn TextFrom Info
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
L0 T1 1 1 (103.0530, -102.0090) 5 m1 LAYER Signal
1 1 (102.4440, -66.0520) m1 LAYER Signal
runset.rs:40:text_net:text_open_rename
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Structure Text layerNo dtype (position x, y) NetID NewText TextOn TextFrom
layerNo dtype (position x, y) NetID NewText TextOn TextFrom
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
L1_A T1 1 1 (101.9160, 70.0280) 2 icv_1_T1 m1 LAYER
1 1 (103.0350, 34.7830) 4 icv_0_T1 m1 LAYER
opens = MERGE_ALL
When the opens argument is MERGE_ALL, at all levels of hierarchy the open is merged into a
single net. The two competing texts essentially are joined together. Figure 3-195 shows the
resulting circuit, in which:
• The two original T1 ports of cell L1_A are merged into a single port T1.
• The two original N1 ports of cell L1_B are merged into a single port N1.
• The two top cell nets T1 are merged into a single net T1.
T1 T1
N1 N1
T1
Top cell L0
An entry is not written to the cell.LAYOUT_ERRORS file if a cell-level text open is resolved
by connections in the parent.
runset.rs:40:text_net:text_open_merge
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Structure BaseText layerNo dtype (ParentText x, y) BaseNetID TextOn TextFrom Info
layerNo dtype (ParentText x, y) TextOn TextFrom Info
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
L0 T1 1 1 (103.0530, -102.0090) 5 m1 LAYER Signal
1 1 (102.4440, -66.0520) m1 LAYER Signal
runset.rs:40:text_net:text_open_merge_inst
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Structure BaseText layerNo dtype (ParentText x, y) ... TextOn TextFrom Path
layerNo dtype (ParentText x, y) ... TextOn TextFrom Path
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
L0 T1 1 1 (175.8600, 84.0000) ... m1 LAYER L0/L1_A/T1
1 1 (176.9790, 48.7550) ... m1 LAYER L0/L1_A/T1
See Also
assign_text()
connect()
create_ports()
edtext_file()
get_text_merged()
get_text_renamed()
get_text_shorted()
get_text_unused()
incremental_connect()
replace_text()
stamp()
text_options()
text_options()
The text_options() function specifies how layout text objects are processed as they are
read in as a text layer. Later during a verification run, layout text gives names to nets of
polygon connectivity. The function also specifies text options that apply to the entire runset.
This function must be called before assign functions.
The arguments of the text_options() function are executed in the following order:
1. delete_text
2. edtext
3. use_exploded_text
4. reassign_text
5. replace_text
6. replace_text_characters
7. replace_text_characters_regex
Syntax
text_options(
delete_text = {{cells = {"string", ...},
text = {"string", ...}}, ...}, //optional
replace_text = {{search_strings = {"string", ...},
replace_string = "string",
cells = {"string", ...}},
...}, //optional
replace_text_characters = {{search_string = "string",
replace_string = "string"}, ...},
//optional
replace_text_characters_regex = {{{{search_string = "string",
replace_string = "string",
ignore_case = true | false,
instance = integer}, ...},
...}}, //optional
use_exploded_text = {{cells = {"string", ...},
text = {"string", ...}}, ...}, //optional
edtext = {{cell = "string",
text = "string",
layer_number = integer,
data_type = integer,
x = double, y = double}, ...}, //optional
colon_text = TRUNCATE | EQUATE_NETS | REGULAR_TEXT,
//optional
semicolon_text = TRUNCATE | EQUATE_NETS | REGULAR_TEXT,
//optional
net_prefix = "string", //optional
Returns
void
Arguments
delete_text
Optional. Lists the text that is deleted from specified cells. The list is additive; one list
element does not negate another list element. The default is that text is not deleted.
❍ cells. Optional. Deletes text from the specified cells. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
The default is delete text from all cells.
❍ text. Optional. Deletes the specified text strings. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
The default is delete all text strings.
Note:
This delete_text argument does not delete text that is specified in the edtext
argument of this function.
replace_text
Optional. Lists the complete text strings (the search_strings lists) that are replaced
with the replace_string text string. The replacements are processed in order so that
the first matching criteria has precedence. By default, the IC Validator tool does not
replace text.
Note:
Placing text incorrectly or using the replace_text argument incorrectly can cause
the reporting of text shorts and opens that do not physically exist, or hide physical
shorts and opens that do exist. If net labels are incorrect, the reports that rely on
those labels have incorrect information.
❍ search_strings. Required. Specifies the patterns searched for within each text
string. String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information.
❍ replace_string. Required. Specifies a text string that replaces strings matching the
search criteria. An empty string ("") results in the removal of the specified search
string.
❍ cells. Optional. Specifies the cells from which text is replaced. This allows you to
rename text on a cell-by-cell basis. The default is all cells.
In the following example, vdd1a becomes vdd, and vss45aa becomes vss:
replace_text = {{{"vdd*"}, "vdd"}, {{"vss*aa"}, "vss"}},
replace_text_characters
Optional. Lists the partial text strings, the search_string, that are replaced with the
replace_string text strings. If the search string is found within a text string then the
matching portion of the text string is replaced by the replace string.
❍ search_string. Required. Specifies the pattern searched for within each text string.
String matching using metacharacters is allowed, except for the exclamation point (!).
See “String Matching” on page A-11 for more information.
❍ replace_string. Required. Specifies a replacement string. An empty string ("")
results in the removal of the specified search string. String matching using is not
allowed.
In the following example, abc[1] becomes abc1z:
replace_text_characters = {{"[", ""}, {"]", "z"}},
replace_text_characters_regex
Optional. Lists the structures, which are called statements. Each statement specifies a
list of search and replace directives. If a search_string pattern is found within a text
string, the matching portion of the text string is replaced by the replace_string pattern.
If a text string is changed by a directive in a list, the resulting text string can be changed
by the remaining directives within the same list. However, if a text string is changed by
one statement then it is not allowed to be changed by any of the following statements.
Note:
This argument uses GNU extended regular expressions.
❍ search_string. Required. Specifies the pattern searched for within each text string.
The search string can use any of the special characters shown in Table 3-36. You can
escape a special character if you want the literal character.
Special Description
character
^ Start of pattern.
$ End of pattern.
\ Changes the meaning of the character after it from special to literal. Using a
backslash on a non-special character causes an error.
For example, you can match the literal string low[5] with the search string
argument “low\\[[0-9]\\]”.
To match a single backslash in search string, you need four backslashes. For
example, you can match the literal string power\9 with the search string
argument “power\\\\9”.
\n Shorthand notation for the nth grouped expression. The value of n is from 1 to 9.
Table 3-37 lists the special characters that are supported in the replacement string.
Table 3-37 Replace String Special Characters
Special Description
character
& Replaced by the part of the text string that matches the search string.
\n Replaced by the part of the text string that matches the nth grouped expression
in the search string.
❍ instance. Optional. Specifies which sub string is replaced when the search string
matches multiple sub strings within a text string. The default is all instances of the
search pattern are replaced.
Example 3-5 shows using the replace_text_characters_regex argument.
Example 3-5 Example of replace_text_characters_regex Argument
text_options(replace_text_characters_regex =
{
{{{"^abc", "def"}, {"ghi$", "jkl"}}}, //1st statement
{{{"mno", "pqr", ignore_case = true}, //start of 2nd statement
{"st", "uv", instance = 1},
{"(fill)(.*)", "\\1_layer_\\2"}}} //end of 2nd statement
}
);
abc123mno {“^abc”, “def”} def123mno The “mno” pattern is not replaced because
the first statement changes the text.
Therefore, the second statement does not
operate on the text.
abc123ghi {“^abc”, “def”}, def123jkl The replacements are processed in the order
{“ghi$”, “jkl”} listed in the first statement. The first directive
replaces “abc” with “def”. The second
directive replaces “ghi” by “jkl”.
st123st {“st”, “uv”, uv123st When the instance argument is 1, only the
instance = 1} first instance of “st” within the string is
replaced.
use_exploded_text
Optional. Lists the cells where text strings for the specified layer and datatype are
retained if the cells are exploded. The list is additive; one list element does not negate
another list element. By default, exploded cells do not retain their text.
Note:
The use_exploded_text arguments in the assign_text(),
assign_openaccess_text(), and text_options() functions are additive.
Use the exploded_text_options argument to control the prepending of the hierarchical
path to text when the cell it is in is exploded.
❍ cells. Optional. Specifies the cells from which text is used if these cells are
exploded. String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information. By default, the IC Validator tool uses text from all
exploded cells.
❍ text. Optional. Specifies the text strings that are used if a cell containing the text is
exploded. String matching using metacharacters is allowed. See “String Matching” on
page A-11 for more information. By default, the IC Validator tool uses all text strings.
edtext
Optional. Lists the text objects that are added to the specified cell on the specified layer
number and datatype. If text already exists on the layer number and datatype at the
xy location, it is replaced with this new text.
All text object properties must be specified.
❍ cell. Specifies the cell name of the new text object.
❍ text. Specifies the text of the new text object. See “Text Strings” on page A-10 for the
rules apply to text strings.
❍ layer_number. Specifies the layer number of the new text object. See “Layout Layer
and Datatype Ranges” on page A-6 for information about the limits of the values.
❍ data_type. Specifies the datatype of the new text object. See “Layout Layer and
Datatype Ranges” on page A-6 for information about the limits of the values.
❍ x. Specifies the x-coordinate of the new text object. This coordinate is scaled by the
magnification_factor argument of the library() function.
❍ y. Specifies the y-coordinate of the new text object. This coordinate is scaled by the
magnification_factor argument of the library() function.
Note:
If you want to include an external Edtext file, use a #include statement.
Preprocessor directives, such as #include, must be first on a line. For example,
text_options(
edtext = {
#include "edtext.rs"
}
);
colon_text
Optional. Specifies how the colon ( : ) is processed. The default is TRUNCATE.
❍ TRUNCATE. Truncates a text string upon reading in a colon. For example, in the text
string “abc:”, the colon is removed and the text string becomes “abc”.
❍ EQUATE_NETS. Retains the colon that is used to equate nets. That is, nets with the
same colon-texted name are connected virtually and any opens warnings or errors
are suppressed.
❍ REGULAR_TEXT. Retains the colon and does not give the colon special processing.
Note:
When text = EQUATE_NETS, the behavior of text_net(opens) is impacted, as
follows:
■ colon_text = TRUNCATE. All text characters after ( : ) (include ( : )) are removed.
For example, VSS:3 becomes VSS.
■ colon_text = EQUATE_NETS. Colon text remains, but the engine treats it
differently.
■ colon_text = REGULAR_TEXT. Colon text remains without any change, but the
engine treats it as normal text.
When colon text = EQUATE_NETS, the virtual connect behavior depends on the
opens argument, as follows:
■ opens = MERGE_CONNECTD. Only the same colon texts (including the suffix) are
virtually connected in the top cell. There is no virtual connect in the lower cells.
■ opens = MERGE_CONNECTED_AND_TOP. All of the same colon texts (without
considering ( : ) and the suffix) are virtually connected in the top cell. There is no
virtual connect in the lower cells.
■ opens = MERGE_ALL. All of the same colon texts (without consider ( : ) and the
suffix) are virtually connected in all cells.
■ opens = RENAMED. There is no virtual connect at all.
■ opens = IGNORE. Text opens are not processed. All texts remain without any
changes.
semicolon_text
Optional. Specifies how the semicolon ( ; ) is processed. The default is TRUNCATE.
❍ TRUNCATE. Truncates a text string upon reading in a semicolon. For example, in the
text string “abc;1”, the characters “;1” are removed and the text string becomes “abc”.
❍ EQUATE_NETS. Retains the semicolon that is used to equate nets in black-box cells.
That is, all semicolon text is applied with respect to black-box cells, and any open
warnings or errors messages are suppressed.
❍ REGULAR_TEXT. Retains the semicolon and does not give the semicolon any special
processing.
net_prefix
Optional. Specifies the prefix for untexted nets. This text string is added to the beginning
of net numbers assigned during netlist extraction (see the netlist() function for more
information.). Nets created in the layout that are not named by text are given unique
numeric names. All such net numbers have the specified text string added as a prefix. If
no net_prefix is specified, the numeric net names are not modified.
❍ If net_prefix is unspecified and text with only numeric characters is found in the
layout, the text is discarded to avoid shorts between the text and a net number.
❍ If net_prefix is specified and text is found that begins with the net_prefix and
contains only numeric characters after the prefix, the text is discarded to avoid shorts
between the text and a net number.
promote_text
Optional. Specifies the text strings that are promoted up the hierarchy, replacing all
names on the net in parent cells. Ports are not created; promotion occurs through
existing ports. String matching using metacharacters is allowed. See “String Matching”
on page A-11 for more information.
The following characters are not allowed in net names: space, tab, and the reserved
characters
= { } , "
Note:
See the text_priority_list argument of the text_net() function for more
information about prioritization.
layout_power
Optional. Specifies the text strings that determine the power nets in the layout. String
matching using metacharacters is allowed. See “String Matching” on page A-11 for more
information.
The following characters are not allowed in net names: space, tab, and the reserved
characters
= { } , "
layout_ground
Optional. Specifies the text strings that determine the ground nets in the layout. String
matching using metacharacters is allowed. See “String Matching” on page A-11 for more
information.
The following characters are not allowed in net names: space, tab, and the reserved
characters
= { } , "
reassign_text
Optional. Lists the complete text strings (the nets argument lists) that are replaced with
the assign_net text string for the specified cell on all text layers. Use this list when you
have expected shorts. If you are using a Milkyway library, see the REASSIGN option in the
pin_text argument of the milkyway_options() function for more information.
❍ cell. Required. Specifies the cell from which text is replaced. Metacharacters are not
allowed.
❍ nets. Required. Specifies the text strings that are replaced. Metacharacters are not
allowed.
❍ assign_net. Required. Specifies the text string that replaces strings matching the
nets text strings.
For example, in the Verilog netlist there is this assignment:
assign IN1 = IN2;
Then, in the IC Validator runset, use the text_options() function to reassign text:
text_options(
reassign_text = {{cell = "mblock2",
nets = {"IN1"},
assign_net = "IN2"}}
When the runset executes, any text short within the “mblock2” cell has already been
taken care of by the text replacement.
allow_all_numeric
Optional. Specifies if all numeric text is supported. The default is false.
❍ true. Allows all numeric text in a text layer.
exploded_text_options
Optional. Controls prepending a hierarchical path to text when the cell it is in is exploded.
Exploded text must be enabled for the cell with the use_exploded_text argument.
report_text
Optional. Activates the generation of the block.text_report file in the run_details directory
to report used and unused texts and edtexts processed by specified functions. The
default is NONE.
❍ cells. Specifies the cells that are reported. The default is NONE.
Function Group
OPTIONS. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
text_options (
layout_power = {"VDD"},
layout_ground = {"GND"},
edtext = {{"add4", "AA", 25, 0, -492, 19.9},{"add4", "BB", 32, \
0, -495.5, 81},{"cs_add", "BB", 25, 0, -49.7, 47.6}},
report_text = {
cells = ALL,
functions = { "assign", "**", "text_net",
"net_texted_with", "net_not_texted_with", "replace_text",
"text_origin", "texted_with", "not_texted_with" },
used_text_limit_per_check = 100,
unused_text_limit_per_check = 100}
);
See Also
assign_text()
net_options()
text_net()
net_texted_with() and net_not_texted_with()
replace_text()
text_net()
text_origin()
texted_with() and not_texted_with()
text_origin()
The text_origin() function creates squares at the origin of the specified text in the
specified cells.
Important:
See restriction 1 (Preserving Cells) in “Disclaimers” on page 1-4 for more information.
Syntax
text_origin(
layer1 = text_layer,
shape_size = double, //optional
text = {"string", ...}, //optional
cells = {"string", ...}, //optional
name = "layer_label", //optional
keep_cells = true | false //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the text layer.
shape_size
Optional. Specifies the dimension of the extents of the output shape. The value must be
positive. It is rounded to the nearest even multiple of the internal resolution, with a
minimum of twice the internal resolution. The internal_resolution argument of the
resolution_options() function sets the internal resolution. The default is
DRC_ERROR_BOX, which has a default of 0.1.
text
Optional. Specifies the text strings. String matching using metacharacters is allowed.
See “String Matching” on page A-11 for more information.
cells
Optional. Specifies the cells that are checked for text. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
Important:
Specified cell names are added to the no explode list defined in the no_explode
argument of the hierarchy_options() function. An exception to this behavior is that
the "*" metacharacter does not add to the no explode list.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
keep_cells
Optional. Specifies the exploding of cells in the select_cells list. The default is true.
❍ true. Does not explode cells during hierarchy optimization.
❍ false. The selected cells are allowed to explode during hierarchy optimization. If a
selected cell does get exploded, the selected data (the cell’s extents in this case) are
placed in the parent cell.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
x = text_origin(met1_text, 0.01);
See Also
assign_text()
create_ports()
net_texted_with() and net_not_texted_with()
replace_text()
texted_with() and not_texted_with()
text_to_double_property()
The text_to_double_property() function turns text into a polygon property. It creates a
square marker at the location of each text, with the double value of the text attached to the
polygon. Text that cannot be represented by a double value causes an error and is dropped.
Note:
Properties on a polygon layer are only recognized by the drc_features(),
net_polygon_by_property(), and select_by_double_property() functions. All
other functions ignore properties on a polygon layer and do not propagate the properties
to their result.
Syntax
text_to_double_property(
layer1 = text_layer,
property = "string",
merge_operator = MIN | MAX | SUM,
box_size = double, //optional
report_errors = {NOT_A_DOUBLE}, //optional
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
layer1
Required. Specifies the text layer containing text that is changed to properties.
property
Required. Specifies the property name.
merge_operator
Required. Specifies how to handle text markers that collide.
❍ MIN. Sets the property to the minimum value of all properties of the colliding markers.
Note:
Hierarchically interacting markers output by the text_to_double_property()
function are leveled and merged.
❍ MAX. Sets the property to the maximum value of all properties of the colliding markers.
❍ SUM. Sets the property to the sum of all values of all properties of the colliding
markers.
box_size
Optional. Specifies the size of the square markers. The default is 0.002.
report_errors
Optional. Reports ignored text to the LAYOUT_ERRORS file. The default is
NOT_A_DOUBLE.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
mvh1 = text_to_double_property(metal1_max_text, "high", MAX);
See Also
assign_text()
net_polygon_by_property()
text_options()
text_to_string_property()
The text_to_string_property() creates a square marker at the location of each text with
the string value of the text attached to the polygon.
Note:
If there are multiple texts in the same output merged polygon, they are concatenated as
a list of unique strings.
Properties on a polygon layer are only recognized by the drc_features(),
net_polygon_by_property(), and select_by_double_property() functions. All
other functions ignore properties on a polygon layer and do not propagate the properties
to their result.
Syntax
text_to_string_property(
layer1 = text_layer,
property = "string",
box_size = double, //optional
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
layer1
Required. Specifies the text layer containing text that is changed to properties.
property
Required. Specifies the property name.
box_size
Optional. Specifies the size of the square markers. The default is 0.002.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
mvh1 = text_to_string_property(metal1_max_text, "high");
See Also
assign_text()
net_polygon_by_property()
text_options()
text_to_double_property()
Syntax
texted_with(
layer1 = polygon_layer,
layer2 = text_layer,
text = {"string", ...},
use_text = ALL | TOP,
colon_text = EQUATE_NETS | REGULAR_TEXT, //optional
shorts = KEEP_ONE | DISCARD, //optional
report_errors = {SHORTED, UNUSED}, //optional
shorted_violation_comment = "string", //optional
unused_violation_comment = "string", //optional
name = "layer_label" //optional
);
not_texted_with(
layer1 = polygon_layer,
layer2 = text_layer,
text = {"string", ...},
use_text = ALL | TOP,
colon_text = EQUATE_NETS | REGULAR_TEXT, //optional
shorts = KEEP_ONE | DISCARD, //optional
report_errors = {SHORTED, UNUSED}, //optional
shorted_violation_comment = "string", //optional
unused_violation_comment = "string", //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer from which polygons are selected.
layer2
Required. Specifies the text layer.
text
Required. Specifies the text strings used for selection. String matching using
metacharacters is allowed. See “String Matching” on page A-11 for more information.
use_text
Optional. Specifies the cells in the specified text layer whose text is used. The default is
ALL.
❍ TOP. Uses only text from the top cell. That is, only polygons from the top cell are
selected.
Note:
With this setting, the not_texted_with() function is not the complement of the
texted_with() function. When the use_text argument is TOP, both functions
select polygons only from the top cell.
colon_text
Optional. Specifies how the colon ( : ) is processed. The default is REGULAR_TEXT.
❍ EQUATE_NETS. For layer2 text strings, ignores the colon and characters following it.
For example, “a:”, “a:a”, and “a:xyz” all match the text “a”. This setting applies only
when the colon_text argument is EQUATE_NETS in the text_options() function.
❍ REGULAR_TEXT. Retains the colon and does not give the colon special processing.
shorts
Optional. Specifies the action to take when a single polygon contains multiple different
texts. The default is KEEP_ONE.
❍ KEEP_ONE. Generally, uses the text closest to the origin. All other text involved in the
short is ignored.
❍ DISCARD. Discards all shorted text.
report_errors
Optional. Specifies the error types reported to the LAYOUT_ERRORS file. The default is
{SHORTED, UNUSED}.
Note:
If the output for the texted_with() function is to a polygon layer or an error report,
the errors are reported to the LAYOUT_ERRORS file. If the output for the
❍ UNUSED. Reports unused text, which is text that is not contained in the layer2 layer.
shorted_violation_comment
Optional. Specifies the violation comment for text short errors. The default is the current
runset violation comment.
unused_violation_comment
Optional. Specifies the violation comment for unused text errors. The default is the
current runset violation comment.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
x = texted_with(layer1 = y, layer2 = y_txt, text = {"VDD*"});
See Also
net_select()
net_texted_with() and net_not_texted_with()
text_origin()
three_color()
The three_color() function is used in triple-patterning flows to decompose the input layer
into three colors. Optional precoloring assignments are used during graph coloring.
Syntax
Note: The definitions for the arguments are after the Returns section.
three_color(
nodes =
polygon_layer,
links =
geometry_layer,
pre_color1 =
polygon_layer, //optional
pre_color2 =
polygon_layer, //optional
pre_color3 =
polygon_layer, //optional
stitch_nodes =
polygon_layer, //optional
optional_links =
{geometry_layer, ...}, //optional
effort_level =
integer, //optional
shift_min_length =
double, //optional
shift_ratio =
double, //optional
shift_mode =
{SHORTEST, CENTER, CENTER_ALL_ANGLE,
OPPOSITE, ERROR_CENTER, ...}, //optional
color_preference = NONE | BALANCED, //optional
same_color_links = geometry_layer, //optional
additional_reduction = {DIAMOND_REDUCTION,...} //optional
);
Returns
The output is a structure of polygons:
three_color_result_s : newtype struct of {
color1 : polygon_layer;
color2 : polygon_layer;
color3 : polygon_layer;
color_conflicts : polygon_layer;
intersecting_links : polygon_layer;
pre_color_errors : polygon_layer;
color_conflict_extended_fix_guidance : polygon_layer;
color_conflict_fix_guidance : polygon_layer;
};
color1
Input polygons colored with color 1.
color2
Input polygons colored with color 2.
color3
Input polygons colored with color 3.
color_conflicts
Conflict links, where a conflict link has the same color assigned to the polygons
connected by this link. This layer is empty if the input layer is successfully decomposed.
intersecting_links
Merged or intersecting links.
pre_color_errors
Input polygons with precolor conflicts. There are three types of precolor conflicts: nodes
that are precolored with more than one color, required different-color links that are
connected to two nodes with the same precolors, and same-color links that are
connected to two nodes with different precolors.
color_conflict_extended_fix_guidance
Part of the error visualization outputs, this contains nodes and links interacting with
color_conflict_fix_guidance output to provide more context for the areas of the
layout that contain errors. When additional_reduction is DIAMOND_REDUCTION, the
output is empty.
color_conflict_fix_guidance
One of the error visualization outputs that is used if the input is not 3-colorable. It
contains the alternative minimum conflict link configurations and nodes interacting with
them. That is, the color_conflicts output contains one set of minimum conflict links,
whereas color_conflict_fix_guidance output contains a superset of those and
nodes interacting with them to give you more choices to make the layout 3-colorable.
When additional_reduction is DIAMOND_REDUCTION, the output is empty.
Arguments
nodes
Required. Specifies the polygon layer that contains the polygons targeted for coloring.
links
Required. Specifies the input geometry layer that contains polygons that connect nodes
polygons to complete the graph description. Each polygon in the links geometry layer
must interact, either by edge touch or polygon overlap, with at most three nodes
polygons to achieve correct coloring. If a links polygon is connected to three nodes
polygons, all three connected nodes polygons must be assigned to different colors.
The links geometry layer is commonly generated using dimensional commands on the
nodes polygon layer. For example, it is generated using an external spacing check on the
nodes polygon layer that captures triple-patterning critical spacing relationships.
pre_color1
Optional. Specifies the marker layers representing color 1 precoloring of the polygons.
All the polygons must be included in the nodes layer. The precolors are markers on the
nodes. If a precolor marker does not intersect with any node, the marker is ignored.
pre_color2
Optional. Specifies the marker layers representing color 2 precoloring of the polygons.
See pre_color1 for more information.
pre_color3
Optional. Specifies the marker layers representing color 3 precoloring of the polygons.
See pre_color1 for more information.
stitch_nodes
Optional. Specifies a marker layer representing stitches.
optional_links
Optional. Specifies a list of geometry layers. Each layer is a link layer and has an implied
weight associated with it. The first layer has weight 1 and has the highest priority after
the required link layer. The second layer has weight 2 and has the next highest priority,
and so on. The tool uses these weights in optimization, for example, density balancing.
You can specify up to seven layers. The default is empty.
Note:
All the link layers, including the required link layer and layers defined in the
optional_links argument, must be the same type, that is, they all must be either
polygon layers, edge layers, or error layers.
Color conflicts that involve only optional links are not output.
effort_level
Optional. Specifies the coloring effort level. The minimum value is 1, and the maximum
value is 6. Using a higher effort level in more complicated designs can increase accuracy
(fewer color conflicts) but might increase the runtime. The default is 4.
shift_min_length
Optional. Specifies the link shifting threshold. A link is shifted only when its length is
equal to or greater than this value. The default is 0 (zero).
shift_ratio
Optional. Defines the ratio of the shift segment to the overlap segment. For example, if
the overlap segment for an error pair is 100 microns and this value is set to 0.1, the shift
segment is 10 microns. The shifted link is within this segment. The default is 1.
shift_mode
Optional. Specifies the mode used to generate the link, which can be a subset of all of
the modes. The default is SHORTEST.
❍ SHORTEST. Uses the shortest distance between error pairs to generate a link.
❍ CENTER. Uses center points of the error pair to generate a link. This mode is
applicable only when the run length is less than or equal to 0 (zero) and the link
derived by the default shift mode is orthogonal.
❍ CENTER_ALL_ANGLE. Uses center points of the error pair to generate a link. This mode
is applicable only when the error pair run length is less than or equal to 0 (zero).
❍ OPPOSITE. Shifts two endpoints of the generated link in opposite directions with
respect to the shift ratio. This mode is applicable only when the shift range is positive,
which means the run length is greater than 0 (zero), the link length is greater than or
equal to the shift threshold, and the shift ratio is greater than 0 (zero).
❍ ERROR_CENTER. Uses center points of the error pair to generate a link.
Note:
When you select the ERROR_CENTER option to generate a link, all of the other
modes are disabled.
color_preference
Optional. Specifies if the IC Validator tool balances the coloration on low-degree nodes.
Balancing is based on the area of the nodes. The default is NONE.
❍ NONE. Does not balance coloration. Color selection on low-degree nodes is random.
❍ BALANCED. Balances coloration. When multiple color choices are available, color
selection on low-degree nodes is based on the minimal node area.
same_color_links
Optional. Specifies a geometry layer that contains links that connect same-color nodes.
Same-color links have a higher priority than different-color links because two nodes
connected by a same-color link are treated as one node during the coloring process.
Additional color conflicts can be introduced on a required different-color link, even when
the links have no shared nodes, as shown in Figure 3-196.
Required
different-color link
When two nodes are connected with both a same-color link and a different-color link at
the same time, the following priorities apply:
❍ If two nodes are connected by a same-color link and a required different-color link,
the required link has priority and the same-color link is ignored.
❍ If two nodes are connected by a same-color link and an optional different-color link,
the optional link is ignored and the two polygons are assigned the same color.
❍ If two nodes connected by a same-color link are precolored with different colors, the
same-color link is ignored.
additional_reduction
Optional. Specifies the method for doing additional graph reduction before coloring. The
default is empty.
❍ DIAMOND_REDUCTION. Reduces a diamond graph to a triangle graph.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
See Also
two_color()
four_color()
Syntax
touching(
layer1 = polygon_layer,
layer2 = edge_layer,
count = integerconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_touching(
layer1 = polygon_layer,
layer2 = edge_layer,
count = integerconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer from which polygons are selected.
layer2
Required. Specifies the edge layer against which the layer1 layer is checked.
count
Optional. Specifies the number of edges that must be touched. See “Constraints” on
page A-4 for more information. The default is >0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
For the following examples, consider these layers:
Input
gate wide_gate_edge
Example 1
x = gate touching wide_gate_edge;
Output gate
Example 2
Output
gate
See Also
inside_touching_edge() and not_inside_touching_edge()
outside_touching() and not_outside_touching()
outside_touching_edge() and not_outside_touching_edge()
touching_edge() and not_touching_edge()
Syntax
touching_edge(
layer1 = data_layer,
layer2 = data_layer,
count = integerconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
coincidence = EDGE | ENDPOINT | ALL //optional
);
not_touching_edge(
layer1 = data_layer,
layer2 = data_layer,
count = integerconstraint, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
coincidence = EDGE | ENDPOINT | ALL //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
layer2
Required. Specifies the edge or polygon layer.
count
Optional: Specifies the number of touches that must occur for an edge to be selected. If
layer2 is a polygon layer, polygons are counted. If layer2 is an edge layer, individual
edges are counted. See “Constraints” on page A-4 for more information. The default
is >0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
coincidence
Optional. Specifies the types of coincidence that cause a selection. The default is EDGE.
❍ EDGE. Only edge coincidence causes an edge to be selected.
❍ ENDPOINT. Only those edges that have no edge coincidence, but have collinear,
endpoint, coincidence are selected.
❍ ALL. All types of coincidence cause an edge to be selected.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
This example shows both layers as polygon layers: magenta is layer1; red is layer2. The
results are the same if either layer is an edge layer.
green = touching_edge(layer1 = magenta, layer2 = red);
Input Output
See Also
inside_touching_edge() and not_inside_touching_edge()
interacting_edge() and not_interacting_edge()
outside_touching() and not_outside_touching()
outside_touching_edge() and not_outside_touching_edge()
touching() and not_touching()
two_color()
The two_color() function is used in double-patterning flows to decompose the input layer
into two colors. Optional precoloring assignments are used during graph coloring.
Syntax
two_color(
nodes =
polygon_layer,
links =
geometry_layer,
out_color1 =
out_polygon_layer,
out_color2 =
out_polygon_layer,
even_loops =
out_polygon_layer,
pre_color_errors =
out_polygon_layer,
pre_color1 =
polygon_layer, //optional
pre_color2 =
polygon_layer, //optional
output_even_loops =
true | false, //optional
output_type =
ODD_LOOP_ONE_LINK | ODD_LOOP_ALL_LINKS |
ODD_LOOP_ALL_NODES | ODD_LOOP_ALL_LOOP |
ODD_LOOP_INSIDE_RING, //optional
pre_color_error_mode = PRE_COLOR_ALL_NODES |
PRE_COLOR_ENVELOPE_PATH, //optional
color_preference = NONE | BALANCED, //optional
window_balance = {
window_layer = polygon_layer,
layer_hash = {"string" => polygon_layer, ...},
window_function = function,
delta_window = {width = double, height = double},
delta_x = double,
delta_y = double,
boundary = CLIP | ALIGN | IGNORE |
REPLICATE_WINDOW, //optional
rebalance_mode = GLOBAL | LOCAL, //optional
}, //optional
shift_min_length = double, //optional
shift_ratio = double, //optional
shift_mode = {SHORTEST, CENTER, CENTER_ALL_ANGLE,
OPPOSITE, ERROR_CENTER, ...}, //optional
optional_links = {geometry_layer, ...} //optional
out_color_type = ALL | CONFLICTS | NONE, //optional
out_color_pull_down = true | false, //optional
pre_color_reduce = true | false, //optional
generate_fix_guidance = true | false, //optional
fix_guidance_parameters = {
odd_loop_limit = integer, //optional
color_spacing_rules = (
(rule_type = SIDE_TO_SIDE | LINE_END_TO_SIDE |
LINE_END_TO_LINE_END | CORNER_TO_CORNER |
NOTCH | CENTER_TO_CENTER | USER_DEFINED,
distance = doubleconstraint,
extension_distance = double, //optional
projection_length = doubleconstraint, //optional
Returns
polygon layer
The return value of the function is a conflict marker layer that indicates where legal
two-coloring is not possible. For example, in the case where two nodes polygons on either
side of a links polygon have the same output color, the resulting conflict marker layer is the
connector polygon between the two polygons associated with the default output_type
argument for the ODD_LOOP_ONE_LINK option. Other output arguments enable additional
information in the return layer to capture the nodes that are involved in the coloring conflict.
Arguments
nodes
Required. Specifies the polygon layer that contains the polygons targeted for coloring.
links
Required. Specifies the input geometry layer that contains polygons that connect nodes
polygons to complete the graph description of the coloring problem. Each polygon in the
links geometry layer must interact, either by edge touch or polygon overlap, with
exactly two nodes polygons to achieve correct coloring. The links geometry indicates
that the two connected nodes polygons must be assigned to different colors.
The links geometry layer is commonly generated using dimensional commands on the
nodes polygon layer. For example, it is generated using an external spacing check on the
nodes polygon layer that captures double-patterning critical spacing relationships.
out_color1
Required. Specifies the output polygon layer that contains the subset of nodes polygons
that are colored with color 1.
out_color2
Required. Specifies the output polygon layer that contains the subset of nodes polygons
that are colored with color 2.
even_loops
Required. Specifies the output polygon layer that contains all even loops in any local
graph. That is, the layer is a connected network of nodes or links polygons that contain
a coloring conflict. This layer can be used to identify nested odd cycles.
pre_color_errors
Required. Specifies the output polygon layer that marks coloring conflicts between nodes
polygons that are marked for precoloring by the pre_color1 and pre_color2
arguments. When you specify the output_type argument without the
ODD_LOOP_ONE_LINK option, the pre_color_errors argument output contains any
color conflict path between any two precolored nodes that are part of minimal cycles, as
well as any node marked with two different precolors. For the ODD_LOOP_ONE_LINK
option, the pre_color_errors argument output contains only those precolored nodes
marked with both the pre_color1 and pre_color2 arguments.
pre_color1
Optional. Specifies the polygon layer that marks a subset of nodes polygons that must
be assigned to the out_color1 argument. The precolor marker must have polygon
interaction, that is, shape overlap, with the nodes polygon to be assigned to the
out_color1 argument. Portions of the pre_color1 argument that fall outside of the
nodes polygons are ignored.
pre_color2
Optional. Specifies the polygon layer that marks a subset of nodes polygons that must
be assigned to the out_color2 argument. The precolor marker must have polygon
interaction, that is, shape overlap, with the nodes polygon to be assigned to the
out_color2 argument. Portions of the pre_color2 argument that fall outside of nodes
polygons are ignored.
output_even_loops
Optional. Specifies if the even_loops output is generated.
❍ true. The output polygon layer contains all even loops in any local graph.
output_type
Optional. Controls the shape returned for coloring conflicts. The default is
ODD_LOOP_ONE_LINK.
❍ ODD_LOOP_ONE_LINK. Returns the links polygon between the two nodes polygons
of the same color.
❍ ODD_LOOP_ALL_LINKS. Returns all of the links polygons in the minimum
odd-member ring formed by nodes polygons and linked by links polygons that
include two same-colored nodes polygons connected by a single links polygon.
❍ ODD_LOOP_ALL_NODES. Returns all of the nodes polygons in the minimum
odd-member ring formed by nodes polygons and linked by links polygons that
include two same-colored nodes polygons connected by a single links polygon.
❍ ODD_LOOP_ALL_LOOP. Returns all of the links polygons as well as the nodes
polygons in the minimum odd-member ring formed by nodes polygons and linked by
links polygons that include two same-colored nodes polygons connected by a
single links polygon.
❍ ODD_LOOP_INSIDE_RING. Returns a ring that is two times the input library resolution
wide inside the minimum odd-member ring formed by nodes polygons. The ring is
linked by links polygons that include two same-colored nodes polygons connected
by a single links polygon. When an odd loop is closely connected to cross links or
look-thru links, the ODD_LOOP_INSIDE_RING output for this odd loop is the same as
the ODD_LOOP_ALL_LOOP output.
pre_color_error_mode
Optional. Specifies the output information for precolor errors. The default is
PRE_COLOR_ENVELOPE_PATH.
color_preference
Optional. Specifies if the IC Validator tool balances the color selections. Balancing is
based on polygon area. The default is NONE.
❍ NONE. Does not balance color selections. Orphan nodes are not colored.
❍ BALANCED. Balances color selections. Orphan nodes are colored. The tool tries to
balance the two colors hierarchically at each cell.
Note:
Orphan nodes are those polygons that do not have same color spacing links to
their neighbors. Orphan nodes are also called dangling nodes.
The color_preference argument is set to BALANCED automatically when color
balancing is activated with the window_balance argument.
window_balance
Optional. Turns on color balance functionality. In this flow, the tool determines a coloring
result, then measures the color balance (density). If a window violates the balance
requirement, which is defined in the window_function, then the tool explodes any cell
that interacts with the violating window polygon without completely covering it.
❍ window_layer. Required. Specifies the polygon layer containing one or more
polygons that define the boundaries where layers are processed for density
calculations.
The chip_extent() and layer_extent() functions can be used to create a window
layer. Call these functions before the density() function.
■ The chip_extent() function returns a layer containing a single rectangle equal
to the extents of the chip. Use this function to create a single full-chip check
window. See the chip_extent() function for more information.
■ The layer_extent() function returns a layer containing a single rectangle equal
to the extents of the input layer. Use this function to create a single-layer check
window. See the layer_extent() function for more information.
For more information about density calculations, see the density() function.
❍ layer_hash. Optional. Specifies a hash of string to polygon layer that is processed
for density calculations. Data in the hash is accessible via the hash key within the
remote window function. When referencing data in hash from within the window
function, only the portion of the layer within the current delta_window subwindow or
the current window layer polygon is seen.
If you specify an external layer_hash, this hash definition is merged with the default
hash definition into a single hash. The default names cannot be overwritten; default
names are nodes, out_color1, out_color2, even_loops, and pre_color_errors.
Optional layers are needed in an external layer_hash only when they are required
for the color_balance() function.
❍ window_function. Optional. Specifies the remote function that calculates the
density. See the “Layout Density Utility Functions” in Chapter 4 for more information
about the utility functions you can use to define a remote function.
❍ delta_window. Optional. Specifies the subwindow stepped across each window
layer polygon. The density equations are evaluated within each subwindow. The
default is the extents of each window layer polygon.
■ LOCAL. Performs density rebalancing locally for each density violation marker.
shift_min_length
Optional. Specifies the link shifting threshold. A link is shifted only when its length is
equal to or greater than this value. The default is 0 (zero).
shift_ratio
Optional. Defines the ratio of the shift segment to the overlap segment. For example, if
the overlap segment for an error pair is 100 microns and this value is set to 0.1, the shift
segment is 10 microns. The shifted link is within this segment. The default is 1.
shift_mode
Optional. Specifies the mode used to generate the link, which can be a subset of all of
the modes. The default is SHORTEST.
❍ SHORTEST. Uses the shortest distance between error pairs to generate a link.
❍ CENTER. Uses center points of the error pair to generate a link. This mode is
applicable only when the run length is less than or equal to 0 (zero) and the link
derived by the default shift mode is orthogonal.
❍ CENTER_ALL_ANGLE. Uses center points of the error pair to generate a link. This mode
is applicable only when the error pair run length is less than or equal to 0 (zero).
❍ OPPOSITE. Shifts two endpoints of the generated link in opposite directions with
respect to the shift ratio. This mode is applicable only when the shift range is positive,
which means the run length is greater than 0 (zero), the link length is greater than or
equal to the shift threshold, and the shift ratio is greater than 0 (zero).
❍ ERROR_CENTER. Uses center points of the error pair to generate a link.
Note:
When you select the ERROR_CENTER option to generate a link, all of the other
modes are disabled.
optional_links
Optional. Specifies a list of geometry layers. Each layer is a link layer and has an implied
weight associated with it. The first layer has weight 1 and has the highest priority after
the required link layer. The second layer has weight 2 and has the next highest priority,
and so on. The tool uses these weights in optimization, for example, density balancing.
You can specify up to seven layers. The default is empty.
Note:
All the link layers, including the required link layer and layers defined in the
optional_links argument, must be the same type, that is, they all must be either
polygon layers, edge layers, or error layers.
Color conflicts that involve only optional links are not output.
out_color_type
Optional. Controls how coloring results are generated for the output polygon layers
specified by the out_color_1 and out_color_2 arguments. The default is ALL.
❍ ALL. Generates all coloring results of out_color_1 and out_color_2.
❍ CONFLICTS. Generates the coloring results only for the conflict graphs of
out_color_1 and out_color_2.
❍ NONE. Does not generate any coloring results, which means out_color_1 and
out_color_2 are empty.
out_color_pull_down
Optional. Controls whether the IC Validator tool pulls down the coloring output specified
by the out_color_1 and out_color_2 arguments. The default is true.
❍ true. Pulls down the coloring output from out_color_1 and out_color_2.
❍ false. Does not pull down the coloring output from out_color_1 and out_color_2.
For information about how the tool pulls down data, see the pull_down() and
pull_down_to() functions.
pre_color_reduce
Optional. Controls whether the two_color() function performs precolor filtering. The
default is false. Set this option to true when you want to reduce memory usage by
filtering precolored node data that does not affect the coloring results for any uncolored
node shapes.
Note:
Enabling the precolor data reduction can result in the following error conflict reporting
changes:
■ Odd loops interacting with pruned precolor links might be omitted.
■ Even loops interacting with pruned precolor links might be omitted.
generate_fix_guidance
Optional. Controls whether fix guidance information is returned as violations and added
to the error database (PYDB). The default is false.
fix_guidance_parameters
Optional. Specifies the parameters used to generate fix guidance information.
❍ odd_loop_limit. Optional. Sets the maximum number of errors that the tool reports
with fix guidance information when the generate_fix_guidance argument is set to
true. The default is 100, which means the two_color() function reports 100 odd
loop errors with fix guidance information. Setting this argument to 0 suppresses the
reporting of fix guidance information.
Note:
The tool selects odd loops based on their areas. Short-range odd loops are
reported first.
To report fix guidance information, you must set the output_type argument to
ODD_LOOP_INSIDE_RING. If you set the output_type argument to any other
value, the function reports only double-patterning errors.
To report fix guidance information for all of the violations, set the odd_loop_limit
argument to ERROR_LIMIT_UNLIMITED.
❍ color_spacing_rules. Optional. Defines the rule type and spacing values for the fix
guidance information output when the input layer specified by the links argument is
not an error layer. For more information, see the color_spacing_rules argument of
the coloring_links() function.
Note:
If the links input layer is an error layer, this argument is ignored and the
color_error_spacing_rules argument defines the rule type and spacing
values.
■ rule_type. Required. Specifies how the distance is measured.
- SIDE_TO_SIDE.
- LINE_END_TO_SIDE.
- LINE_END_TO_LINE_END.
- NOTCH.
- CENTER_TO_CENTER.
- USER_DEFINED.
■ distance. Required. Specifies the check distance. For more information, see
“Constraints” on page A-4.
■ extension_distance. Optional. Specifies the check region extension distance
when the extension option is RECTANGLE. The value must be nonnegative. The
default is 0.0.
■ projection_length. Optional. Specifies the projection length. For more
information, see “Constraints” on page A-4. The default is >0.0.
■ extension. Optional. Specifies the extension of the check region beyond the
endpoints of the edge being checked. The default is NONE.
- EDGE. Forms the check region by extending the edges, using the
extension_distance argument value, and by creating right-angle boundaries
at the extended endpoints based on the distance constraint. The right-angle
boundaries of the check region are exclusive. The far boundary of the check
region is inclusive or exclusive depending on the constraint of the distance
value.
Note:
This setting is useful only where the minimum of the distance constraint is
nonzero and the extension_distance is nonzero.
- NONE. Does not extend the check region. It is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check
region are exclusive. The far boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
- RADIAL. Extends the check region past the endpoints of the edges using the
distance value with a radial curve. The boundary of the check region is
inclusive or exclusive depending on the constraint of the distance value.
- RECTANGLE. Extends the check region past the endpoints of the edges using
the extension_distance value with a rectangle. The boundary of the check
region is inclusive or exclusive depending on the constraint of the distance
value.
- SQUARE. Extends the check region past the endpoints of the edges using the
distance value with a square. The boundary of the check region is inclusive
or exclusive depending on the constraint of the distance value.
■ look_thru. Optional. Specifies the edges that the spacing check looks through
when measuring. The default is NONE.
- NONE. Does not look through any edges, including edge endpoints.
- NOT_ADJACENT. Looks through all edges, except for this special case: when
measuring the extension region from endpoint X of edge A, the check does not
look through any edges that share endpoint X with edge A. This setting avoids
false violations that might be reported when the look_thru argument is ALL.
- ALL. Looks through all edges.
■ distance. Required. Specifies the check distance for same mask violations in
double patterning.
■ sized_by. Optional. Specifies the oversized value. The default is 0.0.
❍ track_layer. Optional. Specifies the track layer of the metal layer. By default, the
tool attempts to guess the track layer.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Examples
Example 1
Figure 3-197 shows an example of the two_color() function when the output_type
argument is not specified; the ODD_LOOP_ONE_LINK option is used by default. The conflict
marker layer shows where two nodes polygons on either side of a links polygon received
the same color.
conflict = two_color(gray, red, OutColor1, OutColor2);
Example 2
Figure 3-198 shows input layers before coloring.
• Green indicates the nodes polygons to be colored.
• Orange indicates the links polygons.
Figure 3-198 Input Layers Before Coloring
See Also
three_color()
four_color()
unified_fill()
The unified_fill() function can automatically generate a wide range of fill pattern types
while satisfying stringent spacing rules and target densities. Table 3-39 lists the fill pattern
types that the function can generate
Table 3-39 Fill Pattern Types
Expandable polygon fill Fill cells that get expanded along the boundaries of a
fill target area
Expandable cell fill Fill cells, with base cell component definitions
provided in GDS files, that get expanded along the
boundaries of a fill target area
See the Unified Fill chapter of the IC Validator User Guide for detailed information about the
application of these fill pattern types, as well as discussions on defining spacing constraints.
Syntax
unified_fill(
fill_patterns = {
{type = UF_POLYGON | UF_ADJUSTABLE | UF_STACK
UF_CELL | UF_EXPANDABLE | UF_STRIPE | UF_EXPANDABLE_CELL,
polygon_fill = {
pattern_spec = {
space_x = double, space_y = double,
stagger_x = double, stagger_y = double,
pattern_spacing = {
allowed_spacing_x = {doubleconstraint, ...},
allowed_spacing_y = {doubleconstraint, ...},
min_space_corner = double,
extension = ELLIPTICAL | RADIAL |
INTERSECTION | RADIAL_INTERSECTION,
RIGHT_BOTTOM | RIGHT_TOP},
prune_jog = {
{horizontal_length = doubleconstraint,
vertical_length = doubleconstraint,
prune_order = HORIZONTAL | VERTICAL,
iterate = true | false},
...},
rotation = ROTATE_0 | ROTATE_90 | ROTATE_180 | ROTATE_270,
reflection = true | false,
signal = {layer = polygon_layer, ring_count = integer},
partition = {min_space = double, //optional
min_space_x = double, //optional
min_space_y = double //optional
},
pitch = {x = double, y = double,
context_layer = polygon_layer},
color = true | false,
color_space = double,
hierarchical_fill = true | false,
cell_prefix = "string",
fill_to_signal_spacing = {
{signal_layer = polygon_layer,
width_based_spacing = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}}, ...},
min_space = double,
context = EXTERIOR | INTERIOR |
EXTERIOR_INTERIOR | BOUNDARY,
min_space_x = double,
min_space_y = double,
width_based_spacing_x = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
width_based_spacing_y = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
color_aware_to_fill = ALL | ONLY_COLOR_1 |
ONLY_COLOR_2 | ONLY_COLOR_3},
min_space_inside = double,
min_space_inside_x = double,
min_space_inside_y = double,
space_extension = double,
space_extension_x = double,
space_extension_y = double,
debug_layer_name = "string",
...},
signal_linear = {
layers = {polygon_layer, ...},
ring_count = integer,
direction = HORIZONTAL | VERTICAL | AUTO,
space_to_signal_side = double,
space_to_signal_line_end = double,
space_to_signal_corner = double,
space_to_signal_extension = SQUARE | RECTANGLE | RADIAL,
dpt_space = double,
long_fill_max_num = integer,
long_fill_ring_begin = integer},
use_fill_to_signal_spacing = true | false,
adjustable_width_bound = double,
output = SIGNAL_SIDE | ALL,
signal_min_length = double,
colored_layers = {
{layer = polygon_layer},
color = NO_COLOR | COLOR_1 | COLOR_2,
...},
color_scheme = UF_LINE_END | UF_LINE_SIDE | UF_CHECKERED |
UF_DPT_SPACING,
dpt_spacing = {dpt_space_x = double, dpt_space_y = double,
dpt_space_corner = double,
dpt_space_extension = ELLIPTICAL | RADIAL |
INTERSECTION |
RADIAL_INTERSECTION},
reference_layer = {
reference_context = REGION_EXTENT | LAYER_EXTENT |
POLYGON_EXTENT | INITIAL_POINT,
initial_coord = {x = double, y = double},
shift_value = {x = double, y = double},
layer = polygon_layer},
num_colors = integer,
},
adjustable_fill = {
pattern_spec = {
space_x = double, space_y = double,
stagger_x = double, stagger_y = double,
pattern_spacing = {
allowed_spacing_x = {doubleconstraint, ...},
allowed_spacing_y = {doubleconstraint, ...},
min_space_corner = double,
extension = ELLIPTICAL | RADIAL |
INTERSECTION | RADIAL_INTERSECTION,
corner_check = POSITIVE_SPACE | ALL},
other_pattern_spacing = {integer => doubleconstraint}},
layer_spec = {
output_layer_key = "string",
fill_to_signal_spacing = {
{signal_layer = polygon_layer,
width_based_spacing = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
min_space = double,
context = EXTERIOR | INTERIOR |
EXTERIOR_INTERIOR | BOUNDARY,
min_space_x = double,
min_space_y = double,
width_based_spacing_x = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
width_based_spacing_y = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
color_aware_to_fill = ALL | ONLY_COLOR_1 |
ONLY_COLOR_2 | ONLY_COLOR_3},
min_space_inside = double,
min_space_inside_x = double,
min_space_inside_y = double,
space_extension = double,
space_extension_x = double,
space_extension_y = double,
debug_layer_name = "string",
...}},
fill_to_fill_spacing = {
allowed_spacing_x = {doubleconstraint, ...},
allowed_spacing_y = {doubleconstraint, ...},
min_space_corner = double,
extension = ELLIPTICAL | RADIAL |
INTERSECTION | RADIAL_INTERSECTION}},
corner_check = POSITIVE_SPACE | ALL},
width = double,
height = double,
width_bound = double,
height_bound = double,
width_delta = double,
height_delta = double,
fill_context = REGION_CONTEXT | CHIP_CONTEXT|
PARTITION_CONTEXT,
rotation = ROTATE_0 | ROTATE_90 | ROTATE_180 | ROTATE_270,
insertion = {iterations = integer,
shift_factor = integer,
symmetry = true | false,
auto_rotate = NONE | PRIMARY_AXIS |
FAILED_INSERTION | MAX_INSERTION,
starting_point = LEFT_BOTTOM | LEFT_TOP | CENTER |
RIGHT_BOTTOM | RIGHT_TOP},
prune_jog = {
{horizontal_length = doubleconstraint,
vertical_length = doubleconstraint,
prune_order = HORIZONTAL | VERTICAL,
iterate = true | false},
...},
partition = {min_space = double, //optional
min_space_x = double, //optional
min_space_y = double //optional
},
pitch = {x = double, y = double,
context_layer = polygon_layer},
hierarchical_fill = true | false,
cell_prefix = "string",
fill_to_fill_spacing_direction = END_DIRECTION | ALL,
color = true | false,
color_space = double,
color_scheme = UF_LINE_END | UF_LINE_SIDE | UF_CHECKERED |
UF_DPT_SPACING,
dpt_spacing = {dpt_space_x = double, dpt_space_y = double,
dpt_space_corner = double,
dpt_space_extension = ELLIPTICAL | RADIAL |
INTERSECTION |
RADIAL_INTERSECTION},
density_optimization = NONE | TOUCH_BOUNDARY,
reference_layer = {
reference_context = REGION_EXTENT | LAYER_EXTENT |
POLYGON_EXTENT | INITIAL_POINT,
initial_coord = {x = double, y = double},
shift_value = {x = double, y = double},
layer = polygon_layer},
num_colors = integer,
},
stack_fill = {
pattern_spec = {
space_x = double, space_y = double,
stagger_x = double, stagger_y = double,
pattern_spacing = {
allowed_spacing_x = {doubleconstraint, ...},
allowed_spacing_y = {doubleconstraint, ...},
min_space_corner = double,
extension = ELLIPTICAL | RADIAL |
INTERSECTION | RADIAL_INTERSECTION,
corner_check = POSITIVE_SPACE | ALL},
other_pattern_spacing = {integer => doubleconstraint}},
layers = {
{layer_spec = {
output_layer_key = "string",
fill_to_signal_spacing = {
{signal_layer = polygon_layer,
width_based_spacing = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
min_space = double,
context = EXTERIOR | INTERIOR |
EXTERIOR_INTERIOR | BOUNDARY,
min_space_x = double,
min_space_y = double,
width_based_spacing_x = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
width_based_spacing_y = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...}},
min_space_inside = double,
min_space_inside_x = double,
min_space_inside_y = double,
space_extension = double,
space_extension_x = double,
space_extension_y = double,
debug_layer_name = "string",
...},
fill_to_fill_spacing = {
allowed_spacing_x = {doubleconstraint, ...},
allowed_spacing_y = {doubleconstraint, ...},
min_space_corner = double,
extension = ELLIPTICAL | RADIAL |
INTERSECTION | RADIAL_INTERSECTION}},
corner_check = POSITIVE_SPACE | ALL},
polygons = {{x = double, y = double}, ...},
required_layer_keys = {"string", ...},
grouping = NONE | ALL,
require_adjacent_layer_keys = true | false},
min_polygon_count = integer,
...},
min_stack = integer,
max_stack = integer,
spacing_context = UF_PATTERN | UF_LAYER,
separate_patterns = true | false,
rotation = ROTATE_0 | ROTATE_90 | ROTATE_180 | ROTATE_270,
reflection = true | false,
fill_context = REGION_CONTEXT | CHIP_CONTEXT |
PARTITION_CONTEXT,
insertion = {iterations = integer,
shift_factor = integer,
symmetry = true | false,
auto_rotate = NONE | PRIMARY_AXIS |
FAILED_INSERTION | MAX_INSERTION,
starting_point = LEFT_BOTTOM | LEFT_TOP | CENTER |
RIGHT_BOTTOM | RIGHT_TOP},
prune_jog = {
{horizontal_length = doubleconstraint,
vertical_length = doubleconstraint,
prune_order = HORIZONTAL | VERTICAL,
iterate = true | false},
...},
partition = {min_space = double, //optional
min_space_x = double, //optional
min_space_y = double //optional
},
pitch = {x = double, y = double,
context_layer = polygon_layer},
hierarchical_fill = true | false,
cell_prefix = "string",
fill_to_signal_spacing = {
{signal_layer = polygon_layer,
width_based_spacing = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}}, ...},
min_space = double,
context = EXTERIOR | INTERIOR |
EXTERIOR_INTERIOR | BOUNDARY,
min_space_x = double,
min_space_y = double,
width_based_spacing_x = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
width_based_spacing_y = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...}},
min_space_inside = double,
min_space_inside_x = double,
min_space_inside_y = double,
space_extension = double,
space_extension_x = double,
space_extension_y = double,
debug_layer_name = "string",
...},
reference_layer = {
reference_context = REGION_EXTENT | LAYER_EXTENT |
POLYGON_EXTENT | INITIAL_POINT,
initial_coord = {x = double, y = double},
shift_value = {x = double, y = double},
layer = polygon_layer},
}
cell_fill = {
pattern_spec = {
space_x = double, space_y = double,
stagger_x = double, stagger_y = double,
pattern_spacing = {
allowed_spacing_x = {doubleconstraint, ...},
allowed_spacing_y = {doubleconstraint, ...},
min_space_corner = double,
extension = ELLIPTICAL | RADIAL |
INTERSECTION | RADIAL_INTERSECTION,
corner_check = POSITIVE_SPACE | ALL},
other_pattern_spacing = {integer => doubleconstraint}},
cell = cell_handle,
layers = {
{layer_spec = {
output_layer_key = "string",
fill_to_signal_spacing = {
{signal_layer = polygon_layer,
width_based_spacing = {
{width = doubleconstraint,
{horizontal_length = doubleconstraint,
vertical_length = doubleconstraint,
prune_order = HORIZONTAL | VERTICAL,
iterate = true | false},
...},
partition = {min_space = double, //optional
min_space_x = double, //optional
min_space_y = double //optional
},
pitch = {x = double, y = double,
context_layer = polygon_layer},
hierarchical_fill = true | false,
cell_prefix = "string",
fill_to_signal_spacing = {
{signal_layer = polygon_layer,
width_based_spacing = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}}, ...},
min_space = double,
context = EXTERIOR | INTERIOR |
EXTERIOR_INTERIOR | BOUNDARY,
min_space_x = double,
min_space_y = double,
width_based_spacing_x = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
width_based_spacing_y = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...}},
min_space_inside = double,
min_space_inside_x = double,
min_space_inside_y = double,
space_extension = double,
space_extension_x = double,
space_extension_y = double,
debug_layer_name = "string",
reference_layer = {
reference_context = REGION_EXTENT | LAYER_EXTENT |
POLYGON_EXTENT | INITIAL_POINT,
initial_coord = {x = double, y = double},
shift_value = {x = double, y = double},
layer = polygon_layer},
...}},
expandable_polygon_fill = {
pattern_spec = {
space_x = double, space_y = double,
stagger_x = double, stagger_y = double,
pattern_spacing = {
allowed_spacing_x = {doubleconstraint, ...},
allowed_spacing_y = {doubleconstraint, ...},
min_space_corner = double,
{layers =
{layer_spec = {
output_layer_key = "string",
fill_to_signal_spacing = {
{signal_layer = polygon_layer,
width_based_spacing = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
min_space = double,
context = EXTERIOR | INTERIOR |
EXTERIOR_INTERIOR | BOUNDARY,
min_space_x = double,
min_space_y = double,
width_based_spacing_x = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
width_based_spacing_y = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
min_space_inside = double,
min_space_inside_x = double,
min_space_inside_y = double,
space_extension = double,
space_extension_x = double,
space_extension_y = double,
debug_layer_name = "string",
...}},
fill_to_fill_spacing = {
allowed_spacing_x = {doubleconstraint, ...},
allowed_spacing_y = {doubleconstraint, ...},
min_space_corner = double,
extension = ELLIPTICAL | RADIAL |
INTERSECTION |
RADIAL_INTERSECTION}},
corner_check = POSITIVE_SPACE | ALL},
polygons = {{x = double, y = double}, ...}, ...},
repeatable = true | false,
maximum = integer,
maximum_y = integer},
...},
base_cell_bottom = {
{layers =
{layer_spec = {
output_layer_key = "string",
fill_to_signal_spacing = {
{signal_layer = polygon_layer,
width_based_spacing = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
min_space = double,
min_space_x = double,
min_space_y = double,
width_based_spacing_x = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
width_based_spacing_y = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...}},
min_space_inside = double,
min_space_inside_x = double,
min_space_inside_y = double,
space_extension = double,
space_extension_x = double,
space_extension_y = double,
debug_layer_name = "string",
...},
fill_to_fill_spacing = {
allowed_spacing_x = {doubleconstraint, ...},
allowed_spacing_y = {doubleconstraint, ...},
min_space_corner = double,
extension = ELLIPTICAL | RADIAL |
INTERSECTION |
RADIAL_INTERSECTION}},
corner_check = POSITIVE_SPACE | ALL},
polygons = {{x = double, y = double}, ...}, ...},
repeatable = true | false,
maximum = integer,
maximum_y = integer},
...},
merging_direction = VERTICAL | HORIZONTAL,
merging_length_limit = double,
reference_layer = {
reference_context = REGION_EXTENT | LAYER_EXTENT |
POLYGON_EXTENT | INITIAL_POINT,
initial_coord = {x = double, y = double},
shift_value = {x = double, y = double},
layer = polygon_layer},
...}}
stripe_fill =
{layer_spec = {
output_layer_key = "string",
fill_to_signal_spacing = {
{signal_layer = polygon_layer,
width_based_spacing = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
min_space = double,
context = EXTERIOR | INTERIOR |
EXTERIOR_INTERIOR | BOUNDARY,
min_space_x = double,
min_space_y = double,
width_based_spacing_x = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
width_based_spacing_y = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...}},
min_space_inside = double,
min_space_inside_x = double,
min_space_inside_y = double,
space_extension = double,
space_extension_x = double,
space_extension_y = double,
debug_layer_name = "string",
...},
fill_to_fill_spacing = {
allowed_spacing_x = {doubleconstraint, ...},
allowed_spacing_y = {doubleconstraint, ...},
min_space_corner = double,
extension = ELLIPTICAL | RADIAL |
INTERSECTION | RADIAL_INTERSECTION}},
corner_check = POSITIVE_SPACE | ALL},
direction = HORIZONTAL | VERTICAL,
width = double,
spacing = double,
symmetry = true | false,
fill_context = REGION_CONTEXT | CHIP_CONTEXT |
PARTITION_CONTEXT,
partition = {min_space = double, //optional
min_space_x = double, //optional
min_space_y = double //optional
},
pitch = {x = double, y = double,
context_layer = polygon_layer},
other_pattern_spacing = {integer => doubleconstraint}}},
prune_jog = {
{horizontal_length = doubleconstraint,
vertical_length = doubleconstraint,
prune_order = HORIZONTAL | VERTICAL,
iterate = true | false},
...},
reference_layer = {
reference_context = REGION_EXTENT | LAYER_EXTENT |
POLYGON_EXTENT | INITIAL_POINT,
initial_coord = {x = double, y = double},
shift_value = {x = double, y = double},
layer = polygon_layer},
...},
starting_point = LEFT_BOTTOM | LEFT_TOP | CENTER |
RIGHT_BOTTOM | RIGHT_TOP,
min_height = double,
min_count = integer,
same_size_count = integer,
...},
expandable_cell_fill = {
pattern_spec = {
space_x = double, space_y = double,
stagger_x = double, stagger_y = double,
pattern_spacing = {
allowed_spacing_x = {doubleconstraint, ...},
allowed_spacing_y = {doubleconstraint, ...},
min_space_corner = double,
extension = ELLIPTICAL | RADIAL |
INTERSECTION | RADIAL_INTERSECTION,
corner_check = POSITIVE_SPACE | ALL},
other_pattern_spacing = {integer => doubleconstraint}},
length_limit_x = double,
length_limit_y = double,
cut_off_min_space_x = double,
cut_off_min_space_y = double},
base_cell = {
{cell = cell_handle,
layers =
{layer_spec = {
output_layer_key = "string",
fill_to_signal_spacing = {
{signal_layer = polygon_layer,
width_based_spacing = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
min_space = double,
context = EXTERIOR | INTERIOR |
EXTERIOR_INTERIOR | BOUNDARY,
min_space_x = double,
min_space_y = double,
width_based_spacing_x = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
width_based_spacing_y = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...}},
min_space_inside = double,
min_space_inside_x = double,
min_space_inside_y = double,
space_extension = double,
space_extension_x = double,
space_extension_y = double,
debug_layer_name = "string",
...},
fill_to_fill_spacing = {
allowed_spacing_x = {doubleconstraint, ...},
RADIAL_INTERSECTION}},
corner_check = POSITIVE_SPACE | ALL},
ldt_list = {
{layer_num_range = integerconstraint,
data_type_range = integerconstraint}, ...},
unbounded_ldt_list = {
{layer_num_range = integerconstraint,
data_type_range = integerconstraint}, ...},
...},
repeatable = true | false,
maximum = integer,
maximum_y = integer},
...},
base_cell_direction = HORIZONTAL | VERTICAL,
fill_context = REGION_CONTEXT | CHIP_CONTEXT |
PARTITION_CONTEXT,
insertion = {iterations = integer,
shift_factor = integer,
symmetry = true | false,
auto_rotate = NONE | PRIMARY_AXIS |
FAILED_INSERTION | MAX_INSERTION,
starting_point = LEFT_BOTTOM | LEFT_TOP | CENTER |
RIGHT_BOTTOM | RIGHT_TOP},
prune_jog = {
{horizontal_length = doubleconstraint,
vertical_length = doubleconstraint,
prune_order = HORIZONTAL | VERTICAL,
iterate = true | false},
...},
partition = {min_space = double, //optional
min_space_x = double, //optional
min_space_y = double //optional
},
pitch = {x = double, y = double,
context_layer = polygon_layer},
hierarchical_fill = true | false,
cell_prefix = "string",
fill_to_signal_spacing = {
{signal_layer = polygon_layer,
width_based_spacing = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
min_space = double,
context = EXTERIOR | INTERIOR |
EXTERIOR_INTERIOR | BOUNDARY,
min_space_x = double,
min_space_y = double,
width_based_spacing_x = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...},
width_based_spacing_y = {
{width = doubleconstraint,
allowed_spacing = {doubleconstraint, ...}},
...}},
min_space_inside = double,
min_space_inside_x = double,
min_space_inside_y = double,
space_extension = double,
space_extension_x = double,
space_extension_y = double,
debug_layer_name = "string",
...},
expansion_mode = BOUNDARY_EXPANSION | MAX_EXPANSION,
fill_to_fill_spacing_direction = END_DIRECTION | ALL,
base_cell_overlap = {
left_to_center = double,
bottom_to_center = double,
center_to_right = double,
center_to_top = double,
center_to_center_x = double,
center_to_center_y = double},
reference_layer = {
reference_context = REGION_EXTENT | LAYER_EXTENT |
POLYGON_EXTENT | INITIAL_POINT,
initial_coord = {x = double, y = double},
shift_value = {x = double, y = double},
layer = polygon_layer},
...},
pattern_extent_for_spacing = BOUNDARY_EXTENT | ALL_EXTENT,
},
criteria = {{target = {range = doubleconstraint, target = double},
gradient = {range = doubleconstraint,
comparison = ABSOLUTE | RELATIVE,
check_corner = true | false},
fill_layer_keys = {"string", ...},
design_layers = {polygon_layer, ...},
design_layers_hash = {"string" => polygon_layer, ...},
window_function = function},
...}, //optional
delta_window = {width = double, height = double}, //optional
delta_x = double, //optional
delta_y = double, //optional
gradient_delta_window = {width = double, height = double}, //optional
gradient_delta_x = double, //optional
gradient_delta_y = double, //optional
fill_boundary = {type = CHIP | LAYER | WINDOW,
layer = polygon_layer,
window = {left = double, bottom = double,
right = double, top = double}}, //optional
window_layer = polygon_layer, //optional
grid = double, //optional
boundary = CLIP | ALIGN | IGNORE | REPLICATE_WINDOW, //optional
extents_output = {{output_layer_key = "string",
border = double,
Returns
layer_groups_h
The output of the unified_fill() function is a hash of string to list of polygon layer. The
strings are user-defined. The list is used for coloring.
Arguments
fill_patterns
Required. Lists structures that define the fill patterns. The order of the fill patterns is
crucial to the insertion operation. The fill region for a given pattern must consider fill
placed by preceding patterns. Successive patterns are expected to keep out of
preceding patterns as though they are part of the design.
❍ type. Required. Specifies the fill type.
width_based_spacing_y. Specifies where fill can go, and not go, in the
y-direction based on the width of the design layer, when the context is
EXTERIOR. The width_based_spacing_y value overrides the
min_space_y value if both are specified.
nonrectangular fill area, the extents of the fill area are used to determine
the major axis.
¤ FAILED_INSERTION. Rotates fill 90 degrees if the original orientation
provided zero insertion for a given fill region.
¤ MAX_INSERTION. Rotates fill either 0 or 90 degrees, whichever provides
maximum insertion.
- starting_point. Optional. Specifies the location in fillable regions from which
the fills are generated. The default is LEFT_BOTTOM.
¤ LEFT_BOTTOM. Generates fill from the bottom-left corner of the fillable
region.
¤ LEFT_TOP. Generates fill from the top-left corner of the fillable region.
¤ RIGHT_BOTTOM. Generates fill from the bottom-right corner of the fillable
region.
¤ RIGHT_TOP. Generates fill from the top-right corner of the fillable region.
¤ CENTER. Generates fill from the center point of the fillable region.
This value is not supported when the fill_context option is set to
SIGNAL_CONTEXT or LINEAR_CONTEXT.
Note that when using fill_context = PARTITION_CONTEXT, the center point
is based on the polygons that have been partitioned. When using
fill_context = CHIP_CONTEXT, the starting point starts from the center point
of the output layer from the chip_extent() function.
As shown in the following figure, the fill is located at the starting point of the
fillable region. When starting_point = RIGHT_TOP, the fill whose (right, top)
is in the fillable region's (right, top) is represented.
- ROTATE_90.
- ROTATE_180.
- ROTATE_270.
■ reflection. Optional. Specifies if the pattern is reflected. See Figure 3-210 for
an example of reflection and rotation.
Note:
Reflection is performed before rotation.
The default is false.
- true. Reflects the pattern.
■ signal. Optional. Specifies specifics for alignment to signal layers. This option is
ignored if the fill_context option is not SIGNAL_CONTEXT. This feature ignores
the insertion option and the partition option. Any patterns aligned with the
signal option must appear before any non-aligned patterns in the pattern_spec
list. A given signal layer can only have one alignment specification.
- layer. Optional. Specifies the signal layer that are used for alignment.
- stagger_y. Ignored.
In the context of nonrectangular fill, the major axis of the pattern is defined as the
longest extent of the pattern.
■ partition. Optional. Provides specifics for partitioning fill regions to produce
rectangular partitions. This option is used only if the fill_context option is
¤ The context of the grid is changed from the origin of chip to the lower left of
the extents of the context_layer polygon.
¤ The fillable regions are the result of the derived target layer ANDed with the
context_layer polygon.
¤ The initial starting point for fill insertion is forced to the lower left of the
extents of the polygon defined in the preceding bullet.
The fill_context option is ignored if it is REGION_CONTEXT or
CHIP_CONTEXT.
■ color. Optional. Turns on coloring for this layer. This option is only supported for
the polygon_fill structure when only one layer is defined. The default is false.
- true. Assigns alternating colors to fill shapes.
■ color_space. Optional. Specifies the minimum space allowed between fills for
two regions. This is the interregion coloring constraint. The default is 0.0; that is,
there is no interregion coloring constraint.
■ hierarchical_fill. Optional. Specifies array reference (AREF) output. The
default is false.
- true. Recognizes patterns of fill polygons on a single layer and converts them
to AREFs.
- false. Does not look for AREF patterns.
■ cell_prefix. Optional. Specifies the prefix for the created cell names that are
created from the hierarchical_fill option and from multilayer fill. The default
is "_FA".
■ fill_to_signal_spacing. Optional. Defines areas for fill that apply to all layers
in the pattern. If there are also fill_to_signal_spacing specifications for
specific layers, the most conservative values apply. See the
fill_to_signal_spacing option in the layer_spec option of the layer option
of the polygon_fill option for definitions of
- signal_layer
- width_based_spacing
- min_space
- context
- min_space_x
- min_space_y
- width_based_spacing_x
- width_based_spacing_y
- color_aware_to_fill
- min_space_inside
- min_space_inside_x
- min_space_inside_y
- space_extension
- space_extension_x
- space_extension_y
- debug_layer_name
- layers. Optional. Specifies the signal layers that are used for alignment.
¤ SQUARE.
¤ RECTANGLE.
This option uses the space_to_signal_line_end and
space_to_signal_corner options; the space_to_signal_corner option
is not used.
¤ RADIAL.
- dpt_space. Specifies the minimum spacing between two fills of the same
color. See also the color_space option, which is used for color balance. The
default is 0.0.
Note: To specify different spacing values for different directions in signal linear
fill, set dpt_space to 0 and use the more detailed dpt_spacing options to set
the x-direction, y-direction, or corner-to-corner spacing values.
- long_fill_max_num. Specifies the maximum number of fills that can be
combined into one long fill. The default is 0.
- long_fill_ring_begin. Specifies the ring count that starts this fill. For
example, if long_fill_ring_begin = 3, fills are combined into long fills from
the 3rd ring. If long_fill_ring_begin = 0, fills are not combined into long
fills. The default is 0x.
- use_fill_to_signal_spacing. Controls how the forbidden area of a signal
is generated. The default is false.
¤ true. The forbidden area is the same as the area specified by the
fill_to_signal_spacing option.
¤ false. The forbidden area is the same as the original signal linear fill.
- adjustable_width_bound. Controls how the fill boundary is adjusted. The
default is 0.0, which means the fill boundary is not adjusted. If the fill width is
less than the adjustable_width_bound value, the fill area is increased to
cover the fillable region. If the fill width is greater than the
adjustable_width_bound value, the fill width is decreased to keep the fill
within the fillable region.
Note that the adjustable_width_bound option and the long_fill_* options
are mutually exclusive.
- output. Controls if the fill is generated just on the side of the signal or on the
entire signal. The default is ALL.
¤ SIGNAL_SIDE
¤ ALL
- signal_min_length. Sets the minimum size of signals for which signal fills
are generated. The default is 0.0, which generates signal fills for all signals.
- colored_layers. Assigns alternating colors to fill shapes in a regular fill
pattern. There is a choice of two colors: COLOR_1 and COLOR_2. The default
is NO_COLOR.
■ color_scheme. Optional. Specifies how the tool makes color changes. The
default is UF_CHECKERED.
- UF_LINE_END. Switches color in short edges of the fill rectangles. If the fill is
square, the color switches in the x-direction.
- UF_LINE_SIDE. Switches color in long edges of the fill rectangles. If the fill is
square, the color switches in the y-direction.
- UF_CHECKERED. Switches color in both the short and long edges of the fill
rectangles.
- UF_DPT_SPACING. Switches color based on values specified in the
dpt_spacing option. (DPT is double patterning technology.)
- dpt_space_extension. Specifies how the tool checks the corners of the fill
rectangles. The default is INTERSECTION.
¤ ELLIPTICAL.
¤ RADIAL.
¤ INTERSECTION.
¤ RADIAL_INTERSECTION.
■ reference_layer. Optional. Defines the reference point for a fill pattern.
- space_y, except that the value must be greater than zero (>0).
- stagger_x
- stagger_y
- pattern_spacing
- other_pattern_spacing
- fill_to_signal_spacing
- fill_to_fill_spacing
■ width_bound. Specifies the minimum or maximum width that the fill rectangle can
shrink or grow. The value must be nonnegative.
■ height_bound. Specifies the minimum or maximum height that the fill rectangle
can shrink or grow. The value must be nonnegative.
■ width_delta. Specifies the allowable decrement/increment of the adjustability in
width. The value must be nonnegative.
■ height_delta. Specifies the allowable decrement/increment of the adjustability
in height. The value must be nonnegative.
■ fill_context. Optional. Specifies the context of the insertion for the fill pattern.
The default is REGION_CONTEXT.
Note:
The SIGNAL_CONTEXT and LINEAR_CONTEXT options are not supported.
See the fill_context option of the polygon_fill option for definitions of
- REGION_CONTEXT
- CHIP_CONTEXT
- PARTITION_CONTEXT
■ rotation. Optional. Specifies the rotation of the pattern. The default is ROTATE_0;
that is, no rotation.
- ROTATE_0.
- ROTATE_90.
- ROTATE_180.
- ROTATE_270.
Note:
Because the fill patterns are rectangles,
¤ ROTATE_0 and ROTATE_180 are equivalent.
¤ ROTATE_90 and ROTATE_270 are equivalent.
¤ The reflection option is not useful.
■ insertion. Optional. Specifies insertion specifics for a given pattern. See the
insertion option of the polygon_fill option for definitions of
- iterations
- shift_factor
- symmetry
- auto_rotate
- starting_point
- prune_jogs
- min_space
- min_space_x
- min_space_y
■ pitch. Optional. Refines the user-defined grid for this pattern, specifically for the
lower left of the extents of the fill shape. All other pattern features remain on the
global grid value. The default is the global grid value. See the pitch option of the
polygon_fill option for more information and for definitions of
- x
- y
- context_layer
■ cell_prefix. Optional. Specifies the prefix for the created cell names that are
created from the hierarchical_fill option and from multilayer fill. The default
is "_FA".
■ fill_to_fill_spacing_direction. Optional. Controls how the adjustable fill
process checks the fill-to-fill spacing with adjacent fill regions. The default is ALL.
- END_DIRECTION. Checks the spacing with fill regions in the adjustment
direction only.
- ALL. Checks the spacing with all adjacent fill regions.
■ color. Optional. Turns on coloring for this layer. This option is only supported for
the polygon_fill structure when only one layer is defined. The default is false.
- true. Assigns alternating colors to fill shapes.
■ color_space. Optional. Specifies the minimum space allowed between fills for
two regions. This is the interregion coloring constraint. The default is 0.0; that is,
there is no interregion coloring constraint.
■ color_scheme. Optional. Specifies how the tool makes color changes. The
default is UF_CHECKERED. See the color_scheme option of the polygon_fill
option for definitions of.
- UF_LINE_END
- UF_LINE_SIDE
- UF_CHECKERED
- UF_DPT_SPACING
- dpt_space_x
- dpt_space_y
- dpt_space_corner
- dpt_space_extension
- TOUCH_BOUNDARY. Use for cases where the fill shrinks when it is adjusted and
shifted, so that the end touches the boundary and the fill produces the
maximum density possible. In some cases, a polygon might be split into two
polygons, as shown in Figure 3-201.
Figure 3-201 Splitting Polygons to Touch the Boundary
❍ stack_fill. Optional. Defines a stack fill pattern. To use this type of fill, set the type
option to UF_STACK. This fill pattern is a multilayer cell and the extents of the largest
stack permutation are used for insertion. The permutations are defined with minimum
and maximum stack values. The required_layer_keys option indicates
interdependence of layers.
■ pattern_spec. Defines the spacing and stagger of the pattern being inserted.
See the pattern_spec option of the polygon_fill option for definitions of
- space_x, except that the value must be greater than zero (>0) if the
separate_pattern option is true or if the spacing_context option is
UF_PATTERN; also, the value cannot be negative if the grouping option of the
pattern’s layers option is ALL.
- space_y, except that the value must be greater than zero (>0) if the
separate_pattern option is true or if the spacing_context option is
UF_PATTERN; also, the value cannot be negative if the grouping option of the
pattern’s layers option is ALL.
- stagger_x
- stagger_y
- pattern_spacing
- other_pattern_spacing
■ layers. Required. Lists structures that define shapes per layer. The order is
crucial to the stack. For a given pattern, in the context of REGION_CONTEX and
with the separate_patterns option set to false, the fill region is defined as the
Boolean NOT of the intersection of all the fill_to_layer specifications.
- layer_spec. Required. Defines a structure that contains specifics for a given
layer in a given pattern. See the layer_spec option of the polygon_fill
option for definitions of
¤ output_layer_key
¤ fill_to_signal_spacing (Note: The color_aware_to_fill option is
used only for polygon fills and adjustable fills.)
¤ fill_to_fill_spacing
- polygons. Required. List of xy coordinates that represent the fill shapes.
¤ Adjacent layers, for any given layer, are those layers that are immediately
before or after it in the stack.
Important: When traversing the list of layers to identify adjacent layers, tied
layers are treated as one layer.
- grouping. Optional. Specifies if the data of this layer, in this pattern, is
processed as a group when dealing with allowable regions or target
adjustments. See Figure 3-202 for an example. The default is NONE.
¤ NONE. Does not group the data. Polygons are processed individually.
ALL
purple
block
NONE
- UF_LAYER
- ROTATE_90.
- ROTATE_180.
- ROTATE_270.
■ reflection. Optional. Specifies if the pattern is reflected. See Figure 3-210 for
an example of reflection and rotation.
Note:
Reflection is performed before rotation.
The default is false.
- true. Reflects the pattern.
■ fill_context. Optional. Specifies the context of the insertion for the fill pattern.
The default is REGION_CONTEXT.
Note:
The SIGNAL_CONTEXT and LINEAR_CONTEXT options are not supported.
See the fill_context option of the polygon_fill option for definitions of
- REGION_CONTEXT
- CHIP_CONTEXT
- PARTITION_CONTEXT
■ insertion. Optional. Specifies insertion specifics for a given pattern. See the
insertion option of the polygon_fill option for definitions of
- iterations
- shift_factor
- symmetry
- auto_rotate
- starting_point
- prune_jogs
- min_space
- min_space_x
- min_space_y
■ pitch. Optional. Refines the user-defined grid for this pattern, specifically for the
lower left of the extents of the fill shape. All other pattern features remain on the
global grid value. The default is the global grid value. See the pitch option of the
polygon_fill option for more information and for definitions of
- x
- y
- context_layer
- width_based_spacing
- min_space
- context
- min_space_x
- min_space_y
- width_based_spacing_x
- width_based_spacing_y
- color_aware_to_fill
- min_space_inside
- min_space_inside_x
- min_space_inside_y
- space_extension
- space_extension_x
- space_extension_y
- debug_layer_name
Note: The color_aware_to_fill option is used only for polygon fills and
adjustable fills.
❍ cell_fill. Optional. Defines a layout cell to be used for fill pattern generation. To
use this type of fill, set the type option to UF_CELL. This fill option supports
permutations the same as the stack_fill option.
■ pattern_spec. Defines the spacing and stagger of the pattern being inserted.
See the pattern_spec option of the polygon_fill option for definitions of
- space_x, except that the value must be greater than zero (>0) if the
separate_pattern option is true or if the spacing_context option is
UF_PATTERN; also, the value cannot be negative if the grouping option of the
pattern’s layers option is ALL.
- space_y, except that the value must be greater than zero (>0) if the
separate_pattern option is true or if the spacing_context option is
UF_PATTERN; also, the value cannot be negative if the grouping option of the
pattern’s layers option is ALL.
- stagger_x
- stagger_y
- pattern_spacing
- other_pattern_spacing
■ cell. Specifies the cell from the cell handle that is returned by the
import_gds_cell() and import_oasis_cell() functions.
■ layers. Required. Lists structures that define shapes per layer. The order is
crucial to the stack. For a given pattern, in the context of REGION_CONTEXT and
with the separate_patterns option set to false, the fill region is defined as the
Boolean NOT of the intersection of all the fill_to_layer specifications.
- layer_spec. Required. Defines a structure that contains specifics for a given
layer in a given pattern. See the layer_spec option of the polygon_fill
option for definitions of
¤ output_layer_key
¤ fill_to_signal_spacing (Note: The color_aware_to_fill option is
used only for polygon fills and adjustable fills.)
¤ fill_to_fill_spacing
- ldt_list. Lists the layer range and datatype range pairs. The
data_type_range value for each pair is optional, with a default of all
datatypes. See “Layout Layer and Datatype Ranges” on page A-6 for
information about the limits of the values.
- required_layer_keys. Optional. Specifies other fill keys that this particular
layer is dependent on when building permutations. See the
require_adjacent_layer_keys option for specifying adjacent layers as the
required layer keys. See the required_layer_keys option for stack fills for
information about adjacent and tied layers.
- grouping. Optional. Specifies if data of this layer, in this pattern, is processed
as a group when dealing with allowable regions or target adjustments. See
Figure 3-202 for an example. The default is NONE.
¤ NONE. Does not group data. Polygons are processed individually.
¤ ALL. Groups the polygons and processes the group as one.
- require_adjacent_layer_keys. Optional. Specifies if adjacent layers are
used as required layer keys. See the required_layer_keys and
require_adjacent_layer_keys options for stack fills for more information.
The default is false.
¤ true. Automatically specifies adjacent layers as required layer keys.
¤ false. Does not use adjacent layers as required layer keys.
- min_polygon_count. Specifies the minimum number of DRC-clean polygons
in a pattern layer that are required to keep this layer in the pattern placement.
- UF_LAYER
- ROTATE_90.
- ROTATE_180.
- ROTATE_270.
■ reflection. Optional. Specifies if the pattern is reflected. See Figure 3-210 for
an example of reflection and rotation.
Note:
Reflection is performed before rotation.
The default is false.
- true. Reflects the pattern.
■ fill_context. Optional. Specifies the context of the insertion for the fill pattern.
The default is REGION_CONTEXT.
Note:
The SIGNAL_CONTEXT and LINEAR_CONTEXT options are not supported.
See the fill_context option of the polygon_fill option for definitions of
- REGION_CONTEXT
- CHIP_CONTEXT
- PARTITION_CONTEXT
■ insertion. Optional. Specifies insertion specifics for a given pattern. See the
insertion option of the polygon_fill option for definitions of
- iterations
- shift_factor
- symmetry
- auto_rotate
- starting_point
- prune_jogs
- min_space
- min_space_x
- min_space_y
■ pitch. Optional. Refines the user-defined grid for this pattern, specifically for the
lower left of the extents of the fill shape. All other pattern features remain on the
global grid value. The default is the global grid value. See the pitch option of the
polygon_fill option for more information and for definitions of
- x
- y
- context_layer
- width_based_spacing
- min_space
- context
- min_space_x
- min_space_y
- width_based_spacing_x
- width_based_spacing_y
- color_aware_to_fill
- min_space_inside
- min_space_inside_x
- min_space_inside_y
- space_extension
- space_extension_x
- space_extension_y
- debug_layer_name
Note: The color_aware_to_fill option is used only for polygon fills and
adjustable fills.
❍ expandable_polygon_fill. Optional. Defines an expandable fill-cells pattern that
lets you insert fill cells that get expanded along the boundaries of a fill target area. To
use this type of fill pattern, you must first define a base fill cell with incremental unit
cells. See the Expandable Fill Cell Patterns section in the “Unified Fill” chapter of the
IC Validator User Guide for an example of expansion of a fill cell.
■ pattern_spec. Defines the spacing and stagger of the pattern being inserted.
See the pattern_spec option of the polygon_fill option for definitions of
- space_x, except that the value must be greater than zero (>0) if the
hierarchical_fill option is false.
- space_y, except that the value must be greater than zero (>0) if the
hierarchical_fill option is false.
- stagger_x
- stagger_y
- pattern_spacing
- other_pattern_spacing
The pattern_spec option of the expandable_polygon_fill option also
provides the following options:
- length_limit_x. Optional. Limits the length of the fill array in the x-direction.
This option is valid only when the cut_off_min_space_x option is also
included.
- length_limit_y. Optional. Limits the length of the fill array in the y-direction.
This option is valid only when the cut_off_min_space_y option is also
included.
- cut_off_min_space_x. Optional. Defines the space between two fill arrays in
the x-direction.
- cut_off_min_space_y. Optional. Defines the space between two fill arrays in
the y-direction.
■ base_cell. Defines a base fill cell with incremental unit cells.
If this option is specified and the base_cell_top and base_cell_bottom options
are not specified, then a one-dimensional fill cell is defined. If the base_cell_top
and base_cell_bottom options are specified, then a two-dimensional base fill is
defined. This cell must contain exactly three cells: left, repeatable, and right for
horizontal expansion or bottom, repeatable, and top for vertical expansion.
The base_cell_direction option controls the direction of the expansion for
one-dimensional fill cells. To control the expansion size, use the maximum option
for a horizontal fill cell or the maximum_y option for a vertical fill cell.
Note:
When you define a two-dimensional fill cell, the base_cell_direction option
is ignored.
- layers. Required. Lists structures that define shapes per layer.
output_layer_key
fill_to_signal_spacing
(Note: The color_aware_to_fill option is used only for polygon fills
and adjustable fills.)
fill_to_fill_spacing (Note: In the expandable_polygon_fill
option, the allowed_spacing_x option can have only one value in the
list.)
¤ polygons. Required. List of xy coordinates that represent the fill shapes.
- repeatable. Required. Specifies if the cell can be repeated.
- repeatable
- maximum
- maximum_y
■ base_cell_bottom. Defines a bottom base fill cell with incremental unit cells. Use
this option for two-dimensional fills. See the base_cell option for definitions of
- layers
- repeatable
- maximum
- maximum_y
- HORIZONTAL. Base cells contain three cells: left, repeatable, and right. The
horizontal expansion size is controlled by the maximum option of the
base_cell option.
- VERTICAL. Base cells contain three cells: bottom, repeatable, and top. The
vertical expansion size is controlled by the maximum_y option of the base_cell
option.
■ fill_context. Optional. Specifies the context of the insertion for the fill pattern.
The default is REGION_CONTEXT.
Note:
The SIGNAL_CONTEXT and LINEAR_CONTEXT options are not supported.
See the fill_context option of the polygon_fill option for definitions of
- REGION_CONTEXT
- CHIP_CONTEXT
- PARTITION_CONTEXT
■ insertion. Optional. Specifies insertion specifics for a given pattern. See the
insertion option of the polygon_fill option for definitions of
- iterations
- shift_factor
- symmetry
- auto_rotate
- starting_point
- prune_jogs
because they are only useful for nonrectangular target polygons. See the
partition option of the polygon_fill option for definitions of
- min_space
- min_space_x
- min_space_y
■ pitch. Optional. Refines the user-defined grid for this pattern, specifically for the
lower left of the extents of the fill shape. All other pattern features remain on the
global grid value. The default is the global grid value. See the pitch option of the
polygon_fill option for more information and for definitions of
- x
- y
- context_layer
- width_based_spacing
- min_space
- context
- min_space_x
- min_space_y
- width_based_spacing_x
- width_based_spacing_y
- color_aware_to_fill
- min_space_inside
- min_space_inside_x
- min_space_inside_y
- space_extension
- space_extension_x
- space_extension_y
- debug_layer_name
Note: The color_aware_to_fill option is used only for polygon fills and
adjustable fills.
■ expansion_mode. Optional. Controls the size of the generated fill array by
specifying the method used for fill expansion. The default is
BOUNDARY_EXPANSION.
- BOUNDARY_EXPANSION. Applies fill expansion only to the fill cells located next
to the boundary of the fillable region.
- MAX_EXPANSION. Applies fill expansion to all of the fill cells within fillable
region.
Note:
When MAX_EXPANSION is used, negative space_x and space_y values are not
allowed and the stagger_x and stagger_y options are not applicable.
The values of the repeatable options must be properly defined for each
component cell within the base cell, depending on whether the expandable cell is
one-dimensional or two-dimensional. If the values are not defined, the input
validation reports an error in the runset.
■ fill_to_fill_spacing_direction. Optional. Controls how the expandable fill
process checks the fill-to-fill spacing with adjacent fill regions. The default is ALL.
- END_DIRECTION. Checks the spacing with fill regions in the expansion
direction only.
- ALL. Checks the spacing with all adjacent fill regions.
- bottom_to_center
- center_to_right
- center_to_top
- center_to_center_x
- center_to_center_y
The overlap defines the distance between the left or bottom edge of bounding box
of the right or top component cell and the right or top edge of the bounding box of
the left or bottom component cell.
For one-dimensional expandable fill patterns, only the left_to_center,
center_to_right, and center_to_center_x options are considered during the
fill; that is, if the bottom_to_enter, center_to_top, or center_to_center_y
options are specified, they are ignored during the fill.
For two-dimensional expandable fill patterns, all of the overlap options are
considered. The same left_to_center value is applied to appropriate pairs of
components of the base cell:
- Left and center repeatable
- Bottom left and bottom center
- Top left and top center
Similarly, this value is applied to the center_to_right, center_to_center_x,
bottom_to_enter, center_to_top, and center_to_center_y options.
■ merging_cell. Defines a replacement cell with incremental unit cells. Use this
option for merging a one-dimensional replacement cell in two-dimensional fills.
The distance between cells must be equal to the pattern spacing requirement
defined in the pattern_spec option: space_y for vertical merging or space_x for
horizontal merging.
See the base_cell option for definitions of
- layers
- repeatable
- maximum
- maximum_y
Note: When you use the merging_cell option, the IC Validator tool ignores the
fill_to_fill_spacing and fill_to_signal_spacing values if they are
defined.
❍ stripe_fill. Optional. Defines striped fill to be used for fill pattern generation. To
use this type of fill, set the type option to UF_STRIPE.
■ layer_spec. Required. Defines a structure that contains specifics for a given
layer in a given pattern. See the layer_spec option of the polygon_fill option
for definitions of
- output_layer_key
- HORIZONTAL.
- VERTICAL.
■ spacing. Specifies the required spacing between stripes. The default is the value
of the width option.
■ symmetry. Optional. Specifies if this fill pattern is centered in a given fill region.
The default is false.
- true. Centers the fill pattern. The tool places the first stripe with its centerline
on the center of the bounding box, then place subsequent stripes at equal
distances from the center stripe. Only full width stripes are placed.
- false. Does not center the fill pattern.
■ fill_context. Optional. Specifies the context of the insertion for the fill pattern.
The default is REGION_CONTEXT.
Note:
The SIGNAL_CONTEXT and LINEAR_CONTEXT options are not supported.
See the fill_context option of the polygon_fill option for definitions of
- REGION_CONTEXT
- CHIP_CONTEXT
- PARTITION_CONTEXT
- min_space
- min_space_x
- min_space_y
■ pitch. Optional. Refines the user-defined grid for this pattern, specifically for the
lower left of the extents of the fill shape. All other pattern features remain on the
global grid value. The default is the global grid value. See the pitch option of the
polygon_fill option for more information and for definitions of
- x
- y
- context_layer
■ prune_jogs. Optional. Defines a list of jogs for pruning based on their horizontal
and vertical lengths. See the insertion option of the polygon_fill option for
more information.
■ reference_layer. Optional. Defines the reference point for a fill pattern. See the
insertion option of the polygon_fill option for more information.
- Next, the number of consecutive fill shapes that interact with the lines drawn in
Figure 3-204 are counted. To be considered consecutive fill shapes, the
distance between each stripe must be equal to the spacing option specified in
the stripe_fill option. In Figure 3-205, the number of consecutive fills in
line A is 3, line B is 7, line C is 3, line D is 4, and line E is 7.
Figure 3-205 min_count Consecutive Fills
- Finally, the stripe fills are adjusted so that the minimum count for each line is
met. The final result is shown in Figure 3-206.
Figure 3-206 min_count Adjustments
The fills are generated in a group of three stripe fills, all having the same size.
❍ expandable_cell_fill. Optional. Defines an expandable fill-cells pattern, in a GDS
file, that lets you insert fill cells that get expanded along the boundaries of a fill target
area. To use this type of fill pattern, you must first define a base fill cell with
incremental unit cells. See the Expandable Fill Cell Patterns section in the “Unified
Fill” chapter of the IC Validator User Guide for an example of expansion of a fill cell.
The expandable cell fill pattern type options are similar to the options of the same
name under the expandable_polygon_fill pattern; however, the layers suboption
has a different structure. The expandable cell fill pattern structure provides
expandable cells with file input definitions.
The cell member of the expandable_cell_component_s (base_cell* options)
structure must be obtained as an output of the import_gds_cell() or
import_oasis_cell() functions.
All fill requirements for fill patterns defined as expandable_cell_fill are the same
as for fill patterns defined as expandable_polygon_fill.
■ pattern_spec. Defines the spacing and stagger of the pattern being inserted.
See the pattern_spec option of the polygon_fill option for definitions of
- space_x, except that the value must be greater than zero (>0) if the
hierarchical_fill option is false.
- space_y, except that the value must be greater than zero (>0) if the
hierarchical_fill option is false.
- stagger_x
- stagger_y
- pattern_spacing
- other_pattern_spacing
The pattern_spec option of the expandable_cell_fill option also provides
the following options:
- length_limit_x. Optional. Limits the length of the fill array in the x-direction.
This option is valid only when the cut_off_min_space_x option is also
included.
- length_limit_y. Optional. Limits the length of the fill array in the y-direction.
This option is valid only when the cut_off_min_space_y option is also
included.
- cut_off_min_space_x. Optional. Defines the space between two fill arrays in
the x-direction.
- cut_off_min_space_y. Optional. Defines the space between two fill arrays in
the y-direction.
■ base_cell. Defines a base fill cell with incremental unit cells.
output_layer_key
fill_to_signal_spacing (Note: The color_aware_to_fill option
is used only for polygon fills and adjustable fills.)
fill_to_fill_spacing (Note: In the expandable_polygon_fill
option, the allowed_spacing_x option can have only one value in the
list.)
¤ ldt_list. Required. Lists the layer range and datatype range pairs. The
data_type_range value for each pair is optional, with a default of all
datatypes. See Layout Layer and Datatype Ranges for information about
the limits of the values.
¤ unbounded_ldt_list. Optional. Lists the layer range and datatype range
pairs of unbounded polygons. The data_type_range value for each pair is
optional, with a default of all datatypes. See Layout Layer and Datatype
Ranges for information about the limits of the values.
- repeatable. Required. Specifies if the cell can be repeated.
default is the maximal number of repetitions limited only by the filling area. The
specified value must be 0 (zero).
- maximum_y. Defines the number of repetitions of a repeatable cell in the
y-direction. This value is used when the repeatable option is true. The
specified value must be 0 (zero). The default is the maximal number of
repetitions limited only by the filling area.
■ base_cell_top. Defines a top base fill cell with incremental unit cells. Use this
option for two-dimensional fills. See the base_cell option for definitions of
- cell
- layers
- repeatable
- maximum
- maximum_y
■ base_cell_bottom. Defines a bottom base fill cell with incremental unit cells. Use
this option for two-dimensional fills. See the base_cell option for definitions of
- cell
- layers
- repeatable
- maximum
- maximum_y
- CHIP_CONTEXT
- PARTITION_CONTEXT
■ insertion. Optional. Specifies insertion specifics for a given pattern. See the
insertion option of the polygon_fill option for definitions of
- iterations
- shift_factor
- symmetry
- auto_rotate
- starting_point
- prune_jogs
- min_space
- min_space_x
- min_space_y
■ pitch. Optional. Refines the user-defined grid for this pattern, specifically for the
lower left of the extents of the fill shape. All other pattern features remain on the
global grid value. The default is the global grid value. See the pitch option of the
polygon_fill option for more information and for definitions of
- x
- y
- context_layer
- width_based_spacing
- min_space
- context
- min_space_x
- min_space_y
- width_based_spacing_x
- width_based_spacing_y
- color_aware_to_fill
- min_space_inside
- min_space_inside_x
- min_space_inside_y
- space_extension
- space_extension_x
- space_extension_y
- debug_layer_name
Note: The color_aware_to_fill option is used only for polygon fills and
adjustable fills.
■ expansion_mode. Optional. Controls the size of the generated fill array by
specifying the method used for fill expansion. The default is
BOUNDARY_EXPANSION.
- BOUNDARY_EXPANSION. Applies fill expansion only to the fill cells located next
to the boundary of the fillable region.
- MAX_EXPANSION. Applies fill expansion to all of the fill cells within fillable
region.
Note:
When MAX_EXPANSION is used, negative space_x and space_y values are not
allowed and the stagger_x and stagger_y options are not applicable.
The values of the repeatable options must be properly defined for each
component cell within the base cell, depending on whether the expandable cell is
one-dimensional or two-dimensional. If the values are not defined, the input
validation reports an error in the runset.
- bottom_to_center
- center_to_right
- center_to_top
- center_to_center_x
- center_to_center_y
The overlap defines the distance between the left or bottom edge of the bounding
box of the right or top component cell and the right or top edge of the bounding
box of the left or bottom component cell.
For one-dimensional expandable fill patterns, only the left_to_center,
center_to_right, and center_to_center_x options are considered during the
fill; that is, if the bottom_to_center, center_to_top, or center_to_center_y
options are specified, they are ignored during the fill.
For two-dimensional expandable fill patterns, all of the overlap options are
considered. The same left_to_center value is applied to appropriate pairs of
components of the base cell:
- Left and center repeatable
- Bottom left and bottom center
- Top left and top center
Similarly, this value is applied to the center_to_right, center_to_center_x,
bottom_to_enter, center_to_top, and center_to_center_y options.
criteria
Optional. Defines fill target criteria for any combination of layers.
Limitation:
The criteria argument, along with the related delta_window, delta_x, delta_y,
gradient_delta_window, gradient_delta_x, gradient_delta_y,
fill_boundary, and window_layer arguments, is used only by the polygon,
adjustable, stack, and cell fills. The expandable cell and stripe fills do not use these
arguments.
For each item in the criteria list, you can use the default density equation or provide your
own function. This list is ignored if the height or width value of the delta_window
option is 0 (zero).
Note:
If the valid delta window is valid, then you must provide:
■ A target range, which is used for the default equation or a user-defined function.
■ At least one output key for a fill layer, which is used for the default equation or the
user-defined function.
■ At least one design layer for the default equation, or a user-defined function and
at least one item in the design layer hash, which is used by the function.
❍ target. Defines the target used for comparing to the values from the default equation
or window function.
■ range. Specifies the range of acceptable values.
❍ gradient. Defines the gradient window criteria. The values for comparison are
obtained from the default equation or window function. To turn off the gradient check
feature, specify a 0 for the width or height of the gradient delta window.
❍ fill_layer_keys. Specifies output layer keys defined in the layer_spec option that
are used by the default equation or the user-defined window function. These keys
specify the fill layers that contributed to the value being returned. If the value is too
high, as compared to the target, one or more of the layers is removed, if possible. If
the value is too low, as compared to the target, one or more of the layers is added, if
possible. When using the window_function option, specify only one
fill_layer_keys value.
❍ design_layers. Optional. Specifies polygon layers that are used by the default
criteria equation. You must specify at least one layer for the default equation. This
option is not used for a user-defined window function.
❍ design_layers_hash. Optional. Specifies the hash of string to polygon layer, which
are design layers defined in the runset. These keys are used by the window function.
❍ window_function. Optional. Specifies the remote function containing the
programmable criteria equations. All the values returned are compared to the target
and gradient criteria. If a window function is not specified, the default equation is
used.
See “Unified Fill Utility Functions” on page 4-301 for more information about the utility
functions you can use to define a function.
delta_window
Optional. Specifies the subwindow stepped across each window layer polygon. The
density equations are evaluated within each subwindow. The default is the extents of
each window layer polygon.
delta_x
Optional. Specifies the delta_window subwindow step distance in the x-direction. The
default is the width option of the delta_window argument.
delta_y
Optional. Specifies the delta_window subwindow step distance in the y-direction. The
default is the width option of the delta_window argument.
gradient_delta_window
Optional. Specifies the subwindow specific to gradient calculations stepped across each
window layer polygon. The criteria equations are evaluated within each subwindow. The
default is one quarter of the delta_window values.
gradient_delta_x
Optional. Specifies the gradient_delta_window subwindow step distance in the
x-direction. This is specific to gradient calculations. The default is the width option of the
delta_window argument.
gradient_delta_y
Optional. Specifies the gradient_delta_window subwindow step distance in the
y-direction. This is specific to gradient calculations. The default is the height option of
the delta_window argument.
fill_boundary
Optional. Specifies the extents of the fill operation, and restricts where the fill is inserted.
❍ type. Specifies the type of extents being used. The default is CHIP.
■ LAYER. Specifies a layer for the extents. All fill fits inside the data of the specified
layer.
■ WINDOW. Specifies a fixed window for the extents.
❍ layer. Specifies the polygon layer when the type option is LAYER.
❍ window. Uses left, bottom, right, and top values, to define the extents when the
type option is WINDOW.
window_layer
Optional. Specifies an optional boundary for density calculations. The default is the chip
extents.
grid
Optional. Specifies a user-defined grid. This grid applies to spacings, such as width,
height, x-direction space, shift and stagger, and y-direction space, shift and stagger,
specified in the fp_generate_fill() utility function. The default is 0.0; that is, the
internal resolution is used.
boundary
Optional. Specifies how to process a delta_window subwindow that overlaps the
boundary of the extents of a window layer polygon. See the examples in the
fill_pattern() function for more information. The default is CLIP.
❍ ALIGN. If a subwindow overlaps the right side or top edge of the window layer, shifts
the window left or down until it no longer overlaps the window layer. The density
calculation is performed after the window is shifted.
❍ IGNORE. If a subwindow overlaps the right or top edges of the window layer boundary,
ignores the subwindow and does not output data for that subwindow location.
❍ REPLICATE_WINDOW. To simulate density measurements on a die, replicates the input
layers to properly measure density at the boundary of the chip. if a window overlaps
the right or top edges of the window layer polygons, then the window layer extent and
its data are duplicated and added to the right or top side of the original bounding box.
The density measurement on the boundary subwindow is calculated considering the
original data and the duplicated data.
extents_output
Optional. Specifies the creation of an extents layer for the fill in the output hash. The
default is that the tool does not create an extents layer.
❍ output_layer_key. Specifies an additional key for the output hash for the extents
output. This string cannot be equal to any of the keys defined in an
output_layer_key option.
❍ border. Specifies the distance to expand the extents in all directions. The default is 0.
❍ fill_layer_keys. Specifies the keys that are included in the extents output. These
keys must have been defined in an output_layer_key option for a fill layer. If the
output_layer_key option of the extents_output option is specified and the
fill_layer_keys list is empty, all output_layer_key keys for fill layers are
included.
debug_oasis_filename
Optional. Defines the name of the output OASIS file with debugging layers generated
based on the fill_to_signal_spacing settings. To output the debugging information
of fill regions, specify a set debug_oasis_filename to a valid OASIS file name. The
default is an empty string ("").
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
See the Unified Fill chapter of the IC Validator User Guide for examples of the
unified_fill() function.
vertex()
The vertex() function creates polygons that represent the specified vertices with the
specified output format.
Note:
For edge layers, a vertex is a point where the start of exactly one edge is coincident with
the end of exactly one edge, and the edges are not collinear.
Syntax
vertex(
layer1 = data_layer,
angles = {doubleconstraint, ...},
shape = TRIANGLE | DIAMOND | SQUARE_INSIDE |
SQUARE_OUTSIDE | SQUARE_CENTERED|
EXTENTS, //optional
shape_size = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
angles
Required. Specifies the angles that determine the vertices to find. Angle measurements
are made on the interior of the polygon or edge. The angles must be greater than 0 and
less than 360. A specification of 180 is ignored. See “Constraints” on page A-4 for more
information.
shape
Optional. Specifies the shape of the polygon generated at each selected vertex. The
default is SQUARE_CENTERED.
❍ TRIANGLE. The vertex is marked with a triangle that fills the inside of convex angles
and the outside of concave angles.
❍ DIAMOND. The vertex is marked with a diamond that is centered on the vertex.
❍ SQUARE_INSIDE. The vertex is marked with a square that is placed inside the
polygon, point touching the vertex.
❍ SQUARE_OUTSIDE. The vertex is marked with a square that is placed outside the
polygon, point touching the vertex.
❍ SQUARE_CENTERED. The vertex is marked with a square that is centered on the vertex.
❍ EXTENTS. The vertex is marked with extents boxes from the TRIANGLE shapes.
shape_size
Optional. Size of the output shape. The value must be positive. When shape is
SQUARE_CENTERED or DIAMOND, the value is rounded to the nearest even multiple of the
internal resolution, with a minimum of twice the internal resolution. The
internal_resolution argument of the resolution_options() function sets the
internal resolution. Otherwise, the value is rounded to the nearest internal resolution unit,
with a minimum of one internal resolution unit. The default is DRC_ERROR_BOX, which has
a default of 0.1.
Note:
When shape = TRIANGLE, the sides of the triangle coincident with the input edges
are not longer than the edges forming the vertex.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
For the following examples, consider this polygon layer:
90 135 layerA
45 45 90
225 270 270
135
90 315 90
In the first check, the vertices meeting the angle requirements are in the created layer,
Result.
Result = vertex(layer1 = layerA, angles = {45, 90, 135},
shape = TRIANGLE, shape_size = 2);
layerA Result
In this second check, different angles are specified; the vertices meeting the angle
requirements are in the created layer, Result.
Result = vertex(layer1 = layerA, angles = {225, 270, 315},
shape = TRIANGLE);
layerA Result
layerA Result
layerA Result
See Also
polygon_centers()
polygon_features()
vertex_edge()
vertex_edge()
The vertex_edge() function selects layer1 edges that form the specified vertices. The
shape_size argument specifies the maximum length of the edge portion selected.
Note:
For edge layers, a vertex is a point where the start of exactly one edge is coincident with
the end of exactly one edge, and the edges are not collinear.
Syntax
vertex_edge(
layer1 = data_layer,
angles = {doubleconstraint, ...},
shape_size = double, //optional
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge or polygon layer.
angles
Required. Specifies the angles that determine the vertices to find. Angle measurements
are made on the interior of the polygon or edge. The angles must be greater than 0 and
less than 360. A specification of 180 is ignored. See “Constraints” on page A-4 for more
information.
shape_size
Optional. Maximum length of the output edges. The value must be positive. It is rounded
to the nearest internal resolution unit, with a minimum of one internal resolution unit. The
internal_resolution argument of the resolution_options() function sets the
internal resolution. The default is DRC_ERROR_BOX, which has a default of 0.1.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
vertex()
Syntax
vertices(
layer1 = polygon_layer,
count = integerconstraint,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_vertices(
layer1 = polygon_layer,
count = integerconstraint,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
count
Required. Specifies the number of vertices. The value is an integer. See “Constraints” on
page A-4 for more information. The minimum value is 3.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
In the following example, all data from layerA that has between six and eight vertices is
selected.
Result = vertices(layerA, count = [6,8]);
Input
layerA
Result
Output
See Also
vertices_edge() and not_vertices_edge()
Syntax
vertices_edge(
layer1 = edge_layer,
count = integerconstraint,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
not_vertices_edge(
layer1 = edge_layer,
count = integerconstraint,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge layer.
count
Required. Specifies the number of vertices. The value is an integer. See “Constraints” on
page A-4 for more information. The default is >0.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
x = vertices_edge(layer1 = gate_edge, count >1);
See Also
vertices() and not_vertices()
violation_empty()
The violation_empty() function, which is a runtime-conditional function, is used within
flow control constructs. The function returns a value of true if the specified violation is empty;
otherwise, the function returns a value of false. Use this function to check whether a
particular function or group of functions produced error output.
Note:
Use of runtime-conditional functions might inhibit distributed scheduling and runset
optimization.
Syntax
violation_empty(
violation1 = violation
);
Returns
Boolean
Arguments
violation1
Required. Specifies the violation that is checked. The violation is usually the left side of
an @= assignment. For more information about violations, see the Violation Block
section in the IC Validator User Guide.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
v1 @= { @ "Rule 1.1"; external1(layer1, distance < 1.00); }
if (! violation_empty(v1)) {
@ "Rule 1.1.2";
note("External violations found on layer1, perform more checks");
internal1(layer1, distance < 0.5);
}
v2 @= {cdb1=text_net(connect_sequence=cdb1,
text_layer_items={{M1,M1_TEXT}});}
v2_shorts = get_text_shorted(v2);
if (! violation_empty(v2_shorts)) {
note("Text shorts found!");
}
See Also
layer_empty()
violations_empty()
violations_empty()
The violations_empty() function, which is a runtime-conditional function, is used to
check multiple violations within flow control constructs. The function returns a value of true
if all of the specified violations are empty; otherwise, the function returns a value of false.
Use this function to check whether a particular function or group of functions produced error
output.
Note:
Use of runtime-conditional functions might inhibit distributed scheduling and runset
optimization.
Syntax
violations_empty(
violations = {violation, ...}
);
Returns
Boolean
Arguments
violations
Required. Specifies the violations that are checked. A violation is usually the left side of
an @= assignment. For more information about violations, see the Violation Block
section in the IC Validator User Guide.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
v1 @= { @ "Rule 1: external check"; external1(l1, <= 0.1, NONE); }
v2 @= { @ "Rule 2: internal check"; internal1(l1, < 0.1, NONE); }
if (! violations_empty({v1, v2})) {
note("The external and/or internal check failed.");
}
See Also
layer_empty()
violation_empty()
wide()
The wide() function creates polygons that consist of the regions of layer1 which are wider
than the specified distance. When data is non rectilinear, the wide regions are ones that
can contain a circle with a diameter of the specified distance.
Syntax
wide(
layer1 = polygon_layer,
distance = doubleconstraint,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
distance
Required. Specifies the minimum distance. It must be a positive value. See “Constraints”
on page A-4 for more information.
Note:
The only constraint operators allowed are > and >=.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
For example,
Result = wide(layerA, distance >= 5)
The results are the wide portions of polygons that contain the 5 m diameter circle.
Figure 3-209 wide() Function Examples
10.0 9.0
5.0
5.0
6.12
8.23
5.0
3.0
7.5 4.0
6.0
5.0 6.0
5.0 6.0
4.0 layerA Result
5.0 11.0
See Also
internal1()
wide_edge()
wide_edge()
The wide_edge() function creates edges that consist of layer1 edges which define regions
which are wider than the specified distance. When data is non rectilinear, the wide regions
are ones that can contain a circle with a diameter of the specified distance.
Syntax
wide_edge(
layer1 = polygon_layer,
distance = doubleconstraint,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the polygon layer.
distance
Required. Specifies the minimum distance. It must be a positive value. See “Constraints”
on page A-4 for more information.
Note:
The only constraint operators allowed are > and >=.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DRC.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
wide_metal_edges = wide_edge(metal, distance > .5)
See Also
internal1_edge() and not_internal1_edge()
wide()
write_annotation_file()
The write_annotation_file() function generates a property annotation file that contains
flattened device instances and their corresponding environment-sensitive property values.
The environment-sensitive properties are specified in the properties argument of device
functions when the write_property_to option is ANNOTATION_FILE,
NETLIST_ANNOTATION_FILE_SPICE, or NETLIST_SKIP_PCELL.
.SUBCKT cell_name
instance_name prop_name=prop_value [prop_name=prop_value ... ]
[instance_name prop_name=prop_value [prop_name=prop_value ... ]]
...
.ENDS
[
.SUBCKT cell_name
instance_name prop_name=prop_value [prop_name=prop_value ... ]
[instance_name prop_name=prop_value [prop_name=prop_value ... ]]
...
.ENDS
]
Each .SUBCKT section represents a cell retained during the dual-hierarchy extraction phase
that generates properties for the annotation file. (This phase is the simulation pass.) Each
line within the .SUBCKT section contains the full instance name followed by a list of property
names with a value for an individual MOSFET instance. The instance names correspond to
MOSFET instances contained in the layout extracted netlist generated by the netlist()
function.
Syntax
write_annotation_file(
device_db = device_database,
output_file = property_annotation_file_handle,
precision = integer //optional
);
Returns
void
Arguments
device_db
Required. Specifies the device database from which the output file is generated. The
extract_devices() function generates this database.
output_file
Required. Specifies the annotation file handle. The handle is defined using the
property_annotation_file() function.
precision
Optional. Specifies the maximum number of significant figures reported in the output file.
The value can be from 1 through 15. The default is 6.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator licenses:
HERCULES_DEVICE and HERCULES_NETLIST.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
See Also
extract_devices()
property_annotation_file()
write_customized_spice()
The write_customized_spice() function invokes the netlist utility, icv_netlist, to generate
a SPICE netlist. The netlist data is created using the device database output from the
extract_devices() function and the polygon layers specified in the connect() function.
Therefore, call the write_spice() function after these functions.
Note:
The icv_netlist utility is in the IC Validator installation directory.
The write_customized_spice() function constructs SPICE instance names as described
in the following Description section.
Syntax
write_customized_spice(
device_db = device_database,
output_file = spice_netlist_file_handle,
model_name_format = NONE | INSTANCE_NAME | SPICE |
COMMENT, //optional
include_empty_cells = NONE | WITH_PORTS | ALL, //optional
precision = integer, //optional
error_report = BRIEF | VERBOSE, //optional
user_functions_file = "string", //optional
include_placement_data = true | false, //optional
flatten = true | false, //optional
compress_netlist = true | false //optional
);
Returns
void
Arguments
device_db
Required. Generates the layout netlist from the specified device database. The
extract_devices() function generates this database.
output_file
Required. Specifies the SPICE handle. The handle is defined using the
spice_netlist_file() function.
model_name_format
Optional. Specifies how to write the model name on the device line in a SPICE netlist.
The default is COMMENT.
❍ NONE. The model name is not written.
❍ INSTANCE_NAME. The model name is appended to the instance name of the device.
❍ SPICE. The model name is written as the fourth field on the device line, just before the
value.
❍ COMMENT. The model name is written in a comment at the end of the device line in the
format: $.model=modelName.
For example,
NONE: C1 node1 node2 value
INSTANCE_NAME: C1_modelName node1 node2 value
SPICE: C1 node1 node2 modelName value
COMMENT: C1 node1 node2 value $.model=modelName
Note:
This argument applies only to capacitor, inductor, and resistor devices.
include_empty_cells
Optional. Specifies which empty cells are written to the cell.net file. Empty cells do not
have devices or instances. A cell is always written out when it is defined as an
equivalence or black-box cell. The default is NONE.
❍ NONE. Does not write empty cells to the cell.net file.
❍ WITH_PORTS. Writes empty cells that have ports to the cell.net file.
precision
Optional. Specifies the maximum number of significant figures reported in the output
SPICE netlist (cell.sp file) for all device properties. The value can be from 1 through 15.
The default is 6. When the precision argument is <=0, the IC Validator tool treats this
value as the default precision.
error_report
Optional. Specifies the verbosity of the error report. The information is written to
output_file.err. If, however, the output_file argument is not set, the default file name
cell.sp.err is used. The default is BRIEF.
❍ BRIEF. Writes only a summary, which contains the total count of layout names that
cannot be cross-referenced.
❍ VERBOSE. Writes details of cross-referencing errors, such as specific layout names
that cannot be cross-referenced.
user_functions_file
Optional. Specifies the file that contains the remote functions. See “Flexible Netlisting
Utility Functions” in Chapter 4 for more information about the utility functions you can use
to define a remote function.
include_placement_data
Optional. When set to true, the generated SPICE netlist includes coordinate information
for device instances, and coordinate and rotation information for cell instances. The cell
instance information is output for both the placement origin and the lower-left bounding
box position. The default is false.
The following device instance example shows where $X and $Y are the coordinates at
the center of body polygon:
MM0 1 4 3 3 p L=2e-06 W=1.2e-05 $X=11500 $Y=26500
The following cell instance example shows the $X and $Y lower-left bounding box
coordinates and the $T origin placement data:
$T=field1 field2 field3 field4 $X= field5 $Y= field6
field1 = x-coordinate of placement origin
field2 = y-coordinate of placement origin
field3 = reflection (0, 1)
field4 = rotation (0 90 180 270)
field5 = x-coordinate of lower-left
field6 = y-coordinate of lower-left
#the bounding-box of cell INV is (top=0.150000 bottom=-0.115000
#left=-0.120000 right=0.180000)
X1 A Z VDD VSS INV $T=0.82 -0.27 1 270 $X=0.67 $Y=-0.45
Instance X1 is a placement of master cell INV with bounding box = (-0.12 -0.115, 0.18,
0.15). It is placed on (0.82, -0.27) with reflection of 1 and rotation of 270 degrees. The
lower-left coordinate of the bounding box of X1 in the parent call is (0.67, -0.45).
compress_netlist
Optional. Compresses the output netlist generated using the write_spice() function.
The output file name is not altered from the user-specified name set in the
spice_netlist_file() function. The default is false.
flatten
Optional. Specifies if the netlist is flattened. The default is false. See the following
Description section for more information.
❍ true. Writes a flattened SPICE netlist.
Note:
When flatten is true, the model_name_format and user_functions_file
arguments of the write_spice() function are ignored.
Description
The IC Validator tool adds instance name prefixes, known as SPICE cards, to cell and
device names. The form of the prefix depends on the value of the flatten argument.
• flatten = true
❍ A hierarchical path name for a device is constructed using instance names originating
in the cell.net layout netlist generated by the netlist() function. A SPICE card
prefix is added to the hierarchical path name. The SPICE card prefix to be added is
defined by the prefix on the original device instance name in the preflattened netlist.
For example, the prefix for an NMOS device is “M_”.
The slash character (/) delineates hierarchical levels inside the flattened hierarchical
instance name.
• flatten = false
❍ All device instance names identically match names originating in the cell.net layout
netlist generated by the netlist() function. No additional SPICE card is added as a
prefix to the device instance name because the netlist() function already adds a
prefix to each device instance name with the appropriate SPICE card.
❍ An “x” prefix is added to cell instance names that originate in the cell.net layout netlist
generated by the netlist() function.
For example, prefixed names for an NMOS device are shown in Table 3-41.
Table 3-40 SPICE Instance Names With Prefixes for an NMOS Device
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Examples
See the Examples section of the write_xref_spice() function for more information.
See Also
netlist()
read_layout_netlist()
schematic()
spice_netlist_file()
write_xref_spice()
write_gds()
The write_gds() function writes layers and violations to a GDSII file. There can be multiple
write_gds() functions within a runset.
Note:
The GDSII format does not support 64-bit coordinates. Therefore, do not use the -64
command-line option with the write_gds() function.
The extract_devices() function modifies the input connect database with hierarchy
preprocessing, such as leveling and merging. In the write function, you can use the same
connect database from which the layout netlist is generated. Then, the net names in the
output layout match the netlist. Use the get_netlist_connect_database() function to
access the connect database.
Note:
Errors consisting of a single point or two points have polygon data generated for output
to the GDSII file. These polygons match what you see in VUE associated with these
errors (an X for a single point or a flyline for multiple points).
See the “Limits on Number of Vertices of a Polygon” section for information about writing out
large polygons.
Syntax
write_gds(
output_library =
gds_library_handle,
resolution =
double, //optional
holding_cell =
"string", //optional
output_cell =
"string", //optional
apply_prefix =
{OUTPUT_CELL, LOWER_CELLS, HOLDING_CELL},
//optional
merge_input_layout = true | false, //optional
point_limit = integer, //optional
cell_prefix = "string", //optional
error_cell_prefix = "string", //optional
virtual_cells = KEEP | EXPLODE, //optional
layers = {{layer = layername,
layer_num = {layer_num = integer, data_type = integer},
cell_prefix = "string",
aref = {{cell = "string",
width = doubleconstraint,
height = doubleconstraint,
minimum_elements = integer,
replace = {{x = double, y = double}, ...}
}, ...
},
cell_suffix = "string",
user_defined_properties =
{double_properties = {{name = "string",
number = integer}, ...},
Returns
void
Arguments
output_library
Required. Specifies the GDSII file handle. The handle is defined using the
gds_library() function.
Note:
Multiple write_gds() functions that have the same file name cause an overwrite of
the GDSII file.
resolution
Optional. Snaps output data to this resolution before it is written to the GDSII file. The
default is the input library resolution.
holding_cell
Optional. Generated top cell that references the output hierarchy from the run. This cell
is a generated holding cell; it does not contain any polygon or text data.
The holding cell contains both the error and layer cells. By default, error data is written to
cells with the ERR_ prefix and layers are written to the layout cell names. The error data
can be placed within the layer hierarchy if you change the ERR_ prefix to an empty
string ("") using the error_cell_prefix argument.
holding cell
ERR_cell_top_name cell_top_name(layers)
You can rename cell_top_name using the output_cell argument. For example, from
the previous example, you could change it to cell_top_new_name:
holding cell
ERR_cell_top_new_name cell_top_new_name(layers)
output_cell
Optional. Specifies the new name for the top cell of the design to be used in the output
library. The name should not conflict with existing cells in the design. The default name
is the original top cell name.
apply_prefix
Optional. Specifies the cells in the output library to which the prefix is applied. By default,
the IC Validator tool applies the prefix to the output cell and lower cells.
❍ OUTPUT_CELL. Specifies the prefix that is applied to the top cell of the design.
❍ LOWER_CELLS. Specifies the prefix that is applied to cells placed underneath the top
cell.
merge_input_layout
Optional. Specifies if the input and generated GDSII files are merged. The default is
false.
❍ true. Merges the input and generated GDSII files to make the final output GDSII file.
The output GDSII file is a copy of the input GDSII file with the output of the specified
layers placed hierarchically at (0,0) under the top of the input cell. Set the
cell_prefix argument to give the output cells a name different from the original
input cells.
❍ false. Outputs only the generated file.
point_limit
Optional. Maximum number of points that a polygon can contain. Any polygon with more
than this amount is split. The value can be 0, which indicates no limit set, or from 6 to
600. If a value from 1 to 5 is specified, the point limit is 6; if a value greater than 600 is
specified, the point limit is 600. The default is 0.
cell_prefix
Optional. Specifies the prefix for all cell names written from the layers argument list.
This value can be overridden by the cell_prefix option inside of the layers argument
list. The default is an empty string (""); that is, no added prefix.
error_cell_prefix
Optional. Specifies the prefix for all cell names written from the errors argument list.
This value can be overridden by the cell_prefix option inside of the errors list. Set
this argument to “” if you do not want a prefix. The default is "ERR_".
virtual_cells
Optional. Specifies the action to take for virtual cells. The default is KEEP.
❍ KEEP. Virtual cells are kept and written to the output library. The output hierarchy
contains references to virtual cells.
❍ EXPLODE. All data and placements from virtual cells are exploded to the first parent
design cell before writing to the output library. The output hierarchy does not contain
references to virtual cells.
layers
Optional. Lists the layers to write to the GDSII file along with mapping and prefix
information.
❍ layer. Specifies the layer. This layer can be an edge, polygon, or text layer.
❍ layer_num. Specifies the layer number, which is composed of a layer number and the
datatype. This value is used when writing to a library. The data_type option has a
default of 0. See Layout Layer and Datatype Ranges for information about the limits
of the values.
❍ cell_prefix. Optional. Specifies the prefix for all cells written from this layer. New
cells are generated for this layer if a unique prefix is specified. The default is the value
of the cell_prefix argument.
❍ aref. Optional. Lists the regular patterns of rectangles to be converted into arrayed
structures. You can specify multiple patterns per layer. This behavior is a cell-level
operation, and it is typically used to reduce the size of the output layout by converting
flat fill to arrayed structures.
The IC Validator tool determines if rectangles that meet the provided dimensions,
specified in the width and height options, are in an arrayed pattern. These
rectangles with an arrayed pattern are replaced with a new cell containing a single
rectangle of the specified width and height dimensions. The origin of the new cell is
the lower-left corner of the rectangle. Any data in the layer that is not arrayed is output
unchanged.
The replace option allows the single rectangle in the new AREF (array reference)
cell to be replaced by specified polygons.
■ cell. Required. Names the new cells created when rectangles are grouped into
arrayed structures. The IC Validator tool adds a suffix if there is any conflict with
existing cells in the hierarchy or other new cells. For example, if the cell name is
icv_aref and there is a conflict, a suffix is added and the new cell is named
icv_aref_1. If there is a conflict with this name, the new cell is named icv_aref_2,
and so on.
■ width. Required. Width of the rectangles. See “Constraints” on page A-4 for more
information.
The IC Validator tool looks for all rectangles with a width equal to the width value
and height equal to the height value, and forms arrayed structures, if possible,
with 0-degree rotation. It also looks for rectangles with a height equal to the width
value and width equal to the height value, and forms arrayed structures, if
possible, with 90-degree rotation. Both the 0-degree and 90-degree array
placements point to the same created cell.
■ height. Required. Height of the rectangles. See “Constraints” on page A-4 for
more information.
■ minimum_elements. Optional. Minimum number of rectangles for an arrayed
structure to be formed. The IC Validator tool creates an SREF (structured
- number. Specifies the property number. The property numbers must be in the
range of 0–255, inclusive.
■ string_properties. Specifies the string value properties that are written to the
specified property numbers.
- name. Specifies the property name.
- number. Specifies the property number. The property numbers must be in the
range of 0–255, inclusive.
See the gds argument of the assign() function for more information.
- AUTO. Compresses the fill. During the fill compression process, new cells are
created; some cells have only one fill rectangle and others have multiple fill
rectangles. The fill is compressed by replacing the fill data of these cells with
single and AREF placements, as appropriate.
■ cell. Required. Names the cell created when fill rectangles are grouped into a
sub cell. The IC Validator tool adds a suffix if there is any conflict with existing cells
in the hierarchy or other new cells. For example, if the cell name is specified as
icv_fill and there is a conflict, a suffix is added and the new cell is named icv_fill_1.
If there is a conflict with this name, the new cell is named icv_fill_2, and so on.
❍ name. Specifies the layer name used by the IC Validator tool for the data counts in the
summary file. The default behavior is to extract a name based on an internal
IC Validator file name used for the layer, which might not match the runset layer
variable name specified in the layer argument.
errors
Optional. Lists the errors written to the GDSII file along with mapping and prefix
information.
❍ error. Specifies the violation name for the error geometry.
❍ layer_num. Specifies the layer number, which is composed of a layer number and the
datatype. This value is used when writing to a library. The data_type option has a
default of 0. See “Layout Layer and Datatype Ranges” on page A-6 for information
about the limits of the values.
❍ cell_prefix. Optional. Specifies the prefix for all cells written from this layer. New
cells are generated for this layer if a unique prefix is specified. The default is the value
of the error_cell_prefix argument.
❍ cell_suffix. Optional. Suffix for all cells written from this layer. New cells are
generated for this layer if a unique suffix is specified. The default is the value of the
error_cell_suffix argument.
❍ classifications. Optional. Lists the error classifications that the IC Validator tool
uses to filter the violations for the specified output layer. For example, this argument
allows you to write waived violations to one layer and unwaived violations to another
layer.
The valid error classifications are Error, Ignore, Waive, Watch, Fixed, and Debug.
By default, no error classification filtering is performed and all errors are written for the
output layer.
Note:
The error_limit_per_check argument of the error_options() function, which
has a default of 100, applies to all error output, including violations written using the
write_gds() function.
properties
Optional. Associates property numbers with specific properties for output. The property
numbers must be in the range of 0–255, inclusive. By default, the IC Validator tool does
not write any properties.
❍ instance_name. Optional. Specifies the property number to which cell instance
names are written. By default, the IC Validator tool does not write instance names.
❍ net_name. Optional. Specifies the property number to which polygon net names are
written. Either a connect database must be specified in the connect_sequence
argument or a device database must be specified in the device_db argument. By
default, the IC Validator tool does not write net names.
❍ internal_net_name. Optional. Specifies the property number to which internal net
names are written. The internal net name is the net prefix plus the base net number.
Either a connect database must be specified in the connect_sequence argument or
a device database must be specified in the device_db argument. By default, the
IC Validator tool does not write the internal net name.
❍ net_type. Optional. Specifies the property number to which polygon net types are
written. If a polygon’s net connects up or down the hierarchy, the property value is
“IO”; otherwise, the property is not set. Either a connect database must be specified
in the connect_sequence argument or a device database must be specified in the
device_db argument. By default, the IC Validator tool does not write the net type.
connect_sequence
Optional. Specifies the connect database used to output net name and type properties
when the properties argument is used. If you specify both the connect_sequence and
the device_db arguments, the connectivity in the device database is used.
magnification_factor
Optional. The output coordinates are multiplied by this factor before writing to the output
library. A magnification factor between 0.0 and less than 1.0 shrinks data. A
magnification factor greater than 1.0 enlarges data. The default is 1.0 (no magnification).
cell_suffix
Optional. Suffix for all cell names written from the layers argument list. This value can
be overridden by the cell_suffix option inside of the layers argument list. The default
is an empty string ("").
error_cell_suffix
Optional. Suffix for all cell names written from the errors argument list. This value can
be overridden by the cell_suffix option inside of the errors argument list. Set this
value to an empty string ("") if you do not want a suffix. The default is "ERR_".
apply_suffix
Optional. Specifies the cells in the output library to which the suffix is applied. By default,
the IC Validator tool applies the suffix to the output cell and lower cells.
❍ OUTPUT_CELL. Suffix is applied to the top cell of the design.
device_db
Optional. Specifies a device database used to output device name properties when the
properties argument is used. If you are writing the device name, device instance
name, or device terminal instance name, you must specify a device database. The
extract_devices() function generates a device database. If you specify both the
connect_sequence and the device_db arguments, the connectivity in the device
database is used.
place_cells
Optional. Places complex fill cells programmatically, instead of layer-by-layer fill, into the
output layout based on a marker layer containing rectangles. A layer consisting of
rectangles is converted into placements of predefined fill cells containing arbitrary
polygons on multiple layers during data output.
The imported cell can be renamed to prevent cell name conflicts. The origin of the
placement is the lower-left corner of the rectangle.
❍ cell. Specifies the handle to the cell that is imported. The handle is created by the
import_gds_cell() or import_oasis_cell() function.
❍ marker_layer. Specifies the layer that has the rectangles which define the fill
placement.
❍ compress. Specifies if cell placements should be compressed. The default is NONE.
❍ abort. Lists the error severity for rectangles of different sizes and nonrectangular
shapes on the marker layer. The default is {DIFFERENT_SIZE_RECTANGLES,
NON_RECTANGULAR_SHAPES}.
A mwlayer[:mwdtype] gdsiilayer[:gdsiidtype]
■ Mapping for polygons:
D mwlayer[:mwdtype] gdsiilayer[:gdsiidtype]
■ Mapping for text:
T mwlayer[:mwdtype] gdsiilayer[:gdsiidtype]
■ Color mapping from gdsiidtype to SAME_COLOR:
M * *:gdsiidtype
■ Color mapping from gdsiidtype to MASK_ONE_HARD:
M1 * *:gdsiidtype
■ Color mapping from gdsiidtype to MASK_TWO_HARD:
M2 * *:gdsiidtype
The format of the Milkyway stream-in file is
■ DestLayer[:DestDatatype] SrcLayer[:SrcDatatype]
Note:
Comments are specified with a semicolon. All of the text following the semicolon
on the current line is part of the comment.
❍ reflection. Optional. Specifies if the pattern is reflected. See Figure 3-210 for an
example of reflection and rotation.
Note:
Reflection is performed before rotation. Rotation is performed before shifting.
The default is false.
■ true. Reflects the pattern.
■ ROTATE_90.
■ ROTATE_180.
■ ROTATE_270.
❍ shift. Optional. Specifies the shift of the pattern origin from the lower-left corner of
the marker layer rectangle. The default is {0.0, 0.0}; that is, the pattern is not
shifted.
Note:
Reflection is performed before rotation. Rotation is performed before shifting.
Rotation does not affect the placement of the origin; it is always the lower-left
corner of the marker layer rectangle.
output_generated_instance_names
Optional. Specifies if instance names internally generated by the IC Validator tool are
written to the GDSII file in addition to instance names from the input layout. Instance
names are written out only if the instance_name option of the property argument is
defined. The default is true.
❍ true. Writes internally generated instance names to the GDSII file.
❍ false. Does not write internally generated instance names to the GDSII file.
exclude_from_generated_cell_names
Required. Specifies the list of strings that cannot be included in cell names generated
during multilayer fill compression. This does not apply to cell names generated by single
layer fill compression. Multilayer fill compression still calls single layer fill compression on
the remaining uncompressed data.
hierarchy_output
Optional. Specifies the type of cell to be exploded.
❍ ORIGINAL. Maintains the original hierarchy. This option explodes automatically the
vcells and any cells whose flat reference count is different than the original hierarchy.
❍ INTERNAL. Specifies the hierarchy used in the IC Validator tool. This is the current
behavior.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
A B C D
E F G H
Note:
You can use the shift option to move reflected and rotated cells so that they realign with
the marker boundaries.
Magnification Factor
Figure 3-211 illustrates the use of the magnification_factor argument for shrinking and
enlarging data. The example code is
a=gds_library("m1_shrink.gds");
write_gds(a,
layers = {{M1, {8,0}}},
magnification_factor=0.5
);
b=gds_library("m1_enlarge.gds");
write_gds(b,
layers = {{M1, {8,0}}},
magnification_factor=1.5
);
Violation Output
Figure 3-212 illustrates how the errors argument outputs violation data to the GDSII file for
a single point or for a group of points connected by a flyline.
• For functions that generate violation data in terms of single points, the errors argument
generates an X that matches what you see in VUE. For example, the green lines are an
example for the net_select() function.
• For functions that generate a violation as a group of points connected by flylines, the
errors argument also generates the flyline in the GDSII file that matches what you see
in VUE. For example, the blue lines are an example for the text_net() function.
tcdb : connect_database;
text_viol @= {
tcdb = text_net(cdb, {
{POLY, POLY_TEXT}
});
}
a=gds_library("out.gds");
write_gds(a,
layers = {
{CONT, {5,0}},
{POLY, {6,0}},
{M1, {8,0}},
{POLY_TEXT, {25,0}}
},
errors = {
{text_viol, {1,0}},
{net_select_viol, {2,0}}
},
error_cell_prefix = ""
);
A A
M1
POLY
B B
CONT
text_viol
net_select_viol
write_gds(
output_library = g,
connect_sequence = cdb1,
properties = {
net_name = 1,
instance_name = 2
},
layers = {
{m1, {1}},
{m2, {2}}
}
);
See Also
error_options()
gds_library()
gds_options()
get_netlist_connect_database()
resolution_options()
write_group()
The write_group() function writes the specified layers into the specified output library.
Note:
There can be multiple write_group() functions within a runset. When multiple functions
have the same output library, the run stops and an error is reported.
Syntax
write_group(
output_library = group_library_handle,
layers = {{layer = layername, label = "string"},
...} //optional
);
Returns
void
Arguments
output_library
Required. Specifies a group library handle. The handle is defined using the
group_library() function.
layers
Optional. Lists the layers to write to the group library.
❍ layer. Specifies the layer. This layer can be an edge, polygon, or text layer.
❍ label. Specifies the string used to reference the saved layer by the read_group(),
read_group_edge(), and read_group_text() functions.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Example
See the read_group() function for an example of the write_group() function.
See Also
group_library()
read_group()
read_group_edge()
read_group_text()
write_milkyway()
The write_milkyway() function writes layers and violations to a Milkyway library. There
can be multiple write_milkyway() functions within a runset.
Note:
The Milkyway format does not support 64-bit coordinates. Therefore, do not use the -64
command-line option with the write_milkyway() function.
Errors consisting of a single point or two points have polygon data generated for output to
the Milkyway library. These polygons match what you see in VUE associated with these
errors (an X for a single point or a flyline for multiple points).
Note:
See the “Runtimes and Memory Use Report” section in the Licensing and Resource
Requirements chapter of the IC Validator User Guide for information about the reported
Milkyway memory usage.
See the “Limits on Number of Vertices of a Polygon” section for information about writing
out large polygons.
Syntax
write_milkyway(
output_library = milkyway_library_handle,
holding_cell = "string", //optional
output_cell = "string", //optional
apply_prefix = {OUTPUT_CELL, LOWER_CELLS, HOLDING_CELL}, //optional
view = "string", //optional
mode = APPEND | APPEND_NEW_VERSION | OVERWRITE, //optional
technology_file = "string", //optional
net_id = true | false, //optional
connect_sequence = connect_database, //optional
cell_prefix = "string", //optional
error_cell_prefix = "string", //optional
virtual_cells = KEEP | EXPLODE, //optional
boundary_layer = polygon_layer, //optional
layers = {{layer = layername,
layer_num = {layer_num = integer, data_type = integer},
cell_prefix = "string",
route_type = route_type,
aref = {{cell = "string",
width = doubleconstraint,
height = doubleconstraint,
minimum_elements = integer,
replace = {{x = double, y = double}, ...}},
...},
convert_to = NONE | WIRE | RECT,
cell_suffix = "string",
attach_properties = {{assign_layer = data_layer,
properties = {OWNER_NET, ROUTE_TYPE}
}, ...},
boolean_attributes = {{name = "string",
value = true | false}, ...},
double_attributes = {{name = "string",
value = double}, ...},
float_attributes = {{name = "string",
value = double}, ...},
integer_attributes = {{name = "string",
value = integer}, ...},
string_attributes = {{name = "string",
value = "string"}, ...},
color = color,
compress_fill = {mode = NONE | AUTO,
cell = "string"},
error_layer_format = DATA | ERRORS},
...}, //optional
errors = {{error = violation,
layer_num = {layer_num = integer, data_type = integer},
cell_prefix = "string",
route_type = route_type,
cell_suffix = "string",
classifications = {"string", ...}},
...}, //optional
output_hierarchy = true | false, //optional
update_technology_file = true | false, //optional
magnification_factor = double, //optional
instance_name = {write = true | false,
conflict = ABORT | SKIP | RENAME}, //optional
cell_suffix = "string", //optional
error_cell_suffix = "string", //optional
apply_suffix = {OUTPUT_CELL, LOWER_CELLS, HOLDING_CELL},
//optional
place_cells = {{cell = cell_handle,
marker_layer = polygon_layer,
compress = NONE | AUTO,
abort = {DIFFERENT_SIZE_RECTANGLES,
NON_RECTANGULAR_SHAPES},
layer_map_file = "string",
reflection = true | false,
rotation = ROTATE_0 | ROTATE_90 |
ROTATE_180 | ROTATE_270,
shift = {x = double, y = double}},
...}, //optional
layer_mode = AUTO | NORMAL | EXTENDED, //optional
datatype_mode = AUTO | NORMAL | EXTENDED, //optional
exclude_from_generated_cell_names = {"string", ...}, //optional
hierarchy_output = ORIGINAL | INTERNAL //optional
);
Returns
void
Arguments
output_library
Required. Specifies the Milkyway library handle. The handle is defined using the
milkyway_library() function.
holding_cell
Optional. Specifies the generated top cell that references the output hierarchy from the
run. This cell is a generated holding cell; it does not contain any polygon or text data.
The holding cell contains both the error and layer cells. By default, error data is written to
cells with the ERR_ prefix and layers are written to the layout cell names. The error data
can be placed within the layer hierarchy if you change the ERR_ prefix to an empty string
("") using the error_cell_prefix argument. See the holding_cell argument of the
write_milkyway() function for more information.
output_cell
Optional. Specifies a new name for the top cell of the design to be used in the output
library. The name should not conflict with existing cells in the design. The default name
is the original top cell name.
apply_prefix
Optional. Specifies the cells in the output library to which the prefix is applied. By default,
the IC Validator tool applies the prefix to the output cell and lower cells.
❍ OUTPUT_CELL. Specifies the prefix that is applied to the top cell of the design.
❍ LOWER_CELLS. Specifies the prefix that is applied to cells placed underneath the top
cell.
❍ HOLDING_CELL. Specifies the prefix that is applied to the holding cell.
view
Optional. Names the view created to store graphical output. The default is "HOUT".
mode
Optional. Specifies the action for when the library already exists. The default is
OVERWRITE.
❍ APPEND. When you write data into a cell that already exists in the target Milkyway
library, the cell has both the old and new data.
❍ APPEND_NEW_VERSION. When you write data into a cell that already exists in the target
Milkyway library, the cell has both the old and new data. In addition, due to the
Milkyway version system, a previous version of the same cell is also stored in the
library.
technology_file
Optional. Specifies the technology file used if a new Milkyway library is being created. If
appending to an existing Milkyway library, its technology information is used. If this
argument is not specified and the input library was Milkyway, the technology information
from the input library is used; otherwise a default technology file is created. Output layers
that do not exist in the technology information of the target library are appended. If you
do not want to update the Milkyway technology file, set the update_technology_file
argument to false.
net_id
Optional. Specifies if the net ID is generated for rectangle and polygon data. The connect
database that generated the nets must be specified in the connect_sequence argument.
The default is false.
connect_sequence
Optional. Specifies the connect database that contains net information used for
outputting net IDs when the net_id argument is true.
cell_prefix
Optional. Specifies the prefix for all cell names written from the layers argument list.
This value can be overridden by the cell_prefix option inside of the layers argument
list. The default is an empty string (""); that is, no added prefix.
error_cell_prefix
Optional. Specifies the prefix for all cell names written from the errors argument list.
This value can be overridden by the cell_prefix option inside of the errors argument
list. Set this value to an empty string ("") if you do not want a prefix. The default is
"ERR_".
virtual_cells
Optional. Specifies the action to take for virtual cells. The default is KEEP.
❍ KEEP. Virtual cells are kept and written to the output library. The output hierarchy
contains references to virtual cells.
❍ EXPLODE. All data and placements from virtual cells are exploded to the first parent
design cell before writing to the output library. The output hierarchy does not contain
references to virtual cells.
boundary_layer
Optional. Specifies the boundary layer. When the boundary layer is specified, the
write_milkyway() function uses polygons from the boundary layer as cell boundaries
in the output layout. If there is no polygon in a given cell in the boundary layer, the default
behavior applies. The default behavior is that the write_milkyway() function uses a
rectangle representing the extents of the cell's data and all of its children as the
boundary. If a cell and all of its children contain no data other than the boundary layer
polygon, that cell is omitted from the output layout.
layers
Optional. Lists the layers to write to the Milkyway library along with mapping, prefix, and
attribute information.
❍ layer. Specifies the layer name. This layer can be an edge, polygon, or text layer.
❍ layer_num. Specifies the layer number, which is composed of a layer number and the
datatype. This value is used when writing to a library. The data_type option has a
default of 0. See “Layout Layer and Datatype Ranges” on page A-6 for information
about the limits of the values.
❍ cell_prefix. Optional. Specifies the prefix for all cells written from this layer. New
cells are generated for this layer if a unique prefix is specified. The default is the value
of the cell_prefix argument.
❍ route_type. Optional. Specifies the route type to set when writing rectangles from
this layer. By default, the IC Validator tool uses the FILL_TRACK route type when
writing rectangles to the FILL view and does not set the route type for other views.
See Table 3-18 for a list of route types.
❍ aref. Optional. Lists the regular patterns of rectangles to be converted into arrayed
structures. You can specify multiple patterns per layer. This behavior is a cell-level
operation. This feature is typically used to reduce the size of the output layout by
converting flat fill to arrayed structures.
The IC Validator tool determines if rectangles that meet the provided dimensions,
specified in the width and height options, are in an arrayed pattern. These
rectangles with an arrayed pattern are replaced with a new cell containing a single
rectangle of the specified width and height dimensions. The origin of the new cell is
the lower-left corner of the rectangle. Any data in the layer that is not arrayed is output
unchanged.
The replace option allows the single rectangle in the new AREF (array reference)
cell to be replaced by specified polygons.
■ cell. Required. Names new cells created when rectangles are grouped into
arrayed structures. The IC Validator tool adds a suffix if there is any conflict with
existing cells in the hierarchy or other new cells. For example, if the cell name is
icv_aref and there is a conflict, a suffix is added and the new cell is named
icv_aref_1. There is a conflict with this name, the new cell is named icv_aref_2,
and so on.
■ width. Required. Width of the rectangles. See “Constraints” on page A-4 for more
information.
The IC Validator tool looks for all rectangles with a width equal to the width value
and height equal to the height value, and forms arrayed structures, if possible,
with 0-degree rotation. It also looks for rectangles with a height equal to the width
value and width equal to the height value, and forms arrayed structures, if
possible, with 90-degree rotation. Both the 0-degree and 90-degree array
placements point to the same created cell.
■ height. Required. Height of the rectangles. See “Constraints” on page A-4 for
more information.
■ minimum_elements. Optional. Minimum number of rectangles for an arrayed
structure to be formed. The IC Validator tool creates an SREF (structured
reference) instead of an array placement when there is an arrayed structure of
only one rectangle. The default is 16.
■ replace. Optional. Lists the polygons that replace the rectangle in the new cells.
This behavior allows a rectangle marker layer to be used to create arrayed
structures of more complex shapes in the output layout.
Note:
Setting minimum_elements option to 1 ensures all rectangles of the specified
width and height dimensions are replaced by a placement to a cell with the
polygons provided.
The list contains xy coordinate pairs for each created polygon. The coordinates
can be either
- Two coordinates, which are interpreted as the opposing corners of a
rectangle.
- Three or more coordinates, which define the outer boundary of a closed
polygon. You do not need to repeat the first coordinate at the end of the list.
The coordinates can be ordered in either direction around the polygon.
Note:
Polygons, or portions of polygons with no area, are ignored. Areas of
self-intersection are left empty.
❍ convert_to. Optional. Indicates if data should be written as a wire or as a rectangle
rather than a polygon. The default is NONE.
Note:
The WIRE option can be used only when writing to the CEL view. If you are
appending to an existing cell by setting the mode argument to APPEND, the cell
must be Milkyway schema version 5.0 or greater.
determine which route type the output shape takes, and a warning is reported.
See the milkyway argument of the assign() function for more information.
Note:
Only certain types of objects can be given a route type in Milkyway libraries:
rectangles, wires, paths, contacts, and contact arrays. To break down
polygons into constituent rectangles so that they can be given a route type, set
the convert_to option to RECT.
In the following example, layer m1_ext is written to Milkyway layer 31, with
OWNER_NET and ROUTE_TYPE properties attached based on the properties of the m1
shapes with which m1_ext interacts.
m = milkyway_library("OUT");
write_milkyway(
output_library = m,
output_cell = "c",
view = "CEL",
layers = {
{m1_ext,
{31},
attach_properties = {{m1, {OWNER_NET, ROUTE_TYPE}}}
}
}
);
❍ double_attributes. Optional. Creates double attributes for the specified layer. All
shapes on the layer have the same double attribute name and value.
Note:
An error occurs if an attribute of the same name is redefined as a different type.
This behavior includes appending to an existing Milkyway library where the
attribute is already defined.
■ name. Specifies the attribute name.
❍ float_attributes. Optional. Creates float attributes for the specified layer. All
shapes on the layer have the same float attribute name and value.
Note:
An error occurs if an attribute of the same name is redefined as a different type.
This behavior includes appending to an existing Milkyway library where the
attribute is already defined.
■ name. Specifies the attribute name.
❍ integer_attributes. Optional. Creates integer attributes for the specified layer. All
shapes on the layer have the same integer attribute name and value.
Note:
An error occurs if an attribute of the same name is redefined as a different type.
This behavior includes appending to an existing Milkyway library where the
attribute is already defined.
■ name. Specifies the attribute name.
❍ string_attributes. Optional. Creates string attributes for the specified layer. All
shapes on the layer have the same string attribute name and value.
Note:
An error occurs if an attribute of the same name is redefined as a different type.
This behavior includes appending to an existing Milkyway library where the
attribute is already defined.
■ name. Specifies the attribute name.
❍ color. Optional. Applies the specified Milkyway library color attribute to the output
layer. Table 2-2 lists the attributes. By default, the IC Validator tool reads data of all
color attribute values
Note:
This feature is used in runsets that support double patterning technology (DPT).
See the two_color() function for more information. Use the colors option of the
milkyway argument of the assign() function to select the color attributes.
- AUTO. Compresses the fill. During the fill compression process, new cells are
created; some cells have only one fill rectangle and others have multiple fill
rectangles. The fill is compressed by replacing the fill data of these cells with
single and AREF placements, as appropriate.
■ cell. Required. Names the cell created when fill rectangles are grouped into a
sub cell. The IC Validator tool adds a suffix if there is any conflict with existing cells
in the hierarchy or other new cells. For example, if the cell name is specified as
icv_fill and there is a conflict, a suffix is added and the new cell is named icv_fill_1.
If there is a conflict with this name, the new cell is named icv_fill_2, and so on.
❍ error_layer_format. Optional. Specifies how layers of type error_layer are written.
The default is DATA.
■ DATA. Specifies that errors are written as either zero-width paths or boundaries
depending on the type of error. The shapes that are written can be viewed in a
layout editor.
■ ERROR. Specifies a setting for an internal IC Validator flow and should not be used
by the customer.
errors
Optional. Lists the errors written to the Milkyway library along with mapping and prefix
information.
❍ error. Specifies the violation name for the error geometry.
❍ layer_num. Specifies the layer number, which is composed of a layer number and the
datatype. This value is used when writing to a library. The data_type option has a
default of 0. See Layout Layer and Datatype Ranges for information about the limits
of the values.
❍ cell_prefix. Optional. Specifies the prefix for all cells written from this layer. New
cells are generated for this layer if a unique prefix is specified. The default is the value
of the error_cell_prefix argument.
❍ route_type. Optional. Specifies the route type to set when writing rectangles from
this layer. By default, the IC Validator tool uses the FILL_TRACK route type when
writing rectangles to the FILL view and does not set the route type for other views.
See Table 3-18 for a list of route types.
❍ cell_suffix. Optional. Suffix for all cells written from this layer. New cells are
generated for this layer if a unique suffix is specified. The default is the value of the
error_cell_suffix argument.
❍ classifications. Optional. Lists the error classifications that the IC Validator tool
uses to filter the violations for the specified output layer. For example, this argument
allows you to write waived violations to one layer and unwaived violations to another
layer.
The valid error classifications are Error, Ignore, Waive, Watch, Fixed, and Debug.
By default, no error classification filtering is performed and all errors are written for the
output layer.
output_hierarchy
Optional. Controls the writing of cell references into the Milkyway library. This argument
is typically set to false when the virtual_cells argument is EXPLODE and the mode
argument is APPEND so that polygon data can be appended to existing cells without
affecting the hierarchy. The default is true.
update_technology_file
Optional. When set to false, output layers are not appended to the technology data in
the output database. The default is true.
magnification_factor
Optional. The output coordinates are multiplied by this factor before writing to the output
library. A magnification factor between 0.0 and less than 1.0 shrinks data. A
magnification factor greater than 1.0 enlarges data. The default is 1.0 (no magnification).
instance_name
Optional. Specifies whether instance names are written.
❍ write. Optional. Specifies whether to write instance names. The default is true.
❍ conflict. Optional. Specifies what happens when a newly written instance name is in
conflict with an existing instance name. This situation is relevant only when you set
the mode argument to APPEND. The default is SKIP.
■ ABORT. Abort the run.
■ RENAME. Rename the new cell reference with a unique instance name.
cell_suffix
Optional. Suffix for all cell names written from the layers argument list. This value can
be overridden by the cell_suffix option inside of the layers argument list. The default
is an empty string ("").
error_cell_suffix
Optional. Suffix for all cell names written from the errors argument list. This value can
be overridden by the cell_suffix option inside of the errors argument list. Set this
value to an empty string ("") if you do not want a suffix. The default is "ERR_".
apply_suffix
Optional. Specifies the cells in the output library to which the suffix is applied. By default,
the IC Validator tool applies the suffix to the output cell and lower cells.
❍ OUTPUT_CELL. Suffix is applied to the top cell of the design.
place_cells
Optional. Places complex fill cells programmatically, instead of layer-by-layer fill, into the
output layout based on a marker layer containing rectangles. A layer consisting of
rectangles is converted into placements of predefined fill cells containing arbitrary
polygons on multiple layers during data output.
The imported cell can be renamed to prevent cell name conflicts. The origin of the
placement is the lower-left corner of the rectangle.
❍ cell. Specifies the handle to the cell that is imported. The handle is created by the
import_gds_cell() or import_oasis_cell() function.
❍ marker_layer. Specifies the layer that has the rectangles which define the fill
placement.
❍ compress. Specifies if cell placements should be compressed. The default is NONE.
❍ abort. Lists the error severity for rectangles of different sizes and nonrectangular
shapes on the marker layer. The default is {DIFFERENT_SIZE_RECTANGLES,
NON_RECTANGULAR_SHAPES}.
Milkyway and only apply when the output format is Milkyway. The other mappings can
be used for all output formats.
Note:
The unified Milkyway layer mapping file has backward compatible support for the
older Milkyway stream in layer mapping file syntax.
See the place_cells argument of the write_gds() function for information about
the format of the Milkyway unified file.
❍ reflection. Optional. Specifies if the pattern is reflected. See Figure 3-210 for an
example of reflection and rotation.
Note:
Reflection is performed before rotation. Rotation is performed before shifting.
The default is false.
■ true. Reflects the pattern.
■ ROTATE_90.
■ ROTATE_180.
■ ROTATE_270.
❍ shift. Optional. Specifies the shift of the pattern origin from the lower-left corner of
the marker layer rectangle. The default is {0.0, 0.0}; that is, the pattern is not
shifted.
Note:
Reflection is performed before rotation. Rotation is performed before shifting.
Rotation does not affect the placement of the origin; it is always the lower-left
corner of the marker layer rectangle.
layer_mode
Optional. Specifies the Milkyway extended layer mode. The default is AUTO.
■ If the output library exists, the output Milkyway library is in the layer mode of the
output library. If a layer number used by the write_milkyway() function is out of
range for the output library, the IC Validator tool issues an error.
■ If the output library does not exist, the tool creates it in extended layer mode if the
input Milkyway library is in extended layer mode. Otherwise, the tool creates it in
normal layer mode. Layer range checking corresponds to the mode of the created
library.
❍ NORMAL. Specifies that the output Milkyway library is in normal layer mode. If the
output library exists in extended layer mode, the IC Validator tool issues an error.
Note:
Normal mode supports numbers up to 255.
Extended mode supports layer or datatype numbers up to 4095.
❍ EXTENDED. Specifies that the output Milkyway library is in extended layer mode. If the
output library exists in normal layer mode, the IC Validator tool issues an error.
datatype_mode
Optional. Specifies the Milkyway extended layer mode. The default is AUTO.
The IC Validator tool allows you to write a Milkyway library in extended datatype mode if
one of the following is true:
❍ The input library is in extended datatype mode.
❍ The destination library exists and is in extended datatype mode.
❍ The datatype_mode argument of the write_milkyway() function is EXTENDED.
Note:
Normal mode supports layer or datatype numbers up to 255.
Extended mode supports layer or datatype numbers up to 4095.
❍ AUTO. Specifies that
■ If the output library exists, the output Milkyway library is in the datatype mode of
the existing library. If a datatype number used by the write_milkyway() function
is out of range for the output library, the IC Validator tool issues an error.
■ If the output library does not exist, the tool creates it in extended datatype mode if
the input Milkyway library is in extended datatype mode. Otherwise, the tool
creates it in normal datatype mode. Datatype range checking corresponds to the
mode of the created library.
❍ NORMAL. Specifies that the output Milkyway library is in normal datatype mode. If the
output library exists in extended datatype mode, the IC Validator tool issues an error.
❍ EXTENDED. Specifies that the output Milkyway library is in extended datatype mode. If
the output library exists in normal datatype mode, the IC Validator tool issues an
error.
exclude_from_generated_cell_names
Required. Specifies the list of strings that cannot be included in cell names generated
during multilayer fill compression. This does not apply to cell names generated by single
layer fill compression. Multilayer fill compression still calls single layer fill compression on
the remaining uncompressed data.
hierarchy_output
Optional. Specifies the type of cell to be exploded.
❍ ORIGINAL. Maintains the original hierarchy. This option explodes automatically the
vcells and any cells whose flat reference count is different than the original hierarchy.
❍ INTERNAL. Specifies the hierarchy used in the IC Validator tool. This is the current
behavior.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
See the write_gds() function for examples of the errors and magnification_factor
arguments, and for an example that uses the connect_database argument to write
instance name and net name properties.
See Also
error_options()
get_netlist_connect_database()
milkyway_library()
milkyway_options()
resolution_options()
write_ndm()
The write_ndm() function writes layers and violations to an NDM library. There can be
multiple write_ndm() functions within a runset.
Errors consisting of a single point or two points have polygon data generated for output to
the NDM library. These polygons match what you see in VUE associated with these errors
(an X for a single point or a flyline for multiple points).
See the “Limits on Number of Vertices of a Polygon” section for information about writing out
large polygons.
Syntax
write_ndm(
output_library = ndm_library_handle,
view = DESIGN_VIEW | FRAME_VIEW | LAYOUT_VIEW,
internal_design = {use = NONE | FILL_USE | FILL_BLOCKAGE_USE,
parent_cell = "string"},
holding_cell = "string", //optional
output_cell = "string", //optional
apply_prefix = {OUTPUT_CELL, LOWER_CELLS, HOLDING_CELL}, //optional
mode = APPEND | OVERWRITE, //optional
net_id = true | false, //optional
connect_sequence = connect_database, //optional
cell_prefix = "string", //optional
error_cell_prefix = "string", //optional
virtual_cells = KEEP | EXPLODE, //optional
layers = {{layer = layername,
layer_num = {layer_num = integer, data_type = integer},
cell_prefix = "string",
shape_use = ndm_shape_use,
cell_suffix = "string",
compress_fill = {mode = NONE | AUTO, cell = "string"},
mask = ndm_mask,
error_layer_format = {DATA | ERRORS},
attach_properties = {{assign_layer = data_layer,
properties =
{OWNER_NET, SHAPE_USE}}, ...}
}, ...}, //optional
errors = {{error = violation,
layer_num = {layer_num = integer, data_type = integer},
cell_prefix = "string",
shape_use = ndm_shape_use,
cell_suffix = "string",
mask = ndm_mask,
classifications = {"string", ...}},
...}, //optional
output_hierarchy = true | false, //optional
magnification_factor = double, //optional
instance_name = {write = true | false,
Returns
void
Arguments
output_library
Required. Specifies the NDM library handle. The handle is defined using the
ndm_library() function.
view
Required. Writes output to the specified view.
❍ DESIGN_VIEW
❍ FRAME_VIEW
❍ LAYOUT_VIEW
internal_design
Optional. Specifies that data is written to internal designs underneath a top-level design
cell. The default is to not write output as internal designs. It is only used for fill.
❍ use. Optional. Specifies the internal design to be written. The default is NONE.
■ NONE. Specifies not writing output as internal designs; write output to design cells.
■ FILL_USE. Specifies writing internal designs that are for fill. The internal designs
have the extension .FILL.
■ FILL_BLOCKAGE_USE. Specifies writing internal designs that are for fill blockage or
guidance. The internal designs have the extension .FILLBLKG.
❍ parent_cell. Optional. Specifies the name of the parent design cell in which the
internal designs are created. The default is the top cell name of the input library.
The hierarchy that is specified in the other write_ndm() arguments, such as
output_cell and holding_cell, is written as internal designs placed underneath
this design cell.
holding_cell
Optional. Specifies the generated top cell that references the output hierarchy from the
run. This cell is a generated holding cell; it does not contain any polygon or text data.
The holding cell contains both the error and layer cells. By default, error data is written to
cells with the ERR_ prefix and layers are written to the layout cell names. The error data
can be placed within the layer hierarchy if you change the ERR_ prefix to an empty string
("") using the error_cell_prefix argument. See the holding_cell argument of the
write_milkyway() function for more information.
output_cell
Optional. Specifies a new name for the top cell of the design to be used in the output
library. The name should not conflict with existing cells in the design. The default name
is the original top cell name.
apply_prefix
Optional. Specifies the cells in the output library to which the prefix is applied. By default,
the IC Validator tool applies the prefix to the output cell and lower cells.
❍ OUTPUT_CELL. Specifies the prefix that is applied to the top cell of the design.
❍ LOWER_CELLS. Specifies the prefix that is applied to cells placed underneath the top
cell.
❍ HOLDING_CELL. Specifies the prefix that is applied to the holding cell.
mode
Optional. Specifies the action for when the library already exists. The default is
OVERWRITE.
❍ APPEND. When you write data into a cell that already exists in the target NDM library,
the cell has both the old and new data.
❍ OVERWRITE. Specifies that any previously existing cells are overwritten.
net_id
Optional. Specifies if the net ID is generated for rectangle and polygon data. The connect
database that generated the nets must be specified in the connect_sequence argument.
The default is false.
connect_sequence
Optional. Specifies the connect database that contains net information used for
outputting net IDs when the net_id argument is true.
cell_prefix
Optional. Specifies the prefix for all cell names written from the layers argument list.
This value can be overridden by the cell_prefix option inside of the layers argument
list. The default is an empty string (""); that is, no added prefix.
error_cell_prefix
Optional. Specifies the prefix for all cell names written from the errors argument list.
This value can be overridden by the cell_prefix option inside of the errors argument
list. Set this value to an empty string ("") if you do not want a prefix. The default is
"ERR_".
virtual_cells
Optional. Specifies the action to take for virtual cells. The default is KEEP.
❍ KEEP. Virtual cells are kept and written to the output library. The output hierarchy
contains references to virtual cells.
❍ EXPLODE. All data and placements from virtual cells are exploded to the first parent
design cell before writing to the output library. The output hierarchy does not contain
references to virtual cells.
layers
Optional. Lists the layers to write to the NDM library along with mapping, prefix, and
attribute information.
❍ layer. Specifies the layer name. This layer can be an edge, polygon, or text layer.
❍ layer_num. Specifies the layer number, which is composed of a layer number and the
datatype. This value is used when writing to a library. The data_type value, which is
the layer purpose, for each pair is optional, with a default of 0. See Layout Layer and
Datatype Ranges for information about the limits of the values.
❍ cell_prefix. Optional. Specifies the prefix for all cells written from this layer. New
cells are generated for this layer if a unique prefix is specified. The default is the value
of the cell_prefix argument.
❍ shape_use. Optional. Specifies the shape use for shapes written to NDM for this
layer. The default is to not set a shape use. See Table 2-7 for a list of shape uses.
❍ cell_suffix. Optional. Suffix for all cells written from this layer. New cells are
generated for this layer if a unique suffix is specified. The default is the value of the
cell_suffix argument of the write_ndm() argument function.
- AUTO. Compresses the fill. During the fill compression process, new cells are
created; some cells have only one fill rectangle and others have multiple fill
rectangles. The fill is compressed by replacing the fill data of these cells with
single and AREF (array reference) placements, as appropriate.
■ cell. Required. Names the cell created when fill rectangles are grouped into a
sub cell. The IC Validator tool adds a suffix if there is any conflict with existing cells
in the hierarchy or other new cells. For example, if the cell name is specified as
icv_fill and there is a conflict, a suffix is added and the new cell is named icv_fill_1.
If there is a conflict with this name, the new cell is named icv_fill_2, and so on.
❍ mask. Optional. Sets the multi-patterning mask to set for shapes written to NDM from
this layer. The default is not to set a multi-patterning mask. See Table 2-11 for a list of
the masks.
❍ error_layer_format. Optional. Specifies how layers of type error_layer are written.
The default is DATA.
■ DATA. Specifies that errors are written as either zero-width paths or boundaries
depending on the type of error. The shapes that are written can be viewed in a
layout editor.
■ ERRORS. Specifies a setting for an internal IC Validator flow and should not be used
by the customer.
❍ attach_properties. Optional. Lists the properties to attach to output shapes on this
layer based on the interaction with a specified assign layer. Properties to be attached
must have been specified in the keep_properties option list of the assign layer. By
default, the IC Validator tool does not attach any properties.
■ assign_layer. Specifies the layer from which the properties are attached. This
layer must be the output of the assign() function.
■ properties. Optional. Specifies which properties are attached. These properties
must have been present in the keep_properties option list in the assign()
function. By default, the IC Validator tool does not attach any properties.
- OWNER_NET. Output shapes in the top cell are assigned to nets based on
assign layer shapes that they interact with. If an output shape interacts with
multiple input shapes having different nets, one is chosen arbitrarily and a
warning is reported. See the milkyway argument of the assign() function for
more information.
- SHAPE_USE. Output shapes are assigned a shape use based on assign layer
shapes that they interact with. If an output shape interacts with multiple input
shapes having different shape uses, a predefined precedence is used to
determine which shape use the output shape takes, and a warning is reported.
These properties are kept for every cell and are applied hierarchically.The
default is to not set a shape use. See Table 2-7 for a list of shape uses.
errors
Optional. Lists the errors written to the NDM library along with mapping and prefix
information.
❍ error. Specifies the violation for the error geometry.
❍ layer_num. Specifies the layer number, which is composed of a layer number and the
datatype, to which this violation is written. The data_type value, which is the layer
purpose, for each pair is optional, with a default of 0. See Layout Layer and Datatype
Ranges for information about the limits of the values.
❍ cell_prefix. Optional. Specifies the prefix for all cells written from this layer. New
cells are generated for this layer if a unique prefix is specified. The default is the value
of the error_cell_prefix argument.
❍ shape_use. Optional. Specifies the shape use for shapes written to NDM for this
violation. The default is to not set a shape use. See Table 2-7 for a list of shape uses.
❍ cell_suffix. Optional. Suffix for all cells written from this violation. The default is the
value of the error_cell_suffix argument.
❍ mask. Optional. Sets the multi-patterning mask to set for shapes written to NDM for
this violation. The default is not to set a multi-patterning mask. See Table 2-11 for a
list of the masks.
❍ classifications. Optional. Lists the error classifications that the IC Validator tool
uses to filter the violations for the specified output layer. For example, this argument
allows you to write waived violations to one layer and unwaived violations to another
layer.
The valid error classifications are Error, Ignore, Waive, Watch, Fixed, and Debug.
By default, no error classification filtering is performed and all errors are written for the
output layer.
Note:
The error_limit_per_check argument of the error_options() function, which
has a default of 100, applies to all error output, including violations written using the
write_ndm() function.
output_hierarchy
Optional. Controls the writing of cell references into the NDM library. This argument is
typically set to false only when the virtual_cells argument is EXPLODE and the mode
argument is APPEND so that polygon data can be appended to existing cells without
affecting the hierarchy. The default is true.
magnification_factor
Optional. The output coordinates are multiplied by this factor before writing to the output
library. A magnification factor between 0.0 and less than 1.0 shrinks data. A
magnification factor greater than 1.0 enlarges data. The default is 1.0 (no magnification).
instance_name
Optional. Specifies whether instance names are written.
❍ write. Optional. Specifies whether to write instance names. The default is true.
❍ conflict. Optional. Specifies what happens when a newly written instance name is in
conflict with an existing instance name. This situation is relevant only when you set
the mode argument to APPEND. The default is SKIP.
■ ABORT. Abort the run.
■ RENAME. Rename the new cell reference with a unique instance name.
cell_suffix
Optional. Suffix for all cell names written from the layers argument list. This value can
be overridden by the cell_suffix option inside of the layers argument list. The default
is an empty string ("").
error_cell_suffix
Optional. Suffix for all cell names written from the errors argument list. This value can
be overridden by the cell_suffix option inside of the errors argument list. Set this
value to an empty string ("") if you do not want a suffix. The default is "ERR_".
apply_suffix
Optional. Specifies the cells in the output library to which the suffix is applied. By default,
the IC Validator tool applies the suffix to the output cell and lower cells.
❍ OUTPUT_CELL. Suffix is applied to the top cell of the design.
place_cells
Optional. Places complex fill cells programmatically, instead of layer-by-layer fill, into the
output layout based on a marker layer containing rectangles. A layer consisting of
rectangles is converted into placements of predefined fill cells containing arbitrary
polygons on multiple layers during data output.
The imported cell can be renamed to prevent cell name conflicts. The origin of the
placement is the lower-left corner of the rectangle.
❍ cell. Specifies the handle to the cell that is imported. The handle is created by the
import_gds_cell() or import_oasis_cell() function.
❍ marker_layer. Specifies the layer that has the rectangles which define the fill
placement.
❍ compress. Specifies if cell placements should be compressed. The default is NONE.
❍ abort. Lists the error severity for rectangles of different sizes and nonrectangular
shapes on the marker layer. The default is {DIFFERENT_SIZE_RECTANGLES,
NON_RECTANGULAR_SHAPES}.
■ ROTATE_90.
■ ROTATE_180.
■ ROTATE_270.
❍ shift. Optional. Specifies the shift of the pattern origin from the lower-left corner of
the marker layer rectangle. The default is {0.0, 0.0}; that is, the pattern is not
shifted.
Note:
Reflection is performed before rotation. Rotation is performed before shifting.
Rotation does not affect the placement of the origin; it is always the lower-left
corner of the marker layer rectangle.
technology_file
Optional. Specifies the technology file used if a new NDM library is being created. If
appending to an existing NDM library, its technology information is used. If this argument
is not specified and the input library was NDM or Milkyway, the technology information
from the input library is used; otherwise an empty technology file is created. The
missing_technology_layers argument specifies how output layers that do not exist in
the technology information of the target library are handled.
missing_technology_layers
Optional. Specifies what happens when a layer/purpose combination that is used in the
output layers or errors list does not exist in the technology database of the destination
library. The default is UPDATE.
❍ UPDATE. Adds the missing layer/purpose to the technology database.
❍ IGNORE. Writes the output database without adding the missing layer/purpose to the
technology database.
❍ SKIP. Does not write the missing layers to the technology database.
design_label
Optional. Specifies the output design label. The default is the design label of the top input
cell.
exclude_from_generated_cell_names
Required. Specifies the list of strings that cannot be included in cell names generated
during multilayer fill compression. This does not apply to cell names generated by single
layer fill compression. Multilayer fill compression still calls single layer fill compression on
the remaining uncompressed data.
hierarchy_output
Optional. Specifies the type of cell to be exploded.
❍ ORIGINAL. Maintains the original hierarchy. This option explodes automatically the
vcells and any cells whose flat reference count is different than the original hierarchy.
❍ INTERNAL. Specifies the hierarchy used in the IC Validator tool. This is the current
behavior.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function requires the native ICValidator2-GeometryEngine license. See the Licensing
and Resource Requirements chapter in the IC Validator User Guide for more information
about licensing.
Examples
The following example shows the NDM_SYSTEM_PURPOSE_DIELECTRIC_FILL data type,
which is only supported in the write_ndm() function, and for NDM layer mapping.
write_ndm(
layers = {
{layer = L31,
layer_num = {layer_num=31,
data_type=NDM_SYSTEM_PURPOSE_DIELECTRIC_FILL}
}
}
);
See the write_gds() function for examples of the errors and magnification_factor
arguments, and for an example that uses the connect_database argument to write
instance name and net name properties.
See Also
ndm_library()
ndm_merge_library_options()
ndm_options()
write_oasis()
The write_oasis() function write layers and violations to an OASIS file. There can be
multiple write_oasis() functions within a runset.
Errors consisting of a single point or two points have polygon data generated for output to
the OASIS file. These polygons match what you see in VUE associated with these errors (an
X for a single point or a flyline for multiple points).
See the “Limits on Number of Vertices of a Polygon” section for information about writing out
large polygons.
Syntax
write_oasis(
output_library =
oasis_library,
resolution =
double, //optional
holding_cell =
"string", //optional
output_cell =
"string", //optional
apply_prefix =
{OUTPUT_CELL, LOWER_CELLS, HOLDING_CELL},
//optional
compression_level = integer, //optional
cell_prefix = "string", //optional
error_cell_prefix = "string", //optional
virtual_cells = KEEP | EXPLODE, //optional
layers = {{layer = layername,
layer_num = {layer_num = integer, data_type = integer},
cell_prefix = "string",
aref = {{cell = "string",
width = doubleconstraint,
height = doubleconstraint,
minimum_elements = integer,
replace = {{{x = double, y = double}, ...}, ...}},
...},
cell_suffix = "string",
user_defined_properties = {double_properties =
{{name = "string",
number = integer}, ...}},
= {string_properties =
{{name = "string",
number = integer}, ...}},
compress_fill = {mode = NONE | AUTO,
cell = "string"},
name = "string"},
...}, //optional
errors = {{error = violation,
layer_num = {layer_num = integer, data_type = integer},
cell_prefix = "string",
cell_suffix = "string"},
classifications = {"string", ...},
...} //optional
Returns
void
Arguments
output_library
Required. Specifies the OASIS file handle. The handle is defined using the
oasis_library() function.
Note:
Multiple write_oasis() functions that have the same file name cause an overwrite
of the OASIS file.
resolution
Optional. Output data is snapped to this resolution before it is written to the OASIS file.
The default is the input library resolution.
holding_cell
Optional. Generated top cell that references the output hierarchy from the run. This cell
is a generated holding cell; it does not contain any polygon or text data.
The holding cell contains both the error and layer cells. By default, error data is written to
cells with the ERR_ prefix and layers are written to the layout cell names. The error data
can be placed within the layer hierarchy if you change the ERR_ prefix to an empty string
("") using the error_cell_prefix argument. See the holding_cell argument of the
write_milkyway() function for more information.
output_cell
Optional. Specifies the new name for the top cell of the design to be used in the output
library. The name should not conflict with existing cells in the design. The default name
is the original top cell name.
apply_prefix
Optional. Specifies the cells in the output library to which the prefix is applied. By default,
the IC Validator tool applies the prefix to the output cell and lower cells.
❍ OUTPUT_CELL. Specifies the prefix that is applied to the top cell of the design.
❍ LOWER_CELLS. Specifies the prefix that is applied to cells placed underneath the top
cell.
❍ HOLDING_CELL. Specifies the prefix that is applied to the holding cell.
compression_level
Optional. Compression of the output OASIS file. The higher the number the more
aggressive the compression at the cost of processing time. The level can be set from 0
to 9. If a value greater than 9 is specified, the compression level is 9. The default is 6.
cell_prefix
Optional. Specifies the prefix for all cell names written from the layers argument list.
This value can be overridden by the cell_prefix option inside of the layers argument
list. The default is an empty string (""); that is, no added prefix.
error_cell_prefix
Optional. Specifies the prefix for all cell names written from the errors argument list.
This value can be overridden by the cell_prefix option inside of the errors argument
list. Set this value to an empty string ("") if you do not want a prefix. The default is
"ERR_".
virtual_cells
Optional. Specifies the action to take for virtual cells. The default is KEEP.
❍ KEEP. Virtual cells are kept and written to the output library. The output hierarchy
contains references to virtual cells.
❍ EXPLODE. All data and placements from virtual cells are exploded to the first parent
design cell before writing to the output library. The output hierarchy does not contain
references to virtual cells.
layers
Optional. Lists the layers to write to the OASIS file along with mapping and prefix
information.
❍ layer. Specifies the layer name. This layer can be an edge, polygon, or text layer.
❍ layer_num. Specifies the layer number, which is composed of a layer number and the
datatype. This value is used when writing to a library. The data_type option has a
default of 0. See “Layout Layer and Datatype Ranges” on page A-6 for information
about the limits of the values.
❍ cell_prefix. Optional. Specifies the prefix for all cells written from this layer. New
cells are generated for this layer if a unique prefix is specified. The default is the value
of the cell_prefix argument.
❍ aref. Optional. Lists the regular patterns of rectangles to be converted into arrayed
structures. You can specify multiple patterns per layer. This behavior is a cell-level
operation. This feature is typically used to reduce the size of the output layout by
converting flat fill to arrayed structures.
The IC Validator tool determines if rectangles that meet the provided dimensions,
specified in the width and height options, are in an arrayed pattern. These
rectangles with an arrayed pattern are replaced with a new cell containing a single
rectangle of the specified width and height dimensions. The origin of the new cell is
the lower-left corner of the rectangle. Any data in the layer that is not arrayed is output
unchanged.
The replace option allows the single rectangle in the new AREF (array reference)
cell to be replaced by specified polygons.
■ cell. Required. Names new cells created when rectangles are grouped into
arrayed structures. The IC Validator tool adds a suffix if there is any conflict with
existing cells in the hierarchy or other new cells. For example, if the cell name is
icv_aref and there is a conflict, a suffix is added and the new cell is named
icv_aref_1. There is a conflict with this name, and then the new cell is named
icv_aref_2, and so on.
■ width. Required. Width of the rectangles. See “Constraints” on page A-4 for more
information.
The IC Validator tool looks for all rectangles with a width equal to the width value
and height equal to the height value, and forms arrayed structures, if possible,
with 0-degree rotation. It also looks for rectangles with a height equal to the width
value and width equal to the height value, and forms arrayed structures, if
possible, with 90-degree rotation. Both the 0-degree and 90-degree array
placements point to the same created cell.
■ height. Required. Height of the rectangles. See “Constraints” on page A-4 for
more information.
■ minimum_elements. Optional. Minimum number of rectangles for an arrayed
structure to be formed. The IC Validator tool creates an SREF (structured
reference) instead of an array placement when there is an arrayed structure of
only one rectangle. The default is 16.
■ replace. Optional. Lists the polygons that replace the rectangle in the new cells.
This behavior allows a rectangle marker layer to be used to create arrayed
structures of more complex shapes in the output layout.
Note:
Setting the minimum_elements option to 1 ensures all rectangles of the
specified width and height dimensions are replaced by a placement to a cell
with the polygons provided.
The list contains xy coordinate pairs for each created polygon. The coordinates
can be either
- Two coordinates, which are interpreted as the opposing corners of a rectangle.
- Three or more coordinates, which define the outer boundary of a closed
polygon. You do not need to repeat the first coordinate at the end of the list.
The coordinates can be ordered in either direction around the polygon.
Note:
Polygons, or portions of polygons with no area, are ignored. Areas of
self-intersection are left empty.
❍ cell_suffix. Optional. Suffix for all cells written from this layer. New cells are
generated for this layer if a unique suffix is specified. The default is the value of the
write_oasis(cell_suffix) argument.
- number. Specifies the property number. The property numbers must be in the
range of 0–255, inclusive.
■ string_properties. Specifies the string value properties that are written to the
specified property numbers.
- name. Specifies the property name.
- number. Specifies the property number. The property numbers must be in the
range of 0–255, inclusive.
See the oasis argument of the assign() function for more information.
❍ compress_fill. Optional. Specifies the compression of fill by replacing blocks of fill
with a cell placement.
Note:
Each layer to be compressed must be specified with the layers argument and the
mode of the compress_fill option set to AUTO.
■ mode. Optional. Specifies the type of compression. The default is NONE.
- AUTO. Compresses the fill. During the fill compression process, new cells are
created; some cells have only one fill rectangle and others have multiple fill
rectangles. The fill is compressed by replacing the fill data of these cells with
single and AREF placements, as appropriate.
■ cell. Required. Names the cell created when fill rectangles are grouped into a
sub cell. The IC Validator tool adds a suffix if there is any conflict with existing cells
in the hierarchy or other new cells. For example, if the cell name is specified as
icv_fill and there is a conflict, a suffix is added and the new cell is named icv_fill_1.
If there is a conflict with this name, the new cell is named icv_fill_2, and so on.
❍ name. Optional. Specifies the layer name used by the IC Validator tool for the data
counts in the summary file and for naming the layer in the OASIS output layout. The
default behavior is to extract a name based on an internal IC Validator file name used
for the layer, which might not match the runset layer variable name specified in the
layer argument.
errors
Optional. Lists the errors written to the OASIS file along with mapping and prefix
information.
❍ error. Specifies the violation name for the error geometry.
❍ layer_num. Specifies the layer number, which is composed of a layer number and the
datatype. This value is used when writing to a library. The data_type option has a
default of 0. See “Layout Layer and Datatype Ranges” on page A-6 for information
about the limits of the values.
❍ cell_prefix. Optional. Specifies the prefix for all cells written from this layer. New
cells are generated for this layer if a unique prefix is specified. The default is the value
of the error_cell_prefix argument.
❍ cell_suffix. Optional. Suffix for all cells written from this layer. New cells are
generated for this layer if a unique suffix is specified. The default is the value of the
error_cell_suffix argument.
❍ classifications. Optional. Lists the error classifications that the IC Validator tool
uses to filter the violations for the specified output layer. For example, this argument
allows you to write waived violations to one layer and unwaived violations to another
layer.
The valid error classifications are Error, Ignore, Waive, Watch, Fixed, and Debug.
By default, no error classification filtering is performed and all errors are written for the
output layer.
Note:
The error_limit_per_check argument of the error_options() function, which
has a default of 100, applies to all error output, including violations written using the
write_oasis() function.
properties
Optional. Associates property numbers with specific properties for output. The property
numbers must be in the range of 0–255, inclusive. By default, the IC Validator tool does
not write any properties.
❍ instance_name. Optional. Specifies the property number to which cell instance
names are written. By default, the IC Validator tool does not write instance names.
❍ net_name. Optional. Specifies the property number to which polygon net names are
written. Either a connect database must be specified in the connect_sequence
argument or a device database must be specified in the device_db argument. By
default, the IC Validator tool does not write net names.
❍ internal_net_name. Optional. Specifies the property number to which internal net
names are written. The internal net name is the net prefix plus the base net number.
Either a connect database must be specified in the connect_sequence argument or
a device database must be specified in the device_db argument. By default, the
IC Validator tool does not write the internal net name.
❍ net_type. Optional. Specifies the property number to which polygon net types are
written. If a polygon’s net connects up or down the hierarchy, the property value is
“IO”; otherwise, the property is not set. Either a connect database must be specified
in the connect_sequence argument or a device database must be specified in the
device_db argument. By default, the IC Validator tool does not write the net type.
connect_sequence
Optional. Specifies the connect database used to output net name and type properties
when the properties argument is used. If you specify both the connect_sequence and
the device_db arguments, the connectivity in the device database is used.
merge_input_layout
Optional. Specifies if the input and generated Oasis files are merged. The default is
false.
❍ true. Merges the input and generated OASIS files to make the final output OASIS
file. The output OASIS file is a copy of the input OASIS file with the output of the
specified layers placed hierarchically at (0,0) under the top of the input cell. Set the
cell_prefix argument to give the output cells a name different from the original
input cells.
❍ false. Outputs only the generated file.
magnification_factor
Optional. The output coordinates are multiplied by this factor before writing to the output
library. A magnification factor between 0.0 and less than 1.0 shrinks data. A
magnification factor greater than 1.0 enlarges data. The default is 1.0 (no magnification).
cell_suffix
Optional. Suffix for all cell names written from the layers argument list. This value can
be overridden by the cell_suffix option inside of the layers argument list. The default
is an empty string ("").
error_cell_suffix
Optional. Suffix for all cell names written from the errors argument list. This value can
be overridden by the cell_suffix option inside of the errors argument list. The default
is an empty string ("").
apply_suffix
Optional. Specifies the cells in the output library to which the suffix is applied. By default,
the IC Validator tool applies the suffix to the output cell and lower cells.
❍ OUTPUT_CELL. Suffix is applied to the top cell of the design.
device_db
Optional. Specifies a device database used to output device name properties when the
properties argument is used. If you are writing the device name, device instance
name, or device terminal instance name, you must specify a device database. The
extract_devices() function generates a device database. If you specify both the
connect_sequence and the device_db arguments, the connectivity in the device
database is used.
place_cells
Optional. Places complex fill cells programmatically, instead of layer-by-layer fill, into the
output layout based on a marker layer containing rectangles. A layer consisting of
rectangles is converted into placements of predefined fill cells containing arbitrary
polygons on multiple layers during data output.
The imported cell can be renamed to prevent cell name conflicts. The origin of the
placement is the lower-left corner of the rectangle.
❍ cell. Specifies the handle to the cell that is imported. The handle is created by the
import_gds_cell() or import_oasis_cell() function.
❍ marker_layer. Specifies the layer that has the rectangles which define the fill
placement.
❍ compress. Specifies if cell placements should be compressed. The default is NONE.
❍ abort. Lists the error severity for rectangles of different sizes and nonrectangular
shapes on the marker layer. The default is {DIFFERENT_SIZE_RECTANGLES,
NON_RECTANGULAR_SHAPES}.
■ ROTATE_90.
■ ROTATE_180.
■ ROTATE_270.
❍ shift. Optional. Specifies the shift of the pattern origin from the lower-left corner of
the marker layer rectangle. The default is {0.0, 0.0}; that is, the pattern is not
shifted.
Note:
Reflection is performed before rotation. Rotation is performed before shifting.
Rotation does not affect the placement of the origin; it is always the lower-left
corner of the marker layer rectangle.
output_generated_instance_names
Optional. Specifies if instance names internally generated by the IC Validator tool are
written to the OASIS file in addition to instance names from the input layout. Instance
names are written out only if the instance_name option of the property argument is
defined. The default is true.
❍ true. Writes internally generated instance names to the OASIS file.
❍ false. Does not write internally generated instance names to the OASIS file.
exclude_from_generated_cell_names
Required. Specifies the list of strings that cannot be included in cell names generated
during multilayer fill compression. This does not apply to cell names generated by single
layer fill compression. Multilayer fill compression still calls single layer fill compression on
the remaining uncompressed data.
hierarchy_output
Optional. Specifies the type of cell to be exploded.
❍ ORIGINAL. Maintains the original hierarchy. This option explodes automatically the
vcells and any cells whose flat reference count is different than the original hierarchy.
❍ INTERNAL. Specifies the hierarchy used in the IC Validator tool. This is the current
behavior.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
See the write_gds() function for examples of the errors and magnification_factor
arguments, and for an example that uses the connect_database argument to write
instance name and net name properties.
See Also
error_options()
get_netlist_connect_database()
oasis_library()
oasis_options()
resolution_options()
write_openaccess()
The write_openaccess() function writes layers and violations to an OpenAccess library.
There can be multiple write_openaccess() functions within a runset.
Note:
The OpenAccess format does not support 64-bit coordinates. Therefore, do not use the
-64 command-line option with the write_openaccess() function.
If the input layout is OpenAccess, library and view names from input cells are used unless
the library or view arguments of the write_openaccess() function are specified.
Errors consisting of a single point or two points have polygon data generated for output to
the OpenAccess library. These polygons match what you see in VUE associated with these
errors (an X for a single point or a flyline for multiple points).
See the “Limits on Number of Vertices of a Polygon” section for information about writing out
large polygons.
Syntax
write_openaccess(
output_library =
openaccess_library_handle,
view =
"string", //optional
library =
"string", //optional
mode =
APPEND | OVERWRITE, //optional
holding_cell =
"string", //optional
output_cell =
"string", //optional
cell_prefix =
"string", //optional
error_cell_prefix =
"string", //optional
apply_prefix =
{OUTPUT_CELL, LOWER_CELLS, HOLDING_CELL},
//optional
virtual_cells = KEEP | EXPLODE, //optional
output_hierarchy = true | false, //optional
net_id = true | false, //optional
connect_sequence = connect_database, //optional
magnification_factor = double, //optional
layers = {{layer = layername,
lpp = {layer_name = "string",
purpose_name = "string"},
cell_prefix = "string",
aref = {{cell = "string",
width = doubleconstraint,
height = doubleconstraint,
minimum_elements = integer,
replace = {{{x = double, y = double}, ...}, ...}},
...},
cell_suffix = "string",
compress_fill = {mode = NONE | AUTO,
cell = "string"}},
...}, //optional
Returns
void
Arguments
output_library
Required. Specifies an OpenAccess library handle. The handle is defined using the
openaccess_library() function.
view
Optional. Specifies the view used for output cells. By default, the IC Validator tool uses
the view names from OpenAccess input layout cells, or if the input layout is not
OpenAccess, the default is "layout".
Note:
If a cell name conflicts with another name after renaming the view, the name is
modified such that it is unique in the output hierarchy.
library
Optional. Names the library to use for output cells. By default, the IC Validator tool uses
the library names from any OpenAccess input layout cells or the name of the
OpenAccess input library. This argument is required if the input layout is not
OpenAccess.
Note:
If a cell name conflicts with another name after renaming the library, the name is
modified such that it is unique in the output hierarchy.
mode
Optional. Specifies the action for when the library already exists. The default is
OVERWRITE.
❍ APPEND. When you write data into a cell that already exists in the target OpenAccess
library, the cell has both the old and new data.
❍ OVERWRITE. When you write data into a cell that already exists in the target library,
any previous data is overwritten.
holding_cell
Optional. Generated top cell that references the output hierarchy from the run. This cell
is a generated holding cell; it does not contain any polygon or text data.
The holding cell contains both the error and layer cells. By default, error data is written to
cells with the ERR_ prefix and layers are written to the layout cell names. The error data
can be placed within the layer hierarchy if you change the ERR_ prefix to an empty string
("") using the error_cell_prefix argument. See the holding_cell argument of the
write_milkyway() function for more information.
output_cell
Optional. Specifies the new name for the top cell of the design to be used in the output
library. The name should not conflict with existing cells in the design. The default name
is the original top cell name.
cell_prefix
Optional. Specifies the prefix for all cell names written from the layers argument list.
This value can be overridden by the cell_prefix option inside of the layers argument
list. The default is an empty string (""); that is, no added prefix.
error_cell_prefix
Optional. Specifies the prefix for all cell names written from the errors argument list.
This value can be overridden by the cell_prefix option inside of the errors argument
list. Set this value to an empty string ("") if you do not want a prefix. The default is
"ERR_".
apply_prefix
Optional. Specifies the cells in the output library to which the prefix is applied. By default,
the IC Validator tool applies the prefix to the output cell and lower cells.
❍ OUTPUT_CELL. Specifies the prefix that is applied to the top cell of the design.
❍ LOWER_CELLS. Specifies the prefix that is applied to cells placed underneath the top
cell.
❍ HOLDING_CELL. Specifies the prefix that is applied to the holding cell.
virtual_cells
Optional. Specifies the action to take for virtual cells. Virtual cells can include cells that
the IC Validator tool creates to represent standard vias or programmable cells. The
default is KEEP.
❍ KEEP. Virtual cells are kept and written to the output library. The output hierarchy
contains references to virtual cells.
❍ EXPLODE. All data and placements from virtual cells are exploded to the first parent
design cell before writing to the output library. The output hierarchy does not contain
references to virtual cells.
output_hierarchy
Optional. Controls the writing of cell references into the output OpenAccess library. This
argument is typically set to false when the virtual_cells argument is EXPLODE and
the mode argument is APPEND so that polygon data can be appended to existing cells
without affecting the hierarchy. The default is true.
net_id
Optional. Specifies if the net ID is generated for rectangle and polygon data. The connect
database that generated the nets must be specified in the connect_sequence argument.
The default is false.
connect_sequence
Optional. Specifies the connect database that contains net information used for
outputting net IDs when the net_id argument is true.
magnification_factor
Optional. The output coordinates are multiplied by this factor before writing to the output
library. A magnification factor between 0.0 and less than 1.0 shrinks data. A
magnification factor greater than 1.0 enlarges data. The default is 1.0 (no magnification).
layers
Optional. Lists the layers to write to the OpenAccess library along with mapping and
prefix information.
❍ layer. Specifies the layer name. This layer can be an edge, polygon, or text layer.
❍ lpp. Specifies the layer and purpose name pair to which data is written.
❍ cell_prefix. Optional. Specifies the prefix for all cells written from this layer. New
cells are generated for this layer if a unique prefix is specified. The default is the value
of the cell_prefix argument.
❍ aref. Optional. Lists the regular patterns of rectangles to be converted into arrayed
structures. You can specify multiple patterns per layer. This behavior is a cell-level
operation. This feature is typically used to reduce the size of the output layout by
converting flat fill to arrayed structures.
The IC Validator tool determines if rectangles that meet the provided dimensions,
specified in the width and height options, are in an arrayed pattern. These
rectangles with an arrayed pattern are replaced with a new cell containing a single
rectangle of the specified width and height dimensions. The origin of the new cell is
the lower-left corner of the rectangle. Any data in the layer that is not arrayed is output
unchanged.
The replace option allows the single rectangle in the new AREF (array reference)
cell to be replaced by specified polygons.
■ cell. Required. Names new cells created when rectangles are grouped into
arrayed structures. The IC Validator tool adds a suffix if there is any conflict with
existing cells in the hierarchy or other new cells. For example, if the cell name is
icv_aref and there is a conflict, a suffix is added and the new cell is named
icv_aref_1. There is a conflict with this name, the new cell is named icv_aref_2,
and so on.
■ width. Required. Width of the rectangles. See “Constraints” on page A-4 for more
information.
The IC Validator tool looks for all rectangles with a width equal to the width value
and height equal to the height value, and forms arrayed structures, if possible,
with 0-degree rotation. It also looks for rectangles with a height equal to the width
value and width equal to the height value, and forms arrayed structures, if
possible, with 90-degree rotation. Both the 0-degree and 90-degree array
placements point to the same created cell.
■ height. Required. Height of the rectangles. See “Constraints” on page A-4 for
more information.
■ minimum_elements. Optional. Minimum number of rectangles for an arrayed
structure to be formed. The IC Validator tool creates an SREF (structured
reference) instead of an array placement when there is an arrayed structure of
only one rectangle. The default is 16.
■ replace. Optional. Lists the polygons that replace the rectangle in the new cells.
This behavior allows a rectangle marker layer to be used to create arrayed
structures of more complex shapes in the output layout.
Note:
Setting minimum_elements option to 1 ensures all rectangles of the specified
width and height dimensions are replaced by a placement to a cell with the
polygons provided.
The list contains xy coordinate pairs for each created polygon. The coordinates
can be either
- Two coordinates, which are interpreted as the opposing corners of a rectangle.
- Three or more coordinates, which define the outer boundary of a closed
polygon. You do not need to repeat the first coordinate at the end of the list.
The coordinates can be ordered in either direction around the polygon.
Note:
Polygons, or portions of polygons with no area, are ignored. Areas of
self-intersection are left empty.
❍ cell_suffix. Optional. Suffix for all cells written from this layer. New cells are
generated for this layer if a unique suffix is specified. The default is the value of the
write_openaccess(cell_suffix) argument.
- AUTO. Compresses the fill. During the fill compression process, new cells are
created; some cells have only one fill rectangle and others have multiple fill
rectangles. The fill is compressed by replacing the fill data of these cells with
single and AREF placements, as appropriate.
■ cell. Required. Names the cell created when fill rectangles are grouped into a
sub cell. The IC Validator tool adds a suffix if there is any conflict with existing cells
in the hierarchy or other new cells. For example, if the cell name is specified as
icv_fill and there is a conflict, a suffix is added and the new cell is named icv_fill_1.
If there is a conflict with this name, the new cell is named icv_fill_2, and so on.
errors
Optional. Lists the errors written to the OpenAccess library along with mapping and
prefix information.
❍ error. Specifies the violation name for the error geometry.
❍ lpp. Specifies the layer and purpose name pair to which data is written.
❍ cell_prefix. Optional. Specifies the prefix for all cells written from this layer. New
cells are generated for this layer if a unique prefix is specified. The default is the value
of the error_cell_prefix argument.
❍ cell_suffix. Optional. Suffix for all cells written from this layer. New cells are
generated for this layer if a unique suffix is specified. The default is the value of the
error_cell_suffix argument.
❍ classifications. Optional. Lists the error classifications that the IC Validator tool
uses to filter the violations for the specified output layer. For example, this argument
allows you to write waived violations to one layer and unwaived violations to another
layer.
The valid error classifications are Error, Ignore, Waive, Watch, Fixed, and Debug.
By default, no error classification filtering is performed and all errors are written for the
output layer.
Note:
The error_limit_per_check argument of the error_options() function, which
has a default of 100, applies to all error output, including violations written using the
write_openaccess() function.
instance_name
Optional. Specifies whether instance names are written.
❍ write. Optional. Specifies whether to write instance names. The default is true.
❍ conflict. Optional. Specifies what happens when a newly written instance name is
in conflict with an existing instance name. This behavior is relevant only when you set
the mode argument to APPEND. The default is SKIP.
■ ABORT. Abort the run.
■ RENAME. Rename the new cell reference with a unique instance name.
cell_suffix
Optional. Suffix for all cell names written from the layers argument list. This value can
be overridden by the cell_suffix option inside of the layers argument list. The default
is an empty string ("").
error_cell_suffix
Optional. Suffix for all cell names written from the errors argument list. This value can
be overridden by the cell_suffix option inside of the errors argument list. Set this
value to an empty string ("") if you do not want a suffix. The default is "ERR_".
apply_suffix
Optional. Specifies the cells in the output library to which the suffix is applied. By default,
the IC Validator tool applies the suffix to the output cell and lower cells.
❍ OUTPUT_CELL. Suffix is applied to the top cell of the design.
place_cells
Optional. Places complex fill cells programmatically, instead of layer-by-layer fill, into the
output layout based on a marker layer containing rectangles. A layer consisting of
rectangles is converted into placements of predefined fill cells containing arbitrary
polygons on multiple layers during data output.
The imported cell can be renamed to prevent cell name conflicts. The origin of the
placement is the lower-left corner of the rectangle.
❍ cell. Specifies the handle to the cell that is imported. The handle is created by the
import_gds_cell() or import_oasis_cell() function.
❍ marker_layer. Specifies the layer that has the rectangles which define the fill
placement.
❍ compress. Specifies if cell placements should be compressed. The default is NONE.
❍ abort. Lists the error severity for rectangles of different sizes and nonrectangular
shapes on the marker layer. The default is {DIFFERENT_SIZE_RECTANGLES,
NON_RECTANGULAR_SHAPES}.
■ ROTATE_90.
■ ROTATE_180.
■ ROTATE_270.
❍ shift. Optional. Specifies the shift of the pattern origin from the lower-left corner of
the marker layer rectangle. The default is {0.0, 0.0}; that is, the pattern is not
shifted.
Note:
Reflection is performed before rotation. Rotation is performed before shifting.
Rotation does not affect the placement of the origin; it is always the lower-left
corner of the marker layer rectangle.
exclude_from_generated_cell_names
Required. Specifies the list of strings that cannot be included in cell names generated
during multilayer fill compression. This does not apply to cell names generated by single
layer fill compression. Multilayer fill compression still calls single layer fill compression on
the remaining uncompressed data.
hierarchy_output
Optional. Specifies the type of cell to be exploded.
❍ ORIGINAL. Maintains the original hierarchy. This option explodes automatically the
vcells and any cells whose flat reference count is different than the original hierarchy.
❍ INTERNAL. Specifies the hierarchy used in the IC Validator tool. This is the current
behavior.
place_references
Optional. Places references to cells in an OpenAccess output layout without creating the
referenced cell. The referenced cell may or may not exist in the layout. The referenced
cell is described by library, cell, and view name.
❍ library. Specifies the library name of the referenced cell.
❍ marker_layer. Specifies the layer that has the rectangles which define the cell
placements. Cells are placed at the lower left corner of each rectangle.
❍ compress. Specifies if cell placements should be compressed. The default is NONE.
❍ abort. Lists the error severity for rectangles of different sizes and nonrectangular
shapes on the marker layer. The default is {DIFFERENT_SIZE_RECTANGLES,
NON_RECTANGULAR_SHAPES}.
■ ROTATE_90.
■ ROTATE_180.
■ ROTATE_270.
❍ shift. Optional. Specifies the shift of the placement origin from the lower-left corner
of the marker layer rectangle. The default is {0.0, 0.0}; that is, the placement is not
shifted.
Note:
Reflection is performed before rotation. Rotation is performed before shifting.
Rotation does not affect the placement of the origin; it is always the lower-left
corner of the marker layer rectangle.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
This function does not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
Examples
The following example writes m1 layers from the input layout, including net names, to a new
output database defined by ./out/lib.defs.
o = openaccess_library("./out/lib.defs");
write_openaccess(
output_library=o,
connect_sequence=cdb,
net_id = true,
layers = {
{ L_m1_drawing, {"m1","drawing"}},
{ L_m1_pin, {"m1","pin"}}
}
);
See Also
error_options()
get_netlist_connect_database()
openaccess_library()
openaccess_options()
resolution_options()
write_spice()
The write_spice() function invokes the netlist utility, icv_netlist, to generate a SPICE
netlist. The netlist data is created using the device database output from the
extract_devices() function and the polygon layers specified in the connect() function.
Therefore, call the write_spice() function after these functions.
Note:
The icv_netlist utility is in the IC Validator installation directory.
The write_spice() function constructs SPICE instance names as described in the
following Description section.
Syntax
write_spice(
device_db = device_database,
output_file = spice_netlist_file_handle,
model_name_format = NONE | INSTANCE_NAME | SPICE |
COMMENT, //optional
include_empty_cells = NONE | WITH_PORTS | ALL, //optional
precision = integer, //optional
error_report = BRIEF | VERBOSE, //optional
user_functions_file = "string", //optional
include_placement_data = true | false, //optional
flatten = true | false, //optional
compress_netlist = true | false //optional
);
Returns
void
Arguments
device_db
Required. Generates the layout netlist from the specified device database. The
extract_devices() function generates this database.
output_file
Required. Specifies the SPICE handle. The handle is defined using the
spice_netlist_file() function.
model_name_format
Optional. Specifies how to write the model name on the device line in a SPICE netlist.
The default is COMMENT.
❍ NONE. The model name is not written.
❍ INSTANCE_NAME. The model name is appended to the instance name of the device.
❍ SPICE. The model name is written as the fourth field on the device line, just before the
value.
❍ COMMENT. The model name is written in a comment at the end of the device line in the
format: $.model=modelName.
For example,
NONE: C1 node1 node2 value
INSTANCE_NAME: C1_modelName node1 node2 value
SPICE: C1 node1 node2 modelName value
COMMENT: C1 node1 node2 value $.model=modelName
Note:
This argument applies only to capacitor, inductor, and resistor devices.
include_empty_cells
Optional. Specifies which empty cells are written to the cell.net file. Empty cells do not
have devices or instances. A cell is always written out when it is defined as an
equivalence or black-box cell. The default is NONE.
❍ NONE. Does not write empty cells to the cell.net file.
❍ WITH_PORTS. Writes empty cells that have ports to the cell.net file.
precision
Optional. Specifies the maximum number of significant figures reported in the output
SPICE netlist (cell.sp file) for all device properties. The value can be from 1 through 15.
The default is 6. When the precision argument is <=0, the IC Validator tool treats this
value as the default precision.
error_report
Optional. Specifies the verbosity of the error report. The information is written to
output_file.err. If, however, the output_file argument is not set, the default file name
cell.sp.err is used. The default is BRIEF.
❍ BRIEF. Writes only a summary, which contains the total count of layout names that
cannot be cross-referenced.
❍ VERBOSE. Writes details of cross-referencing errors, such as specific layout names
that cannot be cross-referenced.
user_functions_file
Optional. Specifies the file that contains the remote functions. See “Flexible Netlisting
Utility Functions” in Chapter 4 for more information about the utility functions you can use
to define a remote function.
include_placement_data
Optional. When set to true, the generated SPICE netlist includes coordinate information
for device instances, and coordinate and rotation information for cell instances. The cell
instance information is output for both the placement origin and the lower-left bounding
box position. The default is false.
The following device instance example shows where $X and $Y are the coordinates at
the center of body polygon:
MM0 1 4 3 3 p L=2e-06 W=1.2e-05 $X=11500 $Y=26500
The following cell instance example shows the $X and $Y lower-left bounding box
coordinates and the $T origin placement data:
$T=field1 field2 field3 field4 $X= field5 $Y= field6
field1 = x-coordinate of placement origin
field2 = y-coordinate of placement origin
field3 = reflection (0, 1)
field4 = rotation (0 90 180 270)
field5 = x-coordinate of lower-left
field6 = y-coordinate of lower-left
#the bounding-box of cell INV is (top=0.150000 bottom=-0.115000
#left=-0.120000 right=0.180000)
X1 A Z VDD VSS INV $T=0.82 -0.27 1 270 $X=0.67 $Y=-0.45
Instance X1 is a placement of master cell INV with bounding box = (-0.12 -0.115, 0.18,
0.15). It is placed on (0.82, -0.27) with reflection of 1 and rotation of 270 degrees. The
lower-left coordinate of the bounding box of X1 in the parent call is (0.67, -0.45).
compress_netlist
Optional. Compresses the output netlist generated using the write_spice() function.
The output file name is not altered from the user-specified name set in the
spice_netlist_file() function. The default is false.
flatten
Optional. Specifies if the netlist is flattened. The default is false. See the following
Description section for more information.
❍ true. Writes a flattened SPICE netlist.
Note:
When flatten is true, the model_name_format and user_functions_file
arguments of the write_spice() function are ignored.
Description
The IC Validator tool adds instance name prefixes, known as SPICE cards, to cell and
device names. The form of the prefix depends on the value of the flatten argument.
• flatten = true
❍ A hierarchical path name for a device is constructed using instance names originating
in the cell.net layout netlist generated by the netlist() function. A SPICE card
prefix is added to the hierarchical path name. The SPICE card prefix to be added is
defined by the prefix on the original device instance name in the preflattened netlist.
For example, the prefix for an NMOS device is “M_”.
The slash character (/) delineates hierarchical levels inside the flattened hierarchical
instance name.
• flatten = false
❍ All device instance names identically match names originating in the cell.net layout
netlist generated by the netlist() function. No additional SPICE card is added as a
prefix to the device instance name because the netlist() function already adds a
prefix to each device instance name with the appropriate SPICE card.
❍ An “x” prefix is added to cell instance names that originate in the cell.net layout netlist
generated by the netlist() function.
For example, prefixed names for an NMOS device are shown in Table 3-41.
Table 3-41 SPICE Instance Names With Prefixes for an NMOS Device
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Examples
See the Examples section of the write_xref_spice() function for more information.
See Also
netlist()
read_layout_netlist()
schematic()
spice_netlist_file()
write_xref_spice()
write_xref_spice()
The write_xref_spice() function invokes the netlist utility (icv_netlist) to generate a
cross-referenced SPICE netlist. To generate a cross-referenced SPICE netlist, the
write_xref_spice() function must be called after LVS comparison. The resulting SPICE
netlist has back-annotated schematic device and net names.
Note:
The icv_netlist utility is in the IC Validator installation directory.
The write_xref_spice() function constructs SPICE instance names as described in the
Description section of the write_spice() function.
Syntax
write_xref_spice(
device_db = device_database,
xref_db = xref_database_handle,
output_file = spice_netlist_file_handle,
model_name_format = NONE | INSTANCE_NAME |
SPICE | COMMENT, //optional
include_empty_cells = NONE | WITH_PORTS | ALL, //optional
precision = integer, //optional
error_report = BRIEF | VERBOSE, //optional
xref_cell_delimiter = "string", //optional
xref_netlist_filtered_devices = true | false, //optional
xref_prefixes = {device_prefix = "string",
net_prefix = "string",
instance_prefix = "string"},
//optional
user_functions_file = "string", //optional
include_placement_data = true | false, //optional
flatten = true | false, //optional
compress_netlist = true | false //optional
);
Returns
void
Arguments
device_db
Required. Generates the layout netlist from the specified device database. The
extract_devices() function generates this database.
xref_db
Required. Specifies the handle of the database from which cross-reference information
is generated. The handle must be previously defined by the compare() function.
output_file
Required. Specifies the SPICE file for output. The file is defined using the
spice_netlist_file() function.
model_name_format
Optional. Specifies how to write the model name on the device line in a SPICE netlist.
The default is COMMENT.
❍ NONE. The model name is not written.
❍ INSTANCE_NAME. The model name is appended to the instance name of the device.
❍ SPICE. The model name is written as the fourth field on the device line, just before the
value.
❍ COMMENT. The model name is written in a comment at the end of the device line in the
format: $.model=modelName.
For example,
NONE: C1 node1 node2 value
INSTANCE_NAME: C1_modelName node1 node2 value
SPICE: C1 node1 node2 modelName value
COMMENT: C1 node1 node2 value $.model=modelName
Note:
This argument applies only to capacitor, inductor, and resistor devices.
include_empty_cells
Optional. Specifies which empty cells are written to the cell.net file. Empty cells do not
have devices or instances. A cell is always written out when it is defined as an
equivalence or black-box cell. The default is NONE.
❍ NONE. Does not write empty cells to the cell.net file.
❍ WITH_PORTS. Writes empty cells that have ports to the cell.net file.
precision
Optional. Specifies the maximum number of significant figures reported in the output
SPICE netlist (cell.sp file) for all device properties. The value can be from 1 through 15.
The default is 6. When the precision argument is <=0, the IC Validator tool treats this
value as the default precision.
error_report
Optional. Specifies the verbosity of the error report. The information is written to
output_file.err. If, however, the output_file argument is not set, the default file name
cell.sp.err is used. The default is BRIEF.
❍ BRIEF. Writes only a summary, which contains the total count of layout names that
cannot be cross-referenced.
❍ VERBOSE. Writes details of cross-referencing errors, such as specific layout names
that cannot be cross-referenced.
xref_cell_delimiter
Optional. Specifies the delimiter to use when multiple layout cells are netlisted because
several layout cells are matched to the same schematic cell. The delimiter and an ID
determined by the function are the suffix. The default is "_" (underscore).
xref_netlist_filtered_devices
Optional. Specifies whether devices filtered out during the compare process are
netlisted. The default is true.
❍ true. Netlists the devices filtered out by the compare() function.
xref_prefixes
Optional. Specifies the prefixes to use when layout and schematic device names, net
names, and cell names cannot be cross-referenced properly.
For example, if a device with the layout name M1 cannot be properly cross-referenced,
the netlisted device name is the device-type letter (M), plus the device_prefix option
and the layout name. If the default device prefix is used, the netlisted device name is
M_ld_M1.
❍ device_prefix. Specifies the prefix to use when a layout device name cannot be
cross-referenced properly to a schematic device name. The default is "ld".
❍ net_prefix. Specifies the prefix to use when a layout net name cannot be
cross-referenced properly to a schematic net name. The default is "ln".
❍ instance_prefix. Specifies the prefix to use when a layout cell-instance name
cannot be cross-referenced properly to a schematic cell-instance name. The default
is "li".
user_functions_file
Optional. Specifies the file that contains the remote functions. See “Flexible Netlisting
Utility Functions” on page 4-110 for more information about the utility functions you can
use to define a remote function.
include_placement_data
Optional. When set to true, the generated SPICE netlist includes coordinate information
for device instances, and coordinate and rotation information for cell instances. The cell
instance information is output for both the placement origin and the lower-left bounding
box position. The default is false.
See the include_placement_data argument of the write_spice() function for
examples.
compress_netlist
Optional. Compresses the output netlist generated using the write_spice() function.
The output file name is not altered from the user-specified name set in the
spice_netlist_file() function. The default is false.
flatten
Optional. Specifies if the netlist is flattened. The default is false. See the Description
section of the write_spice() function for more information.
❍ true. Writes a flattened SPICE netlist.
Note:
When flatten is true, the model_name_format and user_functions_file
arguments of the write_spice() function are ignored.
❍ false. Writes a SPICE netlist that is not flattened.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_DEVICE and HERCULES_NETLIST.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Examples
dev_db = extract_devices (dev_matrix);
. . .
xref = compare(cmp_matrix,sch_db,lay_db,
push_down_pins = true,
write_equiv_netlists = ALL,
remove_dangling_net= NONE
);
spice1 = spice_netlist_file("noxref.sp");
write_spice(
device_db = dev_db,
output_file = spice1
);
spice2 = spice_netlist_file("xref.sp");
write_xref_spice(
device_db = dev_db,
xref_db = xref,
output_file = spice2
);
See Also
netlist()
read_layout_netlist()
schematic()
spice_netlist_file()
write_spice()
xor()
The xor() function creates polygons that represent the unique data from two specified
layers. That is, it subtracts the intersecting data of the two layers from the combined data of
the two layers.
Syntax
xor(
layer1 = polygon_layer,
layer2 = polygon_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
polygon layer or error result
Arguments
layer1
Required. Specifies a polygon layer.
layer2
Required. Specifies a polygon layer.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
In Figure 3-213, the unique data of layerA and layerB is found.
Result = layerA xor layerB;
layerA
layerB
Result
See Also
and()
and_edge()
not()
not_edge()
or()
or_edge()
or_list()
xor_edge()
xor_edge()
The xor_edge() function creates the edges that represent the difference between the two
input layers. Opposing collinear edges are considered different. See edge in the Glossary
for more information about the direction of edges.
Syntax
xor_edge(
layer1 = edge_layer,
layer2 = edge_layer,
processing_mode = CELL_LEVEL | HIERARCHICAL, //optional
name = "layer_label" //optional
);
Returns
edge layer or error result
Arguments
layer1
Required. Specifies the edge layer.
layer2
Required. Specifies the edge layer.
processing_mode
Optional. Specifies how the hierarchy is processed. The default is HIERARCHICAL.
❍ CELL_LEVEL. Processes data only within the context of each individual cell;
placements are ignored.
❍ HIERARCHICAL. Processes all data within the context of the top cell.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Shared licensing. This function requires the following IC Validator license:
HERCULES_MASK.
See the Licensing and Resource Requirements chapter in the IC Validator User Guide for
more information about licensing.
Example
Figure 3-214 shows an example of the xor_edge() function.
out_layer = xor_edge(in_layer1, in_layer2);
See Also
and()
and_edge()
not()
not_edge()
or()
or_edge()
or_list()
xor()
xref_to_double_property()
The xref_to_double_property() function collects schematic net names and the
corresponding voltage values from a property file that you provide and creates a polygon
layer annotated with voltage property values for the matching layout nets. To find the layout
nets that match the schematic net names, the xref_to_double_property() function
processes a database of cross-reference information generated by a compare() function.
Note:
Properties on a polygon layer are only recognized by the drc_features(),
net_polygon_by_property(), and select_by_double_property() functions. All
other functions ignore properties on a polygon layer and do not propagate the properties
to their result.
Syntax
xref_to_double_property(
xref_db = xref_database_handle,
property_file = "string",
output_from_layer = polygon_layer,
in_connect_sequence = connect_database,
out_connect_sequence = out_connect_database,
name = "layer_label" //optional
);
Returns
polygon layer
Arguments
xref_db
Required. Specifies the handle of the database from which layout hierarchical net
corresponding to the names defined in the property_file argument is selected. The
handle must be previously defined by the compare() function.
property_file
Required. Specifies the property values and names in the corresponding schematic file.
The file format is
file_description property-name-1 property-name-2 ...
schematic_net-1 value value ...
schematic_net-2 value value ...
// this is a comment
schematic_net-3 value value ...
...
The file description is a comment. The following names on the first line define the
property names attached to the output polygons. A maximum of 16 different properties
are supported. Additional or duplicate property names cause a warning and are ignored.
Starting from the second line in the file, each line defines a schematic net with its property
values. If fewer property values than the number of property names on the first line are
given, the last value on the line is repeated for the remaining values.
Each schematic net is composed by a hierarchical path from top to the leaf-equivalence
cell, I1/I2/I3/NET1. Each instance (I1, I2…), refers to an equivalence point and NET1 is
the local net inside the last equivalence point. The local net indicates that it is not a port
of that equivalence point. For example, if X1/N1 is connected to top-level net NT1, you
must specify the latter one. In addition, nets that do not meet these criteria or are not
found in the cross-reference database are reported in the LAYOUT_ERRORS file.
A line that starts with two slashes (//) is a comment.
An incorrectly formatted file results in empty output and a warning message in the
summary file. The IC Validator tool exits the xref_to_double_property() function but
continues running the downstream functions.
The cell-level net can also be defined, as shown in the following format:
cellname net property-name-1 property-name-2
equiv_cell schematic_net-1 value value
equiv_cell schematic_net-2 value value
equiv_cell schematic_net-3 value value
...
The cellname is a predefined keyword that indicates an additional file format used to
define properties by a cell-level net.
The cell in the first column must be an equiv-cell and matic_net-X must be the non-port
net under the equiv-cell.
output_from_layer
Required. Specifies the layer used to create the output property layer. This layer must be
connected in the connect database specified by the in_connect_sequence argument.
For each net, the xref_to_double_property() function selects an arbitrary polygon,
attaches the properties on it, and writes it to the output polygon layer.
in_connect_sequence
Required. Specifies the connect database in which the output_from_layer layer is
connected.
Note:
This database must be the output of another xref_to_double_property() function
or the get_netlist_connect_database() function.
out_connect_sequence
Required. Specifies the output connect database that contains the derived layer.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Example
xref = compare(state = compare_settings,
schematic = schematic_netlist_db,
layout = layout_netlist_db);
POLY_ID = xref_to_double_property(xref_db = xref,
property_file = "VoltageFile.txt",
output_from_layer = POLY,
in_connect_sequence = cdb_xref,
cdb_xref);
POLY_V = net_polygon_by_property(connect_sequence = cdb_xref,
output_from_layer = POLY,
net_polygon_function = net_function,
layer_groups = {"POLY_ID" => POLY_ID});
See Also
net_polygon_by_property()
text_to_double_property()
xref_to_property()
The xref_to_property() function collects schematic net names and the corresponding
voltage values from a property file that you provide and creates a polygon layer annotated
with voltage property values for the matching layout nets. To find the layout nets that match
the schematic net names, the xref_to_property() function processes a database of
cross-reference information generated by a compare() function.
Note:
Properties on a polygon layer are only recognized by the drc_features(),
net_polygon_by_property(), and select_by_double_property() functions. All
other functions ignore properties on a polygon layer and do not propagate the properties
to their result.
Syntax
xref_to_property(
xref_db = xref_database_handle,
property_file = "string",
output_from_layer = polygon_layer,
in_connect_sequence = connect_database,
out_connect_sequence = out_connect_database,
name = "layer_label," //optional
property_merge_methods = {{property_name = "string",
property_type = DOUBLE | DOUBLE_LIST |
STRING},
merge_method = MAX | MIN | CONCATENATE
AUTO} ...}, //optional
report_conflict = true | false //optional
);
Returns
polygon layer
Arguments
xref_db
Required. Specifies the handle of the database from which layout hierarchical net
corresponding to the names defined in the property_file argument is selected. The
handle must be previously defined by the compare() function.
property_file
Required. Specifies the property values and names in the corresponding schematic file.
The file format is
The file description is a comment. The following names on the first line define the
property names attached to the output polygons. A maximum of 16 different properties
are supported. Additional or duplicate property names cause a warning and are ignored.
Starting from the second line in the file, each line defines a schematic net with its property
values. If fewer property values than the number of property names on the first line are
given, the last value on the line is repeated for the remaining values.
Each schematic net is composed by a hierarchical path from top to the leaf-equivalence
cell, I1/I2/I3/NET1. Each instance (I1, I2…), refers to an equivalence point and NET1 is
the local net inside the last equivalence point. The local net indicates that it is not a port
of that equivalence point. For example, if X1/N1 is connected to top-level net NT1, you
must specify the latter one. In addition, nets that do not meet these criteria or are not
found in the cross-reference database are reported in the LAYOUT_ERRORS file.
A line that starts with two slashes (//) is a comment.
An incorrectly formatted file results in empty output and a warning message in the
summary file. The IC Validator tool exits the xref_to_double_property() function but
continues running the downstream functions.
The cell-level net can also be defined, as shown in the following format:
cellname net property-name-1 property-name-2
equiv_cell schematic_net-1 value value
equiv_cell schematic_net-2 value value
equiv_cell schematic_net-3 value value
...
The cellname is a predefined keyword that indicates an additional file format used to
define properties by a cell-level net.
The cell in the first column must be an equiv-cell and matic_net-X must be the non-port
net under the equiv-cell.
output_from_layer
Required. Specifies the layer used to create the output property layer. This layer must be
connected in the connect database specified by the in_connect_sequence argument.
For each net, the xref_to_double_property() function selects an arbitrary polygon,
attaches the properties on it, and writes it to the output polygon layer.
in_connect_sequence
Required. Specifies the connect database in which the output_from_layer layer is
connected.
Note:
This database must be the output of another xref_to_property() function or the
get_netlist_connect_database() function.
out_connect_sequence
Required. Specifies the output connect database that contains the derived layer.
name
Optional. Specifies the name used by the IC Validator tool for the output layer. This name
is displayed in various output log files, such as the summary, tree, and distributed
processing log files. It is used only for log files; runset variables are not changed. The
default is the name of the layer being created.
property_merge_methods
Optional. Specifies that all of the property types and merge methods in the property file
must be included when non-empty property merge methods are defined. The
IC Validator tool uses the first entry of a property merge method to account for that
property. For a DOUBLE property, the merge_method=MAX setting is used. If a property is
defined by a property merge method, but does not show up in the property file, a warning
message is reported.
❍ property_name. Required. Specifies the user-defined name of the property.
❍ property_type. Specifies the data type of the property. The default is STRING.
❍ merge_method. Specifies the behavior of the IC Validator tool when two or more
entries point to the same layout net. This occurs when the duplicated entries are
defined in the property file, or two nets belong to the same composited net when
using the short_equivalent_nodes() function. The default is MAX.
■ MIN. Specifies the minimum value of the DOUBLE property.
Function Group
COMMAND. See “Function Order in Runsets” on page A-11 for more information.
Licenses
Native licensing. This function requires the following IC Validator license:
ICValidator2-GeometryEngine.
Example
xref = compare(state = compare_settings,
schematic = schematic_netlist_db,
layout = layout_netlist_db);
POLY_ID = xref_to_property(xref_db = xref,
property_file = "VoltageFile.txt",
output_from_layer = POLY,
in_connect_sequence = cdb_xref,
cdb_xref);
POLY_V = net_polygon_by_property(connect_sequence = cdb_xref,
output_from_layer = POLY,
net_polygon_function = net_function,
layer_groups = {"POLY_ID" => POLY_ID});
See Also
net_polygon_by_property()
text_to_double_property()
xref_to_double_property()
This chapter provides descriptions of the utility functions available with the IC Validator
physical verification tool.
In addition to the documentation conventions shown in the Preface, the following convention
is used in the documentation of the IC Validator syntax.
Convention Description
4-1
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
General-Purpose Functions
The functions defined in this section can be used any place in the runset, including in remote
functions. See “Introduction to Remote Functions” on page 4-32.
These functions do not require any additional IC Validator licenses. See the Licensing and
Resource Requirements chapter in the IC Validator User Guide for more information.
There are five types of general-purpose functions:
• Math Functions
• Matrix Functions
• String Functions
• Diagnostics Functions
• Decimal and Integer Number Conversions
Math Functions
The IC Validator tool provides the math functions described in this section.
These functions are defined in the math.rh library file. When using these functions in a
remote function, you must explicitly include this library file in the remote function. For
example, include math.rh in the remote function specified by the user_functions_file
argument of the compare() function.
Trigonometry Functions
Several trigonometry functions are available.
acos()
Calculates the arc cosine of the specified value.
Syntax
acos(
x = double
);
Returns
double
asin()
Calculates the arc sine of the specified value.
Syntax
asin(
x = double
);
Returns
double
atan()
Calculates the arc tangent of the specified value.
Syntax
atan(
x = double
);
Returns
double
atan2()
Calculates the arc tangent using two values, atan(y,x).
Syntax
atan2(
y = double
x = double
);
Returns
double
cos()
Calculates the cosine of the specified value.
Syntax
cos(
x = double
);
Returns
double
cosh()
Calculates the hyperbolic cosine of the specified value.
Syntax
cosh(
x = double
);
Returns
double
sin()
Calculates the sine of the specified value.
Syntax
sin(
x = double
);
Returns
double
sinh()
Calculates the hyperbolic sine of the specified value.
Syntax
sinh(
x = double
);
Returns
double
tan()
Calculates the tangent of the specified value.
Syntax
tanh(
x = double
);
Returns
double
tanh()
Calculates the hyperbolic tangent of the specified value.
Syntax
tanh(
x = double
);
Returns
double
dbleq()
Returns the value true if the two specified values are equivalent; otherwise, returns the value
false.
Syntax
dbleq(
x = double
y = double
);
Returns
Boolean
dblge()
Returns the value true if the first specified value is greater than or equivalent to the second
specified value; otherwise, returns the value false.
Syntax
dblge(
x = double
y = double
);
Returns
Boolean
dblgt()
Returns the value true if the first specified value is greater than the second specified value;
otherwise, returns the value false.
Syntax
dblgt(
x = double
y = double
);
Returns
Boolean
dblle()
Returns the value true if the first specified value is less than or equivalent to the second
specified value; otherwise, returns the value false.
Syntax
dblle(
x = double
y = double
);
Returns
Boolean
dbllt()
Returns the value true if the first specified value is less than the second specified value;
otherwise, returns the value false.
Syntax
dbllt(
x = double
y = double
);
Returns
Boolean
dblne()
Returns the value true if the two specified values are not equivalent; otherwise, returns the
value false.
Syntax
dblne(
x = double
y = double
);
Returns
Boolean
The type of comparison performed by the dblcmp() and dblcmpd() utility functions can be
any one of these values:
• DBL_EQ
• DBL_NE
• DBL_LT
• DBL_LE
• DBL_GT
• DBL_GE
dblcmp()
Returns the value true if the two specified values satisfy the type of comparison, treating
close doubles as equal; otherwise, returns the value false.
Syntax
dblcmp(
x = double
y = double
mode = {DBL_EQ, DBL_NE, DBL_LT, DBL_LE, DBL_GT, DBL_GE},
rel_tol = double = DBL_CMP_REL_TOL,
abs_tol = double = DBL_CMP_ABS_TOL
);
Returns
Boolean
dblcmpd()
Returns the value 1.0 if the two specified values satisfy the type of comparison, treating
close doubles as equal; otherwise, returns the value 0.0.
Syntax
dblcmpd(
x = double
y = double
mode = {DBL_EQ, DBL_NE, DBL_LT, DBL_LE, DBL_GT, DBL_GE},
rel_tol = double = DBL_CMP_REL_TOL,
abs_tol = double = DBL_CMP_ABS_TOL
);
Returns
double
double_constraint_overlap()
Returns the value true if the two constraints of double overlap, treating close doubles as
equal; otherwise, returns the value false. If two endpoints are very near each other, but are
exclusive endpoints, they might not overlap as a result. If two endpoints are very near each
other, but are inclusive endpoints, they might overlap as a result. If one endpoint is inclusive
and the other endpoint is exclusive, the traditional floating point comparison is used to
determine overlap.
Syntax
double_constraint_overlap(
x = double
y = double
mode = {DBL_EQ, DBL_NE, DBL_LT, DBL_LE, DBL_GT, DBL_GE},
rel_tol = double = DBL_CMP_REL_TOL,
abs_tol = double = DBL_CMP_ABS_TOL
);
Returns
Boolean
Miscellaneous Functions
Functions are available for various operations, such as finding the absolute value.
abs()
Returns the absolute value of the specified value.
Syntax
abs(
x = double
);
Returns
double
ceil()
Returns the smallest integer that is greater than or equal to the specified value. For
example, ceil(2.3) returns the value 3.
Syntax
ceil(
x = double
);
Returns
double
dtoi()
Truncates the specified value to an integer. For example, dtoi(2.3) returns the value 2.
Syntax
dtoi(
x = double
);
Returns
integer
erf()
Returns the error function of x; defined as erf(x) = 2/sqrt(pi)* integral from 0 to x of
exp(-t*t) dt.
Syntax
erf(
x = double
);
Returns
double
exp()
x
Calculates the exponential of the specified value, e .
Syntax
exp(
x = double
);
Returns
double
floor()
Returns the largest integer that is less than or equal to the specified value. For example,
floor(2.3) returns the value 2.
Syntax
floor(
x = double
);
Returns
double
fmod()
Calculates the floating point remainder of x divided by y. For example, fmod(2.7, 1.1)
returns the value 0.5.
Syntax
fmod(
x = double
y = double
);
Returns
double
isinf()
Returns the value true if the double evaluates to positive infinity or negative infinity;
otherwise, returns the value false. See the isnan() function for evaluation to “not a
number”.
Syntax
isinf(
x = double
);
Returns
Boolean
isnan()
Returns the value true if the double evaluates to "not a number" (NaN); otherwise, returns
the value false. See the isinf() function for evaluation to infinity.
Syntax
isnan(
x = double
);
Returns
Boolean
log()
Calculates the natural logarithm of the specified value, loge(x).
Syntax
log(
x = double
);
Returns
double
log10()
Calculates the logarithm with base 10 of the specified value, log10(x).
Syntax
log10(
x = double
);
Returns
double
max()
Returns the greater of the two specified values.
Syntax
max(
x = double
y = double
);
Returns
double
min()
Returns the lesser of the two specified values.
Syntax
round(
x = double
y = double
);
Returns
double
round()
Returns the integer value that is nearest to the specified value. For example, round(2.7)
and round(3.2) return the value 3.
Syntax
round(
x = double
);
Returns
double
sqrt()
Calculates the square root of the specified value.
Syntax
sqrt(
x = double
);
Returns
double
Matrix Functions
The IC Validator tool provides the matrix functions described in this section.
These functions translate the vmax and vmin properties.
matrix_max()
Specifies the following three usages:
• matrix_max(matrix1, column1, value). The output value is the maximum element
of the column1-th column of matrix1.
Example:
M1 {{6,2,3}, {1,5,4}}, matrix_max(M1, 2, value) = true and value = 4
• matrix_max(matrix1, column1, value, column2). First, find the row which contains
the maximum element of the column1-th column of matrix1. Second, return the
element of the column2-th column in the found row in matrix1. When the maximum
element of the column1-th column of matrix1 is not unique, the row with the minimum
row index is chosen.
Example 1:
M1 {{6,2,3}, {1,5,4}}, matrix_max(M1, 2, value, 0) = true and
value = 1
Example 2:
M1 {{6,2,4}, {1,5,4}}, matrix_max(M1, 2, value, 0) = true and
value = 6
Example 2:
M1 {{6,2,4}, {1,5,4}} and M2 {{6,7,8}, {9,10,11}},
Limitations:
• column1 should be a nonnegative value, as should column2 when explicitly specified.
• column1 should be less than the column count of matrix1 and column2 must be less
than the column count of matrix1 or matrix2 (when matrix2 is explicitly specified.
• The row count of matrix1 must be equal to that of matrix2 if explicitly specified.
If one of these limitations exists or the specified matrix1 or matrix2 is empty, the
matrix_min() function returns the value false; otherwise, returns true. If the function
returns false, the value is meaningless.
Syntax
matrix_max(
matrix1 = list_of_list_of_double,
column1 = integer,
value = {double, ...},
column2 = integer, //optional
matrix2 = out_double //optional
);
Returns
Boolean
Arguments
matrix1
Required. Specifies a two-dimensional matrix.
column1
Required. Specifies a nonnegative integer i that indicates the ith column of matrix1.
value
Required. Specifies a double data type variable to store the returned double value.
column2
Optional. Specifies a nonnegative integer i that indicates the ith column of matrix1 or
matrix2 (when matrix2 is explicitly specified). The default is a NULL_INTEGER.
matrix2
Optional. Specifies the second two-dimensional matrix. The default value is an empty list
“{}”.
matrix_min()
Specifies the following three usages:
• matrix_min(matrix1, column1, value). The output value is the minimum element of
the column1-th column of matrix1.
Example:
M1 {{6,2,4}, {1,5,3}}, matrix_min(M1, 2, value) = true and value = 3
• matrix_min(matrix1, column1, value, column2). First, find the row which contains
the minimum element of the column1-th column of matrix1. Second, return the element
of the column2-th column in the found row in matrix1. When the minimum element of
the column1-th column of matrix1 is not unique, the row with the minimum row index is
chosen.
Example 1:
M1 {{6,2,4}, {1,5,3}}, matrix_max(M1, 2, value, 0) = true and
value = 1
Example 2:
M1 {{6,2,4}, {1,5,3}}, matrix_min(M1, 2, value, 0) = true and
value = 6
Example 2:
M1 {{6,2,4}, {1,5,4}} and M2 {{6,7,8}, {9,10,11}},
matrix_min(M1, 2, value, 0, M2) = true and value = 6
Limitations:
• column1 should be a nonnegative value, as should column_index2 when explicitly
specified.
• column1 should be less than the column count of matrix1 and column2 must be less
than the column count of matrix1 or matrix2 (when matrix2 is explicitly specified.
• The row count of matrix1 must be equal to that of matrix2 if explicitly specified.
Syntax
matrix_min(
matrix1 = list_of_list_of_double,
column1 = integer,
value = {double, ...},
column2 = integer, //optional
matrix2 = out_double //optional
);
Returns
Boolean
Arguments
matrix1
Required. Specifies a two-dimensional matrix.
column1
Required. Specifies a nonnegative integer i that indicates the ith column of matrix1.
value
Required. Specifies a double data type variable to store the returned double value.
column2
Optional. Specifies a nonnegative integer i that indicates the ith column of matrix1 or
matrix2 (when matrix2 is explicitly specified). The default is a NULL_INTEGER.
matrix2
Optional. Specifies the second two-dimensional matrix. The default value is an empty list
“{}”.
String Functions
The IC Validator tool provides the string functions described in this section.
These functions are defined in the string.rh library file. When using these functions in a
remote function, you must explicitly include this library file in the remote function.
find()
Searches for the substring needle in the string haystack, beginning at the offset start. The
offset start is the value of the integer argument. The return value is the place it starts at, or
-1 if the substring is not found. The default of the integer argument is 0.
Syntax
find(
haystack = "string",
needle = "string",
integer = integer
);
Returns
integer
Examples
Here are two examples of the find() function.
This example returns the value 5:
find("Rule M1", "M1", 0)
rfind()
Similar to find(), except that it starts looking from the end.
Syntax
rfind(
haystack = "string",
needle = "string"
);
Returns
integer
split_string()
Splits the input string into a list of token strings. The input string is split whenever one of the
characters in the delimiter string is found in it.
• The delimiters are case-sensitive.
• The delimiters never appear in an output token string.
• When the input string is empty or consists of only delimiters, the output list of token
strings is empty.
• When the input string is not empty and does not contain any of the delimiters, the output
list has a single token string.
Syntax
split_string(
input = "string",
delimiters = "string"
);
Returns
list of string
Examples
Table 4-1 shows examples of the split_string() function.
Table 4-1 Examples of split_string() Function
“The quick brown fox jumps over the lazy dog.” “ .” “The”, “quick”, “brown”,
(Space followed by “fox”, “jumps”, “over”, “the”,
a period.) “lazy”, “dog”
strcasecmp()
Compares two strings, s1 and s2. Returns a negative value if s1 is less than s2, a positive
value if s1 is greater than s2, or 0 (zero) if the strings are equal. This function is similar to
the strcmp() function, but the strcasecmp() function is not case-sensitive.
The strings are compared byte-by-byte from the beginning. One string is considered less
than the other if its first non-matching byte has a lower ASCII value. When one string
matches the prefix of another, longer string, the shorter string is considered less than the
longer string.
Syntax
strcasecmp(
s1 = "string",
s2 = "string"
);
Returns
integer
Examples
Here are five examples of the strcasecmp() function.
This example returns the value 0; the strings are equal:
strcasecmp("abc", "abc");
This example returns a negative value; numerical characters have a lower value in the
POSIX locale:
strcasecmp("1", "one");
This example returns a positive value; when one string matches the prefix of the other string,
the longer string has a greater value:
strcasecmp("abcd", "abc");
This example returns a positive value; the function is not case-sensitive, and when one
string matches the prefix of the other string, the longer string has a greater value:
strcasecmp("ABCd", "abc");
strcmp()
Compares two strings, s1 and s2. Returns a negative value if s1 is less than s2, a positive
value if s1 is greater than s2, or 0 (zero) if the strings are equal.
The strings are compared byte-by-byte from the beginning. One string is considered less
than the other if its first non-matching byte has a lower ASCII value. When one string
matches the prefix of another, longer string, the shorter string is considered less than the
longer string.
Syntax
strcmp(
s1 = "string",
s2 = "string"
);
Returns
integer
Examples
Here are five examples of the strcmp() function.
This example returns the value 0; the strings are equal:
strcmp("abc", "abc");
This example returns a negative value; uppercase letters have a lower value than lowercase
letters in the POSIX locale:
strcmp("ABC", "abc");
This example returns a negative value; uppercase letters have a lower value than lowercase
letters in the POSIX locale:
strcmp("ABCd", "abc");
This example returns a negative value; numerical characters have a lower value in the
POSIX locale:
strcmp("1", "one");
This example returns a positive value; when one string matches the prefix of the other string,
the longer string has a greater value:
strcmp("abcd", "abc");
strcspn()
Reports the length of the matching substring, starting from the beginning of the input, that
contains none of the specified characters.
Syntax
strcspn(
input = "string",
letters = "string"
);
Returns
integer
Examples
Here are two examples of the strcspn() function.
This example returns the value 5:
strcspn("Rule M1", "M1", 0)
string_match()
Compares two strings. Returns the value true if the input matches the pattern; otherwise, the
returns the value false.
String matching using metacharacters is allowed:
• * matches 0 or more characters.
• ? matches 1 character.
• [] matches any character specified in the brackets.
• - specifies a range.
• [^] matches any character not specified in the brackets.
Note:
The ! metacharacter is not supported.
When you specify a range using the - metacharacter, the order of the characters is:
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ]^ _ `
a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
Syntax
string_match(
input = "string",
pattern = "string"
);
Returns
Boolean
Arguments
input
Required. Specifies a string variable.
pattern
Required. Specifies a regular expression pattern.
strncasecmp()
Compares the specified number of characters (num) at the beginning of two strings, s1 and
s2. Returns a negative value if s1 is less than s2, a positive value if s1 is greater than s2, or
0 (zero) if the strings are equal. This function is similar to the strncmp() function, but the
strncasecmp() function is not case-sensitive.
The strings are compared byte-by-byte from the beginning. One string is considered less
than the other if its first non-matching byte has a lower ASCII value. When one string
matches the prefix of another, longer string, the shorter string is considered less than the
longer string. If the first num characters match, then the function returns 0, regardless of any
subsequent characters in the strings.
Syntax
strncasecmp(
s1 = "string",
s2 = "string",
num = integer
);
Returns
integer
Examples
Here are five examples of the strncasecmp() function.
This example returns the value 0; the function is not case-sensitive:
strncasecmp("ABC", "abc", 3);
This example returns the value 0; the strings are considered equal because only the first
three characters are compared::
strncasecmp("abcd", "abc", 3);
This example returns a positive value; when one string matches the prefix of the other string,
the longer string has a greater value:
strncasecmp("abcd", "abc", 4);
This example returns the value 0; the strings are considered equal because only the first
three characters are compared:
strncasecmp("ABCd", "abc", 3);
This example returns a positive value; the function is not case-sensitive, and when one
string matches the prefix of the other string, the longer string has a greater value:
strncasecmp("ABCd", "abc", 4);
strncmp()
Compares the specified number of characters (num) at the beginning of two strings, s1 and
s2. Returns a negative value if s1 is less than s2, a positive value if s1 is greater than s2, or
0 (zero) if the strings are equal. This function is similar to the strcmp() function, but the
strncmp() function compares only the number of characters at the beginning of the strings
specified by the num argument.
The strings are compared byte-by-byte from the beginning. One string is considered less
than the other if its first non-matching byte has a lower ASCII value. When one string
matches the prefix of another, longer string, the shorter string is considered less than the
longer string. If the first num characters match, then the function returns 0, regardless of any
subsequent characters in the strings.
Syntax
strncmp(
s1 = "string",
s2 = "string",
num = integer
);
Returns
integer
Examples
Here are five examples of the strncmp() function.
This example returns the value 0; the strings are equal:
strncmp("abc", "abc", 3);
This example returns a negative value; uppercase letters have a lower value than lowercase
letters in the POSIX locale:
strncmp("ABC", "abc", 3);
This example returns the value 0; the strings are considered equal because only the first
three characters are compared:
strncmp("abcd", "abc", 3);
This example returns a positive value; when one string matches the prefix of the other string,
the longer string has a greater value:
strncmp("abcd", "abc", 4);
This example returns a negative value; numerical characters have a lower value in the
POSIX locale:
strncmp("1", "one", 3);
strspn()
Returns the length of the matching substring, starting from the beginning of the input, that
contains only the specified characters.
Syntax
strspn(
input = "string",
letters = "string"
);
Returns
integer
Examples
Here are two examples of the strspn() function.
This example returns the value 2:
strspn("Rule M1", "M1", 0)
strtod()
Converts a string to a double value.
Syntax
strtod(
s = "string"
);
Returns
double
Example
You can use the strtod() function to convert the value of an environment variable to a
corresponding double value.
For example, the environment variable NEWVAL is set on a UNIX command-line before
calling IC Validator in a runset.
% setenv NEWVAL 8734.5
strtoi()
Converts a string to an integer value.
Syntax
strtoi(
s = "string"
);
Returns
integer
Example
You can use the strtoi() function to convert the value of an environment variable to a
corresponding integer value.
For example, the environment variable NEWVAL is set on a UNIX command-line before
calling IC Validator in a runset.
% setenv NEWVAL 8734.5
substr()
Returns the substring that starts at the specified, 0-based, index and that has the length
specified to the end of the input string.
Syntax
substr(
input = "string",
start = integer,
length = integer
);
Returns
string
Examples
Here are two examples of the substr() function.
This example returns the string “M1”:
substr("M1 Rule", 0, 2)
tolower()
Returns the string with all letters converted to lowercase.
Syntax
tolower(
s = "string"
);
Returns
string
toupper()
Returns the string with all letters converted to uppercase characters.
Syntax
toupper(
s = "string"
);
Returns
string
Diagnostics Functions
The IC Validator tool provides the diagnostic functions described in this section.
These functions are defined in the diagnostics.rh library file. When using these functions in
a remote function, you must explicitly include this library file in the remote function.
error()
Writes the provided message then terminates execution.
Syntax
error(
message = "string"
);
Returns
void
fatal()
Writes the provided message then terminates execution.
Syntax
fatal(
message = "string"
);
Returns
void
note()
Writes the provided message but does not terminate execution.
Syntax
note(
message = "string"
);
Returns
void
warning()
Writes the provided message but does not terminate execution.
Syntax
warning(
message = "string"
);
Returns
void
double_to_integer_coordinate()
Converts a double to an integer based on the working resolution. Exact integer
representations based on the working resolution are necessary for making comparisons of
numbers that represent coordinates.
Syntax
double_to_integer_coordinate(
x = double
);
Returns
integer
integer_coordinate_to_double()
Converts an integer coordinate to a double based on the working resolution.
Syntax
integer_coordinate_to_double(
x = integer
);
Returns
double
File Functions
The file function defined in this section can be used for any file name parameter in any
function.
search_include_path()
The search_include_path() function tells IC Validator to search for the specified file in
any include path specified with the -I command-line option. The specified file is searched
for in the current run directory, and then in the include path. See the Command-Line Options
section in the “IC Validator Basics” chapter of the IC Validator User Guide for information
about the -I command-line option. The default include path is the $ICV_HOME_DIR/
include directory.
For example, using
compare(...,
user_functions_file = search_include_path("lvs_functions.rs"),
...);
when the IC Validator tool is run with the -I includemedir command-line option, sets the
user_functions_file as
Syntax
search_include_path(
filename = "string"
);
Arguments
filename
Required. Specifies a file name. The full path is not required.
The density function sends each subwindow to the remote function. The remote function
operates on data and results are accumulated by the density function.
The remote function is passed to the parent function by name. For example,
polygon_features(
layer = layerA
polygon_function = user_polygon_function // remote function
);
In addition to the following utility functions, you can use the general purpose functions, such
as note() function to write a message in the summary file, and to the screen when you use
the -verbose option. See “General-Purpose Functions” on page 4-3 for more information.
POLY
fringing region
cap_area()
cap_fringe_edge()
Figure 4-2 Example of Capacitor Utility Function Results: Overlap Capacitor Coincident Edge
Example
AA capacitor region AA
METAL
cap_area() METAL
BB CC cap_coincident_edge()
BB CC
POLY
cap_perim()
cap_area()
Returns the area of the capacitor. See Figure 4-1 and Figure 4-2.
Syntax
cap_area();
Returns
double
cap_area_capval()
Returns the capacitance per unit area.
Syntax
cap_area_capval();
Returns
double
cap_area_capval_assigned()
Returns the value true if you have specified a nonzero value for the optional area_capval
argument of the capacitor() function; otherwise returns the value false.
Syntax
cap_area_capval_assigned();
Returns
Boolean
cap_coincident_edge()
Returns the length of the coincident edge where terminal_a is coincident with
terminal_b. See Figure 4-2.
Syntax
cap_coincident_edge();
Returns
double
cap_coinedge_capval()
Returns the capacitance per unit length (in F/m) of the coincident edge where terminal_a
is coincident with terminal_b.
Syntax
cap_coinedge_capval();
Returns
double
cap_coinedge_capval_assigned()
Returns the value true if you have specified a nonzero value for the optional
coinedge_capval argument of the capacitor() function; otherwise, returns the value
false.
Syntax
cap_coinedge_capval_assigned();
Returns
Boolean
cap_fringe_edge()
Returns the length of the capacitor edge of terminal_b overlapped by terminal_a. See
Figure 4-1.
Syntax
cap_fringe_edge();
Returns
double
cap_fringe_edge_capval()
Returns the capacitance per unit length (in F/m) of the edge of terminal_b overlapped by
terminal_a.
Syntax
cap_fringe_edge_capval();
Returns
double
cap_fringe_edge_capval_assigned()
Returns the value true if you have specified a nonzero value for the optional
fringe_edge_capval argument of the capacitor() function; otherwise, returns the value
false.
Syntax
cap_fringe_edge_capval_assigned();
Returns
Boolean
cap_length()
Returns the length of the extracted capacitor.
Syntax
cap_length();
Returns
double
cap_perim()
Returns the perimeter of the capacitor. See Figure 4-2.
Syntax
cap_perim();
Returns
double
cap_perim_capval()
Returns the capacitance per unit length of capacitor perimeter.
Syntax
cap_perim_capval();
Returns
double
cap_perim_capval_assigned()
Returns the value true if you have specified a nonzero value for the optional perim_capval
argument of the capacitor() function; otherwise, returns the value false.
Syntax
cap_perim_capval_assigned();
Returns
Boolean
cap_width()
Returns the width of the extracted capacitor.
Syntax
cap_width();
Returns
double
ind_area()
ind_width()
ind_bbox_area()
ind_space() ind_bbox_height()
ind_length()
ind_bbox_width()
ind_area()
Returns the area of inductor. See Figure 4-3.
Syntax
ind_area();
Returns
double
ind_bbox_area()
Returns the area of the bounding box. The edges of the bounding box are the outside edges
of the device. See Figure 4-3.
Syntax
ind_bbox_area();
Returns
double
ind_bbox_height()
Returns the height of the bounding box that contains the inductor. The height is the longer
edge length of the bounding box. See Figure 4-3.
Syntax
ind_bbox_height();
Returns
double
ind_bbox_width()
Returns the width of the bounding box that contains the inductor. The width is the shorter
edge length of the bounding box. See Figure 4-3.
Syntax
ind_bbox_width();
Returns
double
ind_edge()
Returns a number that represents the number of edges on a polygon.
Syntax
ind_edge();
Returns
double
ind_length()
Returns the length from one end of the inductor body to the other end. See Figure 4-3.
Syntax
ind_length();
Returns
double
ind_space()
Returns the shortest distance between the turns of a coil. See Figure 4-3.
Syntax
ind_space();
Returns
double
ind_turn()
Turns of the spiral inductor. For example, the inductor shown in Figure 4-4 has 2 turns.
Figure 4-4 Two-Turn Inductor
Syntax
ind_turn();
Returns
double
ind_width()
Returns the width of a coiled wire. See Figure 4-3.
Syntax
ind_width();
Returns
double
mos_length_2()
mos_width_2()
mos_gate_area()
mos_width_1()
mos_source_area()
mos_drain_area()
mos_width_num_45() = 2
mos_width_num_90() = 2 mos_length_1()
mos_width_bend_1()
mos_width_bend_2()
mos_contact_diffusion_area_list()
Fractures diffusion polygons into regions based on the placement of diffusion contacts, and
returns the area of the diffusion regions that are split by these contacts. The function is
invoked on an individual pairing of a body polygon to a source or drain polygon. This
behavior means that separate calls to the function are necessary for source area fracturing
and for drain area fracturing. Also, separate calls to the function are necessary for each gate
polygon that is a member of a multiple finger device.
Note:
Only straight and bent gates with vertical or horizontal orientations are allowed.
Unlike the mos_proximity_list() function, which has a direction argument, the
mos_contact_diffusion_area_list function determines the direction based on the input
polygon sets for body and source_drain, and the touching edge between them.
In the following example, there are two body polygons. The property function of the nmos(),
pmos(), or mos_select() function is executed twice, independently, one time for each body
polygon. The direction determination for each device is independent, too. In this example,
each body polygon has only one touching edge. As shown, the target direction for the lower
body polygon is RIGHT.
body polygons
contact polygons
touching edge
Syntax
mos_contact_diffusion_area_list(
body = polygon_set,
source_drain = polygon_set,
contact = polygon_set,
area = {out_double, ...},
width = {out_double, ...},
count = out_integer
);
Returns
void
Arguments
body
Required. Specifies a gate layer.
source_drain
Required. Specifies a diffusion layer representing either the source or the drain polygon,
but not both. A diffusion layer cannot touch the body more than one time.
contact
Required. Specifies a contact layer specified in the processing_layer_hash argument
of the nmos() or pmos() function and returned by a call to the
dev_processing_layer() function. The underlying source_drain polygon is fractured
according to the placement of contact in two ways:
❍ The source_drain polygon is fractured along lines perpendicular to the body edge
that run between the body edge and the center point of each contact layer polygon.
❍ The source_drain polygon is fractured along lines running exactly midway between
and parallel to fracture lines created by contact polygon center points.
The center point of a contact layer is calculated based on the contact layer bounding box.
That is, where lt is left top and rb is right bottom:
center_x = (lt.x + rb.x) / 2
center_y = (lt.y + rb.y) / 2
A contact is involved in the source_drain polygon fracturing only when its center point
is inside the source_drain polygon.
Figure 4-7 shows an example of contact center point fracture lines.
area
Required. Specifies the variables where the area of each region is stored.
Note:
List elements follow this order:
1. From top to bottom for vertical MOS.
2. From right to left for horizontal MOS.
width
Required. Specifies the variables where the width of each region is stored.
Note:
The element order is the same as for area.
count
Required. Specifies the variable where the number of fracture regions is stored. This
variable represents the size of the area and width list of doubles. If there is no contact
between a body polygon and a source_drain polygon, count is 0 (zero).
Example
Figure 4-8 shows an example of the areas and widths into which diffusion is fractured. The
count is 11; a partial overlap is not counted when the center point of the contact is outside
the src_drn_layer.
Figure 4-8 Area and Widths of Fractured Regions
mos_drain_area()
Returns the area of the drain. See Figure 4-5.
Syntax
mos_drain_area();
Returns
double
mos_drain_perim()
Returns the perimeter of the drain minus the width of the gate that touches the drain.
Syntax
mos_drain_perim();
Returns
double
mos_gate_area()
Returns the area of the gate. See Figure 4-5.
Syntax
mos_gate_area();
Returns
double
mos_gate_perim()
Returns the perimeter of the gate.
Syntax
mos_gate_perim();
Returns
double
mos_get_dfm_double()
Returns a value, based on the input values, from a user provided table. The file containing
the table must be specified using the dfm_files argument of the init_device_matrix()
function.
See Appendix 9, Table-Based Lookup Functionality” in the IC Validator LVS User Guide for
more information.
Syntax
mos_get_dfm_double(
table = "string",
index = {double, ...}
);
Returns
double
Arguments
table
Required. Specifies the table that contains data from which a value is returned.
index
Required. Specifies the input variables used to determine the return value.
mos_length_1()
Returns the length of the gate between the source and drain at one end. See Figure 4-5.
Syntax
mos_length_1();
Returns
double
mos_length_2()
Returns the length of the gate between the source and drain at the other end. See
Figure 4-5.
Syntax
mos_length_2();
Returns
double
mos_length_avg()
Returns the length of the center line from one terminal to the other.
Syntax
mos_length_avg();
Returns
double
mos_length_max()
Returns the maximum length of a gate.
Syntax
mos_length_max();
Returns
double
mos_length_min()
Returns the minimum length of a gate.
Syntax
mos_length_min();
Returns
double
mos_length_num_45()
Returns the number of 45-degree bends along the length of the gate.
Syntax
mos_length_num_45();
Returns
double
mos_length_num_90()
Returns the number of 90-degree bends along the length of the gate.
Syntax
mos_length_num_90();
Returns
double
mos_nrd()
Returns the number of squares of drain resistance.
Syntax
mos_nrd();
Returns
double
mos_nrs()
Returns the number of squares of source resistance.
Syntax
mos_nrs();
Returns
double
mos_proximity_corner_list()
The mos_proximity_corner_list() function measures the Well Proximity Effect (WPE)
corner effect values by extracting projection distances between body vertices and corners of
the projection_polygons. The function calculates two lists of measurements representing
the horizontal and vertical distances between the specified body (gate) corner and each
pointed concave projection_polygons (well) corner. The projection_polygons should
enclose the body for the gate-to-well corner projection of interest.
This function can be called multiple times within the remote function called by the
mos_select(), nmos(), and pmos() functions.
Syntax
mos_proximity_corner_list(
body = polygon_set,
projection_polygons = polygon_set,
perpendicular_projection_lengths = {out_double, ...},
parallel_projection_lengths = {out_double, ...},
direction = LEFT_TOP | LEFT_BOTTOM |
RIGHT_TOP | RIGHT_BOTTOM,
count = out_integer
);
Returns
void
Arguments
body
Required. Specifies the base polygon set from which projections are measured, for
example, the gate. The polygon set can be returned and manipulated using all standard
polygon_set utility functions. See “polygon_set Property Functions” on page 4-79.
projection_polygons
Required. Specifies the polygon set to the projection that is measured from the body, for
example, NWELL. This polygon set should enclose the body polygon set.
If the input polygon set is returned directly from the dev_processing_layer() function,
the nonnegative range value specified in the processing_layer_hash argument of the
mos_select(), nmos(), and pmos() functions is used to minimize polygon searching in
the mos_proximity_corner_list() function. Otherwise, if the polygon set is from a
processing layer with a negative range value or is derived from other polygon sets, all
polygons are processed. Using a range value minimizes any hierarchical flattening that
would otherwise occur when searching for interacting processing layer polygons out to
an unbounded distance.
perpendicular_projection_lengths
Required. Specifies the variables where projection distances are stored from the
extracted projection_polygons corner to the vertex of the body, in the direction that is
perpendicular to the body width.
parallel_projection_lengths
Required. Specifies the variables where projection distances are stored from the
extracted projection_polygons corner to the vertex of the body, in the direction that is
parallel to the body width.
Figure 4-9 shows projection determination.
Figure 4-9 Projection Determination
perpendicular parallel
Diffusion
parallel perpendicular
Gate
Diffusion Gate Diffusion Diffusion
parallel = parallel_projection_lengths
perpendicular = perpendicular_projection_lengths
direction
Required. Determines the corner of body from which the projection length is calculated
to the corresponding projection_polygons polygon_set: LEFT_TOP, LEFT_BOTTOM,
RIGHT_TOP, or RIGHT_BOTTOM.
Diffusion
RIGHT_BOTTOM RIGHT_TOP
LEFT_BOTTOM RIGHT_BOTTOM
count
Required. Specifies the variable where the number of measured corner projections is
stored,. This number is the size of the perpendicular_projection_lengths and
parallel_projection_lengths lists. (Both the lists are the same length.)
Example
See the mos_proximity_list() function for an example of using the
mos_proximity_corner_list() function.
Figure 4-11 is an example of polygon selection. The selected pointed concave corners are
marked with solid blue circles in this example. The concave corner marked with the dotted
blue circle is not selected because it is not pointed.
Figure 4-11 Example of Polygon Selection
LEFT_TOP RIGHT_TOP
Gate
LEFT_BOTTOM RIGHT_BOTTOM
See Also
mos_proximity_list()
mos_proximity_list()
The mos_proximity_list() function measures projection distances from a specified body
polygon set to one or more designated projection_data polygon sets. This function
consolidates measuring capabilities associated with all of the following physical parameters:
• The LOD (Length of Oxide Definition) values, which represent the distances from a gate
polygon to the LOD layer edge.
• The strained silicon effects parameters, which represent the distances projecting from
the gate width and length to nearby layers, including polysilicon, diffusion, or wells. The
nearby layers do not have interaction requirements with the gate layer.
• The WPE (Well Proximity Effect) values, which represent the distances projecting from
the gate width and length to an enclosing well layer edge.
In all cases, the function measures projections to a specified projection layer and in a given
direction relative to the body layer. Measurements to multiple projection layers can be made
using a single call to the function.
The function also returns a list of body layer region widths corresponding to each measured
projection. This list represents the manner in which a body layer polygon must be fractured
to measure multiple projections along its width. When the mos_proximity_list() function
is called with multiple projection_data list members, a common superset of body layer
fracture points is derived to enable simultaneous measurements of projection to all
members of the projection_data list. See the Example section for more information.
The mos_proximity_list() function can be called multiple times within the remote
function called by the mos_select(), nmos() and pmos() functions.
Syntax
mos_proximity_list(
body = polygon_set,
projection_data = {{polygon_set = polygon_set,
order = integer,
interaction = ENTERING | LEAVING |
ENTERING_LEAVING,
range = double,
projection_length = {out_double, ...}},
...},
direction = TOP | BOTTOM | LEFT | RIGHT,
width = {out_double, ...},
count = out_integer,
orientation = RELATIVE | ABSOLUTE
);
Returns
void
Arguments
body
Required. Specifies the base polygon set from which projections are measured, for
example, gate. This polygon set must interact with the gate polygon for each MOS
instance on which the mos_proximity_list() function is invoked. The polygon set can
be returned and manipulated using all standard polygon_set utility functions. See
“polygon_set Property Functions” on page 4-79.
projection_data
Required. Specifies the polygon sets and accompanying parameters that contain all
information used to simultaneously compute and store projections to the layers.
Note:
A maximum of seven polygon sets and accompanying information can be listed.
❍ polygon_set. Required. Projection is measured to this polygon set. The polygon
set is returned using the dev_processing_layer() function to select from the
processing_layer_hash layers specified in the mos_select(), nmos(), and
pmos() functions.
❍ order. Required. Determines which nearby polygon set can project on the body. The
value is a number from 0 to 50.
■ 0. Turns off measurement of projections to the corresponding polygon set.
■ 1. Selects the member of the polygon set that is closest to the body polygon,
within the range specified for the corresponding projection_data polygon_set.
■ 2. Selects the first two members of the polygon set that are closest to the body
polygon, within the range specified for the corresponding projection_data
polygon_set.
■ 3 through 50. Selects the first nth members of the polygon set that are closest to
the body polygon, within the range specified for the corresponding
projection_data polygon_set.
■ When the range argument is >0, the actual projection length between the body
argument and polygon_set polygons in the projection_data argument is
stored in the projection_length list member of the projection_data
argument, up to the maximum range value. If the actual projection length is
greater than the maximum range value, the range value is stored. The range
value is also stored if no projection is found.
❍ projection_length. Optional. Specifies the variable where the calculated projection
lengths are stored.
direction
Required. Determines the direction from the base polygon set in which the projection
length is calculated for the corresponding projection_data polygon_set: TOP, BOTTOM,
LEFT, or RIGHT.
width
Required. Specifies the variable where the body region widths corresponding to the
extracted distance projections are stored.
count
Required. Specifies the variable where the number of extracted divided body regions
calculated by the mos_proximity_list() function is stored.
orientation
Optional. Controls the orientation of the measurements. The default is RELATIVE.
❍ RELATIVE. Orientation is relative to the source and drain layers of the gate.
❍ ABSOLUTE. Orientation is relative to the body within the coordinate space of the cell.
Note:
A warning is reported if data is hierarchical and the orientation argument is
ABSOLUTE.
Example
Figure 4-12 shows extracting stress effect properties for an NMOS device. The NMOS
device is calculated in Example 4-1. The output array order is clockwise relative to the body
polygon, as shown in Figure 4-13.
Figure 4-12 Extracting Stress Effect Properties
pw_t0
se_t1
se_t0
sp_l0
pw_l0 se_l0 sp_r0
se_l1 pw_r0
se_r0
sp_l1
se_l2 se_r1
pw_l1 se_l3
sp_r1
sp_l2 se_r2 pw_r1
pw_l2 se_l4 se_r3
se_l5
se_b0
PWEL
se_b1
NWEL
poly
diff
pw_b0
// stress extraction
projections : list of projection_data_s = {
{processing_layer_poly, 3, ENTERING,
dev_processing_range("POLY")},
{processing_layer_well, 3, ENTERING_LEAVING,
dev_processing_range("NW")}
};
se_l = projections[1].projection_length;
mos_proximity_corner_list(body_layer2, proximity_layer_well,
perpendicular_lt, parallel_lt, LEFT_TOP, count_lt
);
mos_proximity_corner_list(body_layer2, proximity_layer_well,
perpendicular_lb, parallel_lb, LEFT_BOTTOM, count_lb
);
mos_proximity_corner_list(body_layer2, proximity_layer_well,
perpendicular_rt, parallel_rt, RIGHT_TOP, count_rt
);
mos_proximity_corner_list(body_layer2, proximity_layer_well,
perpendicular_rb, parallel_rb, RIGHT_BOTTOM, count_rb
);
dev_save_double_list_properties(
{{"sp_l", sp_l},
{"sp_r", sp_r},
{"sp_t", sp_t},
{"sp_b", sp_b},
{"se_l", se_l},
{"se_r", se_r},
{"se_t", se_t},
{"se_b", se_b},
{"parallel_lt", parallel_lt},
{"parallel_lb", parallel_lb},
{"parallel_rt", parallel_rt},
{"parallel_rb", parallel_rb}
}
);
}
nwel_copy = copy(NWELL);
nmos(
matrix = my_devices,
device_name = "nch",
drain = nsd,
gate = ngate,
source = nsd,
optional_pins = {{psub}},
property_function = my_func,
properties = {
{"sp_r", DOUBLE_LIST},
{"sp_l", DOUBLE_LIST},
{"sp_t", DOUBLE_LIST},
{"sp_b", DOUBLE_LIST},
{"se_r", DOUBLE_LIST},
{"se_l", DOUBLE_LIST},
{"se_t", DOUBLE_LIST},
{"se_b", DOUBLE_LIST},
{"parallel_lt", DOUBLE_LIST},
{"parallel_lb", DOUBLE_LIST},
{"parallel_rt", DOUBLE_LIST},
{"parallel_rb", DOUBLE_LIST}
},
processing_layer_hash = {
"POLY" => {layer1=POLY, range=5.0},
"NW" => {layer1=nwel_copy, range=5.0}
}
);
See Also
dev_recognition_layer()
mos_proximity_corner_list()
mos_source_area()
Returns the area of the source. See Figure 4-5.
Syntax
mos_source_area();
Returns
double
mos_source_perim()
Returns the perimeter of the source minus the width of the gate that touches the source.
Syntax
mos_source_perim();
Returns
double
mos_width_1()
Returns the width of the gate touching the source. See Figure 4-5.
Syntax
mos_width_1();
Returns
double
mos_width_2()
Returns the width of the gate touching the drain. See Figure 4-5.
Syntax
mos_width_2();
Returns
double
mos_width_avg()
Returns the average width, which is calculated as mos_gate_area/mos_length_avg.
Syntax
mos_width_avg();
Returns
double
mos_width_bend_1()
Returns the width of a single bent gate touching the source. If the gate polygon does not
have a bend or more than one bend, the result is 0. See Figure 4-6.
Syntax
mos_width_bend_1();
Returns
double
mos_width_bend_2()
Returns the width of a single bent gate touching the drain. If the gate polygon does not have
a bend or more than one bend, the result is 0. See Figure 4-6.
Syntax
mos_width_bend_2();
Returns
double
mos_width_max()
Returns the maximum width of a gate.
Syntax
mos_width_max();
Returns
double
mos_width_min()
Returns the minimum width of a gate.
Syntax
mos_width_min();
Returns
double
mos_width_num_45()
Returns the number of 45-degree bends along the width of the gate. See Figure 4-5.
Syntax
mos_width_num_45();
Returns
double
mos_width_num_90()
Returns the number of 90-degree bends along the width of the gate. See Figure 4-5.
Syntax
mos_width_num_90();
Returns
double
diode_area()
Returns the area of the diode.
Syntax
diode_area();
Returns
double
diode_perim()
Returns the perimeter of the diode.
Syntax
diode_perim();
Returns
double
bjt_base_area()
bjt_base_perim()
bjt_emitter_area()
bjt_collector_area() bjt_emitter_perim()
bjt_collector_perim()
bjt_collector_perim() bjt_emitter_area()
bjt_collector_area() bjt_emitter_perim()
bjt_base_perim() bjt_base_area()
bjt_base_area()
Returns the area of the bipolar base. See Figure 4-14 and Figure 4-15.
Syntax
bjt_base_area();
Returns
double
bjt_base_perim()
Returns the perimeter of the bipolar base. See Figure 4-14 and Figure 4-15.
Syntax
bjt_base_perim();
Returns
double
bjt_body_position()
Returns the user-specified setting of EMITTER, BASE, or COLLECTOR from the
body_position argument of the npn() or pnp() function.
Syntax
bjt_body_position();
Returns
bjt_body_position_result
bjt_collector_area()
Returns the area of the bipolar collector. See Figure 4-14 and Figure 4-15.
Syntax
bjt_collector_area();
Returns
double
bjt_collector_perim()
Returns the perimeter of the bipolar collector. See Figure 4-14 and Figure 4-15.
Syntax
bjt_collector_perim();
Returns
double
bjt_emitter_area()
Returns the area of the bipolar emitter. See Figure 4-14 and Figure 4-15.
Syntax
bjt_emitter_area();
Returns
double
bjt_emitter_perim()
Returns the perimeter of the bipolar emitter. See Figure 4-14 and Figure 4-15.
Syntax
bjt_emitter_perim();
Returns
double
res_width_term_a() res_width_
term_b()
res_perim()
resistor material
res_length_2()
res_length_num_45() = 2
res_length_num_90() = 8 resistor recognition layer
res_area()
Returns the area of resistor. See Figure 4-16.
Syntax
res_area();
Returns
double
res_length_1()
Returns the length along one edge that connects one terminal to another. See Figure 4-16.
Syntax
res_length_1();
Returns
double
res_length_2()
Returns the length along the opposite edge that connects one terminal to another. See
Figure 4-16.
Syntax
res_length_2();
Returns
double
res_length_avg()
Returns the length of the center line from one terminal to the other.
Syntax
res_length_avg();
Returns
double
res_length_max()
Returns the maximum length of a resistor.
Syntax
res_length_max();
Returns
double
res_length_min()
Returns the minimum length of a resistor.
Syntax
res_length_min();
Returns
double
res_length_num_45()
Returns the number of 45-degree bends along the length of the resistor. See Figure 4-16.
Syntax
res_length_num_45();
Returns
double
res_length_num_90()
Returns the number of 90-degree bends along the length of the resistor. See Figure 4-16.
Syntax
res_length_num_90();
Returns
double
res_perim()
Returns the perimeter of the resistor. See Figure 4-16.
Syntax
res_perim();
Returns
double
res_resval()
Returns the resistance, in ohms per square, specified in the resistor_value argument of
the resistor() function.
Syntax
res_resval();
Returns
double
res_resval_assigned()
Returns the value true if you have specified a nonzero value for the resistor_value
argument of the resistor() function; otherwise, returns the value false.
Syntax
res_resval_assigned();
Returns
Boolean
res_width_avg()
Returns the average width, which is calculated as res_area/res_length_avg.
Syntax
res_width_avg();
Returns
double
res_width_max()
Returns the maximum of the values as calculated by the res_width_term_a() and
res_width_term_b() functions.
Syntax
res_width_max();
Returns
double
res_width_min()
Returns the minimum of the values as calculated by the res_width_term_a() and
res_width_term_b() functions.
Syntax
res_width_min();
Returns
double
res_width_num_45()
Returns the number of 45-degree bends along the width of the resistor.
The calculation is made in two steps:
1. Select either the terminal A edge or the terminal B edge coincident with the body
polygon, based on the edge having the larger number of bends of any angle.
2. Count the number of 45-degree bends along that edge.
Bends at the corner of the resistor where a width edge meets a length edge are not counted.
Syntax
res_width_num_45();
Returns
double
Examples
Figure 4-17 shows some examples of returned values for the res_width_num_45()
function.
res_width_num_45() == 2
resistor terminal
res_width_num_45() == 1
res_width_num_90()
Returns the number of 90-degree bends along the width of the resistor.
The calculation is made in two steps:
1. Select either the terminal A edge or the terminal B edge coincident with the body
polygon, based on the edge having the larger number of bends of any angle.
2. Count the number of 90-degree bends along that edge.
Bends at the corner of the resistor where a width edge meets a length edge are not counted.
Syntax
res_width_num_90();
Returns
double
Examples
Figure 4-18 shows some examples of returned values for the res_width_num_90()
function.
res_width_num_90() == 2
resistor terminal
res_width_num_90() == 2
res_width_term_a()
Returns the edge length of the “terminal a” polygon that is outside coincident with the body
polygon. See Figure 4-16.
Syntax
res_width_term_a();
Returns
double
res_width_term_b()
Returns the edge length of the “terminal b” polygon that is outside coincident with the body
polygon. See Figure 4-16.
Syntax
res_width_term_b();
Returns
double
dev_body_coordinate_list()
Returns a list of coordinate pairs representing the center xy coordinates of a device. If a
device is a merged device, the function returns all center xy coordinate pairs of all physical
device members.
Syntax
dev_body_coordinate_list();
Returns
dev_body_coordinate_list_result
■ dev_parallel_device_length()
■ dev_parallel_device_width()
All parallel connected device relationships are formed at the cell level. If you want to
consider the global connected relationship through the hierarchy, add an extra processing
layer created by the cell_extent() function and use this layer to flatten the layout hierarchy
during device extraction.
The following example shows using the device parallel utility functions.
my_func: published function (void) returning void
{
Count = dev_parallel_device_count();
a = mos_gate_area();
same_area_devices =0;
for (i = 0 to Count - 1)
{
Dev_a = dev_parallel_device_area(i);
if (Dev_a == a) same_area_devices++;
}
}
dev_parallel_device_area()
Returns the gate area of the ith parallel connected device. The area is calculated as by the
mos_gate_area() function. See Figure 4-5 for more information.
Syntax
dev_parallel_device_area(
index = integer
);
Returns
double
Arguments
index
Required. Specifies the index (i) of the parallel connected device.
dev_parallel_device_body()
Returns a polygon_set that consists of the body layer polygons of the ith parallel connected
device.
Syntax
dev_parallel_device_body(
index = integer
);
Returns
polygon_set
Arguments
index
Required. Specifies the index (i) of the parallel connected device.
dev_parallel_device_count()
Returns the number of devices connected in parallel with the current device. You can include
options to count only the devices on the same layer or with the same properties. The count
includes the current device.
Syntax
dev_parallel_device_count(
same_polygon = "string", # optional
save_properties = {"string", ...} # optional
);
Returns
integer
Arguments
same_polygon
Optional. Specifies a processing layer defined by the processing_layer_hash
argument of a device configuration function. The IC Validator tool uses this layer to
determine whether two devices in parallel have the same polygon layer processing ID.
The default is an empty string ("").
same_properties
Optional. Specifies the properties that the IC Validator tool compares to determine the
return value. The tool can compare a maximum of 10 properties. The default is an empty
list, which disables the property comparison.
The properties must be created by the drc_features(), gendev_select(),
mos_select(), or res_select() function and attached to the device body layer by the
dev_save_polygon_double_property() function.
dev_parallel_device_length()
Returns the gate length of the ith parallel connected device. The length is calculated as
(2*mos_gate_area())/ (mos_width_1() + mos_width_2()). See Figure 4-5 for more
information.
Syntax
dev_parallel_device_length(
index = integer
);
Returns
double
Arguments
index
Required. Specifies the index (i) of the parallel connected device.
dev_parallel_device_pin()
Returns a polygon_set consisting of the specified terminal layer polygons of the ith parallel
connected device. The required terminals of standard devices have pin names generated by
the IC Validator tool. For an optional pin, the default name is “BULK”; you can redefine it.
See the device configuration functions for more details (capacitor(), gendev(),
inductor(), nmos() and pmos(), np() and pn(), npn() and pnp(), and resistor()).
Syntax
dev_parallel_device_pin(
index = integer,
pinname = "string"
);
Returns
polygon_set
Arguments
index
Required. Specifies the index (i) of the parallel connected device.
pinname
Required. Specifies the name of the required pin.
dev_parallel_device_polygon_count()
Returns the polygon count of the specified layer that touch the ith parallel connected device
body. The count is calculated by:
p = dev_processing_layer("layer")
b = dev_body();
p1 = dev_touching(p, b);
count = dev_count_polygons(p1);
Syntax
dev_parallel_device_polygon_count(
index = integer,
layer_name = "string"
);
Returns
integer
Arguments
index
Required. Specifies the index (i) of the parallel connected device.
layer_name
Required. Specifies the layer.
dev_parallel_device_processing_layer_polygon_id()
Returns the ID of the processing layer polygon that the ith parallel connected device of the
current device gate touches. The return value is -1 if the device body does not touch any
processing layer polygon or if it touches more than one processing layer polygon. See
Figure 4-22 for an example of polygon IDs.
Syntax
dev_parallel_device_processing_layer_polygon_id(
index = integer,
layer_name = "string"
);
Returns
integer
Arguments
index
Required. Specifies the index (i) of the parallel connected device.
layer_name
Required. Specifies the processing layer.
dev_parallel_device_sum_double_property()
Scans each group containing devices connected in parallel and calculates the
corresponding multifinger device properties. By default, the return value is the number of
devices connected in parallel with the values of the specified properties from the processing
layer on the specified polygon.
If you specify an optional property, the return value is the sum of the property values from
the devices connected in parallel with the values of the specified properties from the
processing layer on the specified polygon.
Syntax
dev_parallel_device_sum_double_property(
same_polygon = "string", # optional
same_properties = {"string", ...} # optional
property = "string", # optional
);
Returns
double
Arguments
same_polygon
Optional. Specifies a processing layer defined by the processing_layer_hash
argument of a device configuration function. The IC Validator tool uses this layer to
determine whether two devices in parallel have the same polygon layer processing ID.
The default is an empty string ("").
same_properties
Optional. Specifies the properties that the IC Validator tool compares to determine the
return value. The tool can compare a maximum of 10 properties. The default is an empty
list, which disables the property comparison.
The properties must be created by the drc_features(), gendev_select(),
mos_select(), or res_select() function and attached to the device body layer by the
dev_save_polygon_double_property() function.
property
Optional. Specifies a property used to calculate the return value. The property must be
created by the drc_features(), gendev_select(), mos_select(), or res_select()
function and attached to the device body layer by the
dev_save_polygon_double_property() function. The default is an empty string ("").
If the IC Validator tool cannot find the attached properties, it assumes the property value
is 1. The tool reports a warning message if the property is not defined in one of the
property creation functions.
dev_parallel_device_width()
Returns the gate width of the ith parallel connected device. The width is calculated by
(mos_width_1() + mos_width_2())/2. See Figure 4-5 for more information.
Syntax
dev_parallel_device_width(
index = integer
);
Returns
double
Arguments
index
Required. Specifies the index (i) of the parallel connected devices.
dev_set_error()
When this function is called, the device is not extracted and an error message is output.
Syntax
dev_set_error(
message = "string"
);
Returns
void
dev_box_length()
Returns the length of the longer side of the polygon bounding box.
Syntax
dev_box_length(
polygon_set = polygon_set
);
Returns
double
dev_box_width()
Returns the length of the shorter side of the polygon bounding box.
Syntax
dev_box_width(
polygon_set = polygon_set
);
Returns
double
dev_coil_space()
Returns the space between sections of a looped polygon. This value is useful in calculating
the inductor space property. Typically, it is applied to the inductor body layer.
Syntax
dev_coil_space(
polygon_set = polygon_set
);
Returns
double
dev_coil_turns()
Returns the number of turns a layer makes. This value is useful in calculating the inductor
turns property. Typically, it is applied to the inductor body layer.
Syntax
dev_coil_turns(
polygon_set = polygon_set
);
Returns
double
dev_coil_width()
Returns the width of a coiled wire.
Syntax
dev_coil_width(
polygon_set = polygon_set
);
Returns
double
dev_count_devices()
Returns the number of devices that share the specified polygon set. If parallel merging
occurs during device extraction, the function reports the number of merged device groups
sharing the specified polygon set. For the example shown in Figure 4-19, the
dev_count_devices() function returns the value of 2 because there are two groups.
Syntax
dev_count_devices(
polygon_set = polygon_set
);
Returns
integer
dev_count_polygon_coordinates()
Returns the number of vertices on the specified polygon.
Syntax
dev_count_polygon_coordinates(
polygon_set = polygon_set,
polygon_index = integer
);
Returns
integer
Example
See the dev_polygon_coordinates() function.
dev_count_polygons()
Returns the number of polygons contained in the polygon set.
Syntax
dev_count_polygons(
polygon_set = polygon_set
);
Returns
integer
Example
See the dev_polygon_coordinates() function.
dev_generate_compound_device_id()
Generates a compound device property ID for a device. Devices within the same recognition
layer polygon have the same compound device property ID.
• Each ID assigned to device bodies in each recognition layer is unique with respect to the
IDs assigned to device bodies in all other recognition layers.
• If the dev_generate_compound_device_id() function is called more than one time in a
remote function, the same ID is generated for each call. This behavior is because the ID
is associated with the current recognition polygon.
• If the IC Validator tool determines that devices could never merge because they are of
different types, the IDs might not be unique.
• Devices of the same type must have globally unique IDs across different cells in the
hierarchy. In other words, ID values are not recycled for the same device types in
different cells.
This ID can be written and read in the same way as other properties. For example, the
compound device property ID can be used to identify devices to be merged in parallel. The
value 0 (zero) is never generated by the dev_generate_compound_device_id() function,
but you can use this value.
Syntax
dev_generate_compound_device_id();
Returns
integer
dev_get_polygon_double_property()
Retrieves the value of a double property for the specified polygon. Returns the value true if
the property is found; otherwise, returns the value false.
Limitation:
The input polygon set can only come from the dev_pin(), dev_body(),
dev_processing_layer(), or dev_recognition_layer() utility functions. If the
polygon set is from any other utility function, such as the dev_and() or dev_or()
function, the call of the dev_get_polygon_double_property() function can fail due to
missing property values.
Syntax
dev_get_polygon_double_property(
polygon_set = polygon_set,
index = integer,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index (i) of the target polygon in the polygon set. A negative
value causes an error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property for the ith polygon of the
polygon set is stored. The value is 0 (zero) if the property is not present or the index is
out of bounds.
dev_get_polygon_list_of_list_of_double_property()
Retrieves the value of an attached two-dimensional matrix for the specified polygon. If the
input polygon set is empty, the property is not present, the index is out of bounds, or a row
in the retrieved two-dimensional matrix has a different number of columns than the other
rows, the return value is false and the two-dimensional matrix is an empty list; otherwise,
returns the value true.
Syntax
dev_get_polygon_list_of_list_of_double_property(
polygon_set = polygon_set,
index = integer,
name = "string",
value = out_list_of_list_of_double
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index (i) of the target polygon in the polygon set. A negative
value causes an error.
name
Required. Specifies the matrix property name. Cannot be a null string and cannot start
with an underscore character (_).
value
Required. Specifies the variable where the value of the list of list of double data for the
ith polygon of the polygon set is stored.
dev_get_polygon_matrix_property()
Retrieves the value of an attached matrix for the specified polygon. If the property is not
present or the index is out of bounds, the return value is false and the matrix is an empty list.
Limitation:
The input polygon set can come only from the dev_pin(), dev_body(),
dev_processing_layer(), or dev_recognition_layer() utility functions. If the
polygon set is from any other utility function, such as the dev_and() or dev_or()
function, the call of the dev_get_polygon_matrix_property() function can fail due to
missing property values.
The output value is a PXL list of list of double (a two-dimensional array) used for further
indexing. Each element (sublist) of the output is a list of the same length.
Syntax
dev_get_polygon_matrix_property(
polygon_set = polygon_set,
index = integer,
name = ”string”,
value = {{out_double, ...}, ...}
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index (i) of the target polygon in the polygon set. A negative
value causes an error.
name
Required. Specifies the matrix property name.
value
Required. Specifies the variable where the value of the matrix property for the ith polygon
of the polygon set is stored.
dev_get_polygon_string_property()
Retrieves the value of a string property for the specified polygon. Returns the value true if
the property is found; otherwise, returns the value false.
Limitation:
The input polygon set can only come from the dev_pin(), dev_body(),
dev_processing_layer(), or dev_recognition_layer() utility functions. If the
polygon set is from any other utility function, such as the dev_and() or dev_or()
function, the call of the dev_get_polygon_double_property() function can fail due to
missing property values.
Syntax
dev_get_polygon_string_property(
polygon_set = polygon_set,
index = integer,
name = "string",
value = out_string
);
Returns
dev_get_polygon_string_property_result
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index (i) of the target polygon in the polygon set. A negative
value causes an error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property for the ith polygon of the
polygon set is stored. The value is an empty string (“”) if the property is not present or
the index is out of bounds.
dev_grow_polygon()
Returns the sized polygon set. This utility function grows the polygon based on the top,
bottom, left, and right arguments. The value of each direction argument must be greater
than or equal to 0. The default of each direction argument is 0.0.
The directions are based on the MOS device orientation. The left and right arguments
refer to the source/drain sides; the top and bottom arguments refer to the other two sides.
Therefore, the directions depend on MOS device orientation, horizontal or vertical. For a
horizontal MOS device, the source and drain are located on the left and right sides; for a
vertical MOS device, the source and drain are located on the top and bottom sides. The
directions are shown in Table 4-3.
Table 4-3 Directions of Arguments for the dev_grow_polygon() Function
Syntax
dev_grow_polygon(
polygon_set = polygon_set,
top = double, //optional
bottom = double, //optional
left = double, //optional
right = double //optional
);
Returns
polygon_set
dev_polygon_area()
Returns the area for a specified polygon.
Syntax
dev_polygon_area(
polygon_set = polygon_set
);
Returns
double
dev_polygon_bends()
Returns the number of bends for a polygon specified in the polygon set. The angle
argument must be 0, 45, 90 or 135.
Syntax
dev_polygon_bends(
polygon_set = polygon_set,
polygon_index = integer,
angle = integer
);
Returns
double
dev_polygon_coordinates()
Returns coordinates of a specified vertex.
Along with the dev_polygon_coordinates() function, you need to use the
dev_count_polygons() function to determine the number of polygons in a the polygon
set and the dev_count_polygon_coordinates() function to determine the number of
coordinates in a polygon. See the Example section.
Syntax
dev_polygon_coordinates(
polygon_set = polygon_set,
polygon_index = integer,
coordinate_index = integer
);
Returns
dev_polygon_coordinates_result
Example
The following example shows how you can return the coordinates of gates. Before executing
the dev_polygon_coordinates() function, you must get the total number of polygons
forming the gate using the dev_count_polygons() function and the total number of
coordinates per polygon using the dev_count_polygon_coordinates() function.
gate_coord_list: list of coordinate_s = {};
gate = dev_body();
for (i = 0 to dev_count_polygons(gate) - 1) {
for (j = 0 to dev_count_polygon_coordinates (gate, i) - 1) {
gate_coord_list.push_back ( dev_polygon_coordinates (
polygon_set = gate,
polygon_index = i,
coordinate_index = j )
);
}
}
dev_polygon_perim()
Returns the perimeter for a specified polygon.
Syntax
dev_polygon_perim(
polygon_set = polygon_set
);
Returns
double
dev_single_polygon_set()
Returns the specified single polygon.
Syntax
dev_single_polygon_set(
polygon_set = polygon_set,
index = integer
);
Returns
polygon_set
dev_size_polygon()
Returns the sized polygon set. Based on the size_value argument, this utility function
either grows or shrinks the polygons.
Syntax
dev_size_polygon(
polygon_set = polygon_set,
size_value = double
);
Returns
polygon_set
dev_top_polygon_coordinate_list()
Returns a list of the coordinates of polygons from the specified polygon set that correspond
to the top cell. Each coordinate corresponds to a polygon in the polygon set; that is, if the
polygon set contains N polygons, this function returns a coordinate list whose size is also N.
Important:
The dev_top_polygon_coordinate_list() function should only be used with specific
guidance from Synopsys. Preferably, you should use the top_simulation_properties
argument of the gendev() function instead.
Syntax
dev_top_polygon_coordinate_list(
polygon_set = polygon_set
);
Returns
dev_top_polygon_coordinate_list_result
Arguments
polygon_set
Required. Specifies a polygon set from dev_body(), dev_pin(),
dev_processing_layer(), or any other device utility function that creates a derived
polygon set.
See Also
gendev()
dev_and()
Returns a polygon set that is the intersection of two polygon sets.
Syntax
dev_and(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
polygon_set
dev_coil_path_length()
Note:
This function is valid only for the gendev() and inductor() functions because it
requires the connectivity argument.
Calculates the path length from polygon_set1 layer to polygon_set2 layer. This function
can calculate path lengths across different layers.
Radial edges of a path are not supported. The current dev_coil_path_length()
arguments require input from a path composed of parallel edges.
Syntax
dev_coil_path_length(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
double
dev_count_coincident_edges()
Calculates the number of edges of polygon_set1 coincident with polygon_set2.
Syntax
dev_count_coincident_edges(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
integer
dev_count_inside()
Returns the number of polygons of polygon_set1 fully inside of polygon_set2.
Syntax
dev_count_inside(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
integer
dev_count_outside()
Returns the number of polygons of polygon_set1 fully outside of polygon_set2.
Syntax
dev_count_outside(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
integer
dev_cutting()
Returns a polygon_set containing all polygons of polygon_set1 that cut the polygons of
polygon_set2.
Syntax
dev_cutting(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
polygon_set
dev_inside()
Returns a polygon set containing all polygons of polygon_set1 that fit completely inside the
polygons of polygon_set2.
Syntax
dev_inside(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
polygon_set
dev_inside_area()
Returns the area of polygon_set1 edge inside polygon_set2.
Syntax
dev_inside_area(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
double
dev_inside_length()
Returns the length of edges of polygon_set1 that are contained inside polygon_set2
polygons, excluding coincident edges.
Syntax
dev_inside_length(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
double
Example
This example shows the edges that are measured.
measured edges
dev_inside_touch_length()
Returns the length of the edges of polygon_set1 that are inside coincident to the edges of
polygon_set2.
Syntax
dev_inside_touch_length(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
double
Example
This example shows the edges that are measured.
measured edges
dev_interacting()
Returns the polygon sets that interact with each other.
Syntax
dev_interacting(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
polygon_set
dev_not()
Returns a polygon set that is the material not in common between two polygon sets.
Syntax
dev_not(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
polygon_set
dev_or()
Returns a polygon set that is the union of two polygon sets.
Syntax
dev_or(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
polygon_set
dev_outside_area()
Returns the area of polygon_set1 edge outside polygon_set2.
Syntax
dev_outside_area(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
double
dev_outside_length()
Returns the length of polygon_set1 outside of polygon_set2, excluding coincident edges.
Syntax
dev_outside_length(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
double
Example
In the following example, magenta is polygon_set1, red is polygon_set2, and green
shows the measured edges.
dev_outside_touch_length()
Returns the length of the edges of polygon_set1 that are outside coincident to the edges
of polygon_set2.
Syntax
dev_outside_touch_length(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
double
Example
In the following example, magenta is polygon_set1, red is polygon_set2, and green
shows the measured edges.
Input Output
dev_proximity_list()
The dev_proximity_list() function measures projection distances from a specified body
polygon set to one or more designated projection_data polygon sets. This function
consolidates measuring capabilities associated with all of the following physical parameters:
• The Length of Oxide Definition (LOD) values, which represent the distances from a gate
polygon to the LOD layer edge.
• The strained silicon effects parameters, which represent the distances projecting from
the gate width and length to nearby layers, including polysilicon, diffusion, or wells. The
nearby layers do not have interaction requirements with the gate layer.
• The Well Proximity Effect (WPE) values, which represent the distances projecting from
the gate width and length to an enclosing well layer edge.
In all cases, the function measures projections to a specified projection layer and in a given
direction relative to the body layer. Measurements to multiple projection layers can be made
using a single call to the function.
The function also returns a list of body layer region widths corresponding to each measured
projection. This list represents the manner in which a body layer polygon must be fractured
to measure multiple projections along its width. When the dev_proximity_list() function
is called with multiple projection_data list members, a common superset of body layer
fracture points is derived to enable simultaneous measurements of projection to all
members of the projection_data list.
The dev_proximity_list() function is similar to the mos_proximity_list() function;
however, dev_proximity_list() measures the projections of two sides simultaneously
relative to a horizontal or vertical direction. The checking direction (horizontal or vertical) is
determined by the projection_reference and projection_direction arguments.
The dev_proximity_list() function can be called multiple times within the remote
function called by the nmos() and pmos(), gendev(), resistor(), capacitor(),
inductor(), np() and pn(), and npn() and pnp() functions.
Syntax
dev_proximity_list(
body = polygon_set,
projection_reference = polygon_set,
projection_data = {{polygon_set = polygon_set,
order = integer,
interaction = ENTERING | LEAVING |
ENTERING_LEAVING,
range = double,
projection_length_a = {out_double, ...}},
projection_length_b = {out_double, ...}},
...},
projection_direction = PARALLEL | PERPENDICULAR,
width = {out_double, ...},
count = out_integer
);
Returns
void
Arguments
body
Required. Specifies the base polygon set from which projections are measured, for
example, gate. This polygon set must interact with the gate polygon for each instance on
which the dev_proximity_list() function is invoked. The polygon set can be returned
and manipulated using all standard polygon_set utility functions. See “polygon_set
Property Functions” on page 4-79.
projection_reference
Required. Defines the checking direction for the projection distance. This polygon set
must contain a single polygon. The bounding box of this polygon should have an outside
edge that is coincident with the bounding box of the body layer. If the polygon does not
have a coincident edge with the body layer or has both horizontal and vertical coincident
edges, IC Validator issues a warning and returns an empty result.
projection_data
Required. Specifies the polygon sets and accompanying parameters that contain all
information used to simultaneously compute and store projections to the layers.
Note:
A maximum of seven polygon sets and accompanying information can be listed.
❍ polygon_set. Required. Projection is measured to this polygon set. The polygon
set is returned using the dev_processing_layer() function to select from the
processing_layer_hash layers specified in the mos_select(), nmos(), and
pmos() functions.
❍ order. Required. Determines which nearby polygon set can project on the body. The
value is a number from 0 to 50.
■ 0. Turns off measurement of projections to the corresponding polygon set.
■ 1. Selects the member of the polygon set that is closest to the body polygon,
within the range specified for the corresponding projection_data polygon_set.
■ 2. Selects the first two members of the polygon set that are closest to the body
polygon, within the range specified for the corresponding projection_data
polygon_set.
■ 3 through 50. Selects the first nth members of the polygon set that are closest to
the body polygon, within the range specified for the corresponding
projection_data polygon_set.
■ When the range argument is >0, the actual projection length between the body
argument and polygon_set polygons in the projection_data argument is
stored in the projection_length list member of the projection_data
argument, up to the maximum range value. If the actual projection length is
greater than the maximum range value, the range value is stored. The range
value is also stored if no projection is found.
❍ projection_length_a. Optional. Indicates the left-side projection when the
distances are calculated horizontally and the top projection when the distances are
calculated vertically.
projection_direction
Required. Determines the direction from the base polygon set in which the projection
length is calculated for the corresponding projection_data polygon_set: PARALLEL or
PERPENDICULAR.
Figure 4-20 shows how to use the projection_reference and
projection_direction arguments to define the direction of the projection distance.
width
Required. Specifies the variable where the body region widths corresponding to the
extracted distance projections are stored.
count
Required. Specifies the variable where the number of extracted divided body regions
calculated by the dev_proximity_list() function is stored.
Example
The following example shows how the projection_data and width arguments work
together. For horizontal projection checking, the order of the width and projection length
arrays is top to bottom. For vertical projection checking, the order is left to right.
G = dev_pin("GATE");
D = dev_pin("DRN");
See Also
dev_recognition_layer()
mos_proximity_list()
mos_proximity_corner_list()
dev_touch_length()
Returns the length of edges of polygon_set1 that are coincident, either inside or outside, to
the edges of polygon_set2.
Syntax
dev_touch_length(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
double
Example
In the following example, magenta is polygon_set1, red is polygon_set2, and green
shows the measured edges.
dev_touching()
Returns a polygon set containing all polygons of polygon_set1 that touch the polygons of
polygon_set2.
Syntax
dev_touching(
polygon_set1 = polygon_set,
polygon_set2 = polygon_set
);
Returns
polygon_set
dev_device_name()
Returns the name of the device being extracted.
Syntax
dev_device_name();
Returns
string
dev_is_property()
Verifies if the specified property is declared in the device configuration function. Returns the
value true if the property is declared; otherwise, returns the value false.
Syntax
dev_is_property(
property = "string"
);
Returns
Boolean
dev_pin_net_name()
Retrieves the net name for the specified pin name. Returns the value true if a net name is
successfully returned; otherwise, returns the value false.
Syntax
dev_pin_net_name(
pin_name = "string",
net_name = out_string
);
Returns
Boolean
dev_save_double_list_properties()
Saves the specified double list properties so that they can be netlisted. The value list is
limited to 10 values.
Syntax
dev_save_double_list_properties(
property_list = {{name = "string",
value = {double, ...}}, ...}
);
Returns
void
dev_save_double_properties()
Saves the specified double properties so that they can be netlisted.
Syntax
dev_save_double_properties(
property_list = {{name = "string",
value = double}, ...}
);
Returns
void
dev_save_polygon_double_property()
Saves the specified double properties to the output polygon layer. This utility function is
available only for the user functions of mos_select(), res_select(), and
gendev_select() that return polygon layers. It does not work for device extraction
functions, such as nmos(), pmos(), resistor(), or gendev().
Syntax
dev_save_polygon_double_property(
name = "string",
value = double
);
Returns
void
Arguments
name
Required. Specifies the property name.
Note:
The property name cannot be an empty string or begin with an underscore (_).
value
Required. Specifies the property value to be saved.
dev_save_string_properties()
Saves the specified string properties so that they can be netlisted.
Syntax
dev_save_string_properties(
property_list = {{name = "string",
value = "string"}, ...}
);
Returns
void
dev_set_pin_coordinates()
Relocates pins to the specified locations. Use this function for parasitic extraction, such as
for the StarRC tool.
The new pin coordinates that are written out using this function replace the original pin
coordinates in the Milkyway XTR view database. The XTR view database can be consumed
by the StarRC tool. If the function is applied to the body terminal of the device, the new
user-defined coordinates are applied to the body coordinates written to the extracted netlist.
For example, if the default coordinates are listed as
{COORD x=0.4000 y=1.4000}
then calling
dev_set_pin_coordinates({{"GATE", 1.4, 2.4}});
Syntax
dev_set_pin_coordinates(
coordinate_list = {{pin_name = "string", x = double, y = double,
polygon_index = integer}, ...}
);
Returns
void
Arguments
coordinate_list
Required. Lists the pins and specified locations.
❍ pin_name. Required. The designated pin name for the device from which the remote
function is called. For example, if the dev_set_pin_coordinates() function is used
in remote function called from the nmos() function, pin_name must be GATE, SRC,
or DRN.
❍ x, y. Required. Coordinates set by this function The coordinates must be inside the
polygon for the pin.
❍ polygon_index. Optional. Index of the pin polygon that is used to calculate the new
pin coordinates. The default is 0.
Example
my_mos_func : function( void ) returning void {
m : integer = dev_count_polygons(src_pin);
half_pillar : double = 0.055;
gate_x : double;
gate_y : double;
src_x : double;
src_y : double;
};
nmos(
matrix = matrix,
device_name = "my_nmos",
drain = nsd
gate = ngate
source = nsd
property_function = my_mos_func
);
dev_unique_identifier()
Returns the string specified by the device configuration function unique_identifier
argument. If unique_identifier is not set in the device configuration function, an empty
string is returned.
Syntax
dev_unique_identifier();
Returns
string
dev_body()
Returns the body polygon of the current device.
Syntax
dev_body();
Returns
polygon_set
dev_pin()
Returns polygons that define the specified pin. The required terminals of standard devices
have pin names generated by the IC Validator tool. For an optional pin, the default name is
“BULK”; you can redefine it.
Note:
The dev_pin() function gathers polygons on a cell-level basis unless the pin name is
listed in a pin_map argument. For more information, including descriptions of how
processing_layer_hash polygons and terminal layer polygons are handled by
dual-hierarchy extraction, see the processing_layer_hash_map and pin_map options
of the properties argument in a device extraction function, such as nmos() or pmos().
Syntax
dev_pin(
pinname = "string"
);
Returns
polygon_set
dev_processing_layer()
Returns a polygon set corresponding to the processing layer referenced by the layer_name
hash key, for use inside a remote function called by a device configuration or ERC function.
Syntax
dev_processing_layer(
layer_name = "string"
);
Returns
polygon_set
Example
See the Example section of the dev_processing_range() function.
dev_processing_layer_polygon_id()
Returns the ID of the processing layer polygon that the current device gate touches. This is
the polygon ID. The return value is -1 if the device body does not touch any processing layer
polygon or if it touches more than one processing layer polygon. Figure 4-22 shows an
example of polygon IDs:
Figure 4-22 Example of Polygon IDs
polygon ID = 1
G1 polygon ID = 1 ID = 3
G4
ID = 1 G2
polygon ID = -1
ID = 4
polygon ID = 2
G3 ID = 2
Syntax
dev_processing_layer_polygon_id(
layer_name = "string"
);
Returns
integer
Arguments
layer_name
Required. Specifies the processing layer.
dev_processing_range()
Returns the range value corresponding to the processing layer referenced by the hash key
layer_name, for use inside a remote function called by a device configuration or ERC
function.
Syntax
dev_processing_range(
layer_name = "string"
);
Returns
double
Example
The dev_processing_range() function
• Helps keep range values synchronized between the range used in
mos_proximity_list(projection_data) and the range specified in the
processing_layer_hash argument of the device configuration or ERC functions.
• Allows you to change the range value in the mos_proximity_list() function between
multiple calls to the nmos() or pmos() function when using the same property function.
// layer1_range returns the double value of 5.
mos_stress_function : function (void) returning void {
layer1 : polygon_set = dev_processing_layer("NW");
layer1_range: double = dev_processing_range("NW");}
nmos(
matrix = my_devices,
device_name = "NF_DEVICE",
gate = nf_device,
source = src_drn,
drain = src_drn,
processing_layer_hash = { "NW"=>{NW, 5}, "PC"=>{PC,2} },
properties = mos_properties,
property_function = mos_stress_function,
merge_parallel = true
);
See Also
mos_proximity_corner_list()
mos_proximity_list()
dev_recognition_layer()
Returns the recognition layer.
Syntax
dev_recognition_layer();
Returns
polygon_set
drn_net: string;
gate_net: string;
src_net: string;
l_value: double;
w_value: double;
status = flx_pin_net_name("DRN",drn_net);
status = flx_pin_net_name("GATE",gate_net);
status = flx_pin_net_name("SRC",src_net);
status = flx_get_double_property("l",l_value);
status = flx_get_double_property("w",w_value);
device_string = flx_instance_name()
+ " "
+ drn_net
+ " "
+ gate_net
+ " "
+ src_net
+ " "
+ flx_device_name()
+ " w="
+ w_value
+ " l="
+ l_value;
flx_write_to_spice_netlist(device_string);
}
3. Call the flexible netlisting function from inside the device configuration function. For
example,
nmos(dev_matrix,"NmosDev1",
NmosTerm1, NmosGate1,NmosTerm1,
processing_mode = HIERARCHICAL,
spice_netlist_function = "print_spice_nmos"
);
flx_device_name()
Returns the device name.
Syntax
flx_device_name();
Returns
string
flx_device_type()
Returns the device type.
Syntax
flx_device_type();
Returns
flx_device_type_result
flx_get_double_property()
Retrieves a double value for the specified property. Returns the value true if the function
successfully returns a double value; otherwise, returns the value false.
Syntax
flx_get_double_property(
property_name = "string",
value = out_double
);
Returns
Boolean
flx_get_string_property()
Retrieves the string value for the specified property. Returns the value true if the function
successfully returns the string value for the specified property; otherwise, returns the value
false.
Syntax
flx_get_string_property(
property_name = "string",
value = out_string
);
Returns
Boolean
flx_instance_name()
Returns the instance name.
Syntax
flx_instance_name();
Returns
string
flx_is_shorted()
Returns the value true if the device is shorted; otherwise, returns the value false.
Syntax
flx_is_shorted();
Returns
Boolean
flx_pin_net_name()
Returns the value true if a net name is successfully returned in the net_name argument for
the specified pin_name; otherwise, returns the value false.
Syntax
flx_pin_net_name(
pin_name = "string",
net_name = string
);
Returns
Boolean
flx_write_to_spice_netlist()
Writes the specified string to the SPICE netlist.
Syntax
flx_write_to_spice_netlist(
line = "string"
);
Returns
void
dev_dlink()
The dev_dlink() function passes measurement data to C libraries external to the
IC Validator runset, and then returns the results from C libraries back to the IC Validator tool.
The C library must be a shared (dynamic) library.
Syntax
dev_dlink(
dlink_library = dev_dlink_library_handle,
function_name = "string",
double_arguments = {double, ...},
string_arguments = {"string", ...},
double_results = {out_double, ...}
);
Returns
void
Arguments
dlink_library
Required. Specifies the handle of the dynamic-link library that contains the external
C Function specified by the function_name argument. It must be opened using the
dev_dlink_library_open() function before it is specified here.
function_name
Required. Specifies the external C function that processes the measurement data from
the IC Validator tool.
double_arguments
Required. Specifies data that is encoded into a 1-dimensional array of doubles. This data
is passed to the C libraries.
string_arguments
Required. Specifies customized strings. This data is passed to the C libraries. Passing
string identifiers is useful so that different internal routines can be selected in the wrapper
function.
double_results
Required. Specifies the variable where the results generated by the C libraries are
stored. After the C functions compute and analyze the data, the generated results are
available for use in the runset.
dev_dlink_library()
The dev_dlink_library() function selects a library handle to pass to the dev_dlink()
function to specify where the C function is located.
Syntax
dev_dlink_library(
index = integer
);
Returns
dev_dlink_library_handle
Arguments
index
Required. Specifies the library handle from the list in the dlink_libraries argument of
the device configuration functions. The index starts from 0, which specifies the first
library handle.
• gradient_density()
In addition to the following utility functions, you can use the general purpose functions, such
as note() function to write a message in the summary file, and to the screen when you use
the -verbose option. See “General-Purpose Functions” on page 4-3 for more information.
den_generate_next_step()
Moves the delta_window subwindow to the next potential error location based on
• The current ratio value or area value.
• The target ratio constraint or area constraint.
• The step basis.
Syntax
den_generate_next_step(
current_value = double,
target_value = doubleconstraint,
step_basis = AREA | RATIO | AREA_COMPLEMENT | RATIO_COMPLEMENT
);
Returns
void
Arguments
current_value
Required. Specifies the ratio variable or area variable set in the density equation.
target_value
Required. Specifies the target ratio constraint or area constraint from the density rule.
step_basis
Required. Specifies the type of density check on which the delta window movement is
based.
❍ AREA. Specifies that the density rule checks the area. The delta window movement is
based on an area computation using the current area value and the target area
constraint.
❍ RATIO. Specifies that the density rule checks the ratio. The delta window movement
is based on a ratio computation using the current ratio value and the target ratio
constraint.
❍ AREA_COMPLEMENT. Specifies that the density rule checks the area. The delta window
movement is based on an area computation using the current area value and the
target area constraint represented with a constraint complement.
❍ RATIO_COMPLEMENT. Specifies that the density rule checks the ratio. The delta
window movement is based on a ratio computation using the current ratio value and
the target ratio constraint represented with a constraint complement.
Table 4-4 illustrates each constraint and its complement:
Constraint Complement
<a >= a
<= a >a
==a !=a
!=a ==a
>a <=a
Constraint Complement
>=a <a
Examples
The following AREA example shows the current area value in a density function and the
target area constraint in a density rule.
• The current area value is stored in the user-defined variable that is named areaL.
• The target area constraint is specified as less than 12500.
• The step basis is AREA.
The current area variable, target area constraint, and step basis are highlighted in the
example.
den_area_func : function (void) returning void {
areaL : double = den_polygon_area("metal");
areaWL : double = den_polygon_area("window_layer");
ratio : double = areaL / areaWL;
if (dbllt(areaL, 12500))
{
den_save_window(error_names = {"metal_area", "window_area",
"ratio"},
values = {areaL, areaWL, ratio});
}
den_generate_next_step(areaL, < 12500, AREA);
}
The following RATIO example shows the current ratio value in a density function and the
target ratio constraint in a density rule.
• The current ratio value is stored in the user-defined variable that is named ratio.
• The target ratio constraint is specified as less than 0.20.
• The step basis is RATIO.
The current ratio variable, target ratio constraint, and step basis are highlighted in the
example.
den_ratio_func : function (void) returning void {
areaL : double = den_polygon_area("metal");
areaWL : double = den_polygon_area("window_layer");
ratio : double = areaL / areaWL;
if (dbllt(ratio, 0.20))
{
den_save_window(error_names = {"metal_area", "window_area",
"ratio"},
values = {areaL, areaWL, ratio});
}
den_generate_next_step(ratio, < 0.20, RATIO);
}
The following AREA_COMPLEMENT example shows the current area value in a density function
and the target area constraint in a density rule.
• The current area value is stored in the user-defined variable that is named areaL.
• The target area constraint is specified as less than 12500 or greater than 15500, which
is represented as the complement of the range [12500,15500].
• The step basis is AREA_COMPLEMENT.
The current area variable, target area constraint, and step basis are highlighted in the
example.
den_area_func : function (void) returning void {
areaL : double = den_polygon_area("metal");
areaWL : double = den_polygon_area("window_layer");
ratio : double = areaL / areaWL;
The following RATIO_COMPLEMENT example shows the current ratio value in a density
function and the target ratio constraint in a density rule.
• The current ratio value is stored in the user-defined variable that is named ratio.
• The target ratio constraint is specified as less than 0.20 or greater than 0.80, which is
represented as the complement of the range [0.20,0.80].
The current ratio variable, target ratio constraint, and step basis are highlighted in the
example.
den_ratio_func : function (void) returning void {
areaL : double = den_polygon_area("metal");
areaWL : double = den_polygon_area("window_layer");
ratio : double = areaL / areaWL;
den_layer_empty()
Returns the value true if the considered area does contains material from the specified layer;
otherwise, returns the value false.
Syntax
den_layer_empty(
layer_name = "string",
clip = true | false //optional
);
Returns
Boolean
Arguments
layer_name
Required. Specifies the layer.
clip
Optional. Determines whether or not data polygons inside the delta_window subwindow
are clipped by the window_layer polygons. The default is true.
❍ true. The den_layer_empty() function returns the value true if there is no material
from the specified layer inside the intersection area of the subwindow and the
window_layer polygon.
❍ false. The den_layer_empty() function returns the value true if there is no material
from the specified layer inside the subwindow.
den_polygon_area()
Returns the area of the specified layer within the considered area. Input layers are specified
by their string name from the layer_hash argument. The window_layer is specified by the
string "window_layer".
Syntax
den_polygon_area(
layer_name = "string",
clip = true | false, //optional
size_index = integer
);
Returns
double
Arguments
layer_name
Required. Specifies the layer.
clip
Optional. Determines whether or not data polygons inside the delta_window subwindow
are clipped by the window_layer polygons The default is true.
❍ true. The considered area is the intersection area of the specified layer, the
subwindow, and the window_layer polygon.
❍ false. The considered area is the intersection area of the specified layer and the
subwindow.
size_index
Optional. Index of width and height size values specified in the delta_window_sizes
argument of the density() function. The default is -1.
❍ A value greater than or equal 0 specifies the polygon area within the primary
subwindow plus or minus the size amount specified in the list of values in the
delta_window_sizes argument at this index.
❍ The default of -1 specifies the polygon area within the primary the subwindow.
den_save_sized_window()
Saves a sized delta_window subwindow that is clipped to the extent of the boundary layer.
The size_index argument selects the sized window from the delta_window_sizes
argument of the density() function.
Note:
The den_save_window() function saves an unclipped sized subwindow.
You can choose to write density statistics to the LAYOUT_ERRORS file if the output of the
density function is to error output. The density statistics consist of a list of error_names and
a list of corresponding values. The density statistics are ignored if the output is to a named
layer.
Syntax
den_save_sized_window(
size_index = integer, //optional
error_names = {"string", ...}, //optional
values = {double, ...} //optional
);
Returns
void
Arguments
size_index
Optional. Selects the sized window from the delta_window_sizes argument of the
density() function. The first file in the list has an index of 0. The default is 0; that is, the
first file in the list.
error_names
Optional.
values
Optional.
den_save_window()
Saves a sized delta_window subwindow that is not clipped to the extent of the boundary
layer. The unsized subwindow is used for all calculations.
Note:
If an oversized subwindow that is clipped to the extent of the boundary layer is needed,
use the den_save_sized_window() function.
You can also choose to write density statistics to the LAYOUT_ERRORS file if the output of
the density function is to error output. The density statistics consist of a list of error_names
and a list of corresponding values. The density statistics are ignored if the output is to a
named layer.
Syntax
den_save_window(
size = double, //optional
error_names = {"string", ...}, //optional
values = {double, ...} //optional
);
Returns
void
Arguments
size
Optional. The default is 0.
error_names
Optional.
values
Optional.
den_window_area()
Returns the area of the current delta_window subwindow.
Syntax
den_window_area(
size_index = integer //optional
);
Returns
double
Arguments
size_index
Optional. Specifies the index of width and height size values specified in the
delta_window_sizes argument of the density() function. The default is -1.
❍ A value greater than or equal 0 specifies the area of the primary subwindow plus or
minus the size amount specified in the list of values in the delta_window_sizes
argument at this index.
❍ The default of -1 specifies the area of the primary subwindow.
den_window_bottom()
Returns the bottom coordinate of the current delta_window subwindow.
Syntax
den_window_bottom();
Returns
double
den_window_left()
Returns the left coordinate of the current delta_window subwindow.
Syntax
den_window_left();
Returns
double
den_window_right()
Returns the right coordinate of the current delta_window subwindow.
Syntax
den_window_right();
Returns
double
den_window_statistics()
Writes density statistics to the specified file.
Syntax
den_window_statistics(
which_file = integer, //optional
error_names = {"string", ...}, //optional
values = {double, ...} //optional
);
Returns
void
Arguments
which_file
Optional. Specifies the file where the data is written. The list of files is defined in the
statistics_files argument of the density() function. The first file in the list has an
index of 0. The default is 0; that is, the first file in the list.
error_names
Optional.
values
Optional.
den_window_top()
Returns the top coordinate of the current delta_window subwindow.
Syntax
den_window_top();
Returns
double
areaL_neighbor : double;
areaW_neighbor : double;
ratio_neighbor : double;
gradient : double;
num_errors : integer = 0;
gden_layer_empty()
Returns the value true if the considered area does contains material from the specified layer;
otherwise, returns the value false.
Syntax
gden_layer_empty(
layer_name = "string",
offset = LOWER_LEFT | DOWN | LOWER_RIGHT | LEFT | CENTER |
RIGHT | UPPER_LEFT | UP | UPPER_RIGHT, //optional
clip = true | false //optional
);
Returns
Boolean
Arguments
layer_name
Required. Specifies the layer.
offset
Optional. Specifies which of the nine possible delta_window subwindows to consider.
The default is CENTER.
clip
Optional. Limits the considered area to be inside the boundary of a nonrectangular
window_layer polygon. The default is true.
gden_polygon_area()
Returns the area of the specified layer within the considered area; you can specify an offset.
Input layers are specified by their string name from the layer_hash argument. The
window_layer is specified by the string "window_layer".
Syntax
gden_polygon_area(
layer_name = "string",
offset = LOWER_LEFT | DOWN | LOWER_RIGHT | LEFT | CENTER |
Returns
double
Arguments
layer_name
Required. Specifies the layer.
offset
Optional. Specifies which of the nine possible delta_window subwindows to consider.
The default is CENTER.
clip
Optional. Limits the returned area to be inside the boundary of a nonrectangular
window_layer polygon. The default is true.
❍ true. The gden_polygon_area() function returns the area of the input layer polygon
and the subwindow and the window_layer polygon.
❍ false. The gden_polygon_area() function returns the area of the input layer
polygon and the subwindow.
gden_save_window()
Saves the current delta_window subwindow to the error database if the output of the
gradient_density() function is to error output, or to a layer if the output of the
gradient_density() function is to a named layer.
If a neighboring subwindow is specified, it is saved to the error database if the output of the
gradient_density() function is to error output. Neighboring subwindows are not output to
a layer if the gradient_density() function is to a named layer.
An optional size parameter allows you to output a sized copy of the current subwindow. The
unsized subwindow is used for all calculations.
You can also choose to write density statistics to the LAYOUT_ERRORS file if the output of
the gradient_density() function is to error output. The density statistics consist of a list of
error_names and a list of corresponding values. The density statistics are ignored if the
output is to a named layer.
Syntax
gden_save_window(
Returns
void
Arguments
size
Optional. The default is 0.
error_names
Optional.
values
Optional.
offset
Optional. The default is CENTER.
gden_window_area()
Returns the area of the current delta_window subwindow, or neighboring subwindow if an
offset is specified.
Syntax
gden_window_area(
offset = LOWER_LEFT | DOWN | LOWER_RIGHT | LEFT | CENTER |
RIGHT | UPPER_LEFT | UP | UPPER_RIGHT //optional
);
Returns
double
Arguments
offset
Optional. The default is CENTER.
gden_window_bottom()
Returns the bottom coordinate of the current delta_window subwindow.
Syntax
gden_window_bottom();
Returns
double
gden_window_left()
Returns the left coordinate of the current delta_window subwindow.
Syntax
gden_window_left();
Returns
double
gden_window_right()
Returns the right coordinate of the current delta_window subwindow.
Syntax
gden_window_right();
Returns
double
gden_window_statistics()
Writes density statistics for the current delta_window subwindow, or neighboring
subwindow if an offset is specified, to the specified file.
Syntax
gden_window_statistics(
which_file = integer, //optional
error_names = {"string", ...}, //optional
values = {double, ...}, //optional
offset = LOWER_LEFT | DOWN | LOWER_RIGHT | LEFT | CENTER |
RIGHT | UPPER_LEFT | UP | UPPER_RIGHT //optional
);
Returns
void
Arguments
which_file
Optional. Specifies the file where the data is written. The list of files is defined in the
statistics_files argument of the gradient_density() function. The first file in the
list has an index of 0. The default is 0; that is, the first file in the list.
error_names
Optional.
values
Optional.
offset
Optional. The default is CENTER.
gden_window_top()
Returns the top coordinate of the current delta_window subwindow.
Syntax
gden_window_top();
Returns
double
gden_window_valid()
Returns the value true if the delta_window subwindow offset points to a valid subwindow;
otherwise, returns the value false. A subwindow is valid if it is within the boundary of the
current window_layer polygon and contains window_layer material.
Syntax
gden_window_valid(
offset = LOWER_LEFT | DOWN | LOWER_RIGHT | LEFT | CENTER |
RIGHT | UPPER_LEFT | UP | UPPER_RIGHT //optional
);
Returns
Boolean
Arguments
offset
Optional. The default is CENTER.
fp_generate_fill()
Generates fill patterns based on the input polygon (layer1) and other arguments specified
in the fill_pattern() function.
Syntax
fp_generate_fill(
polygon = polygon,
width = double,
height = double,
space_x = double,
space_y = double,
stagger_x = double, /optional
stagger_y = double, //optional
grid_shift = {x = double, y = double}, //optional
start_on_grid = true | false, //optional
boundary = {boundary_mode = EXCLUDE | CUT | INCLUDE | ADJUST,
minimum_area = doubleconstraint,
minimum_width = doubleconstraint,
width_bound = double,
height_bound = double,
width_delta = double,
height_delta = double}, //optional
pitch = {x = double, y = double} //optional
);
Returns
void
Arguments
polygon
Required. Specifies the polygon that is filled.
width
Required. Specifies the width of the fill shape.
height
Required. Specifies the height of the fill shape.
space_x
Required. Specifies the distance between fill shapes in the x-direction.
space_y
Required. Specifies the distance between fill shapes in the y-direction.
stagger_x
Optional. Specifies the stagger distance between fill shapes in the x-direction. A value
less than 0 indicates a stagger distance in the negative x-direction. The default is 0.
stagger_y
Optional. Specifies the stagger distance between fill shapes in the y-direction. As shown
in Figure 4-23, a value less than 0 indicates a stagger distance in the negative
y-direction. The default is 0.
Figure 4-23 Stagger Distance in Negative Y-Direction
space_y space_y
space_x
stagger_y space_x
stagger_y
grid_shift
Optional. Specifies a shift to the starting point of the fill pattern origin based on the value
of the grid_mode argument of the fill_pattern() function. The default is {0.0, 0.0}.
Note:
The grid shift must be the default if you use the pitch argument.
start_on_grid
Optional. Moves the fill pattern origin it to the right-upper grid point if it is not on grid. The
default is true.
boundary
Optional. Controls the generation of a fill polygon when it is not completely within the
input polygon.
❍ boundary_mode. The default is EXCLUDE.
■ CUT. Maximum rectangle in the overlapping area of the fill rectangle and the input
polygon is generated. This maximum rectangle is called the postcut fill rectangle
This option uses the minimum_area and minimum_width values.
■ INCLUDE. Fill rectangle is generated.
Fills cannot be shrunken smaller than a minimum size, nor grown larger than a
maximum size, specified by the width_bound and height_bound arguments. The
shrinking and growing sizes must be multiples of specified delta values,
width_delta and height_delta.
❍ minimum_area. When boundary = CUT, ignore postcut fill rectangles whose area
does not satisfy the area constraint. The default is >0.
❍ minimum_width. When boundary = CUT, ignore postcut fill rectangles whose width
does not satisfy the width constraint. The default is >0.
❍ width_bound. Specifies the minimum or maximum width that the fill rectangle can
shrink or grow when boundary = ADJUST. If this value is less than the fill width, which
is specified with the width argument, then the adjustable fill is shrunk. Otherwise, the
adjustable fill is grown. The value must be nonnegative. The default is 0.0.
❍ height_bound. Specifies the minimum or maximum height that the fill rectangle can
shrink or grow when boundary = ADJUST. If this value is less than the fill height,
which is specified with the height argument, then the adjustable fill is shrunk.
Otherwise, the adjustable fill is grown. The value must be nonnegative. The default
is 0.0.
❍ width_delta. Specifies how much the fill width can change, that is, shrink or grow,
when boundary = ADJUST. The value must be nonnegative. The default is 0.0.
❍ height_delta. Specifies how much the fill height can change, that is, shrink or grow,
when boundary = ADJUST. The value must be nonnegative. The default is 0.0.
pitch
Optional. Specifies the pitch lines for generated fill. Pitch values are ignored when there
is no context layer. This argument is specified using the context_layer argument of the
fill_pattern() function. The default is {0.0, 0.0}, which means pitch is ignored.
For a finFET pitch rule, use the context_layer argument to specify the finFET
boundary layer. Set the pitch argument with x- and y-pitch grids. Fillable regions inside
a boundary polygon use the same pitch lines.
Examples
The following is an example of shrinking adjustable fill. Figure 4-25 shows the result of this
function:
fp_generate_fill(cur_polygon,
width = 0.18, height = 0.05,
space_x = 0.5, space_y = 0.5,
boundary = {boundary_mode = ADJUST,
width_bound = 0.02, width_delta = 0.03}
);
Result
The following is an example of growing adjustable fill. Figure 4-26 shows the result of this
function:
fp_generate_fill(layer1,
width = 0.05, height = 0.05,
space_x = 0.05, space_y = 0.05,
boundary = {boundary_mode = ADJUST,
width_bound = 0.14, width_delta = 0.03}
);
Result
fp_get_current_polygon()
Returns the current processing polygon from the input layer1.
Syntax
fp_get_current_polygon();
Returns
polygon
fp_new_polygon()
Creates a new empty polygon. Call the fp_set_polygon_coordinate() function to define
the new polygon.
Syntax
fp_new_polygon();
Returns
polygon
fp_polygon_area()
Returns the polygon area.
Syntax
fp_polygon_area(
polygon = polygon
);
Returns
double
fp_polygon_center_diamond()
Returns a diamond at the center of the extents of the input polygon.
Syntax
fp_polygon_center_diamond(
polygon = polygon,
shape_size = double //optional
);
Returns
polygon
Arguments
polygon
Required.
shape_size
Optional. Specifies the size of the extents of the shape. This value must be positive. It is
rounded to the nearest even multiple of the internal resolution, with a minimum of twice
the internal resolution. The internal_resolution argument of the
resolution_options() function sets the internal resolution. The default is
DRC_ERROR_BOX, which has a default of 0.1.
fp_polygon_center_square()
Returns a square at the center of the extents of the input polygon.
Syntax
fp_polygon_center_square(
polygon = polygon,
shape_size = double //optional
);
Returns
polygon
Arguments
polygon
Required. Specifies the polygon.
shape_size
Optional. Specifies the size of the extents of the shape. This value must be positive. It is
rounded to the nearest even multiple of the internal resolution, with a minimum of twice
the internal resolution. The default is DRC_ERROR_BOX, which has a default of 0.1.
fp_polygon_center_triangle()
Returns a triangle at the center of the extents of the input polygon.
Syntax
fp_polygon_center_triangle(
polygon = polygon,
shape_size = double //optional
);
Returns
polygon
Arguments
polygon
Required. Specifies the polygon.
shape_size
Optional. Specifies the size of the extents of the shape. This value must be positive. It is
rounded to the nearest even multiple of the internal resolution, with a minimum of twice
the internal resolution. The default is DRC_ERROR_BOX, which has a default of 0.1.
fp_polygon_coordinate_x()
Returns the x-value of the ith coordinate of the input polygon.
Syntax
fp_polygon_coordinate_x(
polygon = polygon,
index = integer
);
Returns
double
fp_polygon_coordinate_y()
Returns the y-value of the ith coordinate of the input polygon.
Syntax
fp_polygon_coordinate_y(
polygon = polygon,
index = integer
);
Returns
double
fp_polygon_diagonal_extent()
Returns the smallest 45-degree rectangle that contains the polygon.
Syntax
fp_polygon_diagonal_extent(
polygon = polygon
);
Returns
polygon
fp_polygon_extent()
Returns the bounding box of the polygon.
Syntax
fp_polygon_extent(
polygon = polygon
);
Returns
polygon
fp_polygon_max_rectangle()
Returns the largest rectangle (by area) that fits within its polygon argument.
Syntax
fp_polygon_max_rectangle(
polygon = polygon
);
Returns
polygon
fp_polygon_max_square()
Returns the largest square that fits within its polygon argument.
Syntax
fp_polygon_max_square(
polygon = polygon
);
Returns
polygon
fp_polygon_num_coordinates()
Returns the number of coordinates in a polygon.
Syntax
fp_polygon_num_coordinates(
polygon = polygon
);
Returns
integer
fp_set_polygon_coordinate()
Adds a coordinate to a polygon. The polygon must have been returned from a call to the
fp_new_polygon() function. The list of coordinates defines the boundary of the polygon.
The points must be in order around the outside of the polygon, in either clockwise or counter
clockwise direction. A hole is created in a polygon by defining a boundary that abuts itself.
Syntax
fp_set_polygon_coordinate(
polygon = polygon,
x = double,
y = double,
index = integer
);
Returns
void
2. Call the nps_read_property() function to get the properties, if present, on the current
polygon.
3. Perform mathematical operations on parameters and properties.
4. Call the nps_save_polygon() function to select the current polygon for output.
5. Call the nps_save_property() function to write properties to the current polygon and
save the current polygon to the output property layer.
nps_get_sum_double_property()
Retrieves the sum of the values of the specified properties for the specified layers in a net.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
nps_get_sum_double_property(
group_name = "string",
property_name = "string",
value = out_double
);
Returns
Boolean
Arguments
group_name
Required. Selects the string from the hash of input layers.
property_name
Required. Selects the string for the property name.
value
Required. Specifies the variable where the sum of the values of the property specified for
the layer group on the current net is stored. The value is 0 (zero) if the property is not
present.
nps_net_area()
Returns the area of the specified layers on the current net.
Syntax
nps_net_area(
group_name = "string"
);
Returns
double
Arguments
group_name
Required. Specifies the group whose area is requested.
nps_net_data_count()
Returns the polygon count of the specified layers on the current net.
Syntax
nps_net_data_count(
group_name = "string"
);
Returns
integer
Arguments
group_name
Required. Specifies the group whose count is requested.
nps_net_perimeter()
Returns the perimeter of the specified layers on the current net.
Syntax
nps_net_perimeter(
group_name = "string"
);
Returns
double
Arguments
group_name
Required. Specifies the group whose perimeter is requested.
nps_polygon_area()
Returns the area of the current polygon.
Syntax
nps_polygon_area();
Returns
double
nps_polygon_extent_bottom()
Returns the bottom bounding box coordinate for the polygon.
Syntax
nps_polygon_extent_bottom();
Returns
double
nps_polygon_extent_left()
Returns the left bounding box coordinate for the polygon.
Syntax
nps_polygon_extent_left();
Returns
double
nps_polygon_extent_right()
Returns the right bounding box coordinate for the polygon.
Syntax
nps_polygon_extent_right();
Returns
double
nps_polygon_extent_top()
Returns the top bounding box coordinate for the polygon.
Syntax
nps_polygon_extent_top();
Returns
double
nps_polygon_perimeter()
Returns the perimeter of the current polygon.
Syntax
nps_polygon_perimeter();
Returns
double
nps_read_property()
Returns the value of the specified property of the current polygon.
Syntax
nps_read_property(
name = "string"
);
Returns
double
Arguments
name
Required. Specifies the property name.
nps_save_polygon()
Selects the current polygon for output.
If the output for the net_polygon_select() function is to error output, the error_names
and associated values specified in the nps_save_polygon() function are included in the
LAYOUT_ERRORS file. For each value, a string is popped from the error_names list to
accompany the value in the LAYOUT_ERROR file. When the error_names are exhausted,
the values are included without a string. When the values are exhausted, the remaining
strings are ignored. Control characters in the strings are treated as regular text as the format
of the output is fixed.
Syntax
nps_save_polygon(
error_names = {"string", ...}, //optional
values = {double, ...} //optional
);
Returns
void
Arguments
error_names
Optional. Specifies the strings included in the error report.
values
Optional. Specifies the values included in the error report.
nps_save_properties()
Save property name and value on the in_property_layer.
Syntax
nps_save_properties(
multiple_properties = {{name = "string", value = double},
...}
);
Returns
void
nps_save_property()
Stores a value to the current polygon, associates it with the specified string, and saves the
polygon to the output property layer.
Syntax
nps_save_property(
name = "string",
value = double
);
Returns
void
Arguments
name
Required. Specifies the property name.
value
Required. Specifies the value that is stored.
ns_coupled_layer_area()
Returns the coupled layer area of each coupled net. The computed area is the polygon area
that establishes the coupling relationship between two nets. (The coupled layer is specified
by the layer of layer_name that is in the hash specified by the coupled_layers argument
of the net_select() function.) Use this function when you are using the coupled_layers
argument of the net_select() function.
Note:
Do not use this function with an error layer.
Syntax
ns_coupled_layer_area(
index = integer,
layer_name = "string"
);
Returns
double
Arguments
index
Required. Specifies the ith net.
layer_name
Required. Specifies the layer.
Example
The following function returns the total gate area on current net that is coupled to net i and
the gate area on coupled net i that is coupled to current net.
coupled_gate_area = ns_coupled_layer_area(index = i, "gate");
ns_coupled_layer_exist()
Returns the value true if the specified coupled layer exists; otherwise, returns the value
false.
Syntax
ns_coupled_layer_exist(
index = integer,
layer_name = "string"
);
Returns
Boolean
Arguments
index
Required. Specifies the ith net.
layer_name
Required. Specifies the layer.
ns_coupled_net_area()
Returns the area of the specified layers on the coupled net. (The layers are specified by the
group_name argument. This argument is in the hash specified by the layer_groups
argument of the net_select() function.) Use this function when you are using the
coupled_layers argument of the net_select() function.
Syntax
ns_coupled_net_area(
index = integer,
group_name = "string"
);
Returns
double
Arguments
index
Required. Specifies the ith net.
group_name
Required. Specifies the group whose area is requested.
Example
The following function returns the Vx area of the coupled net i.
via_rx_area=ns_coupled_net_area(index=i, "Vx");
ns_coupled_net_count()
Returns the number of nets that are coupled to the current net. Use this function when you
are using the coupled_layers argument of the net_select() function.
Syntax
ns_coupled_net_count();
Returns
integer
ns_get_coupled_net_double_property()
Retrieves the value of the specified net property from the connect database. Returns the
value true if the property is found; otherwise, returns the value false.
Syntax
ns_get_coupled_net_double_property(
index = integer,
property_name = "string",
value = out_double
);
Returns
Boolean
Arguments
index
Required. Specifies the ith net.
property_name
Required. Selects the string for the property name.
value
Required. Specifies the variable where the value of the property for the ith net is stored.
The value is 0 (zero) if the property is not present or the index is out of bounds.
ns_get_net_double_property()
Retrieves the value of the specified net property from the connect database. Returns the
value true if the property is found; otherwise, returns the value false.
Syntax
ns_get_net_double_property(
property_name = "string",
value = out_double
);
Returns
Boolean
Arguments
property_name
Required. Selects the string for the property name.
value
Required. Specifies the variable where the value of the property is stored. The value is 0
(zero) if the property is not present.
ns_get_sum_double_property()
Retrieves the sum of the values of the specified properties for the specified layers in a net.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
ns_get_sum_double_property(
group_name = "string",
property_name = "string",
value = out_double
);
Returns
Boolean
Arguments
group_name
Required. Selects the string from the hash of input layers.
property_name
Required. Selects the string for the property name.
value
Required. Specifies the variable where the sum of the values of the property specified for
the layer group on the current net is stored. The value is 0 (zero) if the property is not
present.
ns_net_area()
Returns the area of the specified layers on the current net.
Syntax
ns_net_area(
group_name = "string"
);
Returns
double
Arguments
group_name
Required. Specifies the group whose count is requested.
ns_net_data_count()
Returns the polygon count of the specified layers on the current net.
Syntax
ns_net_data_count(
group_name = "string"
);
Returns
integer
Arguments
group_name
Required. Specifies the group whose count is requested.
ns_net_id()
Returns the net number of the current net.
Syntax
ns_net_id();
Returns
double
ns_net_perimeter()
Returns the perimeter of the specified layers on the current net.
Syntax
ns_net_perimeter(
group_name = "string"
);
Returns
double
Arguments
group_name
Required. Specifies the group whose perimeter is requested.
ns_net_texted()
Returns the value true if the net is texted; otherwise, returns the value false.
Syntax
ns_net_texted();
Returns
Boolean
ns_save_all_nets()
Saves all nets selected by the net_select() function. The ns_save_all_nets() function
is the default function for the remote function specified by the net_function argument of
the net_select() function.
Syntax
ns_save_all_nets();
Returns
void
ns_save_coupled_layer()
Selects the coupled layer for output. Use this function when you are using the
coupled_layers argument of the net_select() function.
If the output for the net_select() function is to error output, the error_names and
associated values are included in the LAYOUT_ERRORS file. Coordinates reported in
LAYOUT_ERROR are the coordinates from the layer names in the
output_from_coupled_layers argument. The error_net_output argument if the
net_select() function controls the number of coupled layers reported per coupled nets.
For example, if multiple layers exist on a pair of coupled nets, then when
error_net_output is ONE only the coordinates of one coupled layer are reported; when
error_net_output is ALL, the coordinates of all layers on a coupled net pair are reported.
For each value, a string is popped from error_names list to accompany the value in the
LAYOUT_ERROR file. When the error_names are exhausted, the values are included
without a string. When values are exhausted, remaining strings are ignored. Control
characters in the strings are treated as regular text as the format of the output is fixed.
Syntax
ns_save_coupled_layer(
index = integer,
error_names = {"string", ...}, //optional
values = {double, ...} //optional
);
Returns
void
Arguments
index
Required. Specifies the net.
error_names
Optional. Specifies the strings included in the error report.
values
Optional. Specifies the values included in the error report.
ns_save_coupled_layer_property()
Saves the specified layer properties on the coupled polygons.
Note:
When this function is called, the output_from_coupled_layers argument of the
net_select() function must be specified by a non-empty list.
Syntax
ns_save_coupled_layer_property(
index = integer,
property_name = "string",
value = double
);
Returns
void
Arguments
index
Required. Specifies the ith net.
property_name
Required. Specifies the property name.
Note:
The property name cannot be an empty string or begin with an underscore (_).
value
Required. Specifies the property value to be saved.
ns_save_net()
Selects the current net for output.
If the output for the net_select() function is to error output, the error names and
associated values are included in the LAYOUT_ERRORS file. For each value, a string is
popped from the error_names list to accompany the value in the LAYOUT_ERROR file.
When the error names are exhausted, the values are included without a string. When the
values are exhausted, the remaining strings are ignored. Control characters in the strings
are treated as regular text because the format of the output is fixed.
Syntax
ns_save_net(
error_names = {"string", ...}, //optional
values = {double, ...} //optional
);
Returns
void
Arguments
error_names
Optional. Specifies the strings included in the error report.
values
Optional. Specifies the values included in the error report.
nsil_net_area()
Returns the net area of the specified layers that is inside the polygon (by default) or the
cluster of polygons with the same net (when mode is set to SAME_NET in the
net_select_inside_of_layer() function) from inside a layer.
Syntax
nsil_net_area(
group_name = "string"
);
Returns
integer
Arguments
group_name
Required. Specifies the group whose count is requested.
nsil_net_data_count()
Returns the polygon count of the current net inside the specified layer.
Syntax
nsil_net_data_count(
group_name = "string"
);
Returns
double
Arguments
group_name
Required. Specifies the group whose count is requested.
nsil_save_net()
Selects the current net polygons for output. Only the net polygons that are inside the
polygon (by default) or the cluster of polygons with the same net (when mode is set to
SAME_NET in the net_select_inside_of_layer() function) from inside a layer are saved
to the output polygon layer or written to the LAYOUT_ERRORS file.
If the output for the net_select_inside_of_layer() function is to error output, the error
names and associated values are included in the LAYOUT_ERRORS file. For each value, a
string is popped from the error_names list to accompany the value in the LAYOUT_ERROR
file. When the error names are exhausted, the values are included without a string. When
the values are exhausted, the remaining strings are ignored. Control characters in the
strings are treated as regular text because the format of the output is fixed.
Syntax
nsil_save_net(
error_names = {"string", ...}, //optional
values = {double, ...} //optional
);
Returns
void
Arguments
error_names
Optional. Specifies the strings included in the error report.
values
Optional. Specifies the values included in the error report.
nsil_save_double_property()
Writes the specified property to the net polygons that are inside the polygon (by default) or
the cluster of polygons with the same net (when mode is set to SAME_NET in the
net_select_inside_of_layer() function) from inside a layer. You can call this function
more than one time to save multiple properties. The property value is overwritten if you save
the same property multiple times.
Note:
Any net polygons that are not enclosed by the inside_of_layer polygon specified in
the net_select_inside_of_layer() function are discarded.
Syntax
nsil_save_double_property(
name = "string",
value = double
);
Returns
void
Arguments
name
Required. Specifies the property name.
value
Required. Specifies the property value.
nprops_net_area()
Returns the area of the specified layers on the current net.
Syntax
nprops_net_area(
group_name = "string"
);
Returns
double
Arguments
group_name
Required. Specifies the group whose area is requested.
nprops_net_data_count()
Returns the polygon count of the specified layers on the current net.
Syntax
nprops_net_data_count(
group_name = "string"
);
Returns
integer
Arguments
group_name
Required. Specifies the group whose count is requested.
nprops_net_id()
Returns the net number of the current net.
Syntax
nprops_net_id();
Returns
double
nprops_net_perimeter()
Returns the perimeter of the specified layers on the current net.
Syntax
nprops_net_perimeter(
group_name = "string"
);
Returns
double
Arguments
group_name
Required. Specifies the group whose perimeter is requested.
nprops_net_texted()
Returns the value true if the current net is texted; otherwise, returns the value false.
Syntax
nprops_net_texted();
Returns
Boolean
nprops_read_property()
Returns the value of the specified property of the current net.
Syntax
nprops_read_property(
name = "string"
);
Returns
double
Arguments
name
Required. Specifies the property name.
nprops_save_net()
Selects the current net for output.
If the output for the net_property_select() function is to error output, the error_names
and associated values specified in this function are included in the LAYOUT_ERRORS file.
For each value, a string is popped from the error_names list to accompany the value in the
LAYOUT_ERROR file. When the error_names are exhausted, the values are included
without a string. When values are exhausted, remaining strings are ignored. Control
characters in the strings are treated as regular text as the format of the output is fixed.
Syntax
nprops_save_net(
error_names = {"string", ...}, //optional
values = {double, ...} //optional
);
Returns
void
Arguments
error_names
Optional. Specifies the strings included in the error report.
values
Optional. Specifies the values included in the error report.
nprops_save_property()
Saves the property name and value on the out_property layer.
Syntax
nprops_save_property(
name = "string",
value = double
);
Returns
void
Arguments
name
Required. Specifies the property name.
value
Required. Specifies the property value to be saved.
npbp_get_double_property()
Retrieves the value of the specified property. The property is retrieved directly from the
polygon layer passed to the output_from_layer argument of the corresponding
net_polygon_by_property() function call.
Returns the Boolean value of true if the property is found on a corresponding polygon from
the output_from_layer polygon layer; otherwise, returns the Boolean value of false.
Syntax
npbp_get_double_property(
property_name = "string",
value = out_double
);
Returns
Boolean
Arguments
property_name
Required. Selects the string for the property name.
value
Required. Specifies the variable where the value of the specified property is stored. The
value is 0 if the property is not present.
npbp_get_max_double_property()
Retrieves the maximum value of the specified property for the specified layers. Returns the
value true if the property is found; otherwise, returns the value false.
Syntax
npbp_get_max_double_property(
group_name = "string",
property_name = "string",
value = out_double
);
Returns
Boolean
Arguments
group_name
Required. Selects the string from the hash of input layers.
property_name
Required. Selects the string for the property name.
value
Required. Specifies the variable where the maximum value of the specified property for
the layer group on the current net is stored. The value is 0 if the property is not present.
npbp_get_min_double_property()
Retrieves the minimum value of the specified property for the specified layers. Returns the
value true if the property is found; otherwise, returns the value false.
Syntax
npbp_get_min_double_property(
group_name = "string",
property_name = "string",
value = out_double
);
Returns
Boolean
Arguments
group_name
Required. Selects the string from the hash of input layers.
property_name
Required. Selects the string for the property name.
value
Required. Specifies the variable where the minimum value of the specified property for
the layer group on the current net is stored. The value is 0 if the property is not present.
npbp_net_data_area()
Returns the polygon area of the specified layers.
Syntax
npbp_net_data_area(
group_name = "string"
);
Returns
double
Arguments
group_name
Required. Selects the string from the hash of input layers.
npbp_net_data_count()
Returns the polygon count of the specified layers.
Syntax
npbp_net_data_count(
group_name = "string"
);
Returns
integer
Arguments
group_name
Required. Selects the string from the hash of input layers.
npbp_net_data_exist()
Returns the value true if the specified layers exist on the net; otherwise, returns the value
false.
Syntax
npbp_net_data_exist(
group_name = "string"
);
Returns
Boolean
Arguments
group_name
Required. Selects the string from the hash of input layers.
npbp_save_net()
Writes the net ID as a polygon property. Use this function with the df_polygon_same_net()
function.
Syntax
npbp_save_net();
Returns
void
npbp_save_properties()
Writes the specified properties to the current polygons.
Syntax
npbp_save_properties(
double_properties = {{name = "string", value = double} ...}
);
Returns
void
Arguments
double_properties
Required. Specifies the property names and values.
❍ name. Specifies the property name.
ptn_get_double_property()
Retrieves the value of the specified property. The net of the polygon is not considered.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
ptn_get_double_property(
property_name = "string",
value = double
);
Returns
Boolean
Arguments
property_name
Required. Selects the string for the property name.
value
Required. Specifies the variable where the value of the specified property for the layer
group on the current net is stored. The value is 0 (zero) if the property is not present.
ptn_get_list_of_double_property()
Retrieves a list of double properties from the layers defined in the layer_groups argument
and passes them to the connect database. Returns the value false if the property is not
found or it is not a double list of properties; otherwise, returns the value true.
Syntax
ptn_get_list_of_double_property(
group_name = "string",
property_name = "string",
value = double,
);
Returns
Boolean
Arguments
group_name
Required. Selects the string from the hash of input layers.
property_name
Required. Selects the string for the property name.
value
Required. Specifies the list of double properties where the value of the specified property
for the layer group on the current net is stored. The value is 0 (zero) if the property is not
present.
ptn_get_max_double_property()
Retrieves the maximum value of the specified property for the specified layers. Returns the
value true if the property is found; otherwise, returns the value false.
Syntax
ptn_get_max_double_property(
group_name = "string",
property_name = "string",
value = double,
property_at = TOP_OF_NET | ANY_LEVEL //optional
);
Returns
Boolean
Arguments
group_name
Required. Selects the string from the hash of input layers.
property_name
Required. Selects the string for the property name.
value
Required. Specifies the variable where the maximum value of the specified property for
the layer group on the current net is stored. The value is 0 (zero) if the property is not
present.
property_at
Optional. Specifies whether the ptn_get_max_double_property() function returns the
maximum property values from net polygons within a cell and its descendant cells or just
from net polygons within the cell. The default is ANY_LEVEL.
❍ TOP_OF_NET. Returns the maximum property values from the net polygons within a
cell; property values from net polygons in descendant cells are not included.
❍ ANY_LEVEL. Returns the maximum property values from the net polygons within a cell
and its descendant cells.
Important:
When using this argument, make sure the cell that contains the polygons with
voltages is not exploded in the hierarchy optimization step.
For example, if the input to the property_to_net() function comes directly from a
user_defined_properties option of the assign() function and cell C is exploded,
as shown in Figure 4-27, then properties 1.0 and 1.5 are merged and one of them will
be missed. You must mark the cell no_explode to ensure the expected results.
In this example, if you specify TOP_OF_NET, the function returns 1.5, but if you specify
ANY_LEVEL, the function returns 2.0 (the maximum of 2.0 and 1.5). However, if cell C
is exploded, the result is 2.0 regardless of whether you specify ANY_LEVEL or
TOP_OF_NET because the polygons with property values 2.0 and 1.5 are at the same
hierarchy level (Cell Top).
Figure 4-27 Maximum Property Value at Cell Level Example
2.0
1.5
Cell C
Cell Top
ptn_get_min_double_property()
Retrieves the minimum value of the specified property for the specified layers. Returns the
value true if the property is found; otherwise, returns the value false.
Syntax
ptn_get_min_double_property(
group_name = "string",
property_name = "string",
value = double,
property_at = TOP_OF_NET | ANY_LEVEL //optional
);
Returns
Boolean
Arguments
group_name
Required. Selects the string from the hash of input layers.
property_name
Required. Selects the string for the property name.
value
Required. Specifies the variable where the minimum value of the specified property for
the layer group on the current net is stored. The value is 0 (zero) if the property is not
present.
property_at
Optional. Specifies whether the ptn_get_min_double_property() function returns the
minimum property values from net polygons within a cell and its descendant cells or just
from net polygons within the cell. The default is ANY_LEVEL.
❍ TOP_OF_NET. Returns the minimum property values from the net polygons within a
cell; property values from net polygons in descendant cells are not included.
❍ ANY_LEVEL. Returns the minimum property values from the net polygons within a cell
and its descendant cells.
Warning:
When using this argument, make sure the cell that contains the polygons with
voltages is not exploded in the hierarchy optimization step.
For example, if the input to the property_to_net() function comes directly from a
user_defined_properties option of the assign() function and cell C is exploded,
as shown in Figure 4-28, then properties 1.0 and 1.5 are merged and one of them will
be missed. You must mark the cell no_explode to ensure the expected results.
In this example, if you specify TOP_OF_NET, the function returns 1.5, but if you specify
ANY_LEVEL, the function returns 1.0 (the minimum of 1.0 and 1.5). However, if cell C
is exploded, the result is 1.0 regardless of whether you specify ANY_LEVEL or
TOP_OF_NET because the polygons with property values 1.0 and 1.5 are at the same
hierarchy level (Cell Top).
Figure 4-28 Minimum Property Value at Cell Level Example
1.0
1.5
Cell C
Cell Top
ptn_get_string_property()
Writes the specified property to the current net.
Syntax
ptn_save_list_of_double_property(
group_name = "string",
property_name = "string",
value = double
);
Returns
Boolean
Arguments
group_name
Required. Selects the string from the hash of input layers.
property_name
Required. Selects the string for the property name.
value
Required. Specifies the variable where the maximum value of the specified property for
the layer group on the current net is stored. The value is 0 (zero) if the property is not
present.
ptn_net_data_exist()
Returns the value true if the specified layers exist on the net; otherwise, returns the value
false.
Syntax
ptn_net_data_exist(
group_name = "string",
);
Returns
Boolean
Arguments
group_name
Required. Specifies the property name.
ptn_save_double_property()
Writes the specified property to the current net.
Syntax
ptn_save_double_property(
name = "string",
value = double
);
Returns
void
Arguments
name
Required. Specifies the property name.
value
Required. Specifies the property value.
ptn_save_list_of_double_property()
Writes the specified list of double properties to the current net.
Syntax
ptn_save_list_of_double_property(
property_name = "string",
value = double
);
Returns
void
Arguments
property_name
Required. Specifies the list of double property name.
value
Required. Specifies the list of double property value.
ptn_save_string_property()
Writes the specified property to the current net.
Syntax
ptn_save_string_property(
name = "string",
);
Returns
void
Arguments
name
Required. Specifies the property name.
pf_fnote()
Writes data to the specified file.
Syntax
pf_fnote(
file_index = integer, //optional
data = "string" //optional
);
Returns
void
Arguments
file_index
Optional. Selects the ASCII file specified in the files argument of the
polygon_features() function. The first file in the list has an index of 0. The default is 0;
that is, the first file in the list.
data
Optional. Specifies the string to be written.
Example
The following example uses the pf_fnote() function inside of a polygon_features()
remote function that is named myfun:
myfun : function() returning void {
pf_fnote(data = "---------------File 1 Polygon---------------\n");
pf_fnote(0, "AREA=" + pf_polygon_area() + "\n");
pf_fnote(1, "EXTENT=" + pf_polygon_extent() + "\n");
}
f1 = fopen("f1.txt",OVERWRITE);
f2 = fopen("f2.txt",APPEND);
See Also
fopen()
polygon_features()
pf_get_current_polygon()
Returns the current polygon.
Syntax
pf_get_current_polygon();
Returns
polygon
pf_new_polygon()
Creates a new empty polygon. Call the pf_set_polygon_coordinate() function to define
the new polygon.
Syntax
pf_new_polygon();
Returns
polygon
pf_polygon_area()
Returns the area of its polygon argument.
Syntax
pf_polygon_area(
polygon = polygon
)
Returns
double
pf_polygon_center_diamond()
Returns a diamond at the center of the extents of the input polygon.
Syntax
pf_polygon_center_diamond(
polygon = polygon,
shape_size = double //optional
);
Returns
polygon
Arguments
polygon
Required. Specifies the polygon.
shape_size
Optional. Specifies the size of the extents of the shape. This value must be positive. It is
rounded to the nearest even multiple of the internal resolution, with a minimum of twice
the internal resolution. The internal_resolution argument of the
resolution_options() function sets the internal resolution. The default is
DRC_ERROR_BOX, which has a default of 0.1.
pf_polygon_center_square()
Returns a square at the center of the extents of the input polygon.
Syntax
pf_polygon_center_square(
polygon = polygon,
shape_size = double //optional
);
Returns
polygon
Arguments
polygon
Required. Specifies the polygon.
shape_size
Optional. Specifies the size of the extents of the shape. This value must be positive. It is
rounded to the nearest even multiple of the internal resolution, with a minimum of twice
the internal resolution. The default is DRC_ERROR_BOX, which has a default of 0.1.
pf_polygon_center_triangle()
Returns a triangle at the center of the extents of the input polygon.
Syntax
pf_polygon_center_triangle(
polygon = polygon,
shape_size = double //optional
);
Returns
polygon
Arguments
polygon
Required. Specifies the polygon.
shape_size
Optional. Specifies the size of the extents of the shape. This value must be positive. It is
rounded to the nearest even multiple of the internal resolution, with a minimum of twice
the internal resolution. The default is DRC_ERROR_BOX, which has a default of 0.1.
pf_polygon_coordinate_x()
Returns the x-value of the ith coordinate of the input polygon.
Syntax
pf_polygon_coordinate_x(
polygon = polygon,
index = integer
);
Returns
double
pf_polygon_coordinate_y()
Returns the y-value of the ith coordinate of the input polygon.
Syntax
pf_polygon_coordinate_y(
polygon = polygon,
index = integer
);
Returns
double
pf_polygon_diagonal_extent()
Returns the smallest 45-degree rectangle that contains the polygon.
Syntax
pf_polygon_diagonal_extent(
polygon = polygon
);
Returns
polygon
pf_polygon_extent()
Returns the bounding box of the polygon.
Syntax
pf_polygon_extent(
polygon = polygon
);
Returns
polygon
pf_polygon_max_rectangle()
Returns the largest rectangle (by area) that fits within its polygon argument.
Syntax
pf_polygon_max_rectangle(
polygon = polygon
);
Returns
polygon
pf_polygon_max_square()
Returns the largest square that fits within its polygon argument.
Syntax
pf_polygon_max_square(
polygon = polygon
);
Returns
polygon
pf_polygon_num_coordinates()
Returns the number of coordinates in a polygon.
Syntax
pf_polygon_num_coordinates(
polygon = polygon
);
Returns
integer
pf_save_polygon()
Writes a polygon to the output layer. If the coordinate list does not form a closed polygon,
the IC Validator tool closes the polygon. Zero area polygons are not written to the output
layer. A warning is given for self-intersecting polygons, and the intersection area is left
empty.
Syntax
pf_save_polygon(
polygon = polygon
);
Returns
void
pf_set_polygon_coordinate()
Adds a coordinate to a polygon. The polygon must have been returned from a call to the
pf_new_polygon() function. The list of coordinates defines the boundary of the polygon.
The points must be in order around the outside of the polygon, in either clockwise or counter
clockwise direction. A hole is created in a polygon by defining a boundary that abuts itself.
Syntax
pf_set_polygon_coordinate(
polygon = polygon,
x = double,
y = double,
index = integer
);
Returns
void
In addition to the following utility functions, you can use the general purpose functions, such
as note() function to write a message in the summary file, and to the screen when you use
the -verbose option. See “General-Purpose Functions” on page 4-3 for more information.
• In the case where there is a property error, call the lvs_property_error() function.
lvs_count_candidates()
Returns the count of candidate devices considered for merging.
Important:
This function can be called only in the remote function specified in the
exclude_function argument of the merge_parallel() and merge_series()
functions.
Syntax
lvs_count_candidates();
Returns
integer
lvs_current_device()
Returns the ID of the device currently being processed.
Important:
This function can be called only in the remote filter_function argument of the
filter() function, in the remote property_functions argument of the
merge_parallel() and merge_series() functions, and in the remote
property_function argument of the recalculate_property() function.
Syntax
lvs_current_device();
Returns
device
lvs_exclude_from_merge()
Specifies the device candidates that are excluded from merging.
Important:
This function can be called only in the remote exclude_function argument of the
merge_parallel() and merge_series() functions.
Syntax
lvs_exclude_from_merge(
device = device
);
Returns
void
lvs_get_candidate()
Returns the candidate device specified by the index. Use the lvs_count_candidates()
function to find out the maximum index.
Important:
This function can be called only in the remote exclude_function argument of the
merge_parallel() and merge_series() functions.
Syntax
lvs_get_candidate(
index = integer
);
Returns
device
lvs_layout_device()
Returns the device ID of a layout device.
Important:
This function can be called only in the remote property_function argument of the
check_property() function.
Syntax
lvs_layout_device();
Returns
device
lvs_property_error()
Reports an error message during property comparison. You can use this function to pass the
property error information to the compare flow.
Important:
This function can be called only in the remote property_function argument of the
check_property() function.
Syntax
lvs_property_error(
message = "string"
);
Returns
void
Arguments
message
Required. Specifies the message to write to the output file.
lvs_remove_device()
Removes a device from the netlist.
Important:
This function can be called only within the filter() function.
Syntax
lvs_remove_device();
Returns
void
lvs_save_double_property()
Saves the property value in the property_functions argument of the merge_parallel()
and merge_series() functions.
Important:
This function can be called only in the remote property_functions argument of the
merge_parallel()and merge_series() functions or the remote property_function
argument of the recalculate_property() function.
Syntax
lvs_save_double_property(
property_name = "string",
value = double
);
Returns
void
lvs_save_string_property()
Saves the string property value in the property_functions argument of the
merge_parallel() and merge_series() functions.
Important:
This function can be called only in the remote property_functions argument of the
merge_parallel()and merge_series() functions or the remote property_function
argument of the recalculate_property() function.
Syntax
lvs_save_string_property(
property_name = "string",
value = "string"
);
Returns
void
lvs_schematic_device()
Returns the device ID of a schematic device.
Important:
This function can be called only in the remote property_function argument of the
check_property() function.
Syntax
lvs_schematic_device();
Returns
device
lvs_all_equal()
Returns the value true if all properties of all members of the device are equal; otherwise,
returns the value false.
Syntax
lvs_all_equal(
device = device
);
Returns
Boolean
lvs_are_nets_identical()
Returns the value true if the nets are connected together (shorted); otherwise, returns the
value false.
Syntax
lvs_are_nets_identical(
net1 = net,
net2 = net
);
Returns
Boolean
lvs_avg()
Calculates the average of all member properties for the specified property of the device
instance. Returns the value true if property was successfully returned; otherwise, returns the
value false and an avg value of NaN.
Syntax
lvs_avg(
device = device,
property_name = "string",
avg = out_double
);
Returns
Boolean
lvs_count_device_pins()
Returns the number of pins on a device.
Syntax
lvs_count_device_pins(
device = device
);
Returns
integer
lvs_count_devices_on_net()
Returns the number of devices connected to a net.
Syntax
lvs_count_devices_on_net(
net = net
);
Returns
integer
lvs_count_members()
Returns the count of the member devices belonging for the device instance.
Syntax
lvs_count_members(
device = device
);
Returns
integer
lvs_count_pins_on_net()
Returns the number of pins connected to a net.
Syntax
lvs_count_pins_on_net(
net = net
);
Returns
integer
lvs_device_name()
Returns the device name as a string.
Syntax
lvs_device_name(
device = device
);
Returns
string
Example
layoutID : device = lvs_layout_device();
devModelName : string = lvs_device_name(layoutID);
lvs_device_type()
Returns the device type as an enumerated type. The possible device types are: NMOS,
PMOS, NPN, PNP, PN, NP, RESISTOR, CAPACITOR, INDUCTOR, and GENERIC.
Syntax
lvs_device_name(
device = device
);
Returns
lvs_device_type_result
Example
layoutID : device = lvs_layout_device();
devType : device_type_e = lvs_device_type(layoutID);
flag : boolean;
wprop : double;
if (devType == NMOS) {
flag = lvs_get_double_property(layoutID, "w", wprop);
}
lvs_get_compare_tolerance()
Retrieves property comparison tolerance and tolerance type values for the given device
identifier and property name. Values are retrieved from the property_tolerances
argument of the check_property() function call corresponding to the
lvs_get_compare_tolerance() function device argument.
Returns the value true if the property_name argument value is specified in the
property_tolerances argument of the matching check_property() function call;
otherwise, returns the value false.
Syntax
lvs_get_compare_tolerance(
device = device,
property_name = "string",
tolerance = out_constraint_of_double,
tolerance_type = out_tolerance_type
);
Returns
Boolean
Arguments
device
Required. Specifies the device.
property_name
Required. Specifies a property in the property_tolerances argument of the
check_property() function.
tolerance
Specifies the variable where the value of the tolerance specified in the
property_tolerances argument of the check_property() function is stored.
tolerance_type
Specifies the variable where the value of the tolerance type, either relative or absolute,
specified in the property_tolerances argument of the check_property() function is
stored.
Example
schematicID : device = lvs_schematic_device();
if (!flag) {
lvs_property_error("check_property() call does not define property
checking for property w");
}
lvs_get_device_nets_by_index()
Returns a net ID from the list of nets connected to the device as specified by the index. Use
the lvs_count_device_pins() function to determine the number of pins on a device.
Syntax
lvs_get_device_nets_by_index(
device = device,
index = integer
);
Returns
net
Arguments
device
Required. Specifies the device ID.
index
Required.
Example
// filter any device having two or more pins connected
devID : device = lvs_current_device();
for (i=0 to lvs_count_device_pins(devID)-2) {
for (j=i+1 to lvs_count_device_pins(devID)-1){
if (lvs_are_nets_identical(netID, netIDNext)) {
lvs_remove_device();
}
}
}
lvs_get_device_nets_by_pin_name()
Returns a net ID from the list of nets connected to the device as specified by the pin_name.
Syntax
lvs_get_device_nets_by_pin_name(
device = device,
pin_name = "string"
);
Returns
net
Arguments
device
Required. Specifies the device ID.
pin_name
Required.
lvs_get_device_on_net()
Returns a device instance on the specified net corresponding to the specified index. The
index selects a specific pin connection to the net, and it is bounded by the value returned by
the lvs_count_pins_on_net() function. For a given index, the instance returned by the
lvs_get_device_on_net() function corresponds to the pin name returned by the
lvs_get_pin_name_on_net() function.
Syntax
lvs_get_device_on_net(
net = net,
index = integer
);
Returns
device
Arguments
net
Required. Specifies the net ID.
index
Required. Specifies an integer value in the range of
0 <= index <= lvs_count_pins_on_net() - 1
Example
// Each instance named 'instname' connects to net 'nt'
// by way of a pin named 'pinname'.
lvs_get_double_property()
Retrieves the property value. Returns the value true if property was successfully returned;
otherwise, returns the value false and a value of NaN if the property does not exist or if the
value is a string.
Syntax
lvs_get_double_property(
device = device,
property_name = "string",
value = out_double
);
Returns
Boolean
lvs_get_exclude_tolerance()
Retrieves property tolerance and tolerance type values for the given property name. Returns
the value true if the property is declared in the remote exclude_function argument of the
merge_parallel() or merge_series() function; otherwise, returns the value false.
Syntax
lvs_get_exclude_tolerance(
property_name = "string",
tolerance = out_constraint_of_double,
tolerance_type = out_tolerance_type
);
Returns
Boolean
Arguments
property_name
Required. Specifies a property in the exclude_tolerances argument of the
merge_parallel() or merge_series() function.
tolerance
Specifies the variable where the value of the tolerance specified in the
exclude_tolerances argument of the merge_parallel() or merge_series() function
is stored.
tolerance_type
Specifies the variable where the value of the tolerance type, either relative or absolute,
specified in the exclude_tolerances argument of the merge_parallel() or
merge_series() function is stored.
lvs_get_member()
Returns the device ID of a member as specified by the index. Use the
lvs_count_members() function to determine the maximum index.
Syntax
lvs_get_member(
device = device,
index = integer
);
Returns
device
lvs_get_pin_name_on_net()
Returns a pin name on the specified net corresponding to the specified index. The index
selects a specific pin connection to the net; it is bounded by the value returned by the
lvs_count_pins_on_net() function. For a given index, the pin name returned by the
lvs_get_pin_name_on_net() function corresponds to the instance returned by the
lvs_get_device_on_net() function.
Syntax
lvs_get_pin_name_on_net(
net = net,
index = integer
);
Returns
string
Arguments
net
Required. Specifies the net ID.
index
Required. Specifies an integer value in the range of
0 <= index <= lvs_count_pins_on_net() - 1
Example
See the Example section of the lvs_get_device_on_net() function.
lvs_get_parent_instance_id()
Returns a unique ID of each parent instance that contains the device. Devices in the same
parent instance have the same parent instance ID. The parent instance ID properties are
calculated based on the extracted netlist hierarchy before any flattening of the equivalence
point netlist.
For example, to make the parent instance ID a property that is available for use in device
merging applications during LVS compare, call the lvs_get_parent_instance_id()
function in the remote function of the recalculate_property() function.
Syntax
lvs_get_parent_instance_id(
device = device
);
Returns
integer
Arguments
device
Required. Specifies the device ID.
lvs_get_string_property()
Retrieves the property. Returns the value true if the property was successfully returned;
otherwise, returns the value false and a value of empty string if the property does not exist
or if the value is a double.
Syntax
lvs_get_string_property(
device = device,
property_name = "string",
value = out_string
);
Returns
Boolean
lvs_instance_name()
Returns the device name as a string. For example, “M1”.
Syntax
lvs_instance_name(
device = device
);
Returns
string
lvs_is_capacitor()
Returns the value true if the instance is a capacitor; otherwise, returns the value false.
Syntax
lvs_is_capacitor(
device = device
);
Returns
Boolean
lvs_is_composite()
Returns the value true if the instance is a composite device; otherwise, returns the value
false if the device is a primitive.
Syntax
lvs_is_composite(
device = device
);
Returns
Boolean
lvs_is_generic()
Returns the value true if the instance is a generic device; otherwise, returns the value false.
Syntax
lvs_is_generic(
device = device
);
Returns
Boolean
lvs_is_inductor()
Returns the value true if the instance is an inductor; otherwise, returns the value false.
Syntax
lvs_is_inductor(
device = device
);
Returns
Boolean
lvs_is_layout_device()
Returns the value true if the specified device is a layout device; otherwise, returns the value
false.
Syntax
lvs_is_layout_device(
device = device
);
Returns
Boolean
lvs_is_member()
Returns the value true if the instance is a member of a merged composite device; otherwise,
returns the value false.
Syntax
lvs_is_member(
device = device
);
Returns
Boolean
lvs_is_net_floating()
Returns the value true if the net is floating; otherwise, returns the value false.
Syntax
lvs_is_net_floating(
net = net
);
Returns
Boolean
lvs_is_net_ground()
Returns the value true if the specified net is connected to ground; otherwise, returns the
value false.
Syntax
lvs_is_net_ground(
net = net
);
Returns
Boolean
lvs_is_net_port()
Returns the value true if the specified net is connected to a port net; otherwise, returns the
value false.
Syntax
lvs_is_net_port(
net = net
);
Returns
Boolean
lvs_is_net_power()
Returns the value true if the specified net is connected to power; otherwise, returns the
value false.
Syntax
lvs_is_net_power(
net = net
);
Returns
Boolean
lvs_is_nmos()
Returns the value true if the instance is an NMOS device; otherwise, returns the value false.
Syntax
lvs_is_nmos(
device = device
);
Returns
Boolean
lvs_is_np()
Returns the value true if the instance is an NP device; otherwise, returns the value false.
Syntax
lvs_is_np(
device = device
);
Returns
Boolean
lvs_is_npn()
Returns the value true if the instance is an NPN device; otherwise, returns the value false.
Syntax
lvs_is_npn(
device = device
);
Returns
Boolean
lvs_is_parallel()
Returns the value true if the instance is a parallel merged device; otherwise, returns the
value false.
Syntax
lvs_is_parallel(
device = device
);
Returns
Boolean
lvs_is_parallel_chain()
Returns the value true if the instance is a parallel-chain merged device; otherwise, returns
the value false.
Syntax
lvs_is_parallel_chain(
device = device
);
Returns
Boolean
lvs_is_pmos()
Returns the value true if the instance is a PMOS device; otherwise, returns the value false.
Syntax
lvs_is_pmos(
device = device
);
Returns
Boolean
lvs_is_pn()
Returns the value true if the instance is a PN device; otherwise, returns the value false.
Syntax
lvs_is_pn(
device = device
);
Returns
Boolean
lvs_is_pnp()
Returns the value true if the instance is a PNP device; otherwise, returns the value false.
Syntax
lvs_is_pnp(
device = device
);
Returns
Boolean
lvs_is_resistor()
Returns the value true if the instance is a resistor; otherwise, returns the value false.
Syntax
lvs_is_resistor(
device = device
);
Returns
Boolean
lvs_is_schematic_device()
Returns the value true if the specified device is a schematic device; otherwise, returns the
value false.
Syntax
lvs_is_schematic_device(
device = device
);
Returns
Boolean
lvs_is_series()
Returns the value true if the instance is a series merged device; otherwise, returns the value
false.
Syntax
lvs_is_series(
device = device
);
Returns
Boolean
lvs_is_top_block()
Returns the value true if the top cell is currently being processed; otherwise, returns the
value false.
Syntax
lvs_is_top_block();
Returns
Boolean
lvs_max()
Retrieves the maximum value of all member properties for the specified property of the
device instance. Returns the value true if property was successfully returned; otherwise,
returns the value false and a max value of NaN if the property does not exist.
Syntax
lvs_max(
device = device,
property_name = "string",
max = out_double
);
Returns
Boolean
lvs_min()
Retrieves the minimum value of all member properties for the specified property of the
device instance. Returns the value true if property was successfully returned; otherwise,
returns the value false and a min value of NaN if the property does not exist.
Syntax
lvs_min(
device = device,
property_name = "string",
min = out_double
);
Returns
Boolean
lvs_net_name()
Returns the name of the net.
Syntax
lvs_net_name(
net = net
);
Returns
string
lvs_product()
Calculates the product of all member properties for the specified property of the device
instance. Returns the value true if the device is a composite device and the calculation was
successful; otherwise, returns the value false and a sum value of NaN.
Syntax
lvs_product(
device = device,
property_name = "string",
product = out_double
);
Returns
Boolean
lvs_same_device()
Returns the value true if the two devices represent the same device; otherwise, returns the
value false.
Syntax
lvs_same_device(
device1 = device,
device2 = device
);
Returns
Boolean
lvs_schematic_layout_net_match()
Checks for matched device pin connections inside a check_property() check_function.
Both the schematic_net and layout_net arguments are net objects returned by net
retrieval functions such as lvs_get_device_nets_by_index() and
lvs_get_device_nets_by_pin_name().
Returns the value true if the schematic net was matched to a layout net; otherwise, returns
the value false.
Syntax
lvs_schematic_layout_net_match(
schematic_net = net,
layout_net = net
);
Returns
Boolean
Example
This example detects whether devices were matched with swapped pins to compare
property values that are a function of pin swapping.
schematicID = lvs_schematic_device();
layoutID = lvs_layout_device();
lvs_split_series_chain()
Breaks the series chain at the junction between member1 and member2. The broken chains
can be merged separately in series.
Syntax
lvs_split_series_chain(
member1 = device,
member2 = device
);
Returns
void
lvs_sum()
Calculates the sum of all member properties for the specified property of the device
instance.
Returns the value true if the property was found; otherwise, returns the value false and a sum
value of NaN if the property does not exist.
Syntax
lvs_sum(
device = device,
property_name = "string",
sum = out_double
);
Returns
Boolean
lvs_sum_of_divisions()
Calculates the sum of the list of (property_name1 / property_name2). Returns the value
true if the calculation was successful; otherwise, returns the value false and a sum value of
NaN if the property of a member does not exist.
Syntax
lvs_sum_of_divisions(
device = device,
property_name1 = "string",
property_name2 = "string",
sum_of_divisions_result = out_double
);
Returns
Boolean
lvs_sum_of_products()
Calculates the sum of the list of (property_name1 X property_name2). Returns the value
true if the calculation was successful; otherwise, returns the value false and a sum value of
NaN if the property of a member does not exist.
Syntax
lvs_sum_of_products(
device = device,
property_name1 = "string",
property_name2 = "string",
sum_of_products_result = out_double
);
Returns
Boolean
lvs_sum_of_reciprocals()
Calculates the sum of the list of (1 / property_name). Returns the value true if the device
is a composite device and the calculation was successful; otherwise, returns the value false
and a sum value of NaN.
Syntax
lvs_sum_of_reciprocals(
device = device,
property_name = "string",
sum_of_products_reciprocals = out_double
);
Returns
Boolean
efe_get_current_edge()
Returns the current edge.
Syntax
efe_get_current_edge();
Returns
edge
efe_new_edge()
Allocates a new edge for storing output.
Syntax
efe_new_edge();
Returns
edge
efe_edge_coordinate_x()
Returns the x-value of the ith coordinate of an edge.
Syntax
efe_edge_coordinate_x(
edge = edge,
index = integer
);
Returns
double
Arguments
edge
Required. Specifies the input edge.
index
Required. Specifies the coordinate index (i).
efe_edge_coordinate_y()
Returns the y-value of the jth coordinate of an edge.
Syntax
efe_edge_coordinate_y(
edge = edge,
index = integer
);
Returns
double
Arguments
edge
Required. Specifies the input edge.
index
Required. Specifies the coordinate index (j).
efe_save_edge()
Writes an edge to the output layer. Edges with no length are quietly dropped.
Syntax
efe_save_edge(
edge = edge,
);
Returns
void
Arguments
edge
Required. Specifies the edge that is written.
efe_set_edge_coordinate()
Adds a coordinate to an edge. The coordinates are written in the order specified.
Syntax
efe_set_edge_coordinate(
edge = edge,
x = double,
y = double,
index = integer
);
Returns
void
Arguments
edge
Required. Specifies the input edge.
x
Required. Specifies the x-value of the new coordinate.
y
Required. Specifies the y-value of the new coordinate.
index
Required. Specifies the index of the new coordinate. A negative value causes an error.
• df_matrix. Token for a two-dimensional array that consists of widths and projection
distances from error layers to an edge in the edge layer.
In addition to the following utility functions, you can use the general purpose functions, such
as note() function to write a message in the summary file, and to the screen when you use
the -verbose option. See “General-Purpose Functions” on page 4-3 for more information.
The body of the remote function is typically organized as shown here:
1. Begin with a call to the df_get_current_data() function. Use the various
df_polygon_*(), df_edge_*(), and df_marker_*() functions and the
df_error_layer() function to get the cluster data sets.
df_common_double_property_index()
Retrieves the first common key for two lists of double properties and returns the index from
the first property list.
Syntax
df_common_double_property_index(
polygon_set1 = df_polygon_set,
index1 = integer,
name1 = "string",
polygon_set2 = df_polygon_set,
index2 = integer,
name2 = "string"
);
Returns
Boolean
Arguments
polygon_set1
Required. Specifies the first polygon set.
index1
Required. Specifies the index (i) of the first target polygon in the polygon set. A negative
value causes an error.
name1
Required. Specifies the name of the first double property.
polygon_set2
Required. Specifies the second polygon set.
index2
Required. Specifies the index (i) of the second target polygon in the polygon set. A
negative value causes an error.
name2
Required. Specifies the name of the second double property.
df_edge_count()
Returns the number of data objects in the specified edge set.
Syntax
df_edge_count(
edge_set = df_edge_set
);
Returns
integer
Arguments
edge_set
Required. Specifies the edge set.
df_edge_exist()
Returns the value true if the number of data objects in the specified edge set is greater
than 0; otherwise, returns the value false.
Syntax
df_edge_exist(
edge_set = df_edge_set
);
Returns
Boolean
Arguments
edge_set
Required. Specifies the edge set.
df_edge_length()
Returns the length of the ith edge in the specified edge set. The order of the edges is
arbitrary.
Syntax
df_edge_length(
edge_set = df_edge_set,
index = integer
);
Returns
double
Arguments
edge_set
Required. Specifies the edge set.
index
Required. Specifies the index of the edge set. A negative value causes an error.
df_edge_layer()
Returns the edge set for the specified edge layer that interacts with the primary polygon or
edge.
Syntax
df_edge_layer(
primary_data = df_data,
edge_layer_name = "string"
);
Returns
df_edge_set
Arguments
primary_data
Required. Specifies the current primary polygon or edge.
edge_layer_name
Required. Specifies the edge layer whose characteristics are requested. Use an empty
string to get the primary edge layer.
df_edge_horizontal_length()
Returns the length of the ith edge in the specified edge set if it is horizontal; otherwise,
returns the value 0.
Syntax
df_edge_horizontal_length(
edge_set = df_edge_set,
index = integer
);
Returns
double
Arguments
edge_set
Required. Specifies the edge set.
index
Required. Specifies the index of the edge set. A negative value causes an error.
df_edge_max_length()
Returns the maximum of the lengths of all edges in the specified edge set.
Syntax
df_edge_max_length(
edge_set = df_edge_set
);
Returns
double
Arguments
edge_set
Required. Specifies the edge set.
df_edge_min_length()
Returns the minimum of the lengths of all edges in the specified edge set.
Syntax
df_edge_min_length(
edge_set = df_edge_set
);
Returns
double
Arguments
edge_set
Required. Specifies the edge set.
df_edge_proximity()
Calculates the smallest projection distances of each error set within a specified range,
together with the fracturing region widths on a specified edge in the edge set that
corresponds to each projection. The output is a proximity matrix for the specified edge in the
edge set. A common superset of the fracturing of the specified edge in the edge set is
derived to measure projections on multiple error sets simultaneously.
Returns true if the matrix is successfully formed; otherwise, returns false and the values in
the output proximity are undefined.
Note:
The proximity matrix cannot be formed if the error edges of the error set do not line touch
the specified edge of the edge set or if the input edge set is not orthogonal. The other
edge of the error set can have any angle.
Syntax
df_edge_proximity(
edge_set = df_edge_set,
index = integer
criteria = {{error_set = df_error_set,
ordinal = integer,
range = double},
...},
proximity = df_matrix
);
Returns
Boolean
Arguments
edge_set
Required. Specifies the edge set.
index
Required. Specifies the index (i) of the target edge in the edge set. A negative value
causes an error.
criteria
Required. Specifies the error sets and their accompanying parameters.
❍ error_set. Required. Specifies the error sets to be measured simultaneously.
proximity
Required. Specifies where the calculated values are stored. The dimension is
(number-of-edge-set-fracturing) x (1 + number-of-input-error-sets)
Column 0 is the common fracturing region widths on the edge set. Column n is the ith
smallest projection distance of the nth error set, where i is the ordinal setting of the nth
error set.
Examples
Example 1
In this example, the brown line represents the edge set and the colored areas around the
brown line represent the error sets for well_1 and well_2 respectively. The ordinals are both
1, and the ranges are sufficiently large.
L1, 1, R ,
L2, 1, R
W 0 L1 0 L2 0
proximity = W 1 L1 1 L2 1
W 7 L1 7 L2 7
Example 2
In this example, the black line represents the edge set (E), the green data represents the
external error set (L1), and the orange data represents the enclose error set (L2).
To calculate the first three distances of L1 and the closest distance of L2, the input data is
L1, 1, R ,
L1, 2, R ,
L1, 3, R ,
L2, 1, R
W0 x R R R
W1 x R R a
W2 y x R a
proximity =
W3 y x R b
W4 z y x b
W5 z y x R
See Also
dev_proximity_list()
df_edge_sum_horizontal_length()
Returns the sum of the lengths of all horizontal edges in the specified edge set.
Syntax
df_edge_sum_horizontal_length(
edge_set = df_edge_set
);
Returns
double
Arguments
edge_set
Required. Specifies the edge set.
df_edge_sum_length()
Returns the sum of the lengths of all edges in the specified edge set.
Syntax
df_edge_sum_length(
edge_set = df_edge_set
);
Returns
double
Arguments
edge_set
Required. Specifies the edge set.
df_edge_sum_vertical_length()
Returns the sum of the lengths of all vertical edges in the specified edge set.
Syntax
df_edge_sum_vertical_length(
edge_set = df_edge_set
);
Returns
double
Arguments
edge_set
Required. Specifies the edge set.
df_edge_sum_x_length()
Returns the sum of the delta x-axis lengths of all edges in the specified edge set.
Syntax
df_edge_sum_x_length(
edge_set = df_edge_set
);
Returns
double
Arguments
edge_set
Required. Specifies the edge set.
df_edge_sum_y_length()
Returns the sum of the delta y-axis lengths of all edges in the specified edge set.
Syntax
df_edge_sum_y_length(
edge_set = df_edge_set
);
Returns
double
Arguments
edge_set
Required. Specifies the edge set.
df_edge_vertical_length()
Returns the length of the ith edge in the specified edge set if it is vertical; otherwise, returns
the value 0.
Syntax
df_edge_vertical_length(
edge_set = df_edge_set,
index = integer
);
Returns
double
Arguments
edge_set
Required. Specifies the edge set.
index
Required. Specifies the index of the edge set. A negative value causes an error.
df_edge_x_length()
Returns the delta x-axis length of the ith edge in the specified edge set.
Syntax
df_edge_x_length(
edge_set = df_edge_set
index = integer
);
Returns
double
Arguments
edge_set
Required. Specifies the edge set.
index
Required. Specifies the index of the edge set. A negative value causes an error.
df_edge_y_length()
Returns the delta y-axis length of the ith edge in the specified edge set.
Syntax
df_edge_y_length(
edge_set = df_edge_set
index = integer
);
Returns
double
Arguments
edge_set
Required. Specifies the edge set.
index
Required. Specifies the index of the edge set. A negative value causes an error.
df_error_angle()
Returns the angle between two edges of the ith error in the specified error set if the error
consists of two edges; otherwise, returns the value 0. The return value is in the range [0,pi].
Syntax
df_error_angle(
error_set = df_error_set,
index = integer
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
df_error_max_angle()
Returns the maximum angle from the angles of two edges of any errors in the specified error
set if the error consists of two edges; otherwise, returns the value 0 (zero). The return value
is in the range [0,pi].
Syntax
df_error_max_angle(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_min_angle()
Returns the minimum angle from the angles of two edges of any errors in the specified error
set if the error consists of two edges; otherwise, returns the value 0 (zero). The return value
is in the range [0,pi].
Syntax
df_error_min_angle(
error_set = df_error_set,
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_count()
Returns the number of data objects in the specified error set.
Syntax
df_error_count(
error_set = df_error_set
);
Returns
integer
Arguments
error_set
Required. Specifies the error set.
df_error_distance()
Returns the distance of the ith error in the specified error set. The order of the errors is
arbitrary.
Syntax
df_error_distance(
error_set = df_error_set,
index = integer
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
df_error_exist()
Returns the value true if the number of data objects in the specified error set is greater
than 0; otherwise, returns the value false.
Syntax
df_error_exist(
error_set = df_error_set
);
Returns
Boolean
Arguments
error_set
Required. Specifies the error set.
df_error_horizontal_distance()
Returns the distance of the ith error in the specified error set if the distance vector is
horizontal; otherwise, returns the value 0.
Syntax
df_error_horizontal_distance(
error_set = df_error_set,
index = integer
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
df_error_layer()
Returns the error set for the specified error layer that interacts with the primary polygon or
edge.
Syntax
df_error_layer(
primary_data = df_data,
error_layer_name = "string"
);
Returns
df_error_set
Arguments
primary_data
Required. Specifies the current primary polygon or edge.
error_layer_name
Required. Specifies the error layer whose characteristics are requested. Use an empty
string to get the primary error layer.
df_error_max_distance()
Returns the maximum of the distances of all errors in the specified error set.
Syntax
df_error_max_distance(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_max_projection_length()
Returns the maximum of the projection lengths of all errors in the specified error set.
Syntax
df_error_max_projection_length(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_max_sum_orthogonal_projection_length()
Adds the horizontal projection lengths of all errors in the specified error set, and adds the
vertical projection lengths of all errors in the specified error set, and then returns the
maximum of the two sums.
Note:
This function is intended for situations when both orientations must be processed
separately, but the processing is the same for both orientations.
Syntax
df_error_max_sum_orthogonal_projection_length(
error_set = df_error_set,
merge = true | false
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
merge
Required. Specifies how to merge the lengths.
❍ true. All horizontal projection lengths are translated to the x-axis and merged before
being added together. All vertical projection lengths are translated to the y-axis and
merged before being added together.
❍ false. The lengths are not merged before being added together.
Example
The following user-defined function is similar to the chk_proj_sum() function shown in the
example for the df_error_sum_vertical_projection_length() function.
chk_proj_sum_simpler: function (void) returning void {
c_data = df_get_current_data();
x1 = df_error_layer(c_data, "err");
if (df_error_max_sum_orthogonal_projection_length(xl,true) > L){
df_save_data(c_data);
}
}
df_error_min_distance()
Returns the minimum of the distances of all errors in the specified error set.
Syntax
df_error_min_distance(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_min_projection_length()
Returns the minimum of the projection lengths of all errors in the specified error set.
Syntax
df_error_min_projection_length(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_min_sum_orthogonal_projection_length()
Adds the horizontal projection lengths of all errors in the specified error set, and adds the
vertical projection lengths of all errors in the specified error set, and then returns the
minimum of the two sums.
Note:
This function is intended for situations when both orientations must be processed
separately, but the processing is the same for both orientations.
Syntax
df_error_min_sum_orthogonal_projection_length(
error_set = df_error_set,
merge = true | false
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
merge
Required. Specifies how to merge the lengths.
❍ true. All horizontal projection lengths are translated to the x-axis and merged before
being added together. All vertical projection lengths are translated to the y-axis and
merged before being added together.
❍ false. The lengths are not merged before being added together.
df_error_parallel_distance()
Returns the distance of the ith error in the specified error set if the error consists of two
parallel edges; otherwise, returns the value 0.
Syntax
df_error_parallel_distance(
error_set = df_error_set,
index = integer
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
df_error_projection_length()
Returns the projection length of the ith error in the specified error set. The order of the errors
is arbitrary.
Syntax
df_error_projection_length(
error_set = df_error_set,
index = integer
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
df_error_sum_angle()
Returns the sum of the angles of all errors in the specified error set that consist of two edges.
Syntax
df_error_sum_angle(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_sum_distance()
Returns the sum of the distances of all errors in the specified error set.
Syntax
df_error_sum_distance(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_sum_horizontal_distance()
Returns the sum of the distances of errors in the specified error set in which the distance
vector is horizontal.
Syntax
df_error_sum_horizontal_distance(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_sum_horizontal_projection_length()
Returns the sum of the horizontal projection lengths of all errors in the specified error set.
Syntax
df_error_sum_horizontal_projection_length(
error_set = df_error_set,
merge = true | false
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
merge
Required. Specifies how to merge the lengths.
❍ true. All horizontal projection lengths are translated to the x-axis and merged before
being added together.
❍ false. The lengths are not merged before being added together.
Example
For the two errors shown in Figure 4-29,
• When the merge argument is true, the returned value is 4.
• When the merge argument is false, the returned value is 7.
Figure 4-29 df_error_sum_horizontal_projection_length() Function Example
4
df_error_sum_parallel_distance()
Returns the sum of the distances of errors in the specified error set that consist of two
parallel edges.
Syntax
df_error_sum_parallel_distance(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_sum_projection_length()
Returns the sum of the projection lengths of all errors in the specified error set.
Syntax
df_error_sum_projection_length(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_sum_vertical_distance()
Returns the sum of the distances of errors in the specified error set in which the distance
vector is vertical.
Syntax
df_error_sum_vertical_distance(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_sum_vertical_projection_length()
Returns the sum of the vertical projection lengths of all errors in the specified error set.
Syntax
df_error_sum_vertical_projection_length(
error_set = df_error_set,
merge = true | false
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
merge
Required. Specifies how to merge the lengths.
❍ true. All vertical projection lengths are translated to the y-axis and merged before
being added together.
❍ false. The lengths are not merged before being added together.
Example
The following example uses the df_error_sum_horizontal_projection_length() and
df_error_sum_vertical_projection_length() functions in a user-defined function.
chk_proj_sum: function (void) returning void {
c_data = df_get_current_data();
x1 = df_error_layer(c_data, "err");
if ((df_error_sum_horizontal_projection_length(x1, true) > L) ||
(df_error_sum_vertical_projection_length(x1, true) > L)) {
df_save_data(c_data);
}
}
df_error_sum_x_distance()
Returns the sum of the delta x-axis distances of all errors in the specified error set.
Syntax
df_error_sum_x_distance(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_sum_x_projection_length()
Returns the sum of the x-axis projection lengths of all errors in the specified error set.
Syntax
df_error_sum_x_projection_length(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_sum_y_distance()
Returns the sum of the delta y-axis distances of all errors in the specified error set.
Syntax
df_error_sum_y_distance(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_sum_y_projection_length()
Returns the sum of the y-axis projection lengths of all errors in the specified error set.
Syntax
df_error_sum_x_projection_length(
error_set = df_error_set
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
df_error_vertical_distance()
Returns the distance of the ith error in the specified error set if the distance vector is vertical;
otherwise, returns the value 0.
Syntax
df_error_vertical_distance(
error_set = df_error_set,
index = integer
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
df_error_x_distance()
Returns the delta x-axis distance of the ith error in the specified error set.
Syntax
df_error_x_distance(
error_set = df_error_set
index = integer
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
df_error_x_projection_length()
Returns the x-axis projection length of the ith error in the specified error set.
Syntax
df_error_x_projection_length(
error_set = df_error_set
index = integer
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
df_error_y_distance()
Returns the delta y-axis distance of the ith error in the specified error set.
Syntax
df_error_y_distance(
error_set = df_error_set
index = integer
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
df_error_y_projection_length()
Returns the y-axis projection length of the ith error in the specified error set.
Syntax
df_error_y_projection_length(
error_set = df_error_set
index = integer
);
Returns
double
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
df_fnote()
Writes data to the specified ASCII file.
Syntax
df_fnote(
file_index = integer, //optional
data = "string" //optional
);
Returns
void
Arguments
file_index
Optional. Selects the ASCII file specified in the files argument of the runset function,
such as the drc_features() function. The first file in the list has an index of 0. The
default is 0; that is, the first file in the list.
data
Optional. Specifies the string to be written.
Example
The following example uses the df_fnote() function inside of drc_features() remote
functions that are named user_df and get_double:
f1 = fopen("area.txt");
See Also
fopen()
df_get_current_data()
Returns the current primary layer polygon or edge.
Syntax
df_get_current_data();
Returns
df_data
df_get_edge_double_property()
Retrieves the value of a double property for the specified edge set. The value is 0 (zero) if
the property is not present or the index is out of bounds.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_edge_double_property(
edge_set = df_edge_set,
index = integer,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
edge_set
Required. Specifies the edge set.
index
Required. Specifies the index of the edge set. A negative value causes an error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property for the ith edge of the
edge set is stored.
df_get_edge_matrix_property()
Retrieves the value of a matrix property for a specified edge in the specified edge set. The
df_matrix value is -1 if the property is not present or the index is out of bounds. Returns
true if the property is found; otherwise, returns false.
Syntax
df_get_edge_matrix_property(
edge_set = df_edge_set,
index = integer,
name = ”string”,
value = df_matrix
);
Returns
Boolean
Arguments
edge_set
Required. Specifies the edge set.
index
Required. Specifies the index (i) of the target edge in the edge set. A negative value
causes an error.
name
Required. Specifies the matrix property name.
value
Required. Specifies the variable where the value of the matrix property for the ith edge of
the edge set is stored.
See Also
dev_proximity_list()
df_get_edge_max_double_property()
Retrieves the maximum value of the double properties for the specified edge set. The value
is 0 (zero) if the property is not present.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_edge_max_double_property(
edge_set = df_edge_set,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
edge_set
Required. Specifies the edge set.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the maximum value of the property is stored.
df_get_edge_min_double_property()
Retrieves the minimum value of the double properties for the specified edge set. The value
is 0 (zero) if the property is not present.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_edge_min_double_property(
edge_set = df_edge_set,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
edge_set
Required. Specifies the edge set.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the minimum value of the property is stored.
df_get_edge_net_double_property()
Retrieves the value of a net double property for the specified edge.
Syntax
df_get_edge_net_double_property(
edge_set = df_edge_set,
index = integer,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
edge_set
Required. Specifies the edge set.
name
Required. Specifies the property name.
index
Required. Specifies the index of the edge set. A negative value causes an error.
value
Required. Specifies the variable where the value of the property is stored.
df_get_edge_net_list_of_double_property()
Retrieves the value of a net list of double property for the specified edge. The value is an
empty list if the property is not present.
Syntax
df_get_edge_net_list_of_double_property(
edge_set = df_edge_set,
index = integer,
name = "string",
value = out_list_of_double
);
Returns
Boolean
Arguments
edge_set
Required. Specifies the edge set.
name
Required. Specifies the property name.
index
Required. Specifies the index of the edge set. A negative value causes an error.
value
Required. Specifies the variable where the value of the property is stored.
df_get_edge_net_string_property()
Retrieves the value of a net string property for the specified edge.
Syntax
df_get_edge_net_string_property(
edge_set = df_edge_set,
index = integer,
name = "string",
value = out_string,
);
Returns
Boolean
Arguments
edge_set
Required. Specifies the edge set.
index
Required. Specifies the index of the edge set. A negative value causes an error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property is stored.
df_get_edge_string_property()
Retrieves the value of a string property for the specified edge. The value is an empty string
if the property is not present or the index is out of bounds.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_edge_string_property(
edge_set = df_edge_set,
index = integer,
name = "string",
value = out_string,
property_index = integer //optional
);
Returns
Boolean
Arguments
edge_set
Required. Specifies the edge set.
index
Required. Specifies the index of the edge set. A negative value causes an error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property is stored.
property_index
Optional. Specifies the index (i) number of the string property. A negative value causes
an error.
df_get_edge_string_property_count()
Returns the number of string properties for the property name on the specified edge, or
returns 0 (zero) if the property name does not exist.
Syntax
df_get_edge_string_property_count(
edge_set = df_edge_set,
index = integer,
name = "string"
);
Returns
integer
Arguments
edge_set
Required. Specifies the edge set.
index
Required. Specifies the index of the edge set. A negative value causes an error.
name
Required. Specifies the property name.
df_get_edge_sum_double_property()
Retrieves the sum of the values of the specified property for the specified edge set. The
value is 0 (zero) if the property is not present.
Returns the value true if the property is found; returns the value false if the property is
missing from all data in the specified set.
Syntax
df_get_edge_sum_double_property(
edge_set = df_edge_set,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
edge_set
Required. Specifies the edge set. Use the df_edge_layer() function to define the edge
set.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the result is stored.
df_get_error_double_property()
Retrieves the value of a double property for the specified error. The value is 0 (zero) if the
property is not present or the index is out of bounds.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_error_double_property(
error_set = df_error_set,
index = integer,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property for the ith error of the
error set is stored.
df_get_error_max_double_property()
Retrieves the maximum value of the double properties for the specified error set. The value
is 0 (zero) if the property is not present.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_error_max_double_property(
error_set = df_error_set,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
error_set
Required. Specifies the error set.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the maximum value of the property is stored.
df_get_error_min_double_property()
Retrieves the minimum value of the double properties for the specified error set. The value
is 0 (zero) if the property is not present.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_error_min_double_property(
error_set = df_error_set,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
error_set
Required. Specifies the error set.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the minimum value of the property is stored.
df_get_error_string_property()
Retrieves the value of a string property for the specified error. The value is an empty string
if the property is not present or the index is out of bounds.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_error_string_property(
error_set = df_error_set,
index = integer,
name = "string",
value = out_string,
property_index = integer //optional
);
Returns
Boolean
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property for the ith error of the
error set is stored.
property_index
Optional. Specifies the index (i) number of the string property. A negative value causes
an error.
df_get_error_string_property_count()
Returns the number of string properties for the property name on the specified error, or
returns 0 (zero) if the property name does not exist.
Syntax
df_get_error_string_property_count(
error_set = df_error_set,
index = integer,
name = "string"
);
Returns
integer
Arguments
error_set
Required. Specifies the error set.
index
Required. Specifies the index of the error set. A negative value causes an error.
name
Required. Specifies the property name.
df_get_error_sum_double_property()
Retrieves the sum of the values of the specified property for the specified error set. The
value is 0 (zero) if the property is not present.
Returns the value true if the property is found; returns the value false if the property is
missing from all data in the specified set.
Syntax
df_get_error_sum_double_property(
error_set = df_error_set,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
error_set
Required. Specifies the error set. Use the df_error_layer() function to define the error
set.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the result is stored.
df_get_marker_double_property()
Retrieves the value of a double property for the specified marker set. Returns the value true
if the property is found; otherwise, returns the value false.
Syntax
df_get_marker_double_property(
marker_set = df_marker_set,
index = integer,
name = "string",
value = out_string
);
Returns
Boolean
Arguments
marker_set
Required. Specifies the marker set.
index
Required. Specifies the index of the marker set. A negative value causes a fatal error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property for the ith marker of the
marker set is stored. The value is 0 (zero) if the property is not present or the index is out
of bounds.
df_get_marker_string_property()
Retrieves the value of a string property for the specified marker set. Returns the value true
if the property is found; otherwise, returns the value false.
Syntax
df_get_marker_string_property(
marker_set = df_marker_set,
index = integer,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
marker_set
Required. Specifies the marker set.
index
Required. Specifies the index of the marker set. A negative value causes a fatal error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property for the ith marker of the
marker set is stored. The value is 0 (zero) if the property is not present or the index is out
of bounds.
df_get_polygon_double_property()
Retrieves the value of a double property for the specified polygon. The value is 0 (zero) if the
property is not present or the index is out of bounds.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_polygon_double_property(
polygon_set = df_polygon_set,
index = integer,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index (i) of the target polygon in the polygon set. A negative
value causes an error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property for the ith polygon of the
polygon set is stored.
df_get_polygon_list_of_list_of_double_property()
Retrieves the value of an attached matrix for the specified polygon. If the input polygon set
is empty, the property is not present, the index is out of bounds, or a row in the retrieved
matrix has a different number of columns than the other rows, the return value is false and
the matrix is an empty list; otherwise, returns the value true.
Syntax
df_get_polygon_list_of_list_of_double_property(
polygon_set = df_polygon_set,
index = integer,
name = "string",
value = out_list_of_list_of_double
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index (i) of the target polygon in the polygon set. A negative
value causes an error.
name
Required. Specifies the matrix property name. Cannot be a null string and cannot start
with an underscore character (_).
value
Required. Specifies the variable where the value of the list of list of double data for the
ith polygon of the polygon set is stored.
df_get_polygon_max_double_property()
Retrieves the maximum value of the double properties for the specified polygon set. The
value is 0 (zero) if the property is not present.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_polygon_max_double_property(
polygon_set = df_polygon_set,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the maximum value of the property is stored.
df_get_polygon_min_double_property()
Retrieves the minimum value of the double properties for the specified polygon set. The
value is 0 (zero) if the property is not present.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_polygon_min_double_property(
polygon_set = df_polygon_set,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the minimum value of the property is stored.
df_get_polygon_net_double_property()
Retrieves the value of a net double property for the specified polygon. The value is 0 (zero)
if the property is not present or the index is out of bounds.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_polygon_net_double_property(
polygon_set = df_polygon_set,
index = integer,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index (i) of the target polygon in the polygon set. A negative
value causes an error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property for the ith polygon of the
polygon set is stored.
df_get_polygon_net_list_of_double_property()
Retrieves the value of a net list of double property for the specified polygon. The value is an
empty list if the property is not present or the index is out of bounds.
Syntax
df_get_polygon_net_list_of_double_property(
polygon_set = df_polygon_set,
index = integer,
name = "string",
value = {out_list_of_double, ...}
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index (i) of the target polygon in the polygon set. A negative
value causes an error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property for the ith polygon of the
polygon set is stored.
df_get_polygon_net_string_property()
Retrieves the value of a net string property for the specified polygon. The value is an empty
string if the property is not present or the index is out of bounds.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_polygon_string_property(
polygon_set = df_polygon_set,
index = integer,
name = "string",
value = out_string
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index (i) of the target polygon in the polygon set. A negative
value causes an error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property is stored.
df_get_polygon_string_property()
Retrieves the value of a string property for the specified polygon. The value is an empty
string if the property is not present or the index is out of bounds.
Returns the value true if the property is found; otherwise, returns the value false.
Syntax
df_get_polygon_string_property(
polygon_set = df_polygon_set,
index = integer,
name = "string",
value = out_string,
property_index = integer //optional
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index (i) of the target polygon in the polygon set. A negative
value causes an error.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the value of the property is stored.
property_index
Optional. Specifies the index (i) number of the string property. A negative value causes
an error.
df_get_polygon_string_property_count()
If property name exists, returns an integer value, which is the number of string properties for
the property name on the specified polygon. The value is 0 (zero) if the property is not
present.
Syntax
df_get_polygon_string_property_count(
polygon_set = df_polygon_set,
index = integer,
name = "string"
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index (i) of the target polygon in the polygon set. A negative
value causes an error.
name
Required. Specifies the property name.
df_get_polygon_sum_double_property()
Retrieves the sum of the values of the specified property for the specified polygon set. The
value is 0 (zero) if the property is not present.
Returns the value true if the property is found; returns the value false if the property is
missing from all data in the specified set.
Syntax
df_get_polygon_sum_double_property(
polygon_set = df_polygon_set,
name = "string",
value = out_double
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set. Use the df_polygon_layer() function to define
the polygon set.
name
Required. Specifies the property name.
value
Required. Specifies the variable where the result is stored.
df_marker_count()
Returns the number of data objects in the specified marker set.
Syntax
df_marker_count(
marker_set = df_marker_set
);
Returns
integer
Arguments
marker_set
Required. Specifies the marker set.
df_marker_exist()
Returns the value true if the number of data objects in the specified edge set is greater
than 0; otherwise, returns the value false.
Syntax
df_marker_exist(
marker_set = df_marker_set
);
Returns
Boolean
Arguments
marker_set
Required. Specifies the marker set.
df_marker_layer()
Returns the marker set for the specified marker layer that interacts with the primary polygon
or edge.
Syntax
df_marker_layer(
primary_data = df_data,
marker_layer_name = "string"
);
Returns
df_marker_set
Arguments
primary_data
Required. Specifies the current primary polygon or edge.
edge_layer_name
Required. Specifies the marker layer whose characteristics are requested. Use an empty
string to get the primary marker layer.
df_marker_length()
Returns the length of the ith marker in the specified marker set if the marker is a
one-dimensional pattern marker or 0 if the marker is a two-dimensional pattern marker. The
order of the markers is arbitrary.
Syntax
df_marker_length(
marker_set = df_marker_set,
index = integer
);
Returns
double
Arguments
marker_set
Required. Specifies the marker set.
index
Required. Specifies the index of the marker set. A negative value causes a fatal error.
df_polygon_area()
Returns the area of the ith polygon in the specified polygon set. The order of the polygons is
arbitrary.
Syntax
df_polygon_area(
polygon_set = df_polygon_set,
index = integer
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index of the polygon set. A negative value causes an error.
df_nets_in_sync()
Returns the value true if the two nets corresponding to the data specified in the sync_net
argument are in sync. Otherwise returns false.
Syntax
df_nets_in_sync(
data_set1 = df_data_set,
index1 = integer
data_set2 = df_data_set,
index2 = integer
);
Returns
Boolean
Arguments
data_set1
Required. Specifies the first data set.
index1
Required. Specifies the index of the first data set. A negative value causes an error.
data_set2
Required. Specifies the second data set.
index2
Required. Specifies the index of the second data set. A negative value causes an error.
df_polygon_count()
Returns the number of data objects in the specified polygon set.
Syntax
df_polygon_count(
polygon_set = df_polygon_set
);
Returns
integer
Arguments
polygon_set
Required. Specifies the polygon set.
df_polygon_exist()
Returns the value true if the number of data objects in the specified polygon set is greater
than 0; otherwise, returns the value false.
Syntax
df_polygon_exist(
polygon_set = df_polygon_set
);
Returns
Boolean
Arguments
polygon_set
Required. Specifies the polygon set.
df_polygon_horizontal_perimeter()
Returns the sum of the lengths of all horizontal edges of the ith polygon in the specified
polygon set.
Syntax
df_polygon_horizontal_perimeter(
polygon_set = df_polygon_set,
index = integer
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index of the polygon set. A negative value causes an error.
df_polygon_layer()
Returns the polygon set for the specified polygon layer that interacts with the primary
polygon or edge.
Syntax
df_polygon_layer(
primary_data = df_data,
polygon_layer_name = "string"
);
Returns
df_polygon_set
Arguments
primary_data
Required. Specifies the current primary polygon or edge.
polygon_layer_name
Required. Specifies the polygon layer whose characteristics are requested. Use an
empty string to get the primary layer data.
df_polygon_max_area()
Returns the maximum of the areas of all polygons in the specified polygon set.
Syntax
df_polygon_max_area(
polygon_set = df_polygon_set
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
df_polygon_max_perimeter()
Returns the maximum of the perimeters of all polygons in the specified polygon set.
Syntax
df_polygon_max_perimeter(
polygon_set = df_polygon_set
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
df_polygon_min_area()
Returns the minimum of the areas of all polygons in the specified polygon set.
Syntax
df_polygon_min_area(
polygon_set = df_polygon_set
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
df_polygon_min_perimeter()
Returns the minimum of the perimeters of all polygons in the specified polygon set.
Syntax
df_polygon_min_perimeter(
polygon_set = df_polygon_set
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
df_polygon_perimeter()
Returns the perimeter of the ith polygon in the specified polygon set. The order of the
polygons is arbitrary.
Syntax
df_polygon_perimeter(
polygon_set = df_polygon_set,
index = integer
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index of the polygon set. A negative value causes an error.
df_polygon_same_net()
Returns the value true if all the polygons in all the sets have the same net ID; otherwise,
returns the value false if the net ID does not exist for any polygon in the set. See the
npbp_save_net() function for more information.
Syntax
df_polygon_same_net(
polygon_sets = {df_polygon_set, ...}
);
Returns
Boolean
Arguments
polygon_sets
Required. Specifies a list of polygon sets.
df_polygon_sum_area()
Returns the sum of the areas of all polygons in the specified polygon set.
Syntax
df_polygon_sum_area(
polygon_set = df_polygon_set
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
df_polygon_sum_horizontal_perimeter()
Returns the sum of the lengths of all horizontal edges of all polygons in the specified polygon
set.
Syntax
df_polygon_sum_horizontal_perimeter(
polygon_set = df_polygon_set
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
df_polygon_sum_perimeter()
Returns the sum of the perimeters of all polygons in the specified polygon set.
Syntax
df_polygon_sum_perimeter(
polygon_set = df_polygon_set
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
df_polygon_sum_vertical_perimeter()
Returns the sum of the lengths of all vertical edges of all polygons in the specified polygon
set.
Syntax
df_polygon_sum_vertical_perimeter(
polygon_set = df_polygon_set
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
df_polygon_sum_x_perimeter()
Returns the sum of the length of edges projected onto the x-axis for all edges all polygons
in the specified polygon set.
Syntax
df_polygon_sum_x_perimeter(
polygon_set = df_polygon_set
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
df_polygon_sum_y_perimeter()
Returns the sum of the length of edges projected onto the x-axis for all edges all polygons
in the specified polygon set.
Syntax
df_polygon_sum_y_perimeter(
polygon_set = df_polygon_set
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
df_polygon_vertical_perimeter()
Returns the sum of the lengths of all vertical edges of the ith polygon in the specified polygon
set.
Syntax
df_polygon_vertical_perimeter(
polygon_set = df_polygon_set,
index = integer
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index of the polygon set. A negative value causes an error.
df_polygon_x_perimeter()
Returns the sum of the length of edges projected onto the x-axis for the ith polygon in the
specified polygon set.
Syntax
df_polygon_x_perimeter(
polygon_set = df_polygon_set,
index = integer
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index of the polygon set. A negative value causes an error.
df_polygon_y_perimeter()
Returns the sum of the length of edges projected onto the y-axis for the ith polygon in the
specified polygon set.
Syntax
df_polygon_y_perimeter(
polygon_set = df_polygon_set,
index = integer
);
Returns
double
Arguments
polygon_set
Required. Specifies the polygon set.
index
Required. Specifies the index of the polygon set. A negative value causes an error.
df_report_double()
Writes the name and value to the LAYOUT_ERRORS file if the output of the
drc_features() function is to error output and if the df_save_data() function is called
after the df_report_double() function in the remote function.
Note:
If the output of the drc_features() function is to a named layer, this function is ignored.
If the df_report_double() function is called without calling the df_save_data()
function afterwards, the data is not saved.
Syntax
df_report_double(
primary_data = df_data,
name = "string",
value = out_double
);
Returns
void
Arguments
primary_data
Required. Specifies the current primary data.
name
Required. Specifies the name written to the LAYOUT_ERRORS file.
value
Required. Specifies the value written to the LAYOUT_ERRORS file.
Example
The following is an example of using the df_report_double() function in a remote
function:
uf : function (void) returning void {
cd = df_get_current_data();
ps2 = df_polygon_layer(cd, "L2");
c = df_polygon_count(ps2);
if (c>0) {
df_report_double(cd, name = "count", value = c*1.0);
df_report_double(cd, name = "area",
value = df_polygon_sum_area(ps2));
df_save_data(cd);
}
}
df_report_string()
Writes the name and value to the LAYOUT_ERRORS file if the output of the
drc_features() function is to error output and if the df_save_data() function is called
after the df_report_string() function in the remote function.
Note:
If the output of the drc_features() function is to a named layer, this function is ignored.
If the df_report_string() function is called without calling the df_save_data()
function afterwards, the data is not saved.
Syntax
df_report_string(
primary_data = df_data,
name = "string",
value = out_string
);
Returns
void
Arguments
primary_data
Required. Specifies the current primary data.
name
Required. Specifies the name written to the LAYOUT_ERRORS file.
value
Required. Specifies the value written to the LAYOUT_ERRORS file.
Example
The following is an example of using the df_report_string() function in a remote
function:
uf : function (void) returning void {
cd = df_get_current_data();
ps2 = df_polygon_layer(cd, "L2");
c = df_polygon_count(ps2);
if (c>0) {
df_report_string(cd, name = "count", value = "positive");
df_save_data(cd);
}
}
df_save_data()
Returns the current primary layer polygon or edge.
Syntax
df_save_data(
primary_data = df_data
);
Returns
void
Arguments
primary_data
Required. Specifies the current primary polygon, edge, or marker.
df_save_double_property()
Specifies the double properties to be written along with the output data when the
df_save_data() function is called. You cannot save a double property and a string property
with the same name.
Note:
When this function is called, the output_from_layer argument of the drc_features()
function must be set to the primary layer.
Syntax
df_save_double_property(
primary_data = df_data,
name = "string",
value = double
);
Returns
void
Arguments
primary_data
Required. Specifies the current primary polygon or edge.
name
Required. Specifies the property name.
value
Required. Specifies the value that is associated with the property.
df_save_list_of_list_of_double_property()
Specifies the matrix double properties to be written on the primary layer when the
df_save_data() function is called.
Note:
When this function is called, the output_from_layer argument of the drc_features()
function must be set to the primary layer.
Syntax
df_save_list_of_list_of_double_property(
primary_data = df_data,
name = "string",
value = list_of_list_of_double
);
Returns
void
Arguments
primary_data
Required. Specifies the current primary polygon or edge.
name
Required. Specifies the matrix property name. Cannot be a null string and cannot start
with an underscore character (_).
value
Required. Specifies the variable that is associated with the property.
df_save_matrix_property()
Specifies the matrix properties to be attached on the primary layer when the
df_save_data() function is called.
Note:
When this function is called, the output_from_layer argument of the drc_features()
function must be set to the primary layer.
Syntax
df_save_matrix_property(
primary_data = df_data,
name = "string",
value = df_matrix
);
Returns
void
Arguments
primary_data
Required. Specifies the current primary polygon or edge.
name
Required. Specifies the matrix property name. Cannot be a null string and cannot start
with an underscore character (_).
value
Required. Specifies the value that is associated with the matrix property.
df_save_properties()
Specifies the properties to be written with the output data when the df_save_data()
function is called.
Note:
When this function is called, the output_from_layer argument of the DRC feature
function must be the primary layer.
Syntax
df_save_properties(
primary_data = df_data,
double_properties = {{name = "string",
value = double}, ...}
);
Returns
void
Arguments
primary_data
Required. Specifies the current primary polygon, edge, or marker.
double_properties
Optional. Specifies a list of properties that are written to the output data. If a property
name is in more than one call to the df_save_properties() function, the last value is
used. A data object can have many properties but only one value associated with any
one property.
❍ name. Specifies the name of the user-defined property.
df_save_string_property()
Specifies the string properties to be written along with the output data when the
df_save_data() function is called. You cannot save a string property and a double property
with the same name.
Note:
When this function is called, the output_from_layer argument of the drc_features()
function must be set to the primary layer.
Syntax
df_save_string_property(
primary_data = df_data,
name = "string",
value = "string",
mode = OVERWRITE | APPEND
);
Returns
void
Arguments
primary_data
Required. Specifies the current primary polygon, edge, error, or marker.
name
Required. Specifies the property name.
value
Required. Specifies the value that is associated with the property.
mode
Optional. Specifies the action when df_save_string_property() has been called
previously with the same property name. The default is OVERWRITE.
❍ OVERWRITE. The property keeps only the current value.
• dfm_area()
• dfm_distance()
• dfm_get_double_property()
• dfm_length()
• dfm_perimeter()
• dfm_projection_length()
Note:
These functions are not available for the dfm_function argument of the
dfm_features() runset function.
The other utility functions described in this section are available for the dfm_function
argument, but not for the aggregate_functions argument, of the dfm_features() runset
function.
dfm_aggregate()
Returns the aggregate value of the function with the specified hash key.
Syntax
dfm_aggregate(
key = "string"
);
Returns
double
Arguments
key
Required. Specifies the hash key.
dfm_area()
Returns the area for the current layer, and is valid only for polygons.
Syntax
dfm_area(
void
);
Returns
double
dfm_count()
Returns the number of polygons, edges, and errors on the specified layer.
Syntax
dfm_count(
layer_id = "string"
);
Returns
Boolean
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_distance()
Returns the spacing distance for the current layer, and is valid only for errors.
Syntax
dfm_distance(
void
);
Returns
double
dfm_exist()
Returns true if dfm_count is greater than 0 (zero); otherwise, returns false.
Syntax
dfm_exist(
layer_id = "string"
);
Returns
Boolean
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_fnote()
Writes data to the specified file.
Syntax
dfm_fnote(
file_index = integer //optional
data = "string" //optional
);
Returns
void
Arguments
file_index
Optional. Specifies the index (i) for the files argument of the dfm_features() function.
The default is 0 (zero); that is, the first file in the list.
data
Optional. Specifies the string to be written.
dfm_get_double_property()
Returns the value of the specified property for the current layer, and is valid for all layer
types.
Syntax
dfm_get_double_property(
name = "string"
);
Returns
double
Arguments
name
Required. Specifies the property name.
dfm_get_max_double_property()
Returns the maximum of the specified property for the specified layer in the current window.
Syntax
dfm_get_max_double_property(
layer_id = "string"
name = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
name
Required. Identifies the property name.
dfm_get_min_double_property()
Returns the minimum of the specified property for the specified layer in the current window.
Syntax
dfm_get_min_double_property(
layer_id = "string"
name = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
name
Required. Identifies the property name.
dfm_get_product_double_property()
Returns the product of the specified property for the specified layer in the current window.
Syntax
dfm_get_product_double_property(
layer_id = "string"
name = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
name
Required. Identifies the property name.
dfm_get_sum_double_property()
Returns the sum of the specified property for the specified layer in the current window.
Syntax
dfm_get_sum_double_property(
layer_id = "string"
name = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
name
Required. Identifies the property name.
dfm_length()
Returns the length for the current layer, and is valid only for edges.
Syntax
dfm_length(
void
);
Returns
double
dfm_max_area()
Returns the maximum of the area for the specified layer in the current window, and is valid
only for polygons.
Syntax
dfm_max_area(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_max_distance()
Returns the maximum of the spacing distance for the specified layer in the current window,
and is valid only for errors.
Syntax
dfm_max_distance(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_max_length()
Returns the maximum of the length for the specified layer in the current window, and is valid
only for edges.
Syntax
dfm_max_length(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_max_perimeter()
Returns the maximum of the perimeter for the specified layer in the current window, and is
valid only for polygons.
Syntax
dfm_max_perimeter(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_max_projection_length()
Returns the maximum of the projection length for the specified layer in the current window,
and is valid only for errors.
Syntax
dfm_max_projection_length(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_min_area()
Returns the minimum of the area for the specified layer in the current window, and is valid
only for polygons.
Syntax
dfm_min_area(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_min_distance()
Returns the minimum of the spacing distance for the specified layer in the current window,
and is valid only for errors.
Syntax
dfm_min_distance(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_min_length()
Returns the minimum of the length for the specified layer in the current window, and is valid
only for edges.
Syntax
dfm_min_length(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_min_perimeter()
Returns the minimum of the perimeter for the specified layer in the current window, and is
valid only for polygons.
Syntax
dfm_min_perimeter(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_min_projection_length()
Returns the minimum of the projection length for the specified layer in the current window,
and is valid only for errors.
Syntax
dfm_min_projection_length(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_perimeter()
Returns the perimeter for the current layer, and is valid only for polygons.
Syntax
dfm_perimeter(
void
);
Returns
double
dfm_product_area()
Returns the product of the area for the specified layer in the current window, and is valid only
for polygons.
Syntax
dfm_product_area(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_product_distance()
Returns the product of the spacing distance for the specified layer in the current window, and
is valid only for errors.
Syntax
dfm_product_distance(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_product_length()
Returns the product of the length for the specified layer in the current window, and is valid
only for edges.
Syntax
dfm_product_length(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_product_perimeter()
Returns the product of the perimeter for the specified layer in the current window, and is
valid only for polygons.
Syntax
dfm_product_perimeter(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_product_projection_length()
Returns the product of the projection length for the specified layer in the current window, and
is valid only for errors.
Syntax
dfm_product_projection_length(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_projection_length()
Returns the projection length for the current layer, and is valid only for errors.
Syntax
dfm_projection_length(
void
);
Returns
double
dfm_report_double()
Writes the name and value to the LAYOUT_ERRORS file if the output of the
dfm_features() function is to error output and if the dfm_save_data() function is called
after the dfm_report_double() function in the remote function.
Note:
If the dfm_report_double() function is called without calling the dfm_save_data()
function afterwards, the data is not saved.
Syntax
dfm_report_double(
name = "string"
value = double
);
Returns
void
Arguments
name
Required. Specifies the name written to the LAYOUT_ERRORS file.
value
Required. Specifies the value written to the LAYOUT_ERRORS file.
dfm_save_data()
Saves the current window as output.
Syntax
dfm_save_data(
void
);
Returns
void
dfm_save_double_property()
Specifies the properties to be written along with the output data when the dfm_save_data()
function is called.
Syntax
dfm_save_double_property(
name = "string"
value = double
);
Returns
void
Arguments
name
Required. Identifies the property name.
value
Required. Specifies the calculated value for this window, for use in the target and
gradient check.
dfm_sum_area()
Returns the sum of the area for the specified layer in the current window, and is valid only
for polygons.
Syntax
dfm_sum_area(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_sum_distance()
Returns the sum of the spacing distance for the specified layer in the current window, and is
valid only for errors.
Syntax
dfm_sum_distance(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_sum_length()
Returns the sum of the length for the specified layer in the current window, and is valid only
for edges.
Syntax
dfm_sum_length(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_sum_perimeter()
Returns the sum of the perimeter for the specified layer in the current window, and is valid
only for polygons.
Syntax
dfm_sum_perimeter(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_sum_projection_length()
Returns the sum of the projection length for the specified layer in the current window, and is
valid only for errors.
Syntax
dfm_sum_projection_length(
layer_id = "string"
);
Returns
double
Arguments
layer_id
Required. Identifies the layer in the input hash.
dfm_window_area()
Returns the area of the current window.
Syntax
dfm_window_area(
void
);
Returns
double
dfm_window_bottom()
Returns the bottom coordinate of the current window. Using this function when
context != TOP causes an error.
Syntax
dfm_window_bottom(
void
);
Returns
double
dfm_window_left()
Returns the left coordinate of the current window. Using this function when context != TOP
causes an error.
Syntax
dfm_window_left(
void
);
Returns
double
dfm_window_perimeter()
Returns the perimeter of the current window.
Syntax
dfm_window_perimeter(
void
);
Returns
double
dfm_window_right()
Returns the right coordinate of the current window. Using this function when
context != TOP causes an error.
Syntax
dfm_window_right(
void
);
Returns
double
dfm_window_top()
Returns the top coordinate of the current window. Using this function when
context != TOP causes an error.
Syntax
dfm_window_top(
void
);
Returns
double
uf_area()
Returns the total area of all the polygons on the specified layer in the current window.
Syntax
uf_area(
hash_type = FILL | DESIGN,
layer_name = "string"
);
Returns
double
Arguments
hash_type
Required. Specifies the hash table that the layer_name argument refers to.
❍ FILL. Specifies that layer_name argument refers to the fill_layer_keys of the
criteria option of the unified_fill() function.
layer_name
Required. Specifies the hash key.
uf_save_window()
Saves a window value for the current window. The saved value is compared to the target
specified in the criteria option of the unified_fill() function.
Syntax
uf_save_window(
value = double
);
Returns
void
Arguments
value
Required. Specifies the calculated value for this window, for use in the target and
gradient check.
uf_window_area()
Returns the area of the current window.
Syntax
uf_window_area();
Returns
double
These EERC utility functions enable the EERC netlist processing capabilities. Efficient
netlist processing using EERC involves the following high-level steps:
1. Hierarchical netlist search
Hierarchical utility functions preselect and identify netlist objects (such as cell instances,
device instances, and nets) across all hierarchy levels, based on various search criteria.
You can bookmark these objects programmatically by using strings known as tags.
The IC Validator tool can propagate these tags along specified device paths to emulate
path tracing or use them to refine object selections.
2. Netlist object caching
Caching is the mechanism that adds preselected netlist objects to a new flattened netlist
database. You can cache netlist objects by using hierarchical utility functions and convert
the cache to a new flattened netlist.
The IC Validator tool can use this netlist for more detailed netlist processing.
3. Netlist object traversal
Given a netlist database, such as a postcache netlist, you can use utility functions to
iterate through netlist objects such as cell models, cell instances, device instances, and
nets. You can process these objects individually, for example, by setting tags and
checking connectivity.
The IC Validator tool can save the objects that it filters through this process in another
netlist for further processing, save them in a results database for a netlist-aware polygon
analysis, or report them as errors.
The IC Validator tool writes all rule violations, including EERC errors, to the
LAYOUT_ERRORS file in your current working directory.
Note:
Output files generated by a netlist-only IC Validator EERC run, with no GDSII or OASIS
layout, use the BLOCK prefix instead of the original top-level block name inside the
netlist. However, when you use an input layout, the output files have the original top-level
block name instead of the BLOCK prefix.
You can change this behavior by using the -c command-line option. When you use this
option for an EERC netlist-only run, all of the output file names have the specified cell
name as the prefix.
You can view EERC violations by using VUE, the IC Validator error debugging GUI. To view
EERC violations, select the EERC Errors tab. The list of violations appears on the left side.
Select a violation to view the error details. The Descriptions pane shows information about
the error object, and the Netlist Visualization pane renders the selected error in a
schematic-like form.
For more information about Python syntax, see your Python documentation. You can also
find information about Python on the Web.
You can also use these netlist setup functions in an algorithm that involves multiple netlist
processing steps. The main purpose of these functions is to extract information from or
assign information to a netlist and its objects, in order to make the subsequent netlist
processing easier.
The debug functions help you to view tag and cache information about netlist objects by
generating user-defined ASCII files that contain the information. You can also generate
SPICE netlists for debug purposes.
Table 4-5 lists the netlist setup and debug functions.
Table 4-5 EERC Netlist Setup and Debug Utility Functions
Type Name
Setup ndb_cache_to_netlist()
ndb_get_ground_net_names()
ndb_get_netlist()
ndb_get_netlist_attribute()
ndb_get_power_net_names()
ndb_import_tags_from_cache_netlist()
ndb_is_selected_rule()
ndb_netlist_top_cell()
ndb_remove_tags()
ndb_reset_cache()
ndb_save_netlist()
ndb_set_netlist_attribute()
Debug ndb_debug_netlist()
ndb_debug_snapshot()
hierarchical placement of netlist objects. The functions work as if the objects in the netlist
were flat.
• Use the search functions to preselect and identify netlist objects, such as cell instances,
device instances, and nets, across all hierarchy levels based on various search criteria.
The netlist objects that the functions identify retain their hierarchy-specific properties,
such as device instance names and net names. You can use these functions to
bookmark the objects, by using tags, for use in further netlist processing. You can also
save the device instances and nets in the results database for layer generation.
• Use the propagation functions to propagate or transmit previously applied tags or net
properties throughout the netlist.
You can specify the paths through which the tags and properties are propagated.
Propagation works on a fully-hierarchical netlist, as if all the paths were flat in the netlist.
• Use the error reporting functions to report netlist objects as errors.
These functions search for netlist objects throughout the hierarchy, based on the search
criteria, and report them as errors. All of the objects that are reported as errors are
written to the error database.
Hierarchical netlist functions impart EERC its powerful netlist processing capabilities.
Table 4-6 lists the hierarchical netlist functions.
Table 4-6 EERC Hierarchical Netlist Utility Functions
Type Name
Propagation ndb_propagate_net_property()
ndb_propagate_tags()
Search ndb_find_device()
ndb_find_instance()
ndb_find_net()
Iterator Functions
Depending on the rules and their algorithms that you use, you might want to iterate through
the netlist objects that are present inside a netlist. The iterator functions allow you to iterate
through different types of netlist objects.
The iterator function names indicate the types of input they require and the object iterators
they return. For example, the ndb_net_device_pins() function takes a net object and
returns an iterator for the corresponding device pins connected to that object.
You can use these functions to iterate through the
• Cells in a netlist
• Pins of device instances or cell instances
• Device and cell instance pins connected to nets
• Ports of a cell
• Netlist objects inside a cell
• Double properties associated with a device instance
The iterator functions take a netlist object and iterate through the netlist members that are
associated with the object.
Note:
When querying a cell object (cell definition or master cell) for its member objects, the IC
Validator tool retrieves only those objects that are present and flat in the cell. The tool
does not iterate through objects that are placed hierarchically.
The iterator functions are classified based on the type of netlist object through which the
function iterates. Table 4-7 lists the iterator functions.
Table 4-7 EERC Iterator Utility Functions
Type Name
You can also use these functions to set tags and properties on netlist objects.
The netlist object functions are divided into the following categories:
• Top cell objects only
These functions work only on objects that are placed flat in the top cell of a netlist.
• Any cell
These functions work on any cell and its objects, including the top cell.
• Netlist input
These functions take a netlist and retrieve cells in the netlist. You can also use these
functions to apply tags on netlist objects by using their hierarchical names.
The top cell functions are generally used inside the cache netlist because it has no
hierarchy.
Note:
When the IC Validator tool queries a cell object (cell definition or master cell) for its
member objects, it retrieves only those objects that are present and flat in the cell. The
tool does not retrieve objects that are placed hierarchically.
Each of the netlist object function categories can be further divided based on the netlist
objects they take as arguments. Table 4-8 lists the netlist object functions by category and
subcategory.
Table 4-8 EERC Netlist Object Utility Functions
Type Name
Device ndb_set_top_cell_device_tag()
instance ndb_top_cell_device_tag()
Net ndb_set_top_cell_net_property()
ndb_set_top_cell_net_tag()
ndb_top_cell_net_property()
ndb_top_cell_net_tag()
Type Name
Device ndb_device_double_property()
instance ndb_device_model_name()
ndb_device_name()
ndb_device_pin()
ndb_device_string_property()
ndb_device_type()
ndb_save_device_property()
Net ndb_is_net_port()
ndb_net_double_property()
ndb_net_name()
Pin ndb_pin_device()
ndb_pin_instance()
ndb_pin_name()
ndb_pin_net()
Type Name
Hierarchical ndb_report_device()
ndb_report_instance()
ndb_report_net()
Use layer generation functions to save device instances and nets in the results database for
other functions that perform layer generation later in the flow. You can save the objects by
using hierarchical netlist functions or by using functions that work only on objects that are
flat in the top cell of a netlist. Table 4-10 lists the layer generation functions.
Table 4-10 EERC Layer Generation Utility Functions
Type Name
Hierarchical ndb_find_device()
ndb_find_net()
Netlist ndb_cache_to_netlist()
ndb_cells()
ndb_debug_netlist()
ndb_debug_snapshot()
ndb_find_device()
ndb_find_instance()
ndb_find_net()
ndb_get_ground_net_names()
ndb_get_netlist()
ndb_get_netlist_attribute()
ndb_get_power_net_names()
ndb_import_tags_from_cache_netlist()
ndb_netlist_cell()
ndb_netlist_top_cell()
ndb_propagate_net_property()
ndb_propagate_tags()
ndb_remove_tags()
ndb_report_device()
ndb_report_instance()
ndb_report_net()
ndb_reset_cache()
ndb_save_netlist()
ndb_set_device_tag_by_hierarchical_name()
ndb_set_instance_tag_by_hierarchical_name()
ndb_set_net_tag_by_hierarchical_name()
ndb_set_netlist_attribute()
ndb_sum_device_values()
String ndb_is_selected_rule()
ndb_cache_to_netlist()
Takes a netlist containing objects marked for caching by the functions like
ndb_find_device(), ndb_find_net(), or ndb_find_instance(), and returns a flat netlist
containing all of the cached objects. These objects retain their hierarchical names and any
associated properties or tags.
This function resets all cache marks in the input netlist, so another
ndb_cache_to_netlist() function following it returns an empty netlist unless new objects
have been marked for caching.
Syntax
ndb_cache_to_netlist(
netlist = ndb_netlist_t
)
Returns
ndb_netlist_t
Example
In this example, the IC Validator tool tags and caches the supply nets and creates the cache
netlist. Then, the tool loops over the nets in the cache netlist and writes their names to the
run_details/BLOCK.sum file.
power_supplies = ["AVDD", "DVDD"]
ground_supplies = ["VSS", "GND"]
cache_netlist = ndb_cache_to_netlist(nldb)
cache_cell = ndb_netlist_top_cell(cache_netlist)
ndb_cell_device()
Looks for the specified device in a given cell, and returns a tuple that consists of a Boolean,
indicating whether the device was found, and the device object, if it was found.
Note:
This function does not work hierarchically. It retrieves only the devices that are placed flat
inside the given cell. It does not retrieve any devices from child cell instances inside the
cell.
Syntax
ndb_cell_device(
cell = ndb_cell_t,
device_name = "string"
)
Returns
(Boolean, ndb_device_t)
Example
This example looks for a device with the instance name M23 and prints a message if it finds
the device.
(found, edevice) = ndb_cell_device(cell, "M23")
if found:
print("exclude this device from the check.
The name of the device is" ndb_device_name(edevice ))
ndb_cell_instance()
Looks for the specified child cell instance in a given parent cell, and returns a tuple that
consists of a Boolean, indicating whether the instance was found, and the instance object, if
it was found.
Note:
This function does not work hierarchically. It retrieves only the instances that are placed
flat inside the given cell. It does not retrieve any instances from child cell instances inside
the cell.
Syntax
ndb_cell_instance(
cell = ndb_cell_t,
instance_name = "string"
)
Returns
(Boolean, ndb_instance_t)
Example
This example looks for an instance named X1 and prints a message if it finds the instance.
(found, einst) = ndb_cell_instance(cell, "X1")
if found:
print("exclude this cell instance from the check.
The instance name is" ndb_instance_name(einst))
ndb_cell_name()
Takes a cell object and returns its name as a string. This cell name is the name of the cell
master or definition, not an instance name.
Syntax
ndb_cell_name(
cell = ndb_cell_t
)
Returns
string
Example
This example takes the given cell object and returns its name as a string.
cell_name = ndb_cell_name(cell)
ndb_cell_net()
Looks for the specified net in a given cell, and returns a tuple that consists of a Boolean,
indicating whether the net was found, and the net object, if it was found.
Note:
This function does not work hierarchically. It retrieves only the nets that are placed flat
inside the given cell. It does not retrieve any nets from child cell instances inside the cell.
Syntax
ndb_cell_net(
cell = ndb_cell_t,
net_name = "string"
)
Returns
(Boolean, ndb_net_t)
Example
This example looks for the net named lsf_in and prints a message if it finds the net.
(found, enet) = ndb_cell_net(cell, "lsf_in")
if found:
print("exclude this net from the check.
The net name is " ndb_net_name(enet))
ndb_cells()
Returns an iterator for the cells in the given netlist. The cells are in top down order in the
netlist hierarchy.
Syntax
ndb_cells(
netlist = ndb_netlist_t
)
Returns
iterator
Examples
The following example shows how to loop over all of the cells in the given netlist and print
the name of each cell.
for cell in ndb_cells(nldb):
cname = ndb_cell_name(cell)
print("Cell: %s" % cname)
ndb_debug_netlist()
Writes a SPICE file, representing a given netlist object, in the run_details/eerc_debug
directory.
Syntax
ndb_debug_netlist(
netlist = ndb_netlist_t,
file_name = "string"
)
Returns
void
Example
In this example, a version of the working netlist in SPICE format is written to run_details/
eerc_debug/debug_netlist.sp.
ndb_debug_netlist(nldb, "debug_netlist.sp")
ndb_debug_snapshot()
Saves a copy of a given netlist to a text file in the run_details/eerc_debug directory for
debugging purposes. This file contains all of the objects that have one or more tags that are
not listed in the exclude_tags argument. The netlist objects are grouped by cell and
annotated with either an N for net or a D for device.
Syntax
ndb_debug_snapshot(
netlist = ndb_netlist_t,
file_name = "string",
exclude_tags = ["string", ...], # optional
print_net_properties = True | False, # optional
print_cached = True | False # optional
)
Returns
void
Arguments
netlist
Required. Specifies the input netlist that you want to debug.
file_name
Required. Specifies the name of the output file containing the netlist objects that the
function saves in the run_details/eerc_debug directory.
exclude_tags
Optional. Specifies the tags to be excluded from the output file. Only netlist objects with
one or more tags that have not been excluded are included in the file. By default, each
object in the file includes all of the tags that are associated with it.
print_net_properties
Optional. Controls whether double properties associated with the nets in the output file
are included in the file. The default is False, which means no net double properties are
included in the file.
print_cached
Optional. Controls whether any netlist object in the output file that has been marked to
cache is annotated to that effect. The default is False.
Note:
When this option is set to True, the ndb_debug_snapshot() function must run before
the ndb_cache_to_netlist() function for the given netlist. Otherwise, the cache
marks are reset and no cache information is available to print.
Example
This example saves a version of the working netlist in run_details/eerc_debug/
debug_snapshot.txt. The “power” and “skip” tags are not annotated on any object in the file.
ndb_debug_snapshot(nldb, "debug_snapshot.txt",
exclude_tags=["power","skip"])
ndb_device_double_properties()
Returns an iterator for the double properties of the given device, where each iterator
represents a tuple containing the property name and a double value. The properties are in
random order.
Syntax
ndb_device_double_properties(
device = ndb_device_t
)
Returns
iterator
Examples
The following example shows how to loop over all of the double properties of the given
device and print the name and value of each property.
for (prop_name, prop_val) in ndb_device_double_properties(device):
print("prop_name = %s, prop_val = %g" % (prop_name, prop_val))
ndb_device_double_property()
Looks for the specified property with a double value in a given device. Returns a tuple that
consists of a Boolean, indicating whether the property was found, and the property value, if
the property was found.
Note:
The device property is passed to the function as a string argument, not as an IC Validator
enumerated type. The properties of devices can be either present in the input netlist or
assigned to the devices during netlist processing. The properties are not specific to the
IC Validator tool. For example, two netlists can specify the length property of the device
even though one netlist has the device length “L” and the other has “Length.”
Syntax
ndb_device_double_property(
device = ndb_device_t,
property_name = "string"
)
Returns
(Boolean, double)
Example
In the following example, the value of the length property from a MOS device (“L” in the input
netlist) is retrieved if the property is found, or an error is reported if the property is not found.
(rcode, l_val) = ndb_device_double_property(mos_device, "L")
if not rcode:
ndb_report_top_cell_device(mos_device,
comment="device missing length property: %s" %
ndb_device_name(mos_device))
ndb_device_model_name()
Returns the model name of a given device object. For example, suppose a SPICE file
contains the following line:
M23 VDD in out VDD nch L=1um W=2um
In this example, the device model name is nch and the device instance name is M23. The
ndb_device_model_name() function returns device model name, nch.
Syntax
ndb_device_model_name(
device = ndb_device_t
)
Returns
string
Example
The following example shows how to print the model and instance names of the specified
device:
model_name = ndb_device_model_name(mos_dev)
inst_name = ndb_device_name(mos_dev)
print("device instance %s has model name %s" % (inst_name, model_name))
ndb_device_name()
Returns the instance name of the specified device object. For example, suppose a SPICE
file contains the following line:
M23 VDD in out VDD nch L=1um W=2um
In this example, the device instance name is M23 and the device model name is nch. The
ndb_device_name() function returns the device instance name, M23.
Syntax
ndb_device_name(
device = ndb_device_t
)
Returns
string
Example
The following example shows how to print the instance and model names of the specified
device:
model_name = ndb_device_model_name(mos_dev)
inst_name = ndb_device_name(mos_dev)
print("device instance %s has model name %s" % (inst_name, model_name))
ndb_device_pin()
Looks for the specified pin on the given device, and returns a tuple that consists of a
Boolean, indicating whether the pin was found, and the pin object, if it was found.
The pin names can be standard IC Validator pin names for devices that are represented by
standard types in the netlist. If the devices are represented by subcircuits in the netlist and
are mapped to a standard device type, the pin names can be either the netlist names or
standard IC Validator pin names. The IC Validator tool maps the subcircuit pin names to
standard IC Validator pin names based on the pin order for standard devices in SPICE.
Syntax
ndb_device_pin(
device = ndb_device_t,
pin_name = "string"
)
Returns
(Boolean, ndb_pin_t)
Example
In this example, the IC Validator tool looks for the pin named GATE. If it finds the pin, the tool
gets the net connected to the pin.
(found, gpin) = ndb_device_pin(mos_dev, "GATE")
if found:
gnet = ndb_pin_net(gpin)
else:
exit("MOS device %s is missing the GATE pin!" %
ndb_device_name(mos_dev))
ndb_device_pins()
Returns an iterator for the pins of the given device. The pins are in random order.
Syntax
ndb_device_pins(
device = ndb_device_t
)
Returns
iterator
Examples
The following example shows how to loop over all of the pins of the given device and print
the name of each pin.
for dpin in ndb_device_pins(device):
pname = ndb_pin_name(dpin)
print("Device pin: %s" % pname)
ndb_device_string_property()
Looks for the specified property with a string value on a given device. Returns a tuple that
consists of a Boolean, indicating whether the property was found, and the property value, if
the property was found.
Note:
Although a tag is a string, you cannot use this function to retrieve the tag associated with
the device. All device properties are name-value pairs associated with a device. In this
case, the value is a string.
Syntax
ndb_device_string_property(
device = ndb_device_t,
property_name = "string"
)
Returns
(Boolean, string)
Example
This example shows how to retrieve the value of the bulk type property from a resistor
device or report an error if the device is not found.
(rcode, bulk) = ndb_device_string_property(res_device, "btype")
if not rcode:
ndb_report_top_cell_device(res_device,
comment="device missing bulk type property: %s" %
ndb_device_name(res_device))
else:
print("resistor bulk type: %s" % bulk)
ndb_device_type()
Returns the device type code for the specified device. This code represents one of the
following device types: NMOS, PMOS, NPN, PNP, PN, NP, RESISTOR, CAPACITOR, INDUCTOR,
GENERIC, MOSFET, JUNCTION_DIODE, or BIPOLAR_TRANSISTOR. You set device types by
using the device_type_setting or compare_state argument in the eerc_setup()
function in the top-level runset file.
Syntax
ndb_device_type(
device = ndb_device_t
)
Returns
device type code
Example
This example shows how to cache a set of MOSFET devices, and then loop over them to
count the NMOS-type devices.
The PXL code is in eerc.rs:
orig_netlist_db = eerc_setup (
netlist_source = LAYOUT,
layout_netlist = input_netlist_db,
device_type_setting = {mos = {nmos = nmos_models, pmos =
pmos_models,undefined_implant_type = ABORT}});
cache_cell = ndb_netlist_top_cell(ndb_cache_to_netlist(nldb))
num_nmos = 0
for tdevice in ndb_devices(cache_cell):
if ndb_device_type(tdevice) == NMOS:
num_nmos += 1
See Also
eerc_setup()
ndb_devices()
Returns an iterator for the devices in the given cell. The devices are in random order.
Note:
This function does not iterate through devices hierarchically. It iterates only those
devices that are placed flat inside the given cell. It does not iterate through any devices
in child cell instances inside the cell.
Syntax
ndb_devices(
cell = ndb_cell_t
)
Returns
iterator
Examples
The following example shows how to loop over all of the devices in the given cell and print
the name of each device.
for device in ndb_devices(cell):
dname = ndb_device_name(device)
print("Device: %s" % dname)
ndb_find_device()
The ndb_find_device() function selects devices that meet a set of criteria and performs
one or more tasks with the selected devices. These tasks can include
• Adding one or more tags to the selected devices
• Marking the devices for copying to a cache netlist
• Saving the devices in the results database for layer creation
Devices are selected that meet all of the specified criteria. In other words, an implicit
Boolean AND exists between all of the selection criteria
For simple cases, the power of the available selection criteria can enable a single
ndb_find_device() function to select all of the desired devices.
In more complex cases, you can use a series of ndb_find_device() and ndb_find_net()
functions to select previously-tagged devices or nets and apply new tags until the desired
set of devices or nets has been identified. Use this method to recognize a set of circuitry by
its topology. The number of ndb_find_device() and ndb_find_net() functions that you
might need to achieve this recognition depends on the complexity of the topology.
The ndb_find_device() function returns a Boolean indicating whether any devices were
selected. Depending on the arguments that you specify, the action that can result from a
particular ndb_find_device() function call can include assigning new tags, marking the
devices for the cache netlist, and saving the devices for later layer generation.
Syntax
ndb_find_device(
netlist = ndb_netlist_t,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR |
GENERIC | MOSFET | JUNCTION_DIODE |
BIPOLAR_TRANSISTOR,
model_names = ["string", ...], # optional
tag_check = "string", # optional
check_function = function, # optional
pins = [
ndb_pin_check(
pin_names = ["string", ...],
condition = ALL | ANY | SAME_NET, # optional
tag_check = "string", # optional
connections = "string" # optional
),
...], # optional
holding_cell =
ndb_holding_cell(
cell_names = ["string", ...], # optional
tag_check = "string", # optional
include_descendant_cells = True | False # optional
), # optional
add_tags = ["string", ...], # optional
cache = True | False, # optional
save = True | False # optional
)
Returns
Boolean
Arguments
netlist
Required. Specifies the input netlist for device selection.
device_type
Required. Specifies the device type of the devices to be checked. For information about
setting device types, see eerc_setup().
❍ Specifying MOSFET causes the tool to select devices associated with the NMOS,
PMOS, or MOSFET device type.
model_names
Optional. Specifies a list of the device model names to be considered. You can use the *
and ! wildcard characters to specify device names. Selected devices must have one of
these names. By default, devices are selected regardless of their model names. For
information about specifying model names for devices, see eerc_setup().
tag_check
Optional. Specifies a string expression to control device selection. The expression must
evaluate to True for a device to be selected.
The string expression uses previously applied tags to select devices. It can include the
!, ||, and && logic operators and can use ( and ) for grouping. The ! operator has the
highest precedence, after which the || and && operators are evaluated from left to right.
check_function
Optional. Specifies the name of a user-defined Python function for device selection,
which is passed as input to the check_function argument. This function must take a
single argument of type ndb_device_t and return a Boolean. A device can be selected
only when this callback function returns the value True.
This function can call any EERC utility function that takes a device object as an
argument. The function is most often used to check device properties.
pins
Optional. Defines a list of connectivity criteria for device selection by using a list of
ndb_pin_check() methods that specify the criteria. This criteria is related to the nets
associated with the device pins. An implicit Boolean AND between each
ndb_pin_check() method ensures that devices can be selected only when they meet all
of the listed criteria.
The ndb_pin_check() method returns the connectivity criteria data structures used by
the pins argument. Note that ndb_pin_check() is a part of the EERC hierarchical
functions; it is not a utility function.
Each ndb_pin_check() method has the following arguments:
❍ pin_names. Required. Defines the list of device pins. The ndb_find_device()
function checks the nets associated with these pins. You can specify individual pin
names or use the wildcard character (*) to specify all pins. No other wildcard use is
permitted.
For devices represented as standard types in the netlist, The pin names can be
IC Validator standard pin names.
For devices represented by subcircuits in the netlist and mapped to a standard device
type, the pin names can be the netlist names or IC Validator standard pin names. The
IC Validator tool maps the subcircuit pin names to IC Validator standard pin names
based on the pin order for standard devices in SPICE.
❍ condition. Optional. Specifies the type of pin-net connectivity. The value must be
ALL, ANY, or SAME_NET. The default is ANY.
■ ALL. Every net associated with the specified device pins must meet any
tag_check or connections conditions for the device to be selected.
■ ANY. One or more of the nets associated with the specified device pins must meet
any tag_check or connections conditions for the device to be selected.
■ SAME_NET. All of the specified device pins must be connected to the same net and
the net must meet any tag_check or connections conditions for the device to be
selected.
❍ tag_check. Optional. Specifies a string expression to be applied to the nets
associated with the specified pins. The expression must return True for a device to
be selected.
The string expression uses previously applied net tags to select devices. It can
include the !, ||, and && logic operators and can use ( and ) for grouping. The !
operator has the highest precedence, after which the || and && operators are
evaluated from left to right.
❍ connections. Optional. Specifies the numerical constraint applied to the number of
device connections on the specified nets associated with the specified device pins.
For each net, the count includes all device pins of any device type connected to the
net throughout the hierarchy.
The constraint must take one of the following forms: <x, <x>y, >y<x, <=x, <x>=y,
>y<=x, >x, <=x>y, >=y<x, >=x, <=x >=y, >=y<=x, or ==x, where x and y are
nonnegative integers. Note that <0 is not an allowed constraint. A double-ended
constraint, such as <x>y, should be read as “less than x and greater than y.”
When the connections option is not specified, the default constraint is >=0.
holding_cell
Optional. Specifies a set of cells or cell instances in which any selected devices must
exist. The holding_cell argument uses the ndb_holding_cell() method to check for
holding cell criteria.
The ndb_holding_cell() method returns the cell or cell instance data structures used
by the holding_cell argument. Note that ndb_holding_cell() is a part of the EERC
hierarchical functions; it is not a utility function.
Each ndb_holding_cell() method has the following arguments:
❍ cell_names. Optional. Defines a list of cell names in which the function looks for
devices. You can use the * and ! wildcard characters to specify cell names. A device
must be in one of these cells to be selected.
❍ tag_check. Optional. Specifies a string expression to be applied to the cell instances
whose master is in the cell_names list. The expression must return True for a device
in that instance to be selected.
The string expression uses previously applied tags to select devices. It can include
the !, ||, and && logic operators and can use ( and ) for grouping.
❍ include_descendant_cells. Optional. Controls which cells a device can be located
in to be selected. The default is False.
True. A device can be selected if it is in a cell or cell instance that meets the specified
conditions, or in any of its child cells.
False. A device can be can be selected only if it is in a specified cell or cell instance.
add_tags
Optional. Defines a list of the tags to be attached to all of the selected devices.
cache
Optional. Controls whether all of the selected devices are marked for copying to the
cache netlist by the next ndb_cache_to_netlist() function call. The default is False.
save
Optional. Controls whether all of the selected devices are copied to the results database
for the eerc_create_device_layer() function, which creates a shape associated with
the devices. The default is False.
Examples
Example 1
This example shows how to select all of the MOS devices where the GATE pin is connected
to a net with only a single connection, tag these devices with floating_gate tags, and
report them as errors.
ndb_find_device(nldb, MOSFET,
pins = [ndb_pin_check(["GATE"], connections="==1")],
add_tags = ["floating_gate"]
)
Example 2
This example shows how to select NMOS devices with the following characteristics:
• The SRC pin is connected to a ground net
• The device is not contained in a level-shifter cell
• The GATE pin is in one power domain and the device itself is in another domain
The selected devices are marked to be cached. The tool assumes that all of the supply nets
have been tagged with their name and either power or ground and the supply names have
been propagated through the netlist. The tool also assumes that there is only one level
shifter cell, named “Level_Shifter.”
# define the supply domains
domain1 = ["VDD","VSS"]
domain2 = ["AVDD","GND"]
Note that for most netlists, the source and drain pins on MOS devices are swappable. In
such cases, it is important that you allow for this when using connections to those pins as
selection criteria. In this example, when checking that the SRC pin is connected to ground,
both the SRC and DRN pins are specified and the default condition, ANY, is used.
Example 3
This example shows how to find all of the NMOS devices where the BULK pin is not tied to
a ground net and all of the PMOS devices where the BULK pin is not tied to a power net.
# assume all power nets have been tagged with "power"
# find PMOS devices whose BULK terminal is not connected to power
ndb_find_device(nldb, PMOS,
pins = [ndb_pin_check(["BULK"], tag_check="!power")],
add_tags=["bad_pmos"]
)
Figure 4-30 and Figure 4-31 show what the results might look like in the IC Validator VUE
tool.
Figure 4-30 NMOS Device With BULK Pin Tied to Power
The BULK pin of NMOS instance x1/x52/M1 is tied to a power net instead of a ground net.
The BULK pin of PMOS instance x1/x52/M2 is tied to a ground net instead of a power net.
Example 4
This example shows how to recognize PMOS differential pair circuits.
Figure 4-32 shows a PMOS differential pair circuit.
Figure 4-32 PMOS Differential Pair Circuit
In this example, the remote block code recognizes and tags the differential pair devices, the
driver device, and the common net. When the devices have been recognized and tagged,
they can undergo further checks.
# assume the power nets have been tagged with "power"
# assume the ground nets have been tagged with "ground"
device_pins = [
ndb_device_pin_check(PMOS, ["SRC","DRN"], ANY),
ndb_device_pin_check(PMOS, ["GATE","BULK"], NONE),
ndb_device_pin_check(NMOS, ["SRC","GATE","DRN","BULK"], NONE),
ndb_device_pin_check(NPN, ["COLL","BASE","EMIT"], NONE),
ndb_device_pin_check(PNP, ["COLL","BASE","EMIT"], NONE),
ndb_device_pin_check(RESISTOR, ["A","B"], NONE),
ndb_device_pin_check(CAPACITOR, ["A","B"], NONE),
ndb_device_pin_check(INDUCTOR, ["A","B"], NONE),
ndb_device_pin_check(JUNCTION_DIODE, ["ANODE","CATHODE"], NONE),
ndb_device_pin_check(BIPOLAR_TRANSISTOR, ["COLL","BASE","EMIT"],
NONE)
],
add_tags = ["possible_common_net"]
)
# now find PMOS devices with a src/drn on power and the other
# on a possible common net
ndb_find_device(
nldb,
PMOS,
pins = [
ndb_pin_check(["SRC","DRN"], ANY, tag_check="power"),
ndb_pin_check(["SRC","DRN"], ANY, tag_check="possible_common_net")
],
add_tags = ["possible_driver"]
)
# tag possible driver nets ... they connect at least to a diode ANODE
# and a PMOS GATE
ndb_find_net(
nldb,
tag_check = "!power && !ground",
device_pins = [
ndb_device_pin_check(PMOS, ["GATE"]),
ndb_device_pin_check(JUNCTION_DIODE, ["ANODE"])
],
add_tags = ["possible_signal_net"]
)
See Also
eerc_create_device_layer()
eerc_create_device_list_layer()
eerc_setup()
ndb_find_instance()
ndb_find_net()
ndb_report_instance()
ndb_find_instance()
The ndb_find_instance() function selects cell instances that meet a set of criteria and
performs one or more tasks with the selected instances. Those tasks can include
• Adding one or more tags to the selected instances
• Marking the selected instances for copying to a cache netlist
• Holding cells
Instances are selected that meet all of the specified criteria. In other words, an implicit
Boolean AND exists between all of the selection criteria.
The ndb_find_instance() function returns a Boolean indicating whether any devices were
selected. Depending on the arguments that you specify, the action that results from a
particular ndb_find_instance() function call can include assigning new tags and marking
the instances for the cache netlist.
Syntax
ndb_find_instance(
netlist = ndb_netlist_t,
cell_names = ["string", ...],
tag_check = "string", # optional
pins = [
ndb_pin_check(
pin_names = ["string", ...],
condition = ALL | ANY | SAME_NET, # optional
tag_check = "string", # optional
connections = "string" # optional
),
...], # optional
holding_cell =
ndb_holding_cell(
cell_names = ["string", ...], # optional
tag_check = "string", # optional
include_descendant_cells = True | False # optional
),
add_tags = ["string", ...], # optional
cache = True | False # optional
)
Returns
Boolean
Arguments
netlist
Required. Specifies the input netlist for instance selection.
cell_names
Required. Specifies a list of strings that can include the * and ! wildcard characters.
These strings represent the names of the master cells for which instances are selected
(or not selected if you use the ! wildcard character).
tag_check
Optional. Specifies a string expression to control instance selection. The expression
must evaluate to True for an instance to be selected.
The string expression uses previously applied tags to select cell instances. It can include
the !, ||, and && logic operators and can use ( and ) for grouping.
pins
Optional. Defines a list of connectivity criteria for instance selection by using a list of
ndb_pin_check() methods that specify the criteria. This criteria is related to the nets
associated with the instance pins. An implicit Boolean AND between each
ndb_pin_check() method ensures that instances can be selected only when they meet
all of the listed criteria.
The ndb_pin_check() method returns the connectivity criteria data structures used by
the pins argument. Note that ndb_pin_check() is a part of the EERC hierarchical
functions; it is not a utility function.
Each ndb_pin_check() method has the following arguments:
❍ pin_names. Required. Defines the list of instance pins. The ndb_find_instance()
function checks the nets associated with these pins. You can specify individual pin
names or use the * and ! wildcard characters.
❍ condition. Optional. Specifies the type of pin-net connectivity. The value must be
ALL, ANY, or SAME_NET. The default is ANY.
■ ALL. Every net associated with the specified instance pins must meet any
tag_check or connections conditions for the instance to be selected.
■ ANY. One or more of the nets associated with the specified instance pins must
meet any tag_check or connections conditions for the instance to be selected.
■ SAME_NET. All of the specified instance pins must be connected to the same net
and the net must meet any tag_check or connections conditions for the instance
to be selected.
❍ tag_check. Optional. Specifies a string expression to be applied to the nets
associated with the specified pin names. The expression must return True for an
instance to be selected.
The string expression uses previously applied net tags to select cell instances. It can
include the !, ||, and && logic operators and can use ( and ) for grouping.
❍ connections. Optional. Specifies the numerical constraint applied to the number of
device connections on the nets associated with the specified instance pins. For each
net, the count includes all device pins of any device type connected to the net
throughout the hierarchy.
The constraint must take one of the following forms: <x, <x>y, >y<x, <=x, <x>=y,
>y<=x, >x, <=x>y, >=y<x, >=x, <=x >=y, >=y<=x, or ==x, where x and y are
nonnegative integers. Note that <0 is not an allowed constraint. A double-ended
constraint, such as <x>y, should be read as “less than x and greater than y.”
When the connections option is not specified, the default constraint is >=0.
holding_cell
Optional. Specifies a set of cells or cell instances in which any selected instances must
exist. The holding_cell argument uses the ndb_holding_cell() method to check for
holding cell criteria.
The ndb_holding_cell() method returns the cell or cell instance data structures used
by the holding_cell argument. Note that ndb_holding_cell() is a part of the EERC
hierarchical functions; it is not a utility function.
Each ndb_holding_cell() method has the following arguments:
❍ cell_names. Optional. Defines a list of master cell names in which the function looks
for instances. You can use the * and ! wildcard characters to specify cell names. An
instance must be in one of these cells to be selected.
❍ tag_check. Optional. Specifies a string expression to be applied to the cell instances
whose master is in the cell_names list. The expression must return True for an
instance in that instance to be selected.
The string expression uses previously applied tags to select cell instances. It can
include the !, ||, and && logic operators and can use ( and ) for grouping.
❍ include_descendant_cells. Optional. Controls which cells an instance can be
located in to be selected. The default is False.
True. An instance can be selected if it is in a cell or cell instance that meets the
specified conditions, or in any of its child cells.
False. An instance can be can be selected only if it is in a specified cell or cell
instance.
add_tags
Optional. Defines a list of the tags to be attached to all of the selected instances.
cache
Optional. Controls whether all of the selected instances are marked for copying to the
cache netlist by the next ndb_cache_to_netlist() function call. Only the instance itself
is copied to the cache. No contents of the instance are copied. The default is False.
Examples
In this example, the IC Validator tool selects all inverter cell instances in which the VDD pin is
not connected to a power net or the GND pin is not connected to a ground net, and then
reports these instances as errors.
# assume all power nets have been tagged with "power"
# assume all ground nets have been tagged with "ground"
ndb_find_instance(
netlist = nldb,
cell_names = ["*inv*"],
pins = [ndb_pin_check(["VDD"], tag_check="!power")],
add_tags = ["bad_power"]
)
ndb_find_instance(
netlist = nldb,
cell_names = ["*inv*"],
pins = [ndb_pin_check(["GND"], tag_check="!ground")],
add_tags = ["bad_ground"]
)
ndb_report_instance(
netlist = nldb,
cell_names = ["*inv*"],
tag_check = "bad_power || bad_ground"
comment = "instance has bad supply connection"
)
Note:
The two ndb_find_instance() functions cannot be combined into one function
because you want to have a Boolean OR between the selection criteria and there is an
implicit Boolean AND between selection criteria in a single function.
See Also
ndb_find_device()
ndb_find_net()
ndb_report_instance()
ndb_find_net()
The ndb_find_net() function selects nets that meet a set of criteria and performs one or
more tasks with the selected nets. These tasks can include
• Adding one or more tags to the selected nets
• Marking the nets for copying to a cache netlist
• Saving the nets in the results database for layer creation
Net selection works on a fully hierarchical netlist, applying the specified selection criteria to
each net in the design as if the netlist were flat. Any instance-specific criteria are handled
automatically without flattening circuitry.
The selection criteria include
• Any previously applied tags
• Any net name, connection count, or connectivity associated with any device or cell
instance pins
• The use of a callback function that has access to property and other information related
to the net
In addition, you can exclude portions of the netlist hierarchy from the selection criteria by
marking certain cells as black boxes.
Nets are selected that meet all of the specified criteria. In other words, an implicit Boolean
AND exists between all specified selection criteria.
For simple cases, the power of the available selection criteria can enable a single
ndb_find_net() function to select all of the desired nets.
In more complex cases, you can use a series of ndb_find_device() and ndb_find_net()
functions to select previously-tagged devices or nets and apply new tags until the desired
set of devices or nets has been identified. Use this method to recognize a set of circuitry by
its topology. The number of ndb_find_device() and ndb_find_net() functions that you
might need to achieve this recognition depends on the complexity of the topology.
The ndb_find_net() function returns a Boolean indicating whether any nets were selected.
Depending on the arguments that you specify, the action that can result from a particular
ndb_find_net() function call can include assigning new tags, marking the nets for the
cache netlist, and saving the nets for later layer generation.
Syntax
ndb_find_net(
netlist = ndb_netlist_t,
tag_check = "string", # optional
name_check = ["string", ...], # optional
connections = # optional
ndb_count_check(
count = "string", # optional
pins = [
ndb_count_device_pin(
device_type = NMOS | PMOS | NPN |
PNP | PN | NP |
RESISTOR | CAPACITOR |
INDUCTOR | GENERIC |
MOSFET | JUNCTION_DIODE |
BIPOLAR_TRANSISTOR,
Returns
Boolean
Arguments
netlist
Required. Specifies the input netlist for net selection.
tag_check
Optional. Specifies a string expression to control net selection. The expression must
evaluate to True for a net to be selected.
The string expression uses previously applied tags to select nets. It can include the !, ||,
and && logic operators and can use ( and ) for grouping.
name_check
Optional. Specifies a list of strings, which can include the * and ! wildcard characters,
that represent the names of the nets to be selected by name (or not selected if you use
the ! wildcard character). When this argument is not specified, all of the nets from the
input netlist are candidates for net selection and will be selected if no other selection
criteria is specified. When specified as an empty list, no nets are selected.
All of the nets in the netlist are represented by their top name, which is the name of the
net at its highest point in the hierarchy. A specified name can be used to select nets
where the master cell is below the top block in the hierarchy if the net has the specified
name in the master cell.
For example, if the name pll_vss is present in the name_check list, the top block in the
netlist contains an instance named XI10 of the cell named inv, and cell inv has a nonport
net named pll_vss, the net can be selected if it meets all of the other criteria in the
ndb_find_net() function.
connections
Optional. Specifies the numerical constraint applied to the number of device pins
connected to a net. The device pins can be selected based on the device types, model
names, and tags applied to the device. The nets that meet this constraint can be selected
if they meet all of the other ndb_find_net() criteria.
The connections argument uses the ndb_count_check() method to retrieve the
device pin connectivity criteria for net selection. You control the device pins used in the
count constraint by specifying a list of ndb_count_device_pin() methods in the
ndb_count_check() method.
The ndb_count_check() method returns the pin count data structures used by the
connections argument. Note that ndb_count_check() is a part of the EERC
hierarchical functions; it is not a utility function.
Each ndb_count_check() method has the following arguments:
❍ count. Optional. Specifies the numerical constraint applied to the number of device
pin connections on a net. For each net, the count includes all of the device pins of the
specified device types connected to the net throughout the hierarchy.
The constraint must take one of the following forms: <x, <x>y, >y<x, <=x, <x>=y,
>y<=x, >x, <=x>y, >=y<x, >=x, <=x >=y, >=y<=x, or ==x, where x and y are
nonnegative integer. Note that <0 is not an allowed constraint. A double-ended
constraint, such as <x>y, should be read as “less than x and greater than y.”
When the connections option is not specified, the default constraint is >=0.
❍ pins. Optional. Specifies the particular device pins to be included in the count
constraint. The device pins are selected based on device type, model names, and
previously applied tags by using a list of ndb_count_device_pin() methods.
The ndb_count_device_pin() method returns the device pin data structures used
by the pins argument. Note that ndb_pin_check() is a part of the EERC hierarchical
functions; it is not a utility function.
Each ndb_count_device_pin() method has the following arguments:
■ device_type. Required. Specifies the device type of the device pins to be
checked.
Specifying MOSFET causes the tool to select devices associated with the NMOS,
PMOS, or MOSFET device type.
Specifying BIPOLAR_TRANSISTOR causes the tool to select devices associated
with the NPN, PNP, or BIPOLAR_TRANSISTOR device type.
Specifying JUNCTION_DIODE causes the tool to select devices associated with the
PN, NP, or JUNCTION_DIODE device type.
For information about specifying device types, see eerc_setup().
■ pin_names. Required. Specifies the device pins to be used in the count
constraint.
For devices represented as standard types in the netlist, The pin names can be
IC Validator standard pin names.
For devices represented by subcircuits in the netlist and mapped to a standard
device type, the pin names can be the netlist names or IC Validator standard pin
names. The IC Validator tool maps the subcircuit pin names to IC Validator
standard pin names based on the pin order for standard devices in SPICE.
■ model_names. Optional. Specifies the model names of the devices for which the
pins are considered for the count criteria.
■ tag_check. Optional. Specifies a string expression that uses previously applied
tags to select devices. The expression must evaluate to True for a device pin to
be counted.
The string expression can include the !, ||, and && logic operators and can use (
and ) for grouping.
check_function
Optional. Specifies the name of a user-defined Python function for net selection, which is
passed as input to the check_function argument. This function must take a single
argument of type ndb_net_t and return a Boolean. A net can be selected only when this
callback function returns the value True.
This function can call any EERC utility function that takes a net object as an argument.
The function is most often used to check net properties.
device_pins
Optional. Defines a list of device pin connection criteria for net selection by using a list of
ndb_device_pin_check() methods that specify the criteria. An implicit Boolean AND
between ndb_device_pin_check() methods ensures that nets can be selected only
when their device pin connectivity satisfies all of the listed criteria.
The ndb_device_pin_check() method returns the device pin connectivity data
structures used by the device_pins argument. Note that ndb_device_pin_check() is
a part of the EERC hierarchical functions; it is not a utility function.
Each ndb_device_pin_check() method has the following arguments:
❍ device_type. Required. Specifies the device type of the device pins to be checked.
For information about setting device types, see eerc_setup().
■ Specifying MOSFET causes the tool to select devices associated with the NMOS,
PMOS, or MOSFET device type.
■ Specifying BIPOLAR_TRANSISTOR causes the tool to select devices associated
with the NPN, PNP, or BIPOLAR_TRANSISTOR device type.
■ Specifying JUNCTION_DIODE causes the tool to select devices associated with the
PN, NP, or JUNCTION_DIODE device type.
❍ pin_names. Required. Specifies the list of device pins which should be connected to
a net for selection. You can specify individual pin names or use the wildcard character
(*) to specify all pins. No other wildcard use is permitted.
For devices represented as standard types in the netlist, The pin names can be
IC Validator standard pin names.
For devices represented by subcircuits in the netlist and mapped to a standard device
type, the pin names can be the netlist names or IC Validator standard pin names. The
IC Validator tool maps the subcircuit pin names to IC Validator standard pin names
based on the pin order for standard devices in SPICE.
❍ condition. Optional. Specifies which pins from the pin_names list must be
connected to the net to enable net selection. The value must be ALL, ANY, or NONE.
The default is ANY.
■ ALL. A net must connect to every specified pin to be selected.
■ ANY. A net must connect to one or more of the specified pins to be selected.
■ NONE. A net can be selected if it does not connect to any of the specified pins.
❍ model_names Optional. Specifies a list of the device model names. Pins must be
associated with one of these model names to be selected. By default, device pins are
selected regardless of their model names.
❍ tag_check Optional. Specifies a string expression to be applied to the devices
associated with the specified pin names. Previously applied tags are used to select
devices. The expression must return True for a net to be selected.
The string expression can include the !, ||, and && logic operators and can use ( and
) for grouping.
instance_pins
Optional. Specifies a list of instance pin connection criteria for net selection by using a list
of ndb_instance_pin_check() methods that specify the criteria. An implicit Boolean
AND between ndb_instance_pin_check() functions ensures that nets can be selected
only when their cell instance pin connectivity satisfies all of the listed criteria.
The ndb_instance_pin_check() method returns the cell instance pin connection data
structures used by the instance_pins argument. Note that
ndb_instance_pin_check() is a part of the EERC hierarchical functions; it is not a
utility function.
Each ndb_instance_pin_check() method has the following arguments:
❍ cell_names. Required. Specifies the names of the cells where pins are used for net
selection. The * and ! wildcard characters are permitted.
❍ pin_names. Required. Specifies the list of cell instance pins to be connected to a net
for selection. You can specify individual pin names or use the * and ! wildcard
characters.
❍ condition. Optional. Specifies which pins from the pin_names list must be
connected to the net to enable net selection. The value must be ALL, ANY, or NONE.
The default is ANY.
■ ALL. A net must connect to every specified pin to be selected.
■ ANY. A net must connect to one or more of the specified pins to be selected.
■ NONE. A net can be selected if it does not connect to any of the specified pins.
black_box_cell
Optional. Defines a set of cells or cell instances to be ignored by the ndb_find_net()
function. The function applies the selection criteria as if these cells and cell instances are
not present in the netlist. The black_box_cell argument uses the
ndb_black_box_cell() method to specify the cells or cell instances.
The ndb_black_box_cell() method returns the cell name data structures used by the
black_box_cell argument. Note that ndb_black_box_cell() is a part of the EERC
hierarchical functions; it is not a utility function.
Each ndb_black_box_cell() method has the following arguments:
❍ cell_names. Optional. Specifies the names of the master cells to be ignored during
net selection. The * and ! wildcard characters are permitted.
Nets in these cells or instances are not selected, and the specified connection criteria
is not applied to objects in these cells or instances or in their child cells or instances.
❍ tag_check. Optional. Specifies a string expression to be applied to the cell instances
associated with a master cell in the cell_names list. Previously applied tags are used
to select cell instances. The expression must return True for an instance to be
recognized as a black box.
The string expression can include the !, ||, and && logic operators and can use ( and
) for grouping.
add_tags
Optional. Defines a list of the tags to be attached to all of the selected nets.
cache
Optional. Controls whether all of the selected nets are marked for copying to the cache
netlist by the next ndb_cache_to_netlist() function call. The default is False.
save
Optional. Controls whether all of the selected nets are copied to the results database for
the eerc_create_net_layer() function, which creates shapes associated with the
nets. The default is False.
Examples
1. This example shows how to select nets with only a single device pin connection, mark
them with the single_connect_net tag, and report them as errors.
ndb_find_net(
netlist = nldb,
connections = ndb_count_check("==1"),
add_tags = ["single_connect_net"]
)
ndb_report_net(
netlist = nldb,
tag_check = "single_connect_net",
comment = "net has only one connection"
)
2. This example shows how to select nets with the following characteristics, mark them with
the secondary_net tag, and cache them for further processing:
❍ Is connected to at least one ESD resistor terminal
❍ Is connected to at least one PMOS gate pin
❍ Is connected to at least one NMOS gate pin
❍ Is connected to at least one ESD diode ANODE
❍ Is connected to at least one ESD diode CATHODE
❍ Ignores all nets and connections in and under the core_logic cell
ndb_find_net(
netlist = nldb,
device_pins = [
ndb_device_pin_check(device_type = RESISTOR,
pin_names = ["A","B"], condition = ANY,
model_names = ["esd_res"]),
ndb_device_pin_check(device_type = PMOS, pin_names = ["GATE"]),
ndb_device_pin_check(device_type = NMOS, pin_names = ["GATE"]),
ndb_device_pin_check(device_type = JUNCTION_DIODE,
pin_names = ["ANODE"], condition = ANY,
model_names = ["esd_diode"]),
ndb_device_pin_check(device_type = JUNCTION_DIODE,
pin_names = ["CATHODE"], condition = ANY,
model_names = ["esd_diode"])
],
black_box_cell = ndb_black_box_cell(cell_name = ["core_logic"]),
add_tags = ["secondary_net"],
cache = True
)
3. This example shows how to select nets that have the vmax double property and save the
nets where the vmax value equals 3.3 for later layer generation.
def check_prop(net):
(rcode, vmax_value) = ndb_net_double_property(net, "vmax")
if rcode:
if vmax_value == 3.3: return True
return False
# now find PMOS devices with a src/drn on power and the other
# on a possible common net
ndb_find_device(
nldb,
PMOS,
pins = [
ndb_pin_check(pin_names = ["SRC","DRN"], condition = ANY,
tag_check="power"),
ndb_pin_check(pin_names = ["SRC","DRN"], condition = ANY,
tag_check="possible_common_net")
],
add_tags = ["possible_driver"]
)
# tag possible driver nets ... they connect at least to a diode ANODE
# and a PMOS GATE
ndb_find_net(
nldb,
tag_check = "!power && !ground",
device_pins = [
ndb_device_pin_check(device_type = PMOS, pin_names = ["GATE"]),
ndb_device_pin_check(device_type = JUNCTION_DIODE,
pin_names = ["ANODE"])
],
add_tags = ["possible_signal_net"]
)
This remote block code recognizes and tags the differential pair devices, the driver
device, and the common net. When these devices have been recognized and tagged,
they can undergo further checks.
See Also
eerc_create_net_layer()
eerc_setup()
ndb_find_device()
ndb_find_instance()
ndb_find_net()
ndb_get_ground_net_names()
Retrieves the list of ground net names from the given netlist that match the ground_nets
argument in the eerc_setup() function. Only the names of nets that are present in the
netlist are returned.
Syntax
ndb_get_ground_net_names(
netlist = ndb_netlist_t
)
Returns
list of string
Example
This example shows how to retrieve the list of specified ground net names in the current
netlist and apply the “ground” tag to each net named in the list.
The PXL code is in eerc.rs:
eerc_setup ( netlist_source = LAYOUT,
layout_netlist = input_netlist_db,
power_nets = power_supplies,
ground_nets = ground_supplies
);
See Also
eerc_setup()
ndb_get_netlist()
Returns the netlist object specified in the input_netlist_db argument of the calling
eerc_analyze_netlist() function.
Syntax
ndb_get_netlist()
Returns
ndb_netlist_t
Example
In this example, the netlist read from disk is passed into an eerc_analyze_netlist()
function, which then starts an EERC remote function.
• Top-level runset file:
input_netlist = read_layout_netlist(...);
initial_eerc_netlist = eerc_setup(...);
ground_nets = ndb_get_ground_net_names(nldb)
See Also
eerc_setup()
eerc_analyze_netlist()
ndb_get_netlist_attribute()
Retrieves a netlist attribute that you previously saved by using the
ndb_set_netlist_attribute() function. Each netlist attribute is represented by a
name-value pair, in which the value is a list of string.
Syntax
ndb_get_netlist_attribute(
netlist = ndb_netlist_t,
attribute_name = "string"
)
Returns
list of string
Example
This example shows how to retrieve the list of ESD MOS models.
esd_models = ndb_get_netlist_attribute(nldb, "mos_esd_models")
See Also
ndb_set_netlist_attribute()
ndb_get_power_net_names()
Retrieves the list of power net names from the given netlist that match the power_nets
argument in the eerc_setup() function. Only the names of nets that are present in the
netlist are returned.
Syntax
ndb_get_power_net_names(
netlist = ndb_netlist_t
)
Returns
list of string
Example
This example shows how to retrieve the list of specified power net names in the current
netlist and apply the “power” tag to each net named in the list.
The PXL code is in eerc.rs:
eerc_setup ( netlist_source = LAYOUT,
layout_netlist = input_netlist_db,
power_nets = power_supplies,
ground_nets = ground_supplies
);
See Also
eerc_setup()
ndb_import_tags_from_cache_netlist()
Copies tags applied to objects in a cache netlist back to the corresponding netlist objects
(nets, devices, and cell instances) in the hierarchical netlist from which they were cached.
The hierarchical selection functions, ndb_find_net(), ndb_find_device(), and
ndb_find_instance(), are used to identify circuity of interest. Very complex topology
recognition can require caching the circuitry selected through a set of hierarchical functions
for final analysis in the flat cache cell. You can apply tags to these cached netlist objects by
using the ndb_set_top_cell_net_tag(), ndb_set_top_cell_device_tag(), and
ndb_set_top_cell_instance_tag() functions. When this final analysis is complete, you
might find it helpful to apply these tags back into the hierarchical netlist.
Syntax
ndb_import_tags_from_cache_netlist(
netlist = ndb_netlist_t,
cache_netlist = ndb_netlist_t,
tags = ["string", ...]
)
Returns
void
Example
In this example, the “primary_up” and “primary_down” tags, applied in a cache netlist, are
copied back into their original hierarchical netlist.
ndb_find_device(nldb, ..., cache=True)
cache_netlist = ndb_cache_to_netlist(nldb)
cache_cell = ndb_netlist_top_cell(cache_netlist)
for cdev in ndb_devices(cache_cell):
...
if my_criteria:
ndb_set_top_cell_device_tag(cdev, "primary_up")
else:
ndb_set_top_cell_device_tag(cdev, "primary_down")
ndb_import_tags_from_cache_netlist(nldb, cache_netlist,
tags = ["primary_up","primary_down"])
ndb_instance_cell()
Returns the cell object associated with the given cell instance. The cell object represents the
master or definition of the specified cell instance.
Syntax
ndb_instance_cell(
instance = ndb_instance_t
)
Returns
ndb_cell_t
Example
This example shows how to print the master cell name of the cell instance named X25.
cinst_name = ndb_instance_name(cinst)
cinst_cell = ndb_instance_cell(cinst)
cinst_model = ndb_cell_name(cinst_cell)
print("cell instance %s has model name %s" % (cinst_name, cinst_model))
ndb_instance_name()
Returns the name of the given cell instance.
Syntax
ndb_instance_name(
instance = ndb_instance_t
)
Returns
string
Example
This example shows how to print the instance and model names of a cell instance.
cinst_name = ndb_instance_name(cinst)
cinst_cell = ndb_instance_cell(cinst)
cinst_model = ndb_cell_name(cinst_cell)
print("cell instance %s has model name %s" % (cinst_name, cinst_model))
ndb_instance_pin()
Looks for a particular pin by name in a given cell instance, and returns a tuple consisting of
a Boolean, indicating whether the pin was found, and the pin object, if it was found.
Syntax
ndb_instance_pin(
instance = ndb_instance_t,
pin_name = "string"
)
Returns
(Boolean, ndb_pin_t)
Example
In this example, the IC Validator tool looks for the pin named INN and prints a message if it
finds the pin.
(found, ipin) = ndb_instance_pin(inst, "INN")
if found:
print("found pin 'INN' on instance %s" % ndb_instance_name(inst))
ndb_instance_pins()
Returns an iterator for the pins of the given cell instance. The pins are in random order.
Syntax
ndb_instance_pins(
instance = ndb_instance_t
)
Returns
iterator
Examples
The following example shows how to loop over all of the pins of the given instance and print
the name of each pin.
for dpin in ndb_instance_pins(instance):
pname = ndb_pin_name(dpin)
print("Instance pin: %s" % pname)
ndb_instances()
Returns an iterator for the child cell instances in the given parent cell. The instances are in
random order.
Syntax
ndb_instances(
cell = ndb_cell_t
)
Returns
iterator
Examples
The following example shows how to loop over all of the instances in the given cell and print
the name of each instance.
for inst in ndb_instances(cell):
iname = ndb_instance_name(inst)
print("Instance: %s" % iname)
ndb_is_net_port()
Determines whether the given net is a port net.
Syntax
ndb_is_net_port(
net = ndb_net_t
)
Returns
Boolean
Example
This example determines whether the net named VDD is a port and prints a message if it is.
(rcode, vdd_net) = ndb_cell_net(top_cell, "VDD")
if rcode:
if ndb_is_net_port(vdd_net):
print("VDD is indeed a top port net")
ndb_is_selected_rule()
Determines whether a specified violation has been selected or suppressed by using the IC
Validator selectable rule command-line options. A violation is executed during the run unless
a selectable rule option has suppressed it. You can use this function to prevent the IC
Validator tool from executing a section of a Python remoter block if its associated rule has
been suppressed.
Syntax
ndb_is_selected_rule(
violation_name = "string"
)
Returns
Boolean
Example
This example shows how to prevent the execution of a block of code when the associated
rule is suppressed.
if ndb_is_selected_rule("esd_1"):
...
ndb_net_device_pins()
Returns an iterator for the device pins connected to the given net. The pins are in random
order.
Syntax
ndb_net_device_pins(
net = ndb_net_t
)
Returns
iterator
Examples
The following example shows how to loop over all of the device pins connected to the given
net and print the name of each pin.
for dpin in ndb_net_device_pins(vdd_net):
pname = ndb_pin_name(dpin)
print("Device pin: %s" % pname)
ndb_net_double_property()
Looks for the specified property with a double value for the specified net, and returns a tuple
that consists of a Boolean, indicating whether the property was found, and the property
value, if the property was found. This function is available only for use in callback functions
for the ndb_find_net() and ndb_report_net() functions.
Syntax
ndb_net_double_property(
net = ndb_net_t,
property_name = "string"
)
Returns
(Boolean, double)
Example
This example shows how to retrieve the value of the vmax property from a net or report an
error if the property is not found.
def my_function(my_net):
rval = False
(rcode, vmax_val) = ndb_net_double_property(my_net, "vmax")
if not rcode:
rval = True
return rval
ndb_report_net(nldb, check_function = my_function,
comment = "net missing vmax property")
ndb_net_instance_pins()
Returns an iterator for the cell instance pins connected to the given net. The pins are in
random order.
Syntax
ndb_net_instance_pins(
net = ndb_net_t
)
Returns
iterator
Examples
The following example shows how to loop over all of the instance pins connected to the
given net and print the name of each pin.
for dpin in ndb_net_instance_pins(vdd_net):
pname = ndb_pin_name(dpin)
print("Instance pin: %s" % pname)
ndb_net_name()
Returns the name of the given net object.
Syntax
ndb_net_name(
nname = ndb_net_t
)
Returns
string
Example
This example shows how to print the name of the given net object.
print("net name: %s" % ndb_net_name(my_net))
ndb_netlist_cell()
Looks for the specified cell by name in the given netlist object, and returns a tuple that
consists of a Boolean, indicating whether the cell was found, and the cell object, if it was
found.
Syntax
ndb_netlist_cell(
netlist = ndb_netlist_t,
cell_name = "string"
)
Returns
(Boolean, ndb_cell_t)
Example
In this example, the IC Validator tool looks for the cell named lsf and prints a message if it
finds the cell.
(found, ecell) = ndb_netlist_cell(nldb, "lsf")
if found:
print("exclude this cell from the check")
ndb_netlist_top_cell()
Returns the cell object for the top cell in the given netlist.
Syntax
ndb_netlist_top_cell(
netlist = ndb_netlist_t
)
Returns
ndb_cell_t
Example
In this example, the IC Validator tool reports the name of the top cell in the netlist.
top_cell = ndb_netlist_top_cell(nldb)
tc_name = ndb_cell_name(top_cell)
print("top cell name: %s" % tc_name)
ndb_nets()
Returns an iterator for the nets in the given master cell. The nets are in random order.
Syntax
ndb_nets(
cell = ndb_cell_t
)
Returns
iterator
Examples
The following example shows how to loop over all of the nets in the given cell and print the
name of each net.
ndb_pin_device()
Returns the device object associated with the given pin object.
Syntax
ndb_pin_device(
pin = ndb_pin_t
)
Returns
ndb_device_t
Example
In this example, the IC Validator tool reports the name of the device instance associated with
the given pin.
my_device = ndb_pin_device(my_pin)
print("device name: %s" % ndb_device_name(my_device))
ndb_pin_instance()
Returns the cell instance object associated with the given pin object.
Syntax
ndb_pin_instance(
pin = ndb_pin_t
)
Returns
ndb_instance_t
Example
In this example, the IC Validator tool reports the name of the cell instance associated with
the given pin.
my_inst = ndb_pin_instance(my_pin)
print("instance name: %s" % ndb_instance_name(my_inst))
ndb_pin_name()
Returns the name of the given pin.
Syntax
ndb_pin_name(
pin = ndb_pin_t,
type = DEFAULT | NETLIST # optional
)
Returns
string
Arguments
pin
Required. Specifies the pin object from which the name is retrieved.
type
Optional. Specifies the type of pin name to be retrieved. Use this argument for
subcircuit-modeled standard device types with input netlist pin names that do not match
the predefined pin name for the device type.
The default is DEFAULT, which retrieves the IC Validator predefined pin name for a
standard pin of a standard device type. Use NETLIST to retrieve the netlist-specified pin
name.
Example
This example shows how to print the name of the given pin.
print("pin name: %s" % ndb_pin_name(my_pin))
ndb_pin_net()
Returns the net object associated with the given pin.
Syntax
ndb_pin_net(
pin = ndb_pin_t
)
Returns
ndb_net_t
Example
This example shows how to print the name of the net associated with the given pin.
pnet = ndb_pin_net(my_pin)
print("net name: %s" % ndb_net_name(pnet))
ndb_ports()
Returns an iterator for the port nets in the given cell. The nets are in random order.
Syntax
ndb_ports(
cell = ndb_cell_t
)
Returns
iterator
Examples
The following example shows how to loop over all of the port nets in the given cell and prints
the name of each net.
for port in ndb_ports(cell):
nname = ndb_net_name(port)
print("Port Net: %s" % nname)
ndb_propagate_net_property()
The ndb_propagate_net_property() function pushes a net double property along paths
in the netlist. The property is pushed through devices between a pair of pins that you define.
Propagation begins from each net that has a double property value for the property name
specified in the original_property_name argument. Propagation ceases when it
encounters either a net with a tag that is specified in the list defined by the
break_path_net_tags argument or a net that is connected to a pin defined by the
unidirectional_cell_ports argument.
A net double property represents a name-value pair in which the value is always a double.
The initial name-value pairs, representing a set of properties, are defined in a fixed-format
file.
You apply these properties to nets in the netlist by using the
eerc_import_net_properties_from_file() runset function. These functions apply the
initial properties and return a new netlist. You can also apply properties to the nets in the top
block of a netlist by using the ndb_set_top_cell_net_property() utility function.
A subsequent eerc_analyze_netlist() function operates on the new netlist and can
include one or more ndb_propagate_net_property() functions. Each
ndb_propagate_net_property() function propagates a single property, which you specify
with the original_property_name argument. The function pushes the original property
values through devices defined by the device_paths argument and applies the name
specified by the propagated_property_name argument to the propagated property values.
The original property name-value pairs remain on the nets where the
eerc_import_net_properties_from_file() function places them, while the
ndb_propagate_net_property() function uses the propagated_property_name string
as the name of the property values that it propagates.
Syntax
ndb_propagate_net_property(
netlist = ndb_netlist_t,
original_property_name = "string",
propagated_property_name = "string",
property_merge_operator = MIN | MAX,
device_paths = [
ndb_device_path(
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR |
GENERIC | MOSFET | JUNCTION_DIODE |
BIPOLAR_TRANSISTOR,
pin_name1 = "string",
pin_name2 = "string",
one_way = True | False, # optional
model_names = ["string", ...], # optional
tag_check = "string", # optional
)
...],
break_path_net_tags = ["string", ...], # optional
unidirectional_cell_ports = [
ndb_cell_ports(
cell_name = "string",
port_names = ["string", ...]
),
...] # optional
)
Returns
void
Arguments
netlist
Required. Specifies the input netlist object for property propagation. This netlist is
produced by an eerc_import_net_properties_from_file() function or an
eerc_analyze_netlist() function that has net double properties.
original_property_name
Required. Specifies the name of the net double property that initiates propagation. Each
net with this property is the source for propagating the double property.
You can set this original property name by using the
eerc_import_net_properties_from_file() runset function or by setting the property
name on a top cell net using the ndb_set_top_cell_net_property() utility function. If
you use eerc_import_net_properties_from_file(), the original property name
must appear in the voltage input file that you specify with the property_file argument.
propagated_property_name
Required. Specifies the property name that the ndb_propagate_net_property()
function applies to the property values that it pushes through the netlist on the defined
paths. The original property name-value pairs remain on the nets where the
eerc_import_net_properties_from_file() function places them. The propagated
double property values are renamed using the name specified by this argument.
property_merge_operator
Required. Controls how the IC Validator tool assigns net properties that collide on a
particular net. For example, if a net has a property with a of value 0.8 and the propagated
value is 1.0, this argument controls which value is assigned.
❍ MIN. Uses the smaller value between the existing net double property and the
colliding property.
❍ MAX. Uses the larger value between the existing net double property and the colliding
property.
device_paths
Required. Defines a list of the devices and their associated pin pairs that control the
propagation paths. This argument uses a list of ndb_device_path() methods that
specify the device types and pin pairs.
The ndb_device_path() method returns the data structures used by the
device_paths argument. Each data structure defines one intradevice propagation path.
Note that ndb_device_path() is a part of the EERC hierarchical functions; it is not a
utility function.
Each ndb_device_path() method has the following arguments:
❍ device_type. Required. Specifies the device type of the devices through which the
properties pass. For information about setting device types, see eerc_setup().
■ Specifying MOSFET causes the tool to select devices associated with the NMOS,
PMOS, or MOSFET device type.
■ Specifying BIPOLAR_TRANSISTOR causes the tool to select devices associated
with the NPN, PNP, or BIPOLAR_TRANSISTOR device type.
■ Specifying JUNCTION_DIODE causes the tool to select devices associated with the
PN, NP, or JUNCTION_DIODE device type.
❍ pin_name1. Required. Specifies the name of the first pin in the propagation pin pair.
❍ pin_name2. Required. Specifies the name of the second pin in the propagation pin
pair.
Note:
For devices represented as standard types in the netlist, The pin names can be
IC Validator standard pin names.
For devices represented by subcircuits in the netlist and mapped to a standard
device type, the pin names can be the netlist names or IC Validator standard pin
names. The IC Validator tool maps the subcircuit pin names to IC Validator
standard pin names based on the pin order for standard devices in SPICE.
❍ one_way. Optional. Controls how the property propagation proceeds. The default is
False.
■ False. Property propagation can proceed in either direction through the pin pair.
❍ model_names. Optional. Specifies a list of the device models through which property
propagation can proceed. Only models that correspond with the specified
device_type are used.
break_path_net_tags
Optional. Defines a list of the tags that can stop property propagation. The propagation
stops on a net that has any of these tags, and the net does not receive the property
value.
unidirectional_cell_ports
Optional. Defines a list of the cell pins that can stop propagation. When a property
propagates through devices, the propagation stops when it reaches a net connected to
one of these cell pins. The unidirectional_cell_ports argument uses a list of
ndb_cell_ports() methods to specify the cell pins.
The ndb_cell_ports() method returns the data structures used by the
unidirectional_cell_ports argument. Each data structure defines a cell pin. Note
that ndb_cell_ports() is a part of the EERC hierarchical functions; it is not a utility
function.
Each ndb_cell_ports() method has the following arguments:
❍ cell_name. Required. Specifies the name of the cell with a pin that stops
propagation.
❍ port_names. Required. Specifies a list of the names of pins that stop propagation.
Example
The following example shows a function that propagates a net property, named volt, through
the netlist using the propagation name vmax. The property is propagated through nmos and
pmos source, drain, and resistor terminals. The propagation begins on any net that has a
property with name volt. The propagation ceases when it encounters a net with a power or
ground tag.
ndb_propagate_net_property(nldb, "volt", "vmax", MAX,
device_paths = [
ndb_device_path(NMOS, "SRC", "DRN"),
ndb_device_path(PMOS, "SRC", "DRN"),
ndb_device_path(RESISTOR, "A", "B")
],
break_path_net_tags = ["power", "ground"]"],
)
See Also
eerc_import_net_properties_from_file()
eerc_write_net_property_file() )
ndb_set_top_cell_net_property()
ndb_propagate_tags()
The ndb_propagate_tags() function pushes tags along paths through the netlist. The tags
are pushed through devices between a pair of pins that you define.
A tag is represented by a string, and each netlist object has either a particular tag or no tag.
Tags do not correspond to a name-value pair. Each ndb_propagate_tags() function
propagates the tags in the list that you define with the net_tags argument. These tags are
pushed through the devices in the list that you define with the device_paths argument.
Tag propagation begins and ends on nets. Each device receives any tag that propagates
through it. You can use the ndb_find_net() function to apply a tag to a set of nets. These
nets represent propagation path startpoints or endpoints. The ndb_propagate_tags()
function starts from nets with a tag in the net_tags list, and proceeds from there through the
netlist.
Propagation ceases when it encounters a net with a tag that is specified in the list that you
define with the break_path_net_tags argument or when it has no further valid devices
through which to propagate.
Syntax
ndb_propagate_tags(
netlist = ndb_netlist_t,
net_tags = ["string", ...],
device_paths = [
ndb_device_path(
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR |
GENERIC | MOSFET | JUNCTION_DIODE |
BIPOLAR_TRANSISTOR,
pin_name1 = "string",
pin_name2 = "string",
one_way = True | False, # optional
model_names = ["string", ...], # optional
tag_check = "string" # optional
),
...],
break_path_net_tags = ["string", ...] # optional
)
Returns
void
Arguments
netlist
Required. Specifies the input netlist object for tag propagation.
net_tags
Required. Defines a list of the tags to be propagated. Propagation starts from the nets
that contain these tags and can proceed in any direction. Propagation ends when it
encounters a net with a tag from the list that you define with the break_path_net_tags
argument or when there are no further valid devices to push through.
device_paths
Required. Defines a list of the devices and their associated pin pairs that control the
propagation paths. This argument uses a list of ndb_device_path() methods that
specify the device types and pin pairs.
The ndb_device_path() method returns the data structures used by the
device_paths argument. Each data structure defines one intradevice propagation path.
Note that ndb_device_path() is a part of the EERC hierarchical functions; it is not a
utility function.
Each ndb_device_path() method has the following arguments:
❍ device_type Required. Specifies the device type of devices through which the tags
pass. For information about setting device types, see eerc_setup().
■ Specifying MOSFET causes the tool to select devices associated with the NMOS,
PMOS, or MOSFET device type.
■ Specifying BIPOLAR_TRANSISTOR causes the tool to select devices associated
with the NPN, PNP, or BIPOLAR_TRANSISTOR device type.
■ Specifying JUNCTION_DIODE causes the tool to select devices associated with the
PN, NP, or JUNCTION_DIODE device type.
❍ pin_name1. Required. Specifies the name of the first pin in the propagation pin pair.
❍ pin_name2. Required. Specifies the name of the second pin in the propagation pin
pair.
Note:
For devices represented as standard types in the netlist, the pin names can be
IC Validator standard pin names.
For devices represented by subcircuits in the netlist and mapped to a standard
device type, the pin names can be the netlist names or IC Validator standard pin
names. The IC Validator tool maps the subcircuit pin names to IC Validator
standard pin names based on the pin order for standard devices in SPICE.
❍ one_way. Optional. Controls how the tag propagation proceeds. The default is False.
True. Tag propagation proceeds only into the pin specified by pin_name1 and out of
the pin specified by pin_name2.
False. Tag propagation can proceed in either direction through the pin pair.
❍ model_names. Optional. Specifies a list of the device models through which tag
propagation can proceed. Only models that correspond with the specified
device_type are used.
the condition defined by this string expression. Previously applied tags are used to
select devices for the propagation path.
The string expression can include the !, ||, and && logic operators and can use ( and
) for grouping.
break_path_net_tags
Optional. Defines a list of the tags that can stop tag propagation. The propagation stops
on a net that has any of these tags, and the net does not receive the propagated tag.
Example
The following example shows a function that propagates the VDD and VSS tags through the
netlist. The ndb_find_net() function adds the tags to the nets. The tags propagate through
nmos and pmos source, drain, and resistor terminals. Propagation stops on nets with power
or ground tags, and these nets do not receive the VDD or VSS tags.
ndb_find_net(nldb, name_check = "VDD", add_tags = ["power", "VDD"])
ndb_propagate_tags(nldb, net_tags=["VDD","VSS"],
device_paths = [
ndb_device_path(NMOS, "SRC", "DRN"),
ndb_device_path(PMOS, "SRC", "DRN"),
ndb_device_path(RESISTOR, "A", "B")
],
break_path_net_tags = ["power", "ground"]
)
See Also
ndb_find_net()
ndb_propagate_net_property()
ndb_remove_tags()
Clears the tag marks for the specified tags in the given netlist. This function is useful when
many intermediate tags are no longer needed.
Syntax
ndb_remove_tags(
netlist = ndb_netlist_t,
tags = ["string", ...]
)
Returns
void
Example
This example shows how to remove the power and ground tags from the given netlist.
ndb_remove_tags(nldb, ["power","ground"]
ndb_report_device()
The ndb_report_device() function selects devices based on the criteria you specify and
writes the selected devices to the error database (PYDB). You can view the error devices in
the LAYOUT_ERRORS file or by using the IC Validator VUE tool. This function can use the
device type, model names, previously applied tags, and a user-defined function to select the
devices to be reported as errors. The IC Validator tool reports all of the selected devices at
or above their original hierarchical cell.
The ndb_report_device() function can identify error devices by using the double
properties associated with their pin nets. In this case, you might find it helpful to trace a net
property back to its origin for debugging purposes. The resulting path information is
available for debugging in the IC Validator VUE tool. You must use the device_paths and
break_path_net_tags arguments for this path tracing, and they should match the
corresponding arguments in the associated ndb_propagate_net_property() function.
Syntax
ndb_report_device(
netlist = ndb_netlist_t,
device_type = NMOS | PMOS | NPN | PNP | PN |
NP | RESISTOR | CAPACITOR |
INDUCTOR | GENERIC | MOSFET |
JUNCTION_DIODE | BIPOLAR_TRANSISTOR,
model_names = ["string", ...], # optional
tag_check = "string", # optional
check_function = function, # optional
violation_name = "string", # optional
comment = "string", # optional
device_paths = [
ndb_device_path(
device_type = NMOS | PMOS | NPN | PNP | PN |
NP | RESISTOR | CAPACITOR |
INDUCTOR | GENERIC | MOSFET |
JUNCTION_DIODE | BIPOLAR_TRANSISTOR,
pin_name1 = "string",
pin_name2 = "string",
one_way = True | False,
model_names = ["string", ...],
tag_check = "string"
),
...], # optional
break_path_net_tags = ["string", ...] # optional
)
Returns
void
Arguments
netlist
Required. Specifies the input netlist for device reporting.
device_type
Required. Specifies the device type of the devices to be reported. For information about
specifying device types, see eerc_setup().
❍ Specifying MOSFET causes the tool to select devices associated with the NMOS,
PMOS, or MOSFET device type.
❍ Specifying BIPOLAR_TRANSISTOR causes the tool to select devices associated with
the NPN, PNP, or BIPOLAR_TRANSISTOR device type.
❍ Specifying JUNCTION_DIODE causes the tool to select devices associated with the
PN, NP, or JUNCTION_DIODE device type.
model_names
Optional. Specifies a list of the device model names to be considered. Reported devices
must have one of these names. You can use the * and ! wildcard characters to specify
device model names. For information about specifying model names for device types,
see eerc_setup(). By default, devices are selected regardless of their model names.
tag_check
Optional. Specifies a string expression to control device reporting. The expression must
evaluate to True for a device to be reported.
The string expression uses previously applied tags to select devices. It can include the
!, ||, and && logic operators and can use ( and ) for grouping..
check_function
Optional. Specifies the name of a user-defined Python function for device reporting. This
function must take a single argument of type ndb_device_t and return a Boolean. The
user-defined function is passed as input to the check_function argument. A device can
be reported only when this callback function returns the value True.
This user-defined function can call any EERC utility function that takes a device object
as an argument. It is most often used to check device properties or the net double
properties of nets connected to the device pins.
The ndb_set_device_report_info() function is used in this user-defined function to
trace the propagation paths of net double properties.
violation_name
Optional. Specifies the name of the violation for which the devices are reported. The
name must match a violation name in the violation_definitions hash in the calling
eerc_analyze_netlist() function.
comment
Optional. Specifies a violation comment to be associated with each error device if no
other comment is given using an ndb_set_device_report_info() function in a
user-defined function for the check_function argument.
device_paths
Optional. Defines a list of the devices and their associated pin pairs that control the
propagation paths. This argument uses a list of ndb_device_path() methods that
specify the device types and pin pairs through which the properties have been pushed.
Use this argument only when you are using the ndb_set_device_report_info()
function in a user-defined function for the check_function argument to trace from a pin
net back to the origin of a net double property. The specified device paths must match
the specification used in the ndb_propagate_net_property() function that propagates
the property.
The ndb_device_path() method returns the data structures used by the device_paths
argument. Each data structure defines one intradevice propagation path. Note that
ndb_device_path() is a part of the EERC hierarchical functions; it is not a utility
function.
Each ndb_device_path() method has the following arguments:
❍ device_type. Required. Specifies the device type of the devices through which the
properties pass. For information about setting device types, see eerc_setup().
■ Specifying MOSFET causes the tool to select devices associated with the NMOS,
PMOS, or MOSFET device type.
■ Specifying BIPOLAR_TRANSISTOR causes the tool to select devices associated
with the NPN, PNP, or BIPOLAR_TRANSISTOR device type.
■ Specifying JUNCTION_DIODE causes the tool to select devices associated with the
PN, NP, or JUNCTION_DIODE device type.
❍ pin_name1. Required. Specifies the name of the first pin in the propagation pin pair.
❍ pin_name2. Required. Specifies the name of the second pin in the propagation pin
pair.
Note:
For devices represented as standard types in the netlist, The pin names can be
IC Validator standard pin names.
For devices represented by subcircuits in the netlist and mapped to a standard
device type, the pin names can be the netlist names or IC Validator standard pin
names. The IC Validator tool maps the subcircuit pin names to IC Validator
standard pin names based on the pin order for standard devices in SPICE.
❍ one_way. Optional. Controls how the property propagation proceeds. The default is
False.
■ False. Property propagation can proceed in either direction through the pin pair.
❍ model_names. Optional. Specifies a list of the device models through which property
propagation can proceed. Only models that correspond with the specified
device_type are used.
break_path_net_tags
Optional. Defines a list of the tags that can stop property propagation. The propagation
stops on a net that has any of these tags. That net does not receive the propagated
property.
Use this argument when you are using the ndb_set_device_report_info() function in
a user-defined function for the check_function argument. The specified break tags
must match the specification used in the associated ndb_propagate_net_property()
function.
Examples
1. This example shows how to select all MOS devices where the GATE pin is connected to
a net with only a single connection, mark them with the floating_gate tag, and report
them as errors.
ndb_find_device(nldb, MOSFET,
pins = [ndb_pin_check(["GATE"], connections="==1")],
add_tags = ["floating_gate"]
)
ndb_report_device(nldb, MOSFET, tag_check="floating_gate",
comment = "MOS device GATE net is floating"
)
2. This example shows how to check all MOS GATE and SRC pin nets for a vmax net
property and, if both the GATE and SRC pin nets have the property, report any devices
for which the difference in vmax between the GATE and SRC pin nets is greater than
0.78.
# these settings for device_paths and break_path_net_tags are used for
# both `ndb_report_device()` and `ndb_propagate_net_property()` for
vmax
vmax_propagation_paths = [
ndb_device_path(MOSFET, "SRC", "DRN"),
ndb_device_path(RESISTOR, "A", "B"),
ndb_device_path(JUNCTION_DIODE, "ANODE", "CATHODE", one_way=True)
]
vmax_break_tags = ["power","ground"]
ndb_propagate_net_property(
netlist = nldb,
original_property_name = "max_voltage",
propagated_property_name = "vmax",
property_merge_operator = MAX
device_paths = vmax_propagation_paths,
break_path_net_tags = vmax_break_tags
)
def check_eos(device):
(gcode, gpin) = ndb_device_pin(device, "GATE")
(scode, spin) = ndb_device_pin(device, "SRC")
return True
return False
ndb_report_device(nldb, MOSFET,
check_function = check_eos,
device_paths = vmax_propagation_paths,
break_path_net_tags = vmax_break_tags
)
See Also
ndb_device_pin()
ndb_find_device()
ndb_net_double_property()
ndb_pin_net()
ndb_propagate_net_property()
ndb_save_top_cell_device()
ndb_set_device_report_info()
ndb_report_instance()
The ndb_report_instance() function identifies cell instances based on a set of criteria
that you specify, and writes the selected instances to the error database. You can view the
error instances in the LAYOUT_ERRORS file or by using the IC Validator VUE tool. This
function can use cell names, previously-applied tags, and a user-defined function to select
the instances that it reports as errors.
The ndb_report_instance() function can identify error cell instances by using the double
properties on the nets associated with their pins. In this case, you might find it helpful to
trace a net property back to its origin for debugging purposes. You must use the
device_paths and break_path_net_tags arguments for this path tracing, and they should
match the corresponding arguments in the associated ndb_propagate_net_property()
function.
Syntax
ndb_report_instance(
netlist = ndb_netlist_t,
cell_names = ["string", ...],
tag_check = "string", # optional
check_function = function, # optional
violation_name = "string", # optional
comment = "string", # optional
report_pins = ["string", ...], # optional
device_paths = [
ndb_device_path(
device_type = NMOS | PMOS | NPN | PNP | PN |
NP | RESISTOR | CAPACITOR |
INDUCTOR | GENERIC | MOSFET |
JUNCTION_DIODE | BIPOLAR_TRANSISTOR,
pin_name1 = "string",
pin_name2 = "string",
one_way = True | False,
model_names = ["string", ...],
tag_check = "string"
),
...], # optional
break_path_net_tags = ["string", ...] # optional
)
Returns
void
Arguments
netlist
Required. Specifies the input netlist.
cell_names
Required. Specifies a list of strings that can include the * and ! wildcard characters.
These strings represent the names of the cells for which instances are reported (or not
reported if you use the ! wildcard character).
tag_check
Optional. Specifies a string expression to control instance reporting. The expression
must evaluate to True for an instance to be reported.
The string expression uses previously applied tags to select instances. It can include the
!, ||, and && logic operators and can use ( and ) for grouping.
check_function
Optional. Specifies the name of a user-defined Python function for cell instance
reporting. This function must take a single argument of type ndb_instance_t and return
a Boolean. The user-defined function is passed as input to the check_function
argument. A cell instance can be selected only when this callback function returns the
value True.
This user-defined function can call any EERC utility function that takes a cell instance
object as an argument. It is most often used to check the net double properties of nets
connected to the cell instance pins. Use the ndb_set_instance_report_info()
function in this user-defined function to trace the propagation paths of net double
properties.
Note:
When you use the check_function argument to report cell instances, all of the cell
instances that are in error are reported as flat in the top cell. If you do not use the
check_function argument, the error reporting is hierarchical and all cell instances
are reported with reference to their parent cell or above.
violation_name
Optional. Specifies the name of the violation for which the instances are reported. The
name must match a violation name in the violation_definitions hash in the calling
eerc_analyze_netlist() function.
comment
Optional. Specifies a violation comment to be associated with each error instance.
report_pins
Optional. Specifies a list of string that can include the * and ! wildcard characters. These
strings represent the names of the cell instance pins that are reported in the
LAYOUT_ERRORS file in addition to the cell instance that is in error. By default, no cell
instance pins are reported.
Note:
A pin is reported in the LAYOUT_ERRORS file only when it is specified in the
report_pins list or with the ndb_set_instance_report_info() function.
This argument does affect the cell instance pins that are displayed in the IC Validator
VUE tool.
device_paths
Optional. Defines a list of the devices and their associated pin pairs that control the
propagation paths. This argument uses a list of ndb_device_path() methods that
specify the device types and pin pairs through which the properties have been pushed.
Use this argument only when you are using the ndb_set_instance_report_info()
function in a user-defined function for the check_function argument to trace from a pin
net back to the origin of a net double property. The specified device paths must match
the specification used in the ndb_propagate_net_property() function that propagates
the property.
The ndb_device_path() method returns the data structures used by the device_paths
argument. Each data structure defines one intradevice propagation path. Note that
ndb_device_path() is a part of the EERC hierarchical functions; it is not a utility
function.
Each ndb_device_path() method has the following arguments:
❍ device_type. Required. Specifies the device type of the devices through which the
properties pass. For information about setting device types, see eerc_setup().
■ Specifying MOSFET causes the tool to select devices associated with the NMOS,
PMOS, or MOSFET device type.
❍ pin_name2. Required. Specifies the name of the second pin in the propagation pin
pair.
Note:
For devices represented as standard types in the netlist, The pin names can be
IC Validator standard pin names.
For devices represented by subcircuits in the netlist and mapped to a standard
device type, the pin names can be the netlist names or IC Validator standard pin
names. The IC Validator tool maps the subcircuit pin names to IC Validator
standard pin names based on the pin order for standard devices in SPICE.
❍ one_way. Optional. Controls how the property propagation proceeds. The default is
False.
■ False. Property propagation can proceed in either direction through the pin pair.
❍ model_names. Optional. Specifies a list of the device models through which property
propagation can proceed. Only models that correspond with the specified
device_type are used.
break_path_net_tags
Optional. Defines a list of the tags that can stop property propagation. The propagation
stops on a net that has any of these tags. That net does not receive the propagated
property.
Use this argument when you are using the ndb_set_instance_report_info() function
in a user-defined check function. The specified break tags must match the specification
used in the associated ndb_propagate_net_property() function.
Examples
Example 1
This example shows how to select all inverter cell instances where the VDD pin is not
connected to a power net or the GND pin is not connected to a ground net, and report these
as errors.
# assume all power nets have been tagged with "power"
# assume all ground nets have been tagged with "ground"
ndb_find_instance(
netlist = nldb,
cell_names = ["*inv*"],
pins = [ndb_pin_check(["VDD"], tag_check="!power")],
add_tags = ["bad_power"]
)
ndb_find_instance(
netlist = nldb,
cell_names = ["*inv*"],
pins = [ndb_pin_check(["GND"], tag_check="!ground")],
add_tags = ["bad_ground"]
)
ndb_report_instance(
netlist = nldb,
cell_names = ["*inv*"],
tag_check = "bad_power || bad_ground"
comment = "instance has bad supply connection"
)
Example 2
This example shows how to check all VDD pin nets of inverter cell instances for a
withstand_voltage property and, if the VDD pin has the property, report any cell instances
for which the withstand_voltage property is greater than 0.8.
# the settings for device_paths and break_path_net_tags are used for
# both `ndb_report_instance()` and `ndb_propagate_net_property()` for
# withstand voltage.
withstand_voltage_prop_paths = [
ndb_device_path(NMOS, "DRN", "SRC"),
ndb_device_path(PMOS, "DRN", "SRC")
]
def check_instance(instance):
rval = False
if pcode:
pnet = ndb_pin_net(ppin)
presult, pvolt = ndb_net_double_property(pnet,
"withstand_voltage")
ndb_report_instance(
netlist = nldb,
cell_names = ["*inv*"],
check_function = check_instance,
comment = "Error in instance for EOS",
report_pins = ["*", "!IN"],
device_paths = withstand_voltage_prop_paths,
break_path_net_tags = withstand_voltage_break_tags
)
See Also
ndb_find_instance()
ndb_report_instance()
ndb_report_net()
The ndb_report_net() function identifies nets, based on a set of criteria that you specify,
and writes the selected nets to the error database. You can view the error nets in the
LAYOUT_ERRORS file or by using the IC Validator VUE tool. The ndb_report_net()
function can use the previously-applied tags or a user-defined function to select the nets to
be reported as errors. All of the selected nets are reported at or above their original
hierarchical cell.
You can identify error nets by using the check_function function and any double properties
associated with them. You can use the double properties to decide whether a net should be
reported as an error. In this case, you might find it helpful to trace a net property back to its
origin for debugging purposes. The resulting path information is available for debugging in
the IC Validator VUE tool. You must use the device_paths and break_path_net_tags
arguments for this path tracing, and they should match the
Syntax
ndb_report_net(
netlist = ndb_netlist_t,
tag_check = "string", # optional
check_function = function, # optional
violation_name = "string", # optional
comment = "string", # optional
device_paths = [
ndb_device_path(
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR |
GENERIC | MOSFET | JUNCTION_DIODE |
BIPOLAR_TRANSISTOR,
pin_name1 = "string",
pin_name2 = "string",
one_way = True | False, # optional
model_names = ["string", ...], # optional
tag_check = "string", # optional
)
...],
break_path_net_tags = ["string", ...] # optional
)
Returns
void
Arguments
netlist
Required. Specifies the input netlist.
tag_check
Optional. Specifies a string expression to control net selection. The expression must
evaluate to True for a net to be selected.
The string expression uses previously applied tags to select devices. It can include the
!, ||, and && logic operators and can use ( and ) for grouping.
check_function
Optional. Specifies the name of a user-defined Python function that takes a single
argument of type ndb_net_t and returns a Boolean. The user-defined function is passed
as input to the check_function argument. A net can be reported only when this callback
function returns the value True.
This function can call any EERC utility function that takes a net object as an argument.
The function is most often used to check net properties. In this check function, the
ndb_set_net_report_info() function associates a comment with individual net errors
and is used to specify the net double properties to be traced back to their origins.
violation_name
Optional. Specifies the name of the violation for which the nets are reported. The name
must match a violation name in the violation_definitions hash in the calling
eerc_analyze_netlist() function.
comment
Optional. Specifies a violation comment to be associated with each error net if no other
comment is given using an ndb_set_net_report_info() function in the check function.
device_paths
Required. Defines a list of the devices and their associated pin pairs that control the
propagation paths. This argument uses a list of ndb_device_path() methods to specify
the device types and pin pairs.
Use this argument when you use the ndb_set_net_report_info() function in a
user-defined function for the check_function argument to trace from a net back to the
origin of a net double property. To correctly trace the property, the specified device paths
must match the specification used in the ndb_propagate_net_property() function that
propagates the property.
The ndb_device_path() method returns the data structures used by the
device_paths argument. Each data structure defines one intradevice propagation path.
Note that ndb_device_path() is a part of the EERC hierarchical functions; it is not a
utility function.
Each ndb_device_path() method has the following arguments:
❍ device_type. Required. Specifies the device type of the devices through which the
properties pass. For information about setting device types, see eerc_setup().
■ Specifying MOSFET causes the tool to select devices associated with the NMOS,
PMOS, or MOSFET device type.
■ Specifying BIPOLAR_TRANSISTOR causes the tool to select devices associated
with the NPN, PNP, or BIPOLAR_TRANSISTOR device type.
■ Specifying JUNCTION_DIODE causes the tool to select devices associated with the
PN, NP, or JUNCTION_DIODE device type.
❍ pin_name1. Required. Specifies the name of the first pin in the propagation pin pair.
❍ pin_name2. Required. Specifies the name of the second pin in the propagation pin
pair.
Note:
For devices represented as standard types in the netlist, The pin names can be
IC Validator standard pin names.
For devices represented by subcircuits in the netlist and mapped to a standard
device type, the pin names can be the netlist names or IC Validator standard pin
names. The IC Validator tool maps the subcircuit pin names to IC Validator
standard pin names based on the pin order for standard devices in SPICE.
❍ one_way. Optional. Controls how the property propagation proceeds. The default is
False.
■ False. Property propagation can proceed in either direction through the pin pair.
❍ model_names. Optional. Specifies a list of the device models through which property
propagation can proceed. Only models that correspond with the specified
device_type are used.
break_path_net_tags
Optional. Defines a list of the tags that can stop property propagation. The propagation
stops on a net that has any of these tags. That net does not receive the propagated
property.
Use this argument when you use the ndb_set_net_report_info() function in a
user-defined function for the check_function argument. The specified break tags must
match the specification used in the associated ndb_propagate_net_property()
function for correct property traceback.
Examples
1. This example shows how to select nets with only a single device pin connection, mark
them with the single_connect_net tag, and report them as errors.
ndb_find_net(
netlist = nldb,
connections = ndb_count_check("==1"),
add_tags = ["single_connect_net"]
)
ndb_report_net(
netlist = nldb,
tag_check = "single_connect_net"
)
2. This example shows how to report any net that has a vmax net property with a value
greater than 3.4. The property is also traced back to its origin and the path information
is made available in the IC Validator VUE tool.
vmax_propagation_paths = [
ndb_device_path(MOSFET, "SRC", "DRN"),
ndb_device_path(RESISTOR, "A", "B"),
ndb_device_path(JUNCTION_DIODE, "ANODE", "CATHODE", one_way=True)
]
vmax_break_tags = ["power","ground"]
ndb_propagate_net_property(
netlist = nldb,
original_property_name = "max_voltage",
propagated_property_name = "vmax",
property_merge_operator = MAX
device_paths = vmax_propagation_paths,
break_path_net_tags = vmax_break_tags
)
def check_prop(net):
(rcode, vmax_val) = ndb_net_double_property(net, "vmax")
if rcode:
if vmax_val > 3.4:
ndb_set_net_report_info("vmax value %g > 3.4" %
vmax_val, report_origin_property_names = ["vmax"]
)
return True
return False
ndb_report_net(nldb,
device_paths = vmax_propagation_paths,
break_path_net_tags = vmax_break_tags,
check_function=check_prop
)
See Also
ndb_find_net()
ndb_net_double_property()
ndb_report_top_cell_device()
ndb_set_net_report_info()
ndb_report_top_cell_device()
The ndb_report_top_cell_device() function writes a device in the error database
(PYDB). The device is included in the LAYOUT_ERRORS file and is shown under the EERC
tab in the IC Validator VUE tool. Only devices located in the top cell of a netlist can be
reported. This function is most often used in a cache netlist where devices from throughout
the hierarchy have been copied to a flat holding cell.
Reporting devices from a flat holding cell allows you to associate a set of reference objects
with each error device. These reference objects, which can include nets, cell instances, and
other devices, provide the error device context for debugging. The reference objects are
shown in the Netlist Visualizer window in the IC Validator VUE tool when this error device is
selected.
In addition, you can associate a list of tags with the error device and the reference objects.
Any tags that have been applied to the error device and reference objects are listed with the
error in the LAYOUT_ERRORS file and in the IC Validator VUE tool.
Syntax
ndb_report_top_cell_device(
device = ndb_device_t,
violation_name = "string", # optional
comment = "string", # optional
reference_devices = [ndb_device_t, ...], # optional
reference_instances = [ndb_instance_t, ...], # optional
reference_nets = [ndb_net_t, ...], # optional
report_tags = ["string", ...] # optional
)
Returns
void
Arguments
device
Required. Specifies the device object to be reported as an error.
violation_name
Optional. Specifies the name of the violation for which the device is reported. The name
must match a violation name in the violation_definitions hash in the calling
eerc_analyze_netlist() function.
comment
Optional. Specifies a violation comment to be associated with this error device.
reference_devices
Optional. Specifies a list of device objects to be shown in the Netlist Visualizer in the
IC Validator VUE tool when this error device is selected.
reference_instances
Optional. Specifies a list of cell instance objects to be shown in the Netlist Visualizer in
the IC Validator VUE tool when this error device is selected.
reference_nets
Optional. Specifies a list of net objects to be shown in the Netlist Visualizer in the
IC Validator VUE tool when this error device is selected.
report_tags
Optional. Specifies a list of tag names. If any tag in the list has been applied to the error
device or reference objects, it appears with the device error in the LAYOUT_ERRORS
file and in the IC Validator VUE tool.
Examples
This example shows how to report devices in the cache netlist as errors.
cache_nl = ndb_cache_to_netlist(nldb)
cache_cell = ndb_netlist_top_cell(cache_nl)
for device in ndb_devices(cache_cell):
# report devices tagged with "esd_err"
if ndb_top_cell_device_tag(device, "esd_err"):
ndb_report_top_cell_device(
device,
comment = "bad ESD device"
)
See Also
ndb_cache_to_netlist()
ndb_devices()
ndb_report_device()
ndb_netlist_top_cell()
ndb_report_top_cell_instance()
ndb_report_top_cell_net()
ndb_top_cell_device_tag()
ndb_report_top_cell_instance()
The ndb_report_top_cell_instance() function writes a cell instance in the error
database (PYDB). The instance is included in the LAYOUT_ERRORS file and is shown
under the EERC tab in the IC Validator VUE tool. Only instances located in the top cell of a
netlist can be reported. This function is most often used in a cache netlist where instances
from throughout the hierarchy have been copied to a flat holding cell.
Reporting instances from a flat holding cell allows you to associate a set of reference objects
with each error instance. These reference objects, which can include nets, devices, and
other instances, provide the error instance context for debugging. The reference objects are
shown in the Netlist Visualizer window in the IC Validator VUE tool when this error instance
is selected. In addition, you can associate a list of tags with the error instance and reference
objects. Any of the tags that have been applied to these error instance and reference objects
are listed with the error in the LAYOUT_ERRORS file and in the IC Validator VUE tool.
Syntax
ndb_report_top_cell_instance(
instance = ndb_instance_t,
violation_name = "string", # optional
comment = "string", # optional
reference_devices = [ndb_device_t, ...], # optional
reference_instances = [ndb_instance_t, ...], # optional
reference_nets = [ndb_net_t, ...], # optional
report_tags = ["string", ...] # optional
)
Returns
void
Arguments
instance
Required. Specifies the cell instance object to be reported as an error.
violation_name
Optional. Specifies the name of the violation for which the instance is reported. The
name must match a violation name in the violation_definitions hash in the calling
eerc_analyze_netlist() function.
comment
Optional. Specifies a violation comment to be associated with this error instance.
reference_devices
Optional. Specifies a list of device objects to be shown in the Netlist Visualizer in the
IC Validator VUE tool when this error instance is selected.
reference_instances
Optional. Specifies a list of cell instance objects to be shown in the Netlist Visualizer in
the IC Validator VUE tool when this error instance is selected.
reference_nets
Optional. Specifies a list of net objects to be shown in the Netlist Visualizer in the
IC Validator VUE tool when this error instance is selected.
report_tags
Optional. Specifies a list of tag names. If any tag in the list has been applied to the error
instance and reference objects, it appears with the instance error in the
LAYOUT_ERRORS file and in the IC Validator VUE tool.
Examples
This example shows how to report instances as errors in the cache netlist.
cache_nl = ndb_cache_to_netlist(nldb)
cache_cell = ndb_netlist_top_cell(cache_nl)
for inst in ndb_instances(cache_cell):
# report instances tagged with "esd_err"
if ndb_top_cell_instance_tag(inst, "esd_err"):
ndb_report_top_cell_instance(
inst,
comment = "bad ESD instance"
)
See Also
ndb_cache_to_netlist()
ndb_instances()
ndb_netlist_top_cell()
ndb_report_instance()
ndb_report_top_cell_device()
ndb_report_top_cell_net()
ndb_top_cell_instance_tag()
ndb_report_top_cell_net()
The ndb_report_top_cell_net() function writes a net in the error database. The net is
included in the LAYOUT_ERRORS file and is shown under the EERC tab in the IC Validator
VUE tool. Only nets located in the top cell of a netlist can be reported. This function is most
often used in a cache netlist where nets from throughout the hierarchy have been copied to
a flat holding cell.
Reporting nets from a flat holding cell allows you to associate a set of reference objects with
each error net. These reference objects, which can include devices, cell instances, and
other nets, provide the error net context for debugging. The reference objects are shown in
the Netlist Visualizer window in the IC Validator VUE tool when this error net is selected. In
addition, you can associate a list of tags with the error net and reference objects. Any of the
tags that have been applied to the net and the reference objects are listed with the error in
the LAYOUT_ERRORS file and in the IC Validator VUE tool.
Syntax
ndb_report_top_cell_net(
net = ndb_net_t,
violation_name = "string", # optional
comment = "string", # optional
reference_devices = [ndb_device_t, ...], # optional
reference_instances = [ndb_instance_t, ...], # optional
reference_nets = [ndb_net_t, ...], # optional
report_tags = ["string", ...] # optional
)
Returns
void
Arguments
net
Required. Specifies the net object to be reported as an error.
violation_name
Optional. Specifies the name of the violation for which the net is reported. The name
must match a violation name in the violation_definitions hash in the calling
eerc_analyze_netlist() function.
comment
Optional. Specifies a violation comment to be associated with this error net.
reference_devices
Optional. Specifies a list of device objects to be shown in the Netlist Visualizer in the
IC Validator VUE tool when this error net is selected.
reference_instances
Optional. Specifies a list of cell instance objects to be shown in the Netlist Visualizer in
the IC Validator VUE tool when this error net is selected.
reference_nets
Optional. Specifies a list of net objects to be shown in the Netlist Visualizer in the
IC Validator VUE tool when this error net is selected.
report_tags
Optional. Specifies a list of tag names. If any tag in the list has been applied to the net
and the reference objects, it appears with the net error in the LAYOUT_ERRORS file and
in the IC Validator VUE tool.
Examples
This example shows how to report nets in the cache netlist as errors.
cache_nl = ndb_cache_to_netlist(nldb)
cache_cell = ndb_netlist_top_cell(cache_nl)
for net in ndb_nets(cache_cell):
# report nets tagged with "esd_err"
if ndb_top_cell_net_tag(net, "esd_err"):
ndb_report_top_cell_net(
net,
comment = "bad ESD net"
)
See Also
ndb_cache_to_netlist()
ndb_netlist_top_cell()
ndb_nets()
ndb_report_net()
ndb_report_top_cell_device()
ndb_report_top_cell_instance()
ndb_top_cell_net_tag()
ndb_reset_cache()
Clears all of the cache marks on netlist objects in the given netlist. Any
ndb_cache_to_netlist() function that immediately follows it returns an empty result.
Syntax
ndb_reset_cache(
netlist = ndb_netlist_t
)
Returns
void
Example
This example shows how to remove all of the cache marks in the nldb netlist.
ndb_reset_cache(nldb)
...
ndb_save_device_property()
Stores a new double property on the given device. You cannot use this function to change
the value of an existing property.
Syntax
ndb_save_device_property(
device = ndb_device_t,
property_name = "string",
property_value = double
)
Returns
void
Example
This example shows how to store a new property, named NF, on a MOS device.
ndb_save_device_property(my_dev, "NF", 2.0)
ndb_save_netlist()
Writes the given netlist, any tags specified by the export_tags argument, and any net
double properties to the output netlist produced by calling the eerc_analyze_netlist()
function. The ndb_save_netlist() function also saves any netlist attributes associated
with the given netlist. You can use the resulting netlist in subsequent calls to the
eerc_analyze_netlist() function.
Note:
Any cache=True marks on individual net or device objects do not persist in the netlist
database returned by the ndb_save_netlist() function to the
eerc_analyze_netlist() function. A call to the ndb_save_netlist() function clears
cache marks from all net and device objects within the corresponding netlist database
object.
Syntax
ndb_save_netlist(
netlist = ndb_netlist_t
export_tags = ["string", ...] # optional
)
Returns
void
Example
This example shows how to save the working netlist with the power, ground, VDD, and VSS
tags.
ndb_save_netlist(nldb, ["power","ground","VDD","VSS"])
ndb_save_top_cell_device()
Stores the given device in the results database for subsequent layer generation by using the
eerc_create_device_layer() function. This function saves only those devices that are in
the top cell of a netlist, and it is typically used to save a device that is in the cache netlist.
Syntax
ndb_save_top_cell_device(
device = ndb_device_t
)
Returns
void
Example
In this example, the IC Validator tool saves all of the NMOS devices in the cache netlist.
cache_cell = ndb_netlist_top_cell(ndb_cache_to_netlist(nldb))
for cdev in ndb_devices(cache_cell):
if ndb_device_type(cdev) == NMOS:
ndb_save_top_cell_device(cdev)
See Also
eerc_create_device_layer()
ndb_save_top_cell_device_list()
ndb_save_top_cell_device_list()
Stores the specified devices in the results database for subsequent layer generation. The
IC Validator tool saves all of the devices in the list as a group that you can access by using
the eerc_create_device_list_layer() function in the main runset.
Each ndb_save_top_cell_device_list() call creates a separate group for the
eerc_create_device_list_layer() function. The ndb_save_top_cell_device_list()
function saves only those devices that are in the top cell of a netlist; it is typically used to
save a device that is in the cache netlist. A call of eerc_create_device_list_layer() in
the main runset returns the body shapes or extents of all the groups saved by calls of the
ndb_save_top_cell_device_list()function.
Syntax
ndb_save_top_cell_device_list(
devices = [ndb_device_t, ...]
)
Returns
void
Example
In this example, the IC Validator tool saves a group of devices in the results database,
creates a bounding box around each group, and creates the device seed shapes.
The PXL code is in eerc.rs:
results = eerc_analyze_netlist(...);
results_db = results.results_db;
// create the seed shapes for each saved device in a save list
seed_shapes = eerc_create_device_list_layer(
results_db,
device_db,
BODY_POLYGONS);
See Also
eerc_create_device_list_layer()
ndb_save_top_cell_device()
ndb_save_top_cell_net()
Stores the given net in the results database for subsequent layer generation by using the
eerc_create_net_layer() function. This function saves only those nets that are in the top
cell of a netlist. It is typically used to save a net that is in the cache netlist.
Syntax
ndb_save_top_cell_net(
net = ndb_net_t
)
Returns
void
Example
This example shows how to save all of the nets that are in the cache netlist.
cache_cell = ndb_netlist_top_cell(ndb_cache_to_netlist(nldb))
for cnet in ndb_nets(cache_cell):
ndb_save_top_cell_net(cnet)
See Also
eerc_create_net_layer()
ndb_set_device_report_info()
The ndb_set_device_report_info() function can associate a comment with each device
violation and trace a net double property, on one or more device pin nets, from the pin back
to the origin of that property. The resulting path information is available for debugging
purposes in the IC Validator VUE tool. Use this function in a user-defined Python function
called from the check_function argument of the ndb_report_device() function.
When using the net double property trace-back capability, you must first propagate the
property throughout the netlist by using the ndb_propagate_net_property() function. In
addition, you must use the device_paths and break_path_net_tags arguments that you
used in the ndb_propagate_net_property() function for the property you are tracing in
the ndb_report_device() function associated with this call of
ndb_set_device_report_info().
Syntax
ndb_set_device_report_info(
comment = "string", # optional
report_property_origin = [
ndb_pin_property_pair(
pin_name = "string",
property_name = "string"
),
...] # optional
)
Returns
void
Arguments
comment
Optional. Specifies a string to be associated with a particular error device. The string is
printed in the LAYOUT_ERRORS file and displayed with the error device in the
IC Validator VUE tool.
This string provides instance-specific information about a particular error device that can
help you to debug the error.
report_property_origin
Optional. Defines a list of starting points for tracing a net double property back to its origin
and makes this path information available in the IC Validator VUE tool. This argument
specifies a list of ndb_pin_property_pair() methods, each of which defines a starting
point.
The ndb_pin_property_pair() method returns the pin and property name data
structures used by the report_property_origin argument. Note that
ndb_pin_property_pair() is a part of the EERC hierarchical functions; it is not a utility
function.
Each ndb_pin_property_pair() method has the following arguments:
❍ pin_name Required. Specifies the name of the pin from which the trace-back
operation starts.
❍ property_name Required. Specifies the name of the net double property to be
traced.
Examples
In this example, the IC Validator tool checks all of the MOS GATE and SRC pin nets for the
vmax net property. If the GATE pin net and SRC pin nets both have the property, the tool
reports any devices for which the difference in vmax between the GATE and SRC pin nets is
greater than 0.78.
# these settings for device_paths and break_path_net_tags are used for
# both `ndb_report_device()` and `ndb_propagate_net_property()` for vmax
vmax_propagation_paths = [
ndb_device_path(MOSFET, "SRC", "DRN"),
ndb_device_path(RESISTOR, "A", "B"),
ndb_device_path(JUNCTION_DIODE, "ANODE", "CATHODE", one_way=True)
]
vmax_break_tags = ["power","ground"]
def check_eos(device):
(gcode, gpin) = ndb_device_pin(device, "GATE")
(scode, spin) = ndb_device_pin(device, "SRC")
gnet = ndb_pin_net(gpin)
snet = ndb_pin_net(spin)
ndb_propagate_net_property(
netlist = nldb,
original_property_name = "volt",
propagated_property_name = "vmax",
property_merge_operator = MAX,
device_paths = vmax_propagation_paths,
break_path_net_tags = vmax_break_tags
)
ndb_report_device(nldb, MOSFET,
check_function = check_eos,
device_paths = vmax_propagation_paths,
break_path_net_tags = vmax_break_tags
)
See Also
ndb_propagate_net_property()
ndb_report_device()
ndb_set_device_tag_by_hierarchical_name()
Applies the specified tag to one or more devices defined by the ndb_hierarchical_name()
function. You can specify either the explicit instance name path to each device or a cell
name and the instance path from the cell.
The ndb_hierarchical_name() method is used to specify the device instance names. To
specify multiple device instance names, use a list of ndb_hierarchical_name() methods.
Syntax
ndb_set_device_tag_by_hierarchical_name(
netlist = ndb_netlist_t,
hierarchical_names = [
ndb_hierarchical_name(name = "string",
cell_name = "string" # optional
),
...],
tag = "string"
)
Returns
void
Example
In this example, the esd_ggmos tag is applied to the I1/I24/M6 device. The name is
referenced from the top block in the netlist, so the cell_name argument is not needed in the
ndb_hierarchical_name() function.
ndb_set_device_tag_by_hierarchical_name(nldb,
hierarchical_names = [ndb_hierarchical_name("I1/I24/M6")],
tag = "esd_ggmos"
)
ndb_set_instance_report_info()
The ndb_set_instance_report_info() function can associate a comment with each cell
instance violation and trace a net double property, on one or more cell instance pin nets,
from the pin back to the origin of that property. The resulting path information is available for
debugging purposes in the IC Validator VUE tool. Use this function in a user-defined Python
function called from the check_function argument of the ndb_report_instance()
function.
When using the net double property trace-back capability, you must first propagate the
property throughout the netlist by using the ndb_propagate_net_property() function. In
addition, you must use the device_paths and break_path_net_tags arguments that you
used in the ndb_propagate_net_property() function for the property you are tracing in
the ndb_report_instance() function associated with this call of
ndb_set_instance_report_info().
Syntax
ndb_set_instance_report_info(
comment = "string", # optional
report_property_origin = [
ndb_pin_property_pair(
pin_name = "string",
property_name = "string"
),
...] # optional
)
Returns
void
Arguments
comment
Optional. Specifies a string to be associated with a particular error cell instance. The
string is printed in the LAYOUT_ERRORS file and displayed with the error cell instance
in the IC Validator VUE tool.
This string provides instance-specific information about a particular error instance that
can help you to debug the error. The default is an empty string.
Note:
This comment replaces the comment specified by the comment argument in the
ndb_report_instance() function.
report_property_origin
Defines a list of starting points for tracing a net double property back to its origin and
makes this path information available in the IC Validator VUE tool. This argument
specifies a list of ndb_pin_property_pair() methods, each of which defines a starting
point.
The ndb_pin_property_pair() method returns the pin and property name data
structures used by the report_property_origin argument. Note that
ndb_pin_property_pair() is a part of the EERC hierarchical functions; it is not a utility
function.
Each ndb_pin_property_pair() method has the following arguments:
❍ pin_name Required. Specifies the name of the pin from which the trace-back
operation starts.
Note:
A pin is reported in the LAYOUT_ERRORS file if it is absent in the report_pins
list of the ndb_report_instance() function but is present in the
ndb_set_instance_report_info() function.
Examples
This example shows how to check all VDD pin nets of inverter cell instances for a
withstand_voltage property and, if the VDD pin has the property, report any cell instances
for which the withstand_voltage property is greater than 0.8.
# the settings for device_paths and break_path_net_tags are used for
# both `ndb_report_instance()` and `ndb_propagate_net_property()` for
# withstand voltage.
withstand_voltage_prop_paths = [
ndb_device_path(NMOS, "DRN", "SRC"),
ndb_device_path(PMOS, "DRN", "SRC")
]
def check_instance(instance):
rval = False
if pcode:
pnet = ndb_pin_net(ppin)
presult, pvolt = ndb_net_double_property(pnet,
"withstand_voltage")
ndb_report_instance(
netlist = nldb,
cell_names = ["*inv*"],
check_function = check_instance,
comment = "Error in instance for EOS",
report_pins = ["*", "!IN"],
device_paths = withstand_voltage_prop_paths,
break_path_net_tags = withstand_voltage_break_tags
)
ndb_set_instance_tag_by_hierarchical_name()
Applies the specified tag to one or more instances defined by ndb_hierarchical_name()
function calls. You can specify either the explicit instance name path to each cell instance or
a cell name and the instance path from the cell.
The ndb_hierarchical_name() method is used to specify the cell instance names. To
specify multiple cell instance names, use a list of ndb_hierarchical_name() methods.
Syntax
ndb_set_instance_tag_by_hierarchical_name(
netlist = ndb_netlist_t,
hierarchical_names = [
ndb_hierarchical_name(name = "string",
cell_name = "string" # optional
),
...],
tag = "string"
)
Returns
void
Example
In this example, the unchecked tag is applied to the I1/I24/I6 cell instance. The name is
referenced from the top block in the netlist, so the cell_name argument is not needed in the
ndb_hierarchical_name() function.
ndb_set_instance_tag_by_hierarchical_name(nldb,
hierarchical_names = [ndb_hierarchical_name("I1/I24/I6")],
tag = "unchecked"
)
ndb_set_net_report_info()
The ndb_set_net_report_info() function associates a comment with each net violation
that is printed in the LAYOUT_ERRORS file and is displayed with the net violation in the
IC Validator VUE tool. It can also be used to trace net double properties to their origins,
through device paths. The resulting path information is available for debugging purposes in
the IC Validator VUE tool. Use this function in a user-defined check_function called from
the ndb_report_net() function.
Syntax
ndb_set_net_report_info(
comment = "string", # optional
report_origin_property_names = ["string"] # optional
)
Returns
void
Arguments
comment
Optional. Specifies a string to be associated with a particular error net. The string is
printed in the LAYOUT_ERRORS file and displayed with the error net in the IC Validator
VUE tool.
This string provides instance-specific information about a particular error net that can be
helpful in debugging the error.
report_origin_property_names
Optional. Defines a list of net double property names associated with a net, to be traced
back to their origins. Any net double property specified in this argument is traced to its
origin using the device_paths and break_path_net_tags arguments specified in the
ndb_report_net() function associated with this function. The traceback information is
made available in the IC Validator VUE tool.
Examples
This example shows how to report any net that has a vmax net property with a value greater
than 3.4.
vmax_propagation_paths = [
ndb_device_path(MOSFET, "SRC", "DRN"),
ndb_device_path(RESISTOR, "A", "B"),
ndb_device_path(JUNCTION_DIODE, "ANODE", "CATHODE", one_way=True)
]
vmax_break_tags = ["power","ground"]
ndb_propagate_net_property(
netlist = nldb,
original_property_name = "max_voltage",
propagated_property_name = "vmax",
property_merge_operator = MAX
device_paths = vmax_propagation_paths,
break_path_net_tags = vmax_break_tags
)
def check_prop(net):
(rcode, vmax_val) = ndb_net_double_property(net, "vmax")
if rcode:
if vmax_val > 3.4:
ndb_set_net_report_info("vmax value %g > 3.4" %
vmax_val, report_origin_property_names = ["vmax"]
)
return True
return False
ndb_report_net(nldb,
device_paths = vmax_propagation_paths,
break_path_net_tags = vmax_break_tags,
check_function=check_prop
)
See Also
ndb_report_net()
ndb_set_net_tag_by_hierarchical_name()
Applies the specified tag to one or more nets defined by the ndb_hierarchical_name()
function. You can specify either the explicit instance name path to each net or a cell name
and the instance path from the cell.
The ndb_hierarchical_name() method is used to specify the net names. To specify
multiple net names, use a list of ndb_hierarchical_name() methods.
Syntax
ndb_set_net_tag_by_hierarchical_name(
netlist = ndb_netlist_t,
hierarchical_names = [
ndb_hierarchical_name(name = "string",
cell_name = "string" # optional
),
...],
tag = "string"
)
Returns
void
Example
This example shows how to apply the unchecked tag to the net named I1/I24/esd_net. The
name is referenced from the top block in the netlist, so the cell_name argument is not
needed in the ndb_hierarchical_name() function.
ndb_set_net_tag_by_hierarchical_name(nldb,
hierarchical_names = [ndb_hierarchical_name("I1/I24/esd_net")],
tag = "unchecked")
ndb_set_netlist_attribute()
Saves a list of strings and an associated name with the given netlist. You can use this
function to save any data that is common to an entire netlist. You can retrieve the data later
by using the ndb_get_netlist_attribute() function.
Note:
An attribute is a name-value pair with the value being a list of string. Multiple calls of the
ndb_set_netlist_attribute() utility function for the same attribute name append the
specified values to the list of strings.
Syntax
ndb_set_netlist_attribute(
netlist = ndb_netlist_t
attribute_name = "string",
attribute_value = ["string", ...]
)
Returns
void
Example
This example shows how to save the list of MOS models used for ESD protection as an
attribute.
See Also
ndb_get_netlist_attribute()
ndb_set_sum_values()
Specifies the list of values summed by the ndb_sum_device_values() function based on
device selection criteria that you specify with that function. You use the
ndb_set_sum_values() function in the user-defined function that you specify with the
check_function argument of the ndb_sum_device_values() function.
Note:
You can use the ndb_set_sum_values() function only once in the user-defined function
specified by the check_function argument.
Syntax
ndb_set_sum_values(
values = [double , ...]
)
Returns
void
Example
# Define a callback function that computes the total
# width and count of all devices
def check_sum_nmos(device):
(rval, width) = ndb_device_double_property(device, "W")
count = 1
ndb_set_sum_values([count, width])
See Also
ndb_sum_device_values()
ndb_set_top_cell_device_tag()
Applies a tag to a device in the top block of a netlist. This function is used primarily to set
device tags in a cache netlist.
Syntax
ndb_set_top_cell_device_tag(
device = ndb_device_t,
tag = "string"
)
Returns
void
Example
This example shows how to apply the primary_up tag to the given device.
ndb_set_top_cell_device_tag(my_dev, "primary_up")
ndb_set_top_cell_instance_tag()
Applies a tag to a cell instance in the top block of a netlist. This function is used primarily to
set cell instance tags in a cache netlist.
Syntax
ndb_set_top_cell_instance_tag(
instance = ndb_instance_t,
tag = "string"
)
Returns
void
Example
This example shows how to apply the skip_cell tag to the given instance.
ndb_set_top_cell_instance_tag(my_inst, "skip_cell")
ndb_set_top_cell_net_property()
Sets the specified property name and double value on the given net in the top block of a
netlist. Note that this function can only apply a new property; it cannot modify the value of an
existing property.
Syntax
ndb_set_top_cell_net_property(
net = ndb_net_t,
property_name = "string",
value = double
)
Returns
void
Example
In this example, the vmax property with the value 0.9V is saved on the VDD net in the top
block.
(rcode, vdd_net) = ndb_cell_net(top_cell, "VDD")
if rcode:
ndb_set_top_cell_net_property(vdd_net, "vmax", 0.9)
ndb_set_top_cell_net_tag()
Applies a tag to a net in the top block of a netlist. This function is used primarily to set net
tags in a cache netlist.
Syntax
ndb_set_top_cell_net_tag(
net = ndb_net_t,
tag = "string"
)
Returns
void
Example
In this example, the skip_net tag is applied to the given net.
ndb_set_top_cell_net_tag(my_net, "skip_net")
ndb_sum_device_values()
Selects a set of devices that meet the specified criteria, and returns a list of the summed
values of user-defined characteristics related to the selected devices. For selection criteria
that selects no devices, the function returns an empty list. This function is often required to
get a sum of the device characteristics for the selected devices, such as the total number of
devices in the set, and a summation of device properties or calculated values.
Device selection works on a fully hierarchical netlist by applying the specified selection
criteria to each device in the design as if the netlist were flat. The selection criteria include
• The device type and model name
Syntax
ndb_sum_device_values(
netlist = ndb_netlist_t,
check_function = function,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR |
GENERIC | MOSFET | JUNCTION_DIODE |
BIPOLAR_TRANSISTOR,
model_names = ["string", ...], # optional
tag_check = "string" # optional
)
Returns
list of double
Arguments
netlist
Required. Specifies the input netlist for device selection.
check_function
Required. Specifies the name of a user-defined Python function for device property or
calculated value summation. This function checks device properties and takes a single
argument of type ndb_device_t. It can call any EERC utility function that takes a device
object as an argument, and it uses an ndb_set_sum_values() function to specify the
device properties or calculated values that need to be summed. The
ndb_sum_device_values() calling function returns a list containing all of the summed
values.
device_type
Required. Specifies the device type of the devices to be checked. For information about
setting device types, see eerc_setup().
❍ Specifying MOSFET causes the tool to select devices associated with the NMOS,
PMOS or MOSFET device type.
❍ Specifying BIPOLAR_TRANSISTOR causes the tool to select devices associated with
the NPN, PNP or BIPOLAR_TRANSISTOR device type.
❍ Specifying JUNCTION_DIODE causes the tool to select devices associated with the
PN, NP or JUNCTION_DIODE device type.
model_names
Optional. Specifies a list of the device model names to be considered. You can use the *
and ! wildcard characters to specify device model names. Selected devices must have
one of these names. By default, devices are selected regardless of their model names.
For information about specifying model names for devices, see eerc_setup().
tag_check
Optional. Specifies a string expression to control device selection. The expression must
evaluate to True for a device to be selected.
The string expression uses previously applied tags to select devices. It can include the
!, || and && logic operators and can use ( and ) for grouping. The ! operator has the
highest precedence, after which the || and && operators are evaluated from left to right.
Examples
In this example, the IC Validator tool selects all of the NMOS devices for which the bulk pin
is not tied to ground and finds the average width and total length of all the selected devices.
This example also illustrates what happens if a property name in your runset does not match
the property name in the netlist. The width and length of a device are specified by properties
with the names “W” and “L” in the input netlist. However, the runset incorrectly specifies the
name of the length property (“length” instead of “L”). Because “length” is a nonexisting
device property, the returned value for total length is 0 (zero).
# Assume all ground nets have been tagged with "ground"
# Find NMOS devices for which the BULK terminal is not connected to
# ground
ndb_find_device(
netlist = nldb,
device_type = NMOS,
pins = [ndb_pin_check(["BULK"], tag_check = "!ground")],
add_tags = ["bad_nmos"]
)
# compute the average width and total length of all NMOS devices whose
# bulk pin is not tied to ground
computed_values = ndb_sum_device_values(
netlist = nldb,
check_function = check_sum_nmos,
device_type = NMOS,
tag_check = "bad_nmos"
)
if len(computed_values) > 0:
average_width = computed_values[1] / computed_values[0]
total_length = computed_values[2]
print("The average width is %f. Total length is %f" %
(average_width,total_length)
The following output is saved in the summary file. The total length is 0 (zero) because the
property named length does not exist for NMOS devices.
The average width is 0.100000. Total length is 0.000000
See Also
ndb_set_sum_values()
ndb_top_cell_device_tag()
Indicates whether the given device has the specified tag, and returns a Boolean indicating
whether the device in the top cell has the specified tag. This function works only for devices
that are in the top block of a netlist. It is used primarily to check devices in a cache netlist.
Syntax
ndb_top_cell_device_tag(
device = ndb_device_t,
tag = "string"
)
Returns
Boolean
Example
In this example, the IC Validator tool reports whether the given device has the esd_ggmos
tag.
dname = ndb_device_name(my_dev)
if ndb_top_cell_device_tag(my_dev, "esd_ggmos"):
print("device %s is an ESD protection device" % dname)
else:
print("device %s is NOT an ESD protection device" % dname)
ndb_top_cell_instance_tag()
Indicates whether the given cell instance has the specified tag, and returns a Boolean
indicating whether the device in the top cell has the specified tag. This function works only
for instances that are in the top block of a netlist. It is used primarily to check instances in a
cache netlist.
Syntax
ndb_top_cell_instance_tag(
instance = ndb_instance_t,
tag = "string"
)
Returns
Boolean
Example
In this example, the IC Validator tool reports whether the specified instance has the skip_cell
tag.
iname = ndb_instance_name(my_inst)
if ndb_top_cell_instance_tag(my_inst, "skip_cell"):
print("instance %s is marked to skip" % iname)
else:
print("instance %s should not be skipped" % iname)
ndb_top_cell_net_property()
Retrieves a double property stored on the given net in the top block of a netlist, if the
property exists, and returns a tuple that consists of a Boolean, indicating whether the
specified property was found, and the property value, if it was found.
Syntax
ndb_top_cell_net_property(
net = ndb_net_t,
property_name = "string"
)
Returns
(Boolean, double)
Example
In this example, the IC Validator tool prints the value of the vmax property if it finds the
property on the VDD net.
(rcode, vdd_net) = ndb_cell_net(top_cell, "VDD")
if rcode:
(pcode, vmax) = ndb_top_cell_net_property(vdd_net, "vmax")
if pcode:
print("VDD: vmax=%g" % vmax)
ndb_top_cell_net_tag()
Indicates whether the given net has the specified tag, and returns a Boolean indicating
whether the device in the top cell has the specified tag. This function works only for nets that
are in the top block of a netlist. It is used primarily to check nets in a cache netlist.
Syntax
ndb_top_cell_net_tag(
net = ndb_net_t,
tag = "string"
)
Returns
Boolean
Example
In this example, the IC Validator tool reports whether the given net has the good_net tag.
nname = ndb_net_name(my_net)
if ndb_top_cell_net_tag(my_net, "good_net"):
print("net %s is a good net" % nname)
else:
print("net %s is NOT a good net" % nname)
ndb_total_resistance()
Calculates the total effective resistance between two nets. This function calculates only the
resistance associated with devices of type RESISTOR, and it works only when all of the
resistors are in the same cell.
This function is used primarily in a cache netlist. It returns a tuple that consists of the
effective resistance value and a list of the resistor objects used to calculate that value.
Syntax
ndb_total_resistance(
cell = ndb_cell_t,
start_net = ndb_net_t,
end_net = ndb_net_t
)
Returns
(double, list of ndb_device_t)
Example
In this example, the IC Validator tool calculates the effective total resistance between the IO
pad net and the secondary ESD protection devices.
cache_cell = ndb_netlist_top_cell(ndb_cache_to_netlist(nldb))
(pad_code, pad_net) = ndb_cell_net(cache_cell, "IO")
(sec_code, sec_net) = ndb_cell_net(cache_cell, "secondary")
if pad_code and sec_code:
(rval, resistors) = ndb_total_resistance(cache_cell, pad_net, sec_net)
print("total resistance = %g" % rval)
See Also
ndb_netlist_top_cell()
ndb_cell_net()
This appendix explains some of the basics of using the IC Validator functions.
A-1
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
• Layer Ancestry
• Spacing Checks
Overview
All IC Validator specific variables, variable types, and functions are defined in the
IC Validator header files. These header files make up the IC Validator application
programming interface (API).
Note:
The API is distinctly separate from PXL, which is described in the PXL chapter of the
IC Validator User Guide.
The header files are located in $ICV_HOME_DIR/include/.
The icv.rh file must be included at the top of all runset files requiring IC Validator API
functions.
#include <icv.rh>
You can view the public headers, which are not encrypted. The encrypted headers contain
internal code implementations.
The IC Validator Reference Manual describes in detail the runset and utility functions
defined in public header files.
For more information about file inclusion, see the Preprocessor section in the PXL chapter
of the IC Validator User Guide.
not_external1_edge() Output edges of original polygons that are not coincident with the
edges from external1_edge()
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Overview A-3
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Constraints
Some numerical values in the functions can have one of several operators, rather than
simply equal, and can also have a range of values. These values are referred to as
constraints. Any limitations for the constraint of an argument are given with its description.
For example, not all arguments can take the != (not equal) operator.
A range of values can be defined:
• To indicate exclusive values, use parenthesis.
• To indicate inclusive values, use brackets.
Two constraint types are used by the functions. The constraint operators and expressions,
shown in the preceding table, can be used with these constraint types. For more information,
see the PXL chapter in the IC Validator User Guide.
• doubleconstraint: A double number with an exponent or a decimal point.
• integerconstraint: A decimal integer.
Connect Databases
• More than one connect database can be active at a time
• Connect databases are named
• Connect databases are passed by name to functions
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Connect Databases A-5
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
intersecting = { ACUTE }
);
Units of Measure
The unit of measure for distance and length is microns (m).
Results of Functions
The functions can return either a result that can be used in a subsequent function or output
for the viewer. In the description for each function, the output type is stated.
❍ System purposes:
NDM_SYSTEM_PURPOSE_DRAWING
NDM_SYSTEM_PURPOSE_SPECIAL_ROUTER_EXTENSION
NDM_SYSTEM_PURPOSE_METAL_CUT
NDM_SYSTEM_PURPOSE_DIELECTRIC_FILL
NDM_SYSTEM_PURPOSE_ACTIVE_FILL
The following NDM-specific example shows the reading of the cell boundary layer:
aBoundary = assign(
{ {NDM_SYSTEM_LAYER_BOUNDARY} }, ndm = { views = { \
DESIGN_VIEW } }
);
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Layout Layer and Datatype Ranges A-7
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Length of Strings
The IC Validator tool supports these character lengths:
• Text strings: 1023
• Instance names: 1023
Cell Names
For any argument that specifies a cell name, only these characters are valid:
! " # $ % & ' ( ) * + , - . 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z[ \ ] ^ _ `
a b c d e f g h i j k l m n o p q r s t u v w x y z{|}~
Net Names
The following characters are not allowed in net names: space, tab, and the reserved
characters:
= { } , * " : ;
Note:
Restrictions for other names, such as device names in the device configuration
functions, might be more restrictive.
Device Names
For device names specified in the device configuration functions, such as capacitor(), the
following rules apply.
• An alphabetic character must be the first character in the name.
• Spaces are not allowed.
• Only these characters are valid:
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Strings and Names A-9
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
The following definitions, however, would cause an error because there are no differences:
nmos (devMmatrix, device_name = "devA", drain = A, gate = B, source = C,
optional_pins = {device_layer = D, pin_name = "bulk"}});
nmos (devMmatrix, device_name = "devA", drain = A, gate = B, source = C,
optional_pins = {device_layer = D, pin_name = "bulk"}});
Text Strings
The following rules apply to text strings:
• The following characters are not allowed in a layout text string. These characters cause
a bad_text_reserved_character error in the cell.LAYOUT_ERRORS file:
= { } , * "
• Text strings containing only numeric characters cause a bad_text_all_digits error in the
cell.LAYOUT_ERRORS file. For example, "123AB" is a legal text string, but "123" is
reported as an error.
Note:
Set the allow_all_numeric argument of the text_options() function to true to
allow the use of all numeric text.
The text_net() function continues to ignore all numeric text. This behavior prevents
collisions between user-defined text and auto generated net numbers.
• A space, tab, or one of the following reserved characters in a layout text string causes
the string to be truncated at the position of the character.
: ;
String Matching
Function arguments that are strings which specify text or cell names can use the
metacharacters listed in Table A-4 for string matching. The IC Validator Reference Manual
indicates the strings where matching with metacharacters is allowed; otherwise, the
metacharacters are treated as regular text.
Note:
These metacharacters can be escaped by preceding them with double backslash (\\) or
placing them in brackets.
Table A-4 Metacharacters
Metacharacter Description
[^ ] Matches any single character that is not contained within the brackets. For
example, [^a-z] matches any character that is not a lowercase letter.
! When it is the first character of a string, the exclamation point (!) specifies a
pattern (minus the !) that is not matched.
For example, {"*", "!PROG"} matches every string except PROG. That is,
to match, a string must match at least one of the strings that do not start
with ! but must not match any of the strings that do start with !.
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Function Order in Runsets A-11
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
In each function description in the reference manual, the “Function Group” section specifies
to which of these three runset sections the function is assigned. If a runset section is not
specified, the function can be called from any section. Within each section, you can call
functions in any order.
Note:
There cannot be any runtime conditional code in the OPTIONS and ASSIGN sections.
Layer Ancestry
Layer ancestry is the concept of maintaining a relationship between derived edge layers and
their original polygon layers. This behavior is used to determine polygon membership for
edges.
Polygon Operations
A polygon operation is any function that returns a polygon layer. Every polygon operation is
either a creator or a selector. The process in which this layer is derived is either:
• Creating new data or breaking of polygons.
• Selecting existing, complete polygons from a given polygon layer.
center_to_center1() center_to_center2()
pull_down() pull_down_to()
wide()
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Layer Ancestry A-13
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
touching() vertices()
xor()
For example, the or() function is commonly thought of as a creator function because it can
clearly create new data. However, the or() function can also be a selector function.
Consider the following code:
small = area(met1, <2);
large = area(met1, >5);
both = small or large;
The small, large, and both results have met1 for their ancestor; each one is a topological
subset of met1. In this context, the or() function is a selector. The context is determined by
the layer ancestry of the two input layers; if the layers have the same ancestor, then the
result also has the same ancestor.
Edge Operations
An edge operation is any function that returns an edge layer. Every edge operation is either
a creator or a selector. The process in which this layer is derived is either:
• Creating new edge data.
• Selecting of existing edges from a given polygon layer.
assign_edge() assign_openaccess_edge()
center_to_center1_edge() center_to_center2_edge()
copy_edge() edge_features_edge()
edges() enclose_corner_edge(output_type=POINT
_TO_POINT)
extend_edge() external1_corner_edge(output_type=POI
NT_TO_POINT)
external2_corner_edge(output_type=POI internal1_corner_edge(output_type=POI
NT_TO_POINT) NT_TO_POINT)
internal2_corner_edge(output_type=POI move_edge()
NT_TO_POINT)
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Layer Ancestry A-15
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
pull_down_edge() pull_down_to_edge()
read_group_edge()
adjacent_edge() and_edge()
angle_edge() coincident_edge()
coincident_inside_edge() coincident_outside_edge()
data_limit_edge() delta_edge()
enclose_corner_edge enclose_edge()
(output_type=FAIL)
external_corner1_edge external_corner2_edge
(output_type=FAIL) (output_type=FAIL)
external1_edge() external2_edge()
inside_touching_edge() interacting_edge()
internal_corner1_edge internal_corner2_edge
(output_type=FAIL) (output_type=FAIL)
internal1_edge() internal2_edge()
length_edge() level_edge()
level_to_edge() not_adjacent_edge()
not_angle_edge() not_coincident_edge()
not_coincident_inside_edge() not_coincident_outside_edge()
not_delta_edge() not_enclose_edge()
not_external1_edge() not_external2_edge()
not_inside_touching_edge() not_interacting_edge()
not_internal1_edge() not_internal2_edge()
not_length_edge() not_outside_touching_edge()
not_touching_edge() not_vertices_edge()
outside_touching_edge() touching_edge()
vertex_edge() vertices_edge()
wide_edge()
or_edge() xor_edge()
For example, the or_edge() function is commonly thought of as a creator function because
it can clearly create new edges. However, the or_edge() function can also be a selector
function.
Consider the following code:
short = length_edge(met1, <2);
long = length_edge(met1, >5);
both = short or_edge long;
The short, long, and both results all have met1 for their ancestor; every edge in each of the
three layers is also an edge in met1. In this context, the or_edge() function is a selector.
The context is determined by the layer ancestry of the two input layers; if the layers have the
same ancestor, then the result also has the same ancestor.
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Layer Ancestry A-17
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
For these operations, polygon membership is determined by layer ancestry. If the edge layer
has an ancestor, polygon membership for the edges is defined by the polygons from which
they were selected, in the ancestor layer. Disjoint edges can be on the same polygon.
If the edge layer has no ancestor, polygon membership is defined solely by interaction.
Edges that interact in any way are considered to be on the same polygon. Disjoint edges are
not on the same polygon.
The copy() and copy_edge() functions are creator functions that copy the geometric data
from a layer into a new layer that has no ancestry and no connectivity. That is, these
functions are layer operations that create new layers, and the results have no ancestry, and
therefore, no polygon membership information. You should only use the copy functions
when you want to remove ancestry and connectivity.
Alternately, the variable assignment operator, =, is not a layer operator. It does not create a
new layer; it only defines a layer variable. It copies the content of a layer variable into
another layer variable. Both variables have the same ancestry and connectivity.
See the Examples section of the copy() function for more information.
Spacing Checks
This section describes the fundamentals of the edge-based spacing checks in IC Validator.
Table A-11 lists the edge-based spacing check functions.
Table A-11 Edge-Based Spacing Check Functions
not_internal2_edge()
Inside and outside are defined in the context of the active area of a given polygon, or in the
case of edges, the polygon from which they were derived.
Note:
The side of a given edge that is appropriate for the given spacing check is called the
check side. For external spacing checks, the check side is the outside. For internal
spacing checks, the check side is the inside. For enclosure spacing checks, the check
side of layer1 is the outside, and the check side of layer2 is the inside.
All figures and descriptions in this section are in the context of check side. Therefore,
they are applicable to all three types of spacing checks.
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Spacing Checks A-19
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Figure A-2 shows the extension check from the endpoints of the edges to the 45-degree
edge. Again, there is no violation for a distance specification of < 4.243.
Edge Filters
The edge-based spacing checks have an extensive set of edge filters that are used to
control which edge or edge pairs are measured. See the descriptions of the specific
functions for details of the edge filters. The fundamentals listed here are applied in addition
to the specified edge filters.
Opposition
For two given edges to be measured, they must oppose each other. The rule for opposition
is
Each edge must have some portion that falls inside the half-plane. (The half-plane
consists of all points on the check side of the other edge.)
Figure A-3 shows edge A from x to y, with the check side. The dashed line indicates that
edge A is extended infinitely, and the half-plane is in gray.
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Spacing Checks A-21
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Figure A-4 shows candidate edges A and B with their check sides shown with gray arrows.
These edges are opposing and, therefore, they are measured.
Figure A-4 Completely Opposing Check Sides
Figure A-5 shows examples of candidate edges C and D that are not opposing and,
therefore, they are not measured.
Figure A-5 Nonopposing Edges
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Spacing Checks A-23
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
NONE
When the extension is NONE, the check region is not extended. It is formed with right-angle
boundaries at the edge endpoints. The right-angle boundaries of the check region are
exclusive. The far boundary of the check region is inclusive or exclusive depending on the
constraint of the distance value.
Figure A-6 Extension Set to NONE
NONE_INCLUSIVE
The extension NONE_INCLUSIVE is the same as NONE, but the right-angle boundaries of the
check region are always inclusive, regardless of the specified distance constraint. The far
boundary of the check region is inclusive or exclusive depending on the constraint of the
distance value. When the projection argument includes the ON setting, the
NONE_INCLUSIVE setting produces point-to-point violations whose edges have no length,
regardless of the constraint of the distance value.
Figure A-7 Extension Set to NONE_INCLUSIVE
The formatting of the errors is described in the following Output Format section.
RADIAL
When the extension is RADIAL, the check region is extended past the endpoints of the edge
using the distance value with a radial curve. The boundary of the check region is inclusive
or exclusive depending on the constraint of the distance value.
Figure A-8 Extension Set to RADIAL
SQUARE
When the extension is SQUARE, the check region is extended past the endpoints of the edge
using the distance value with a square. The boundary of the check region is inclusive or
exclusive depending on the constraint of the distance value.
Figure A-9 Extension Set to SQUARE
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Spacing Checks A-25
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
RECTANGLE
The extension RECTANGLE is similar to the SQUARE setting except that the check region is
extended past the endpoints of the edge using the extension_distance argument value
with a rectangle. The boundary of the check region is inclusive or exclusive depending on
the constraint of the distance value.
This setting is useful only when the extension_distance argument value is nonzero.
When extension_distance = 0, RECTANGLE is the same as NONE. When
extension_distance = distance, RECTANGLE is the same as SQUARE.
EDGE
When the extension is EDGE, the check region is formed by first extending the edge using the
extension_distance argument, and then creating right-angle boundaries at the extended
endpoints based on the distance constraint. The right-angle boundaries of the check region
are exclusive. The far boundary of the check region is inclusive or exclusive depending on
the constraint of the distance.
This setting is useful only when the extension_distance argument value is nonzero.
Note:
The difference between RECTANGLE and EDGE is subtle, and is only meaningful when the
minimum of the distance constraint is nonzero. In Figure A-11, distance = [x,y] and
extension_distance = w; the check regions are shaded with gray.
EDGE
When you use the == operator or an expression in the form [x,x], no special consideration
is made for violations that have no length. Violations that consist of a single point are not
reported. This behavior occurs in nonparallel violations or nonprojecting violations and is
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Spacing Checks A-27
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
regardless if the edge being measured crosses the check region or has an endpoint that lies
on the boundary of the check region.
For example, Figure A-13 shows edges and the check region when extension = RADIAL.
None of these cases generate errors from edge A to edge B when the distance is specified
as ==x or [x,x].
Figure A-13 Distance Specified as ==x or [x,x]
Output Format
Note:
This section does not apply to these edge-based spacing check functions:
covered_by(), enclose_error(), external1_error(), external2_error(),
internal1_error(), internal2_error(), and not_covered_by().
For every edge pair, there are two independent check regions. This situation is most
meaningful for the case of nonparallel edges. First, consider the case of no extension
region, as when using the NONE or NONE_INCLUSIVE option. Figure A-14 shows two cases
with no extension region.
Figure A-14 No Extension Region
Errors are formed by perpendicular projections, from the edge forming the check region to
the portion of the other edge that falls in the check region. As shown in Figure A-15, derived
edges are selected from the source and destination of the projections.
Figure A-15 Derived Edges
Error shapes are created by connecting the endpoints of the error edges, as shown in red in
Figure A-16.
Note:
The overlap of the nonparallel error shapes shown in Figure A-16 is only for
visualization. All derived polygons are merged on output.
Figure A-16 Endpoint and Perpendicular Projection Errors
Other extension settings, such as RADIAL, SQUARE, and RECTANGLE, add extension, or
endpoint errors, that emanates from the endpoints of the edges and terminate at the portion
of the destination edge that falls in the check region.
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Spacing Checks A-29
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Figure A-19 shows errors that are created with a combination of the endpoint errors and the
perpendicular projection errors.
Figure A-19 Derived Polygon Output
Point-to-Point Errors
As mentioned previously in the “NONE_INCLUSIVE” section, specifying the extension as
NONE_INCLUSIVE causes point-to-point violations that require special care when formatting
for output.
Figure A-20 Point-to-Point Violations
The portion of the edge that falls in the check region has no length and, therefore, it cannot
be represented in the output layer. The polygon formed by edges with no length also has no
area and, therefore, it cannot be represented in the output layer.
To compensate for edge output, the edges created have a length equal to the internal
resolution. The internal_resolution argument of the resolution_options() function
sets the internal resolution.
To compensate for polygon output, the point-to-point errors are reported as rectangles by
expanding the line connecting the two points by the width value on both sides.
AppendixA:A:Runset
Chapter RunsetBasics
Basics
Spacing Checks A-31
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
This appendix provides you with the basic information about the commands and options to
migrate a Hercules runset to an IC Validator runset.
B-1
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Dimensional Functions
The following tables show the IC Validator function equivalents for Hercules dimensional
commands. In the tables,
• (default) indicates the default behavior of an option. In some cases, the default behavior
of an option in Hercules is different from its default behavior in an IC Validator runset.
• #NA# indicates that the Hercules option behavior is not applicable to the IC Validator
tool.
• If multiple Hercules options are mapped to the same IC Validator argument, in the
IC Validator tool the options must be combined.
For example,
relational = {INSIDE}, relational = {OUTSIDE}
needs to be combined:
relational = {INSIDE, OUTSIDE}
• If a Hercules option is coded using a single IC Validator function, then that function is
mentioned.
Note:
Not all arguments of IC Validator functions have corresponding Hercules options.
The tables are for the following IC Validator functions:
• enclose(): Table B-1
Table B-1 compares the Hercules commands and equivalent IC Validator enclose()
function.
Table B-1 Hercules Commands and Equivalent IC Validator enclose() Function
AppendixB:B:Hercules™
Chapter Hercules™Runset
RunsettotoICICValidator
ValidatorRunset
RunsetMigration
Migration
Dimensional Functions B-3
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Table B-1 Hercules Commands and Equivalent IC Validator enclose() Function (Continued)
FLAG_NOTCH_ACUTE #NA#
CONCAVE_TO_CONVEX #NA#
CONCAVE_TO_EDGE #NA#
CONCAVE_TO_EDGE #NA#
[INSIDE_CORNER_TO_OUTSIDE_EDGE]
CONCAVE_TO_EDGE #NA#
[OUTSIDE_CORNER_TO_INSIDE_EDGE]
CONVEX_TO_CONVEX #NA#
CONVEX_TO_CONVEX[POINT_PROJECTION] #NA#
CONVEX_TO_CONVEX_FILTER #NA#
CONVEX_TO_EDGE #NA#
CONVEX_TO_EDGE[ #NA#
INSIDE_CORNER_TO_OUTSIDE_EDGE]
Table B-1 Hercules Commands and Equivalent IC Validator enclose() Function (Continued)
CONVEX_TO_EDGE[ #NA#
OUTSIDE_CORNER_TO_INSIDE_EDGE]
CONVEX_TO_EDGE_FILTER #NA#
FILTER_VECTOR #NA#
FLAG_ON_CORNER_PROJECTION_BOUNDARY #NA#
LONGEDGE[LONGEDGE_TO_EDGE] projection_length
NO_CUT #NA#
AppendixB:B:Hercules™
Chapter Hercules™Runset
RunsettotoICICValidator
ValidatorRunset
RunsetMigration
Migration
Dimensional Functions B-5
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Table B-1 Hercules Commands and Equivalent IC Validator enclose() Function (Continued)
INSIDE_EDGE( #NA#
FLAG_INSIDE_PNT_TOUCH = TRUE)
FLAG_OUTSIDE_EDGE_TOUCH #NA#
FLAG_OUTSIDE_PNT_TOUCH #NA#
DIMENSION #NA#
SEGMENT #NA#
SEGMENT[ANGLE_OPTION] #NA#
SEGMENT_RANGE #NA#
TOUCH_FILTER #NA#
FLAG_NOTCH_ACUTE #NA#
AppendixB:B:Hercules™
Chapter Hercules™Runset
RunsettotoICICValidator
ValidatorRunset
RunsetMigration
Migration
Dimensional Functions B-7
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
CONVEX_TO_CONVEX_FILTER enclose_corner_edge(...,
type = {CONVEX_TO_CONCAVE},
output_type = POINT_TO_POINT)
& length_edge(...)
FILTER_VECTOR enclose_corner_edge(...,
output_type = POINT_TO_POINT)
& length_edge(...)
LONGEDGE[LONGEDGE_TO_EDGE] #NA#
EDGE_45 #NA#
NO_CUT #NA#
AppendixB:B:Hercules™
Chapter Hercules™Runset
RunsettotoICICValidator
ValidatorRunset
RunsetMigration
Migration
Dimensional Functions B-9
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
INSIDE_EDGE( #NA#
FLAG_INSIDE_PNT_TOUCH = TRUE)
FLAG_OUTSIDE_EDGE_TOUCH #NA#
FLAG_OUTSIDE_PNT_TOUCH #NA#
DIMENSION #NA#
SEGMENT #NA#
SEGMENT[ANGLE_OPTION] #NA#
SEGMENT_RANGE #NA#
Table B-3 compares the Hercules commands and equivalent IC Validator external1()
function.
Table B-3 Hercules Commands and Equivalent IC Validator external1() Function
Table B-3 Hercules Commands and Equivalent IC Validator external1() Function (Continued)
TOUCH_FILTER #NA#
AppendixB:B:Hercules™
Chapter Hercules™Runset
RunsettotoICICValidator
ValidatorRunset
RunsetMigration
Migration
Dimensional Functions B-11
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Table B-3 Hercules Commands and Equivalent IC Validator external1() Function (Continued)
CONCAVE_TO_CONVEX #NA#
CONCAVE_TO_EDGE #NA#
CONCAVE_TO_EDGE #NA#
[INSIDE_CORNER_TO_OUTSIDE_EDGE]
CONCAVE_TO_EDGE #NA#
[OUTSIDE_CORNER_TO_INSIDE_EDGE]
CONVEX_TO_CONVEX #NA#
CONVEX_TO_CONVEX[POINT_PROJECTION] #NA#
CONVEX_TO_CONVEX_FILTER #NA#
CONVEX_TO_EDGE #NA#
CONVEX_TO_EDGE[ #NA#
INSIDE_CORNER_TO_OUTSIDE_EDGE]
CONVEX_TO_EDGE[ #NA#
OUTSIDE_CORNER_TO_INSIDE_EDGE]
CONVEX_TO_EDGE_FILTER #NA#
FILTER_VECTOR #NA#
FLAG_ON_CORNER_PROJECTION_BOUNDARY #NA#
LONGEDGE[LONGEDGE_TO_EDGE] projection_length
NO_CUT #NA#
Table B-3 Hercules Commands and Equivalent IC Validator external1() Function (Continued)
INSIDE_EDGE( #NA#
FLAG_INSIDE_PNT_TOUCH = TRUE)
FLAG_OUTSIDE_EDGE_TOUCH #NA#
AppendixB:B:Hercules™
Chapter Hercules™Runset
RunsettotoICICValidator
ValidatorRunset
RunsetMigration
Migration
Dimensional Functions B-13
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Table B-3 Hercules Commands and Equivalent IC Validator external1() Function (Continued)
FLAG_OUTSIDE_PNT_TOUCH #NA#
DIMENSION #NA#
SEGMENT #NA#
SEGMENT[ANGLE_OPTION] #NA#
SEGMENT_RANGE #NA#
TOUCH_FILTER #NA#
FLAG_NOTCH_ACUTE #NA#
CONCAVE_TO_EDGE #NA#
CONCAVE_TO_EDGE #NA#
[INSIDE_CORNER_TO_OUTSIDE_EDGE]
CONCAVE_TO_EDGE #NA#
[OUTSIDE_CORNER_TO_INSIDE_EDGE]
AppendixB:B:Hercules™
Chapter Hercules™Runset
RunsettotoICICValidator
ValidatorRunset
RunsetMigration
Migration
Dimensional Functions B-15
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
CONVEX_TO_CONVEX_FILTER external_corner1_edge(...,
type = {CONVEX_TO_CONVEX},
output_type = POINT_TO_POINT)
& length_edge(...)
CONVEX_TO_EDGE[ #NA#
INSIDE_CORNER_TO_OUTSIDE_EDGE]
CONVEX_TO_EDGE[ #NA#
OUTSIDE_CORNER_TO_INSIDE_EDGE]
CONVEX_TO_EDGE_FILTER external_corner1_edge(...,
type = {CONVEX_TO_EDGE},
output_type = POINT_TO_POINT)
& length_edge(...)
FILTER_VECTOR external_corner1_edge(...,
output_type = POINT_TO_POINT)
& length_edge(...)
LONGEDGE[LONGEDGE_TO_EDGE] #NA#
EDGE_45 #NA#
NO_CUT #NA#
INSIDE_EDGE( #NA#
FLAG_INSIDE_PNT_TOUCH = TRUE)
FLAG_OUTSIDE_EDGE_TOUCH #NA#
FLAG_OUTSIDE_PNT_TOUCH #NA#
DIMENSION #NA#
SEGMENT #NA#
AppendixB:B:Hercules™
Chapter Hercules™Runset
RunsettotoICICValidator
ValidatorRunset
RunsetMigration
Migration
Dimensional Functions B-17
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
SEGMENT[ANGLE_OPTION] #NA#
SEGMENT_RANGE #NA#
Table B-5 compares the Hercules commands and equivalent IC Validator internal1()
function.
Table B-5 Hercules Commands and Equivalent IC Validator internal1() Function
TOUCH_FILTER #NA#
Table B-5 Hercules Commands and Equivalent IC Validator internal1() Function (Continued)
FLAG_NOTCH_ACUTE #NA#
CONCAVE_TO_CONVEX #NA#
CONCAVE_TO_EDGE #NA#
CONCAVE_TO_EDGE #NA#
[INSIDE_CORNER_TO_OUTSIDE_EDGE]
CONCAVE_TO_EDGE #NA#
[OUTSIDE_CORNER_TO_INSIDE_EDGE]
CONVEX_TO_CONVEX #NA#
CONVEX_TO_CONVEX[POINT_PROJECTION] #NA#
AppendixB:B:Hercules™
Chapter Hercules™Runset
RunsettotoICICValidator
ValidatorRunset
RunsetMigration
Migration
Dimensional Functions B-19
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
Table B-5 Hercules Commands and Equivalent IC Validator internal1() Function (Continued)
CONVEX_TO_CONVEX_FILTER #NA#
CONVEX_TO_EDGE #NA#
CONVEX_TO_EDGE[ #NA#
INSIDE_CORNER_TO_OUTSIDE_EDGE]
CONVEX_TO_EDGE[ #NA#
OUTSIDE_CORNER_TO_INSIDE_EDGE]
CONVEX_TO_EDGE_FILTER #NA#
FILTER_VECTOR #NA#
FLAG_ON_CORNER_PROJECTION_BOUNDARY #NA#
LONGEDGE[LONGEDGE_TO_EDGE] projection_length
NO_CUT #NA#
Table B-5 Hercules Commands and Equivalent IC Validator internal1() Function (Continued)
INSIDE_EDGE( #NA#
FLAG_INSIDE_PNT_TOUCH = TRUE)
FLAG_OUTSIDE_EDGE_TOUCH #NA#
FLAG_OUTSIDE_PNT_TOUCH #NA#
DIMENSION not_rectangles(...)
SEGMENT length_edge(...)
SEGMENT_RANGE length_edge(...)
AppendixB:B:Hercules™
Chapter Hercules™Runset
RunsettotoICICValidator
ValidatorRunset
RunsetMigration
Migration
Dimensional Functions B-21
IC
IC Validator
Validator Reference
Reference Manual
Manual N-2017.12-SP2
Version N-2017.12-SP2
TOUCH_FILTER #NA#
FLAG_NOTCH_ACUTE #NA#
CONCAVE_TO_EDGE #NA#
CONCAVE_TO_EDGE #NA#
[INSIDE_CORNER_TO_OUTSIDE_EDGE]
CONCAVE_TO_EDGE #NA#
[OUTSIDE_CORNER_TO_INSIDE_EDGE]
CONVEX_TO_CONVEX_FILTER internal_corner1_edge(...,
type= {CONCAVE_TO_CONCAVE},
output_type = POINT_TO_POINT)
& length_edge(...)
CONVEX_TO_EDGE[ #NA#
INSIDE_COR