OpenCores
URL https://opencores.org/ocsvn/btc_dsha256/btc_dsha256/trunk

Subversion Repositories btc_dsha256

[/] [btc_dsha256/] [trunk/] [rtl/] [vhdl/] [sha256core/] [sha_256_chunk.vhd] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 nuxi1209
-- Copyright (c) 2013 VariStream
2
-- Auther : Yu Peng
3
 
4
library IEEE;
5
use IEEE.STD_LOGIC_1164.ALL;
6
use IEEE.std_logic_unsigned.all;
7
use IEEE.std_logic_arith.all;
8
use IEEE.NUMERIC_STD.all;
9
use work.sha_256_pkg.ALL;
10
 
11
entity sha_256_chunk is
12
        generic(
13
                gMSG_IS_CONSTANT : std_logic_vector(0 to 15) := (others=>'1');
14
                gH_IS_CONST : std_logic_vector(0 to 7) := (others=>'0');
15
                gBASE_DELAY : integer := 3;
16
                gOUT_VALID_GEN : boolean := false;
17
                gUSE_BRAM_AS_LARGE_SHIFTREG : boolean := false
18
        );
19
        port(
20
                iClk : in std_logic := '0';
21
                iRst_async : in std_logic := '0';
22
 
23
                iValid : in std_logic := '0';
24
 
25
                ivMsgDword : in tDwordArray(0 to 15) := (others=>(others=>'0'));
26
 
27
                ivH0 : in std_logic_vector(31 downto 0) := (others=>'0');
28
                ivH1 : in std_logic_vector(31 downto 0) := (others=>'0');
29
                ivH2 : in std_logic_vector(31 downto 0) := (others=>'0');
30
                ivH3 : in std_logic_vector(31 downto 0) := (others=>'0');
31
                ivH4 : in std_logic_vector(31 downto 0) := (others=>'0');
32
                ivH5 : in std_logic_vector(31 downto 0) := (others=>'0');
33
                ivH6 : in std_logic_vector(31 downto 0) := (others=>'0');
34
                ivH7 : in std_logic_vector(31 downto 0) := (others=>'0');
35
 
36
                ovH0 : out std_logic_vector(31 downto 0) := (others=>'0');
37
                ovH1 : out std_logic_vector(31 downto 0) := (others=>'0');
38
                ovH2 : out std_logic_vector(31 downto 0) := (others=>'0');
39
                ovH3 : out std_logic_vector(31 downto 0) := (others=>'0');
40
                ovH4 : out std_logic_vector(31 downto 0) := (others=>'0');
41
                ovH5 : out std_logic_vector(31 downto 0) := (others=>'0');
42
                ovH6 : out std_logic_vector(31 downto 0) := (others=>'0');
43
                ovH7 : out std_logic_vector(31 downto 0) := (others=>'0');
44
 
45
                oValid : out std_logic := '0'
46
        );
47
end sha_256_chunk;
48
 
49
 
50
architecture behavioral of sha_256_chunk is
51
        component pipelines_without_reset IS
52
                GENERIC (gBUS_WIDTH : integer := 3; gNB_PIPELINES: integer range 1 to 255 := 2);
53
                PORT(
54
                        iClk                            : IN            STD_LOGIC;
55
                        iInput                          : IN            STD_LOGIC;
56
                        ivInput                         : IN            STD_LOGIC_VECTOR(gBUS_WIDTH-1 downto 0);
57
                        oDelayed_output         : OUT           STD_LOGIC;
58
                        ovDelayed_output        : OUT           STD_LOGIC_VECTOR(gBUS_WIDTH-1 downto 0)
59
                );
60
        end component;
61
 
62
        component SyncReset is
63
                port(
64
                        iClk                            : in std_logic;                                         -- Clock domain that the reset should be resynchronyze to
65
                        iAsyncReset             : in std_logic;                                         -- Asynchronous reset that should be resynchronyse
66
                        oSyncReset              : out std_logic                                         -- Synchronous reset output
67
                );
68
        end component;
69
 
70
        component sync_fifo_infer is
