Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
//-----------------------------------------------------------------------------
// SoC Labs Basic SHA-256 Hashing Stream
// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
//
// Contributors
//
// David Mapstone (d.a.mapstone@soton.ac.uk)
//
// Copyright 2022, SoC Labs (www.soclabs.org)
//-----------------------------------------------------------------------------
`include "sha256_hash_compression.sv"
`include "sha256_message_build.sv"
`include "sha256_id_issue.sv"
`include "fifo_vr.sv"
module sha256_hashing_stream (
// Clocking Signals
input logic clk,
input logic nrst,
input logic en,
// Synchronous, localised reset
input logic sync_rst,
// Data In data and Handshaking
input logic [511:0] data_in,
input logic data_in_last,
input logic data_in_valid,
output logic data_in_ready,
// Config data and Handshaking
input logic [63:0] cfg_size,
input logic [1:0] cfg_scheme,
input logic cfg_last,
input logic cfg_valid,
output logic cfg_ready,
// Data Out data and Handshaking
output logic [255:0] data_out,
output logic data_out_last,
output logic data_out_valid,
input logic data_out_ready
);
logic [511:0] data_in_buffered;
logic data_in_last_buffered;
logic data_in_valid_buffered;
logic data_in_ready_buffered;
logic [63:0] cfg_size_buffered;
logic [1:0] cfg_scheme_buffered;
logic cfg_last_buffered;
logic cfg_valid_buffered;
logic cfg_ready_buffered;
logic [5:0] id_val;
logic [511:0] message_block;
logic message_block_last;
logic message_block_valid;
logic message_block_ready;
logic [511:0] message_block_buffered;
logic message_block_last_buffered;
logic message_block_valid_buffered;
logic message_block_ready_buffered;
logic [255:0] hash;
logic hash_last;
logic hash_valid;
logic hash_ready;
// Data-in FIFO
fifo_vr #(16, // Depth
512 // Data Width
) data_in_buffer (
.clk (clk),
.nrst (nrst),
.en (en),
.sync_rst (sync_rst),
.data_in (data_in),
.data_in_valid (data_in_valid),
.data_in_ready (data_in_ready),
.data_in_last (data_in_last),
.data_out (data_in_buffered),
.data_out_last (data_in_last_buffered),
.data_out_valid (data_in_valid_buffered),
.data_out_ready (data_in_ready_buffered),
.status_ptr_dif ()
);
// Configuration FIFO
fifo_vr #(8, // Depth
66 // Data Width
) cfg_buffer (
.clk (clk),
.nrst (nrst),
.en (en),
.sync_rst (sync_rst),
.data_in ({cfg_size, cfg_scheme}),
.data_in_valid (cfg_valid),
.data_in_ready (cfg_ready),
.data_in_last (cfg_last),
.data_out ({cfg_size_buffered,cfg_scheme_buffered}),
.data_out_last (cfg_last_buffered),
.data_out_valid (cfg_valid_buffered),
.data_out_ready (cfg_ready_buffered),
.status_ptr_dif ()
);
// Message Build (Construct Message Blocks)
sha256_message_build message_block_builder (
.clk (clk),
.nrst (nrst),
.en (en),
.sync_rst (sync_rst),
.data_in (data_in_buffered),
.data_in_valid (data_in_valid_buffered),
.data_in_ready (data_in_ready_buffered),
.data_in_last (data_in_last_buffered),
.cfg_size (cfg_size_buffered),
.cfg_scheme (cfg_scheme_buffered),
.cfg_last (cfg_last_buffered),
.cfg_valid (cfg_valid_buffered),
.cfg_ready (cfg_ready_buffered),
.cfg_id (),
.data_out (message_block),
.data_out_last (message_block_last),
.data_out_valid (message_block_valid),
.data_out_ready (message_block_ready),
.data_out_id ()
);
// Intermediate FIFO
fifo_vr #(16, // Depth
512 // Data Width
) message_block_buffer (
.clk (clk),
.nrst (nrst),
.en (en),
.sync_rst (sync_rst),
.data_in (message_block),
.data_in_valid (message_block_valid),
.data_in_ready (message_block_ready),
.data_in_last (message_block_last),
.data_out (message_block_buffered),
.data_out_last (message_block_last_buffered),
.data_out_valid (message_block_valid_buffered),
.data_out_ready (message_block_ready_buffered),
.status_ptr_dif ()
);
// Hash Compression (Peform Hash Calculation)
sha256_hash_compression hash_calculator (
.clk (clk),
.nrst (nrst),
.en (en),
.sync_rst (sync_rst),
.data_in (message_block_buffered),
.data_in_valid (message_block_valid_buffered),
.data_in_ready (message_block_ready_buffered),
.data_in_last (message_block_last_buffered),
.data_in_id (),
.data_out (hash),
.data_out_last (hash_last),
.data_out_valid (hash_valid),
.data_out_ready (hash_ready),
.data_out_id ()
);
// Data-out FIFO
fifo_vr #(4, // Depth
256 // Data Width
) data_out_buffer (
.clk (clk),
.nrst (nrst),
.en (en),
.sync_rst (sync_rst),
.data_in (hash),
.data_in_valid (hash_valid),
.data_in_ready (hash_ready),
.data_in_last (hash_last),
.data_out (data_out),
.data_out_last (data_out_last),
.data_out_valid (data_out_valid),
.data_out_ready (data_out_ready),
.status_ptr_dif ()
);
endmodule