Skip to content

Commit 23c60df

Browse files
author
Maurus Item
committed
Fixed vulnerability in x_buffer_clock_enable and added buffer_clock to ignore list.
1 parent 96412df commit 23c60df

File tree

3 files changed

+35
-21
lines changed

3 files changed

+35
-21
lines changed

rtl/redmule_top.sv

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -334,13 +334,6 @@ end
334334
/*----------------------------------------------------------------*/
335335

336336
logic [REP-1:0] x_buffer_clk_en;
337-
logic x_buffer_clock;
338-
tc_clk_gating i_x_buffer_clock_gating (
339-
.clk_i ( clk_i ),
340-
.en_i ( x_buffer_clk_en[0] ),
341-
.test_en_i ( '0 ),
342-
.clk_o ( x_buffer_clock )
343-
);
344337

345338
logic [Width-1:0][Height-1:0][BITW-1:0] x_buffer_q;
346339
redmule_x_buffer #(
@@ -350,14 +343,15 @@ redmule_x_buffer #(
350343
.Width ( Width ),
351344
.REP ( REP )
352345
) i_x_buffer (
353-
.clk_i ( x_buffer_clock ),
354-
.rst_ni ( rst_ni ),
355-
.clear_i ( clear | soft_clear ),
356-
.ctrl_i ( x_buffer_ctrl ),
357-
.flags_o ( x_buffer_flgs ),
358-
.x_buffer_o ( x_buffer_q ),
359-
.x_buffer_i ( x_fifo_q.data ),
360-
.fault_o ( x_fault )
346+
.clk_i ( clk_i ),
347+
.rst_ni ( rst_ni ),
348+
.buffer_clk_en_i ( x_buffer_clk_en ),
349+
.clear_i ( clear | soft_clear ),
350+
.ctrl_i ( x_buffer_ctrl ),
351+
.flags_o ( x_buffer_flgs ),
352+
.x_buffer_o ( x_buffer_q ),
353+
.x_buffer_i ( x_fifo_q.data ),
354+
.fault_o ( x_fault )
361355
);
362356

363357

rtl/redmule_x_buffer.sv

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ localparam int unsigned TOT_DEPTH = H*D
4040
)(
4141
input logic clk_i,
4242
input logic rst_ni,
43+
input logic [REP-1:0] buffer_clk_en_i,
4344
input logic [REP-1:0] clear_i,
4445
input x_buffer_ctrl_t [REP-1:0] ctrl_i,
4546
output x_buffer_flgs_t [REP-1:0] flags_o,
@@ -48,6 +49,16 @@ localparam int unsigned TOT_DEPTH = H*D
4849
output logic fault_o
4950
);
5051

52+
logic [REP-1:0] buffer_clock;
53+
for (genvar r = 0; r < REP; r++) begin: gen_clock_gate_cells
54+
tc_clk_gating i_x_buffer_clock_gating (
55+
.clk_i ( clk_i ),
56+
.en_i ( buffer_clk_en_i[r] ),
57+
.test_en_i ( '0 ),
58+
.clk_o ( buffer_clock[r] )
59+
);
60+
end
61+
5162
// W Index Counnter
5263
logic [REP-1:0][$clog2(W):0] w_index_b, w_index_v, w_index_d, w_index_q;
5364
logic [REP-1:0][$clog2(W):0] w_limit_v;
@@ -78,7 +89,9 @@ for (genvar r = 0; r < REP; r++) begin: gen_w_counter_default_state
7889
assign w_index_b[r] = '0;
7990
end
8091

81-
`FF(w_index_q, w_index_d, w_index_b);
92+
for (genvar r = 0; r < REP; r++) begin: gen_w_counter_clock_gated_ffs
93+
`FFARN(w_index_q[r], w_index_d[r], w_index_b[r], buffer_clock[r], rst_ni);
94+
end
8295

8396
// Depth Shift Counter with partial deactivation
8497
logic [REP-1:0][$clog2(D):0] d_shift_b, d_shift_v, d_shift_d, d_shift_q;
@@ -107,7 +120,9 @@ for (genvar r = 0; r < REP; r++) begin: gen_d_shift_default_state
107120
assign d_shift_b[r] = '0;
108121
end
109122

110-
`FF(d_shift_q, d_shift_d, d_shift_b);
123+
for (genvar r = 0; r < REP; r++) begin: gen_d_shift_clock_gated_ffs
124+
`FFARN(d_shift_q[r], d_shift_d[r], d_shift_b[r], buffer_clock[r], rst_ni);
125+
end
111126

112127
for (genvar r = 0; r < REP; r++) begin: gen_empty_next_state
113128
always_comb begin
@@ -127,7 +142,9 @@ for (genvar r = 0; r < REP; r++) begin: gen_empty_default_state
127142
assign empty_count_b[r] = '0;
128143
end
129144

130-
`FF(empty_count_q, empty_count_d, empty_count_b);
145+
for (genvar r = 0; r < REP; r++) begin: gen_empty_counter_clock_gated_ffs
146+
`FFARN(empty_count_q[r], empty_count_d[r], empty_count_b[r], buffer_clock[r], rst_ni);
147+
end
131148

132149
for (genvar r = 0; r < REP; r++) begin: gen_depth_shift_counter_reset
133150
always_comb begin : empty_gen_and_shift_count_rst
@@ -170,7 +187,9 @@ for (genvar r = 0; r < REP; r++) begin: gen_h_counter_default_state
170187
assign h_index_b[r] = '0;
171188
end
172189

173-
`FF(h_index_q, h_index_d, h_index_b);
190+
for (genvar r = 0; r < REP; r++) begin: gen_h_counter_clock_gated_ffs
191+
`FFARN(h_index_q[r], h_index_d[r], h_index_b[r], buffer_clock[r], rst_ni);
192+
end
174193

175194
// From here on out we use the signal of the first replica.
176195
// If a fault happens on it then we can detect it since there is no more recursive dependency
@@ -226,8 +245,8 @@ always_comb begin
226245
end
227246
end
228247

229-
`FF(x_pad_q, x_pad_d, '0);
230-
`FF(x_buffer_q, x_buffer_d, '0);
248+
`FFARN(x_pad_q, x_pad_d, '0, buffer_clock[0], rst_ni);
249+
`FFARN(x_buffer_q, x_buffer_d, '0, buffer_clock[0], rst_ni);
231250

232251
// Output assignment
233252
generate

vulnerability_analysis/extract_nets.tcl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ lappend core_netlist_ignore *clk_o
1919
lappend core_netlist_ignore *rst_ni
2020
lappend core_netlist_ignore *rst_n
2121
lappend core_netlist_ignore *rst
22+
lappend core_netlist_ignore *buffer_clock
2223

2324
lappend core_netlist_ignore *regfile_mem
2425
lappend core_netlist_ignore *regfile_mem_generic

0 commit comments

Comments
 (0)