71
                generic (
72
                        gADDRESS_WIDTH : integer range 4 to (integer'HIGH) := 5;
73
                        gDATA_WIDTH : integer := 24;
74
                        gDYNAMIC_PROG_FULL_TH : boolean := false;
75
                        gDYNAMIC_PROG_EMPTY_TH : boolean := false;
76
                        gOUTPUT_PIPELINE_NUM : integer range 1 to (integer'HIGH) := 1
77
                        );
78
                port(
79
                        iClk : in std_logic := '0';
80
                        iReset_sync : in std_logic := '0';
81
 
82
                        ivProgFullTh : in std_logic_vector(gADDRESS_WIDTH-1 downto 0) := conv_std_logic_vector(2**gADDRESS_WIDTH-3, gADDRESS_WIDTH);
83
                        ivProgEmptyTh : in std_logic_vector(gADDRESS_WIDTH-1 downto 0) := conv_std_logic_vector(2, gADDRESS_WIDTH);
84
 
85
                        iWrEn : in std_logic := '0';
86
                        iRdEn : in std_logic := '0';
87
                        ivDataIn : in std_logic_vector(gDATA_WIDTH-1 downto 0) := (others=>'0');
88
                        ovDataOut : out std_logic_vector(gDATA_WIDTH-1 downto 0) := (others=>'0');
89
                        oDataOutValid : out std_logic := '0';
90
 
91
                        oFull : out std_logic := '0';
92
                        oEmpty : out std_logic := '1';
93
                        oAlmostFull : out std_logic := '0';
94
                        oAlmostEmpty : out std_logic := '1';
95
                        oProgFull : out std_logic := '0';
96
                        oProgEmpty : out std_logic := '1';
97
 
98
                        oOverflow : out std_logic := '0';
99
                        oUnderflow : out std_logic := '0'
100
                );
101
        end component;
102
 
103
        component sha_256_ext_func is
104
                port(
105
                        iClk : in std_logic;
106
                        iRst_async : in std_logic;
107
 
108
                        ivWIM2 : in std_logic_vector(31 downto 0);
109
                        ivWIM7 : in std_logic_vector(31 downto 0);
110
                        ivWIM15 : in std_logic_vector(31 downto 0);
111
                        ivWIM16 : in std_logic_vector(31 downto 0);
112
 
113
                        ovWO : out std_logic_vector(31 downto 0)
114
                );
115
        end component;
116
 
117
        component sha_256_ext_func_1c is
118
                port(
119
                        iClk : in std_logic;
120
                        iRst_async : in std_logic;
121
 
122
                        ivWIM2 : in std_logic_vector(31 downto 0);
123
                        ivWIM7 : in std_logic_vector(31 downto 0);
124
                        ivWIM15 : in std_logic_vector(31 downto 0);
125
                        ivWIM16 : in std_logic_vector(31 downto 0);
126
 
127
                        ovWO : out std_logic_vector(31 downto 0)
128
                );
129
        end component;
130
 
131
        component sha_256_comp_func is
132
                port(
133
                        iClk : in std_logic;
134
                        iRst_async : in std_logic;
135
 
136
                        ivA : in std_logic_vector(31 downto 0);
137
                        ivB : in std_logic_vector(31 downto 0);
138
                        ivC : in std_logic_vector(31 downto 0);
139
                        ivD : in std_logic_vector(31 downto 0);
140
                        ivE : in std_logic_vector(31 downto 0);
141
                        ivF : in std_logic_vector(31 downto 0);
142
                        ivG : in std_logic_vector(31 downto 0);
143
                        ivH : in std_logic_vector(31 downto 0);
144
 
145
                        ivK : in std_logic_vector(31 downto 0);
146
                        ivW : in std_logic_vector(31 downto 0);
147
 
148
                        ovA : out std_logic_vector(31 downto 0);
149
                        ovB : out std_logic_vector(31 downto 0);
150
                        ovC : out std_logic_vector(31 downto 0);
151
                        ovD : out std_logic_vector(31 downto 0);
152
                        ovE : out std_logic_vector(31 downto 0);
153
                        ovF : out std_logic_vector(31 downto 0);
154
                        ovG : out std_logic_vector(31 downto 0);
155
                        ovH : out std_logic_vector(31 downto 0)
156
                );
157
        end component;
158
 
159
        component sha_256_comp_func_1c is
160
                port(
161
                        iClk : in std_logic;
162
                        iRst_async : in std_logic;
163
 
164
                        ivA : in std_logic_vector(31 downto 0);
165
                        ivB : in std_logic_vector(31 downto 0);
166
                        ivC : in std_logic_vector(31 downto 0);
167
                        ivD : in std_logic_vector(31 downto 0);
168
                        ivE : in std_logic_vector(31 downto 0);
169
                        ivF : in std_logic_vector(31 downto 0);
170
                        ivG : in std_logic_vector(31 downto 0);
171
                        ivH : in std_logic_vector(31 downto 0);
172
 
173
                        ivK : in std_logic_vector(31 downto 0);
174
                        ivW : in std_logic_vector(31 downto 0);
175
 
176
                        ovA : out std_logic_vector(31 downto 0);
177
                        ovB : out std_logic_vector(31 downto 0);
178
                        ovC : out std_logic_vector(31 downto 0);
179
                        ovD : out std_logic_vector(31 downto 0);
180
                        ovE : out std_logic_vector(31 downto 0);
181
                        ovF : out std_logic_vector(31 downto 0);
182
                        ovG : out std_logic_vector(31 downto 0);
183
                        ovH : out std_logic_vector(31 downto 0)
184
                );
185
        end component;
186
 
187
        constant cvK : tDwordArray(0 to 63) := (
188
                X"428a2f98", X"71374491", X"b5c0fbcf", X"e9b5dba5", X"3956c25b", X"59f111f1", X"923f82a4", X"ab1c5ed5",
189
                X"d807aa98", X"12835b01", X"243185be", X"550c7dc3", X"72be5d74", X"80deb1fe", X"9bdc06a7", X"c19bf174",
190
                X"e49b69c1", X"efbe4786", X"0fc19dc6", X"240ca1cc", X"2de92c6f", X"4a7484aa", X"5cb0a9dc", X"76f988da",
191
                X"983e5152", X"a831c66d", X"b00327c8", X"bf597fc7", X"c6e00bf3", X"d5a79147", X"06ca6351", X"14292967",
192
                X"27b70a85", X"2e1b2138", X"4d2c6dfc", X"53380d13", X"650a7354", X"766a0abb", X"81c2c92e", X"92722c85",
193
                X"a2bfe8a1", X"a81a664b", X"c24b8b70", X"c76c51a3", X"d192e819", X"d6990624", X"f40e3585", X"106aa070",
194
                X"19a4c116", X"1e376c08", X"2748774c", X"34b0bcb5", X"391c0cb3", X"4ed8aa4a", X"5b9cca4f", X"682e6ff3",
195
                X"748f82ee", X"78a5636f", X"84c87814", X"8cc70208", X"90befffa", X"a4506ceb", X"bef9a3f7", X"c67178f2");
196
 
197
        constant cvW_IS_CONST : std_logic_vector(0 to 63) := getW_IS_CONST(gMSG_IS_CONSTANT);
198
 
199
        type tDword2DArrayRow64Col64 is array(0 to 63) of tDwordArray(0 to 63);
200
 
201
        signal svResetHShiftFifo_sync : std_logic_vector(0 to 7) := (others=>'0');
202
 
203
        signal svH0 : std_logic_vector(31 downto 0) := (others=>'0');
204
        signal svH1 : std_logic_vector(31 downto 0) := (others=>'0');
205
        signal svH2 : std_logic_vector(31 downto 0) := (others=>'0');
206
        signal svH3 : std_logic_vector(31 downto 0) := (others=>'0');
207
        signal svH4 : std_logic_vector(31 downto 0) := (others=>'0');
208
        signal svH5 : std_logic_vector(31 downto 0) := (others=>'0');
209
        signal svH6 : std_logic_vector(31 downto 0) := (others=>'0');
210
        signal svH7 : std_logic_vector(31 downto 0) := (others=>'0');
211
 
212
        signal sHShiftFifoRdEn : std_logic := '0';
213
 
214
        signal svAPipe : tDwordArray(0 to 64) := (others=>(others=>'0'));
215
        signal svBPipe : tDwordArray(0 to 64) := (others=>(others=>'0'));
216
        signal svCPipe : tDwordArray(0 to 64) := (others=>(others=>'0'));
217
        signal svDPipe : tDwordArray(0 to 64) := (others=>(others=>'0'));
218
        signal svEPipe : tDwordArray(0 to 64) := (others=>(others=>'0'));
219
        signal svFPipe : tDwordArray(0 to 64) := (others=>(others=>'0'));
220
        signal svGPipe : tDwordArray(0 to 64) := (others=>(others=>'0'));
221
        signal svHPipe : tDwordArray(0 to 64) := (others=>(others=>'0'));
222
 
223
        signal svW : tDword2DArrayRow64Col64 := (others=>(others=>(others=>'0')));
224
 
225
begin
226
--      Description of Algorithm
227
--      for i in 16 to 63 loop
228
--              s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3)
229
--              s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10)
230
--              w[i] := w[i-16] + s0 + w[i-7] + s1
231
--      end loop
232
 
