lint: verilator lint fixes for regfile common security module

This commit is contained in:
Akilesh Kannan 2025-04-20 21:38:04 +05:30
parent 912c251185
commit c15202c96d
No known key found for this signature in database
GPG key ID: 97F0271F619E1FBA
4 changed files with 43 additions and 7 deletions

View file

@ -8,17 +8,19 @@
*
* Register file common security functionality across multiple implementations
*/
module ibex_register_file_common #(
parameter bit FPGA = 0,
parameter int unsigned AddrWidth = 5,
parameter int unsigned NumWords = 2 ** AddrWidth,
parameter int unsigned DataWidth = 32,
parameter bit WrenCheck = 0,
parameter bit RdataMuxCheck = 0
) (
/* verilator lint_off UNUSED */
// Clock and Reset
input logic clk_i,
input logic rst_ni,
/* verilator lint_on UNUSED */
//Read port R1
input logic [4:0] raddr_a_i,
@ -81,9 +83,9 @@ module ibex_register_file_common #(
.err_o (oh_we_err)
);
end else begin : gen_no_wren_check
if (FPGA == 0) begin : gen_unused_we0_strobe
logic unused_strobe;
assign unused_strobe = we_onehot_a[0]; // this is never read from in this case
if (FPGA) begin : gen_unused_wren_check
logic unused_waddr_a;
assign unused_waddr_a = ^waddr_a_i;
end
assign oh_we_err = 1'b0;
end
@ -159,6 +161,11 @@ module ibex_register_file_common #(
end else begin : gen_no_rdata_mux_check
assign oh_raddr_a_err = 1'b0;
assign oh_raddr_b_err = 1'b0;
assign raddr_onehot_a = '0;
assign raddr_onehot_b = '0;
logic unused_raddr;
assign unused_raddr = ^{raddr_a_i, raddr_b_i};
end
assign err_o = oh_raddr_a_err || oh_raddr_b_err || oh_we_err;

View file

@ -59,7 +59,6 @@ module ibex_register_file_ff #(
ibex_register_file_common #(
.AddrWidth(ADDR_WIDTH),
.NumWords(NUM_WORDS),
.DataWidth(DataWidth),
.WrenCheck(WrenCheck),
.RdataMuxCheck(RdataMuxCheck)
) security_module (
@ -148,10 +147,21 @@ module ibex_register_file_ff #(
end else begin : gen_no_rdata_mux_check
assign rdata_a_o = rf_reg[raddr_a_i];
assign rdata_b_o = rf_reg[raddr_b_i];
logic unused_raddr_onehot, unused_oh_raddr_err;
assign unused_raddr_onehot = ^{raddr_onehot_a, raddr_onehot_b};
assign unused_oh_raddr_err = ^{oh_raddr_a_err, oh_raddr_b_err};
end
// Signal not used in FF register file
logic unused_test_en;
assign unused_test_en = test_en_i;
if (WrenCheck) begin : gen_wren_check
end else begin : gen_unused_wren_check
logic unused_strobe, unused_oh_we_err;
assign unused_strobe = we_onehot_a[0]; // this is never read from in this case
assign unused_oh_we_err = oh_we_err; // this is never read from in this case
end
endmodule

View file

@ -61,7 +61,6 @@ module ibex_register_file_fpga #(
.FPGA(1),
.AddrWidth(ADDR_WIDTH),
.NumWords(NUM_WORDS),
.DataWidth(DataWidth),
.WrenCheck(WrenCheck),
.RdataMuxCheck(RdataMuxCheck)
) security_module (
@ -109,6 +108,10 @@ module ibex_register_file_fpga #(
end else begin : gen_no_rdata_mux_check
assign rdata_a_o = (raddr_a_i == '0) ? WordZeroVal : mem[raddr_a_i];
assign rdata_b_o = (raddr_b_i == '0) ? WordZeroVal : mem[raddr_b_i];
logic unused_raddr_onehot, unused_oh_raddr_err;
assign unused_raddr_onehot = ^{raddr_onehot_a, raddr_onehot_b};
assign unused_oh_raddr_err = ^{oh_raddr_a_err, oh_raddr_b_err};
end
// we select
@ -143,4 +146,10 @@ module ibex_register_file_fpga #(
logic unused_test_en;
assign unused_test_en = test_en_i;
if (WrenCheck) begin : gen_wren_check
end else begin : gen_unused_wren_check
logic unused_oh_we_err;
assign unused_oh_we_err = oh_we_err; // this is never read from in this case
end
endmodule

View file

@ -71,7 +71,6 @@ module ibex_register_file_latch #(
ibex_register_file_common #(
.AddrWidth(ADDR_WIDTH),
.NumWords(NUM_WORDS),
.DataWidth(DataWidth),
.WrenCheck(WrenCheck),
.RdataMuxCheck(RdataMuxCheck)
) security_module (
@ -119,6 +118,10 @@ module ibex_register_file_latch #(
end else begin : gen_no_rdata_mux_check
assign rdata_a_o = mem[raddr_a_int];
assign rdata_b_o = mem[raddr_b_int];
logic unused_raddr_onehot, unused_oh_raddr_err;
assign unused_raddr_onehot = ^{raddr_onehot_a, raddr_onehot_b};
assign unused_oh_raddr_err = ^{oh_raddr_a_err, oh_raddr_b_err};
end
///////////
@ -200,6 +203,13 @@ module ibex_register_file_latch #(
assign mem[0] = WordZeroVal;
end
if (WrenCheck) begin : gen_wren_check
end else begin : gen_unused_wren_check
logic unused_strobe, unused_oh_we_err;
assign unused_strobe = we_onehot_a[0]; // this is never read from in this case
assign unused_oh_we_err = oh_we_err; // this is never read from in this case
end
`ifdef VERILATOR
initial begin
$display("Latch-based register file not supported for Verilator simulation");