Skip to content

Commit 39b883c

Browse files
committed
cleaning up sk encode states created overlapping cases as it was unclear the two parameter definitions overlapped.
norm check failures in the last sample were getting missed, caught in regression abr ctrl was leaving data in the api reg, needs to clear it when reading
1 parent 78a5c24 commit 39b883c

File tree

4 files changed

+20
-19
lines changed

4 files changed

+20
-19
lines changed

src/abr_top/rtl/abr_ctrl.sv

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,11 +1070,11 @@ always_comb kv_mlkem_msg_write_data = '0;
10701070
end else if (zeroize) begin
10711071
api_reg_rdata <= '0;
10721072
end else begin
1073-
if (api_keymem_rd_vld & api_sk_reg_rd_dec) api_reg_rdata <= abr_scratch_reg.raw[api_sk_reg_raddr];
1074-
else if (mlkem_api_dk_rd_vld & mlkem_api_dk_reg_dec) api_reg_rdata <= abr_scratch_reg.raw[mlkem_api_dk_reg_addr];
1075-
else if (mlkem_api_ek_rd_vld & mlkem_api_ek_reg_dec) api_reg_rdata <= abr_scratch_reg.raw[mlkem_api_ek_reg_addr];
1076-
else if (mldsa_valid_reg & api_pubkey_rho_dec) api_reg_rdata <= abr_scratch_reg.raw[api_pk_reg_raddr];
1077-
else if (mldsa_valid_reg & api_sig_reg_re) api_reg_rdata <= signature_reg_rdata;
1073+
if (api_sk_reg_rd_dec) api_reg_rdata <= {ABR_REG_WIDTH{api_keymem_rd_vld}} & abr_scratch_reg.raw[api_sk_reg_raddr];
1074+
else if (mlkem_api_dk_reg_dec) api_reg_rdata <= {ABR_REG_WIDTH{mlkem_api_dk_rd_vld}} & abr_scratch_reg.raw[mlkem_api_dk_reg_addr];
1075+
else if (mlkem_api_ek_reg_dec) api_reg_rdata <= {ABR_REG_WIDTH{mlkem_api_ek_rd_vld}} & abr_scratch_reg.raw[mlkem_api_ek_reg_addr];
1076+
else if (api_pubkey_rho_dec) api_reg_rdata <= {ABR_REG_WIDTH{mldsa_valid_reg}} & abr_scratch_reg.raw[api_pk_reg_raddr];
1077+
else if (api_sig_reg_re) api_reg_rdata <= {ABR_REG_WIDTH{mldsa_valid_reg}} & signature_reg_rdata;
10781078
end
10791079
end
10801080

src/norm_check/rtl/norm_check_ctrl.sv

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ module norm_check_ctrl
3939
input wire [5:0] randomness,
4040

4141
input wire [ABR_MEM_ADDR_WIDTH-1:0] mem_base_addr,
42+
input logic mem_rd_data_valid,
4243
output mem_if_t mem_rd_req,
4344
output logic norm_check_done
4445
);
@@ -143,7 +144,7 @@ module norm_check_ctrl
143144
incr_rd_addr = 1'b1;
144145
end
145146
CHK_DONE: begin
146-
read_fsm_state_ns = CHK_IDLE;
147+
read_fsm_state_ns = mem_rd_data_valid ? CHK_DONE: CHK_IDLE;
147148
norm_check_done = 1'b1;
148149
end
149150
default begin

src/norm_check/rtl/norm_check_top.sv

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ module norm_check_top
5454
);
5555

5656
logic [3:0] check_a_invalid;
57-
logic norm_check_done_int;
57+
logic norm_check_done_rd;
5858

5959
generate
6060
for (genvar i = 0; i < 4; i++) begin : gen_check_a_invalid
@@ -73,7 +73,8 @@ module norm_check_top
7373
else if (zeroize)
7474
norm_check_done <= '0;
7575
else
76-
norm_check_done <= norm_check_done_int;
76+
//signal done once reads have all been issued and processed
77+
norm_check_done <= norm_check_done_rd & ~mem_rd_data_valid;
7778
end
7879

7980
always_ff @(posedge clk or negedge reset_n) begin
@@ -109,7 +110,8 @@ module norm_check_top
109110
.randomness(randomness),
110111
.mem_base_addr(mem_base_addr),
111112
.mem_rd_req(mem_rd_req),
112-
.norm_check_done(norm_check_done_int)
113+
.mem_rd_data_valid(mem_rd_data_valid),
114+
.norm_check_done(norm_check_done_rd)
113115
);
114116

115117

src/sk_encode/rtl/skencode.sv

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,14 @@ module skencode
6161
localparam THE_LAST_ADDR = ((MLDSA_K * MLDSA_N)/4)+((MLDSA_L * MLDSA_N)/4)-1;
6262
localparam THE_LAST_API = ((MLDSA_K +MLDSA_L)*MLDSA_N*3)/32;
6363

64-
// Main State Machine States
65-
localparam SKENC_IDLE = 2'b00,
66-
SKENC_READ = 2'b01,
67-
SKENC_DONE = 2'b10;
68-
69-
// Main State Machine States
70-
localparam SKENC_WAIT_BUFFER = 2'b00,
71-
SKENC_WRITE = 2'b01,
72-
SKENC_STALL = 2'b10,
73-
SKENC_GET_LAST = 2'b11;
64+
// State Machine States
65+
localparam SKENC_IDLE = 3'b000,
66+
SKENC_READ = 3'b001,
67+
SKENC_WAIT_BUFFER = 3'b010,
68+
SKENC_WRITE = 3'b011,
69+
SKENC_STALL = 3'b100,
70+
SKENC_GET_LAST = 3'b101,
71+
SKENC_DONE = 3'b111;
7472

7573

7674
logic [2:0] main_state, next_main_state, write_state, next_write_state;

0 commit comments

Comments
 (0)