OpenCores
URL https://opencores.org/ocsvn/hdl-deflate/hdl-deflate/trunk

Subversion Repositories hdl-deflate

[/] [hdl-deflate/] [trunk/] [deflate.v] - Blame information for rev 5

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

Line No. Rev Author Line
1 2 tomtor
// File: deflate.v
2
// Generated by MyHDL 0.10
3 5 tomtor
// Date: Sun Dec 23 19:31:53 2018
4 2 tomtor
 
5
 
6
`timescale 1ns/10ps
7
 
8
module deflate (
9
    i_mode,
10
    o_done,
11
    i_data,
12
    o_iprogress,
13
    o_oprogress,
14
    o_byte,
15
    i_addr,
16
    clk,
17
    reset
18
);
19
// Deflate (de)compress
20
// 
21
// Ports:
22
 
23
input [2:0] i_mode;
24
output o_done;
25
reg o_done;
26
input [7:0] i_data;
27
output [12:0] o_iprogress;
28
reg [12:0] o_iprogress;
29
output [12:0] o_oprogress;
30
reg [12:0] o_oprogress;
31
output [7:0] o_byte;
32
reg [7:0] o_byte;
33
input [12:0] i_addr;
34
input clk;
35
input reset;
36
 
37
reg [18:0] wleaf;
38
reg [9:0] step;
39
reg static;
40
reg [4:0] state;
41
reg [8:0] spread_i;
42
reg [9:0] spread;
43
reg [9:0] reverse;
44
reg [7:0] orbyte;
45
reg [12:0] oraddr;
46 5 tomtor
reg [12:0] old_di;
47 2 tomtor
reg [12:0] offset;
48
reg [7:0] obyte;
49
reg [7:0] ob1;
50
reg [12:0] oaddr;
51
reg [8:0] numLiterals;
52
reg [5:0] numDistance;
53
reg [8:0] numCodeLength;
54
reg [2:0] nb;
55
reg [4:0] minBits;
56
reg [2:0] method;
57
reg [4:0] maxBits;
58
reg [8:0] lwaddr;
59
reg [12:0] length;
60
reg [18:0] leaf;
61
reg [14:0] lastToken;
62
reg [15:0] ladler1;
63
reg [12:0] isize;
64
reg [9:0] instantMaxBit;
65
reg [14:0] instantMask;
66
reg [8:0] howOften;
67
reg flush;
68
reg final;
69
reg filled;
70
reg [2:0] doo;
71
reg do_compress;
72
reg [12:0] do;
73
reg [2:0] dio;
74
reg [12:0] di;
75
reg [4:0] d_maxBits;
76
reg [9:0] d_instantMaxBit;
77
reg [14:0] d_instantMask;
78
reg [8:0] cur_static;
79
reg signed [7:0] cur_search;
80
reg cur_next;
81
reg [12:0] cur_i;
82
reg signed [7:0] cur_dist;
83
reg [12:0] cur_cstatic;
84
reg [9:0] cur_HF1;
85 5 tomtor
reg [7:0] copy2;
86 2 tomtor
reg [7:0] copy1;
87
reg [14:0] code;
88
reg [3:0] bits;
89
reg [8:0] b_numCodeLength;
90 5 tomtor
reg [7:0] b9;
91
reg [7:0] b8;
92
reg [7:0] b7;
93
reg [7:0] b6;
94
reg [7:0] b5;
95 2 tomtor
wire [31:0] b41;
96
reg [7:0] b4;
97
reg [7:0] b3;
98
reg [7:0] b2;
99 5 tomtor
wire [31:0] b14;
100
wire [79:0] b110;
101
reg [7:0] b10;
102 2 tomtor
reg [7:0] b1;
103
reg [15:0] adler2;
104
reg [15:0] adler1;
105 5 tomtor
reg [255:0] cwindow;
106 2 tomtor
reg [7:0] oram [0:8192-1];
107
reg [9:0] nextCode [0:15-1];
108
reg [18:0] leaves [0:512-1];
109
reg [7:0] iram [0:128-1];
110
reg [3:0] distanceLength [0:32-1];
111
reg [18:0] d_leaves [0:128-1];
112
reg [8:0] code_bits [0:288-1];
113
reg [3:0] codeLength [0:290-1];
114
reg [8:0] bitLengthCount [0:16-1];
115 5 tomtor
wire smatch [0:32-1];
116 2 tomtor
 
117
assign b41[32-1:24] = b4;
118
assign b41[24-1:16] = b3;
119
assign b41[16-1:8] = b2;
120
assign b41[8-1:0] = b1;
121 5 tomtor
assign b14[32-1:24] = b1;
122
assign b14[24-1:16] = b2;
123
assign b14[16-1:8] = b3;
124
assign b14[8-1:0] = b4;
125
assign b110[80-1:72] = b1;
126
assign b110[72-1:64] = b2;
127
assign b110[64-1:56] = b3;
128
assign b110[56-1:48] = b4;
129
assign b110[48-1:40] = b5;
130
assign b110[40-1:32] = b6;
131
assign b110[32-1:24] = b7;
132
assign b110[24-1:16] = b8;
133
assign b110[16-1:8] = b9;
134
assign b110[8-1:0] = b10;
135 2 tomtor
 
136
task MYHDL3_adv;
137
    input width;
138
    integer width;
139
    integer nshift;
140 5 tomtor
begin: MYHDL113_RETURN
141 2 tomtor
    nshift = ((dio + width) >>> 3);
142
    o_iprogress <= di;
143
    dio <= ((dio + width) & 7);
144
    di <= ($signed({1'b0, di}) + nshift);
145
    if ((nshift != 0)) begin
146
        filled <= 1'b0;
147
    end
148
end
149
endtask
150
 
151
function integer MYHDL4_get4;
152
    input boffset;
153
    input width;
154 5 tomtor
begin: MYHDL114_RETURN
155 2 tomtor
    if ((nb != 4)) begin
156
        $write("----NB----");
157
        $write("\n");
158
        $finish;
159
    end
160
    MYHDL4_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
161 5 tomtor
    disable MYHDL114_RETURN;
162 2 tomtor
end
163
endfunction
164
 
165
function integer MYHDL5_get4;
166
    input boffset;
167
    input width;
168
    integer width;
169 5 tomtor
begin: MYHDL115_RETURN
170 2 tomtor
    if ((nb != 4)) begin
171
        $write("----NB----");
172
        $write("\n");
173
        $finish;
174
    end
175
    MYHDL5_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
176 5 tomtor
    disable MYHDL115_RETURN;
177 2 tomtor
end
178
endfunction
179
 
180
task MYHDL6_adv;
181
    input width;
182
    integer width;
183
    integer nshift;
184 5 tomtor
begin: MYHDL116_RETURN
185 2 tomtor
    nshift = ((dio + width) >>> 3);
186
    o_iprogress <= di;
187
    dio <= ((dio + width) & 7);
188
    di <= ($signed({1'b0, di}) + nshift);
189
    if ((nshift != 0)) begin
190
        filled <= 1'b0;
191
    end
192
end
193
endtask
194
 
195
task MYHDL7_adv;
196
    input width;
197
    integer width;
198
    integer nshift;
199 5 tomtor
begin: MYHDL117_RETURN
200 2 tomtor
    nshift = ((dio + width) >>> 3);
201
    o_iprogress <= di;
202
    dio <= ((dio + width) & 7);
203
    di <= ($signed({1'b0, di}) + nshift);
204
    if ((nshift != 0)) begin
205
        filled <= 1'b0;
206
    end
207
end
208
endtask
209
 
210
function integer MYHDL8_get4;
211
    input boffset;
212
    integer boffset;
213
    input width;
214
    integer width;
215 5 tomtor
begin: MYHDL118_RETURN
216 2 tomtor
    if ((nb != 4)) begin
217
        $write("----NB----");
218
        $write("\n");
219
        $finish;
220
    end
221
    MYHDL8_get4 = ($signed($signed({1'b0, b41}) >>> ($signed({1'b0, dio}) + boffset)) & ((1 << width) - 1));
222 5 tomtor
    disable MYHDL118_RETURN;
223 2 tomtor
end
224
endfunction
225
 
226
task MYHDL9_adv;
227
    input width;
228
    integer width;
229
    integer nshift;
230 5 tomtor
begin: MYHDL119_RETURN
231 2 tomtor
    nshift = $signed(($signed({1'b0, dio}) + width) >>> 3);
232
    o_iprogress <= di;
233
    dio <= (($signed({1'b0, dio}) + width) & 7);
234
    di <= ($signed({1'b0, di}) + nshift);
235
    if ((nshift != 0)) begin
236
        filled <= 1'b0;
237
    end
238
end
239
endtask
240
 
241
function integer MYHDL10_put;
242
    input d;
243
    integer d;
244
    input width;
245
    integer width;
246 5 tomtor
begin: MYHDL120_RETURN
247 2 tomtor
    if ((width > 9)) begin
248
        $finish;
249
    end
250
    if (($signed({1'b0, d}) > ((1 << width) - 1))) begin
251
        $finish;
252
    end
253
    MYHDL10_put = ((ob1 | (d << doo)) & 255);
254 5 tomtor
    disable MYHDL120_RETURN;
255 2 tomtor
end
256
endfunction
257
 
258
task MYHDL11_put_adv;
259
    input d;
260
    integer d;
261
    input width;
262
    integer width;
263
    reg pshift;
264
    integer carry;
265
    integer doo_next;
266 5 tomtor
begin: MYHDL121_RETURN
267 2 tomtor
    if ((width > 9)) begin
268
        $finish;
269
    end
270
    if (($signed({1'b0, d}) > ((1 << width) - 1))) begin
271
        $finish;
272
    end
273
    pshift = ((doo + width) > 8);
274
    if (pshift) begin
275
        carry = ($signed({1'b0, width}) - (8 - $signed({1'b0, doo})));
276
        ob1 <= $signed($signed({1'b0, d}) >>> ($signed({1'b0, width}) - carry));
277
    end
278
    else begin
279
        ob1 <= (ob1 | (d << doo));
280
    end
281
    do <= (do + pshift);
282
    o_oprogress <= (do + pshift);
283
    doo_next = ((doo + width) & 7);
284
    if ((doo_next == 0)) begin
285
        flush <= 1'b1;
286
    end
287
    doo <= doo_next;
288
end
289
endtask
290
 
291
task MYHDL12_do_flush;
292 5 tomtor
begin: MYHDL122_RETURN
293 2 tomtor
    flush <= 1'b0;
294
    ob1 <= 0;
295
    o_oprogress <= (do + 1);
296
    do <= (do + 1);
297
end
298
endtask
299
 
300
function integer MYHDL13_put;
301
    input [9-1:0] d;
302
    input [4-1:0] width;
303 5 tomtor
begin: MYHDL123_RETURN
304 2 tomtor
    if ((width > 9)) begin
305
        $finish;
306
    end
307
    if (($signed({1'b0, d}) > ((1 << width) - 1))) begin
308
        $finish;
309
    end
310
    MYHDL13_put = ((ob1 | (d << doo)) & 255);
311 5 tomtor
    disable MYHDL123_RETURN;
312 2 tomtor
end
313
endfunction
314
 
315
task MYHDL14_put_adv;
316
    input [9-1:0] d;
317
    input [4-1:0] width;
318
    reg pshift;
319
    integer carry;
320
    integer doo_next;
321 5 tomtor
begin: MYHDL124_RETURN
322 2 tomtor
    if ((width > 9)) begin
323
        $finish;
324
    end
325
    if (($signed({1'b0, d}) > ((1 << width) - 1))) begin
326
        $finish;
327
    end
328
    pshift = ((doo + width) > 8);
329
    if (pshift) begin
330
        carry = ($signed({1'b0, width}) - (8 - $signed({1'b0, doo})));
331
        ob1 <= $signed($signed({1'b0, d}) >>> ($signed({1'b0, width}) - carry));
332
    end
333
    else begin
334
        ob1 <= (ob1 | (d << doo));
335
    end
336
    do <= (do + pshift);
337
    o_oprogress <= (do + pshift);
338
    doo_next = ((doo + width) & 7);
339
    if ((doo_next == 0)) begin
340
        flush <= 1'b1;
341
    end
342
    doo <= doo_next;
343
end
344
endtask
345
 
346
task MYHDL15_do_flush;
347 5 tomtor
begin: MYHDL125_RETURN
348 2 tomtor
    flush <= 1'b0;
349
    ob1 <= 0;
350
    o_oprogress <= (do + 1);
351
    do <= (do + 1);
352
end
353
endtask
354
 
355
function integer MYHDL16_rev_bits;
356
    input [13-1:0] b;
357
    input nb;
358
    integer nb;
359
    integer r;
360 5 tomtor
begin: MYHDL126_RETURN
361 2 tomtor
    if ((b >= (1 << nb))) begin
362
        $finish;
363
        $write("too few bits");
364
        $write("\n");
365
    end
366
    r = (((((((((((((((((b >>> 14) & 1) << 0) | (((b >>> 13) & 1) << 1)) | (((b >>> 12) & 1) << 2)) | (((b >>> 11) & 1) << 3)) | (((b >>> 10) & 1) << 4)) | (((b >>> 9) & 1) << 5)) | (((b >>> 8) & 1) << 6)) | (((b >>> 7) & 1) << 7)) | (((b >>> 6) & 1) << 8)) | (((b >>> 5) & 1) << 9)) | (((b >>> 4) & 1) << 10)) | (((b >>> 3) & 1) << 11)) | (((b >>> 2) & 1) << 12)) | (((b >>> 1) & 1) << 13)) | (((b >>> 0) & 1) << 14));
367
    r = r >>> (15 - $signed({1'b0, nb}));
368
    MYHDL16_rev_bits = r;
369 5 tomtor
    disable MYHDL126_RETURN;
370 2 tomtor
end
371
endfunction
372
 
373
function integer MYHDL17_put;
374
    input d;
375
    integer d;
376
    input width;
377
    integer width;
378 5 tomtor
begin: MYHDL127_RETURN
379 2 tomtor
    if ((width > 9)) begin
380
        $finish;
381
    end
382
    if ((d > ((1 << width) - 1))) begin
383
        $finish;
384
    end
385
    MYHDL17_put = (($signed({1'b0, ob1}) | (d << $signed({1'b0, doo}))) & 255);
386 5 tomtor
    disable MYHDL127_RETURN;
387 2 tomtor
end
388
endfunction
389
 
390
task MYHDL18_put_adv;
391
    input d;
392
    integer d;
393
    input width;
394
    integer width;
395
    reg pshift;
396
    integer carry;
397
    integer doo_next;
398 5 tomtor
begin: MYHDL128_RETURN
399 2 tomtor
    if ((width > 9)) begin
400
        $finish;
401
    end
402
    if ((d > ((1 << width) - 1))) begin
403
        $finish;
404
    end
405
    pshift = (($signed({1'b0, doo}) + width) > 8);
406
    if (pshift) begin
407
        carry = (width - (8 - $signed({1'b0, doo})));
408
        ob1 <= $signed(d >>> (width - carry));
409
    end
410
    else begin
411
        ob1 <= ($signed({1'b0, ob1}) | (d << $signed({1'b0, doo})));
412
    end
413
    do <= (do + pshift);
414
    o_oprogress <= (do + pshift);
415
    doo_next = (($signed({1'b0, doo}) + width) & 7);
416
    if ((doo_next == 0)) begin
417
        flush <= 1'b1;
418
    end
419
    doo <= doo_next;
420
end
421
endtask
422
 
423 5 tomtor
function integer MYHDL21_put;
424 2 tomtor
    input [9-1:0] d;
425
    input [4-1:0] width;
426 5 tomtor
begin: MYHDL129_RETURN
427 2 tomtor
    if ((width > 9)) begin
428
        $finish;
429
    end
430
    if (($signed({1'b0, d}) > ((1 << width) - 1))) begin
431
        $finish;
432
    end
433 5 tomtor
    MYHDL21_put = ((ob1 | (d << doo)) & 255);
434
    disable MYHDL129_RETURN;
435 2 tomtor
end
436
endfunction
437
 
438 5 tomtor
task MYHDL22_put_adv;
439 2 tomtor
    input [9-1:0] d;
440
    input [4-1:0] width;
441
    reg pshift;
442
    integer carry;
443
    integer doo_next;
444 5 tomtor
begin: MYHDL130_RETURN
445 2 tomtor
    if ((width > 9)) begin
446
        $finish;
447
    end
448
    if (($signed({1'b0, d}) > ((1 << width) - 1))) begin
449
        $finish;
450
    end
451
    pshift = ((doo + width) > 8);
452
    if (pshift) begin
453
        carry = ($signed({1'b0, width}) - (8 - $signed({1'b0, doo})));
454
        ob1 <= $signed($signed({1'b0, d}) >>> ($signed({1'b0, width}) - carry));
455
    end
456
    else begin
457
        ob1 <= (ob1 | (d << doo));
458
    end
459
    do <= (do + pshift);
460
    o_oprogress <= (do + pshift);
461
    doo_next = ((doo + width) & 7);
462
    if ((doo_next == 0)) begin
463
        flush <= 1'b1;
464
    end
465
    doo <= doo_next;
466
end
467
endtask
468
 
469 5 tomtor
function integer MYHDL23_put;
470 2 tomtor
    input [9-1:0] d;
471
    input [4-1:0] width;
472 5 tomtor
begin: MYHDL131_RETURN
473 2 tomtor
    if ((width > 9)) begin
474
        $finish;
475
    end
476
    if (($signed({1'b0, d}) > ((1 << width) - 1))) begin
477
        $finish;
478
    end
479 5 tomtor
    MYHDL23_put = ((ob1 | (d << doo)) & 255);
480
    disable MYHDL131_RETURN;
481 2 tomtor
end
482
endfunction
483
 
484 5 tomtor
task MYHDL24_put_adv;
485 2 tomtor
    input [9-1:0] d;
486
    input [4-1:0] width;
487
    reg pshift;
488
    integer carry;
489
    integer doo_next;
490 5 tomtor
begin: MYHDL132_RETURN
491 2 tomtor
    if ((width > 9)) begin
492
        $finish;
493
    end
494
    if (($signed({1'b0, d}) > ((1 << width) - 1))) begin
495
        $finish;
496
    end
497
    pshift = ((doo + width) > 8);
498
    if (pshift) begin
499
        carry = ($signed({1'b0, width}) - (8 - $signed({1'b0, doo})));
500
        ob1 <= $signed($signed({1'b0, d}) >>> ($signed({1'b0, width}) - carry));
501
    end
502
    else begin
503
        ob1 <= (ob1 | (d << doo));
504
    end
505
    do <= (do + pshift);
506
    o_oprogress <= (do + pshift);
507
    doo_next = ((doo + width) & 7);
508
    if ((doo_next == 0)) begin
509
        flush <= 1'b1;
510
    end
511
    doo <= doo_next;
512
end
513
endtask
514
 
515 5 tomtor
function integer MYHDL25_put;
516
    input [9-1:0] d;
517
    input [4-1:0] width;
518
begin: MYHDL133_RETURN
519
    if ((width > 9)) begin
520
        $finish;
521
    end
522
    if (($signed({1'b0, d}) > ((1 << width) - 1))) begin
523
        $finish;
524
    end
525
    MYHDL25_put = ((ob1 | (d << doo)) & 255);
526
    disable MYHDL133_RETURN;
527
end
528
endfunction
529
 
530
task MYHDL26_put_adv;
531
    input [9-1:0] d;
532
    input [4-1:0] width;
533
    reg pshift;
534
    integer carry;
535
    integer doo_next;
536
begin: MYHDL134_RETURN
537
    if ((width > 9)) begin
538
        $finish;
539
    end
540
    if (($signed({1'b0, d}) > ((1 << width) - 1))) begin
541
        $finish;
542
    end
543
    pshift = ((doo + width) > 8);
544
    if (pshift) begin
545
        carry = ($signed({1'b0, width}) - (8 - $signed({1'b0, doo})));
546
        ob1 <= $signed($signed({1'b0, d}) >>> ($signed({1'b0, width}) - carry));
547
    end
548
    else begin
549
        ob1 <= (ob1 | (d << doo));
550
    end
551
    do <= (do + pshift);
552
    o_oprogress <= (do + pshift);
553
    doo_next = ((doo + width) & 7);
554
    if ((doo_next == 0)) begin
555
        flush <= 1'b1;
556
    end
557
    doo <= doo_next;
558
end
559
endtask
560
 
561
function integer MYHDL35_get4;
562 2 tomtor
    input boffset;
563
    input width;
564
    integer width;
565 5 tomtor
begin: MYHDL135_RETURN
566 2 tomtor
    if ((nb != 4)) begin
567
        $write("----NB----");
568
        $write("\n");
569
        $finish;
570
    end
571 5 tomtor
    MYHDL35_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
572
    disable MYHDL135_RETURN;
573 2 tomtor
end
574
endfunction
575
 
576 5 tomtor
function integer MYHDL36_get4;
577 2 tomtor
    input boffset;
578
    input width;
579
    integer width;
580 5 tomtor
begin: MYHDL136_RETURN
581 2 tomtor
    if ((nb != 4)) begin
582
        $write("----NB----");
583
        $write("\n");
584
        $finish;
585
    end
586 5 tomtor
    MYHDL36_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
587
    disable MYHDL136_RETURN;
588 2 tomtor
end
589
endfunction
590
 
591 5 tomtor
function integer MYHDL37_get4;
592 2 tomtor
    input boffset;
593
    integer boffset;
594
    input width;
595
    integer width;
596 5 tomtor
begin: MYHDL137_RETURN
597 2 tomtor
    if ((nb != 4)) begin
598
        $write("----NB----");
599
        $write("\n");
600
        $finish;
601
    end
602 5 tomtor
    MYHDL37_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
603
    disable MYHDL137_RETURN;
604 2 tomtor
end
605
endfunction
606
 
607 5 tomtor
function integer MYHDL38_get4;
608 2 tomtor
    input boffset;
609
    integer boffset;
610
    input width;
611
    integer width;
612 5 tomtor
begin: MYHDL138_RETURN
613 2 tomtor
    if ((nb != 4)) begin
614
        $write("----NB----");
615
        $write("\n");
616
        $finish;
617
    end
618 5 tomtor
    MYHDL38_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
619
    disable MYHDL138_RETURN;
620 2 tomtor
end
621
endfunction
622
 
623 5 tomtor
function integer MYHDL39_get4;
624 2 tomtor
    input boffset;
625
    integer boffset;
626
    input width;
627
    integer width;
628 5 tomtor
begin: MYHDL139_RETURN
629 2 tomtor
    if ((nb != 4)) begin
630
        $write("----NB----");
631
        $write("\n");
632
        $finish;
633
    end
634 5 tomtor
    MYHDL39_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
635
    disable MYHDL139_RETURN;
636 2 tomtor
end
637
endfunction
638
 
639 5 tomtor
function integer MYHDL40_get4;
640 2 tomtor
    input boffset;
641
    integer boffset;
642
    input width;
643
    integer width;
644 5 tomtor
begin: MYHDL140_RETURN
645 2 tomtor
    if ((nb != 4)) begin
646
        $write("----NB----");
647
        $write("\n");
648
        $finish;
649
    end
650 5 tomtor
    MYHDL40_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
651
    disable MYHDL140_RETURN;
652 2 tomtor
end
653
endfunction
654
 
655 5 tomtor
task MYHDL41_adv;
656 2 tomtor
    input width;
657
    integer width;
658
    integer nshift;
659 5 tomtor
begin: MYHDL141_RETURN
660 2 tomtor
    nshift = ((dio + width) >>> 3);
661
    o_iprogress <= di;
662
    dio <= ((dio + width) & 7);
663
    di <= ($signed({1'b0, di}) + nshift);
664
    if ((nshift != 0)) begin
665
        filled <= 1'b0;
666
    end
667
end
668
endtask
669
 
670 5 tomtor
function integer MYHDL42_get4;
671 2 tomtor
    input boffset;
672
    input width;
673
    integer width;
674 5 tomtor
begin: MYHDL142_RETURN
675 2 tomtor
    if ((nb != 4)) begin
676
        $write("----NB----");
677
        $write("\n");
678
        $finish;
679
    end
680 5 tomtor
    MYHDL42_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
681
    disable MYHDL142_RETURN;
682 2 tomtor
end
683
endfunction
684
 
685 5 tomtor
task MYHDL43_adv;
686 2 tomtor
    input width;
687
    integer width;
688
    integer nshift;
689 5 tomtor
begin: MYHDL143_RETURN
690 2 tomtor
    nshift = ((dio + width) >>> 3);
691
    o_iprogress <= di;
692
    dio <= ((dio + width) & 7);
693
    di <= ($signed({1'b0, di}) + nshift);
694
    if ((nshift != 0)) begin
695
        filled <= 1'b0;
696
    end
697
end
698
endtask
699
 
700 5 tomtor
function integer MYHDL44_get4;
701 2 tomtor
    input boffset;
702
    input width;
703
    integer width;
704 5 tomtor
begin: MYHDL144_RETURN
705 2 tomtor
    if ((nb != 4)) begin
706
        $write("----NB----");
707
        $write("\n");
708
        $finish;
709
    end
710 5 tomtor
    MYHDL44_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
711
    disable MYHDL144_RETURN;
712 2 tomtor
end
713
endfunction
714
 
715 5 tomtor
function integer MYHDL45_get4;
716 2 tomtor
    input boffset;
717
    input width;
718
    integer width;
719 5 tomtor
begin: MYHDL145_RETURN
720 2 tomtor
    if ((nb != 4)) begin
721
        $write("----NB----");
722
        $write("\n");
723
        $finish;
724
    end
725 5 tomtor
    MYHDL45_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
726
    disable MYHDL145_RETURN;
727 2 tomtor
end
728
endfunction
729
 
730 5 tomtor
function integer MYHDL46_get4;
731 2 tomtor
    input boffset;
732
    input width;
733
    integer width;
734 5 tomtor
begin: MYHDL146_RETURN
735 2 tomtor
    if ((nb != 4)) begin
736
        $write("----NB----");
737
        $write("\n");
738
        $finish;
739
    end
740 5 tomtor
    MYHDL46_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
741
    disable MYHDL146_RETURN;
742 2 tomtor
end
743
endfunction
744
 
745 5 tomtor
task MYHDL47_adv;
746 2 tomtor
    input width;
747
    integer width;
748
    integer nshift;
749 5 tomtor
begin: MYHDL147_RETURN
750 2 tomtor
    nshift = ((dio + width) >>> 3);
751
    o_iprogress <= di;
752
    dio <= ((dio + width) & 7);
753
    di <= ($signed({1'b0, di}) + nshift);
754
    if ((nshift != 0)) begin
755
        filled <= 1'b0;
756
    end
757
end
758
endtask
759
 
760 5 tomtor
function integer MYHDL54_rev_bits;
761 2 tomtor
    input [10-1:0] b;
762
    input [4-1:0] nb;
763
    integer r;
764 5 tomtor
begin: MYHDL148_RETURN
765 2 tomtor
    if ((b >= (1 << nb))) begin
766
        $finish;
767
        $write("too few bits");
768
        $write("\n");
769
    end
770
    r = (((((((((((((((((b >>> 14) & 1) << 0) | (((b >>> 13) & 1) << 1)) | (((b >>> 12) & 1) << 2)) | (((b >>> 11) & 1) << 3)) | (((b >>> 10) & 1) << 4)) | (((b >>> 9) & 1) << 5)) | (((b >>> 8) & 1) << 6)) | (((b >>> 7) & 1) << 7)) | (((b >>> 6) & 1) << 8)) | (((b >>> 5) & 1) << 9)) | (((b >>> 4) & 1) << 10)) | (((b >>> 3) & 1) << 11)) | (((b >>> 2) & 1) << 12)) | (((b >>> 1) & 1) << 13)) | (((b >>> 0) & 1) << 14));
771
    r = r >>> (15 - $signed({1'b0, nb}));
772 5 tomtor
    MYHDL54_rev_bits = r;
773
    disable MYHDL148_RETURN;
774 2 tomtor
end
775
endfunction
776
 
777 5 tomtor
function integer MYHDL55_makeLeaf;
778 2 tomtor
    input [9-1:0] lcode;
779
    input [4-1:0] lbits;
780 5 tomtor
begin: MYHDL149_RETURN
781 2 tomtor
    if ((lcode >= (1 << 10))) begin
782
        $finish;
783
    end
784
    if ((lbits >= (1 << 9))) begin
785
        $finish;
786
    end
787 5 tomtor
    MYHDL55_makeLeaf = ((lcode << 9) | lbits);
788
    disable MYHDL149_RETURN;
789 2 tomtor
end
790
endfunction
791
 
792 5 tomtor
function integer MYHDL56_makeLeaf;
793 2 tomtor
    input [9-1:0] lcode;
794
    input [4-1:0] lbits;
795 5 tomtor
begin: MYHDL150_RETURN
796 2 tomtor
    if ((lcode >= (1 << 10))) begin
797
        $finish;
798
    end
799
    if ((lbits >= (1 << 9))) begin
800
        $finish;
801
    end
802 5 tomtor
    MYHDL56_makeLeaf = ((lcode << 9) | lbits);
803
    disable MYHDL150_RETURN;
804 2 tomtor
end
805
endfunction
806
 
807 5 tomtor
function integer MYHDL57_makeLeaf;
808 2 tomtor
    input [9-1:0] lcode;
809
    input [4-1:0] lbits;
810 5 tomtor
begin: MYHDL151_RETURN
811 2 tomtor
    if ((lcode >= (1 << 10))) begin
812
        $finish;
813
    end
814
    if ((lbits >= (1 << 9))) begin
815
        $finish;
816
    end
817 5 tomtor
    MYHDL57_makeLeaf = ((lcode << 9) | lbits);
818
    disable MYHDL151_RETURN;
819 2 tomtor
end
820
endfunction
821
 
822 5 tomtor
function integer MYHDL58_get4;
823 2 tomtor
    input boffset;
824
    input [5-1:0] width;
825 5 tomtor
begin: MYHDL152_RETURN
826 2 tomtor
    if ((nb != 4)) begin
827
        $write("----NB----");
828
        $write("\n");
829
        $finish;
830
    end
831 5 tomtor
    MYHDL58_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
832
    disable MYHDL152_RETURN;
833 2 tomtor
end
834
endfunction
835
 
836 5 tomtor
function integer MYHDL59_get_bits;
837 2 tomtor
    input [19-1:0] aleaf;
838 5 tomtor
begin: MYHDL153_RETURN
839
    MYHDL59_get_bits = ($signed({1'b0, aleaf}) & ((1 << 9) - 1));
840
    disable MYHDL153_RETURN;
841 2 tomtor
end
842
endfunction
843
 
844 5 tomtor
function integer MYHDL60_get_bits;
845 2 tomtor
    input [19-1:0] aleaf;
846 5 tomtor
begin: MYHDL154_RETURN
847
    MYHDL60_get_bits = ($signed({1'b0, aleaf}) & ((1 << 9) - 1));
848
    disable MYHDL154_RETURN;
849 2 tomtor
end
850
endfunction
851
 
852 5 tomtor
task MYHDL61_adv;
853 2 tomtor
    input width;
854
    integer width;
855
    integer nshift;
856 5 tomtor
begin: MYHDL155_RETURN
857 2 tomtor
    nshift = $signed(($signed({1'b0, dio}) + width) >>> 3);
858
    o_iprogress <= di;
859
    dio <= (($signed({1'b0, dio}) + width) & 7);
860
    di <= ($signed({1'b0, di}) + nshift);
861
    if ((nshift != 0)) begin
862
        filled <= 1'b0;
863
    end
864
end
865
endtask
866
 
867 5 tomtor
function integer MYHDL62_get_code;
868 2 tomtor
    input [19-1:0] aleaf;
869 5 tomtor
begin: MYHDL156_RETURN
870
    MYHDL62_get_code = (aleaf >>> 9);
871
    disable MYHDL156_RETURN;
872 2 tomtor
end
873
endfunction
874
 
875 5 tomtor
function integer MYHDL63_get_code;
876 2 tomtor
    input [19-1:0] aleaf;
877 5 tomtor
begin: MYHDL157_RETURN
878
    MYHDL63_get_code = (aleaf >>> 9);
879
    disable MYHDL157_RETURN;
880 2 tomtor
end
881
endfunction
882
 
883 5 tomtor
function integer MYHDL64_get4;
884 2 tomtor
    input boffset;
885
    integer boffset;
886
    input [5-1:0] width;
887 5 tomtor
begin: MYHDL158_RETURN
888 2 tomtor
    if ((nb != 4)) begin
889
        $write("----NB----");
890
        $write("\n");
891
        $finish;
892
    end
893 5 tomtor
    MYHDL64_get4 = ($signed($signed({1'b0, b41}) >>> ($signed({1'b0, dio}) + boffset)) & ((1 << width) - 1));
894
    disable MYHDL158_RETURN;
895 2 tomtor
end
896
endfunction
897
 
898 5 tomtor
function integer MYHDL65_get_bits;
899 2 tomtor
    input [19-1:0] aleaf;
900 5 tomtor
begin: MYHDL159_RETURN
901
    MYHDL65_get_bits = ($signed({1'b0, aleaf}) & ((1 << 9) - 1));
902
    disable MYHDL159_RETURN;
903 2 tomtor
end
904
endfunction
905
 
906 5 tomtor
function integer MYHDL66_get4;
907 2 tomtor
    input boffset;
908
    input width;
909
    integer width;
910 5 tomtor
begin: MYHDL160_RETURN
911 2 tomtor
    if ((nb != 4)) begin
912
        $write("----NB----");
913
        $write("\n");
914
        $finish;
915
    end
916 5 tomtor
    MYHDL66_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
917
    disable MYHDL160_RETURN;
918 2 tomtor
end
919
endfunction
920
 
921 5 tomtor
function integer MYHDL67_get_code;
922 2 tomtor
    input [19-1:0] aleaf;
923 5 tomtor
begin: MYHDL161_RETURN
924
    MYHDL67_get_code = (aleaf >>> 9);
925
    disable MYHDL161_RETURN;
926 2 tomtor
end
927
endfunction
928
 
929 5 tomtor
function integer MYHDL68_get_bits;
930 2 tomtor
    input [19-1:0] aleaf;
931 5 tomtor
begin: MYHDL162_RETURN
932
    MYHDL68_get_bits = ($signed({1'b0, aleaf}) & ((1 << 9) - 1));
933
    disable MYHDL162_RETURN;
934 2 tomtor
end
935
endfunction
936
 
937 5 tomtor
function integer MYHDL69_get4;
938 2 tomtor
    input boffset;
939
    integer boffset;
940
    input width;
941
    integer width;
942 5 tomtor
begin: MYHDL163_RETURN
943 2 tomtor
    if ((nb != 4)) begin
944
        $write("----NB----");
945
        $write("\n");
946
        $finish;
947
    end
948 5 tomtor
    MYHDL69_get4 = ($signed($signed({1'b0, b41}) >>> ($signed({1'b0, dio}) + boffset)) & ((1 << width) - 1));
949
    disable MYHDL163_RETURN;
950 2 tomtor
end
951
endfunction
952
 
953 5 tomtor
function integer MYHDL70_get_bits;
954 2 tomtor
    input [19-1:0] aleaf;
955 5 tomtor
begin: MYHDL164_RETURN
956
    MYHDL70_get_bits = ($signed({1'b0, aleaf}) & ((1 << 9) - 1));
957
    disable MYHDL164_RETURN;
958 2 tomtor
end
959
endfunction
960
 
961 5 tomtor
task MYHDL71_adv;
962 2 tomtor
    input width;
963
    integer width;
964
    integer nshift;
965 5 tomtor
begin: MYHDL165_RETURN
966 2 tomtor
    nshift = $signed(($signed({1'b0, dio}) + width) >>> 3);
967
    o_iprogress <= di;
968
    dio <= (($signed({1'b0, dio}) + width) & 7);
969
    di <= ($signed({1'b0, di}) + nshift);
970
    if ((nshift != 0)) begin
971
        filled <= 1'b0;
972
    end
973
end
974
endtask
975
 
976 5 tomtor
function integer MYHDL72_get4;
977 2 tomtor
    input boffset;
978
    input width;
979
    integer width;
980 5 tomtor
begin: MYHDL166_RETURN
981 2 tomtor
    if ((nb != 4)) begin
982
        $write("----NB----");
983
        $write("\n");
984
        $finish;
985
    end
986 5 tomtor
    MYHDL72_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1));
987
    disable MYHDL166_RETURN;
988 2 tomtor
end
989
endfunction
990
 
991 5 tomtor
function integer MYHDL73_get4;
992 2 tomtor
    input boffset;
993
    integer boffset;
994
    input width;
995
    integer width;
996 5 tomtor
begin: MYHDL167_RETURN
997 2 tomtor
    if ((nb != 4)) begin
998
        $write("----NB----");
999
        $write("\n");
1000
        $finish;
1001
    end
1002 5 tomtor
    MYHDL73_get4 = ($signed($signed({1'b0, b41}) >>> ($signed({1'b0, dio}) + boffset)) & ((1 << width) - 1));
1003
    disable MYHDL167_RETURN;
1004 2 tomtor
end
1005
endfunction
1006
 
1007 5 tomtor
function integer MYHDL74_rev_bits;
1008 2 tomtor
    input b;
1009
    integer b;
1010
    input nb;
1011
    integer nb;
1012
    integer r;
1013 5 tomtor
begin: MYHDL168_RETURN
1014 2 tomtor
    if ((b >= (1 << nb))) begin
1015
        $finish;
1016
        $write("too few bits");
1017
        $write("\n");
1018
    end
1019
    r = (((((((((((((((((b >>> 14) & 1) << 0) | (((b >>> 13) & 1) << 1)) | (((b >>> 12) & 1) << 2)) | (((b >>> 11) & 1) << 3)) | (((b >>> 10) & 1) << 4)) | (((b >>> 9) & 1) << 5)) | (((b >>> 8) & 1) << 6)) | (((b >>> 7) & 1) << 7)) | (((b >>> 6) & 1) << 8)) | (((b >>> 5) & 1) << 9)) | (((b >>> 4) & 1) << 10)) | (((b >>> 3) & 1) << 11)) | (((b >>> 2) & 1) << 12)) | (((b >>> 1) & 1) << 13)) | (((b >>> 0) & 1) << 14));
1020
    r = r >>> (15 - $signed({1'b0, nb}));
1021 5 tomtor
    MYHDL74_rev_bits = r;
1022
    disable MYHDL168_RETURN;
1023 2 tomtor
end
1024
endfunction
1025
 
1026 5 tomtor
function integer MYHDL75_get4;
1027 2 tomtor
    input boffset;
1028
    integer boffset;
1029
    input width;
1030
    integer width;
1031 5 tomtor
begin: MYHDL169_RETURN
1032 2 tomtor
    if ((nb != 4)) begin
1033
        $write("----NB----");
1034
        $write("\n");
1035
        $finish;
1036
    end
1037 5 tomtor
    MYHDL75_get4 = ($signed($signed({1'b0, b41}) >>> ($signed({1'b0, dio}) + boffset)) & ((1 << width) - 1));
1038
    disable MYHDL169_RETURN;
1039 2 tomtor
end
1040
endfunction
1041
 
1042 5 tomtor
task MYHDL76_adv;
1043 2 tomtor
    input width;
1044
    integer width;
1045
    integer nshift;
1046 5 tomtor
begin: MYHDL170_RETURN
1047 2 tomtor
    nshift = $signed(($signed({1'b0, dio}) + width) >>> 3);
1048
    o_iprogress <= di;
1049
    dio <= (($signed({1'b0, dio}) + width) & 7);
1050
    di <= ($signed({1'b0, di}) + nshift);
1051
    if ((nshift != 0)) begin
1052
        filled <= 1'b0;
1053
    end
1054
end
1055
endtask
1056
 
1057 5 tomtor
task MYHDL77_adv;
1058 2 tomtor
    input width;
1059
    integer width;
1060
    integer nshift;
1061 5 tomtor
begin: MYHDL171_RETURN
1062 2 tomtor
    nshift = ((dio + width) >>> 3);
1063
    o_iprogress <= di;
1064
    dio <= ((dio + width) & 7);
1065
    di <= ($signed({1'b0, di}) + nshift);
1066
    if ((nshift != 0)) begin
1067
        filled <= 1'b0;
1068
    end
1069
end
1070
endtask
1071
 
1072
 
1073
always @(posedge clk) begin: DEFLATE_IO_LOGIC
1074
    case (i_mode)
1075
        'h2: begin
1076
            iram[(i_addr & 127)] <= i_data;
1077
            isize <= i_addr;
1078
        end
1079
        'h3: begin
1080
            o_byte <= oram[i_addr];
1081
        end
1082
        default: begin
1083
            // pass
1084
        end
1085
    endcase
1086
end
1087
 
1088
 
1089
always @(posedge clk) begin: DEFLATE_LOGIC
1090
    integer hm;
1091
    integer skip;
1092
    reg no_adv;
1093
    integer cs_i;
1094
    reg [4-1:0] outlen;
1095
    reg [9-1:0] outbits;
1096
    reg [8-1:0] bdata;
1097
    integer adler1_next;
1098
    integer nextdist;
1099
    integer copydist;
1100
    integer extra_dist;
1101
    integer extra_bits;
1102
    integer outcode;
1103 5 tomtor
    reg found;
1104
    integer fmatch;
1105
    integer si;
1106
    integer distance;
1107 2 tomtor
    integer lencode;
1108
    integer match;
1109
    integer stat_i;
1110
    integer clo_i;
1111
    integer n_adv;
1112
    integer dbl_i;
1113
    integer dbl;
1114
    integer dist_i;
1115
    integer limit;
1116
    reg [4-1:0] j;
1117
    integer t;
1118
    integer hf2_i;
1119
    reg [5-1:0] amb;
1120
    integer ncode;
1121
    reg [10-1:0] canonical;
1122
    reg [4-1:0] bits_next;
1123
    reg [15-1:0] aim;
1124
    integer cto;
1125
    integer mask;
1126
    integer token;
1127
    integer extraLength;
1128
    integer tlength;
1129
    integer distanceCode;
1130
    integer moreBits;
1131
    integer mored;
1132
    if ((!reset)) begin
1133
        $write("DEFLATE RESET");
1134
        $write("\n");
1135
        state <= 5'b00000;
1136
        o_done <= 1'b0;
1137
    end
1138
    else begin
1139
        case (state)
1140
            5'b00000: begin
1141 5 tomtor
                if ((1'b1 && (i_mode == 4))) begin
1142
                    $write("STARTC");
1143
                    $write("\n");
1144
                    do_compress <= 1'b1;
1145
                    method <= 1;
1146
                    o_done <= 1'b0;
1147
                    o_iprogress <= 0;
1148
                    o_oprogress <= 0;
1149
                    di <= 0;
1150
                    dio <= 0;
1151
                    do <= 0;
1152
                    doo <= 0;
1153
                    filled <= 1'b1;
1154
                    cur_static <= 0;
1155
                    state <= 5'b01110;
1156
                end
1157
                else if ((i_mode == 5)) begin
1158
                    do_compress <= 1'b0;
1159
                    o_done <= 1'b0;
1160
                    o_iprogress <= 0;
1161
                    o_oprogress <= 0;
1162
                    di <= 0;
1163
                    dio <= 0;
1164
                    do <= 0;
1165
                    doo <= 0;
1166
                    filled <= 1'b1;
1167
                    state <= 5'b00001;
1168
                end
1169
                else begin
1170
                    // pass
1171
                end
1172 2 tomtor
            end
1173
            5'b00001: begin
1174
                if ((!filled)) begin
1175
                    filled <= 1'b1;
1176
                end
1177
                else if ((nb < 4)) begin
1178
                    // pass
1179
                end
1180
                else if ((di == 0)) begin
1181
                    if ((b1 == 120)) begin
1182
                        $write("deflate mode");
1183
                        $write("\n");
1184
                    end
1185
                    else begin
1186
                        $write("%h", di);
1187
                        $write(" ");
1188
                        $write("%h", dio);
1189
                        $write(" ");
1190
                        $write("%h", nb);
1191
                        $write(" ");
1192
                        $write("%h", b1);
1193
                        $write(" ");
1194
                        $write("%h", b2);
1195
                        $write(" ");
1196
                        $write("%h", b3);
1197
                        $write(" ");
1198
                        $write("%h", b4);
1199
                        $write(" ");
1200
                        $write("%h", isize);
1201
                        $write("\n");
1202
                        $finish;
1203
                        o_done <= 1'b1;
1204
                        state <= 5'b00000;
1205
                    end
1206
                    MYHDL3_adv(16);
1207
                end
1208
                else begin
1209
                    if (MYHDL4_get4(0, 1)) begin
1210
                        $write("final");
1211
                        $write("\n");
1212
                        final <= 1'b1;
1213
                    end
1214
                    hm = MYHDL5_get4(1, 2);
1215
                    method <= hm;
1216
                    $write("method");
1217
                    $write(" ");
1218
                    $write("%0d", hm);
1219
                    $write("\n");
1220
                    case (hm)
1221
                        'h2: begin
1222
                            state <= 5'b00010;
1223
                            numCodeLength <= 0;
1224
                            numLiterals <= 0;
1225
                            static <= 1'b0;
1226
                            MYHDL6_adv(3);
1227
                        end
1228
                        'h1: begin
1229
                            static <= 1'b1;
1230
                            cur_static <= 0;
1231
                            state <= 5'b01110;
1232
                            MYHDL7_adv(3);
1233
                        end
1234
                        'h0: begin
1235
                            state <= 5'b10101;
1236
                            skip = (8 - dio);
1237
                            if ((skip <= 2)) begin
1238
                                skip = (16 - dio);
1239
                            end
1240
                            length <= MYHDL8_get4(skip, 16);
1241
                            MYHDL9_adv((skip + 16));
1242
                            cur_i <= 0;
1243
                            offset <= 7;
1244
                        end
1245
                        default: begin
1246
                            state <= 5'b00000;
1247
                            $write("Bad method");
1248
                            $write("\n");
1249
                            $finish;
1250
                        end
1251
                    endcase
1252
                end
1253
            end
1254
            5'b10110: begin
1255
                no_adv = 0;
1256 5 tomtor
                if ((!1'b1)) begin
1257
                    // pass
1258
                end
1259
                else if ((!filled)) begin
1260 2 tomtor
                    no_adv = 1;
1261
                    filled <= 1'b1;
1262
                end
1263
                else if ((nb < 4)) begin
1264
                    no_adv = 1;
1265
                    // pass
1266
                end
1267
                else if ((cur_cstatic == 0)) begin
1268
                    flush <= 1'b0;
1269
                    ob1 <= 0;
1270
                    adler1 <= 1;
1271
                    adler2 <= 0;
1272
                    ladler1 <= 0;
1273
                    oaddr <= 0;
1274
                    obyte <= 120;
1275
                end
1276
                else if ((cur_cstatic == 1)) begin
1277
                    oaddr <= 1;
1278
                    obyte <= 156;
1279
                    do <= 2;
1280
                end
1281
                else if ((cur_cstatic == 2)) begin
1282
                    oaddr <= do;
1283
                    obyte <= MYHDL10_put(3, 3);
1284
                    MYHDL11_put_adv(3, 3);
1285
                end
1286
                else if (flush) begin
1287
                    $write("flush");
1288
                    $write(" ");
1289
                    $write("%h", do);
1290
                    $write(" ");
1291
                    $write("%h", ob1);
1292
                    $write("\n");
1293
                    no_adv = 1;
1294
                    oaddr <= do;
1295
                    obyte <= ob1;
1296
                    MYHDL12_do_flush;
1297
                end
1298
                else if ((($signed({1'b0, cur_cstatic}) - 3) > isize)) begin
1299
                    if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 1))) begin
1300
                        $write("Put EOF");
1301
                        $write(" ");
1302
                        $write("%h", do);
1303
                        $write("\n");
1304
                        cs_i = 256;
1305
                        outlen = codeLength[cs_i];
1306
                        outbits = code_bits[cs_i];
1307
                        $write("EOF BITS:");
1308
                        $write(" ");
1309
                        $write("%0d", cs_i);
1310
                        $write(" ");
1311
                        $write("%h", outlen);
1312
                        $write(" ");
1313
                        $write("%h", outbits);
1314
                        $write("\n");
1315
                        oaddr <= do;
1316
                        obyte <= MYHDL13_put(outbits, outlen);
1317
                        MYHDL14_put_adv(outbits, outlen);
1318
                    end
1319
                    else if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 2))) begin
1320
                        $write("calc end adler");
1321
                        $write("\n");
1322
                        adler2 <= ((adler2 + ladler1) % 65521);
1323
                        if ((doo != 0)) begin
1324
                            oaddr <= do;
1325
                            obyte <= ob1;
1326
                            do <= (do + 1);
1327
                        end
1328
                    end
1329
                    else if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 3))) begin
1330
                        $write("c1");
1331
                        $write("\n");
1332
                        oaddr <= do;
1333
                        obyte <= (adler2 >>> 8);
1334
                        do <= (do + 1);
1335
                    end
1336
                    else if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 4))) begin
1337
                        $write("c2");
1338
                        $write("\n");
1339
                        oaddr <= do;
1340
                        obyte <= (adler2 & 255);
1341
                        do <= (do + 1);
1342
                    end
1343
                    else if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 5))) begin
1344
                        $write("c3");
1345
                        $write("\n");
1346
                        oaddr <= do;
1347
                        obyte <= (adler1 >>> 8);
1348
                        do <= (do + 1);
1349
                    end
1350
                    else if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 6))) begin
1351
                        $write("c4");
1352
                        $write("\n");
1353
                        oaddr <= do;
1354
                        obyte <= (adler1 & 255);
1355
                    end
1356
                    else if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 7))) begin
1357
                        $write("EOF finish");
1358
                        $write(" ");
1359
                        $write("%h", do);
1360
                        $write("\n");
1361
                        o_done <= 1'b1;
1362
                        o_oprogress <= (do + 1);
1363
                        state <= 5'b00000;
1364
                    end
1365
                    else begin
1366
                        $write("%h", cur_cstatic);
1367
                        $write(" ");
1368
                        $write("%h", isize);
1369
                        $write("\n");
1370
                        $finish;
1371
                    end
1372
                end
1373
                else begin
1374
                    bdata = iram[di];
1375
                    adler1_next = ((adler1 + bdata) % 65521);
1376
                    adler1 <= adler1_next;
1377
                    adler2 <= ((adler2 + ladler1) % 65521);
1378
                    ladler1 <= adler1_next;
1379
                    state <= 5'b10111;
1380
                    cur_search <= (di - 1);
1381
                end
1382
                if ((!no_adv)) begin
1383
                    cur_cstatic <= (cur_cstatic + 1);
1384
                end
1385
            end
1386
            5'b11000: begin
1387 5 tomtor
                if ((!1'b1)) begin
1388
                    // pass
1389
                end
1390
                else if (flush) begin
1391 2 tomtor
                    MYHDL15_do_flush;
1392
                end
1393
                else begin
1394
                    case ((cur_i + 1))
1395
                        0: nextdist = 1;
1396
                        1: nextdist = 2;
1397
                        2: nextdist = 3;
1398
                        3: nextdist = 4;
1399
                        4: nextdist = 5;
1400
                        5: nextdist = 7;
1401
                        6: nextdist = 9;
1402
                        7: nextdist = 13;
1403
                        8: nextdist = 17;
1404
                        9: nextdist = 25;
1405
                        10: nextdist = 33;
1406
                        11: nextdist = 49;
1407
                        12: nextdist = 65;
1408
                        13: nextdist = 97;
1409
                        14: nextdist = 129;
1410
                        15: nextdist = 193;
1411
                        16: nextdist = 257;
1412
                        17: nextdist = 385;
1413
                        18: nextdist = 513;
1414
                        19: nextdist = 769;
1415
                        20: nextdist = 1025;
1416
                        21: nextdist = 1537;
1417
                        22: nextdist = 2049;
1418
                        23: nextdist = 3073;
1419
                        24: nextdist = 4097;
1420
                        25: nextdist = 6145;
1421
                        26: nextdist = 8193;
1422
                        27: nextdist = 12289;
1423
                        28: nextdist = 16385;
1424
                        default: nextdist = 24577;
1425
                    endcase
1426
                    if ((nextdist > cur_dist)) begin
1427
                        case (cur_i)
1428
                            0: copydist = 1;
1429
                            1: copydist = 2;
1430
                            2: copydist = 3;
1431
                            3: copydist = 4;
1432
                            4: copydist = 5;
1433
                            5: copydist = 7;
1434
                            6: copydist = 9;
1435
                            7: copydist = 13;
1436
                            8: copydist = 17;
1437
                            9: copydist = 25;
1438
                            10: copydist = 33;
1439
                            11: copydist = 49;
1440
                            12: copydist = 65;
1441
                            13: copydist = 97;
1442
                            14: copydist = 129;
1443
                            15: copydist = 193;
1444
                            16: copydist = 257;
1445
                            17: copydist = 385;
1446
                            18: copydist = 513;
1447
                            19: copydist = 769;
1448
                            20: copydist = 1025;
1449
                            21: copydist = 1537;
1450
                            22: copydist = 2049;
1451
                            23: copydist = 3073;
1452
                            24: copydist = 4097;
1453
                            25: copydist = 6145;
1454
                            26: copydist = 8193;
1455
                            27: copydist = 12289;
1456
                            28: copydist = 16385;
1457
                            default: copydist = 24577;
1458
                        endcase
1459
                        extra_dist = (cur_dist - copydist);
1460
                        case ((cur_i / 2))
1461
                            0: extra_bits = 0;
1462
                            1: extra_bits = 0;
1463
                            2: extra_bits = 1;
1464
                            3: extra_bits = 2;
1465
                            4: extra_bits = 3;
1466
                            5: extra_bits = 4;
1467
                            6: extra_bits = 5;
1468
                            7: extra_bits = 6;
1469
                            8: extra_bits = 7;
1470
                            9: extra_bits = 8;
1471
                            10: extra_bits = 9;
1472
                            11: extra_bits = 10;
1473
                            12: extra_bits = 11;
1474
                            13: extra_bits = 12;
1475
                            default: extra_bits = 13;
1476
                        endcase
1477
                        if ((extra_dist > ((1 << extra_bits) - 1))) begin
1478
                            $finish;
1479
                        end
1480
                        outcode = (MYHDL16_rev_bits(cur_i, 5) | (extra_dist << 5));
1481
                        oaddr <= do;
1482
                        obyte <= MYHDL17_put(outcode, (5 + extra_bits));
1483
                        MYHDL18_put_adv(outcode, (5 + extra_bits));
1484
                        cur_i <= (($signed({1'b0, di}) - $signed({1'b0, length})) + 1);
1485
                        state <= 5'b11001;
1486
                    end
1487
                    else begin
1488
                        cur_i <= (cur_i + 1);
1489
                    end
1490
                end
1491
            end
1492
            5'b11001: begin
1493 5 tomtor
                if ((!1'b1)) begin
1494
                    // pass
1495
                end
1496
                else if ((cur_i < di)) begin
1497 2 tomtor
                    bdata = iram[(cur_i & 127)];
1498
                    adler1_next = ((adler1 + bdata) % 65521);
1499
                    adler1 <= adler1_next;
1500
                    adler2 <= ((adler2 + ladler1) % 65521);
1501
                    ladler1 <= adler1_next;
1502
                    cur_i <= (cur_i + 1);
1503
                end
1504
                else begin
1505
                    state <= 5'b10110;
1506
                end
1507
            end
1508
            5'b10111: begin
1509 5 tomtor
                if ((!1'b1)) begin
1510
                    // pass
1511
                end
1512
                else if ((!filled)) begin
1513 2 tomtor
                    filled <= 1'b1;
1514
                end
1515
                else if ((nb < 4)) begin
1516
                    // pass
1517
                end
1518
                else begin
1519
                    if (((cur_search >= 0) && (cur_search >= ($signed({1'b0, di}) - 32)) && ($signed({1'b0, di}) < ($signed({1'b0, isize}) - 3)))) begin
1520 5 tomtor
                        //                         
1521
                        if (1'b1) begin
1522
                            found = 0;
1523
                            fmatch = 0;
1524
                            begin: MYHDL19_BREAK
1525
                            for (si=0; si<32; si=si+1) begin
1526
                                if (smatch[si]) begin
1527
                                    $write("fmatch");
1528
                                    $write(" ");
1529
                                    $write("%0d", si);
1530
                                    $write("\n");
1531
                                    fmatch = si;
1532
                                    found = 1;
1533
                                    disable MYHDL19_BREAK;
1534
                                end
1535
                            end
1536
                            end
1537
                            if (((!found) || ((($signed({1'b0, di}) - fmatch) - 1) < 0))) begin
1538
                                cur_search <= (-1);
1539
                            end
1540
                            else begin
1541
                                distance = (fmatch + 1);
1542
                                fmatch = (($signed({1'b0, di}) - fmatch) + 2);
1543
                                lencode = 257;
1544
                                match = 3;
1545
                                if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 4)) && (iram[(fmatch & 127)] == b4))) begin
1546
                                    lencode = 258;
1547
                                    match = 4;
1548
                                    if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 5)) && (iram[((fmatch + 1) & 127)] == b5))) begin
1549
                                        lencode = 259;
1550
                                        match = 5;
1551
                                        if ((1'b1 && ($signed({1'b0, di}) < ($signed({1'b0, isize}) - 6)) && (iram[((fmatch + 2) & 127)] == b6))) begin
1552
                                            lencode = 260;
1553
                                            match = 6;
1554
                                            if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 7)) && (iram[((fmatch + 3) & 127)] == b7))) begin
1555
                                                lencode = 261;
1556
                                                match = 7;
1557
                                                if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 8)) && (iram[((fmatch + 4) & 127)] == b8))) begin
1558
                                                    lencode = 262;
1559
                                                    match = 8;
1560
                                                    if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 9)) && (iram[((fmatch + 5) & 127)] == b9))) begin
1561
                                                        lencode = 263;
1562
                                                        match = 9;
1563
                                                        if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 10)) && (iram[((fmatch + 6) & 127)] == b10))) begin
1564
                                                            lencode = 264;
1565
                                                            match = 10;
1566
                                                        end
1567
                                                    end
1568
                                                end
1569
                                            end
1570
                                        end
1571
                                    end
1572
                                end
1573
                                $write("fast:");
1574
                                $write(" ");
1575
                                $write("%0d", distance);
1576
                                $write(" ");
1577
                                $write("%h", di);
1578
                                $write(" ");
1579
                                $write("%h", isize);
1580
                                $write(" ");
1581
                                $write("%0d", match);
1582
                                $write("\n");
1583
                                outlen = codeLength[lencode];
1584
                                outbits = code_bits[lencode];
1585
                                oaddr <= do;
1586
                                obyte <= MYHDL21_put(outbits, outlen);
1587
                                MYHDL22_put_adv(outbits, outlen);
1588
                                cur_dist <= distance;
1589
                                cur_i <= 0;
1590
                                di <= (di + match);
1591
                                cur_cstatic <= ((cur_cstatic + match) - 1);
1592
                                length <= match;
1593
                                state <= 5'b11000;
1594
                            end
1595
                        end
1596
                        else if (((iram[(cur_search & 127)] == b1) && (iram[((cur_search + 1) & 127)] == b2) && (iram[((cur_search + 2) & 127)] == b3))) begin
1597 2 tomtor
                            lencode = 257;
1598
                            match = 3;
1599
                            if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 4)) && (iram[((cur_search + 3) & 127)] == b4))) begin
1600
                                lencode = 258;
1601
                                match = 4;
1602
                                if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 5)) && (iram[((cur_search + 4) & 127)] == iram[((di + 4) & 127)]))) begin
1603
                                    lencode = 259;
1604
                                    match = 5;
1605 5 tomtor
                                    if ((1'b1 && ($signed({1'b0, di}) < ($signed({1'b0, isize}) - 6)) && (iram[((cur_search + 5) & 127)] == iram[((di + 5) & 127)]))) begin
1606
                                        lencode = 260;
1607
                                        match = 6;
1608
                                        if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 7)) && (iram[((cur_search + 6) & 127)] == iram[((di + 6) & 127)]))) begin
1609
                                            lencode = 261;
1610
                                            match = 7;
1611
                                            if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 8)) && (iram[((cur_search + 7) & 127)] == iram[((di + 7) & 127)]))) begin
1612
                                                lencode = 262;
1613
                                                match = 8;
1614
                                                if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 9)) && (iram[((cur_search + 8) & 127)] == iram[((di + 8) & 127)]))) begin
1615
                                                    lencode = 263;
1616
                                                    match = 9;
1617
                                                    if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 10)) && (iram[((cur_search + 9) & 127)] == iram[((di + 9) & 127)]))) begin
1618
                                                        lencode = 264;
1619
                                                        match = 10;
1620
                                                    end
1621
                                                end
1622
                                            end
1623
                                        end
1624
                                    end
1625 2 tomtor
                                end
1626
                            end
1627
                            $write("found:");
1628
                            $write(" ");
1629
                            $write("%h", cur_search);
1630
                            $write(" ");
1631
                            $write("%h", di);
1632
                            $write(" ");
1633
                            $write("%h", isize);
1634
                            $write(" ");
1635
                            $write("%0d", match);
1636
                            $write("\n");
1637
                            outlen = codeLength[lencode];
1638
                            outbits = code_bits[lencode];
1639
                            oaddr <= do;
1640 5 tomtor
                            obyte <= MYHDL23_put(outbits, outlen);
1641
                            MYHDL24_put_adv(outbits, outlen);
1642 2 tomtor
                            distance = ($signed({1'b0, di}) - cur_search);
1643
                            cur_dist <= distance;
1644
                            cur_i <= 0;
1645
                            di <= (di + match);
1646
                            cur_cstatic <= ((cur_cstatic + match) - 1);
1647
                            length <= match;
1648
                            state <= 5'b11000;
1649
                        end
1650
                        else begin
1651
                            cur_search <= (cur_search - 1);
1652
                        end
1653
                    end
1654
                    else begin
1655
                        bdata = iram[di];
1656
                        di <= (di + 1);
1657
                        outlen = codeLength[bdata];
1658
                        outbits = code_bits[bdata];
1659
                        oaddr <= do;
1660 5 tomtor
                        obyte <= MYHDL25_put(outbits, outlen);
1661
                        MYHDL26_put_adv(outbits, outlen);
1662 2 tomtor
                        state <= 5'b10110;
1663
                    end
1664
                end
1665
            end
1666
            5'b01110: begin
1667
                for (stat_i=0; stat_i<144; stat_i=stat_i+1) begin
1668
                    codeLength[stat_i] <= 8;
1669
                end
1670
                for (stat_i=144; stat_i<256; stat_i=stat_i+1) begin
1671
                    codeLength[stat_i] <= 9;
1672
                end
1673
                for (stat_i=256; stat_i<280; stat_i=stat_i+1) begin
1674
                    codeLength[stat_i] <= 7;
1675
                end
1676
                for (stat_i=280; stat_i<288; stat_i=stat_i+1) begin
1677
                    codeLength[stat_i] <= 8;
1678
                end
1679
                numCodeLength <= 288;
1680
                cur_HF1 <= 0;
1681
                state <= 5'b00111;
1682
                // if cur_static < 288:
1683
                //     if cur_static < 144:
1684
                //         codeLength[cur_static].next = 8
1685
                //     elif cur_static < 256:
1686
                //         codeLength[cur_static].next = 9
1687
                //     elif cur_static < 280:
1688
                //         codeLength[cur_static].next = 7
1689
                //     else:
1690
                //         codeLength[cur_static].next = 8
1691
                //     cur_static.next = cur_static + 1
1692
                // else:
1693
                //     numCodeLength.next = 288
1694
                //     cur_HF1.next = 0
1695
                //     state.next = d_state.HF1
1696
            end
1697
            5'b00010: begin
1698
                if ((!filled)) begin
1699
                    filled <= 1'b1;
1700
                end
1701
                else if ((nb < 4)) begin
1702
                    // pass
1703
                end
1704
                else if ((numLiterals == 0)) begin
1705 5 tomtor
                    numLiterals <= (257 + MYHDL35_get4(0, 5));
1706 2 tomtor
                    $write("NL:");
1707
                    $write(" ");
1708 5 tomtor
                    $write("%0d", (257 + MYHDL36_get4(0, 5)));
1709 2 tomtor
                    $write("\n");
1710 5 tomtor
                    numDistance <= (1 + MYHDL37_get4(5, 5));
1711 2 tomtor
                    $write("ND:");
1712
                    $write(" ");
1713 5 tomtor
                    $write("%0d", (1 + MYHDL38_get4(5, 5)));
1714 2 tomtor
                    $write("\n");
1715 5 tomtor
                    b_numCodeLength <= (4 + MYHDL39_get4(10, 4));
1716 2 tomtor
                    $write("NCL:");
1717
                    $write(" ");
1718 5 tomtor
                    $write("%0d", (4 + MYHDL40_get4(10, 4)));
1719 2 tomtor
                    $write("\n");
1720
                    numCodeLength <= 0;
1721 5 tomtor
                    MYHDL41_adv(14);
1722 2 tomtor
                end
1723
                else begin
1724
                    if ((numCodeLength < 19)) begin
1725
                        case (numCodeLength)
1726
                            0: clo_i = 16;
1727
                            1: clo_i = 17;
1728
                            2: clo_i = 18;
1729
                            3: clo_i = 0;
1730
                            4: clo_i = 8;
1731
                            5: clo_i = 7;
1732
                            6: clo_i = 9;
1733
                            7: clo_i = 6;
1734
                            8: clo_i = 10;
1735
                            9: clo_i = 5;
1736
                            10: clo_i = 11;
1737
                            11: clo_i = 4;
1738
                            12: clo_i = 12;
1739
                            13: clo_i = 3;
1740
                            14: clo_i = 13;
1741
                            15: clo_i = 2;
1742
                            16: clo_i = 14;
1743
                            17: clo_i = 1;
1744
                            default: clo_i = 15;
1745
                        endcase
1746
                        if ((numCodeLength < b_numCodeLength)) begin
1747 5 tomtor
                            codeLength[clo_i] <= MYHDL42_get4(0, 3);
1748
                            MYHDL43_adv(3);
1749 2 tomtor
                        end
1750
                        else begin
1751
                            codeLength[clo_i] <= 0;
1752
                        end
1753
                        numCodeLength <= (numCodeLength + 1);
1754
                    end
1755
                    else begin
1756
                        numCodeLength <= 19;
1757
                        cur_HF1 <= 0;
1758
                        state <= 5'b00111;
1759
                    end
1760
                end
1761
            end
1762
            5'b00011: begin
1763
                if ((!filled)) begin
1764
                    filled <= 1'b1;
1765
                end
1766
                else if ((nb < 4)) begin
1767
                    // pass
1768
                end
1769
                else if ((numCodeLength < (numLiterals + numDistance))) begin
1770
                    n_adv = 0;
1771
                    if ((code < 16)) begin
1772
                        howOften <= 1;
1773
                        lastToken <= code;
1774
                    end
1775
                    else if ((code == 16)) begin
1776 5 tomtor
                        howOften <= (3 + MYHDL44_get4(0, 2));
1777 2 tomtor
                        n_adv = 2;
1778
                    end
1779
                    else if ((code == 17)) begin
1780 5 tomtor
                        howOften <= (3 + MYHDL45_get4(0, 3));
1781 2 tomtor
                        lastToken <= 0;
1782
                        n_adv = 3;
1783
                    end
1784
                    else if ((code == 18)) begin
1785 5 tomtor
                        howOften <= (11 + MYHDL46_get4(0, 7));
1786 2 tomtor
                        lastToken <= 0;
1787
                        n_adv = 7;
1788
                    end
1789
                    else begin
1790
                        $finish;
1791
                    end
1792
                    if ((n_adv != 0)) begin
1793 5 tomtor
                        MYHDL47_adv(n_adv);
1794 2 tomtor
                    end
1795
                    state <= 5'b00100;
1796
                end
1797
                else begin
1798
                    $write("FILL UP");
1799
                    $write("\n");
1800
                    for (dbl_i=0; dbl_i<32; dbl_i=dbl_i+1) begin
1801
                        dbl = 0;
1802
                        if (((dbl_i + $signed({1'b0, numLiterals})) < numCodeLength)) begin
1803
                            dbl = codeLength[(dbl_i + $signed({1'b0, numLiterals}))];
1804
                        end
1805
                        distanceLength[dbl_i] <= dbl;
1806
                    end
1807
                    cur_i <= numLiterals;
1808
                    state <= 5'b00110;
1809
                end
1810
            end
1811
            default: begin
1812
                if ((state == 5'b00110)) begin
1813
                    if ((cur_i < 288)) begin
1814
                        codeLength[cur_i] <= 0;
1815
                        cur_i <= (cur_i + 1);
1816
                    end
1817
                    else begin
1818
                        numCodeLength <= 288;
1819
                        method <= 3;
1820
                        cur_HF1 <= 0;
1821
                        state <= 5'b00111;
1822
                    end
1823
                end
1824
                else begin
1825
                    case (state)
1826
                        5'b00101: begin
1827
                            $write("DISTTREE");
1828
                            $write("\n");
1829
                            for (dist_i=0; dist_i<32; dist_i=dist_i+1) begin
1830
                                codeLength[dist_i] <= distanceLength[dist_i];
1831
                            end
1832
                            numCodeLength <= 32;
1833
                            method <= 4;
1834
                            cur_HF1 <= 0;
1835
                            state <= 5'b00111;
1836
                        end
1837
                        5'b00100: begin
1838
                            if ((howOften != 0)) begin
1839
                                codeLength[numCodeLength] <= lastToken;
1840
                                howOften <= (howOften - 1);
1841
                                numCodeLength <= (numCodeLength + 1);
1842
                            end
1843
                            else if ((numCodeLength < (numLiterals + numDistance))) begin
1844
                                cur_next <= 0;
1845
                                state <= 5'b10011;
1846
                            end
1847
                            else begin
1848
                                state <= 5'b00011;
1849
                            end
1850
                        end
1851
                        5'b00111: begin
1852
                            if ((cur_HF1 < 16)) begin
1853
                                bitLengthCount[cur_HF1] <= 0;
1854
                            end
1855
                            if ((cur_HF1 < 128)) begin
1856
                                d_leaves[cur_HF1] <= 0;
1857
                            end
1858
                            if (((method != 4) && (cur_HF1 < 512))) begin
1859
                                lwaddr <= cur_HF1;
1860
                                wleaf <= 0;
1861
                            end
1862
                            limit = 512;
1863
                            if ((method == 4)) begin
1864
                                limit = 128;
1865
                            end
1866
                            if ((cur_HF1 < limit)) begin
1867
                                cur_HF1 <= (cur_HF1 + 1);
1868
                            end
1869
                            else begin
1870
                                $write("DID HF1 INIT");
1871
                                $write("\n");
1872
                                cur_i <= 0;
1873
                                state <= 5'b01000;
1874
                            end
1875
                        end
1876
                        5'b01000: begin
1877
                            if ((cur_i < numCodeLength)) begin
1878
                                j = codeLength[cur_i];
1879
                                bitLengthCount[j] <= (bitLengthCount[j] + 1);
1880
                                cur_i <= (cur_i + 1);
1881
                            end
1882
                            else begin
1883
                                bitLengthCount[0] <= 0;
1884
                                state <= 5'b01001;
1885
                                cur_i <= 1;
1886
                                if ((method == 4)) begin
1887
                                    d_maxBits <= 0;
1888
                                end
1889
                                else begin
1890
                                    maxBits <= 0;
1891
                                end
1892
                                minBits <= 15;
1893
                            end
1894
                        end
1895
                        5'b01001: begin
1896
                            if ((cur_i <= 15)) begin
1897
                                if ((bitLengthCount[cur_i] != 0)) begin
1898
                                    if ((cur_i < minBits)) begin
1899
                                        minBits <= cur_i;
1900
                                    end
1901
                                    if ((method == 4)) begin
1902
                                        if ((cur_i > d_maxBits)) begin
1903
                                            d_maxBits <= cur_i;
1904
                                        end
1905
                                    end
1906
                                    else begin
1907
                                        if ((cur_i > maxBits)) begin
1908
                                            maxBits <= cur_i;
1909
                                        end
1910
                                    end
1911
                                end
1912
                                cur_i <= (cur_i + 1);
1913
                            end
1914
                            else begin
1915
                                $write("%h", minBits);
1916
                                $write(" ");
1917
                                $write("%h", maxBits);
1918
                                $write("\n");
1919
                                t = 10;
1920
                                if ((method == 4)) begin
1921
                                    if ((t > d_maxBits)) begin
1922
                                        t = d_maxBits;
1923
                                    end
1924
                                    d_instantMaxBit <= t;
1925
                                    d_instantMask <= ((1 << t) - 1);
1926
                                end
1927
                                else begin
1928
                                    if ((t > maxBits)) begin
1929
                                        t = maxBits;
1930
                                    end
1931
                                    instantMaxBit <= t;
1932
                                    instantMask <= ((1 << t) - 1);
1933
                                end
1934
                                $write("%0d", ((1 << t) - 1));
1935
                                $write("\n");
1936
                                state <= 5'b01010;
1937
                                cur_i <= minBits;
1938
                                code <= 0;
1939
                                for (hf2_i=0; hf2_i<15; hf2_i=hf2_i+1) begin
1940
                                    nextCode[hf2_i] <= 0;
1941
                                end
1942
                                $write("to HF3");
1943
                                $write("\n");
1944
                            end
1945
                        end
1946
                        5'b01010: begin
1947
                            amb = maxBits;
1948
                            if ((method == 4)) begin
1949
                                amb = d_maxBits;
1950
                            end
1951
                            if ((cur_i <= amb)) begin
1952
                                ncode = ((code + bitLengthCount[($signed({1'b0, cur_i}) - 1)]) << 1);
1953
                                code <= ncode;
1954
                                nextCode[cur_i] <= ncode;
1955
                                cur_i <= (cur_i + 1);
1956
                            end
1957
                            else begin
1958
                                state <= 5'b01011;
1959
                                cur_i <= 0;
1960
                                spread_i <= 0;
1961
                                $write("to HF4");
1962
                                $write("\n");
1963
                            end
1964
                        end
1965
                        5'b01100: begin
1966
                            canonical = nextCode[bits];
1967
                            nextCode[bits] <= (nextCode[bits] + 1);
1968
                            if ((bits > 15)) begin
1969
                                $finish;
1970
                            end
1971 5 tomtor
                            reverse <= MYHDL54_rev_bits(canonical, bits);
1972
                            leaf <= MYHDL55_makeLeaf(spread_i, bits);
1973 2 tomtor
                            state <= 5'b01101;
1974
                        end
1975
                        5'b01101: begin
1976
                            if ((method == 4)) begin
1977
                                d_leaves[reverse] <= leaf;
1978
                                if ((bits <= d_instantMaxBit)) begin
1979
                                    if (((reverse + (1 << bits)) <= d_instantMask)) begin
1980
                                        step <= (1 << bits);
1981
                                        spread <= (reverse + (1 << bits));
1982
                                        state <= 5'b10010;
1983
                                    end
1984
                                    else begin
1985
                                        spread_i <= (spread_i + 1);
1986
                                        state <= 5'b01011;
1987
                                    end
1988
                                end
1989
                                else begin
1990
                                    state <= 5'b01011;
1991
                                    spread_i <= (spread_i + 1);
1992
                                end
1993
                            end
1994
                            else begin
1995
                                wleaf <= leaf;
1996
                                lwaddr <= reverse;
1997
                                code_bits[spread_i] <= reverse;
1998
                                if ((bits <= instantMaxBit)) begin
1999
                                    if (((reverse + (1 << bits)) <= instantMask)) begin
2000
                                        step <= (1 << bits);
2001
                                        spread <= (reverse + (1 << bits));
2002
                                        state <= 5'b10010;
2003
                                    end
2004
                                    else begin
2005
                                        spread_i <= (spread_i + 1);
2006
                                        state <= 5'b01011;
2007
                                    end
2008
                                end
2009
                                else begin
2010
                                    spread_i <= (spread_i + 1);
2011
                                    state <= 5'b01011;
2012
                                end
2013
                            end
2014
                        end
2015
                        5'b01011: begin
2016
                            if ((spread_i < numCodeLength)) begin
2017
                                bits_next = codeLength[spread_i];
2018
                                if ((bits_next != 0)) begin
2019
                                    bits <= bits_next;
2020
                                    state <= 5'b01100;
2021
                                end
2022
                                else begin
2023
                                    spread_i <= (spread_i + 1);
2024
                                end
2025
                            end
2026
                            else begin
2027
                                if (do_compress) begin
2028
                                    state <= 5'b10110;
2029
                                    cur_cstatic <= 0;
2030
                                end
2031
                                else if ((method == 3)) begin
2032
                                    state <= 5'b00101;
2033
                                end
2034
                                else if ((method == 4)) begin
2035
                                    $write("DEFLATE m2!");
2036
                                    $write("\n");
2037
                                    state <= 5'b10011;
2038
                                end
2039
                                else if ((method == 2)) begin
2040
                                    numCodeLength <= 0;
2041
                                    state <= 5'b10011;
2042
                                end
2043
                                else begin
2044
                                    state <= 5'b10011;
2045
                                end
2046
                                cur_next <= 0;
2047
                                cur_i <= 0;
2048
                            end
2049
                        end
2050
                        5'b10010: begin
2051
                            if ((method == 4)) begin
2052 5 tomtor
                                d_leaves[spread] <= MYHDL56_makeLeaf(spread_i, codeLength[spread_i]);
2053 2 tomtor
                            end
2054
                            else begin
2055
                                lwaddr <= spread;
2056 5 tomtor
                                wleaf <= MYHDL57_makeLeaf(spread_i, codeLength[spread_i]);
2057 2 tomtor
                            end
2058
                            aim = instantMask;
2059
                            if ((method == 4)) begin
2060
                                aim = d_instantMask;
2061
                            end
2062
                            if (($signed({1'b0, spread}) > ($signed({1'b0, aim}) - $signed({1'b0, step})))) begin
2063
                                spread_i <= (spread_i + 1);
2064
                                state <= 5'b01011;
2065
                            end
2066
                            else begin
2067
                                spread <= (spread + step);
2068
                            end
2069
                        end
2070
                        5'b10011: begin
2071
                            if ((!filled)) begin
2072
                                filled <= 1'b1;
2073
                            end
2074
                            else if ((nb < 4)) begin
2075
                                // pass
2076
                            end
2077
                            else if ((cur_next == 0)) begin
2078 5 tomtor
                                cto = MYHDL58_get4(0, maxBits);
2079 2 tomtor
                                cur_next <= 1;
2080
                                mask = ((1 << instantMaxBit) - 1);
2081
                                leaf <= leaves[(cto & mask)];
2082
                            end
2083
                            else begin
2084 5 tomtor
                                if ((MYHDL59_get_bits(leaf) < 1)) begin
2085 2 tomtor
                                    $write("< 1 bits: ");
2086
                                    $write("\n");
2087
                                    $finish;
2088
                                end
2089 5 tomtor
                                MYHDL61_adv(MYHDL60_get_bits(leaf));
2090
                                if ((MYHDL62_get_code(leaf) == 0)) begin
2091 2 tomtor
                                    $write("leaf 0");
2092
                                    $write("\n");
2093
                                end
2094 5 tomtor
                                code <= MYHDL63_get_code(leaf);
2095 2 tomtor
                                if ((method == 2)) begin
2096
                                    state <= 5'b00011;
2097
                                end
2098
                                else begin
2099
                                    state <= 5'b10100;
2100
                                end
2101
                            end
2102
                        end
2103
                        5'b01111: begin
2104
                            if ((!filled)) begin
2105
                                filled <= 1'b1;
2106
                            end
2107
                            else if ((nb < 4)) begin
2108
                                // pass
2109
                            end
2110
                            else begin
2111
                                token = (code - 257);
2112
                                case (token)
2113
                                    0: extraLength = 0;
2114
                                    1: extraLength = 0;
2115
                                    2: extraLength = 0;
2116
                                    3: extraLength = 0;
2117
                                    4: extraLength = 0;
2118
                                    5: extraLength = 0;
2119
                                    6: extraLength = 0;
2120
                                    7: extraLength = 0;
2121
                                    8: extraLength = 1;
2122
                                    9: extraLength = 1;
2123
                                    10: extraLength = 1;
2124
                                    11: extraLength = 1;
2125
                                    12: extraLength = 2;
2126
                                    13: extraLength = 2;
2127
                                    14: extraLength = 2;
2128
                                    15: extraLength = 2;
2129
                                    16: extraLength = 3;
2130
                                    17: extraLength = 3;
2131
                                    18: extraLength = 3;
2132
                                    19: extraLength = 3;
2133
                                    20: extraLength = 4;
2134
                                    21: extraLength = 4;
2135
                                    22: extraLength = 4;
2136
                                    23: extraLength = 4;
2137
                                    24: extraLength = 5;
2138
                                    25: extraLength = 5;
2139
                                    26: extraLength = 5;
2140
                                    27: extraLength = 5;
2141
                                    default: extraLength = 0;
2142
                                endcase
2143 5 tomtor
                                cto = MYHDL64_get4(extraLength, d_maxBits);
2144 2 tomtor
                                mask = ((1 << d_instantMaxBit) - 1);
2145
                                leaf <= d_leaves[(cto & mask)];
2146
                                state <= 5'b10000;
2147
                            end
2148
                        end
2149
                        5'b10000: begin
2150 5 tomtor
                            if ((MYHDL65_get_bits(leaf) == 0)) begin
2151 2 tomtor
                                $finish;
2152
                            end
2153
                            token = (code - 257);
2154
                            case (token)
2155
                                0: tlength = 3;
2156
                                1: tlength = 4;
2157
                                2: tlength = 5;
2158
                                3: tlength = 6;
2159
                                4: tlength = 7;
2160
                                5: tlength = 8;
2161
                                6: tlength = 9;
2162
                                7: tlength = 10;
2163
                                8: tlength = 11;
2164
                                9: tlength = 13;
2165
                                10: tlength = 15;
2166
                                11: tlength = 17;
2167
                                12: tlength = 19;
2168
                                13: tlength = 23;
2169
                                14: tlength = 27;
2170
                                15: tlength = 31;
2171
                                16: tlength = 35;
2172
                                17: tlength = 43;
2173
                                18: tlength = 51;
2174
                                19: tlength = 59;
2175
                                20: tlength = 67;
2176
                                21: tlength = 83;
2177
                                22: tlength = 99;
2178
                                23: tlength = 115;
2179
                                24: tlength = 131;
2180
                                25: tlength = 163;
2181
                                26: tlength = 195;
2182
                                27: tlength = 227;
2183
                                default: tlength = 258;
2184
                            endcase
2185
                            case (token)
2186
                                0: extraLength = 0;
2187
                                1: extraLength = 0;
2188
                                2: extraLength = 0;
2189
                                3: extraLength = 0;
2190
                                4: extraLength = 0;
2191
                                5: extraLength = 0;
2192
                                6: extraLength = 0;
2193
                                7: extraLength = 0;
2194
                                8: extraLength = 1;
2195
                                9: extraLength = 1;
2196
                                10: extraLength = 1;
2197
                                11: extraLength = 1;
2198
                                12: extraLength = 2;
2199
                                13: extraLength = 2;
2200
                                14: extraLength = 2;
2201
                                15: extraLength = 2;
2202
                                16: extraLength = 3;
2203
                                17: extraLength = 3;
2204
                                18: extraLength = 3;
2205
                                19: extraLength = 3;
2206
                                20: extraLength = 4;
2207
                                21: extraLength = 4;
2208
                                22: extraLength = 4;
2209
                                23: extraLength = 4;
2210
                                24: extraLength = 5;
2211
                                25: extraLength = 5;
2212
                                26: extraLength = 5;
2213
                                27: extraLength = 5;
2214
                                default: extraLength = 0;
2215
                            endcase
2216 5 tomtor
                            tlength = tlength + MYHDL66_get4(0, extraLength);
2217
                            distanceCode = MYHDL67_get_code(leaf);
2218 2 tomtor
                            case (distanceCode)
2219
                                0: distance = 1;
2220
                                1: distance = 2;
2221
                                2: distance = 3;
2222
                                3: distance = 4;
2223
                                4: distance = 5;
2224
                                5: distance = 7;
2225
                                6: distance = 9;
2226
                                7: distance = 13;
2227
                                8: distance = 17;
2228
                                9: distance = 25;
2229
                                10: distance = 33;
2230
                                11: distance = 49;
2231
                                12: distance = 65;
2232
                                13: distance = 97;
2233
                                14: distance = 129;
2234
                                15: distance = 193;
2235
                                16: distance = 257;
2236
                                17: distance = 385;
2237
                                18: distance = 513;
2238
                                19: distance = 769;
2239
                                20: distance = 1025;
2240
                                21: distance = 1537;
2241
                                22: distance = 2049;
2242
                                23: distance = 3073;
2243
                                24: distance = 4097;
2244
                                25: distance = 6145;
2245
                                26: distance = 8193;
2246
                                27: distance = 12289;
2247
                                28: distance = 16385;
2248
                                default: distance = 24577;
2249
                            endcase
2250
                            case ($signed(distanceCode >>> 1))
2251
                                0: moreBits = 0;
2252
                                1: moreBits = 0;
2253
                                2: moreBits = 1;
2254
                                3: moreBits = 2;
2255
                                4: moreBits = 3;
2256
                                5: moreBits = 4;
2257
                                6: moreBits = 5;
2258
                                7: moreBits = 6;
2259
                                8: moreBits = 7;
2260
                                9: moreBits = 8;
2261
                                10: moreBits = 9;
2262
                                11: moreBits = 10;
2263
                                12: moreBits = 11;
2264
                                13: moreBits = 12;
2265
                                default: moreBits = 13;
2266
                            endcase
2267 5 tomtor
                            mored = MYHDL69_get4((extraLength + MYHDL68_get_bits(leaf)), moreBits);
2268 2 tomtor
                            distance = distance + mored;
2269 5 tomtor
                            MYHDL71_adv(((moreBits + extraLength) + MYHDL70_get_bits(leaf)));
2270 2 tomtor
                            offset <= ($signed({1'b0, do}) - distance);
2271
                            length <= tlength;
2272
                            cur_i <= 0;
2273 5 tomtor
                            oraddr <= ($signed({1'b0, do}) - distance);
2274 2 tomtor
                            state <= 5'b10101;
2275
                        end
2276
                        default: begin
2277
                            if ((state == 5'b10100)) begin
2278
                                if ((!filled)) begin
2279
                                    filled <= 1'b1;
2280
                                end
2281
                                else if ((nb < 4)) begin
2282
                                    // pass
2283
                                end
2284 5 tomtor
                                else if ((di > isize)) begin
2285 2 tomtor
                                    state <= 5'b00000;
2286
                                    o_done <= 1'b1;
2287
                                    $write("NO EOF ");
2288
                                    $write(" ");
2289
                                    $write("%h", di);
2290
                                    $write("\n");
2291
                                    $finish;
2292
                                end
2293
                                else if ((code == 256)) begin
2294
                                    $write("EOF:");
2295
                                    $write(" ");
2296
                                    $write("%h", di);
2297
                                    $write(" ");
2298
                                    $write("%h", do);
2299
                                    $write("\n");
2300
                                    if ((!final)) begin
2301
                                        state <= 5'b00001;
2302
                                    end
2303
                                    else begin
2304
                                        o_done <= 1'b1;
2305
                                        o_oprogress <= do;
2306
                                        state <= 5'b00000;
2307
                                    end
2308
                                end
2309
                                else begin
2310
                                    if ((code < 256)) begin
2311
                                        oaddr <= do;
2312
                                        obyte <= code;
2313
                                        o_oprogress <= (do + 1);
2314
                                        do <= (do + 1);
2315
                                        cur_next <= 0;
2316
                                        state <= 5'b10011;
2317
                                    end
2318
                                    else if ((code == 300)) begin
2319
                                        $finish;
2320
                                    end
2321
                                    else begin
2322
                                        if (static) begin
2323
                                            token = (code - 257);
2324
                                            case (token)
2325
                                                0: tlength = 3;
2326
                                                1: tlength = 4;
2327
                                                2: tlength = 5;
2328
                                                3: tlength = 6;
2329
                                                4: tlength = 7;
2330
                                                5: tlength = 8;
2331
                                                6: tlength = 9;
2332
                                                7: tlength = 10;
2333
                                                8: tlength = 11;
2334
                                                9: tlength = 13;
2335
                                                10: tlength = 15;
2336
                                                11: tlength = 17;
2337
                                                12: tlength = 19;
2338
                                                13: tlength = 23;
2339
                                                14: tlength = 27;
2340
                                                15: tlength = 31;
2341
                                                16: tlength = 35;
2342
                                                17: tlength = 43;
2343
                                                18: tlength = 51;
2344
                                                19: tlength = 59;
2345
                                                20: tlength = 67;
2346
                                                21: tlength = 83;
2347
                                                22: tlength = 99;
2348
                                                23: tlength = 115;
2349
                                                24: tlength = 131;
2350
                                                25: tlength = 163;
2351
                                                26: tlength = 195;
2352
                                                27: tlength = 227;
2353
                                                default: tlength = 258;
2354
                                            endcase
2355
                                            case (token)
2356
                                                0: extraLength = 0;
2357
                                                1: extraLength = 0;
2358
                                                2: extraLength = 0;
2359
                                                3: extraLength = 0;
2360
                                                4: extraLength = 0;
2361
                                                5: extraLength = 0;
2362
                                                6: extraLength = 0;
2363
                                                7: extraLength = 0;
2364
                                                8: extraLength = 1;
2365
                                                9: extraLength = 1;
2366
                                                10: extraLength = 1;
2367
                                                11: extraLength = 1;
2368
                                                12: extraLength = 2;
2369
                                                13: extraLength = 2;
2370
                                                14: extraLength = 2;
2371
                                                15: extraLength = 2;
2372
                                                16: extraLength = 3;
2373
                                                17: extraLength = 3;
2374
                                                18: extraLength = 3;
2375
                                                19: extraLength = 3;
2376
                                                20: extraLength = 4;
2377
                                                21: extraLength = 4;
2378
                                                22: extraLength = 4;
2379
                                                23: extraLength = 4;
2380
                                                24: extraLength = 5;
2381
                                                25: extraLength = 5;
2382
                                                26: extraLength = 5;
2383
                                                27: extraLength = 5;
2384
                                                default: extraLength = 0;
2385
                                            endcase
2386 5 tomtor
                                            tlength = tlength + MYHDL72_get4(0, extraLength);
2387
                                            t = MYHDL73_get4(extraLength, 5);
2388
                                            distanceCode = MYHDL74_rev_bits(t, 5);
2389 2 tomtor
                                            case (distanceCode)
2390
                                                0: distance = 1;
2391
                                                1: distance = 2;
2392
                                                2: distance = 3;
2393
                                                3: distance = 4;
2394
                                                4: distance = 5;
2395
                                                5: distance = 7;
2396
                                                6: distance = 9;
2397
                                                7: distance = 13;
2398
                                                8: distance = 17;
2399
                                                9: distance = 25;
2400
                                                10: distance = 33;
2401
                                                11: distance = 49;
2402
                                                12: distance = 65;
2403
                                                13: distance = 97;
2404
                                                14: distance = 129;
2405
                                                15: distance = 193;
2406
                                                16: distance = 257;
2407
                                                17: distance = 385;
2408
                                                18: distance = 513;
2409
                                                19: distance = 769;
2410
                                                20: distance = 1025;
2411
                                                21: distance = 1537;
2412
                                                22: distance = 2049;
2413
                                                23: distance = 3073;
2414
                                                24: distance = 4097;
2415
                                                25: distance = 6145;
2416
                                                26: distance = 8193;
2417
                                                27: distance = 12289;
2418
                                                28: distance = 16385;
2419
                                                default: distance = 24577;
2420
                                            endcase
2421
                                            case ($signed(distanceCode >>> 1))
2422
                                                0: moreBits = 0;
2423
                                                1: moreBits = 0;
2424
                                                2: moreBits = 1;
2425
                                                3: moreBits = 2;
2426
                                                4: moreBits = 3;
2427
                                                5: moreBits = 4;
2428
                                                6: moreBits = 5;
2429
                                                7: moreBits = 6;
2430
                                                8: moreBits = 7;
2431
                                                9: moreBits = 8;
2432
                                                10: moreBits = 9;
2433
                                                11: moreBits = 10;
2434
                                                12: moreBits = 11;
2435
                                                13: moreBits = 12;
2436
                                                default: moreBits = 13;
2437
                                            endcase
2438 5 tomtor
                                            distance = distance + MYHDL75_get4((extraLength + 5), moreBits);
2439
                                            MYHDL76_adv(((extraLength + 5) + moreBits));
2440 2 tomtor
                                            offset <= ($signed({1'b0, do}) - distance);
2441
                                            length <= tlength;
2442
                                            cur_i <= 0;
2443 5 tomtor
                                            oraddr <= ($signed({1'b0, do}) - distance);
2444 2 tomtor
                                            state <= 5'b10101;
2445
                                        end
2446
                                        else begin
2447
                                            state <= 5'b01111;
2448
                                        end
2449
                                    end
2450
                                    cur_next <= 0;
2451
                                end
2452
                            end
2453
                            else begin
2454
                                if ((state == 5'b10101)) begin
2455
                                    if ((!filled)) begin
2456
                                        filled <= 1'b1;
2457
                                    end
2458
                                    else if ((nb < 4)) begin
2459
                                        // pass
2460
                                    end
2461
                                    else if ((method == 0)) begin
2462
                                        if ((cur_i < length)) begin
2463
                                            oaddr <= do;
2464
                                            obyte <= b3;
2465 5 tomtor
                                            MYHDL77_adv(8);
2466 2 tomtor
                                            cur_i <= (cur_i + 1);
2467
                                            do <= (do + 1);
2468
                                            o_oprogress <= (do + 1);
2469
                                        end
2470
                                        else if ((!final)) begin
2471
                                            state <= 5'b00001;
2472
                                        end
2473
                                        else begin
2474
                                            o_oprogress <= do;
2475
                                            o_done <= 1'b1;
2476
                                            state <= 5'b00000;
2477
                                        end
2478
                                    end
2479 5 tomtor
                                    else if ((cur_i < (length + 2))) begin
2480 2 tomtor
                                        oraddr <= (offset + cur_i);
2481
                                        if ((cur_i == 1)) begin
2482
                                            copy1 <= orbyte;
2483
                                        end
2484 5 tomtor
                                        if ((cur_i == 3)) begin
2485
                                            copy2 <= orbyte;
2486
                                        end
2487 2 tomtor
                                        if ((cur_i > 1)) begin
2488
                                            if (((offset + cur_i) == (do + 1))) begin
2489
                                                obyte <= copy1;
2490
                                            end
2491
                                            else begin
2492 5 tomtor
                                                if (((cur_i == 3) || ((offset + cur_i) != do))) begin
2493
                                                    obyte <= orbyte;
2494
                                                end
2495
                                                else begin
2496
                                                    if ((cur_i > 2)) begin
2497
                                                        if ((cur_i & 1)) begin
2498
                                                            obyte <= copy2;
2499
                                                        end
2500
                                                        else begin
2501
                                                            obyte <= copy1;
2502
                                                        end
2503
                                                    end
2504
                                                    else begin
2505
                                                        obyte <= copy1;
2506
                                                    end
2507
                                                end
2508 2 tomtor
                                            end
2509
                                            oaddr <= do;
2510
                                            o_oprogress <= (do + 1);
2511
                                            do <= (do + 1);
2512
                                        end
2513
                                        cur_i <= (cur_i + 1);
2514
                                    end
2515
                                    else begin
2516
                                        cur_next <= 0;
2517
                                        state <= 5'b10011;
2518
                                    end
2519
                                end
2520
                                else begin
2521
                                    $write("unknown state?!");
2522
                                    $write("\n");
2523
                                    state <= 5'b00000;
2524
                                end
2525
                            end
2526
                        end
2527
                    endcase
2528
                end
2529
            end
2530
        endcase
2531
    end
2532
end
2533
 
2534
 
2535
always @(posedge clk) begin: DEFLATE_FILL_BUF
2536 5 tomtor
    integer shift;
2537 2 tomtor
    if ((!reset)) begin
2538
        $write("FILL RESET");
2539
        $write("\n");
2540
        nb <= 0;
2541
        b1 <= 0;
2542
        b2 <= 0;
2543
        b3 <= 0;
2544
        b4 <= 0;
2545 5 tomtor
        old_di <= 0;
2546 2 tomtor
    end
2547
    else begin
2548
        if ((isize < 4)) begin
2549
            // pass
2550
        end
2551
        else if (((i_mode == 4) || (i_mode == 5))) begin
2552
            nb <= 0;
2553 5 tomtor
            old_di <= 0;
2554 2 tomtor
        end
2555
        else begin
2556 5 tomtor
            // if do_compress:
2557
            //     print("FILL", di, old_di, nb, b1, b2, b3, b4)
2558
            if (1'b1) begin
2559
                shift = (($signed({1'b0, di}) - $signed({1'b0, old_di})) * 8);
2560
                // if shift != 0:
2561
                //     print("shift", shift, cwindow, b1, b2, b3, b4)
2562
                if ((shift <= 32)) begin
2563
                    cwindow <= (($signed({1'b0, cwindow}) << shift) | $signed($signed({1'b0, b14}) >>> (32 - shift)));
2564
                end
2565
                else if ((shift == 40)) begin
2566
                    cwindow <= ((($signed({1'b0, cwindow}) << shift) | (b14 << 8)) | b5);
2567
                end
2568
                else if (1'b1) begin
2569
                    cwindow <= (($signed({1'b0, cwindow}) << shift) | $signed($signed({1'b0, b110}) >>> (80 - shift)));
2570
                end
2571
            end
2572
            if ((old_di == di)) begin
2573
                nb <= 4;
2574
            end
2575
            old_di <= di;
2576 2 tomtor
            b1 <= iram[(di & 127)];
2577
            b2 <= iram[((di + 1) & 127)];
2578
            b3 <= iram[((di + 2) & 127)];
2579
            b4 <= iram[((di + 3) & 127)];
2580 5 tomtor
            b5 <= iram[((di + 4) & 127)];
2581
            if (1'b1) begin
2582
                b6 <= iram[((di + 5) & 127)];
2583
                b7 <= iram[((di + 6) & 127)];
2584
                b8 <= iram[((di + 7) & 127)];
2585
                b9 <= iram[((di + 8) & 127)];
2586
                b10 <= iram[((di + 9) & 127)];
2587
            end
2588 2 tomtor
        end
2589
    end
2590
end
2591
 
2592
 
2593
always @(posedge clk) begin: DEFLATE_ORAMWRITE
2594
    oram[oaddr] <= obyte;
2595
    leaves[lwaddr] <= wleaf;
2596
end
2597
 
2598
 
2599
always @(posedge clk) begin: DEFLATE_ORAMREAD
2600
    orbyte <= oram[oraddr];
2601
end
2602
 
2603 5 tomtor
 
2604
 
2605
assign smatch[0] = ((({cwindow, b1, b2} >>> (8 * 0)) & 16777215) == (b14 >>> 8));
2606
 
2607
 
2608
 
2609
assign smatch[1] = ((({cwindow, b1, b2} >>> (8 * 1)) & 16777215) == (b14 >>> 8));
2610
 
2611
 
2612
 
2613
assign smatch[2] = ((({cwindow, b1, b2} >>> (8 * 2)) & 16777215) == (b14 >>> 8));
2614
 
2615
 
2616
 
2617
assign smatch[3] = ((({cwindow, b1, b2} >>> (8 * 3)) & 16777215) == (b14 >>> 8));
2618
 
2619
 
2620
 
2621
assign smatch[4] = ((({cwindow, b1, b2} >>> (8 * 4)) & 16777215) == (b14 >>> 8));
2622
 
2623
 
2624
 
2625
assign smatch[5] = ((({cwindow, b1, b2} >>> (8 * 5)) & 16777215) == (b14 >>> 8));
2626
 
2627
 
2628
 
2629
assign smatch[6] = ((({cwindow, b1, b2} >>> (8 * 6)) & 16777215) == (b14 >>> 8));
2630
 
2631
 
2632
 
2633
assign smatch[7] = ((({cwindow, b1, b2} >>> (8 * 7)) & 16777215) == (b14 >>> 8));
2634
 
2635
 
2636
 
2637
assign smatch[8] = ((({cwindow, b1, b2} >>> (8 * 8)) & 16777215) == (b14 >>> 8));
2638
 
2639
 
2640
 
2641
assign smatch[9] = ((({cwindow, b1, b2} >>> (8 * 9)) & 16777215) == (b14 >>> 8));
2642
 
2643
 
2644
 
2645
assign smatch[10] = ((({cwindow, b1, b2} >>> (8 * 10)) & 16777215) == (b14 >>> 8));
2646
 
2647
 
2648
 
2649
assign smatch[11] = ((({cwindow, b1, b2} >>> (8 * 11)) & 16777215) == (b14 >>> 8));
2650
 
2651
 
2652
 
2653
assign smatch[12] = ((({cwindow, b1, b2} >>> (8 * 12)) & 16777215) == (b14 >>> 8));
2654
 
2655
 
2656
 
2657
assign smatch[13] = ((({cwindow, b1, b2} >>> (8 * 13)) & 16777215) == (b14 >>> 8));
2658
 
2659
 
2660
 
2661
assign smatch[14] = ((({cwindow, b1, b2} >>> (8 * 14)) & 16777215) == (b14 >>> 8));
2662
 
2663
 
2664
 
2665
assign smatch[15] = ((({cwindow, b1, b2} >>> (8 * 15)) & 16777215) == (b14 >>> 8));
2666
 
2667
 
2668
 
2669
assign smatch[16] = ((({cwindow, b1, b2} >>> (8 * 16)) & 16777215) == (b14 >>> 8));
2670
 
2671
 
2672
 
2673
assign smatch[17] = ((({cwindow, b1, b2} >>> (8 * 17)) & 16777215) == (b14 >>> 8));
2674
 
2675
 
2676
 
2677
assign smatch[18] = ((({cwindow, b1, b2} >>> (8 * 18)) & 16777215) == (b14 >>> 8));
2678
 
2679
 
2680
 
2681
assign smatch[19] = ((({cwindow, b1, b2} >>> (8 * 19)) & 16777215) == (b14 >>> 8));
2682
 
2683
 
2684
 
2685
assign smatch[20] = ((({cwindow, b1, b2} >>> (8 * 20)) & 16777215) == (b14 >>> 8));
2686
 
2687
 
2688
 
2689
assign smatch[21] = ((({cwindow, b1, b2} >>> (8 * 21)) & 16777215) == (b14 >>> 8));
2690
 
2691
 
2692
 
2693
assign smatch[22] = ((({cwindow, b1, b2} >>> (8 * 22)) & 16777215) == (b14 >>> 8));
2694
 
2695
 
2696
 
2697
assign smatch[23] = ((({cwindow, b1, b2} >>> (8 * 23)) & 16777215) == (b14 >>> 8));
2698
 
2699
 
2700
 
2701
assign smatch[24] = ((({cwindow, b1, b2} >>> (8 * 24)) & 16777215) == (b14 >>> 8));
2702
 
2703
 
2704
 
2705
assign smatch[25] = ((({cwindow, b1, b2} >>> (8 * 25)) & 16777215) == (b14 >>> 8));
2706
 
2707
 
2708
 
2709
assign smatch[26] = ((({cwindow, b1, b2} >>> (8 * 26)) & 16777215) == (b14 >>> 8));
2710
 
2711
 
2712
 
2713
assign smatch[27] = ((({cwindow, b1, b2} >>> (8 * 27)) & 16777215) == (b14 >>> 8));
2714
 
2715
 
2716
 
2717
assign smatch[28] = ((({cwindow, b1, b2} >>> (8 * 28)) & 16777215) == (b14 >>> 8));
2718
 
2719
 
2720
 
2721
assign smatch[29] = ((({cwindow, b1, b2} >>> (8 * 29)) & 16777215) == (b14 >>> 8));
2722
 
2723
 
2724
 
2725
assign smatch[30] = ((({cwindow, b1, b2} >>> (8 * 30)) & 16777215) == (b14 >>> 8));
2726
 
2727
 
2728
 
2729
assign smatch[31] = ((({cwindow, b1, b2} >>> (8 * 31)) & 16777215) == (b14 >>> 8));
2730
 
2731 2 tomtor
endmodule

powered by: WebSVN 2.1.0

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