233
        W_col_00_gen : for row in 0 to 15 generate
234
                svW(row)(0) <= ivMsgDword(row);
235
        end generate;
236
 
237
        W_01_to_15_gen_row : for row in 1 to 15 generate
238
                W_01_to_15_gen_col : for col in 1 to row generate
239
                        W_01_to_15_gen_const : if cvW_IS_CONST(row) = '1' generate
240
                                svW(row)(col) <= svW(row)(col - 1);
241
                        end generate;
242
 
243
                        W_01_to_15_gen_var : if cvW_IS_CONST(row) = '0' generate
244
                                pipelines_without_reset_inst: pipelines_without_reset
245
                                        GENERIC map(
246
                                                gBUS_WIDTH => 32,
247
                                                gNB_PIPELINES => gBASE_DELAY)
248
                                        PORT map(
249
                                                iClk => iClk,
250
                                                iInput => '0',
251
                                                oDelayed_output => open,
252
                                                ivInput => svW(row)(col - 1),
253
                                                ovDelayed_output => svW(row)(col)
254
                                        );
255
                        end generate;
256
                end generate;
257
        end generate;
258
 
259
        W_16_to_63_gen_row : for row in 16 to 63 generate
260
                W_16_to_63_gen_col : for col in (row - 15) to row generate
261
                        W_16_to_63_gen_const : if cvW_IS_CONST(row) = '1' generate
262
                                W_16_to_63_gen_const_first : if col = (row - 15) generate
263
                                        svW(row)(col) <= svW(row - 16)(col - 1) + sigma_0(svW(row - 15)(col - 1)) + svW(row - 7)(col - 1) + sigma_1(svW(row - 2)(col - 1));
264
                                end generate;
265
 
266
                                W_16_to_63_gen_const_rest : if col > (row - 15) generate
267
                                        svW(row)(col) <= svW(row)(col - 1);
268
                                end generate;
269
                        end generate;
270
 
