Skip to content

Commit 98ecdc3

Browse files
glaserfvogelpi
authored andcommitted
[csrng/rtl] Remove the pdata FIFO from ctr_drbg_upd
This commit removes the pdata FIFO from the csrng_ctr_drbg_upd stage. As a consquence, pdata for the final step is now taken from the request fifo right at the request port of this module. This requires the internal control logic to wait for the block_encrypt module to process all three requests until the upstream req_rdy_o can be asserted. This change, however, does not reduce performance/throughput of the CSRNG. Signed-off-by: Florian Glaser <[email protected]>
1 parent 921e149 commit 98ecdc3

File tree

12 files changed

+56
-157
lines changed

12 files changed

+56
-157
lines changed

hw/ip/csrng/data/csrng.hjson

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -773,15 +773,6 @@
773773
This bit will stay set until the next reset.
774774
'''
775775
}
776-
{ bits: "8",
777-
name: "SFIFO_PDATA_ERR",
778-
desc: '''
779-
This bit will be set to one when an error has been detected for the
780-
pdata FIFO. The type of error is reflected in the type status
781-
bits (bits 28 through 30 of this register).
782-
This bit will stay set until the next reset.
783-
'''
784-
}
785776
{ bits: "9",
786777
name: "SFIFO_FINAL_ERR",
787778
desc: '''

hw/ip/csrng/doc/registers.md

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -555,12 +555,12 @@ Writing a zero resets this status bit.
555555
Hardware detection of error conditions status register
556556
- Offset: `0x54`
557557
- Reset default: `0x0`
558-
- Reset mask: `0x77f0fffb`
558+
- Reset mask: `0x77f0fefb`
559559

560560
### Fields
561561

562562
```wavejson
563-
{"reg": [{"name": "SFIFO_CMD_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GENBITS_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 1}, {"name": "SFIFO_RCSTAGE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_KEYVRC_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_UPDREQ_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_BENCREQ_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_BENCACK_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_PDATA_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_FINAL_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GBENCACK_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GRCSTAGE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GGENREQ_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GADSTAGE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GGENBITS_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_CMDID_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 4}, {"name": "CMD_STAGE_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "MAIN_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "DRBG_GEN_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "DRBG_UPDBE_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "DRBG_UPDOB_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "AES_CIPHER_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "CMD_GEN_CNT_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 1}, {"name": "FIFO_WRITE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "FIFO_READ_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "FIFO_STATE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 1}], "config": {"lanes": 1, "fontsize": 10, "vspace": 200}}
563+
{"reg": [{"name": "SFIFO_CMD_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GENBITS_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 1}, {"name": "SFIFO_RCSTAGE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_KEYVRC_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_UPDREQ_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_BENCREQ_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_BENCACK_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 1}, {"name": "SFIFO_FINAL_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GBENCACK_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GRCSTAGE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GGENREQ_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GADSTAGE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GGENBITS_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_CMDID_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 4}, {"name": "CMD_STAGE_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "MAIN_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "DRBG_GEN_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "DRBG_UPDBE_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "DRBG_UPDOB_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "AES_CIPHER_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "CMD_GEN_CNT_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 1}, {"name": "FIFO_WRITE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "FIFO_READ_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "FIFO_STATE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 1}], "config": {"lanes": 1, "fontsize": 10, "vspace": 200}}
564564
```
565565

