Skip to content

Commit bc4814e

Browse files
glaserfvogelpi
authored andcommitted
[csrng] Use the correct counter widths in csrng_err_vseq
This commit addresses a rare dv failure caused by an incorrect counter width assumed in csrng_err_vseq. Instead, move the counter width definition to csrng_pkg and use use the value from there. Signed-off-by: Florian Glaser <[email protected]>
1 parent 330c84e commit bc4814e

File tree

3 files changed

+13
-11
lines changed

3 files changed

+13
-11
lines changed

hw/ip/csrng/dv/env/seq_lib/csrng_err_vseq.sv

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,17 +221,17 @@ class csrng_err_vseq extends csrng_base_vseq;
221221
cmd_gen_cnt_sel: begin
222222
fld = csr.get_field_by_name(fld_name);
223223
path = cfg.csrng_path_vif.cmd_gen_cnt_err_path(cfg.which_app_err_alert);
224-
force_cnt_err(path, fld, 1'b1, 13);
224+
force_cnt_err(path, fld, 1'b1, csrng_pkg::GenBitsCtrWidth);
225225
end
226226
drbg_upd_cnt_sel: begin
227227
fld = csr.get_field_by_name(fld_name);
228228
path = cfg.csrng_path_vif.drbg_upd_cnt_err_path();
229-
force_cnt_err(path, fld, 1'b1, 32);
229+
force_cnt_err(path, fld, 1'b1, csrng_pkg::CtrLen);
230230
end
231231
drbg_gen_cnt_sel: begin
232232
fld = csr.get_field_by_name(fld_name);
233233
path = cfg.csrng_path_vif.drbg_gen_cnt_err_path();
234-
force_cnt_err(path, fld, 1'b1, 32);
234+
force_cnt_err(path, fld, 1'b1, csrng_pkg::CtrLen);
235235
end
236236
endcase
237237
csr_rd(.ptr(ral.err_code), .value(backdoor_err_code_val));

hw/ip/csrng/rtl/csrng_cmd_stage.sv

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ module csrng_cmd_stage import csrng_pkg::*; (
5252
// Genbits parameters.
5353
localparam int GenBitsFifoWidth = 1 + BlkLen;
5454
localparam int GenBitsFifoDepth = 1;
55-
localparam int GenBitsCntrWidth = 12;
5655

5756
// Command FIFO.
5857
logic [CmdBusWidth-1:0] sfifo_cmd_rdata;
@@ -84,7 +83,7 @@ module csrng_cmd_stage import csrng_pkg::*; (
8483
logic cmd_gen_cnt_last;
8584
logic cmd_final_ack;
8685
logic cmd_err_ack;
87-
logic [GenBitsCntrWidth-1:0] cmd_gen_cnt;
86+
logic [GenBitsCtrWidth-1:0] cmd_gen_cnt;
8887
csrng_cmd_sts_e err_sts;
8988
logic reseed_cnt_exceeded;
9089
logic invalid_cmd_seq;
@@ -193,17 +192,17 @@ module csrng_cmd_stage import csrng_pkg::*; (
193192

194193
// SEC_CM: GEN_CMD.CTR.REDUN
195194
prim_count #(
196-
.Width(GenBitsCntrWidth),
197-
.ResetValue({GenBitsCntrWidth{1'b1}})
195+
.Width(GenBitsCtrWidth),
196+
.ResetValue({GenBitsCtrWidth{1'b1}})
198197
) u_prim_count_cmd_gen_cntr (
199198
.clk_i,
200199
.rst_ni,
201200
.clr_i(!cs_enable_i),
202201
.set_i(cmd_gen_1st_req),
203-
.set_cnt_i(sfifo_cmd_rdata[12+:GenBitsCntrWidth]),
202+
.set_cnt_i(sfifo_cmd_rdata[12 +: GenBitsCtrWidth]),
204203
.incr_en_i(1'b0),
205204
.decr_en_i(cmd_gen_cnt_dec), // Count down.
206-
.step_i(GenBitsCntrWidth'(1)),
205+
.step_i(GenBitsCtrWidth'(1)),
207206
.commit_i(1'b1),
208207
.cnt_o(cmd_gen_cnt),
209208
.cnt_after_commit_o(),
@@ -375,7 +374,7 @@ module csrng_cmd_stage import csrng_pkg::*; (
375374
cmd_gen_1st_req = 1'b1;
376375
cmd_arb_sop_o = 1'b1;
377376
cmd_fifo_pop = 1'b1;
378-
if (sfifo_cmd_rdata[12+:GenBitsCntrWidth] == GenBitsCntrWidth'(1)) begin
377+
if (sfifo_cmd_rdata[12 +: GenBitsCtrWidth] == GenBitsCtrWidth'(1)) begin
379378
cmd_gen_cnt_last = 1'b1;
380379
end
381380
if (cmd_len == '0) begin
@@ -443,7 +442,7 @@ module csrng_cmd_stage import csrng_pkg::*; (
443442
cmd_gen_inc_req = 1'b1;
444443
state_d = GenCmdChk;
445444
// Check for final genbits beat.
446-
if (cmd_gen_cnt == GenBitsCntrWidth'(1)) begin
445+
if (cmd_gen_cnt == GenBitsCtrWidth'(1)) begin
447446
cmd_gen_cnt_last = 1'b1;
448447
end
449448
end

hw/ip/csrng/rtl/csrng_pkg.sv

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ package csrng_pkg;
2222
parameter int unsigned CtrLen = 32;
2323
parameter int unsigned RsCtrWidth = 32;
2424

25+
// Width of the counter in the command stages to count the amount of generated random bits
26+
parameter int unsigned GenBitsCtrWidth = 12;
27+
2528
// Commonly used internal signal widths
2629
parameter int unsigned CmdWidth = 3;
2730
parameter int unsigned InstIdWidth = 4;

0 commit comments

Comments
 (0)