271
                        W_16_to_63_gen_var : if cvW_IS_CONST(row) = '0' generate
272
                                W_16_to_63_gen_var_first : if col = (row - 15) generate
273
                                        W_16_to_63_gen_var_first_3c : if gBASE_DELAY = 3 generate
274
                                                sha_256_ext_func_inst: sha_256_ext_func
275
                                                        port map(
276
                                                                iClk => iClk,
277
                                                                iRst_async => iRst_async,
278
 
279
                                                                ivWIM2 => svW(row-2)(col - 1),
280
                                                                ivWIM7 => svW(row-7)(col - 1),
281
                                                                ivWIM15 => svW(row-15)(col - 1),
282
                                                                ivWIM16 => svW(row-16)(col - 1),
283
 
284
                                                                ovWO => svW(row)(col)
285
                                                        );
286
                                        end generate;
287
 
288
                                        W_16_to_63_gen_var_first_1c : if gBASE_DELAY = 1 generate
289
                                                sha_256_ext_func_inst: sha_256_ext_func_1c
290
                                                        port map(
291
                                                                iClk => iClk,
292
                                                                iRst_async => iRst_async,
293
 
294
                                                                ivWIM2 => svW(row-2)(col - 1),
295
                                                                ivWIM7 => svW(row-7)(col - 1),
296
                                                                ivWIM15 => svW(row-15)(col - 1),
297
                                                                ivWIM16 => svW(row-16)(col - 1),
298
 
299
                                                                ovWO => svW(row)(col)
300
                                                        );
301
                                        end generate;
302
                                end generate;
303
 
304
                                W_16_to_63_gen_var_rest : if col > (row - 15) generate
305
                                        pipelines_without_reset_inst: pipelines_without_reset
306
                                                GENERIC map(
307
                                                        gBUS_WIDTH => 32,
308
                                                        gNB_PIPELINES => gBASE_DELAY)
309
                                                PORT map(
310
                                                        iClk => iClk,
311
                                                        iInput => '0',
312
                                                        oDelayed_output => open,
313
                                                        ivInput => svW(row)(col - 1),
314
                                                        ovDelayed_output => svW(row)(col)
315
                                                );
316
                                end generate;
317
                        end generate;
318
                end generate;
319
        end generate;
320
 
321
        svAPipe(0) <= ivH0;
322
        svBPipe(0) <= ivH1;
323
        svCPipe(0) <= ivH2;
324
        svDPipe(0) <= ivH3;
325
        svEPipe(0) <= ivH4;
326
        svFPipe(0) <= ivH5;
327
        svGPipe(0) <= ivH6;
328
        svHPipe(0) <= ivH7;
329
 
330
        loop_gen : for i in 0 to 63 generate
331
                loo_gen_3c : if gBASE_DELAY = 3 generate
332
                        sha_256_comp_func_inst : sha_256_comp_func
333
                                port map(
334
                                        iClk => iClk,
335
                                        iRst_async => iRst_async,
336
 
337
                                        ivA => svAPipe(i),
338
                                        ivB => svBPipe(i),
339
                                        ivC => svCPipe(i),
340
                                        ivD => svDPipe(i),
341
                                        ivE => svEPipe(i),
342
                                        ivF => svFPipe(i),
343
                                        ivG => svGPipe(i),
344
                                        ivH => svHPipe(i),
345
 
346
                                        ivK => cvK(i),
347
                                        ivW => svW(i)(i),
348
 
349
                                        ovA => svAPipe(i + 1),
350
                                        ovB => svBPipe(i + 1),
351
                                        ovC => svCPipe(i + 1),
352
                                        ovD => svDPipe(i + 1),
353
                                        ovE => svEPipe(i + 1),
354
                                        ovF => svFPipe(i + 1),
355
                                        ovG => svGPipe(i + 1),
356
                                        ovH => svHPipe(i + 1)
357
                                );
358
                end generate;
359
 
360
                loo_gen_1c : if gBASE_DELAY = 1 generate
361
                        sha_256_comp_func_inst : sha_256_comp_func_1c
362
                                port map(
363
                                        iClk => iClk,
364
                                        iRst_async => iRst_async,
365
 
366
                                        ivA => svAPipe(i),
367
                                        ivB => svBPipe(i),
368
                                        ivC => svCPipe(i),
369
                                        ivD => svDPipe(i),
370
                                        ivE => svEPipe(i),
371
                                        ivF => svFPipe(i),
372
                                        ivG => svGPipe(i),
373
                                        ivH => svHPipe(i),
374
 
375
                                        ivK => cvK(i),
376
                                        ivW => svW(i)(i),
377
 
378
                                        ovA => svAPipe(i + 1),
379
                                        ovB => svBPipe(i + 1),
380
                                        ovC => svCPipe(i + 1),
381
                                        ovD => svDPipe(i + 1),
382
                                        ovE => svEPipe(i + 1),
383
                                        ovF => svFPipe(i + 1),
384
                                        ovG => svGPipe(i + 1),
385
                                        ovH => svHPipe(i + 1)
386
                                );
387
                end generate;
388
        end generate;
389
 
390
        H0_gen_const : if gH_IS_CONST(0) = '1' generate
