blob: fb7b7c0539694d0c5384c0ad1ac737bcdf5fe933 [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 aes
`verilator_config
// Always_comb variable driven after use: 'regular'
// regular is assigned in a for loop, regular[1] depends on regular[0]
lint_off -rule ALWCOMBORDER -file "*/rtl/aes_key_expand.sv" -match "*'regular'"
// Masked SBox implementations may require multiple modules to prevent aggressive synthesis optimizations.
lint_off -rule DECLFILENAME -file "*/rtl/aes_sbox_*_masked*.sv" -match "Filename 'aes_sbox_*_masked*' does not match MODULE name: *"
lint_off -rule DECLFILENAME -file "*/rtl/aes_sbox_dom*.sv" -match "Filename 'aes_sbox_dom*' does not match MODULE name: *"
// In the following arrays some members may depend on others.
// There are no circular dependencies but the tool must be told to analyze each member separately for simulation, i.e., to split up the arrays internally.
// Otherwise the tool needs to evaluate corresponding statements multiple times before the entire signal settles.
// This slows down simulation and causes the tool to print UNOPTFLAT lint warnings.
split_var -module "aes_control" -var "*sp2v_sig*"
split_var -module "aes_cipher_control" -var "*sp2v_sig"
split_var -module "aes_cipher_control" -var "*sp2v_sig_chk*"
split_var -module "aes_masked_inverse_gf2p8*" -var "b"
split_var -module "aes_masked_inverse_gf2p8*" -var "b_buf"
split_var -module "aes_masked_inverse_gf2p8*" -var "a1_inv"
split_var -module "aes_masked_inverse_gf2p8*" -var "a1_inv_buf"
split_var -module "aes_masked_inverse_gf2p8*" -var "a0_inv"
split_var -module "aes_masked_inverse_gf2p8*" -var "a0_inv_buf"
split_var -module "aes_masked_inverse_gf2p4*" -var "c"
split_var -module "aes_masked_inverse_gf2p4*" -var "c_buf"
split_var -module "aes_masked_inverse_gf2p4*" -var "b1_inv"
split_var -module "aes_masked_inverse_gf2p4*" -var "b1_inv_buf"
split_var -module "aes_masked_inverse_gf2p4*" -var "b0_inv"
split_var -module "aes_masked_inverse_gf2p4*" -var "b0_inv_buf"
// Similarly, there are no circular dependencies in the signals below but here the split_var technique doesn't seem to work in Verilator 4.210 - 4.214.
// TODO: Remove these waivers once we upgrade to a Verilator version > 4.214.
// For details, see https://github.com/verilator/verilator/issues/3177
lint_off -rule UNOPTFLAT -file "*/rtl/aes_control_fsm_*.sv" -match "Signal unoptimizable: Feedback to clock or circular logic: '*u_aes_control_fsm_i.out'"
lint_off -rule UNOPTFLAT -file "*/rtl/aes_cipher_control_fsm_*.sv" -match "Signal unoptimizable: Feedback to clock or circular logic: '*u_aes_cipher_control_fsm_i.out'"
lint_off -rule UNOPTFLAT -file "*/rtl/aes_ctr_fsm_*.sv" -match "Signal unoptimizable: Feedback to clock or circular logic: '*u_aes_ctr_fsm_i.in'"
// key_init_new_pulse feeds into prng_resee_we_o but there is still no circular dependency.
lint_off -rule UNOPTFLAT -file "*/rtl/aes_control_fsm_*.sv" -match "Signal unoptimizable: Feedback to clock or circular logic: '*u_aes_control_fsm_i.prng_reseed_we'"
lint_off -rule UNOPTFLAT -file "*/rtl/aes_reg_status.sv" -match "Signal unoptimizable: Feedback to clock or circular logic: '*u_aes_control_fsm_i.u_aes_control_fsm.u_reg_status_key_init.new_d'"