Skip to content

Commit d16ce56

Browse files
committed
[csrng/rtl] Remove the keyvrc FIFO from ctr_drbg_cmd
This commit removes the last FIFO from the ctr_drbg_cmd module. Since the request and response ready signals are now in many cases asserted in the same cycle, slight adaptions to the main FSM are also necessary. Signed-off-by: Florian Glaser <[email protected]>
1 parent 9fbd25f commit d16ce56

File tree

13 files changed

+47
-172
lines changed

13 files changed

+47
-172
lines changed

hw/ip/csrng/data/csrng.hjson

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -731,15 +731,6 @@
731731
This bit will stay set until the next reset.
732732
'''
733733
}
734-
{ bits: "4",
735-
name: "SFIFO_KEYVRC_ERR",
736-
desc: '''
737-
This bit will be set to one when an error has been detected for the
738-
keyvrc FIFO. The type of error is reflected in the type status
739-
bits (bits 28 through 30 of this register).
740-
This bit will stay set until the next reset.
741-
'''
742-
}
743734
{ bits: "9",
744735
name: "SFIFO_FINAL_ERR",
745736
desc: '''

hw/ip/csrng/doc/registers.md

Lines changed: 3 additions & 11 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: `0x7ff0fe13`
558+
- Reset mask: `0x7ff0fe03`
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": 2}, {"name": "SFIFO_KEYVRC_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 4}, {"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}, {"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}, {"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}, {"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 |
@@ -585,9 +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:5 | | | Reserved |
589-
| 4 | ro | 0x0 | [SFIFO_KEYVRC_ERR](#err_code--sfifo_keyvrc_err) |
590-
| 3:2 | | | Reserved |
588+
| 8:2 | | | Reserved |
591589
| 1 | ro | 0x0 | [SFIFO_GENBITS_ERR](#err_code--sfifo_genbits_err) |
592590
| 0 | ro | 0x0 | [SFIFO_CMD_ERR](#err_code--sfifo_cmd_err) |
593591

@@ -700,12 +698,6 @@ final FIFO. The type of error is reflected in the type status
700698
bits (bits 28 through 30 of this register).
701699
This bit will stay set until the next reset.
702700

703-
### ERR_CODE . SFIFO_KEYVRC_ERR
704-
This bit will be set to one when an error has been detected for the
705-
keyvrc FIFO. The type of error is reflected in the type status
706-
bits (bits 28 through 30 of this register).
707-
This bit will stay set until the next reset.
708-
709701
### ERR_CODE . SFIFO_GENBITS_ERR
710702
This bit will be set to one when an error has been detected for the
711703
command stage genbits FIFO. The type of error is reflected in the type status

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ package csrng_env_pkg;
5858
typedef enum int {
5959
sfifo_cmd_error = 0,
6060
sfifo_genbits_error = 1,
61-
sfifo_keyvrc_error = 2,
6261
sfifo_final_error = 3,
6362
sfifo_gbencack_error = 4,
6463
sfifo_grcstage_error = 5,
@@ -83,7 +82,6 @@ package csrng_env_pkg;
8382
// ERR_CODE
8483
sfifo_cmd_err = 0,
8584
sfifo_genbits_err = 1,
86-
sfifo_keyvrc_err = 2,
8785
sfifo_final_err = 3,
8886
sfifo_gbencack_err = 4,
8987
sfifo_grcstage_err = 5,
@@ -105,7 +103,6 @@ package csrng_env_pkg;
105103
// ERR_CODE_TEST
106104
sfifo_cmd_err_test = 21,
107105
sfifo_genbits_err_test = 22,
108-
sfifo_keyvrc_err_test = 23,
109106
sfifo_final_err_test = 24,
110107
sfifo_gbencack_err_test = 25,
111108
sfifo_grcstage_err_test = 26,
@@ -131,7 +128,6 @@ package csrng_env_pkg;
131128
typedef enum int {
132129
SFIFO_CMD_ERR = 0,
133130
SFIFO_GENBITS_ERR = 1,
134-
SFIFO_KEYVRC_ERR = 4,
135131
SFIFO_FINAL_ERR = 9,
136132
SFIFO_GBENCACK_ERR = 10,
137133
SFIFO_GRCSTAGE_ERR = 11,
@@ -171,9 +167,8 @@ package csrng_env_pkg;
171167
sfifo_grcstage = 4,
172168
sfifo_gbencack = 5,
173169
sfifo_final = 6,
174-
sfifo_keyvrc = 7,
175-
sfifo_genbits = 8,
176-
sfifo_cmd = 9
170+
sfifo_genbits = 7,
171+
sfifo_cmd = 8
177172
} which_fifo_e;
178173

179174
typedef enum int {

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ interface csrng_path_if
1717
case (fifo_name) inside
1818
"sfifo_cmd", "sfifo_genbits": return {core_path, $sformatf(".gen_cmd_stage[%0d]", app),
1919
".u_csrng_cmd_stage.", fifo_name, "_", which_path};
20-
"sfifo_keyvrc": return {core_path, ".u_csrng_ctr_drbg_cmd.",
21-
fifo_name, "_", which_path};
2220
"sfifo_final": return {core_path, ".u_csrng_ctr_drbg_upd.", fifo_name, "_", which_path};
2321
"sfifo_gbencack", "sfifo_grcstage", "sfifo_ggenreq", "sfifo_gadstage", "sfifo_ggenbits":
2422
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: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,7 @@ 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_keyvrc_err,
104-
sfifo_final_err, sfifo_gbencack_err, sfifo_grcstage_err,
103+
sfifo_cmd_err, sfifo_genbits_err, sfifo_final_err, sfifo_gbencack_err, sfifo_grcstage_err,
105104
sfifo_gadstage_err, sfifo_ggenbits_err, sfifo_cmdid_err, sfifo_ggenreq_err: begin
106105
fld = csr.get_field_by_name(fld_name);
107106
fifo_base_path = fld_name.substr(0, last_index-1);
@@ -300,7 +299,7 @@ class csrng_err_vseq extends csrng_base_vseq;
300299
csr_rd(.ptr(ral.err_code), .value(backdoor_err_code_val));
301300
cov_vif.cg_err_code_sample(.err_code(backdoor_err_code_val));
302301
end
303-
sfifo_cmd_err_test, sfifo_genbits_err_test, sfifo_keyvrc_err_test,
302+
sfifo_cmd_err_test, sfifo_genbits_err_test,
304303
sfifo_final_err_test, sfifo_gbencack_err_test, sfifo_grcstage_err_test,
305304
sfifo_ggenreq_err_test, sfifo_gadstage_err_test, sfifo_ggenbits_err_test,
306305
sfifo_cmdid_err_test, cmd_stage_sm_err_test, main_sm_err_test, drbg_cmd_sm_err_test,

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,9 @@ 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,
224-
sfifo_keyvrc_error, sfifo_final_error, sfifo_gbencack_error,
225-
sfifo_grcstage_error, sfifo_gadstage_error, sfifo_ggenbits_error,
226-
sfifo_cmdid_error, sfifo_ggenreq_error: begin
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,
225+
sfifo_ggenreq_error: begin
227226
fifo_base_path = fld_name.substr(0, last_index-1);
228227

229228
foreach (path_exts[i]) begin

hw/ip/csrng/rtl/csrng_core.sv

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,6 @@ module csrng_core import csrng_pkg::*; #(
130130
logic main_sm_cmd_vld;
131131
logic clr_adata_packer;
132132

133-
logic ctr_drbg_cmd_sfifo_keyvrc_err_sum;
134-
logic [2:0] ctr_drbg_cmd_sfifo_keyvrc_err;
135133
logic ctr_drbg_upd_sfifo_final_err_sum;
136134
logic [2:0] ctr_drbg_upd_sfifo_final_err;
137135
logic ctr_drbg_gen_sfifo_gbencack_err_sum;
@@ -419,7 +417,6 @@ module csrng_core import csrng_pkg::*; #(
419417
assign event_cs_fatal_err = (cs_enable_fo[1] && (
420418
(|cmd_stage_sfifo_cmd_err_sum) ||
421419
(|cmd_stage_sfifo_genbits_err_sum) ||
422-
ctr_drbg_cmd_sfifo_keyvrc_err_sum ||
423420
ctr_drbg_upd_sfifo_final_err_sum ||
424421
ctr_drbg_gen_sfifo_gbencack_err_sum ||
425422
ctr_drbg_gen_sfifo_grcstage_err_sum ||
@@ -435,8 +432,6 @@ module csrng_core import csrng_pkg::*; #(
435432
fatal_loc_events;
436433

437434
// set fifo errors that are single instances of source
438-
assign ctr_drbg_cmd_sfifo_keyvrc_err_sum = (|ctr_drbg_cmd_sfifo_keyvrc_err) ||
439-
err_code_test_bit[4];
440435
assign ctr_drbg_upd_sfifo_final_err_sum = (|ctr_drbg_upd_sfifo_final_err) ||
441436
err_code_test_bit[9];
442437
assign ctr_drbg_gen_sfifo_gbencack_err_sum = (|ctr_drbg_gen_sfifo_gbencack_err) ||
@@ -468,7 +463,6 @@ module csrng_core import csrng_pkg::*; #(
468463
ctr_drbg_gen_sfifo_grcstage_err[2] ||
469464
ctr_drbg_gen_sfifo_gbencack_err[2] ||
470465
ctr_drbg_upd_sfifo_final_err[2] ||
471-
ctr_drbg_cmd_sfifo_keyvrc_err[2] ||
472466
(|cmd_stage_sfifo_genbits_err_wr) ||
473467
(|cmd_stage_sfifo_cmd_err_wr) ||
474468
err_code_test_bit[28];
@@ -480,7 +474,6 @@ module csrng_core import csrng_pkg::*; #(
480474
ctr_drbg_gen_sfifo_grcstage_err[1] ||
481475
ctr_drbg_gen_sfifo_gbencack_err[1] ||
482476
ctr_drbg_upd_sfifo_final_err[1] ||
483-
ctr_drbg_cmd_sfifo_keyvrc_err[1] ||
484477
(|cmd_stage_sfifo_genbits_err_rd) ||
485478
(|cmd_stage_sfifo_cmd_err_rd) ||
486479
err_code_test_bit[29];
@@ -492,7 +485,6 @@ module csrng_core import csrng_pkg::*; #(
492485
ctr_drbg_gen_sfifo_grcstage_err[0] ||
493486
ctr_drbg_gen_sfifo_gbencack_err[0] ||
494487
ctr_drbg_upd_sfifo_final_err[0] ||
495-
ctr_drbg_cmd_sfifo_keyvrc_err[0] ||
496488
(|cmd_stage_sfifo_genbits_err_st) ||
497489
(|cmd_stage_sfifo_cmd_err_st) ||
498490
err_code_test_bit[30];
@@ -506,10 +498,6 @@ module csrng_core import csrng_pkg::*; #(
506498
assign hw2reg.err_code.sfifo_genbits_err.de = cs_enable_fo[3] &&
507499
(|cmd_stage_sfifo_genbits_err_sum);
508500

509-
assign hw2reg.err_code.sfifo_keyvrc_err.d = 1'b1;
510-
assign hw2reg.err_code.sfifo_keyvrc_err.de = cs_enable_fo[6] &&
511-
ctr_drbg_cmd_sfifo_keyvrc_err_sum;
512-
513501
assign hw2reg.err_code.sfifo_final_err.d = 1'b1;
514502
assign hw2reg.err_code.sfifo_final_err.de = cs_enable_fo[11] &&
515503
ctr_drbg_upd_sfifo_final_err_sum;
@@ -1206,8 +1194,7 @@ module csrng_core import csrng_pkg::*; #(
12061194
.update_rsp_rdy_o (cmd_upd_rsp_rdy),
12071195
.update_rsp_data_i(upd_rsp_data),
12081196

1209-
.sm_err_o (drbg_cmd_sm_err),
1210-
.fifo_keyvrc_err_o (ctr_drbg_cmd_sfifo_keyvrc_err)
1197+
.sm_err_o (drbg_cmd_sm_err)
12111198
);
12121199

12131200
//-------------------------------------
@@ -1453,9 +1440,8 @@ module csrng_core import csrng_pkg::*; #(
14531440
logic [SeedLen-1:0] unused_gen_rsp_pdata;
14541441
logic unused_state_db_inst_state;
14551442

1456-
assign unused_err_code_test_bit = (|err_code_test_bit[19:16]) || (|err_code_test_bit[8:5]) ||
1457-
(|err_code_test_bit[3:2]);
1458-
assign unused_enable_fo = cs_enable_fo[42] || (|cs_enable_fo[9:7]) || |(cs_enable_fo[5:4]);
1443+
assign unused_err_code_test_bit = (|err_code_test_bit[19:16]) || (|err_code_test_bit[8:2]);
1444+
assign unused_enable_fo = cs_enable_fo[42] || (|cs_enable_fo[9:4]);
14591445
assign unused_reg2hw_genbits = (|reg2hw.genbits.q);
14601446
assign unused_int_state_val = (|reg2hw.int_state_val.q);
14611447
assign unused_reseed_interval = reg2hw.reseed_interval.qe;

hw/ip/csrng/rtl/csrng_ctr_drbg_cmd.sv

Lines changed: 17 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -41,32 +41,19 @@ module csrng_ctr_drbg_cmd import csrng_pkg::*; (
4141
input csrng_upd_data_t update_rsp_data_i,
4242

4343
// Error status outputs
44-
output logic sm_err_o,
45-
output logic [2:0] fifo_keyvrc_err_o
44+
output logic sm_err_o
4645
);
4746

48-
localparam int KeyVRCFifoWidth = CoreDataWidth + 1;
49-
5047
// signals
5148
csrng_core_data_t req_data;
5249
csrng_core_data_t prep_core_data;
53-
csrng_core_data_t keyvrc_data;
54-
logic keyvrc_glast;
5550

5651
logic [SeedLen-1:0] prep_seed_material;
5752
logic [KeyLen-1:0] prep_key;
5853
logic [BlkLen-1:0] prep_v;
5954
logic [CtrLen-1:0] prep_rc;
6055
logic bypass_upd;
6156

62-
// keyvrc fifo
63-
logic sfifo_keyvrc_wvld;
64-
logic sfifo_keyvrc_wrdy;
65-
logic [KeyVRCFifoWidth-1:0] sfifo_keyvrc_wdata;
66-
logic sfifo_keyvrc_rvld;
67-
logic sfifo_keyvrc_rrdy;
68-
logic [KeyVRCFifoWidth-1:0] sfifo_keyvrc_rdata;
69-
7057

7158
// Encoding generated with:
7259
// $ ./util/design/sparse-fsm-encode.py -d 3 -m 3 -n 5 \
@@ -98,7 +85,6 @@ module csrng_ctr_drbg_cmd import csrng_pkg::*; (
9885
// SEC_CM: UPDRSP.FSM.SPARSE
9986
`PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, ReqIdle)
10087

101-
10288
//--------------------------------------------
10389
// Prepare/mux values for update step
10490
//--------------------------------------------
@@ -169,18 +155,18 @@ module csrng_ctr_drbg_cmd import csrng_pkg::*; (
169155
always_comb begin
170156
state_d = state_q;
171157
req_rdy_o = 1'b0;
158+
rsp_vld_o = 1'b0;
172159
update_req_vld_o = 1'b0;
173160
update_rsp_rdy_o = 1'b0;
174-
sfifo_keyvrc_wvld = 1'b0;
175161
sm_err_o = 1'b0;
176162

177163
unique case (state_q)
178164
ReqIdle: begin
179165
if (bypass_upd) begin
180166
// The update unit is not required for the command at hand and we can
181167
// complete the request handshake internally.
182-
req_rdy_o = enable_i && sfifo_keyvrc_wrdy;
183-
sfifo_keyvrc_wvld = req_vld_i;
168+
req_rdy_o = enable_i && rsp_rdy_i;
169+
rsp_vld_o = req_vld_i;
184170
end else begin
185171
// Update unit is required - complete first the request and then the
186172
// response handshake before asserting the upstrem ready.
@@ -193,8 +179,8 @@ module csrng_ctr_drbg_cmd import csrng_pkg::*; (
193179
RspPend: begin
194180
// We get here after having done a request handshake with the update unit.
195181
// Now, wait for the response handshake to complete the transaction.
196-
sfifo_keyvrc_wvld = update_rsp_vld_i;
197-
update_rsp_rdy_o = sfifo_keyvrc_wrdy;
182+
rsp_vld_o = update_rsp_vld_i;
183+
update_rsp_rdy_o = rsp_rdy_i;
198184
if (update_rsp_vld_i && update_rsp_rdy_o) begin
199185
req_rdy_o = 1'b1;
200186
state_d = ReqIdle;
@@ -210,66 +196,25 @@ module csrng_ctr_drbg_cmd import csrng_pkg::*; (
210196
endcase
211197
end
212198

213-
214-
//--------------------------------------------
215-
// final cmd block processing
216-
//--------------------------------------------
217-
218-
prim_fifo_sync #(
219-
.Width(KeyVRCFifoWidth),
220-
.Pass(0),
221-
.Depth(1),
222-
.OutputZeroIfEmpty(1'b0)
223-
) u_prim_fifo_sync_keyvrc (
224-
.clk_i (clk_i),
225-
.rst_ni (rst_ni),
226-
.clr_i (!enable_i),
227-
.wvalid_i(sfifo_keyvrc_wvld),
228-
.wready_o(sfifo_keyvrc_wrdy),
229-
.wdata_i (sfifo_keyvrc_wdata),
230-
.rvalid_o(sfifo_keyvrc_rvld),
231-
.rready_i(sfifo_keyvrc_rrdy),
232-
.rdata_o (sfifo_keyvrc_rdata),
233-
.full_o (),
234-
.depth_o (),
235-
.err_o ()
236-
);
237-
238-
// Route either data from request input or update response into keyvrc FIFO
199+
// Route either data from request input or update response to response output
239200
always_comb begin
240-
keyvrc_data = prep_core_data;
241-
keyvrc_glast = req_glast_i;
242-
if (prep_core_data.cmd == UNI) begin
201+
rsp_data_o = prep_core_data;
202+
rsp_glast_o = req_glast_i;
203+
if (req_data_i.cmd == UNI) begin
243204
// Zeroize everything but inst_id and cmd (?)
244-
keyvrc_data = '{default: '0};
245-
keyvrc_data.inst_id = prep_core_data.inst_id;
246-
keyvrc_data.cmd = prep_core_data.cmd;
205+
rsp_data_o = '{default: '0};
206+
rsp_data_o.inst_id = req_data_i.inst_id;
207+
rsp_data_o.cmd = req_data_i.cmd;
247208
end else if (!bypass_upd) begin
248209
// Update key and v with values from the update unit if
249210
// non-zero pdata were provided
250-
keyvrc_data.key = update_rsp_data_i.key;
251-
keyvrc_data.v = update_rsp_data_i.v;
252-
keyvrc_data.inst_id = update_rsp_data_i.inst_id;
253-
keyvrc_data.cmd = update_rsp_data_i.cmd;
211+
rsp_data_o.key = update_rsp_data_i.key;
212+
rsp_data_o.v = update_rsp_data_i.v;
213+
rsp_data_o.inst_id = update_rsp_data_i.inst_id;
214+
rsp_data_o.cmd = update_rsp_data_i.cmd;
254215
end
255216
end
256217

257-
assign sfifo_keyvrc_wdata = {keyvrc_glast,
258-
keyvrc_data};
259-
260-
assign sfifo_keyvrc_rrdy = rsp_rdy_i && sfifo_keyvrc_rvld;
261-
262-
// cmd response output assignments
263-
assign {rsp_glast_o,
264-
rsp_data_o} = sfifo_keyvrc_rdata;
265-
266-
assign rsp_vld_o = sfifo_keyvrc_rrdy;
267-
268-
assign fifo_keyvrc_err_o =
269-
{( sfifo_keyvrc_wvld && !sfifo_keyvrc_wrdy),
270-
( sfifo_keyvrc_rrdy && !sfifo_keyvrc_rvld),
271-
(!sfifo_keyvrc_wrdy && !sfifo_keyvrc_rvld)};
272-
273218
// Unused signals
274219
logic [SeedLen-1:0] unused_upd_rsp_pdata;
275220
assign unused_upd_rsp_pdata = update_rsp_data_i.pdata;

hw/ip/csrng/rtl/csrng_main_sm.sv

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,14 @@ module csrng_main_sm import csrng_pkg::*; (
9595
end
9696
MainSmCmdVld: begin
9797
cmd_vld_o = 1'b1;
98-
if (cmd_rdy_i) state_d = MainSmClrAData;
98+
if (cmd_rdy_i) begin
99+
if (cmd_complete_i) begin
100+
clr_adata_packer_o = 1'b1;
101+
state_d = MainSmIdle;
102+
end else begin
103+
state_d = MainSmClrAData;
104+
end
105+
end
99106
end
100107
MainSmClrAData: begin
101108
clr_adata_packer_o = 1'b1;

0 commit comments

Comments
 (0)