391
                svH0 <= ivH0;
392
        end generate;
393
 
394
        H1_gen_const : if gH_IS_CONST(1) = '1' generate
395
                svH1 <= ivH1;
396
        end generate;
397
 
398
        H2_gen_const : if gH_IS_CONST(2) = '1' generate
399
                svH2 <= ivH2;
400
        end generate;
401
 
402
        H3_gen_const : if gH_IS_CONST(3) = '1' generate
403
                svH3 <= ivH3;
404
        end generate;
405
 
406
        H4_gen_const : if gH_IS_CONST(4) = '1' generate
407
                svH4 <= ivH4;
408
        end generate;
409
 
410
        H5_gen_const : if gH_IS_CONST(5) = '1' generate
411
                svH5 <= ivH5;
412
        end generate;
413
 
414
        H6_gen_const : if gH_IS_CONST(6) = '1' generate
415
                svH6 <= ivH6;
416
        end generate;
417
 
418
        H7_gen_const : if gH_IS_CONST(7) = '1' generate
419
                svH7 <= ivH7;
420
        end generate;
421
 
422
        HShiftFifoRdEn_gen : if gUSE_BRAM_AS_LARGE_SHIFTREG = true generate
423
                        pipelines_without_reset_inst: pipelines_without_reset
424
                                GENERIC map(
425
                                        gBUS_WIDTH => 1,
426
                                        gNB_PIPELINES => (64 * gBASE_DELAY - 1) )
427
                                PORT map(
428
                                        iClk => iClk,
429
                                        iInput => iValid,
430
                                        oDelayed_output => sHShiftFifoRdEn,
431
                                        ivInput => (others=>'0'),
432
                                        ovDelayed_output => open
433
                                );
434
        end generate;
435
 
436
        H0_gen_var : if gH_IS_CONST(0) = '0' generate
437
                H0_gen_var_shiftreg : if gUSE_BRAM_AS_LARGE_SHIFTREG = false generate
438
                        pipelines_without_reset_inst: pipelines_without_reset
439
                                GENERIC map(
440
                                        gBUS_WIDTH => 32,
441
                                        gNB_PIPELINES => 64 * gBASE_DELAY)
442
                                PORT map(
443
                                        iClk => iClk,
444
                                        iInput => '0',
445
                                        oDelayed_output => open,
446
                                        ivInput => ivH0,
447
                                        ovDelayed_output => svH0
448
                                );
449
                end generate;
450
 
451
                H0_gen_var_bram : if gUSE_BRAM_AS_LARGE_SHIFTREG = true generate
452
                        SyncReset_inst : SyncReset
453
                                port map(
454
                                        iClk => iClk,
455
                                        iAsyncReset => iRst_async,
456
                                        oSyncReset => svResetHShiftFifo_sync(0)
457
                                );
458
 
459
                        sync_fifo_infer_inst : sync_fifo_infer
460
                                generic map(
461
                                        gADDRESS_WIDTH => 8,
462
                                        gDATA_WIDTH => 32
463
                                        )
464
                                port map(
465
                                        iClk => iClk,
466
                                        iReset_sync => svResetHShiftFifo_sync(0),
467
 
468
                                        ivProgFullTh => conv_std_logic_vector(2**8-3, 8),
469
                                        ivProgEmptyTh => conv_std_logic_vector(2, 8),
470
 
471
                                        iWrEn => iValid,
472
                                        iRdEn => sHShiftFifoRdEn,
473
                                        ivDataIn => ivH0,
474
                                        ovDataOut => svH0,
475
                                        oDataOutValid => open,
476
 
477
                                        oFull => open,
478
                                        oEmpty => open,
479
                                        oAlmostFull => open,
480
                                        oAlmostEmpty => open,
481
                                        oProgFull => open,
482
                                        oProgEmpty => open,
483
 
484
                                        oOverflow => open,
485
                                        oUnderflow => open
486
                                );
487
                end generate;
488
        end generate;
489
 
490
        H1_gen_var : if gH_IS_CONST(1) = '0' generate
491
                H1_gen_var_shiftreg : if gUSE_BRAM_AS_LARGE_SHIFTREG = false generate
492
                        pipelines_without_reset_inst: pipelines_without_reset
493
                                GENERIC map(
494
                                        gBUS_WIDTH => 32,
495
                                        gNB_PIPELINES => 64 * gBASE_DELAY)
496
                                PORT map(
497
                                        iClk => iClk,
498
                                        iInput => '0',
499
                                        oDelayed_output => open,
500
                                        ivInput => ivH1,
501
                                        ovDelayed_output => svH1
502
                                );
503
                end generate;
504
 
505
                H1_gen_var_bram : if gUSE_BRAM_AS_LARGE_SHIFTREG = true generate
506
                        SyncReset_inst : SyncReset
507
                                port map(
508
                                        iClk => iClk,
509
                                        iAsyncReset => iRst_async,
510
                                        oSyncReset => svResetHShiftFifo_sync(1)
511
                                );
512
 
513
                        sync_fifo_infer_inst : sync_fifo_infer
