Skip to content

Commit d65c384

Browse files
committed
[csrng/rtl] Remove the rcstage FIFO from ctr_drbg_gen
Removal of this FIFO requires two additional states in the FSM in ctr_drbg_gen to handle the data path bifurcation to the update unit, depending on the `glast` field. Signed-off-by: Florian Glaser <[email protected]>
1 parent b3170d6 commit d65c384

File tree

12 files changed

+89
-167
lines changed

12 files changed

+89
-167
lines changed

hw/ip/csrng/data/csrng.hjson

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -749,15 +749,6 @@
749749
This bit will stay set until the next reset.
750750
'''
751751
}
752-
{ bits: "11",
753-
name: "SFIFO_GRCSTAGE_ERR",
754-
desc: '''
755-
This bit will be set to one when an error has been detected for the
756-
grcstage FIFO. The type of error is reflected in the type status
757-
bits (bits 28 through 30 of this register).
758-
This bit will stay set until the next reset.
759-
'''
760-
}
761752
{ bits: "13",
762753
name: "SFIFO_GADSTAGE_ERR",
763754
desc: '''

hw/ip/csrng/doc/registers.md

Lines changed: 3 additions & 10 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: `0x7ff0ee03`
558+
- Reset mask: `0x7ff0e603`
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": 7}, {"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}, {"bits": 1}, {"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}, {"name": "DRBG_CMD_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"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": 7}, {"name": "SFIFO_FINAL_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_GBENCACK_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 2}, {"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}, {"name": "DRBG_CMD_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"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 |
@@ -581,8 +581,7 @@ Hardware detection of error conditions status register
581581
| 15 | ro | 0x0 | [SFIFO_CMDID_ERR](#err_code--sfifo_cmdid_err) |
582582
| 14 | ro | 0x0 | [SFIFO_GGENBITS_ERR](#err_code--sfifo_ggenbits_err) |
583583
| 13 | ro | 0x0 | [SFIFO_GADSTAGE_ERR](#err_code--sfifo_gadstage_err) |
584-
| 12 | | | Reserved |
585-
| 11 | ro | 0x0 | [SFIFO_GRCSTAGE_ERR](#err_code--sfifo_grcstage_err) |
584+
| 12:11 | | | Reserved |
586585
| 10 | ro | 0x0 | [SFIFO_GBENCACK_ERR](#err_code--sfifo_gbencack_err) |
587586
| 9 | ro | 0x0 | [SFIFO_FINAL_ERR](#err_code--sfifo_final_err) |
588587
| 8:2 | | | Reserved |
@@ -674,12 +673,6 @@ gadstage FIFO. The type of error is reflected in the type status
674673
bits (bits 28 through 30 of this register).
675674
This bit will stay set until the next reset.
676675

677-
### ERR_CODE . SFIFO_GRCSTAGE_ERR
678-
This bit will be set to one when an error has been detected for the
679-
grcstage FIFO. The type of error is reflected in the type status
680-
bits (bits 28 through 30 of this register).
681-
This bit will stay set until the next reset.
682-
683676
### ERR_CODE . SFIFO_GBENCACK_ERR
684677
This bit will be set to one when an error has been detected for the
685678
gbencack 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
@@ -60,7 +60,6 @@ package csrng_env_pkg;
6060
sfifo_genbits_error = 1,
6161
sfifo_final_error = 3,
6262
sfifo_gbencack_error = 4,
63-
sfifo_grcstage_error = 5,
6463
sfifo_gadstage_error = 7,
6564
sfifo_ggenbits_error = 8,
6665
sfifo_cmdid_error = 9,
@@ -83,7 +82,6 @@ package csrng_env_pkg;
8382
sfifo_genbits_err = 1,
8483
sfifo_final_err = 3,
8584
sfifo_gbencack_err = 4,
86-
sfifo_grcstage_err = 5,
8785
sfifo_gadstage_err = 7,
8886
sfifo_ggenbits_err = 8,
8987
sfifo_cmdid_err = 9,
@@ -103,7 +101,6 @@ package csrng_env_pkg;
103101
sfifo_genbits_err_test = 22,
104102
sfifo_final_err_test = 24,
105103
sfifo_gbencack_err_test = 25,
106-
sfifo_grcstage_err_test = 26,
107104
sfifo_gadstage_err_test = 28,
108105
sfifo_ggenbits_err_test = 29,
109106
sfifo_cmdid_err_test = 30,
@@ -127,7 +124,6 @@ package csrng_env_pkg;
127124
SFIFO_GENBITS_ERR = 1,
128125
SFIFO_FINAL_ERR = 9,
129126
SFIFO_GBENCACK_ERR = 10,
130-
SFIFO_GRCSTAGE_ERR = 11,
131127
SFIFO_GADSTAGE_ERR = 13,
132128
SFIFO_GGENBITS_ERR = 14,
133129
SFIFO_CMDID_ERR = 15,
@@ -159,7 +155,6 @@ package csrng_env_pkg;
159155
sfifo_cmdid = 0,
160156
sfifo_ggenbits = 1,
161157
sfifo_gadstage = 2,
162-
sfifo_grcstage = 4,
163158
sfifo_gbencack = 5,
164159
sfifo_final = 6,
165160
sfifo_genbits = 7,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ interface csrng_path_if
1818
"sfifo_cmd", "sfifo_genbits": return {core_path, $sformatf(".gen_cmd_stage[%0d]", app),
1919
".u_csrng_cmd_stage.", fifo_name, "_", which_path};
2020
"sfifo_final": return {core_path, ".u_csrng_ctr_drbg_upd.", fifo_name, "_", which_path};
21-
"sfifo_gbencack", "sfifo_grcstage", "sfifo_gadstage", "sfifo_ggenbits":
21+
"sfifo_gbencack", "sfifo_gadstage", "sfifo_ggenbits":
2222
return {core_path,".u_csrng_ctr_drbg_gen.sfifo_", fifo_name.substr(7, fifo_name.len()-1),
2323
"_", which_path};
2424
"sfifo_cmdid": return {core_path, ".u_csrng_block_encrypt.", fifo_name, "_", which_path};

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ class csrng_err_vseq extends csrng_base_vseq;
100100
cfg.which_app_err_alert, fld_name), UVM_MEDIUM)
101101

102102
case (cfg.which_err_code) inside
103-
sfifo_cmd_err, sfifo_genbits_err, sfifo_final_err, sfifo_gbencack_err, sfifo_grcstage_err,
104-
sfifo_gadstage_err, sfifo_ggenbits_err, sfifo_cmdid_err: begin
103+
sfifo_cmd_err, sfifo_genbits_err, sfifo_final_err, sfifo_gbencack_err, sfifo_gadstage_err,
104+
sfifo_ggenbits_err, sfifo_cmdid_err: begin
105105
fld = csr.get_field_by_name(fld_name);
106106
fifo_base_path = fld_name.substr(0, last_index-1);
107107

@@ -289,9 +289,8 @@ class csrng_err_vseq extends csrng_base_vseq;
289289
cov_vif.cg_err_code_sample(.err_code(backdoor_err_code_val));
290290
end
291291
sfifo_cmd_err_test, sfifo_genbits_err_test, sfifo_final_err_test,
292-
sfifo_gbencack_err_test, sfifo_grcstage_err_test, sfifo_gadstage_err_test,
293-
sfifo_ggenbits_err_test, sfifo_cmdid_err_test,
294-
cmd_stage_sm_err_test, main_sm_err_test, drbg_cmd_sm_err_test,
292+
sfifo_gbencack_err_test, sfifo_gadstage_err_test, sfifo_ggenbits_err_test,
293+
sfifo_cmdid_err_test, cmd_stage_sm_err_test, main_sm_err_test, drbg_cmd_sm_err_test,
295294
drbg_gen_sm_err_test, drbg_updbe_sm_err_test, drbg_updob_sm_err_test, aes_cipher_sm_err_test,
296295
cmd_gen_cnt_err_test, fifo_write_err_test, fifo_read_err_test, fifo_state_err_test: begin
297296
fld = csr.get_field_by_name(fld_name.substr(0, last_index-1));

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,8 @@ class csrng_intr_vseq extends csrng_base_vseq;
220220
last_index = find_index("_", fld_name, "last");
221221

222222
case (cfg.which_fatal_err) inside
223-
sfifo_cmd_error, sfifo_genbits_error, sfifo_final_error, sfifo_gbencack_error,
224-
sfifo_grcstage_error, sfifo_gadstage_error, sfifo_ggenbits_error, sfifo_cmdid_error: begin
223+
sfifo_cmd_error, sfifo_genbits_error, sfifo_final_error, sfifo_cmdid_error,
224+
sfifo_gadstage_error, sfifo_ggenbits_error, sfifo_gbencack_error: begin
225225
fifo_base_path = fld_name.substr(0, last_index-1);
226226

227227
foreach (path_exts[i]) begin

hw/ip/csrng/rtl/csrng_core.sv

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,6 @@ module csrng_core import csrng_pkg::*; #(
134134
logic [2:0] ctr_drbg_upd_sfifo_final_err;
135135
logic ctr_drbg_gen_sfifo_gbencack_err_sum;
136136
logic [2:0] ctr_drbg_gen_sfifo_gbencack_err;
137-
logic ctr_drbg_gen_sfifo_grcstage_err_sum;
138-
logic [2:0] ctr_drbg_gen_sfifo_grcstage_err;
139137
logic ctr_drbg_gen_sfifo_gadstage_err_sum;
140138
logic [2:0] ctr_drbg_gen_sfifo_gadstage_err;
141139
logic ctr_drbg_gen_sfifo_ggenbits_err_sum;
@@ -417,7 +415,6 @@ module csrng_core import csrng_pkg::*; #(
417415
(|cmd_stage_sfifo_genbits_err_sum) ||
418416
ctr_drbg_upd_sfifo_final_err_sum ||
419417
ctr_drbg_gen_sfifo_gbencack_err_sum ||
420-
ctr_drbg_gen_sfifo_grcstage_err_sum ||
421418
ctr_drbg_gen_sfifo_gadstage_err_sum ||
422419
ctr_drbg_gen_sfifo_ggenbits_err_sum ||
423420
block_encrypt_sfifo_cmdid_err_sum ||
@@ -433,8 +430,6 @@ module csrng_core import csrng_pkg::*; #(
433430
err_code_test_bit[9];
434431
assign ctr_drbg_gen_sfifo_gbencack_err_sum = (|ctr_drbg_gen_sfifo_gbencack_err) ||
435432
err_code_test_bit[10];
436-
assign ctr_drbg_gen_sfifo_grcstage_err_sum = (|ctr_drbg_gen_sfifo_grcstage_err) ||
437-
err_code_test_bit[11];
438433
assign ctr_drbg_gen_sfifo_gadstage_err_sum = (|ctr_drbg_gen_sfifo_gadstage_err) ||
439434
err_code_test_bit[13];
440435
assign ctr_drbg_gen_sfifo_ggenbits_err_sum = (|ctr_drbg_gen_sfifo_ggenbits_err) ||
@@ -454,7 +449,6 @@ module csrng_core import csrng_pkg::*; #(
454449
block_encrypt_sfifo_cmdid_err[2] ||
455450
ctr_drbg_gen_sfifo_ggenbits_err[2] ||
456451
ctr_drbg_gen_sfifo_gadstage_err[2] ||
457-
ctr_drbg_gen_sfifo_grcstage_err[2] ||
458452
ctr_drbg_gen_sfifo_gbencack_err[2] ||
459453
ctr_drbg_upd_sfifo_final_err[2] ||
460454
(|cmd_stage_sfifo_genbits_err_wr) ||
@@ -464,7 +458,6 @@ module csrng_core import csrng_pkg::*; #(
464458
block_encrypt_sfifo_cmdid_err[1] ||
465459
ctr_drbg_gen_sfifo_ggenbits_err[1] ||
466460
ctr_drbg_gen_sfifo_gadstage_err[1] ||
467-
ctr_drbg_gen_sfifo_grcstage_err[1] ||
468461
ctr_drbg_gen_sfifo_gbencack_err[1] ||
469462
ctr_drbg_upd_sfifo_final_err[1] ||
470463
(|cmd_stage_sfifo_genbits_err_rd) ||
@@ -474,7 +467,6 @@ module csrng_core import csrng_pkg::*; #(
474467
block_encrypt_sfifo_cmdid_err[0] ||
475468
ctr_drbg_gen_sfifo_ggenbits_err[0] ||
476469
ctr_drbg_gen_sfifo_gadstage_err[0] ||
477-
ctr_drbg_gen_sfifo_grcstage_err[0] ||
478470
ctr_drbg_gen_sfifo_gbencack_err[0] ||
479471
ctr_drbg_upd_sfifo_final_err[0] ||
480472
(|cmd_stage_sfifo_genbits_err_st) ||
@@ -498,10 +490,6 @@ module csrng_core import csrng_pkg::*; #(
498490
assign hw2reg.err_code.sfifo_gbencack_err.de = cs_enable_fo[12] &&
499491
ctr_drbg_gen_sfifo_gbencack_err_sum;
500492

501-
assign hw2reg.err_code.sfifo_grcstage_err.d = 1'b1;
502-
assign hw2reg.err_code.sfifo_grcstage_err.de = cs_enable_fo[13] &&
503-
ctr_drbg_gen_sfifo_grcstage_err_sum;
504-
505493
assign hw2reg.err_code.sfifo_gadstage_err.d = 1'b1;
506494
assign hw2reg.err_code.sfifo_gadstage_err.de = cs_enable_fo[15] &&
507495
ctr_drbg_gen_sfifo_gadstage_err_sum;
@@ -1390,7 +1378,6 @@ module csrng_core import csrng_pkg::*; #(
13901378
.sm_err_o (drbg_gen_sm_err),
13911379

13921380
.fifo_gbencack_err_o(ctr_drbg_gen_sfifo_gbencack_err),
1393-
.fifo_grcstage_err_o(ctr_drbg_gen_sfifo_grcstage_err),
13941381
.fifo_gadstage_err_o(ctr_drbg_gen_sfifo_gadstage_err),
13951382
.fifo_ggenbits_err_o(ctr_drbg_gen_sfifo_ggenbits_err)
13961383
);
@@ -1427,9 +1414,9 @@ module csrng_core import csrng_pkg::*; #(
14271414
logic [SeedLen-1:0] unused_gen_rsp_pdata;
14281415
logic unused_state_db_inst_state;
14291416

1430-
assign unused_err_code_test_bit = (|err_code_test_bit[19:16]) || err_code_test_bit[12] ||
1417+
assign unused_err_code_test_bit = (|err_code_test_bit[19:16]) || (|err_code_test_bit[12:11]) ||
14311418
(|err_code_test_bit[8:2]);
1432-
assign unused_enable_fo = cs_enable_fo[42] || cs_enable_fo[14] || (|cs_enable_fo[9:4]);
1419+
assign unused_enable_fo = cs_enable_fo[42] || (|cs_enable_fo[14:13]) || (|cs_enable_fo[9:4]);
14331420
assign unused_reg2hw_genbits = (|reg2hw.genbits.q);
14341421
assign unused_int_state_val = (|reg2hw.int_state_val.q);
14351422
assign unused_reseed_interval = reg2hw.reseed_interval.qe;

0 commit comments

Comments
 (0)