blob: d261f11932b3a8349349561e3df6eec0a87701f0 [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
#
# waiver file for ast
waive -rules CONST_FF -location {ast_clks_byp.sv} \
-msg {Flip-flop 'sw_clk_byp_en' is driven by constant one} \
-comment {This flip flop is supposed to change to 1 on the first clock cycle and remain there afterwards.}
waive -rules IFDEF_CODE -location {ast.sv} \
-msg {Assignment to 'ast2pad_t0_ao' contained within `else block at ast.sv} \
-comment {This ifdef statement is used for analog simulations and is OK.}
waive -rules IFDEF_CODE -location {ast.sv} \
-msg {Assignment to 'unused_analog_sigs' contained within `ifndef 'ANALOGSIM' block at} \
-comment {This ifdef statement is used for assigning "unused" signals and is OK.}
waive -rules IFDEF_CODE -location {ast.sv} \
-regexp {Assignment to 'clk_(sys|usb|aon|io)_ext' contained within `ifdef 'AST_BYPASS_CLK' block at} \
-comment {This ifdef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.}
waive -rules IFDEF_CODE -location {aon_osc.sv io_osc.sv sys_osc.sv usb_osc.sv} \
-regexp {Assignment to '(sys|usb|aon|io)_clk_dly' contained within `else block at} \
-comment {This ifdef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.}
waive -rules IFDEF_CODE -location {aon_osc.sv io_osc.sv sys_osc.sv usb_osc.sv} \
-regexp {Assignment to 'en_osc_re' contained within} \
-comment {This ifdef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.}
waive -rules IFDEF_CODE -location {aon_osc.sv} \
-regexp {Assignment to 'clk' contained within} \
-comment {This ifdef statement is fine as it is part of the FPGA/Verilator clock bypass mechanism.}
waive -rules CLOCK_EDGE -location {aon_osc.sv io_osc.sv sys_osc.sv usb_osc.sv} \
-msg {Falling edge of clock 'clk' used here, should use rising edge} \
-comment {This negedge trigger is done on purpose.}
waive -rules CLOCK_EDGE -location {ast_clks_byp.sv} \
-msg {Falling edge of clock 'clk_ast_ext_scn' used here, should use rising edge} \
-comment {This negedge trigger is done on purpose.}
waive -rules CLOCK_DRIVER -location {ast.sv} \
-regexp {'clk_src_(aon|io|sys)' is driven by instance 'u_ast_clks_byp' of module 'ast_clks_byp', and used as a clock 'clk_i' at} \
-comment {This is clock generation logic, hence it needs to drive this clock signal.}
waive -rules CLOCK_DRIVER -location {ast.sv} \
-regexp {'clk_src_(aon|io|sys)' in module 'ast_clks_byp' by port} \
-comment {This is clock generation logic, hence it needs to drive this clock signal.}
waive -rules CLOCK_DRIVER -location {ast.sv} \
-msg {'clk_o' driven in module 'gfr_clk_mux2' at} \
-comment {This is clock generation logic, hence it needs to drive this clock signal.}
waive -rules CLOCK_DRIVER -location {ast_clks_byp.sv} \
-regexp {'clk_src_(aon|io)_o' is driven by instance 'u_clk_src_(aon|io)_sel' of module 'gfr_clk_mux2', and used as a clock 'clk_i' at} \
-comment {This is clock generation logic, hence it needs to drive this clock signal.}
waive -rules CLOCK_DRIVER -location {ast_clks_byp.sv} \
-regexp {'clk_ext_scn' is driven here, and used as a clock 'clk_i' at} \
-comment {This is clock generation logic, hence it needs to drive this clock signal.}
waive -rules CLOCK_MUX -location {ast_clks_byp.sv} \
-regexp {Clock '(clk_ast_ext_scn|clk_ext_scn|clk_src_ext_usb|clk_ext_aon)' is driven by a multiplexer here, used as a clock} \
-comment {This is clock generation logic, hence it needs to drive this clock signal.}
waive -rules CLOCK_MUX -location {ast.sv} \
-regexp {Clock 'clk_aon_n' is driven by a multiplexer here, used as a clock} \
-comment {This clock inverter has a DFT mux.}
waive -rules CLOCK_MUX -location {rglts_pdm_3p3v.sv} \
-regexp {Clock 'clk_src_aon_h_n' is driven by a multiplexer here, used as a clock at } \
-comment {This signal has a DFT mux.}
waive -rules CLOCK_USE -location {gfr_clk_mux2.sv} \
-regexp {('clk_ext'|'clk_osc') is used for some other purpose, and as clock ('clk_ext_i'|'clk_osc_i') at gfr_clk_mux2.sv} \
-comment {This message pops up due to a clock OR operation.}
waive -rules CLOCK_USE -location {ast.sv} \
-regexp {'clk_ast_tlul_i' is connected to 'ast_dft' port 'clk_i', and used as a clock 'clk_i' at prim_lfsr} \
-comment {This is a valid clock signal and the LFSR runs on the bus clock here.}
waive -rules CLOCK_USE -location {ast.sv} \
-regexp {'clk_aon' is connected to 'rglts_pdm_3p3v' port 'clk_src_aon_h_i', and used as a clock} \
-comment {This is a valid clock signal and the connection is ok here.}
waive -rules CLOCK_USE -location {ast.sv} \
-regexp {'clk_ast_usb_i' is used for some other purpose, and as clock 'clk_i' at prim_generic_flop.sv} \
-comment {This is a valid clock signal and the connection is ok here.}
waive -rules INV_CLOCK -location {ast.sv rglts_pdm_3p3v.sv} \
-regexp {'(clk_aon|clk_src_aon_h_i)' is inverted, used as clock} \
-comment {These clocks are inverted.}
waive -rules RESET_DRIVER -location {aon_clk.sv io_clk.sv sys_clk.sv usb_clk.sv} \
-msg {'rst_val_n' is driven here, and used as an asynchronous reset} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {aon_clk.sv io_clk.sv sys_clk.sv usb_clk.sv} \
-regexp {'(aon|io|sys|usb)_clk_en' is driven here, and used as an asynchronous reset} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {rng.sv} \
-msg {'rst_n' is driven here, and used as an asynchronous reset at rng.sv} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {ast.sv} \
-regexp {'(vcaon_pok_h|por_rst_n|vcmain_pok_por|vcmain_pok_por_src)' is driven here, and used as an asynchronous reset} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {ast.sv} \
-msg {'clk_io_osc_val' is driven by instance 'u_io_clk' of module 'io_clk', and used as an asynchronous reset 'rst_clk_osc_n' at ast_dft.sv} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {ast.sv} \
-msg {'clk_src_io_val_o' driven in module 'io_clk' by port 'u_val_sync.q_o[0]' at io_clk.sv} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {ast.sv dev_entropy.sv ast_clks_byp.sv} \
-regexp {'q_o[0]' driven in module 'prim_flop_2sync' by port .* at prim_flop_2sync.sv} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {ast.sv} \
-msg {'vcmain_pok_por_sys' is driven by instance 'u_rst_sys_dasrt' of module 'prim_flop_2sync', and used as an asynchronous reset 'rst_dev_ni' at dev_entropy.sv} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {dev_entropy.sv} \
-msg {'rst_es_dev_nd' is driven by instance 'u_rst_es_n_da' of module 'prim_flop_2sync', and used as an asynchronous reset 'rst_es_dev_n'} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {dev_entropy.sv} \
-msg {'rst_es_dev_nd' is driven by instance 'u_rst_es_n_da' of module 'prim_flop_2sync', and used as an asynchronous reset 'rst_es_dev_n'} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {dev_entropy.sv} \
-msg {'rst_es_dev_da_n' is driven by instance 'u_rst_es_n_da' of module 'prim_flop_2sync', and used as an asynchronous reset 'rst_es_dev_n' at} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {dev_entropy.sv} \
-msg {'rst_es_dev_in_n' is driven here, and used as an asynchronous reset 'rst_ni' at} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {ast_pulse_sync.sv} \
-regexp {'(rst_src_n|rst_dst_n)' is driven here, and used as an asynchronous reset at} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {ast_clks_byp.sv} \
-regexp {'rst_aon_n_(ioda|exda)' is driven by instance 'u_rst_aon_n_(ioda|exda)_sync' of module} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {ast_clks_byp.sv} \
-regexp {'rst_sw_clk_byp_en' is driven here, and used as an asynchronous reset 'rst_sw_ckbpe_n'} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {ast.sv} \
-regexp {'(vcc_pok|rst_poks_n|rst_poks_por_n|vcaon_pok_por_lat)' is driven here, and used as an asynchronous reset} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {ast.sv} \
-msg {'vcmain_pok_por_sys' is driven by instance 'u_rst_sys_dasrt' of module} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {ast.sv} \
-msg {'rst_aon_clk_n' is driven here, and used as an asynchronous reset 'rst_ni' at} \
-comment {This is reset generation logic, hence it needs to drive this reset signal.}
waive -rules RESET_DRIVER -location {rglts_pdm_3p3v.sv} \
-regexp {'(vcc_pok_rst_h_n|vcc_pok_set_h|vcc_pok_str_.*|)' is driven here, and used as an asynchronous reset} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {ast.sv} \
-regexp {'(vcaon_pok|vcaon_pok_h)' is driven by instance 'u_rglts_pdm_3p3v'} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {ast.sv} \
-regexp {'(vcaon_pok_1p1_h_o|vcaon_pok_h_o)' driven in module 'rglts_pdm_3p3v'} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {ast.sv} \
-regexp {'rst_sys_clk_n' is driven here, and used as an asynchronous reset 'rst_ni' at prim_generic_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {ast.sv} \
-regexp {'rst_usb_clk_n' is driven here, and used as an asynchronous reset 'rst_ni' at prim_generic_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {ast.sv} \
-regexp {'rst_io_clk_n' is driven here, and used as an asynchronous reset 'rst_ni' at prim_generic_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'rst_da_n' is driven by instance 'u_rst_da' of module 'prim_flop_2sync', and used as an asynchronous reset 'rst_ni' at prim_generic_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'q_o[0]' driven in module 'prim_flop_2sync' by port 'u_sync_2.q_o[0]' at prim_flop_2sync.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'q_o[0]' driven in module 'prim_flop' by port 'gen_generic.u_impl_generic.q_o[0]' at prim_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'q_o[0]' driven in module 'prim_generic_flop' at prim_generic_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'rst_n' is driven here, and used as an asynchronous reset 'rst_ni' at prim_generic_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'rst_n' driven in module 'usb_clk' by 'rst_da_n' at usb_clk.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'q_o[0]' driven in module 'prim_flop_2sync' by port 'u_sync_2.q_o[0]' at prim_flop_2sync.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'q_o[0]' driven in module 'prim_flop' by port 'gen_generic.u_impl_generic.q_o[0]' at prim_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'q_o[0]' driven in module 'prim_generic_flop' at prim_generic_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'rst_usb_n' is driven by instance 'u_rst_ast_usb_da' of module 'prim_flop_2sync', and used as an asynchronous reset 'rst_ni' at prim_generic_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'q_o[0]' driven in module 'prim_flop_2sync' by port 'u_sync_2.q_o[0]' at prim_flop_2sync.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'q_o[0]' driven in module 'prim_flop' by port 'gen_generic.u_impl_generic.q_o[0]' at prim_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_DRIVER -location {usb_clk.sv} \
-regexp {'q_o[0]' driven in module 'prim_generic_flop' at prim_generic_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_MUX -location {aon_clk.sv io_clk.sv sys_clk.sv usb_clk.sv} \
-msg {Asynchronous reset 'rst_val_n' is driven by a multiplexer here, used as a reset} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_MUX -location {ast.sv} \
-regexp {Asynchronous reset '(rst_poks_n|rst_poks_por_n|vcmain_pok_por|rst_src_sys_n|vcaon_pok_por)' is driven by a multiplexer here, used as a reset} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_MUX -location {rng.sv} \
-msg {Asynchronous reset 'rst_n' is driven by a multiplexer here, used as a reset at rng.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_MUX -location {ast_clks_byp.sv} \
-regexp {Asynchronous reset '(rst_aon_n|rst_aon_exda_n|rst_aon_ioda_n|rst_sw_ckbpe_n)' is driven by a multiplexer here, used as a reset} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_MUX -location {ast_pulse_sync.sv} \
-regexp {Asynchronous reset '(rst_src_n|rst_dst_n)' is driven by a multiplexer here, used as a reset} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_MUX -location {rglts_pdm_3p3v.sv} \
-msg {Asynchronous reset 'vcc_pok_rst_h_n' is driven by a multiplexer here, used as a reset} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_MUX -location {usb_clk.sv} \
-regexp {Asynchronous reset 'rst_n' is driven by a multiplexer here, used as a reset 'rst_ni' at prim_generic_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_USE -location {ast.sv} \
-regexp {('vcore_pok_h_i'|'vcaon_pok') is used for some other purpose, and as asynchronous reset} \
-comment {This is reset / clock generation logic, hence special reset usage is allowed.}
waive -rules RESET_USE -location {ast.sv} \
-regexp {'(vcmain_pok_por|vcmain_pok_por_src)' is connected to 'rglts_pdm_3p3v' port 'vcmain_pok_por_h_i', and used as an asynchronous reset or set} \
-comment {This is reset / clock generation logic, hence special reset usage is allowed.}
waive -rules RESET_USE -location {ast.sv} \
-msg {'vcaon_pok_por' is connected to 'rglts_pdm_3p3v' port 'vcaon_pok_por_h_i', and used as an asynchronous reset or set} \
-comment {This is reset / clock generation logic, hence special reset usage is allowed.}
waive -rules RESET_USE -location {ast.sv} \
-regexp {'(vcc_pok|vcmain_pok_por)' is used for some other purpose, and as asynchronous reset} \
-comment {This is reset / clock generation logic, hence special reset usage is allowed.}
waive -rules RESET_USE -location {ast.sv} \
-regexp {'rst_(usb|aon|io|sys)_clk_n' is connected to '(usb|aon|io|sys)_clk' port 'rst_(usb|aon|io|sys)_clk_ni', and used as an asynchronous reset or set ('rst_ni'|'vcore_pok_h_i'|'rst_clk_byp_n')} \
-comment {This is reset / clock generation logic, hence special reset usage is allowed.}
waive -rules RESET_USE -location {io_osc.sv sys_osc.sv usb_osc.sv aon_osc.sv} \
-msg {'vcore_pok_h_i' is used for some other purpose, and as asynchronous reset at} \
-comment {This is reset / clock generation logic, hence special reset usage is allowed.}
waive -rules RESET_USE -location {ast_dft.sv} \
-msg {'clk_io_osc_val_i' is used for some other purpose, and as asynchronous reset 'rst_clk_osc_n' at ast_dft.sv} \
-comment {This is reset / clock generation logic, hence special reset usage is allowed.}
waive -rules RESET_USE -location {ast.sv} \
-msg {'rst_ast_tlul_ni' is connected to 'ast_dft' port 'rst_ni', and used as an asynchronous reset or set 'rst_n' at rng} \
-comment {This is a valid reset connection.}
waive -rules RESET_USE -location {ast.sv} \
-regexp {('rst_sys_clk_n'|'rst_usb_clk_n') is connected to ('sys_clk'|'usb_clk') port ('rst_sys_clk_ni'|'rst_usb_clk_ni'), and used as an asynchronous reset or set} \
-comment {This is a valid reset connection.}
waive -rules RESET_USE -location {aon_clk.sv io_clk.sv sys_clk.sv usb_clk.sv} \
-regexp {'(aon|io|sys|usb)_clk_en' is connected to '(aon|io|sys|usb)_osc' port '(aon|io|sys|usb)_en_i', and used as an asynchronous reset or set} \
-comment {This is reset / clock generation logic, hence special reset usage is allowed.}
waive -rules RESET_USE -location {ast.sv} \
-regexp {'rst_ast_usb_ni' is used for some other purpose, and as asynchronous reset 'rst_ni' at prim_generic_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules RESET_USE -location {usb_clk.sv} \
-regexp {'rst_usb_clk_ni' is used for some other purpose, and as asynchronous reset 'rst_ni' at prim_generic_flop.sv} \
-comment {This is reset generation logic, hence reset muxes are allowed.}
waive -rules TRI_DRIVER -location {ast.sv} \
-regexp {'ast2pad_(t0|t1)_ao' is driven by a tristate driver} \
-comment {This part models a tristate driver.}
waive -rules TERMINAL_STATE -location {rglts_pdm_3p3v.sv} \
-msg {Terminal state 'RGLS_BROUT' is detected. State register 'rgls_sm' is not assigned to another state.} \
-comment {The brownout state is terminal.}
waive -rules Z_USE -location {ast.sv} \
-msg {Constant with 'Z literal value '1'bz' encountered} \
-comment {This part models a tristate driver.}
waive -rules MULTI_RESET -location {rglts_pdm_3p3v.sv} \
-msg {Found 2 asynchronous resets for this block: 'vcc_pok_rst_h_n', 'vcc_pok_set_h'} \
-comment {This code is only a model and hence this is allowed.}
waive -rules NOT_READ -location {aon_osc.sv io_osc.sv sys_osc.sv usb_osc.sv} \
-msg {Signal 'en_osc' is not read from in module} \
-comment {Signal 'en_osc' is not read when SYNTHESIS is defined, and AST_BYPASS_CLK is not defined.}