514
                                generic map(
515
                                        gADDRESS_WIDTH => 8,
516
                                        gDATA_WIDTH => 32
517
                                        )
518
                                port map(
519
                                        iClk => iClk,
520
                                        iReset_sync => svResetHShiftFifo_sync(1),
521
 
522
                                        ivProgFullTh => conv_std_logic_vector(2**8-3, 8),
523
                                        ivProgEmptyTh => conv_std_logic_vector(2, 8),
524
 
525
                                        iWrEn => iValid,
526
                                        iRdEn => sHShiftFifoRdEn,
527
                                        ivDataIn => ivH1,
528
                                        ovDataOut => svH1,
529
                                        oDataOutValid => open,
530
 
531
                                        oFull => open,
532
                                        oEmpty => open,
533
                                        oAlmostFull => open,
534
                                        oAlmostEmpty => open,
535
                                        oProgFull => open,
536
                                        oProgEmpty => open,
537
 
538
                                        oOverflow => open,
539
                                        oUnderflow => open
540
                                );
541
                end generate;
542
        end generate;
543
 
544
        H2_gen_var : if gH_IS_CONST(2) = '0' generate
545
                H2_gen_var_shiftreg : if gUSE_BRAM_AS_LARGE_SHIFTREG = false generate
546
                        pipelines_without_reset_inst: pipelines_without_reset
547
                                GENERIC map(
548
                                        gBUS_WIDTH => 32,
549
                                        gNB_PIPELINES => 64 * gBASE_DELAY)
550
                                PORT map(
551
                                        iClk => iClk,
552
                                        iInput => '0',
553
                                        oDelayed_output => open,
554
                                        ivInput => ivH2,
555
                                        ovDelayed_output => svH2
556
                                );
557
                end generate;
558
 
559
                H2_gen_var_bram : if gUSE_BRAM_AS_LARGE_SHIFTREG = true generate
560
                        SyncReset_inst : SyncReset
561
                                port map(
562
                                        iClk => iClk,
563
                                        iAsyncReset => iRst_async,
564
                                        oSyncReset => svResetHShiftFifo_sync(2)
565
                                );
566
 
567
                        sync_fifo_infer_inst : sync_fifo_infer
568
                                generic map(
569
                                        gADDRESS_WIDTH => 8,
570
                                        gDATA_WIDTH => 32
571
                                        )
572
                                port map(
573
                                        iClk => iClk,
574
                                        iReset_sync => svResetHShiftFifo_sync(2),
575
 
576
                                        ivProgFullTh => conv_std_logic_vector(2**8-3, 8),
577
                                        ivProgEmptyTh => conv_std_logic_vector(2, 8),
578
 
579
                                        iWrEn => iValid,
580
                                        iRdEn => sHShiftFifoRdEn,
581
                                        ivDataIn => ivH2,
582
                                        ovDataOut => svH2,
583
                                        oDataOutValid => open,
584
 
585
                                        oFull => open,
586
                                        oEmpty => open,
587
                                        oAlmostFull => open,
588
                                        oAlmostEmpty => open,
589
                                        oProgFull => open,
590
                                        oProgEmpty => open,
591
 
592
                                        oOverflow => open,
593
                                        oUnderflow => open
594
                                );
595
                end generate;
596
        end generate;
597
 
598
        H3_gen_var : if gH_IS_CONST(3) = '0' generate
599
                H3_gen_var_shiftreg : if gUSE_BRAM_AS_LARGE_SHIFTREG = false generate
600
                        pipelines_without_reset_inst: pipelines_without_reset
601
                                GENERIC map(
602
                                        gBUS_WIDTH => 32,
603
                                        gNB_PIPELINES => 64 * gBASE_DELAY)
604
                                PORT map(
605
                                        iClk => iClk,
606
                                        iInput => '0',
607
                                        oDelayed_output => open,
608
                                        ivInput => ivH3,
609
                                        ovDelayed_output => svH3
610
                                );
611
                end generate;
612
 
613
                H3_gen_var_bram : if gUSE_BRAM_AS_LARGE_SHIFTREG = true generate
614
                        SyncReset_inst : SyncReset
615
                                port map(
616
                                        iClk => iClk,
617
                                        iAsyncReset => iRst_async,
618
                                        oSyncReset => svResetHShiftFifo_sync(3)
619
                                );
620
 
621
                        sync_fifo_infer_inst : sync_fifo_infer
622
                                generic map(
623
                                        gADDRESS_WIDTH => 8,
624
                                        gDATA_WIDTH => 32
625
                                        )
626
                                port map(
627
                                        iClk => iClk,
628
                                        iReset_sync => svResetHShiftFifo_sync(3),
629
 
630
                                        ivProgFullTh => conv_std_logic_vector(2**8-3, 8),
631
                                        ivProgEmptyTh => conv_std_logic_vector(2, 8),
632
 
633
                                        iWrEn => iValid,
634
                                        iRdEn => sHShiftFifoRdEn,
635
                                        ivDataIn => ivH3,
636
                                        ovDataOut => svH3,
637
                                        oDataOutValid => open,
638
 
639
                                        oFull => open,
640
                                        oEmpty => open,
641
                                        oAlmostFull => open,
642
                                        oAlmostEmpty => open,
643
                                        oProgFull => open,
644
                                        oProgEmpty => open,
645
 
646
                                        oOverflow => open,
647
                                        oUnderflow => open
648
                                );
