1/** 2 * Name: synopsys 3 * Description: Synopsys dc shell scripting language 4 * 5 * Author: Brian Silveira (brian@nortel.ca) 6 * Hartley Horwitz (hars@nortel.ca) 7 */ 8 9state synopsys extends HighlightEntry 10{ 11 /* 12 * Synopsys allows globing...so pick out constructs like 13 * /foo/bar/* and just print them out. i.e. don't treat the 14 * ending like a comment! 15 */ 16 /[A-z0-9_-]\/\*/{ 17 language_print($0); 18 } 19 20 21 /* Comments. 22 * Synopsys DC-shell uses C-style comments 23 */ 24 /\/\*/ { 25 comment_face (true); 26 language_print ($0); 27 call (c_comment); 28 comment_face (false); 29 } 30 31 /* String constants. */ 32 /\"/ { 33 string_face (true); 34 language_print ($0); 35 call (c_string); 36 string_face (false); 37 } 38 39 /* I use make-regexp in emacs which uses a list of strings to 40 generate a regular expression. 41 (setq synopsys-keywords-enscript 42 '("alias" "all_connected" "analyze" "balance_buffer" 43 "balance_registers" "break" "cd" "change_link" "change_names" 44 "characterize" "check_design" "check_test" "check_timing" 45 "continue" "compile" "copy_design" "create_clock" "drive_of" 46 "echo" "elaborate" "else" "exit" "get_attribute" "get_license" 47 "get_unix_variable" "group" "group_path" "include" 48 "insert_scan" "insert_test" "link" "list_designs" 49 "list_instances" "list_libs" "load_of" "quit" "read" 50 "read_lib" "read_timing" "remove_attribute" 51 "remove_constraint" "remove_design" "remove_input_delay" 52 "remove_lib" "remove_clock" "remove_cell" "remove_license" 53 "remove_output_delay" "remove_unconnected_ports" 54 "rename_design" "reoptimize_design" "report_area" 55 "report_attribute" "report_cell" "report_constraint" 56 "report_design" "report_design_lib" "report_hierarchy" 57 "report_internal_loads" "report_lib" "report_multicycles" 58 "report_net" "report_port" "report_power" "report_reference" 59 "report_resources" "report_test" "report_timing" 60 "reset_design" "set_attribute" "set_boundary_optimization" 61 "set_clock_skew" "set_dont_touch" "set_dont_touch_network" 62 "set_dont_use" "set_drive" "set_driving_cell" "set_equal" 63 "set_disable_timing" "set_false_path" "set_flatten" 64 "set_implementation" "set_fix_hold" "set_input_delay" 65 "set_load" "set_logic_one" "set_logic_zero" "set_max_area" 66 "set_max_capacitance" "set_max_fanout" "set_max_transition" 67 "set_multicycle_path" "set_operating_conditions" 68 "set_output_delay" "set_scan_style" "set_signal_type" 69 "set_structure" "set_test_methodology" "set_unconnected" 70 "set_wire_load" "unalias" "sh" "ungroup" "uniquify" 71 "update_lib" "which" "write" "write_constraints" 72 "write_script" "write_timing" "if" "foreach" "find" "while" 73 "-all" "-all_violators" "-allowed" "-attributes" "-base_name" 74 "-boundary_optimization" "-cell" "-cell_name" "-clock" 75 "-context" "-connections" "-constraints" "-delay" "-design" 76 "-design_name" "-depth" "-drive" "-except" "-f" "-fall_delay" 77 "-flat" "-format" "-from" "-hierarchy" "-hier" "-hold" 78 "-incremental_mapping" "-ideal" "-ignored" "-in_place" 79 "-logic" "-library" "-map_effort" "-mode" "-max_paths" 80 "-max_scan_chain_length" "-no_disable" "-methodology" "-name" 81 "-net" "-new_name" "-none" "-nosplit" "-nworst" "-output" 82 "-path" "-parameters" "-period" "-pin_load" "-propagated" 83 "-reference" "-rise_delay" "-rules" "-skew" "-setup" 84 "-through" "-to" "-type" "-uncertainty" "-plus_uncertainty" 85 "-minus_uncertainty" "-update" "-verify" "-verbose" 86 "-waveform" "-wire_load" "-work" "-weight" "-worst" 87 "actel_qbar_opto" "actel_seq_opto" "auto_link_disable" 88 "auto_link_options" "auto_wire_load_selection" 89 "bc_enable_chaining" "bc_enable_multi_cycle" 90 "bc_enable_speculative_execution" "bc_fsm_coding_style" 91 "bc_time_all_sequential_op_bindings" "bus_extraction_style" 92 "bus_inference_style" "bus_naming_style" 93 "change_names_dont_change_bus_members" 94 "change_names_update_inst_tree" "command_log_file" "company" 95 "compatibility_version" 96 "compile_assume_fully_decoded_three_state_busses" 97 "compile_create_mux_op_hierarchy" 98 "compile_default_critical_range" 99 "compile_disable_area_opt_during_inplace_opt" 100 "compile_disable_hierarchical_inverter_opt" 101 "compile_dont_touch_annotated_cell_during_inplace_opt" 102 "compile_fix_multiple_port_nets" 103 "compile_ignore_area_during_inplace_opt" 104 "compile_ignore_footprint_during_inplace_opt" 105 "compile_implementation_selection" 106 "compile_inplace_changed_list_file_name" 107 "compile_instance_name_prefix" "compile_instance_name_suffix" 108 "compile_mux_no_boundary_optimization" 109 "compile_negative_logic_methodology" 110 "compile_no_new_cells_at_top_level" 111 "compile_ok_to_buffer_during_inplace_opt" 112 "compile_preserve_subdesign_interfaces" 113 "compile_preserve_sync_resets" 114 "compile_update_annotated_delays_during_inplace_opt" 115 "compile_use_fast_delay_mode" "compile_use_low_timing_effort" 116 "context_check_status" "current_design" "current_instance" 117 "dc_shell_status" "default_name_rules" "design_library_file" 118 "designer" "duplicate_ports" "echo_include_commands" 119 "enable_page_mode" "exit_delete_filename_log_file" 120 "filename_log_file" "find_converts_name_lists" 121 "find_ignore_case" "hdl_keep_licenses" "hdl_naming_threshold" 122 "hdl_preferred_license" "hdl_variables" 123 "hdlin_advisor_directory" "hdlin_auto_save_templates" 124 "hdlin_check_no_latch" 125 "hdlin_dont_infer_mux_for_resource_sharing" 126 "hdlin_enable_advisor" "hdlin_ff_always_async_set_reset" 127 "hdlin_ff_always_sync_set_reset" "hdlin_files" 128 "hdlin_hide_resource_line_numbers" "hdlin_infer_mux" 129 "hdlin_keep_feedback" "hdlin_keep_inv_feedback" 130 "hdlin_mux_size_limit" "hdlin_reg_report_length" 131 "hdlin_replace_synthetic" "hdlin_report_inferred_modules" 132 "hdlin_resource_allocation" "hdlin_resource_implementation" 133 "hdlin_source_to_gates_mode" "hdlin_sync_set_reset" 134 "hdlin_synch_set_reset" "hdlin_translate_off_skip_text" 135 "link_force_case" "link_library" 136 "port_complement_naming_style" 137 "reoptimize_design_changed_list_file_name" 138 "sdfin_fall_cell_delay_type" "sdfin_fall_net_delay_type" 139 "sdfin_min_fall_cell_delay" "sdfin_min_fall_net_delay" 140 "sdfin_min_rise_cell_delay" "sdfin_min_rise_net_delay" 141 "sdfin_rise_cell_delay_type" "sdfin_rise_net_delay_type" 142 "sdfin_top_instance_name" 143 "sdfout_allow_non_positive_constraints" 144 "sdfout_min_fall_cell_delay" "sdfout_min_fall_net_delay" 145 "sdfout_min_rise_cell_delay" "sdfout_min_rise_net_delay" 146 "sdfout_time_scale" "sdfout_top_instance_name" 147 "sdfout_write_to_output" "search_path" "shell_prompt" 148 "suppress_errors" "synlib_dont_get_license" 149 "syntax_check_status" "synthetic_library" "target_library" 150 "uniquify_naming_style" "verbose_messages")) 151 */ 152 153 /\ba(l(ias|l_connected)|nalyze|uto_(link_(disable|options)\ 154|wire_load_selection))|b(alance_(buffer|registers)\ 155|c_(enable_(chaining|multi_cycle|speculative_execution)\ 156|fsm_coding_style|time_all_sequential_op_bindings)|reak\ 157|us_(extraction_style|inference_style|naming_style))\ 158|c(d|h(a(nge_(link|names(|_(dont_change_bus_members|update_inst_tree)))\ 159|racterize)|eck_(design|t(est|iming)))|o(m(mand_log_file|p(a(ny\ 160|tibility_version)|ile(|_(assume_fully_decoded_three_state_busses\ 161|create_mux_op_hierarchy|d(efault_critical_range\ 162|isable_(area_opt_during_inplace_opt|hierarchical_inverter_opt)\ 163|ont_touch_annotated_cell_during_inplace_opt)|fix_multiple_port_nets\ 164|i(gnore_(area_during_inplace_opt|footprint_during_inplace_opt)\ 165|mplementation_selection|n(place_changed_list_file_name\ 166|stance_name_(prefix|suffix)))|mux_no_boundary_optimization\ 167|n(egative_logic_methodology|o_new_cells_at_top_level)\ 168|ok_to_buffer_during_inplace_opt|preserve_s(ubdesign_interfaces\ 169|ync_resets)|u(pdate_annotated_delays_during_inplace_opt\ 170|se_(fast_delay_mode|low_timing_effort))))))|nt(ext_check_status|inue)\ 171|py_design)|reate_clock|urrent_(design|instance))|d(c_shell_status\ 172|e(fault_name_rules|sign(_library_file|er))|rive_of|uplicate_ports)|e(cho(\ 173|_include_commands)|l(aborate|se)|nable_page_mode|xit(\ 174|_delete_filename_log_file))|f(i(lename_log_file|nd(|_(converts_name_lists\ 175|ignore_case)))|oreach)|g(et_(attribute|license|unix_variable)|roup(\ 176|_path))|hdl(_(keep_licenses|naming_threshold|preferred_license|variables)\ 177|in_(a(dvisor_directory|uto_save_templates)|check_no_latch\ 178|dont_infer_mux_for_resource_sharing|enable_advisor\ 179|f(f_always_(async_set_reset|sync_set_reset)|iles)\ 180|hide_resource_line_numbers|infer_mux|keep_(feedback|inv_feedback)\ 181|mux_size_limit|re(g_report_length|p(lace_synthetic|ort_inferred_modules)\ 182|source_(allocation|implementation))|s(ource_to_gates_mode|ync(_set_reset\ 183|h_set_reset))|translate_off_skip_text))|i(f|n(clude|sert_(scan|test)))\ 184|l(i(nk(|_(force_case|library))|st_(designs|instances|libs))|oad_of)\ 185|port_complement_naming_style|quit|re(ad(|_(lib|timing))|move_(attribute\ 186|c(ell|lock|onstraint)|design|input_delay|li(b|cense)|output_delay\ 187|unconnected_ports)|name_design|optimize_design(|_changed_list_file_name)\ 188|port_(a(rea|ttribute)|c(ell|onstraint)|design(|_lib)|hierarchy\ 189|internal_loads|lib|multicycles|net|po(rt|wer)|re(ference|sources)|t(est\ 190|iming))|set_design)|s(df(in_(fall_(cell_delay_type|net_delay_type)\ 191|min_(fall_(cell_delay|net_delay)|rise_(cell_delay|net_delay))\ 192|rise_(cell_delay_type|net_delay_type)|top_instance_name)\ 193|out_(allow_non_positive_constraints|min_(fall_(cell_delay|net_delay)\ 194|rise_(cell_delay|net_delay))|t(ime_scale|op_instance_name)\ 195|write_to_output))|e(arch_path|t_(attribute|boundary_optimization\ 196|clock_skew|d(isable_timing|ont_(touch(|_network)|use)|riv(e|ing_cell))\ 197|equal|f(alse_path|ix_hold|latten)|i(mplementation|nput_delay)|lo(ad\ 198|gic_(one|zero))|m(ax_(area|capacitance|fanout|transition)|ulticycle_path)\ 199|o(perating_conditions|utput_delay)|s(can_style|ignal_type|tructure)\ 200|test_methodology|unconnected|wire_load))|h(|ell_prompt)|uppress_errors\ 201|yn(lib_dont_get_license|t(ax_check_status|hetic_library)))|target_library\ 202|u(n(alias|group|iquify(|_naming_style))|pdate_lib)|verbose_messages\ 203|w(hi(ch|le)|rite(|_(constraints|script|timing)))\b/{ 204 keyword_face (true); 205 language_print ($0); 206 keyword_face (false); 207 } 208} 209 210 211/* 212Local variables: 213mode: c 214End: 215*/ 216