Spyglass:参数(parameter)及其设置方式
相关阅读
Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm=1001.2014.3001.5482
简介
Spyglass中的参数(parameter)用于控制目标(Goal)运行时的规则检查,通常一个参数会影响多个规则(Rule),图1展示了allow_combo_logic参数的相关信息。
图1 allow_combo_logic参数
设置手段
设置参数的手段有很多,如在sg_shell中使用set_parameter命令、在GUI界面中进行设置、直接修改项目文件,下面将对此进行详细说明。
sg_shell
// 例1
sg_shell> current_goal lint/lint_rtl -alltop
sg_shell> set_parameter fast yes
yes
sg_shell> get_parameter fast
yes
sg_shell> set_parameter fast -default
no
sg_shell> get_parameter fast
no
例1使用set_parameter命令设置fast参数的值为yes,并随后使用get_parameter命令显示了该参数的当前值,接着使用-default选项设置该参数为其默认值。
顺带一提,保存项目时Spyglass会自动在项目文件中加入set_parameter命令以保存项目的设置信息。
GUI界面
选择Goal Setup阶段,并选择一个目标,使其绿色高亮,如图2所示。
图2 选择目标
点击Setup,此时所有与该目标相关的参数将显示在界面中,如图3所示。
图3 参数设置界面
此时用户便可以根据自身需求对参数进行设置,顺带一提,保存项目时Spyglass会自动在项目文件中加入set_parameter命令以保存项目的设置信息。
需要注意的是,参数设置界面的一些参数使用加粗显示,这表示该参数已进行了设置、存在默认值覆盖或已废弃。
项目文件
// 例2
##Goal Setup Section
current_methodology $SPYGLASS_HOME/GuideWare/latest/block/rtl_handoffcurrent_goal lint/lint_rtl -alltop
set_parameter fast yes
直接将set_parameter命令添加到项目文件也是可行的,如例2所示,一旦项目文件在打开时被人为修改,Spyglass会立刻重新读取项目文件。
作用域
值得注意的是,设置手段一节中的三种情况都是在目标作用域设置参数,只会影响当前目标,如果在方法(Methodology)作用域进行设置,则会影响当前方法下的所有目标(如果没有在目标作用域设置该参数,则会继承来自方法的参数设置),下面以sg_shell为例进行说明。
// 例3
sg_shell> current_goal none
sg_shell> set_parameter fast yes
yes
sg_shell> current_goal lint/lint_rtl -alltop
sg_shell> get_parameter fast
yes
例3中使用current_goal none命令退出目标作用域而进入方法作用域,并设置了fast参数,由于该参数在目标作用域并未进行设置,因此继承了来自方法作用域的参数值。
默认值覆盖
许多参数拥有自己的默认值,可以使用report_paramter [get_parameter]命令进行查看,如例4所示。
// 例4
sg_shell> current_goal lint/lint_rtl -alltop
current_goal: warning: goal `lint/lint_rtl' was run but not saved last timerun results and goal settings might not match
current_goal: info: loading goal `lint/lint_rtl' (in progress)
current_goal: info: finished loading goal `lint/lint_rtl' (ok)sg_shell> report_parameter [get_parameter]
Parameters in the current scope:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Parameter Name Current Value Default Value
===============================================================================
W416_vhdl_only no no
add_signature_expression no no
allow_clk_in_condition no no
allow_combo_logic_base no no
allviol no no
assume_driver_load yes no
attach_violation_tag no no
buf_count -1 -1
checkInHierarchy yes yes
checkOperatorOverload yes yes
checkRTLCInst yes no
check_any_bit_for_xz no no
check_assert no no
check_assign_pattern no no
check_bbox_driver no no
check_block_comments no no
check_clock_cell 0 0
check_complete_design no no
check_concat_max_width no no
check_counter_assignment no no
check_default_value yes yes
check_enum_decl no no
check_explicit_width no no
check_gate_primitives no no
check_genvar no no
check_implicit_senselist no no
check_initialization_assignment no no
check_inst_connections no no
check_latch no no
check_loop_breakers no no
check_only_cell_attr no no
check_pad_concat no no
check_parameter no no
check_sequential no no
check_shifted_only no no
check_shifted_width no no
check_sign_extend no no
check_static_value no no
check_task_calls no no
check_temporary_flop no no
check_xassign_casedefault no no
checkblocking no no
checkconstassign yes no
checkfullbus yes no
checkfullrecord yes no
checkfullstruct no no
checknonblocking no no
checksyncreset yes yes
chkTopModule yes no
clk_EnableLatch yes yes
combloop_waiver_compat no no
considerInoutAsOutput no no
consider_sub_as_add no no
depth_ml -1 -1
disable_flattened_net no no
disable_rtl_deadcode no no
disable_signal_usage_report no no
do_not_run_W71 no no
dump_array_bits no no
effort_level 100 100
enableE2Q yes no
enable_busmerging no no
enable_csv no no
enable_latch_based_clusters no no
enable_rtl_deadcode no no
evaluate_for_loops no no
fast no no
filter_mark_open no no
generate_connpoint_report no no
handle_case_select 64 64
handle_equivalent_drivers no no
handle_greybox yes yes
handle_hier_clock_reset no no
handle_large_bus no no
handle_latch_setreset no no
handle_mux_select no no
handle_negation_semantics no no
handle_shift_op no no
handle_static_caselabels no no
handle_zero_padding no no
ignoreCellName <empty_value> <empty_value>
ignoreLatchHierarchy <empty_value> <empty_value>
ignoreModuleInstance yes no
ignoreRealLatch no no
ignoreRtlBuffer no no
ignoreSRlatch no no
ignoreSeqProcess no no
ignore_auto_function_return no no
ignore_bitwise_assign_in_forloop no no
ignore_bitwiseor_assignment no no
ignore_case_compare_op no no
ignore_case_inside no no
ignore_cell 0 0
ignore_concat_expr no no
ignore_const_outport no no
ignore_default_supply no no
ignore_deliberately_unconnected no no
ignore_explicit_ports no no
ignore_flops no no
ignore_forloop_indexes no no
ignore_fsm_counter no no
ignore_fullcase_default no no
ignore_greybox_driver no no
ignore_hanging_flop no no
ignore_hier_scope_var no no
ignore_if_case_statement no no
ignore_inout no no
ignore_integer no no
ignore_integer_constant_labels no no
ignore_interface_locals no no
ignore_internal_loops no no
ignore_internal_nets no no
ignore_iopad no no
ignore_libcell_traversal no no
ignore_local_variables no no
ignore_memory no no
ignore_mult_and_div no no
ignore_multi_assign_in_forloop no no
ignore_multi_assign_in_genforblock no no
ignore_nonBlockCondition no no
ignore_non_reset no no
ignore_nonstatic_counter no no
ignore_padding no no
ignore_param_case_condition no no
ignore_param_type no no
ignore_parameter no no
ignore_qmark no no
ignore_reinitialization no no
ignore_sca_constant no no
ignore_signed_expressions no no
ignore_sync_reset no no
ignore_truncation no no
ignore_unique_and_priority no no
ignore_unloaded_inst no no
ignore_unloaded_port no no
ignore_unused_flop no no
ignore_wildcard_operators no no
ignore_within_range_labels no no
inv_count 1 1
latch_chain_max_length 2 2
loop_unroll_effort 1 1
max_flop_count 3 3
net_count 10 10
new_flow_width yes yes
no_strict <empty_value> <empty_value>
nocheck_always_init no no
nocheckoverflow yes ImproperRangeIndex-ML,LINT_IMPROPER_RANGE_INDEX,MTK_ImproperRangeIndex
not_used_signal nil nil
overlappingLatchLoops yes yes
overlappingLoops yes yes
pragma_list_ml synopsys synopsys
process_complete_condop no no
reportHangingLatch no no
reportLatchHierarchy no no
reportLibLatch no no
report_all_connections no no
report_all_messages no no
report_all_pins no no
report_all_rst no no
report_all_rst_count 999999 999999
report_allclk no no
report_allclk_optimized no no
report_assignment default default
report_blackbox_inst no no
report_boundary_nets no no
report_clock_reset_loops no no
report_clock_use no no
report_const_connect no no
report_expr_type no no
report_floating_source no no
report_flop_clock_loop no no
report_flop_reset_loop no no
report_hierarchy no no
report_inferred_cell yes no
report_module_configuration no no
report_mux_select yes yes
report_only_bitwise no no
report_only_from_one_hierarchy no no
report_reason no no
report_single_violation no no
report_sorted_order yes yes
report_static_assign no no
report_struct_name_only no no
report_through_mux no no
report_violation_type both both
reportalwayslatch no no
reportconstassign no no
reportsimilarassgn no no
reset_synchronizer_modname sgdummy1,sgdummy2 sgdummy1,sgdummy2
search_const_net_extended yes yes
show_connected_net no no
sign_extend_func_names EXTEND,resize EXTEND,resize
simplesense no no
skip_fl_check_on_constant no no
skip_lib_cell_checking no no
stop_at_no_func_view no no
strict W342,W343 no
supplyHigh __null__ __null__
supplyLow __null__ __null__
traverse_function no no
traverse_through_mux no no
treat_latch_as_combinational yes no
use_carry_bit W164a,W164b W164a,W164b
use_lrm_width no no
use_natural_width no no
use_secondary_message no no
waiver_compat no no
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
这些默认值可以被覆盖,只需要修改目标文件(.spq)即可,如例5将lint/lint_rtl目标的allviol参数的默认值覆盖为yes。
// 例5
// lint_rtl.spq文件
-allviol=yes
例6展示了是默认值覆盖后的情况,可以看出虽然显示默认值并没有变化还是no,但是使用-default选项时设置的默认值已经变成了yes。
// 例6
sg_shell> report_parameter [get_parameter]
Parameters in the current scope:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Parameter Name Current Value Default Value
===============================================================================
W416_vhdl_only no no
add_signature_expression no no
allow_clk_in_condition no no
allow_combo_logic_base no no
allviol yes no
assume_driver_load yes no
attach_violation_tag no no
buf_count -1 -1
checkInHierarchy yes yes
checkOperatorOverload yes yes
checkRTLCInst yes no
check_any_bit_for_xz no no
check_assert no no
check_assign_pattern no no
check_bbox_driver no no
check_block_comments no no
check_clock_cell 0 0
check_complete_design no no
check_concat_max_width no no
check_counter_assignment no no
check_default_value yes yes
check_enum_decl no no
check_explicit_width no no
check_gate_primitives no no
check_genvar no no
check_implicit_senselist no no
check_initialization_assignment no no
check_inst_connections no no
check_latch no no
check_loop_breakers no no
check_only_cell_attr no no
check_pad_concat no no
check_parameter no no
check_sequential no no
check_shifted_only no no
check_shifted_width no no
check_sign_extend no no
check_static_value no no
check_task_calls no no
check_temporary_flop no no
check_xassign_casedefault no no
checkblocking no no
checkconstassign yes no
checkfullbus yes no
checkfullrecord yes no
checkfullstruct no no
checknonblocking no no
checksyncreset yes yes
chkTopModule yes no
clk_EnableLatch yes yes
combloop_waiver_compat no no
considerInoutAsOutput no no
consider_sub_as_add no no
depth_ml -1 -1
disable_flattened_net no no
disable_rtl_deadcode no no
disable_signal_usage_report no no
do_not_run_W71 no no
dump_array_bits no no
effort_level 100 100
enableE2Q yes no
enable_busmerging no no
enable_csv no no
enable_latch_based_clusters no no
enable_rtl_deadcode no no
evaluate_for_loops no no
fast no no
filter_mark_open no no
generate_connpoint_report no no
handle_case_select 64 64
handle_equivalent_drivers no no
handle_greybox yes yes
handle_hier_clock_reset no no
handle_large_bus no no
handle_latch_setreset no no
handle_mux_select no no
handle_negation_semantics no no
handle_shift_op no no
handle_static_caselabels no no
handle_zero_padding no no
ignoreCellName <empty_value> <empty_value>
ignoreLatchHierarchy <empty_value> <empty_value>
ignoreModuleInstance yes no
ignoreRealLatch no no
ignoreRtlBuffer no no
ignoreSRlatch no no
ignoreSeqProcess no no
ignore_auto_function_return no no
ignore_bitwise_assign_in_forloop no no
ignore_bitwiseor_assignment no no
ignore_case_compare_op no no
ignore_case_inside no no
ignore_cell 0 0
ignore_concat_expr no no
ignore_const_outport no no
ignore_default_supply no no
ignore_deliberately_unconnected no no
ignore_explicit_ports no no
ignore_flops no no
ignore_forloop_indexes no no
ignore_fsm_counter no no
ignore_fullcase_default no no
ignore_greybox_driver no no
ignore_hanging_flop no no
ignore_hier_scope_var no no
ignore_if_case_statement no no
ignore_inout no no
ignore_integer no no
ignore_integer_constant_labels no no
ignore_interface_locals no no
ignore_internal_loops no no
ignore_internal_nets no no
ignore_iopad no no
ignore_libcell_traversal no no
ignore_local_variables no no
ignore_memory no no
ignore_mult_and_div no no
ignore_multi_assign_in_forloop no no
ignore_multi_assign_in_genforblock no no
ignore_nonBlockCondition no no
ignore_non_reset no no
ignore_nonstatic_counter no no
ignore_padding no no
ignore_param_case_condition no no
ignore_param_type no no
ignore_parameter no no
ignore_qmark no no
ignore_reinitialization no no
ignore_sca_constant no no
ignore_signed_expressions no no
ignore_sync_reset no no
ignore_truncation no no
ignore_unique_and_priority no no
ignore_unloaded_inst no no
ignore_unloaded_port no no
ignore_unused_flop no no
ignore_wildcard_operators no no
ignore_within_range_labels no no
inv_count 1 1
latch_chain_max_length 2 2
loop_unroll_effort 1 1
max_flop_count 3 3
net_count 10 10
new_flow_width yes yes
no_strict <empty_value> <empty_value>
nocheck_always_init no no
nocheckoverflow yes ImproperRangeIndex-ML,LINT_IMPROPER_RANGE_INDEX,MTK_ImproperRangeIndex
not_used_signal nil nil
overlappingLatchLoops yes yes
overlappingLoops yes yes
pragma_list_ml synopsys synopsys
process_complete_condop no no
reportHangingLatch no no
reportLatchHierarchy no no
reportLibLatch no no
report_all_connections no no
report_all_messages no no
report_all_pins no no
report_all_rst no no
report_all_rst_count 999999 999999
report_allclk no no
report_allclk_optimized no no
report_assignment default default
report_blackbox_inst no no
report_boundary_nets no no
report_clock_reset_loops no no
report_clock_use no no
report_const_connect no no
report_expr_type no no
report_floating_source no no
report_flop_clock_loop no no
report_flop_reset_loop no no
report_hierarchy no no
report_inferred_cell yes no
report_module_configuration no no
report_mux_select yes yes
report_only_bitwise no no
report_only_from_one_hierarchy no no
report_reason no no
report_single_violation no no
report_sorted_order yes yes
report_static_assign no no
report_struct_name_only no no
report_through_mux no no
report_violation_type both both
reportalwayslatch no no
reportconstassign no no
reportsimilarassgn no no
reset_synchronizer_modname sgdummy1,sgdummy2 sgdummy1,sgdummy2
search_const_net_extended yes yes
show_connected_net no no
sign_extend_func_names EXTEND,resize EXTEND,resize
simplesense no no
skip_fl_check_on_constant no no
skip_lib_cell_checking no no
stop_at_no_func_view no no
strict W342,W343 no
supplyHigh __null__ __null__
supplyLow __null__ __null__
traverse_function no no
traverse_through_mux no no
treat_latch_as_combinational yes no
use_carry_bit W164a,W164b W164a,W164b
use_lrm_width no no
use_natural_width no no
use_secondary_message no no
waiver_compat no no
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++sg_shell> set_parameter allviol -default
yes
默认值覆盖不被认为是对参数的设置,因此可以继承来自方法的参数设置。