649
                end generate;
650
        end generate;
651
 
652
        H4_gen_var : if gH_IS_CONST(4) = '0' generate
653
                H4_gen_var_shiftreg : if gUSE_BRAM_AS_LARGE_SHIFTREG = false generate
654
                        pipelines_without_reset_inst: pipelines_without_reset
655
                                GENERIC map(
656
                                        gBUS_WIDTH => 32,
657
                                        gNB_PIPELINES => 64 * gBASE_DELAY)
658
                                PORT map(
659
                                        iClk => iClk,
660
                                        iInput => '0',
661
                                        oDelayed_output => open,
662
                                        ivInput => ivH4,
663
                                        ovDelayed_output => svH4
664
                                );
665
                end generate;
666
 
667
                H4_gen_var_bram : if gUSE_BRAM_AS_LARGE_SHIFTREG = true generate
668
                        SyncReset_inst : SyncReset
669
                                port map(
670
                                        iClk => iClk,
671
                                        iAsyncReset => iRst_async,
672
                                        oSyncReset => svResetHShiftFifo_sync(4)
673
                                );
674
 
675
                        sync_fifo_infer_inst : sync_fifo_infer
676
                                generic map(
677
                                        gADDRESS_WIDTH => 8,
678
                                        gDATA_WIDTH => 32
679
                                        )
680
                                port map(
681
                                        iClk => iClk,
682
                                        iReset_sync => svResetHShiftFifo_sync(4),
683
 
684
                                        ivProgFullTh => conv_std_logic_vector(2**8-3, 8),
685
                                        ivProgEmptyTh => conv_std_logic_vector(2, 8),
686
 
687
                                        iWrEn => iValid,
688
                                        iRdEn => sHShiftFifoRdEn,
689
                                        ivDataIn => ivH4,
690
                                        ovDataOut => svH4,
691
                                        oDataOutValid => open,
692
 
693
                                        oFull => open,
694
                                        oEmpty => open,
695
                                        oAlmostFull => open,
696
                                        oAlmostEmpty => open,
697
                                        oProgFull => open,
698
                                        oProgEmpty => open,
699
 
700
                                        oOverflow => open,
701
                                        oUnderflow => open
702
                                );
703
                end generate;
704
        end generate;
705
 
706
        H5_gen_var : if gH_IS_CONST(5) = '0' generate
707
                H5_gen_var_shiftreg : if gUSE_BRAM_AS_LARGE_SHIFTREG = false generate
708
                        pipelines_without_reset_inst: pipelines_without_reset
709
                                GENERIC map(
710
                                        gBUS_WIDTH => 32,
711
                                        gNB_PIPELINES => 64 * gBASE_DELAY)
712
                                PORT map(
713
                                        iClk => iClk,
714
                                        iInput => '0',
715
                                        oDelayed_output => open,
716
                                        ivInput => ivH5,
717
                                        ovDelayed_output => svH5
718
                                );
719
                end generate;
720
 
721
                H5_gen_var_bram : if gUSE_BRAM_AS_LARGE_SHIFTREG = true generate
722
                        SyncReset_inst : SyncReset
723
                                port map(
724
                                        iClk => iClk,
725
                                        iAsyncReset => iRst_async,
726
                                        oSyncReset => svResetHShiftFifo_sync(5)
727
                                );
728
 
729
                        sync_fifo_infer_inst : sync_fifo_infer
730
                                generic map(
731
                                        gADDRESS_WIDTH => 8,
732
                                        gDATA_WIDTH => 32
733
                                        )
734
                                port map(
735
                                        iClk => iClk,
736
                                        iReset_sync => svResetHShiftFifo_sync(5),
737
 
738
                                        ivProgFullTh => conv_std_logic_vector(2**8-3, 8),
739
                                        ivProgEmptyTh => conv_std_logic_vector(2, 8),
740
 
741
                                        iWrEn => iValid,
742
                                        iRdEn => sHShiftFifoRdEn,
743
                                        ivDataIn => ivH5,
744
                                        ovDataOut => svH5,
745
                                        oDataOutValid => open,
746
 
747
                                        oFull => open,
748
                                        oEmpty => open,
749
                                        oAlmostFull => open,
750
                                        oAlmostEmpty => open,
751
                                        oProgFull => open,
752
                                        oProgEmpty => open,
753
 
754
                                        oOverflow => open,
755
                                        oUnderflow => open
756
                                );
757
                end generate;
758
        end generate;
759
 
760
        H6_gen_var : if gH_IS_CONST(6) = '0' generate
761
                H6_gen_var_shiftreg : if gUSE_BRAM_AS_LARGE_SHIFTREG = false generate
762
                        pipelines_without_reset_inst: pipelines_without_reset
763
                                GENERIC map(
764
                                        gBUS_WIDTH => 32,
765
                                        gNB_PIPELINES => 64 * gBASE_DELAY)
