Skip to content

Commit 93d7f30

Browse files
committed
Share round counter in core for w scheduling
Signed-off-by: Joachim Strömbergson <[email protected]>
1 parent 999635a commit 93d7f30

File tree

3 files changed

+21
-41
lines changed

3 files changed

+21
-41
lines changed

src/rtl/sha256_core.v

+2
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ module sha256_core(
157157

158158
reg w_init;
159159
reg w_next;
160+
reg [5 : 0] w_round;
160161
wire [31 : 0] w_data;
161162

162163

@@ -174,6 +175,7 @@ module sha256_core(
174175
.reset_n(reset_n),
175176

176177
.block(block),
178+
.round(t_ctr_reg),
177179

178180
.init(w_init),
179181
.next(w_next),

src/rtl/sha256_w_mem.v

+6-37
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ module sha256_w_mem(
4444
input wire reset_n,
4545

4646
input wire [511 : 0] block,
47+
input wire [5 : 0] round,
4748

4849
input wire init,
4950
input wire next,
@@ -73,10 +74,6 @@ module sha256_w_mem(
7374
reg [31 : 0] w_mem15_new;
7475
reg w_mem_we;
7576

76-
reg [5 : 0] w_ctr_reg;
77-
reg [5 : 0] w_ctr_new;
78-
reg w_ctr_we;
79-
8077

8178
//----------------------------------------------------------------
8279
// Wires.
@@ -103,10 +100,9 @@ module sha256_w_mem(
103100

104101
if (!reset_n)
105102
begin
106-
for (i = 0 ; i < 16 ; i = i + 1)
103+
for (i = 0 ; i < 16 ; i = i + 1) begin
107104
w_mem[i] <= 32'h0;
108-
109-
w_ctr_reg <= 6'h0;
105+
end
110106
end
111107
else
112108
begin
@@ -129,9 +125,6 @@ module sha256_w_mem(
129125
w_mem[14] <= w_mem14_new;
130126
w_mem[15] <= w_mem15_new;
131127
end
132-
133-
if (w_ctr_we)
134-
w_ctr_reg <= w_ctr_new;
135128
end
136129
end // reg_update
137130

@@ -144,8 +137,8 @@ module sha256_w_mem(
144137
//----------------------------------------------------------------
145138
always @*
146139
begin : select_w
147-
if (w_ctr_reg < 16)
148-
w_tmp = w_mem[w_ctr_reg[3 : 0]];
140+
if (round < 16)
141+
w_tmp = w_mem[round[3 : 0]];
149142
else
150143
w_tmp = w_new;
151144
end // select_w
@@ -220,7 +213,7 @@ module sha256_w_mem(
220213
w_mem_we = 1;
221214
end
222215

223-
if (next && (w_ctr_reg > 15))
216+
if (next && (round > 15))
224217
begin
225218
w_mem00_new = w_mem[01];
226219
w_mem01_new = w_mem[02];
@@ -241,30 +234,6 @@ module sha256_w_mem(
241234
w_mem_we = 1;
242235
end
243236
end // w_mem_update_logic
244-
245-
246-
//----------------------------------------------------------------
247-
// w_ctr
248-
// W schedule adress counter. Counts from 0x10 to 0x3f and
249-
// is used to expand the block into words.
250-
//----------------------------------------------------------------
251-
always @*
252-
begin : w_ctr
253-
w_ctr_new = 6'h0;
254-
w_ctr_we = 1'h0;
255-
256-
if (init)
257-
begin
258-
w_ctr_new = 6'h0;
259-
w_ctr_we = 1'h1;
260-
end
261-
262-
if (next)
263-
begin
264-
w_ctr_new = w_ctr_reg + 6'h01;
265-
w_ctr_we = 1'h1;
266-
end
267-
end // w_ctr
268237
endmodule // sha256_w_mem
269238

270239
//======================================================================

src/tb/tb_sha256_w_mem.v

+13-4
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ module tb_sha256_w_mem();
5757
reg tb_init;
5858
reg tb_next;
5959
reg [511 : 0] tb_block;
60+
reg [5 : 0] tb_round;
6061
wire [31 : 0] tb_w;
6162

6263
reg [63 : 0] cycle_ctr;
@@ -72,6 +73,7 @@ module tb_sha256_w_mem();
7273
.reset_n(tb_reset_n),
7374

7475
.block(tb_block),
76+
.round(tb_round),
7577

7678
.init(tb_init),
7779
.next(tb_next),
@@ -108,7 +110,7 @@ module tb_sha256_w_mem();
108110

109111
if (DEBUG)
110112
begin
111-
$display("dut w_ctr = %02x:", dut.w_ctr_reg);
113+
$display("dut round = %02x:", dut.round);
112114
$display("dut w_tmp = %02x:", dut.w_tmp);
113115
dump_w_state();
114116
end
@@ -167,6 +169,7 @@ module tb_sha256_w_mem();
167169

168170
tb_init = 0;
169171
tb_block = 512'h0;
172+
tb_round = 6'h0;
170173
end
171174
endtask // reset_dut
172175

@@ -178,16 +181,22 @@ module tb_sha256_w_mem();
178181
// Note: Currently not a self checking test case.
179182
//----------------------------------------------------------------
180183
task test_w_schedule;
181-
begin
184+
begin : test_w_schedule
185+
integer i;
182186
$display("*** Test of W schedule processing. --");
183187
tb_block = 512'h61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018;
184188
tb_init = 1;
185189
#(4 * CLK_HALF_PERIOD);
186190
tb_init = 0;
187191
dump_w_state();
188192

189-
tb_next = 1;
190-
#(150 * CLK_HALF_PERIOD);
193+
tb_round = 0;
194+
for (i = 0 ; i < 64 ; i = i + 1) begin
195+
#(2 * CLK_HALF_PERIOD);
196+
tb_round = tb_round + 1;
197+
end
198+
199+
dump_w_state();
191200
end
192201
endtask // test_w_schedule
193202

0 commit comments

Comments
 (0)