Skip to content

Commit 38adbd4

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 ff7052f commit 38adbd4

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
@@ -99,8 +99,7 @@ class csrng_err_vseq extends csrng_base_vseq;
9999
cfg.which_app_err_alert, fld_name), UVM_MEDIUM)
100100

101101
case (cfg.which_err_code) inside
102-
sfifo_cmd_err, sfifo_genbits_err, sfifo_keyvrc_err,
103-
sfifo_final_err, sfifo_gbencack_err, sfifo_grcstage_err,
102+
sfifo_cmd_err, sfifo_genbits_err, sfifo_final_err, sfifo_gbencack_err, sfifo_grcstage_err,
104103
sfifo_gadstage_err, sfifo_ggenbits_err, sfifo_cmdid_err, sfifo_ggenreq_err: begin
105104
fld = csr.get_field_by_name(fld_name);
106105
fifo_base_path = fld_name.substr(0, last_index-1);
@@ -299,7 +298,7 @@ class csrng_err_vseq extends csrng_base_vseq;
299298
csr_rd(.ptr(ral.err_code), .value(backdoor_err_code_val));
300299
cov_vif.cg_err_code_sample(.err_code(backdoor_err_code_val));
301300
end
302-
sfifo_cmd_err_test, sfifo_genbits_err_test, sfifo_keyvrc_err_test,
301+
sfifo_cmd_err_test, sfifo_genbits_err_test,
303302
sfifo_final_err_test, sfifo_gbencack_err_test, sfifo_grcstage_err_test,
304303
sfifo_ggenreq_err_test, sfifo_gadstage_err_test, sfifo_ggenbits_err_test,
305304
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;
@@ -1219,8 +1207,7 @@ module csrng_core import csrng_pkg::*; #(
12191207
.update_rsp_rdy_o (cmd_upd_rsp_rdy),
12201208
.update_rsp_data_i(upd_rsp_data),
12211209

1222-
.sm_err_o (drbg_cmd_sm_err),
1223-
.fifo_keyvrc_err_o (ctr_drbg_cmd_sfifo_keyvrc_err)
1210+
.sm_err_o (drbg_cmd_sm_err)
12241211
);
12251212

12261213
//-------------------------------------
@@ -1466,9 +1453,8 @@ module csrng_core import csrng_pkg::*; #(
14661453
logic [SeedLen-1:0] unused_gen_rsp_pdata;
14671454
logic unused_state_db_inst_state;
14681455

1469-
assign unused_err_code_test_bit = (|err_code_test_bit[19:16]) || (|err_code_test_bit[8:5]) ||
1470-
(|err_code_test_bit[3:2]);
1471-
assign unused_enable_fo = cs_enable_fo[42] || (|cs_enable_fo[9:7]) || |(cs_enable_fo[5:4]);
1456+
assign unused_err_code_test_bit = (|err_code_test_bit[19:16]) || (|err_code_test_bit[8:2]);
1457+
assign unused_enable_fo = cs_enable_fo[42] || (|cs_enable_fo[9:4]);
14721458
assign unused_reg2hw_genbits = (|reg2hw.genbits.q);
14731459
assign unused_int_state_val = (|reg2hw.int_state_val.q);
14741460
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
//--------------------------------------------
@@ -167,16 +153,16 @@ module csrng_ctr_drbg_cmd import csrng_pkg::*; (
167153
always_comb begin
168154
state_d = state_q;
169155
req_rdy_o = 1'b0;
156+
rsp_vld_o = 1'b0;
170157
update_req_vld_o = 1'b0;
171158
update_rsp_rdy_o = 1'b0;
172-
sfifo_keyvrc_wvld = 1'b0;
173159
sm_err_o = 1'b0;
174160

175161
unique case (state_q)
176162
ReqIdle: begin
177163
if (bypass_upd) begin
178-
req_rdy_o = enable_i && sfifo_keyvrc_wrdy;
179-
sfifo_keyvrc_wvld = req_vld_i;
164+
req_rdy_o = enable_i && rsp_rdy_i;
165+
rsp_vld_o = req_vld_i;
180166
end else begin
181167
update_req_vld_o = req_vld_i;
182168
if (update_req_vld_o && update_req_rdy_i) begin
@@ -185,8 +171,8 @@ module csrng_ctr_drbg_cmd import csrng_pkg::*; (
185171
end
186172
end
187173
RspPend: begin
188-
sfifo_keyvrc_wvld = update_rsp_vld_i;
189-
update_rsp_rdy_o = sfifo_keyvrc_wrdy;
174+
rsp_vld_o = update_rsp_vld_i;
175+
update_rsp_rdy_o = rsp_rdy_i;
190176
if (update_rsp_vld_i && update_rsp_rdy_o) begin
191177
req_rdy_o = 1'b1;
192178
state_d = ReqIdle;
@@ -202,66 +188,25 @@ module csrng_ctr_drbg_cmd import csrng_pkg::*; (
202188
endcase
203189
end
204190

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

249-
assign sfifo_keyvrc_wdata = {keyvrc_glast,
250-
keyvrc_data};
251-
252-
assign sfifo_keyvrc_rrdy = rsp_rdy_i && sfifo_keyvrc_rvld;
253-
254-
// cmd response output assignments
255-
assign {rsp_glast_o,
256-
rsp_data_o} = sfifo_keyvrc_rdata;
257-
258-
assign rsp_vld_o = sfifo_keyvrc_rrdy;
259-
260-
assign fifo_keyvrc_err_o =
261-
{( sfifo_keyvrc_wvld && !sfifo_keyvrc_wrdy),
262-
( sfifo_keyvrc_rrdy && !sfifo_keyvrc_rvld),
263-
(!sfifo_keyvrc_wrdy && !sfifo_keyvrc_rvld)};
264-
265210
// Unused signals
266211
logic [SeedLen-1:0] unused_upd_rsp_pdata;
267212
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)