| // 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'" |