766
                                PORT map(
767
                                        iClk => iClk,
768
                                        iInput => '0',
769
                                        oDelayed_output => open,
770
                                        ivInput => ivH6,
771
                                        ovDelayed_output => svH6
772
                                );
773
                end generate;
774
 
775
                H6_gen_var_bram : if gUSE_BRAM_AS_LARGE_SHIFTREG = true generate
776
                        SyncReset_inst : SyncReset
777
                                port map(
778
                                        iClk => iClk,
779
                                        iAsyncReset => iRst_async,
780
                                        oSyncReset => svResetHShiftFifo_sync(6)
781
                                );
782
 
783
                        sync_fifo_infer_inst : sync_fifo_infer
784
                                generic map(
785
                                        gADDRESS_WIDTH => 8,
786
                                        gDATA_WIDTH => 32
787
                                        )
788
                                port map(
789
                                        iClk => iClk,
790
                                        iReset_sync => svResetHShiftFifo_sync(6),
791
 
792
                                        ivProgFullTh => conv_std_logic_vector(2**8-3, 8),
793
                                        ivProgEmptyTh => conv_std_logic_vector(2, 8),
794
 
795
                                        iWrEn => iValid,
796
                                        iRdEn => sHShiftFifoRdEn,
797
                                        ivDataIn => ivH6,
798
                                        ovDataOut => svH6,
799
                                        oDataOutValid => open,
800
 
801
                                        oFull => open,
802
                                        oEmpty => open,
803
                                        oAlmostFull => open,
804
                                        oAlmostEmpty => open,
805
                                        oProgFull => open,
806
                                        oProgEmpty => open,
807
 
808
                                        oOverflow => open,
809
                                        oUnderflow => open
810
                                );
811
                end generate;
812
        end generate;
813
 
814
        H7_gen_var : if gH_IS_CONST(7) = '0' generate
815
                H7_gen_var_shiftreg : if gUSE_BRAM_AS_LARGE_SHIFTREG = false generate
816
                        pipelines_without_reset_inst: pipelines_without_reset
817
                                GENERIC map(
818
                                        gBUS_WIDTH => 32,
819
                                        gNB_PIPELINES => 64 * gBASE_DELAY)
820
                                PORT map(
821
                                        iClk => iClk,
822
                                        iInput => '0',
823
                                        oDelayed_output => open,
824
                                        ivInput => ivH7,
825
                                        ovDelayed_output => svH7
826
                                );
827
                end generate;
828
 
829
                H7_gen_var_bram : if gUSE_BRAM_AS_LARGE_SHIFTREG = true generate
830
                        SyncReset_inst : SyncReset
831
                                port map(
832
                                        iClk => iClk,
833
                                        iAsyncReset => iRst_async,
834
                                        oSyncReset => svResetHShiftFifo_sync(7)
835
                                );
836
 
837
                        sync_fifo_infer_inst : sync_fifo_infer
838
                                generic map(
839
                                        gADDRESS_WIDTH => 8,
840
                                        gDATA_WIDTH => 32
841
                                        )
842
                                port map(
843
                                        iClk => iClk,
844
                                        iReset_sync => svResetHShiftFifo_sync(7),
845
 
846
                                        ivProgFullTh => conv_std_logic_vector(2**8-3, 8),
847
                                        ivProgEmptyTh => conv_std_logic_vector(2, 8),
848
 
849
                                        iWrEn => iValid,
850
                                        iRdEn => sHShiftFifoRdEn,
851
                                        ivDataIn => ivH7,
852
                                        ovDataOut => svH7,
853
                                        oDataOutValid => open,
854
 
855
                                        oFull => open,
856
                                        oEmpty => open,
857
                                        oAlmostFull => open,
858
                                        oAlmostEmpty => open,
859
                                        oProgFull => open,
860
                                        oProgEmpty => open,
861
 
862
                                        oOverflow => open,
863
                                        oUnderflow => open
864
                                );
865
                end generate;
866
        end generate;
867
 
868
        process (iClk)
869
        begin
870
                if rising_edge(iClk) then
871
                        ovH0 <= svAPipe(64) + svH0;
872
                        ovH1 <= svBPipe(64) + svH1;
873
                        ovH2 <= svCPipe(64) + svH2;
874
                        ovH3 <= svDPipe(64) + svH3;
875
                        ovH4 <= svEPipe(64) + svH4;
876
                        ovH5 <= svFPipe(64) + svH5;
877
                        ovH6 <= svGPipe(64) + svH6;
878
                        ovH7 <= svHPipe(64) + svH7;
879
                end if;
880
        end process;
881
 
882
        OUT_VALID_gen : if gOUT_VALID_GEN = true generate
883
                pipelines_without_reset_inst: pipelines_without_reset
884
                        GENERIC map(
885
                                gBUS_WIDTH => 1,
886
                                gNB_PIPELINES => (64 * gBASE_DELAY + 1))
887
                        PORT map(
888
                                iClk => iClk,
889
                                iInput => iValid,
890
                                oDelayed_output => oValid,
891
                                ivInput => (others=>'0'),
892
                                ovDelayed_output => open
893
                        );
894
        end generate;
895
 
896
end behavioral;
897
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.