566566
| Bits | Type | Reset | Name |
@@ -585,7 +585,7 @@ Hardware detection of error conditions status register
585585
| 11 | ro | 0x0 | [SFIFO_GRCSTAGE_ERR](#err_code--sfifo_grcstage_err) |
586586
| 10 | ro | 0x0 | [SFIFO_GBENCACK_ERR](#err_code--sfifo_gbencack_err) |
587587
| 9 | ro | 0x0 | [SFIFO_FINAL_ERR](#err_code--sfifo_final_err) |
588-
| 8 | ro | 0x0 | [SFIFO_PDATA_ERR](#err_code--sfifo_pdata_err) |
588+
| 8 | | | Reserved |
589589
| 7 | ro | 0x0 | [SFIFO_BENCACK_ERR](#err_code--sfifo_bencack_err) |
590590
| 6 | ro | 0x0 | [SFIFO_BENCREQ_ERR](#err_code--sfifo_bencreq_err) |
591591
| 5 | ro | 0x0 | [SFIFO_UPDREQ_ERR](#err_code--sfifo_updreq_err) |
@@ -698,12 +698,6 @@ final FIFO. The type of error is reflected in the type status
698698
bits (bits 28 through 30 of this register).
699699
This bit will stay set until the next reset.
700700

701-
### ERR_CODE . SFIFO_PDATA_ERR
702-
This bit will be set to one when an error has been detected for the
703-
pdata FIFO. The type of error is reflected in the type status
704-
bits (bits 28 through 30 of this register).
705-
This bit will stay set until the next reset.
706-
707701
### ERR_CODE . SFIFO_BENCACK_ERR
708702
This bit will be set to one when an error has been detected for the
709703
bencack FIFO. The type of error is reflected in the type status

hw/ip/csrng/dv/env/csrng_env_pkg.sv

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ package csrng_env_pkg;
6161
sfifo_updreq_error = 5,
6262
sfifo_bencreq_error = 6,
6363
sfifo_bencack_error = 7,
64-
sfifo_pdata_error = 8,
6564
sfifo_final_error = 9,
6665
sfifo_gbencack_error = 10,
6766
sfifo_grcstage_error = 11,
@@ -90,7 +89,6 @@ package csrng_env_pkg;
9089
sfifo_updreq_err = 5,
9190
sfifo_bencreq_err = 6,
9291
sfifo_bencack_err = 7,
93-
sfifo_pdata_err = 8,
9492
sfifo_final_err = 9,
9593
sfifo_gbencack_err = 10,
9694
sfifo_grcstage_err = 11,
@@ -116,7 +114,6 @@ package csrng_env_pkg;
116114
sfifo_updreq_err_test = 31,
117115
sfifo_bencreq_err_test = 32,
118116
sfifo_bencack_err_test = 33,
119-
sfifo_pdata_err_test = 34,
120117
sfifo_final_err_test = 35,
121118
sfifo_gbencack_err_test = 36,
122119
sfifo_grcstage_err_test = 37,
@@ -144,7 +141,6 @@ package csrng_env_pkg;
144141
SFIFO_UPDREQ_ERR = 5,
145142
SFIFO_BENCREQ_ERR = 6,
146143
SFIFO_BENCACK_ERR = 7,
147-
SFIFO_PDATA_ERR = 8,
148144
SFIFO_FINAL_ERR = 9,
149145
SFIFO_GBENCACK_ERR = 10,
150146
SFIFO_GRCSTAGE_ERR = 11,
@@ -183,7 +179,6 @@ package csrng_env_pkg;
183179
sfifo_grcstage = 4,
184180
sfifo_gbencack = 5,
185181
sfifo_final = 6,
186-
sfifo_pdata = 7,
187182
sfifo_bencack = 8,
188183
sfifo_bencreq = 9,
189184
sfifo_updreq = 10,

hw/ip/csrng/dv/env/csrng_path_if.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ interface csrng_path_if
1919
".u_csrng_cmd_stage.", fifo_name, "_", which_path};
2020
"sfifo_rcstage", "sfifo_keyvrc": return {core_path, ".u_csrng_ctr_drbg_cmd.",
2121
fifo_name, "_", which_path};
22-
"sfifo_updreq", "sfifo_bencreq", "sfifo_bencack", "sfifo_pdata", "sfifo_final": return
22+
"sfifo_updreq", "sfifo_bencreq", "sfifo_bencack", "sfifo_final": return
2323
{core_path, ".u_csrng_ctr_drbg_upd.", fifo_name, "_", which_path};
2424
"sfifo_gbencack", "sfifo_grcstage", "sfifo_ggenreq", "sfifo_gadstage", "sfifo_ggenbits":
2525
return {core_path,".u_csrng_ctr_drbg_gen.sfifo_", fifo_name.substr(7, fifo_name.len()-1),

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class csrng_err_vseq extends csrng_base_vseq;
102102
sfifo_cmd_err, sfifo_genbits_err, sfifo_rcstage_err, sfifo_keyvrc_err,
103103
sfifo_bencreq_err, sfifo_final_err, sfifo_gbencack_err, sfifo_grcstage_err,
104104
sfifo_gadstage_err, sfifo_ggenbits_err, sfifo_cmdid_err, sfifo_updreq_err,
105-
sfifo_bencack_err, sfifo_pdata_err, sfifo_ggenreq_err: begin
105+
sfifo_bencack_err, sfifo_ggenreq_err: begin
106106
fld = csr.get_field_by_name(fld_name);
107107
fifo_base_path = fld_name.substr(0, last_index-1);
108108

@@ -115,7 +115,7 @@ class csrng_err_vseq extends csrng_base_vseq;
115115
UVM_MEDIUM)
116116

117117
if (cfg.which_err_code == sfifo_updreq_err || cfg.which_err_code == sfifo_bencack_err ||
118-
cfg.which_err_code == sfifo_pdata_err || cfg.which_err_code == sfifo_ggenreq_err) begin
118+
cfg.which_err_code == sfifo_ggenreq_err) begin
119119
force_all_fifo_errs_exception(fifo_forced_paths, fifo_forced_values, path_exts, fld,
120120
1'b1, cfg.which_fifo_err);
121121

@@ -263,8 +263,8 @@ class csrng_err_vseq extends csrng_base_vseq;
263263
value2 = fifo_err_value[1][path_key];
264264

265265
if (cfg.which_err_code == fifo_read_error &&
266-
((cfg.which_fifo == sfifo_ggenreq) || (cfg.which_fifo == sfifo_pdata) ||
267-
(cfg.which_fifo == sfifo_bencack) || (cfg.which_fifo == sfifo_updreq)))
266+
((cfg.which_fifo == sfifo_ggenreq) || (cfg.which_fifo == sfifo_bencack) ||
267+
(cfg.which_fifo == sfifo_updreq)))
268268
begin
269269
force_fifo_err_exception(path1, path2, 1'b1, 1'b0, 1'b0, fld, 1'b1);
270270

@@ -305,7 +305,7 @@ class csrng_err_vseq extends csrng_base_vseq;
305305
end
306306
sfifo_cmd_err_test, sfifo_genbits_err_test, sfifo_rcstage_err_test,
307307
sfifo_keyvrc_err_test, sfifo_updreq_err_test, sfifo_bencreq_err_test, sfifo_bencack_err_test,
308-
sfifo_pdata_err_test, sfifo_final_err_test, sfifo_gbencack_err_test, sfifo_grcstage_err_test,
308+
sfifo_final_err_test, sfifo_gbencack_err_test, sfifo_grcstage_err_test,
309309
sfifo_ggenreq_err_test, sfifo_gadstage_err_test, sfifo_ggenbits_err_test,
310310
sfifo_cmdid_err_test, cmd_stage_sm_err_test, main_sm_err_test, drbg_gen_sm_err_test,
311311
drbg_updbe_sm_err_test, drbg_updob_sm_err_test, aes_cipher_sm_err_test, cmd_gen_cnt_err_test,

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,7 @@ class csrng_intr_vseq extends csrng_base_vseq;
223223
sfifo_cmd_error, sfifo_genbits_error, sfifo_rcstage_error,
224224
sfifo_keyvrc_error, sfifo_bencreq_error, sfifo_final_error, sfifo_gbencack_error,
225225
sfifo_grcstage_error, sfifo_gadstage_error, sfifo_ggenbits_error,
226-
sfifo_cmdid_error, sfifo_updreq_error, sfifo_bencack_error, sfifo_pdata_error,
227-
sfifo_ggenreq_error: begin
226+
sfifo_cmdid_error, sfifo_updreq_error, sfifo_bencack_error, sfifo_ggenreq_error: begin
228227
fifo_base_path = fld_name.substr(0, last_index-1);
229228

230229
foreach (path_exts[i]) begin
@@ -233,7 +232,6 @@ class csrng_intr_vseq extends csrng_base_vseq;
233232
end
234233
if (cfg.which_fatal_err == sfifo_updreq_error ||
235234
cfg.which_fatal_err == sfifo_bencack_error ||
236-
cfg.which_fatal_err == sfifo_pdata_error ||
237235
cfg.which_fatal_err == sfifo_ggenreq_error) begin
238236
force_all_fifo_errs_exception(fifo_forced_paths, fifo_forced_values, path_exts,
239237
ral.intr_state.cs_fatal_err, 1'b1, cfg.which_fifo_err);
@@ -312,8 +310,8 @@ class csrng_intr_vseq extends csrng_base_vseq;
312310
value2 = fifo_err_value[1][path_key];
313311

314312
if (cfg.which_fatal_err == fifo_read_error &&
315-
((cfg.which_fifo == sfifo_ggenreq) || (cfg.which_fifo == sfifo_pdata) ||
316-
(cfg.which_fifo == sfifo_bencack) || (cfg.which_fifo == sfifo_updreq)))
313+
((cfg.which_fifo == sfifo_ggenreq) || (cfg.which_fifo == sfifo_bencack) ||
314+
(cfg.which_fifo == sfifo_updreq)))
317315
begin
318316
force_fifo_err_exception(path1, path2, value1, value2, 1'b0, ral.intr_state.cs_fatal_err,
319317
1'b1);

hw/ip/csrng/rtl/csrng_core.sv

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,6 @@ module csrng_core import csrng_pkg::*; #(
145145
logic [2:0] ctr_drbg_upd_sfifo_bencreq_err;
146146
logic ctr_drbg_upd_sfifo_bencack_err_sum;
147147
logic [2:0] ctr_drbg_upd_sfifo_bencack_err;
148-
logic ctr_drbg_upd_sfifo_pdata_err_sum;
149-
logic [2:0] ctr_drbg_upd_sfifo_pdata_err;
150148
logic ctr_drbg_upd_sfifo_final_err_sum;
151149
logic [2:0] ctr_drbg_upd_sfifo_final_err;
152150
logic ctr_drbg_gen_sfifo_gbencack_err_sum;
@@ -439,7 +437,6 @@ module csrng_core import csrng_pkg::*; #(
439437
ctr_drbg_upd_sfifo_updreq_err_sum ||
440438
ctr_drbg_upd_sfifo_bencreq_err_sum ||
441439
ctr_drbg_upd_sfifo_bencack_err_sum ||
442-
ctr_drbg_upd_sfifo_pdata_err_sum ||
443440
ctr_drbg_upd_sfifo_final_err_sum ||
444441
ctr_drbg_gen_sfifo_gbencack_err_sum ||
445442
ctr_drbg_gen_sfifo_grcstage_err_sum ||
@@ -465,8 +462,6 @@ module csrng_core import csrng_pkg::*; #(
465462
err_code_test_bit[6];
466463
assign ctr_drbg_upd_sfifo_bencack_err_sum = (|ctr_drbg_upd_sfifo_bencack_err) ||
467464
err_code_test_bit[7];
468-
assign ctr_drbg_upd_sfifo_pdata_err_sum = (|ctr_drbg_upd_sfifo_pdata_err) ||
469-
err_code_test_bit[8];
470465
assign ctr_drbg_upd_sfifo_final_err_sum = (|ctr_drbg_upd_sfifo_final_err) ||
471466
err_code_test_bit[9];
472467
assign ctr_drbg_gen_sfifo_gbencack_err_sum = (|ctr_drbg_gen_sfifo_gbencack_err) ||
@@ -503,7 +498,6 @@ module csrng_core import csrng_pkg::*; #(
503498
ctr_drbg_gen_sfifo_grcstage_err[2] ||
504499
ctr_drbg_gen_sfifo_gbencack_err[2] ||
505500
ctr_drbg_upd_sfifo_final_err[2] ||
506-
ctr_drbg_upd_sfifo_pdata_err[2] ||
507501
ctr_drbg_upd_sfifo_bencack_err[2] ||
508502
ctr_drbg_upd_sfifo_bencreq_err[2] ||
509503
ctr_drbg_upd_sfifo_updreq_err[2] ||
@@ -520,7 +514,6 @@ module csrng_core import csrng_pkg::*; #(
520514
ctr_drbg_gen_sfifo_grcstage_err[1] ||
521515
ctr_drbg_gen_sfifo_gbencack_err[1] ||
522516
ctr_drbg_upd_sfifo_final_err[1] ||
523-
ctr_drbg_upd_sfifo_pdata_err[1] ||
524517
ctr_drbg_upd_sfifo_bencack_err[1] ||
525518
ctr_drbg_upd_sfifo_bencreq_err[1] ||
526519
ctr_drbg_upd_sfifo_updreq_err[1] ||
@@ -537,7 +530,6 @@ module csrng_core import csrng_pkg::*; #(
537530
ctr_drbg_gen_sfifo_grcstage_err[0] ||
538531
ctr_drbg_gen_sfifo_gbencack_err[0] ||
539532
ctr_drbg_upd_sfifo_final_err[0] ||
540-
ctr_drbg_upd_sfifo_pdata_err[0] ||
541533
ctr_drbg_upd_sfifo_bencack_err[0] ||
542534
ctr_drbg_upd_sfifo_bencreq_err[0] ||
543535
ctr_drbg_upd_sfifo_updreq_err[0] ||
@@ -576,10 +568,6 @@ module csrng_core import csrng_pkg::*; #(
576568
assign hw2reg.err_code.sfifo_bencack_err.de = cs_enable_fo[9] &&
577569
ctr_drbg_upd_sfifo_bencack_err_sum;
578570

579-
assign hw2reg.err_code.sfifo_pdata_err.d = 1'b1;
580-
assign hw2reg.err_code.sfifo_pdata_err.de = cs_enable_fo[10] &&
581-
ctr_drbg_upd_sfifo_pdata_err_sum;
582-
583571
assign hw2reg.err_code.sfifo_final_err.d = 1'b1;
584572
assign hw2reg.err_code.sfifo_final_err.de = cs_enable_fo[11] &&
585573
ctr_drbg_upd_sfifo_final_err_sum;
@@ -1314,7 +1302,6 @@ module csrng_core import csrng_pkg::*; #(
13141302
.fifo_updreq_err_o (ctr_drbg_upd_sfifo_updreq_err),
13151303
.fifo_bencreq_err_o (ctr_drbg_upd_sfifo_bencreq_err),
13161304
.fifo_bencack_err_o (ctr_drbg_upd_sfifo_bencack_err),
1317-
.fifo_pdata_err_o (ctr_drbg_upd_sfifo_pdata_err),
13181305
.fifo_final_err_o (ctr_drbg_upd_sfifo_final_err),
13191306
.sm_block_enc_req_err_o(drbg_updbe_sm_err),
13201307
.sm_block_enc_rsp_err_o(drbg_updob_sm_err)
@@ -1526,8 +1513,8 @@ module csrng_core import csrng_pkg::*; #(
15261513
logic unused_state_db_inst_state;
15271514

15281515
assign unused_err_code_test_bit = (|err_code_test_bit[19:16]) || (|err_code_test_bit[27:26]) ||
1529-
err_code_test_bit[2];
1530-
assign unused_enable_fo = cs_enable_fo[4];
1516+
err_code_test_bit[8] || err_code_test_bit[2];
1517+
assign unused_enable_fo = cs_enable_fo[10] | cs_enable_fo[4];
15311518
assign unused_reg2hw_genbits = (|reg2hw.genbits.q);
15321519
assign unused_int_state_val = (|reg2hw.int_state_val.q);
15331520
assign unused_reseed_interval = reg2hw.reseed_interval.qe;

0 commit comments

Comments
 (0)