From 60bd7f64488edd38422b8b17d88bee2e3ed0e187 Mon Sep 17 00:00:00 2001 From: Phillip Ferreira Baade-Pedersen Date: Thu, 15 May 2025 11:23:14 +0200 Subject: [PATCH] create intermediate folder --- intermediate/klayoutrc/klayoutrc | 1049 ++++++++++++++++++++++++++++++ intermediate/xschemrc/xschemrc | 827 +++++++++++++++++++++++ 2 files changed, 1876 insertions(+) create mode 100644 intermediate/klayoutrc/klayoutrc create mode 100644 intermediate/xschemrc/xschemrc diff --git a/intermediate/klayoutrc/klayoutrc b/intermediate/klayoutrc/klayoutrc new file mode 100644 index 00000000..286b684e --- /dev/null +++ b/intermediate/klayoutrc/klayoutrc @@ -0,0 +1,1049 @@ + + + false + false + 10 + false + true + + auto + true + 1 + by-name + auto + 50 + false + false + + any-top + 1000 + 1 + fit-marker + + 32 + false + 255,157,157[0] 255,128,168[1] 192,128,255[2] 149,128,255[3] 128,134,255[4] 128,168,255[5] 255,0,0[6] 255,0,128[7] 255,0,255[8] 128,0,255[9] 0,0,255[10] 0,128,255[11] 128,0,0[12] 128,0,87[13] 128,0,128[14] 80,0,128[15] 0,0,128[16] 0,64,128[17] 128,255,251[18] 128,255,141[19] 175,255,128[20] 243,255,128[21] 255,194,128[22] 255,160,128[23] 0,255,255[24] 1,255,107[25] 145,255,0[26] 221,255,0[27] 255,174,0[28] 255,128,0[29] 0,128,128[30] 0,128,80[31] 0,128,0[32] 80,128,0[33] 128,128,0[34] 128,80,0[35] 255,255,255 192,192,192 128,128,128 96,96,96 64,64,64 0,0,0 + add + auto + 50 + false + -1 + auto + false + 0 + + 0 + + false + + false + 0 + 0.01,0.005,0.001 + + 0.1 + false + false + false + false + false + 2 + 5 + false + 1 + false + 0 + 10 + any + + -1 + 0 + false + + 0.0 + 0.0 + 1 + false + + false + 0.0 + 0.0 + 1 + 1.0 + 1000 + true + any + flush + 0.0 + 0.0 + 0.1 + -1 + false + '5/0', + true + true + false + left + 0 + ABC + bottom + true + true + false + true + r0 *1 0,0 + auto + auto + auto + 0.005 + auto + true + invisible + dots + tenths-dotted-lines + true + auto + 1 + 5 + true + true + false + 1 + true + 1 + sg13g2 + auto + 0 + true + true + 0 + +zoom_menu.zoom_fit:F; +edit_menu.mode_menu.move:M; +'@lcp_context_menu.show_only':'Shift+Tab'; +'@lcp_context_menu.show_all':Tab; +'@lcp_context_menu.hide_empty_layers':H; +edit_menu.mode_menu.box:W; +edit_menu.mode_menu.partial:P; +edit_menu.mode_menu.ruler:K; +'@secrets.select_next_item':''; +'@secrets.select_next_item_add':''; +edit_menu.cancel:''; +edit_menu.clear_all_rulers:''; +edit_menu.copy:''; +edit_menu.cut:''; +edit_menu.delete:''; +edit_menu.duplicate:''; +edit_menu.edit_options:''; +edit_menu.paste:''; +edit_menu.redo:''; +edit_menu.selection_menu.tap:''; +edit_menu.show_properties:''; +edit_menu.undo:''; +file_menu.close:''; +file_menu.close_all:''; +file_menu.exit:''; +file_menu.open_new_panel:''; +file_menu.open_same_panel:''; +file_menu.print:''; +file_menu.reload:''; +file_menu.screenshot:''; +macros_menu.macro_development:''; +zoom_menu.ascend:''; +zoom_menu.dec_max_hier:''; +zoom_menu.descend:''; +zoom_menu.descend_into:''; +zoom_menu.goto_position:''; +zoom_menu.inc_max_hier:''; +zoom_menu.max_hier:''; +zoom_menu.max_hier_0:''; +zoom_menu.max_hier_1:''; +zoom_menu.select_current_cell:''; +zoom_menu.zoom_fit_sel:''; +zoom_menu.zoom_in:''; +zoom_menu.zoom_out:''; +'@@navigator_menu.navigator_main_menu.navigator_all_hier_levels':''; +'@@navigator_menu.navigator_main_menu.navigator_freeze':''; +'@@navigator_menu.navigator_main_menu.navigator_show_images':''; +'@bookmarks_context_menu.follow_selection':''; +'@bookmarks_context_menu.load_bookmarks':''; +'@bookmarks_context_menu.manage_bookmarks':''; +'@bookmarks_context_menu.save_bookmarks':''; +'@hcp_context_menu.cell_user_properties':''; +'@hcp_context_menu.copy':''; +'@hcp_context_menu.cut':''; +'@hcp_context_menu.delete_cell':''; +'@hcp_context_menu.flat_mode':''; +'@hcp_context_menu.flatten_cell':''; +'@hcp_context_menu.hide_cell':''; +'@hcp_context_menu.new_cell':''; +'@hcp_context_menu.open_current':''; +'@hcp_context_menu.paste':''; +'@hcp_context_menu.rename_cell':''; +'@hcp_context_menu.replace_cell':''; +'@hcp_context_menu.save_cell_as':''; +'@hcp_context_menu.show_all':''; +'@hcp_context_menu.show_as_top':''; +'@hcp_context_menu.show_cell':''; +'@hcp_context_menu.sorting.by_area':''; +'@hcp_context_menu.sorting.by_area_reverse':''; +'@hcp_context_menu.sorting.by_name':''; +'@hcp_context_menu.split_mode':''; +'@lcp_context_menu.add_others':''; +'@lcp_context_menu.clean_up':''; +'@lcp_context_menu.copy':''; +'@lcp_context_menu.cut':''; +'@lcp_context_menu.del':''; +'@lcp_context_menu.group':''; +'@lcp_context_menu.hide':''; +'@lcp_context_menu.hide_all':''; +'@lcp_context_menu.insert':''; +'@lcp_context_menu.invert_selection':''; +'@lcp_context_menu.invvalid':''; +'@lcp_context_menu.paste':''; +'@lcp_context_menu.regroup_menu.flatten':''; +'@lcp_context_menu.regroup_menu.grp_d':''; +'@lcp_context_menu.regroup_menu.grp_i':''; +'@lcp_context_menu.regroup_menu.grp_l':''; +'@lcp_context_menu.rename':''; +'@lcp_context_menu.select_all':''; +'@lcp_context_menu.select_source':''; +'@lcp_context_menu.show':''; +'@lcp_context_menu.sort_menu.sort_dli':''; +'@lcp_context_menu.sort_menu.sort_idl':''; +'@lcp_context_menu.sort_menu.sort_ild':''; +'@lcp_context_menu.sort_menu.sort_ldi':''; +'@lcp_context_menu.sort_menu.sort_name':''; +'@lcp_context_menu.tab_menu.new_tab':''; +'@lcp_context_menu.tab_menu.remove_tab':''; +'@lcp_context_menu.tab_menu.rename_tab':''; +'@lcp_context_menu.test_shapes_in_view':''; +'@lcp_context_menu.toggle_visibility':''; +'@lcp_context_menu.ungroup':''; +'@lcp_context_menu.valid':''; +'@lcp_context_menu.visibility_follows_selection':''; +'@lcp_tabs_context_menu.new_tab':''; +'@lcp_tabs_context_menu.remove_tab':''; +'@lcp_tabs_context_menu.rename_tab':''; +'@secrets.duplicate_interactive':''; +'@secrets.paste_interactive':''; +'@secrets.sel_move_interactive':''; +'@toolbar.combine_mode':''; +'@toolbar.next_display_state':''; +'@toolbar.prev_display_state':''; +'@toolbar.technology_selector':''; +bookmark_menu:''; +bookmark_menu.bookmark_view:''; +bookmark_menu.goto_bookmark_menu:''; +bookmark_menu.load_bookmarks:''; +bookmark_menu.manage_bookmarks:''; +bookmark_menu.open_recent_menu_bookmarks:''; +bookmark_menu.save_bookmarks:''; +edit_menu:''; +edit_menu.add_image:''; +edit_menu.cell_menu:''; +edit_menu.cell_menu.adjust_cell_origin:''; +edit_menu.cell_menu.convert_cell_to_static:''; +edit_menu.cell_menu.delete_cell:''; +edit_menu.cell_menu.flatten_cell:''; +edit_menu.cell_menu.new_cell:''; +edit_menu.cell_menu.rename_cell:''; +edit_menu.cell_menu.replace_cell:''; +edit_menu.cell_menu.user_properties:''; +edit_menu.configure_rulers:''; +edit_menu.image_menu:''; +edit_menu.image_menu.bring_to_back:''; +edit_menu.image_menu.bring_to_front:''; +edit_menu.image_menu.clear_all_images:''; +edit_menu.layer_menu:''; +edit_menu.layer_menu.boolean:''; +edit_menu.layer_menu.clear_layer:''; +edit_menu.layer_menu.copy_layer:''; +edit_menu.layer_menu.delete_layer:''; +edit_menu.layer_menu.edit_layer:''; +edit_menu.layer_menu.merge:''; +edit_menu.layer_menu.new_layer:''; +edit_menu.layer_menu.size:''; +edit_menu.layout_menu:''; +edit_menu.layout_menu.lay_convert_to_static:''; +edit_menu.layout_menu.lay_flip_x:''; +edit_menu.layout_menu.lay_flip_y:''; +edit_menu.layout_menu.lay_free_rot:''; +edit_menu.layout_menu.lay_move:''; +edit_menu.layout_menu.lay_rot_ccw:''; +edit_menu.layout_menu.lay_rot_cw:''; +edit_menu.layout_menu.lay_scale:''; +edit_menu.mode_menu:''; +edit_menu.mode_menu.instance:''; +edit_menu.mode_menu.path:''; +edit_menu.mode_menu.polygon:''; +edit_menu.mode_menu.select:''; +edit_menu.mode_menu.text:''; +edit_menu.redo_list:''; +edit_menu.search_replace_editor:''; +edit_menu.select_menu:''; +edit_menu.select_menu.disable_all:''; +edit_menu.select_menu.enable_all:''; +edit_menu.select_menu.pi_enable_13:''; +edit_menu.select_menu.pi_enable_14:''; +edit_menu.select_menu.pi_enable_15:''; +edit_menu.select_menu.pi_enable_16:''; +edit_menu.select_menu.pi_enable_17:''; +edit_menu.select_menu.pi_enable_18:''; +edit_menu.select_menu.pi_enable_20:''; +edit_menu.select_menu.pi_enable_22:''; +edit_menu.select_menu.pi_enable_23:''; +edit_menu.select_menu.select_all:''; +edit_menu.select_menu.unselect_all:''; +edit_menu.selection_menu:''; +edit_menu.selection_menu.align:''; +edit_menu.selection_menu.area_perimeter:''; +edit_menu.selection_menu.change_layer:''; +edit_menu.selection_menu.convert_to_cell:''; +edit_menu.selection_menu.convert_to_pcell:''; +edit_menu.selection_menu.difference:''; +edit_menu.selection_menu.distribute:''; +edit_menu.selection_menu.flatten_insts:''; +edit_menu.selection_menu.intersection:''; +edit_menu.selection_menu.make_array:''; +edit_menu.selection_menu.make_cell:''; +edit_menu.selection_menu.make_cell_variants:''; +edit_menu.selection_menu.move_hier_up:''; +edit_menu.selection_menu.resolve_arefs:''; +edit_menu.selection_menu.round_corners:''; +edit_menu.selection_menu.sel_flip_x:''; +edit_menu.selection_menu.sel_flip_y:''; +edit_menu.selection_menu.sel_free_rot:''; +edit_menu.selection_menu.sel_move:''; +edit_menu.selection_menu.sel_move_to:''; +edit_menu.selection_menu.sel_rot_ccw:''; +edit_menu.selection_menu.sel_rot_cw:''; +edit_menu.selection_menu.sel_scale:''; +edit_menu.selection_menu.separate:''; +edit_menu.selection_menu.size:''; +edit_menu.selection_menu.union:''; +edit_menu.undo_list:''; +edit_menu.utils_menu:''; +edit_menu.utils_menu.clip_tool:''; +edit_menu.utils_menu.fill_tool:''; +file_menu:''; +file_menu.clone:''; +file_menu.import_menu:''; +file_menu.import_menu.import_def:''; +file_menu.import_menu.import_gerber_menu:''; +file_menu.import_menu.import_gerber_menu.import_gerber_new:''; +file_menu.import_menu.import_gerber_menu.import_gerber_new_free:''; +file_menu.import_menu.import_gerber_menu.import_gerber_open:''; +file_menu.import_menu.import_gerber_menu.import_gerber_recent:''; +file_menu.import_menu.import_lef:''; +file_menu.import_menu.import_stream:''; +file_menu.layout_props:''; +file_menu.layout_stats:''; +file_menu.load_layer_props:''; +file_menu.new_layout:''; +file_menu.new_panel:''; +file_menu.open:''; +file_menu.open_recent_menu:''; +file_menu.open_recent_menu_layer_props:''; +file_menu.open_recent_menu_sessions:''; +file_menu.pull_in:''; +file_menu.reader_options:''; +file_menu.restore_session:''; +file_menu.save:''; +file_menu.save_all:''; +file_menu.save_as:''; +file_menu.save_layer_props:''; +file_menu.save_session:''; +file_menu.screenshot_to_clipboard:''; +file_menu.setup:''; +file_menu.view_log:''; +file_menu.writer_options:''; +help_menu:''; +help_menu.about:''; +help_menu.about_qt:''; +help_menu.assistant:''; +help_menu.show_all_tips:''; +macros_menu:''; +sg13g2_menu:''; +sg13g2_menu.macro_in_menu_sg13g2_density_report:''; +sg13g2_menu.macro_in_menu_sg13g2_filler_ActGatP:''; +sg13g2_menu.macro_in_menu_sg13g2_filler_Metal:''; +sg13g2_menu.macro_in_menu_sg13g2_filler_TopMetal:''; +sg13g2_menu.macro_in_menu_sg13g2_lvs:''; +sg13g2_menu.macro_in_menu_sg13g2_options:''; +tools_menu:''; +tools_menu.browse_instances:''; +tools_menu.browse_markers:''; +tools_menu.browse_netlists:''; +tools_menu.browse_shapes:''; +tools_menu.d25:''; +tools_menu.d25.edit_script:''; +tools_menu.d25.new_script:''; +tools_menu.d25.open_window:''; +tools_menu.diff_tool:''; +tools_menu.drc:''; +tools_menu.drc.edit_script:''; +tools_menu.drc.macro_in_menu_sg13g2_maximal:''; +tools_menu.drc.macro_in_menu_sg13g2_minimal:''; +tools_menu.drc.new_script:''; +tools_menu.edit_layer_stack:''; +tools_menu.lvs:''; +tools_menu.lvs.edit_script:''; +tools_menu.lvs.macro_in_menu_sg13g2_full:''; +tools_menu.lvs.new_script:''; +tools_menu.net_trace:''; +tools_menu.packages:''; +tools_menu.shapes_to_markers:''; +tools_menu.shapes_to_markers.scan_layers:''; +tools_menu.shapes_to_markers.scan_layers_flat:''; +tools_menu.technologies:''; +tools_menu.trace_all_nets_menu:''; +tools_menu.trace_all_nets_menu.trace_all_nets:''; +tools_menu.trace_all_nets_menu.trace_all_nets_flat:''; +tools_menu.xor_tool:''; +view_menu:''; +view_menu.crosshair_cursor:''; +view_menu.default_grid:''; +view_menu.default_grid.default_grid_1:''; +view_menu.default_grid.default_grid_2:''; +view_menu.edit_top_level_selection:''; +view_menu.mouse_tracking:''; +view_menu.no_stipples:''; +view_menu.reset_window_state:''; +view_menu.show_bookmarks_view:''; +view_menu.show_cell_boxes:''; +view_menu.show_grid:''; +view_menu.show_hierarchy_panel:''; +view_menu.show_images:''; +view_menu.show_layer_panel:''; +view_menu.show_layer_toolbox:''; +view_menu.show_libraries_view:''; +view_menu.show_markers:''; +view_menu.show_navigator:''; +view_menu.show_texts:''; +view_menu.show_toolbar:''; +view_menu.synchronized_views:''; +view_menu.transient_selection:''; +zoom_menu:''; +zoom_menu.global_trans:''; +zoom_menu.global_trans.m0:''; +zoom_menu.global_trans.m135:''; +zoom_menu.global_trans.m45:''; +zoom_menu.global_trans.m90:''; +zoom_menu.global_trans.r0:''; +zoom_menu.global_trans.r180:''; +zoom_menu.global_trans.r270:''; +zoom_menu.global_trans.r90:''; +zoom_menu.next_display_state:''; +zoom_menu.prev_display_state:''; +zoom_menu.redraw:''; +zoom_menu.select_cell:''; +file_menu.open_recent_menu.clear_recent:''; +file_menu.open_recent_menu.open_recent_1:''; +file_menu.open_recent_menu.open_recent_2:'' + + CIRCUIT_ + DEVICE_ + NET_ + + false + false + 1000 + auto + 255,0,0 0,255,0 0,0,255 255,255,0 255,0,255 0,255,255 160,80,255 255,160,0 + false + -1 + -1 + 50 + -1 + false + -1 + 10000 + true + 1 + fit-net + + false + false + true + false + true + + 0 1 2 3 + + + + + true + true + DejaVu Sans Mono + 11 + + 2 + + false + true + basic:'Alert'=(bold:true,color:'#bf0303',background:'#f7e7e7'),'Attribute'=(color:'#0057ae'),'Base-N Integer'=(color:'#b07e00'),'Built-in'=(bold:true,color:'#644a9b'),'Character'=(color:'#ff80e0'),'Comment'=(italic:true,color:'#888786'),'Control Flow'=(bold:true,color:'#1f1c1b'),'Data Type'=(color:'#0057ae'),'Decimal/Value'=(color:'#b07e00'),'Error'=(color:'#bf0303'),'Extension'=(color:'#0095ff'),'Floating Point'=(color:'#b07e00'),'Function'=(color:'#442886'),'Import'=(color:'#ff5500'),'Keyword'=(bold:true),'Normal'=(),'Operator'=(color:'#1f1c1b'),'Others'=(color:'#006e26'),'Preprocessor'=(color:'#006e28'),'Region Marker'=(color:'#0057ae',background:'#e1eaf8'),'Special Character'=(color:'#3daee9'),'Special String'=(color:'#ff5500'),'String'=(color:'#bf0303'),'Variable'=(color:'#0057ae'),'Verbatim String'=(color:'#bf0303');ruby:'Access Control'=(color:'#0000ff'),'Attribute Definition'=(),'Bin'=(),'Blockcomment'=(),'Char'=(),'Class Variable'=(),'Command'=(color:'#aa3000'),'Comment'=(),'Constant'=(),'Constant Value'=(color:'#bb1188'),'Data'=(),'Dec'=(),'Default globals'=(bold:true,color:'#c00000'),'Definition'=(),'Delimiter'=(color:'#ff9fec'),'Error'=(),'Expression'=(),'Float'=(),'GDL input'=(),'Global Constant'=(bold:true,color:'#bb1188'),'Global Variable'=(color:'#c00000'),'Here Document'=(),'Hex'=(),'Instance Variable'=(),'Kernel methods'=(color:'#000080'),'Keyword'=(),'Member'=(),'Message'=(color:'#4000a7'),'Module mixin methods'=(color:'#000080'),'Normal Text'=(),'Octal'=(),'Operator'=(color:'#ff9fec'),'Pseudo variable'=(),'RDoc Value'=(),'Raw String'=(color:'#dd4a4a'),'Region Marker'=(color:'#0000ff'),'Regular Expression'=(color:'#4a5704'),'String'=(),'Substitution'=(),'Symbol'=(color:'#d40000');python:'Builtin Function'=(),'ClassNames'=(italic:false,bold:true,color:'#fcad3d'),'Comment'=(),'Complex'=(),'Decorator'=(),'Definition Keyword'=(),'Error'=(),'Exceptions'=(),'Extensions'=(),'F-String'=(),'Float'=(),'Flow Control Keyword'=(),'Hex'=(),'Import'=(),'Int'=(),'Normal Text'=(),'Octal'=(),'Operator'=(),'Operator Keyword'=(),'Overloaders'=(),'Raw F-String'=(),'Raw String'=(),'Special Variable'=(),'String'=(),'String Char'=(),'String Substitution'=(); + 8 + + + true + +'@@navigator_menu.navigator_main_menu.navigator_all_hier_levels':false; +'@@navigator_menu.navigator_main_menu.navigator_freeze':false; +'@@navigator_menu.navigator_main_menu.navigator_show_images':false; +'@bookmarks_context_menu.follow_selection':false; +'@bookmarks_context_menu.load_bookmarks':false; +'@bookmarks_context_menu.manage_bookmarks':false; +'@bookmarks_context_menu.save_bookmarks':false; +'@hcp_context_menu.cell_user_properties':false; +'@hcp_context_menu.copy':false; +'@hcp_context_menu.cut':false; +'@hcp_context_menu.delete_cell':false; +'@hcp_context_menu.flat_mode':false; +'@hcp_context_menu.flatten_cell':false; +'@hcp_context_menu.hide_cell':false; +'@hcp_context_menu.new_cell':false; +'@hcp_context_menu.open_current':false; +'@hcp_context_menu.paste':false; +'@hcp_context_menu.rename_cell':false; +'@hcp_context_menu.replace_cell':false; +'@hcp_context_menu.save_cell_as':false; +'@hcp_context_menu.show_all':false; +'@hcp_context_menu.show_as_top':false; +'@hcp_context_menu.show_cell':false; +'@hcp_context_menu.sorting.by_area':false; +'@hcp_context_menu.sorting.by_area_reverse':false; +'@hcp_context_menu.sorting.by_name':false; +'@hcp_context_menu.split_mode':false; +'@lcp_context_menu.add_others':false; +'@lcp_context_menu.clean_up':false; +'@lcp_context_menu.copy':false; +'@lcp_context_menu.cut':false; +'@lcp_context_menu.del':false; +'@lcp_context_menu.group':false; +'@lcp_context_menu.hide':false; +'@lcp_context_menu.hide_all':false; +'@lcp_context_menu.hide_empty_layers':false; +'@lcp_context_menu.insert':false; +'@lcp_context_menu.invert_selection':false; +'@lcp_context_menu.invvalid':false; +'@lcp_context_menu.paste':false; +'@lcp_context_menu.regroup_menu.flatten':false; +'@lcp_context_menu.regroup_menu.grp_d':false; +'@lcp_context_menu.regroup_menu.grp_i':false; +'@lcp_context_menu.regroup_menu.grp_l':false; +'@lcp_context_menu.rename':false; +'@lcp_context_menu.select_all':false; +'@lcp_context_menu.select_source':false; +'@lcp_context_menu.show':false; +'@lcp_context_menu.show_all':false; +'@lcp_context_menu.show_only':false; +'@lcp_context_menu.sort_menu.sort_dli':false; +'@lcp_context_menu.sort_menu.sort_idl':false; +'@lcp_context_menu.sort_menu.sort_ild':false; +'@lcp_context_menu.sort_menu.sort_ldi':false; +'@lcp_context_menu.sort_menu.sort_name':false; +'@lcp_context_menu.tab_menu.new_tab':false; +'@lcp_context_menu.tab_menu.remove_tab':false; +'@lcp_context_menu.tab_menu.rename_tab':false; +'@lcp_context_menu.test_shapes_in_view':false; +'@lcp_context_menu.toggle_visibility':false; +'@lcp_context_menu.ungroup':false; +'@lcp_context_menu.valid':false; +'@lcp_context_menu.visibility_follows_selection':false; +'@lcp_tabs_context_menu.new_tab':false; +'@lcp_tabs_context_menu.remove_tab':false; +'@lcp_tabs_context_menu.rename_tab':false; +'@secrets.duplicate_interactive':false; +'@secrets.paste_interactive':false; +'@secrets.sel_move_interactive':false; +'@secrets.select_next_item':false; +'@secrets.select_next_item_add':false; +'@toolbar.combine_mode':false; +'@toolbar.next_display_state':false; +'@toolbar.prev_display_state':false; +'@toolbar.technology_selector':false; +bookmark_menu:false; +bookmark_menu.bookmark_view:false; +bookmark_menu.goto_bookmark_menu:false; +bookmark_menu.load_bookmarks:false; +bookmark_menu.manage_bookmarks:false; +bookmark_menu.open_recent_menu_bookmarks:false; +bookmark_menu.save_bookmarks:false; +edit_menu:false; +edit_menu.add_image:false; +edit_menu.cancel:false; +edit_menu.cell_menu:false; +edit_menu.cell_menu.adjust_cell_origin:false; +edit_menu.cell_menu.convert_cell_to_static:false; +edit_menu.cell_menu.delete_cell:false; +edit_menu.cell_menu.flatten_cell:false; +edit_menu.cell_menu.new_cell:false; +edit_menu.cell_menu.rename_cell:false; +edit_menu.cell_menu.replace_cell:false; +edit_menu.cell_menu.user_properties:false; +edit_menu.clear_all_rulers:false; +edit_menu.configure_rulers:false; +edit_menu.copy:false; +edit_menu.cut:false; +edit_menu.delete:false; +edit_menu.duplicate:false; +edit_menu.edit_options:false; +edit_menu.image_menu:false; +edit_menu.image_menu.bring_to_back:false; +edit_menu.image_menu.bring_to_front:false; +edit_menu.image_menu.clear_all_images:false; +edit_menu.layer_menu:false; +edit_menu.layer_menu.boolean:false; +edit_menu.layer_menu.clear_layer:false; +edit_menu.layer_menu.copy_layer:false; +edit_menu.layer_menu.delete_layer:false; +edit_menu.layer_menu.edit_layer:false; +edit_menu.layer_menu.merge:false; +edit_menu.layer_menu.new_layer:false; +edit_menu.layer_menu.size:false; +edit_menu.layout_menu:false; +edit_menu.layout_menu.lay_convert_to_static:false; +edit_menu.layout_menu.lay_flip_x:false; +edit_menu.layout_menu.lay_flip_y:false; +edit_menu.layout_menu.lay_free_rot:false; +edit_menu.layout_menu.lay_move:false; +edit_menu.layout_menu.lay_rot_ccw:false; +edit_menu.layout_menu.lay_rot_cw:false; +edit_menu.layout_menu.lay_scale:false; +edit_menu.mode_menu:false; +edit_menu.mode_menu.box:false; +edit_menu.mode_menu.instance:false; +edit_menu.mode_menu.move:false; +edit_menu.mode_menu.partial:false; +edit_menu.mode_menu.path:false; +edit_menu.mode_menu.polygon:false; +edit_menu.mode_menu.ruler:false; +edit_menu.mode_menu.select:false; +edit_menu.mode_menu.text:false; +edit_menu.paste:false; +edit_menu.redo:false; +edit_menu.redo_list:false; +edit_menu.search_replace_editor:false; +edit_menu.select_menu:false; +edit_menu.select_menu.disable_all:false; +edit_menu.select_menu.enable_all:false; +edit_menu.select_menu.pi_enable_13:false; +edit_menu.select_menu.pi_enable_14:false; +edit_menu.select_menu.pi_enable_15:false; +edit_menu.select_menu.pi_enable_16:false; +edit_menu.select_menu.pi_enable_17:false; +edit_menu.select_menu.pi_enable_18:false; +edit_menu.select_menu.pi_enable_20:false; +edit_menu.select_menu.pi_enable_22:false; +edit_menu.select_menu.pi_enable_23:false; +edit_menu.select_menu.select_all:false; +edit_menu.select_menu.unselect_all:false; +edit_menu.selection_menu:false; +edit_menu.selection_menu.align:false; +edit_menu.selection_menu.area_perimeter:false; +edit_menu.selection_menu.change_layer:false; +edit_menu.selection_menu.convert_to_cell:false; +edit_menu.selection_menu.convert_to_pcell:false; +edit_menu.selection_menu.difference:false; +edit_menu.selection_menu.distribute:false; +edit_menu.selection_menu.flatten_insts:false; +edit_menu.selection_menu.intersection:false; +edit_menu.selection_menu.make_array:false; +edit_menu.selection_menu.make_cell:false; +edit_menu.selection_menu.make_cell_variants:false; +edit_menu.selection_menu.move_hier_up:false; +edit_menu.selection_menu.resolve_arefs:false; +edit_menu.selection_menu.round_corners:false; +edit_menu.selection_menu.sel_flip_x:false; +edit_menu.selection_menu.sel_flip_y:false; +edit_menu.selection_menu.sel_free_rot:false; +edit_menu.selection_menu.sel_move:false; +edit_menu.selection_menu.sel_move_to:false; +edit_menu.selection_menu.sel_rot_ccw:false; +edit_menu.selection_menu.sel_rot_cw:false; +edit_menu.selection_menu.sel_scale:false; +edit_menu.selection_menu.separate:false; +edit_menu.selection_menu.size:false; +edit_menu.selection_menu.tap:false; +edit_menu.selection_menu.union:false; +edit_menu.show_properties:false; +edit_menu.undo:false; +edit_menu.undo_list:false; +edit_menu.utils_menu:false; +edit_menu.utils_menu.clip_tool:false; +edit_menu.utils_menu.fill_tool:false; +file_menu:false; +file_menu.clone:false; +file_menu.close:false; +file_menu.close_all:false; +file_menu.exit:false; +file_menu.import_menu:false; +file_menu.import_menu.import_def:false; +file_menu.import_menu.import_gerber_menu:false; +file_menu.import_menu.import_gerber_menu.import_gerber_new:false; +file_menu.import_menu.import_gerber_menu.import_gerber_new_free:false; +file_menu.import_menu.import_gerber_menu.import_gerber_open:false; +file_menu.import_menu.import_gerber_menu.import_gerber_recent:false; +file_menu.import_menu.import_lef:false; +file_menu.import_menu.import_stream:false; +file_menu.layout_props:false; +file_menu.layout_stats:false; +file_menu.load_layer_props:false; +file_menu.new_layout:false; +file_menu.new_panel:false; +file_menu.open:false; +file_menu.open_new_panel:false; +file_menu.open_recent_menu:false; +file_menu.open_recent_menu_layer_props:false; +file_menu.open_recent_menu_sessions:false; +file_menu.open_same_panel:false; +file_menu.print:false; +file_menu.pull_in:false; +file_menu.reader_options:false; +file_menu.reload:false; +file_menu.restore_session:false; +file_menu.save:false; +file_menu.save_all:false; +file_menu.save_as:false; +file_menu.save_layer_props:false; +file_menu.save_session:false; +file_menu.screenshot:false; +file_menu.screenshot_to_clipboard:false; +file_menu.setup:false; +file_menu.view_log:false; +file_menu.writer_options:false; +help_menu:false; +help_menu.about:false; +help_menu.about_qt:false; +help_menu.assistant:false; +help_menu.show_all_tips:false; +macros_menu:false; +macros_menu.macro_development:false; +sg13g2_menu:false; +sg13g2_menu.macro_in_menu_sg13g2_density_report:false; +sg13g2_menu.macro_in_menu_sg13g2_filler_ActGatP:false; +sg13g2_menu.macro_in_menu_sg13g2_filler_Metal:false; +sg13g2_menu.macro_in_menu_sg13g2_filler_TopMetal:false; +sg13g2_menu.macro_in_menu_sg13g2_lvs:false; +sg13g2_menu.macro_in_menu_sg13g2_options:false; +tools_menu:false; +tools_menu.browse_instances:false; +tools_menu.browse_markers:false; +tools_menu.browse_netlists:false; +tools_menu.browse_shapes:false; +tools_menu.d25:false; +tools_menu.d25.edit_script:false; +tools_menu.d25.new_script:false; +tools_menu.d25.open_window:false; +tools_menu.diff_tool:false; +tools_menu.drc:false; +tools_menu.drc.edit_script:false; +tools_menu.drc.macro_in_menu_sg13g2_maximal:false; +tools_menu.drc.macro_in_menu_sg13g2_minimal:false; +tools_menu.drc.new_script:false; +tools_menu.edit_layer_stack:false; +tools_menu.lvs:false; +tools_menu.lvs.edit_script:false; +tools_menu.lvs.macro_in_menu_sg13g2_full:false; +tools_menu.lvs.new_script:false; +tools_menu.net_trace:false; +tools_menu.packages:false; +tools_menu.shapes_to_markers:false; +tools_menu.shapes_to_markers.scan_layers:false; +tools_menu.shapes_to_markers.scan_layers_flat:false; +tools_menu.technologies:false; +tools_menu.trace_all_nets_menu:false; +tools_menu.trace_all_nets_menu.trace_all_nets:false; +tools_menu.trace_all_nets_menu.trace_all_nets_flat:false; +tools_menu.xor_tool:false; +view_menu:false; +view_menu.crosshair_cursor:false; +view_menu.default_grid:false; +view_menu.default_grid.default_grid_1:false; +view_menu.default_grid.default_grid_2:false; +view_menu.edit_top_level_selection:false; +view_menu.mouse_tracking:false; +view_menu.no_stipples:false; +view_menu.reset_window_state:false; +view_menu.show_bookmarks_view:false; +view_menu.show_cell_boxes:false; +view_menu.show_grid:false; +view_menu.show_hierarchy_panel:false; +view_menu.show_images:false; +view_menu.show_layer_panel:false; +view_menu.show_layer_toolbox:false; +view_menu.show_libraries_view:false; +view_menu.show_markers:false; +view_menu.show_navigator:false; +view_menu.show_texts:false; +view_menu.show_toolbar:false; +view_menu.synchronized_views:false; +view_menu.transient_selection:false; +zoom_menu:false; +zoom_menu.ascend:false; +zoom_menu.dec_max_hier:false; +zoom_menu.descend:false; +zoom_menu.descend_into:false; +zoom_menu.global_trans:false; +zoom_menu.global_trans.m0:false; +zoom_menu.global_trans.m135:false; +zoom_menu.global_trans.m45:false; +zoom_menu.global_trans.m90:false; +zoom_menu.global_trans.r0:false; +zoom_menu.global_trans.r180:false; +zoom_menu.global_trans.r270:false; +zoom_menu.global_trans.r90:false; +zoom_menu.goto_position:false; +zoom_menu.inc_max_hier:false; +zoom_menu.max_hier:false; +zoom_menu.max_hier_0:false; +zoom_menu.max_hier_1:false; +zoom_menu.next_display_state:false; +zoom_menu.prev_display_state:false; +zoom_menu.redraw:false; +zoom_menu.select_cell:false; +zoom_menu.select_current_cell:false; +zoom_menu.zoom_fit:false; +zoom_menu.zoom_fit_sel:false; +zoom_menu.zoom_in:false; +zoom_menu.zoom_out:false; +file_menu.open_recent_menu.clear_recent:false; +file_menu.open_recent_menu.open_recent_1:false; +file_menu.open_recent_menu.open_recent_2:false + + 16 + 0 + + + + false + true + false + auto + 255,0,0 0,255,0 0,0,255 255,255,0 255,0,255 0,255,255 160,80,255 255,160,0 + false + -1 + -1 + 50 + -1 + -1 + 10000 + 1 + fit-net + 0.15 + 2 + + database-top + auto + -1 + -1 + -1 + -1 + 1000 + + 1 + fit-marker + + false + auto + false + true + true + any + 8 + mode=normal,title=Ruler,category=_ruler,version=1,fmt=$D,fmt_x=$X,fmt_y=$Y,position=auto,xalign=auto,yalign=auto,xlabel_xalign=auto,xlabel_yalign=auto,ylabel_xalign=auto,ylabel_yalign=auto,style=ruler,outline=diag,snap=true,angle_constraint=global;mode=multi_segment,title='Multi-ruler',category=_multi_ruler,version=1,fmt=$D,fmt_x=$X,fmt_y=$Y,position=auto,xalign=auto,yalign=auto,xlabel_xalign=auto,xlabel_yalign=auto,ylabel_xalign=auto,ylabel_yalign=auto,style=ruler,outline=diag,snap=true,angle_constraint=global;mode=single_click,title=Cross,category=_cross,version=1,fmt='$U,$V',fmt_x='',fmt_y='',position=auto,xalign=auto,yalign=auto,xlabel_xalign=auto,xlabel_yalign=auto,ylabel_xalign=auto,ylabel_yalign=auto,style=cross_both,outline=diag,snap=true,angle_constraint=global;mode=auto_metric,title=Measure,category=_measure,version=1,fmt=$D,fmt_x=$X,fmt_y=$Y,position=auto,xalign=auto,yalign=auto,xlabel_xalign=auto,xlabel_yalign=auto,ylabel_xalign=auto,ylabel_yalign=auto,style=ruler,outline=diag,snap=true,angle_constraint=global;mode=auto_metric_edge,title='Measure edge',category=_measure_edge,version=1,fmt=$D,fmt_x=$X,fmt_y=$Y,position=auto,xalign=auto,yalign=auto,xlabel_xalign=auto,xlabel_yalign=auto,ylabel_xalign=auto,ylabel_yalign=auto,style=ruler,outline=diag,snap=true,angle_constraint=global;mode=angle,title=Angle,category=_angle,version=1,fmt='$(sprintf(\'%.5g\',G))\302\260',fmt_x='',fmt_y='',position=auto,xalign=auto,yalign=auto,xlabel_xalign=auto,xlabel_yalign=auto,ylabel_xalign=auto,ylabel_yalign=auto,style=line,outline=angle,snap=true,angle_constraint=any;mode=angle,title=Radius,category=_radius,version=1,fmt='R=$D',fmt_x='',fmt_y='',position=center,xalign=auto,yalign=auto,xlabel_xalign=auto,xlabel_yalign=auto,ylabel_xalign=auto,ylabel_yalign=auto,style=arrow_end,outline=radius,snap=true,angle_constraint=any;mode=normal,title=Ellipse,category='',version=1,fmt='',fmt_x='W=$(abs(X))',fmt_y='H=$(abs(Y))',position=auto,xalign=auto,yalign=auto,xlabel_xalign=auto,xlabel_yalign=auto,ylabel_xalign=auto,ylabel_yalign=auto,style=line,outline=ellipse,snap=true,angle_constraint=any;mode=normal,title=Box,category='',version=1,fmt='',fmt_x='W=$(abs(X))',fmt_y='H=$(abs(Y))',position=auto,xalign=auto,yalign=auto,xlabel_xalign=auto,xlabel_yalign=auto,ylabel_xalign=auto,ylabel_yalign=auto,style=line,outline=box,snap=true,angle_constraint=any + -1 + + 5 + 0 + auto + 1 + true + false + 0 + 1 + true + 3 + + any-top + 1000 + 1000 + 1 + fit-marker + + false + true + true + true + true + false + false + true + false + false + 1000 + 1 + fit-marker + + true + 0 1 2 3 4 5[1] 6 7 8 9[0] 10 11 12 13 14 15 + <?xml version="1.0" encoding="utf-8"?> +<stream-import-data> + <files> +/file> + </files> + <cell-name/> + <layer-offset/> + <layer-mode>original</layer-mode> + <import-mode>merge</import-mode> + <reference-points> + </reference-points> + <explicit-trans>r0 *1 0,0</explicit-trans> + <options> + <gds2> + <box-mode>1</box-mode> + <allow-big-records>true</allow-big-records> + <allow-multi-xy-records>true</allow-multi-xy-records> + </gds2> + <common> + <create-other-layers>true</create-other-layers> + <layer-map>layer_map()</layer-map> + <enable-properties>true</enable-properties> + <enable-text-objects>true</enable-text-objects> + </common> + <lefdef> + <read-all-layers>true</read-all-layers> + <layer-map>layer_map()</layer-map> + <dbu>0.001</dbu> + <produce-net-names>true</produce-net-names> + <net-property-name>#1</net-property-name> + <produce-inst-names>true</produce-inst-names> + <inst-property-name>#1</inst-property-name> + <produce-pin-names>false</produce-pin-names> + <pin-property-name>#1</pin-property-name> + <produce-cell-outlines>true</produce-cell-outlines> + <cell-outline-layer>OUTLINE</cell-outline-layer> + <produce-placement-blockages>true</produce-placement-blockages> + <placement-blockage-layer>PLACEMENT_BLK</placement-blockage-layer> + <produce-regions>true</produce-regions> + <region-layer>REGIONS</region-layer> + <produce-via-geometry>true</produce-via-geometry> + <via_geometry-suffix-string/> + <via_geometry-datatype-string>0</via_geometry-datatype-string> + <produce-pins>true</produce-pins> + <pins-suffix-string>.PIN</pins-suffix-string> + <pins-datatype-string>2</pins-datatype-string> + <produce-lef-pins>true</produce-lef-pins> + <lef_pins-suffix-string>.PIN</lef_pins-suffix-string> + <lef_pins-datatype-string>2</lef_pins-datatype-string> + <produce-fills>true</produce-fills> + <fills-suffix-string>.FILL</fills-suffix-string> + <fills-datatype-string>5</fills-datatype-string> + <produce-obstructions>true</produce-obstructions> + <obstructions-suffix>.OBS</obstructions-suffix> + <obstructions-datatype>3</obstructions-datatype> + <produce-blockages>true</produce-blockages> + <blockages-suffix>.BLK</blockages-suffix> + <blockages-datatype>4</blockages-datatype> + <produce-labels>true</produce-labels> + <labels-suffix>.LABEL</labels-suffix> + <labels-datatype>1</labels-datatype> + <produce-lef-labels>true</produce-lef-labels> + <lef-labels-suffix>.LABEL</lef-labels-suffix> + <lef-labels-datatype>1</lef-labels-datatype> + <produce-routing>true</produce-routing> + <routing-suffix-string/> + <routing-datatype-string>0</routing-datatype-string> + <produce-special-routing>true</produce-special-routing> + <special-routing-suffix-string/> + <special-routing-datatype-string>0</special-routing-datatype-string> + <via-cellname-prefix>VIA_</via-cellname-prefix> + <read-lef-with-def>true</read-lef-with-def> + <macro-resolution-mode>default</macro-resolution-mode> + <separate-groups>false</separate-groups> + <joined-paths>false</joined-paths> + <map-file/> + </lefdef> + <mebes> + <invert>false</invert> + <subresolution>true</subresolution> + <produce-boundary>true</produce-boundary> + <num-stripes-per-cell>64</num-stripes-per-cell> + <num-shapes-per-cell>0</num-shapes-per-cell> + <data-layer>1</data-layer> + <data-datatype>0</data-datatype> + <data-name>DATA</data-name> + <boundary-layer>0</boundary-layer> + <boundary-datatype>0</boundary-datatype> + <boundary-name>BORDER</boundary-name> + <layer-map>layer_map()</layer-map> + <create-other-layers>true</create-other-layers> + </mebes> + <dxf> + <dbu>0.001</dbu> + <unit>1</unit> + <text-scaling>100</text-scaling> + <circle-points>100</circle-points> + <circle-accuracy>0</circle-accuracy> + <contour-accuracy>0</contour-accuracy> + <polyline-mode>0</polyline-mode> + <render-texts-as-polygons>false</render-texts-as-polygons> + <keep-other-cells>false</keep-other-cells> + <keep-layer-names>false</keep-layer-names> + <create-other-layers>true</create-other-layers> + <layer-map>layer_map()</layer-map> + </dxf> + <cif> + <wire-mode>0</wire-mode> + <dbu>0.001</dbu> + <layer-map>layer_map()</layer-map> + <create-other-layers>true</create-other-layers> + <keep-layer-names>false</keep-layer-names> + </cif> + <mag> + <lambda>1</lambda> + <dbu>0.001</dbu> + <layer-map>layer_map()</layer-map> + <create-other-layers>true</create-other-layers> + <keep-layer-names>false</keep-layer-names> + <merge>true</merge> + <lib-paths> + </lib-paths> + </mag> + </options> +</stream-import-data> + + false + false + + + false + auto + 0 + true + false + true + + auto + true + auto + -1 + false + -1 + 1 + 0 + AdnQywADAAAAAABCAAAAIAAAB38AAAPwAAACcQAAAEUAAAWQAAACnAAAAAACAAAAB4AAAABCAAAARQAAB38AAAPw + AAAA/wAAAAD9AAAAAgAAAAAAAADBAAAB6vwCAAAABPsAAAAqAG4AYQB2AGkAZwBhAHQAbwByAF8AZABvAGMAawBfAHcAaQBkAGcAZQB0AAAAAAD/////AAAAkwD////7AAAAHABoAHAAXwBkAG8AYwBrAF8AdwBpAGQAZwBlAHQBAAAAVgAAAPIAAAAVAP////sAAAAgAGwAaQBiAHMAXwBkAG8AYwBrAF8AdwBpAGQAZwBlAHQBAAABTgAAAPIAAAAVAP////sAAAAcAGUAbwBfAGQAbwBjAGsAXwB3AGkAZABnAGUAdAAAAAL+AAAAlgAAAJYA////AAAAAQAAALcAAAHq/AIAAAAD+wAAACoAYgBvAG8AawBtAGEAcgBrAHMAXwBkAG8AYwBrAF8AdwBpAGQAZwBlAHQAAAAAAP////8AAAAVAP////sAAAAcAGwAcABfAGQAbwBjAGsAXwB3AGkAZABnAGUAdAEAAABWAAABhwAAABUA////+wAAABwAbAB0AF8AZABvAGMAawBfAHcAaQBkAGcAZQB0AQAAAeMAAABdAAAAFQD///8AAAGcAAAB6gAAAAQAAAAEAAAACAAAAAj8AAAAAQAAAAIAAAABAAAADgB0AG8AbwBsAGIAYQByAQAAAAD/////AAAAAAAAAAA= + false + true + false + all + + 1 + rdb + all + false + + + diff --git a/intermediate/xschemrc/xschemrc b/intermediate/xschemrc/xschemrc new file mode 100644 index 00000000..1d6599cd --- /dev/null +++ b/intermediate/xschemrc/xschemrc @@ -0,0 +1,827 @@ +#### xschemrc system configuration file + +#### values may be overridden by user's ~/.xschem/xschemrc configuration file +#### or by project-local ./xschemrc + +########################################################################### +#### XSCHEM INSTALLATION DIRECTORY: XSCHEM_SHAREDIR +########################################################################### +#### Normally there is no reason to set this variable if using standard +#### installation. Location of files is set at compile time but may be overridden +#### with following line: +# set XSCHEM_SHAREDIR $env(HOME)/share/xschem + +########################################################################### +#### XSCHEM SYSTEM-WIDE DESIGN LIBRARY PATHS: XSCHEM_LIBRARY_PATH +########################################################################### +#### If unset xschem starts with XSCHEM_LIBRARY_PATH set to the default, typically: +# ${HOME}/.xschem/xschem_library +# /share/xschem/xschem_library/devices +# /share/doc/xschem/examples +# /share/doc/xschem/ngspice +# /share/doc/xschem/logic +# /share/doc/xschem/xschem_simulator +# /share/doc/xschem/binto7seg +# /share/doc/xschem/pcb +# /share/doc/xschem/rom8k + +#### Flush any previous definition +set XSCHEM_LIBRARY_PATH {} +#### include devices/*.sym +append XSCHEM_LIBRARY_PATH :${XSCHEM_SHAREDIR}/xschem_library/devices +append XSCHEM_LIBRARY_PATH :${XSCHEM_SHAREDIR}/xschem_library +#### include skywater libraries. Here i use [pwd]. This works if i start xschem from here. +append XSCHEM_LIBRARY_PATH :[file dirname [info script]] +#### add ~/.xschem/xschem_library (USER_CONF_DIR is normally ~/.xschem) +append XSCHEM_LIBRARY_PATH :$USER_CONF_DIR/xschem_library + +########################################################################### +#### SET CUSTOM COLORS FOR XSCHEM LIBRARIES MATCHING CERTAIN PATTERNS +########################################################################### +#### each line contains a dircolor(pattern) followed by a color +#### color can be an ordinary name (grey, brown, blue) or a hex code {#77aaff} +#### hex code must be enclosed in braces +array unset dircolor +set dircolor(sg13g2_pr$) blue +set dircolor(sg13g2_tests$) blue +set dircolor(xschem_library$) red +set dircolor(devices$) red + +########################################################################### +#### DIRECTORY WHERE SIMULATIONS, NETLIST AND SIMULATOR OUTPUTS ARE PLACED +########################################################################### +#### If unset $USER_CONF_DIR/simulations is assumed (normally ~/.xschem/simulations) +set netlist_dir $env(PWD)/simulations +#### if this is set to '1' netlists and simulations will go into a simulation/ folder +#### inside the directory containing the top level schematic. Default: not set (0) +# set local_netlist_dir 1 + +########################################################################### +#### NETLIST AND HIERARCHICAL PRINT EXCLUDE PATTERNS +########################################################################### +#### xschem_libs is a list of patterns of cells to exclude from netlisting. +#### Matching is done as regular expression on full cell path +#### Example: +#### set xschem_libs { {/cmoslib/} {/analoglib/.*pass} buffer } +#### in this case all schematic cells of directory cmoslib and cells containing +#### /analoglib/...pass and buffer will be excluded from netlisting +#### default value: empty +# set xschem_libs {} +#### noprint_libs is a list with same rules as for xschem_libs. This +#### variable controls hierarchical print +#### default value: empty +# set noprint_libs {} +#### nolist_libs is a list with same rules as for xschem_libs. This +#### variable controls cell listing in procedure list_hierarchy. +#### default value: empty +# set nolist_libs {} + +########################################################################### +#### CHANGE DEFAULT [] WITH SOME OTHER CHARACTERS FOR BUSSED SIGNALS +#### IN SPICE NETLISTS (EXAMPLE: DATA[7] --> DATA<7>) +########################################################################### +#### default: empty (use xschem default, [ ]) +# set bus_replacement_char {<>} +#### for XSPICE: replace square brackets as the are used for XSPICE vector nodes. +# set bus_replacement_char {__} + +########################################################################### +#### SOME DEFAULT BEHAVIOR +########################################################################### +#### Allowed values: spice, verilog, vhdl, tedax, default: spice +# set netlist_type spice + +#### Some netlisting options (these are the defaults) +# set hspice_netlist 1 +# set verilog_2001 1 + +#### to use a fixed line width set change_lw to 0 and set some value to line_width +#### these are the defaults +# set line_width 0 +# set change_lw 1 + +#### allow color postscript and svg exports. Default: 1, enable color +# set color_ps 1 + +#### set paper size: name, height, width. Sizes in 1/72 of an inch (typographical points) +#### default: {a4 842 595} +# set ps_paper_size {a4 842 595} +# set ps_paper_size {letter 792 612} + +#### initial size of xschem window you can specify also position with (wxh+x+y) +#### this is the default: +# set initial_geometry {900x600} + +#### if set to 0, when zooming out allow the viewport do drift toward the mouse position, +#### allowing to move away by zooming / unzooming with mouse wheel +#### default setting: 0 +# set unzoom_nodrift 0 + +#### if set to 1 full zoom will center the drawing instead of anhoring to lower +#### left corner. Default: 0 +set zoom_full_center 1 + +#### if set to 1 allow to place multiple components with same name. +#### Warning: this is normally not allowed in any simulation netlist. +#### default: 0, do not allow place multiple elements with same name (refdes) +# set disable_unique_names 0 + +#### if set to 1 continue drawing lines / wires after click +#### default: 0 +# set persistent_command 1 + +#### if set to 1 a wire is inserted when separating components that are +#### connected by pins. Default: not enabled (0) +# set connect_by_kissing 1 + +#### if set to 1 automatically join/trim wires while editing +#### this may slow down on rally big designs. Can be disabled via menu +#### default: 0 +set autotrim_wires 1 + +#### set widget scaling (mainly for font display), this is useful on 4K displays +#### default: unset (tk uses its default) > 1.0 ==> bigger +# set tk_scaling 1.7 + +#### use the tclreadline package if available , Default: 1 (enabled). +# set use_tclreadline 1 + +#### disable some symbol layers. Default: none, all layers are visible. +# set enable_layer(5) 0 ;# example to disable pin red boxes + +#### enable to scale grid point size as done with lines at close zoom, default: 0 +# set big_grid_points 0 + +#### enable grouping contiguous bits of bus slices in net->pin instance +#### assignments for verilog netlists. Default: disabled (0) +# set verilog_bitblast 0 + +#### allow searching the full search path for schematics associated to symbols +#### instead of looking only in symbol directory. Default: disabled (0). +# set search_schematic 0 + +#### focus the schematic window if mouse goes over it, even if a dialog box +#### is displayed, without needing to click. +#### This allows to move/zoom/pan the schematic while editing attributes. +#### Clicking in the schematic window usually closes the dialog box or starts +#### editing a new component if clicking on a new component. +#### default: enabled (1) +# set autofocus_mainwindow 1 + +#### set component browser always above drawing canvas. +#### default: enabled (1) +# set component_browser_on_top 0 + +#### set graph line with multiplier with respect to xschem actual line width +#### default: 2.0 +# set graph_linewidth_mult 2.0 + +########################################################################### +#### EXPORT FORMAT TRANSLATORS, PNG AND PDF +########################################################################### +#### command to translate xpm to png; (assumes command takes source +#### and dest file as arguments, example: gm convert plot.xpm plot.png) +#### default: {gm convert} +#### Windows ghostscript uses gswin64c +# set to_png {gswin64c -sDEVICE=png16m -o} +# set to_png {gm convert} + +#### command to translate ps to pdf; (assumes command takes source +#### and dest file as arguments, example: ps2pdf plot.ps plot.pdf) +#### default: ps2pdf +#### Windows ghostscript uses gswin64c +# set to_pdf {gswin64c -sDEVICE=pdfwrite -o} +# set to_pdf ps2pdf +set to_pdf {ps2pdf -dAutoRotatePages=/None} + +########################################################################### +#### UNDO: SAVE ON DISK OR KEEP IN MEMORY +########################################################################### +#### Alloved: 'disk'or 'memory'. +#### Saving undo on disk is safer but slower on extremely big schematics. +#### In most cases you won't notice any delay. Undo on disk allows previous +#### state recovery in case of crashes. In-memory undo is extremely fast +#### but should a crash occur everything is lost. +#### It is highly recommended to keep undo on disk. +#### Default: disk +# set undo_type disk + +########################################################################### +#### CUSTOM GRID / SNAP VALUE SETTINGS +########################################################################### +#### Warning: changing these values will likely break compatibility +#### with existing symbol libraries. Defaults: grid 20, snap 10. +# set cadgrid 20 +# set cadsnap 10 + +########################################################################### +#### CUSTOM COLORS MAY BE DEFINED HERE +########################################################################### +# set cadlayers 22 +# set light_colors { +# "#ffffff" "#0044ee" "#aaaaaa" "#222222" "#229900" +# "#bb2200" "#00ccee" "#ff0000" "#888800" "#00aaaa" +# "#880088" "#00ff00" "#0000cc" "#666600" "#557755" +# "#aa2222" "#7ccc40" "#00ffcc" "#ce0097" "#d2d46b" +# "#ef6158" "#fdb200" } + +# set dark_colors { +# "#000000" "#00ccee" "#3f3f3f" "#cccccc" "#88dd00" +# "#bb2200" "#00ccee" "#ff0000" "#ffff00" "#ffffff" +# "#ff00ff" "#00ff00" "#0000cc" "#aaaa00" "#aaccaa" +# "#ff7777" "#bfff81" "#00ffcc" "#ce0097" "#d2d46b" +# "#ef6158" "#fdb200" } + +########################################################################### +#### CAIRO STUFF +########################################################################### +#### Scale all fonts by this number +# set cairo_font_scale 1.0 + +#### default for following two is 0.85 (xscale) and 0.88 (yscale) to +#### match cairo font spacing +# set nocairo_font_xscale 1.0 +#### set nocairo_font_yscale 1.0 + +#### Scale line spacing by this number +# set cairo_font_line_spacing 1.0 + +#### Specify a font +# set cairo_font_name {Sans-Serif} +# set svg_font_name {Sans-Serif} + +#### Lift up text by some zoom-corrected pixels for +#### better compatibility wrt no cairo version. +#### Useful values in the range [-1, 3] +# set cairo_vert_correct 0 +# set nocairo_vert_correct 0 + +########################################################################### +#### KEYBINDINGS +########################################################################### +#### General format for specifying a replacement for a keybind +#### Replace Ctrl-q with Escape (so you wont kill the program) +# set replace_key(Control-q) Escape + +#### swap w and W keybinds; Always specify Shift for capital letters +# set replace_key(Shift-W) Key-w +# set replace_key(Key-w) Shift-W + +########################################################################### +#### TERMINAL +########################################################################### +#### default for linux: xterm +# set terminal {xterm -geometry 100x35 -fn 9x15 -bg black -fg white -cr white -ms white } +#### lxterminal is not OK since it will not inherit env vars: +#### In order to reduce memory usage and increase the performance, all instances +#### of the lxterminal are sharing a single process. LXTerminal is part of LXDE + +########################################################################### +#### EDITOR +########################################################################### +#### editor must not detach from launching shell (-f mandatory for gvim) +#### default for linux: gvim -f +# set editor {gvim -f -geometry 90x28} +# set editor { xterm -geometry 100x40 -e nano } +# set editor { xterm -geometry 100x40 -e pico } + +#### For Windows +# set editor {notepad.exe} + +########################################################################### +#### SHOW ERC INFO WINDOW (erc errors, warnings etc) +########################################################################### +#### default: 0 (can be enabled by menu) +# set show_infowindow 0 + +########################################################################### +#### ALWAYS SHOW ERC INFO WINDOW AFTER NETLIST +########################################################################### +#### default: 0 +# set show_infowindow_after_netlist 0 + +########################################################################### +#### TCP CONNECTION WITH GAW +########################################################################### +#### set gaw address for socket connection: {host port} +#### default: set to localhost, port 2020 +# set gaw_tcp_address {localhost 2020} + +########################################################################### +#### XSCHEM LISTEN TO TCP PORT +########################################################################### +#### set xschem listening port; default: not enabled +# set xschem_listen_port 2021 + +########################################################################### +#### BESPICE WAVE SOCKET CONNECTION +########################################################################### +#### set bespice wave listening port; default: not enabled +# set bespice_listen_port 2022 + +########################################################################### +#### TCL FILES TO LOAD AT STARTUP +########################################################################### +#### list of tcl files to preload. +set tcl_files {} +lappend tcl_files ${XSCHEM_SHAREDIR}/ngspice_backannotate.tcl +# lappend tcl_files ${XSCHEM_SHAREDIR}/change_index.tcl +# lappend tcl_files .... + +########################################################################### +#### WEB URL DOWNLOAD HELPER APPLICATION +########################################################################### +#### used to download files from web: default: {curl -f -s -O -J} +# set download_url_helper {curl -f -s -O -J} +# set download_url_helper {wget -N --quiet --content-disposition} + +########################################################################### +#### XSCHEM TOOLBAR +########################################################################### +#### default: not enabled. +set toolbar_visible 1 +# set toolbar_horiz 1 + +########################################################################### +#### TABBED WINDOWS +########################################################################### +# default: not enabled. Interface can be changed runtime if only one window +# or tab is open. +set tabbed_interface 1 + +########################################################################### +#### CASE INSENSITIVE SYMBOL LOOKUP +########################################################################### +## this option might be useful on filesystems that are case insensitive and +## on designs ported from windows where case of file names does not matter. +## if this option is set symbol lookup will be case insensitive, +## so a symbol reference 'AMPLI.SYM' will match with 'ampli.sym' or +## Amply.sym on disk. File system must be case insensitive for this to work, +## like FAT32 or NTFS. +## Do not set this option if you don't know what you are doing. +## Default: not enabled (0) +# set case_insensitive 1 + +########################################################################### +#### HIDE GRAPHS IF NO SPICE DATA LOADED +########################################################################### +## if enabled graphs will be hidden if no data is loaded. +## default: not enabled (0) +# set hide_empty_graphs 0 + +########################################################################### +#### SHOW HIDDEN TEXTS +########################################################################### +## This option shows text objects even if they have attribute 'hide=true' set +## default: 0 (not set) +# set show_hidden_texts 1 + +########################################################################### +#### LIVE BACKANNOTATION OF DATA AT CURSOR 2 (B) POSITION +########################################################################### +## if enabled will backannotate values in schematic at cursor 'b' position +## in graph. Default: not enabled (0) +set live_cursor2_backannotate 1 + +########################################################################### +#### IHP PDK SPECIFIC VARIABLES +########################################################################### + +## check if env var PDK_ROOT exists, and use it for building open_pdks paths +if { [info exists env(PDK_ROOT)] && $env(PDK_ROOT) ne {} } { + ## found variable, set tcl PDK_ROOT var + if {![file isdir $env(PDK_ROOT)]} { + puts stderr "Warning: PDK_ROOT environment variable is set but path not found on the system." + } + set PDK_ROOT $env(PDK_ROOT) +} else { + ## not existing or empty. + puts stderr "Warning: PDK_ROOT env. var. not found or empty, trying to find an open_pdks install" + if {[file isdir /usr/share/pdk]} {set PDK_ROOT /usr/share/pdk + } elseif {[file isdir /usr/local/share/pdk]} {set PDK_ROOT /usr/local/share/pdk + } elseif {[file isdir $env(HOME)/share/pdk]} {set PDK_ROOT $env(HOME)/share/pdk + } else { + puts stderr {No open_pdks installation found, set PDK_ROOT env. var. and restart xschem} + } +} + +if {[info exists PDK_ROOT]} { + ## get process variant + if {[info exists env(PDK)]} { + set PDK $env(PDK) + } else { + set PDK ihp-sg13g2 + } + set SG13G2_MODELS ${PDK_ROOT}/${PDK}/libs.tech/ngspice/models + set SG13G2_MODELS_XYCE ${PDK_ROOT}/${PDK}/libs.tech/xyce/models + puts stderr "SG13G2_MODELS: $SG13G2_MODELS" + puts stderr "SG13G2_MODELS_XYCE: $SG13G2_MODELS_XYCE" + #puts stderr "SKYWATER_STDCELLS: $SG13G2_STDCELLS" +} + + +# open_pdks specific: +# Set variables after ${PDK_ROOT} is known +# This overrides some of the variables set above. + +set XSCHEM_START_WINDOW ${PDK_ROOT}/${PDK}/libs.tech/xschem/start_page.sch +append XSCHEM_LIBRARY_PATH :${PDK_ROOT}/${PDK}/libs.tech/xschem + +# allow a user-specific path add-on (https://github.com/iic-jku/iic-osic-tools/issues/7) +if { [info exists ::env(XSCHEM_USER_LIBRARY_PATH) ] } { + append XSCHEM_LIBRARY_PATH :$env(XSCHEM_USER_LIBRARY_PATH) +} + +############################################################### DRC checks ####################################### +# IHP SG13G2 mosfets dimension checks +proc fet_drc {instance symbol model w l ng } { + set res {} + # strip off the "u" suffix + regsub {u$} $w {} w + regsub {u$} $l {} l + # puts "$instance $model $symbol w=$w l=$l nf=$nf" + if { [string is double $w] && [string is double $l] && [string is integer $ng]} { + + # calculate finger width + set w [expr { double($w) / double($ng)}] + + switch -regexp $model { + {sg13_lv_nmos$} { + if { $w < 0.13 } { + append res "${instance} ($model): finger width is too small, w/ng = $w, min. w/ng > 0.13u" \n + } + if { $w > 10.0 } { + append res "${instance} ($model): finger width is too big, w/ng = $w, max. w/ng < 10.0u" \n + } + if { $l < 0.13 } { + append res "${instance} ($model): length is too small, l = $l, min l > 0.13u" \n + } + } + {sg13_lv_pmos$} { + if { $w < 0.13 } { + append res "${instance} ($model): finger width is too small, w/ng = $w, min. w/ng > 0.13u" \n + } + if { $w > 10.0 } { + append res "${instance} ($model): finger width is too big, w/ng = $w, max. w/ng < 10.0u" \n + } + if { $l < 0.13 } { + append res "${instance} ($model): length is too small, l = $l, min. l > 0.13u" \n + } + } + {sg13_hv_nmos$} { + if { $w < 0.3 } { + append res "${instance} ($model): finger width is too small, w/ng = $w, min w/ng > 0.3u" \n + } + if { $w > 10.0 } { + append res "${instance} ($model): finger width is too big, w/ng = $w, max. w/ng < 10.0u" \n + } + if { $l < 0.45 } { + append res "${instance} ($model): length is too small, l = $l, min. l > 0.45u" \n + } + } + {sg13_hv_pmos$} { + if { $w < 0.3 } { + append res "${instance} ($model): finger width is too small, w/ng = $w, min. w/ng > 0.3u" \n + } + if { $w > 10.0 } { + append res "${instance} ($model): finger width is too big, w/ng = $w, max. w/ng < 10.0u" \n + } + if { $l < 0.4 } { + append res "${instance} ($model): length is too small, l = $l, min. l > 0.4u" \n + } + } + } ;# switch + } + return $res +} +# IHP SG13G2 resistors dimension checks +proc res_drc {instance symbol model w l } { + set res {} + # puts "$instance $model $symbol w=$w l=$l nf=$nf" + if { [string is double $w] && [string is double $l] } { + + if { $w < 0.5e-6 } { + append res "${instance} ($model): resistor width is too small, w = $w, min. w > 0.5u" \n + } + + if { $l < 0.5e-6 } { + append res "${instance} ($model): resistor length is too small, l = $l, min. l > 0.5u" \n + } + } + return $res +} +# IHP SG13G2 MiM capacitor dimension checks +proc mim_drc {instance symbol model w l } { + set res {} + + if { [string is double $w] && [string is double $l] } { + set area [expr { double($w) * double($l) * 1.0e+12}] + + if { $w < 1.14e-6 } { + append res "${instance} ($model): MiM capacitor width is too small, w = $w, min. w > 1.14 um" \n + } + + if { $area < 1.3 } { + append res "${instance} ($model): MiM capacitor area is too small, area = $area, min. area > 1.3 um2" \n + } + + if { $area > 5625.0 } { + append res "${instance} ($model): MiM capacitor area is too big, area = $area, max. area < 5625.0 um2" \n + } + } + return $res +} +# IHP SG13G2 HBT dimension checks +proc hbt_drc {instance symbol model Nx El } { + set res {} + # puts "$instance $model $symbol w=$w l=$l nf=$nf" + if { [string is integer $Nx] || [string is double $El]} { + + + switch -regexp $model { + {npn13G2$} { + if { $Nx < 1 } { + append res "${instance} ($model): Number of emmiters Nx = $Nx must be in range 1-10" \n + } + if { $Nx > 10 } { + append res "${instance} ($model): Number of emitters Nx = $Nx must be in range 1-10" \n + } + } + {npn13G2l$} { + if { $Nx < 1 } { + append res "${instance} ($model): Number of emmiters Nx = $Nx must be in range 1-4" \n + } + if { $Nx > 4 } { + append res "${instance} ($model): Number of emitters Nx = $Nx must be in range 1-4" \n + } + if { $El < 1.0 } { + append res "${instance} ($model): Emitter length El = $El too small, min. El > 1.0 " \n + } + if { $El > 2.5 } { + append res "${instance} ($model): Emitter length El = $El too big, max. El < 2.5 " \n + } + } + {npn13G2v$} { + if { $Nx < 1 } { + append res "${instance} ($model): Number of emmiters Nx = $Nx must be in range 1-4" \n + } + if { $Nx > 4 } { + append res "${instance} ($model): Number of emitters Nx = $Nx must be in range 1-4" \n + } + if { $El < 1.0 } { + append res "${instance} ($model): Emitter length El = $El too small, min. El > 1.0 " \n + } + if { $El > 5 } { + append res "${instance} ($model): Emitter length El = $El too big, max. El <= 5 " \n + } + } + + {npn13G2_5t$} { + if { $Nx < 1 } { + append res "${instance} ($model): Number of emmiters Nx = $Nx must be in range 1-10" \n + } + if { $Nx > 10 } { + append res "${instance} ($model): Number of emitters Nx = $Nx must be in range 1-10" \n + } + } + {npn13G2l_5t$} { + if { $Nx < 1 } { + append res "${instance} ($model): Number of emmiters Nx = $Nx must be in range 1-4" \n + } + if { $Nx > 4 } { + append res "${instance} ($model): Number of emitters Nx = $Nx must be in range 1-4" \n + } + if { $El < 1.0 } { + append res "${instance} ($model): Emitter length El = $El too small, min. El > 1.0 " \n + } + if { $El > 2.5 } { + append res "${instance} ($model): Emitter length El = $El too big, max. El < 2.5 " \n + } + } + {npn13G2v_5t$} { + if { $Nx < 1 } { + append res "${instance} ($model): Number of emmiters Nx = $Nx must be in range 1-4" \n + } + if { $Nx > 4 } { + append res "${instance} ($model): Number of emitters Nx = $Nx must be in range 1-4" \n + } + if { $El < 1.0 } { + append res "${instance} ($model): Emitter length El = $El too small, min. El > 1.0 " \n + } + if { $El > 5 } { + append res "${instance} ($model): Emitter length El = $El too big, max. El <= 5 " \n + } + } + } ;# switch + } + return $res +} +# IHP SG13G2 HBT diodes checks +proc diode_drc {instance symbol model w l } { + set res {} + regsub {u$} $w {} w + regsub {u$} $l {} l + # puts "$instance $model $symbol w=$w l=$l nf=$nf" + if { [string is double $w] && [string is double $l]} { + + switch -regexp $model { + {dantenna} { + if { $w < 0.78 } { + append res "${instance} ($model): Diode width w = $w too small, min w > 0.78 um" \n + } + if { $l < 0.78 } { + append res "${instance} ($model): Diode length l = $l too small, min l > 0.78 um" \n + } + } + {dpantenna} { + if { $w < 0.78 } { + append res "${instance} ($model): Diode width w = $w too small, min w > 0.78 um" \n + } + if { $l < 0.78 } { + append res "${instance} ($model): Diode length l = $l too small, min l > 0.78 um" \n + } + } + } ;# switch + } + return $res +} + + +##################### save and display MOSFET parameters ##################### + +# writes the .save instructions for given FET instance +proc write_save_lines {type model schpath spiceprefix instname} { + global sch_expand + if {[regexp {[pn]mos} $type]} { + set m n$model + set devpath [string tolower @n.$schpath$spiceprefix$instname.$m] + + append sch_expand(savelist) ".save $devpath\[gm\]\n" + append sch_expand(savelist) ".save $devpath\[gds\]\n" + append sch_expand(savelist) ".save $devpath\[vth\]\n" + append sch_expand(savelist) ".save $devpath\[vdss\]\n" + append sch_expand(savelist) ".save $devpath\[cgg\]\n" + append sch_expand(savelist) ".save $devpath\[cgsol\]\n" + append sch_expand(savelist) ".save $devpath\[cgdol\]\n" + } +} + +############ sch_expand +# This proc traverses the hierarchy and prints all instances in design. +proc sch_expand {{only_subckts 1} {all_hierarchy 1} {pattern {.*}}} { + global sch_expand keep_symbols + set sch_expand(savelist) {} + set sch_expand(only_subckts) $only_subckts + set sch_expand(all_hierarchy) $all_hierarchy + set sch_expand(startpath) [string length [xschem get sch_path]] + set save_keep $keep_symbols + set keep_symbols 1 + xschem unselect_all + xschem set no_draw 1 ;# disable screen update + xschem set no_undo 1 ;# disable undo + + hier_sch_expand 0 $only_subckts $all_hierarchy $pattern + + xschem set no_draw 0 + xschem set no_undo 0 + set keep_symbols $save_keep + return {} +} + +# recursive procedure used by sch_expand +proc hier_sch_expand {{level 0} {only_subckts 0} {all_hierarchy 1} {pattern {.*}}} { + global nolist_libs sch_expand + + set schpath [string range [xschem get sch_path] $sch_expand(startpath) end] + set instances [xschem get instances] + for {set i 0} { $i < $instances} { incr i} { + set instname [xschem getprop instance $i name] + # puts "hier_sch_expand: instname=$instname schpath=$schpath" + set symbol [xschem getprop instance $i cell::name] + set spiceprefix [xschem getprop instance $i spiceprefix] + set model [xschem translate $instname @model] + set abs_symbol [abs_sym_path $symbol] + set type [xschem getprop symbol $symbol type] + + if {$only_subckts && ($type ne {subcircuit})} { continue } + set skip 0 + foreach j $nolist_libs { + if {[regexp $j $abs_symbol]} { + set skip 1 + break + } + } + if {$skip} { continue } + if {$type ne {subcircuit} && ![regexp $pattern $type]} { + continue + } + + write_save_lines $type $model $schpath $spiceprefix $instname + + if {$type eq {subcircuit} && $all_hierarchy} { + xschem select instance $i fast nodraw + # puts "descend: [xschem translate $i @name]" + set descended [xschem descend 1 6] + if {$descended} { + incr level + set dp [hier_sch_expand $level $only_subckts 1 $pattern] + xschem go_back 1 + incr level -1 + } + } + } + return 1 +} +############ /sch_expand + +# generate the .save lines to save all mos parameters +proc save_fet_params {} { + global sch_expand + sch_expand 0 1 {[pn]mos} + return "* Place this .save file with a .include line in your testbench\n\n$sch_expand(savelist)" +} + +# displays mos parameters simulation data , used in symbol sky130_fd_pr/annotate_fet_params.sym +proc display_fet_params {instname} { + set txt {} + set schpath [xschem get sim_sch_path] + set symbol [xschem getprop instance $instname cell::name] + set spiceprefix [xschem getprop instance $instname spiceprefix] + set model [xschem translate $instname @model] + set type [xschem getprop symbol $symbol type] + + if {[regexp {[pn]mos} $type]} { + set m n$model + set devpath [string tolower @n.$schpath$spiceprefix$instname.$m] + + append txt "gm = [to_eng [xschem raw value $devpath\[gm\] -1]]\n" + append txt "gds = [to_eng [xschem raw value $devpath\[gds\] -1]]\n" + append txt "vth = [to_eng [xschem raw value v($devpath\[vth\]) -1]]\n" + append txt "vdss = [to_eng [xschem raw value v($devpath\[vdss\]) -1]]\n" + append txt "cgg = [to_eng [xschem raw value $devpath\[cgg\] -1]]\n" + append txt "cgdol = [to_eng [xschem raw value $devpath\[cgdol\] -1]]\n" + append txt "cgsol = [to_eng [xschem raw value $devpath\[cgsol\] -1]]\n" + set pi 3.141592654 + set gm [xschem raw value $devpath\[gm\] -1] + set cgg [xschem raw value $devpath\[cgg\] -1] + set cgdol [xschem raw value $devpath\[cgdol\] -1] + set cgsol [xschem raw value $devpath\[cgsol\] -1] + if {[catch { expr $gm / 2 / $pi / ($cgg + $cgdol + $cgsol)} ft]} { + set ft {} + } + append txt "ft = [to_eng ${ft}]\n" + } + return $txt +} + + +# these commands are executed when xschem has completed initialization. +# add a SKY130 menu entry +proc menupdk {} { + global has_x netlist_dir + if { [info exists has_x] } { + set topwin [xschem get top_path] + + # insert before the 'Netlist' menu + $topwin.menubar insert Netlist cascade -label IHP -menu $topwin.menubar.ihp + menu $topwin.menubar.ihp -tearoff 0 + + ## Create one entry + $topwin.menubar.ihp add command -label {Create FET .save file} -command { + write_data [save_fet_params] $netlist_dir/[file rootname [file tail [xschem get current_name]]].save + textwindow $netlist_dir/[file rootname [file tail [xschem get current_name]]].save + } + ## Create one entry + $topwin.menubar.ihp add command -label {Add models symbol} -command { + xschem place_symbol devices/code_shown.sym { +name=TT_MODELS +only_toplevel=true +value=" +** IHP models +.lib cornerMOSlv.lib mos_tt +.lib cornerMOShv.lib mos_tt +" +spice_ignore=false + } + } + + ## Create one entry + $topwin.menubar.ihp add command -label {Add FET param annotator} -command { + proc get_sel_inst_name {} { + set selset [lindex [xschem selected_set] 0] + if {$selset ne {}} { + set name [xschem getprop instance $selset name] + xschem place_symbol sg13g2_pr/annotate_fet_params.sym "name=annot1 ref=$name" + } else { + xschem place_symbol sg13g2_pr/annotate_fet_params.sym + } + } + get_sel_inst_name + } + } +} + +# execute menupdk when xschem initialization is completed +append postinit_commands "menupdk\n" + +##################### /save and display MOSFET parameters #####################