Skip to content

Commit ea4d1ec

Browse files
committed
[keymgr_dpe, dv] Remove otp_ctrl dependency
This commit removes all otp_ctrl dependency in the keymgr_dpe dv. This change ensures that the dv architecture accurately reflects the dependency in the RTL implementation. Signed-off-by: Raphael Roth <rroth@lowrisc.org>
1 parent 478f6bf commit ea4d1ec

4 files changed

Lines changed: 24 additions & 39 deletions

File tree

hw/ip/keymgr_dpe/dv/env/keymgr_dpe_if.sv

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -108,33 +108,35 @@ interface keymgr_dpe_if(input clk, input rst_n);
108108
task automatic init(bit rand_otp_key, bit invalid_otp_key);
109109
// Keymgr_dpe only latches OTP key once, so this scb does not support change OTP key on the
110110
// fly. Will write a direct sequence to cover otp key change on the fly.
111-
otp_ctrl_pkg::otp_keymgr_key_t local_otp_key;
111+
keymgr_dpe_pkg::keymgr_dpe_creator_root_key_t local_creator_root_key;
112112

113113
// async delay as these signals are from different clock domain
114114
#($urandom_range(1000, 0) * 1ns);
115115
keymgr_dpe_en = lc_ctrl_pkg::On;
116116
keymgr_dpe_div = 64'h5CFBD765CE33F34E;
117117
otp_device_id = 'hF0F0;
118-
otp_key = otp_ctrl_pkg::OTP_KEYMGR_KEY_DEFAULT;
119118
for (int i = 0; i < NumRomDigestInputs; ++i) begin
120119
rom_digests[i].data = 256'hA20A046CF42E6EAC560A3F82BFA76285B5C1D4AEA7C915E49A32D1C89BE0F507;
121120
rom_digests[i].valid = '1;
122121
end
122+
// Load the default value for all seed's
123+
local_creator_root_key = keymgr_dpe_pkg::KEYMGR_DPE_CREATOR_ROOT_KEY_DEFAULT;
124+
creator_seed = keymgr_dpe_pkg::KEYMGR_DPE_CREATOR_SEED_DEFAULT;
125+
owner_seed = keymgr_dpe_pkg::KEYMGR_DPE_OWNER_SEED_DEFAULT;
126+
// If requested randomize the creator_root_key
123127
if (rand_otp_key) begin
124-
`DV_CHECK_STD_RANDOMIZE_WITH_FATAL(local_otp_key,
125-
local_otp_key.creator_root_key_share0_valid == 1;
126-
local_otp_key.creator_root_key_share1_valid == 1;
127-
!(local_otp_key.creator_root_key_share0 inside {0, '1});
128-
!(local_otp_key.creator_root_key_share1 inside {0, '1});
128+
`DV_CHECK_STD_RANDOMIZE_WITH_FATAL(local_creator_root_key,
129+
local_creator_root_key.share0_valid == 1;
130+
local_creator_root_key.share1_valid == 1;
131+
!(local_creator_root_key.share0 inside {0, '1});
132+
!(local_creator_root_key.share1 inside {0, '1});
129133
, , msg_id)
130-
end else begin
131-
local_otp_key = otp_ctrl_pkg::OTP_KEYMGR_KEY_DEFAULT;
132134
end
133135
if (invalid_otp_key) begin
134-
local_otp_key.creator_root_key_share0_valid = 0;
135-
local_otp_key.creator_root_key_share1_valid = 0;
136+
local_creator_root_key.share0_valid = 0;
137+
local_creator_root_key.share1_valid = 0;
136138
end
137-
otp_key = local_otp_key;
139+
creator_root_key = local_creator_root_key;
138140
endtask
139141

140142
// reset local exp variables when reset is issued

hw/ip/keymgr_dpe/dv/env/keymgr_dpe_scoreboard.sv

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -973,10 +973,10 @@ class keymgr_dpe_scoreboard extends cip_base_scoreboard #(
973973

974974
virtual function void latch_otp_key();
975975
key_shares_t otp_key;
976-
if (cfg.keymgr_dpe_vif.otp_key.creator_root_key_share0_valid &&
977-
cfg.keymgr_dpe_vif.otp_key.creator_root_key_share1_valid) begin
978-
otp_key = {cfg.keymgr_dpe_vif.otp_key.creator_root_key_share1,
979-
cfg.keymgr_dpe_vif.otp_key.creator_root_key_share0};
976+
if (cfg.keymgr_dpe_vif.creator_root_key.share0_valid &&
977+
cfg.keymgr_dpe_vif.creator_root_key.share1_valid) begin
978+
otp_key = {cfg.keymgr_dpe_vif.creator_root_key.share1,
979+
cfg.keymgr_dpe_vif.creator_root_key.share0};
980980
end else begin
981981
if (cfg.en_cov) cov.invalid_hw_input_cg.sample(OtpRootKeyValidLow);
982982
`uvm_info(`gfn, "otp_key valid is low", UVM_LOW)
@@ -1274,7 +1274,7 @@ class keymgr_dpe_scoreboard extends cip_base_scoreboard #(
12741274

12751275
if (exp_match) `DV_CHECK_EQ(byte_data_q.size, keymgr_dpe_pkg::DpeAdvDataWidth / 8)
12761276
act = {<<8{byte_data_q}};
1277-
exp.DiversificationKey = cfg.keymgr_dpe_vif.otp_key.creator_seed;
1277+
exp.DiversificationKey = cfg.keymgr_dpe_vif.creator_seed.seed;
12781278

12791279
for (int i = 0; i < keymgr_dpe_reg_pkg::NumRomDigestInputs; ++i) begin
12801280
exp.RomDigests[i] = cfg.keymgr_dpe_vif.rom_digests[i].data;
@@ -1310,7 +1310,7 @@ class keymgr_dpe_scoreboard extends cip_base_scoreboard #(
13101310
string str = $sformatf("src_slot: %0d\n", current_key_slot.src_slot);
13111311

13121312
act = {<<8{byte_data_q}};
1313-
exp.OwnerRootSecret = cfg.keymgr_dpe_vif.otp_key.owner_seed;
1313+
exp.OwnerRootSecret = cfg.keymgr_dpe_vif.owner_seed.seed;
13141314
get_sw_binding_mirrored_value(exp.SoftwareBinding);
13151315

13161316
`CREATE_CMP_STR(unused)

hw/ip/keymgr_dpe/dv/keymgr_dpe_sim.core

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ description: "KEYMGR_DPE DV sim target"
77
filesets:
88
files_rtl:
99
depend:
10-
- lowrisc:ip:otp_ctrl_pkg
10+
- lowrisc:ip:keymgr_dpe_pkg
1111
- lowrisc:ip:keymgr_dpe
1212

1313
files_dv:

hw/ip/keymgr_dpe/dv/tb.sv

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,6 @@ module tb;
4141
assign keymgr_dpe_if.edn_ack = edn_if[0].ack;
4242
assign keymgr_dpe_if.lfsr_en = dut.lfsr_en;
4343

44-
// Quick fix to propagate the signal from the keymgr_dpe_if to the dut
45-
keymgr_dpe_pkg::keymgr_dpe_creator_root_key_t creator_root_key;
46-
keymgr_dpe_pkg::keymgr_dpe_creator_seed_t creator_seed;
47-
keymgr_dpe_pkg::keymgr_dpe_owner_seed_t owner_seed;
48-
assign creator_root_key.share0 =
49-
keymgr_dpe_if.otp_key.creator_root_key_share0;
50-
assign creator_root_key.share0_valid =
51-
keymgr_dpe_if.otp_key.creator_root_key_share0_valid;
52-
assign creator_root_key.share1 =
53-
keymgr_dpe_if.otp_key.creator_root_key_share1;
54-
assign creator_root_key.share1_valid =
55-
keymgr_dpe_if.otp_key.creator_root_key_share1_valid;
56-
assign creator_seed.seed = keymgr_dpe_if.otp_key.creator_seed;
57-
assign creator_seed.seed_valid = keymgr_dpe_if.otp_key.creator_seed_valid;
58-
assign owner_seed.seed = keymgr_dpe_if.otp_key.owner_seed;
59-
assign owner_seed.seed_valid = keymgr_dpe_if.otp_key.owner_seed_valid;
60-
6144
// dut
6245
// TODO(opentitan-integrated/issues/332):
6346
// need to model the OTP seed input
@@ -75,9 +58,9 @@ module tb;
7558
.kmac_en_masking_i (1'b1),
7659
.lc_keymgr_en_i (keymgr_dpe_if.keymgr_dpe_en),
7760
.lc_keymgr_div_i (keymgr_dpe_if.keymgr_dpe_div),
78-
.creator_root_key_i (creator_root_key),
79-
.creator_seed_i (creator_seed),
80-
.owner_seed_i (owner_seed),
61+
.creator_root_key_i (keymgr_dpe_if.creator_root_key),
62+
.creator_seed_i (keymgr_dpe_if.creator_seed),
63+
.owner_seed_i (keymgr_dpe_if.owner_seed),
8164
.device_id_i (keymgr_dpe_if.otp_device_id),
8265
.rom_digest_i (keymgr_dpe_if.rom_digests),
8366
.edn_o (edn_if[0].req),

0 commit comments

Comments
 (0)