URL
https://opencores.org/ocsvn/hdl-deflate/hdl-deflate/trunk
Subversion Repositories hdl-deflate
[/] [hdl-deflate/] [trunk/] [deflate.v] - Rev 4
Go to most recent revision | Compare with Previous | Blame | View Log
// File: deflate.v // Generated by MyHDL 0.10 // Date: Thu Dec 20 18:23:02 2018 `timescale 1ns/10ps module deflate ( i_mode, o_done, i_data, o_iprogress, o_oprogress, o_byte, i_addr, clk, reset ); // Deflate (de)compress // // Ports: input [2:0] i_mode; output o_done; reg o_done; input [7:0] i_data; output [12:0] o_iprogress; reg [12:0] o_iprogress; output [12:0] o_oprogress; reg [12:0] o_oprogress; output [7:0] o_byte; reg [7:0] o_byte; input [12:0] i_addr; input clk; input reset; reg [18:0] wleaf; reg [9:0] step; reg static; reg [4:0] state; reg [8:0] spread_i; reg [9:0] spread; reg [9:0] reverse; reg [7:0] orbyte; reg [12:0] oraddr; reg [12:0] offset; reg [7:0] obyte; reg [7:0] ob1; reg [12:0] oaddr; reg [8:0] numLiterals; reg [5:0] numDistance; reg [8:0] numCodeLength; reg [2:0] nb; reg [4:0] minBits; reg [2:0] method; reg [4:0] maxBits; reg [8:0] lwaddr; reg [12:0] length; reg [18:0] leaf; reg [14:0] lastToken; reg [15:0] ladler1; reg [12:0] isize; reg [9:0] instantMaxBit; reg [14:0] instantMask; reg [8:0] howOften; reg flush; reg final; reg filled; reg [2:0] doo; reg do_compress; reg [12:0] do; reg [2:0] dio; reg [12:0] di; reg [4:0] d_maxBits; reg [9:0] d_instantMaxBit; reg [14:0] d_instantMask; reg [8:0] cur_static; reg signed [7:0] cur_search; reg cur_next; reg [12:0] cur_i; reg signed [7:0] cur_dist; reg [12:0] cur_cstatic; reg [9:0] cur_HF1; reg [7:0] copy1; reg [14:0] code; reg [3:0] bits; reg [8:0] b_numCodeLength; wire [31:0] b41; reg [7:0] b4; reg [7:0] b3; reg [7:0] b2; reg [7:0] b1; reg [15:0] adler2; reg [15:0] adler1; reg [7:0] oram [0:8192-1]; reg [9:0] nextCode [0:15-1]; reg [18:0] leaves [0:512-1]; reg [7:0] iram [0:128-1]; reg [3:0] distanceLength [0:32-1]; reg [18:0] d_leaves [0:128-1]; reg [8:0] code_bits [0:288-1]; reg [3:0] codeLength [0:290-1]; reg [8:0] bitLengthCount [0:16-1]; assign b41[32-1:24] = b4; assign b41[24-1:16] = b3; assign b41[16-1:8] = b2; assign b41[8-1:0] = b1; task MYHDL3_adv; input width; integer width; integer nshift; begin: MYHDL77_RETURN nshift = ((dio + width) >>> 3); o_iprogress <= di; dio <= ((dio + width) & 7); di <= ($signed({1'b0, di}) + nshift); if ((nshift != 0)) begin filled <= 1'b0; end end endtask function integer MYHDL4_get4; input boffset; input width; begin: MYHDL78_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL4_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL78_RETURN; end endfunction function integer MYHDL5_get4; input boffset; input width; integer width; begin: MYHDL79_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL5_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL79_RETURN; end endfunction task MYHDL6_adv; input width; integer width; integer nshift; begin: MYHDL80_RETURN nshift = ((dio + width) >>> 3); o_iprogress <= di; dio <= ((dio + width) & 7); di <= ($signed({1'b0, di}) + nshift); if ((nshift != 0)) begin filled <= 1'b0; end end endtask task MYHDL7_adv; input width; integer width; integer nshift; begin: MYHDL81_RETURN nshift = ((dio + width) >>> 3); o_iprogress <= di; dio <= ((dio + width) & 7); di <= ($signed({1'b0, di}) + nshift); if ((nshift != 0)) begin filled <= 1'b0; end end endtask function integer MYHDL8_get4; input boffset; integer boffset; input width; integer width; begin: MYHDL82_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL8_get4 = ($signed($signed({1'b0, b41}) >>> ($signed({1'b0, dio}) + boffset)) & ((1 << width) - 1)); disable MYHDL82_RETURN; end endfunction task MYHDL9_adv; input width; integer width; integer nshift; begin: MYHDL83_RETURN nshift = $signed(($signed({1'b0, dio}) + width) >>> 3); o_iprogress <= di; dio <= (($signed({1'b0, dio}) + width) & 7); di <= ($signed({1'b0, di}) + nshift); if ((nshift != 0)) begin filled <= 1'b0; end end endtask function integer MYHDL10_put; input d; integer d; input width; integer width; begin: MYHDL84_RETURN if ((width > 9)) begin $finish; end if (($signed({1'b0, d}) > ((1 << width) - 1))) begin $finish; end MYHDL10_put = ((ob1 | (d << doo)) & 255); disable MYHDL84_RETURN; end endfunction task MYHDL11_put_adv; input d; integer d; input width; integer width; reg pshift; integer carry; integer doo_next; begin: MYHDL85_RETURN if ((width > 9)) begin $finish; end if (($signed({1'b0, d}) > ((1 << width) - 1))) begin $finish; end pshift = ((doo + width) > 8); if (pshift) begin carry = ($signed({1'b0, width}) - (8 - $signed({1'b0, doo}))); ob1 <= $signed($signed({1'b0, d}) >>> ($signed({1'b0, width}) - carry)); end else begin ob1 <= (ob1 | (d << doo)); end do <= (do + pshift); o_oprogress <= (do + pshift); doo_next = ((doo + width) & 7); if ((doo_next == 0)) begin flush <= 1'b1; end doo <= doo_next; end endtask task MYHDL12_do_flush; begin: MYHDL86_RETURN flush <= 1'b0; ob1 <= 0; o_oprogress <= (do + 1); do <= (do + 1); end endtask function integer MYHDL13_put; input [9-1:0] d; input [4-1:0] width; begin: MYHDL87_RETURN if ((width > 9)) begin $finish; end if (($signed({1'b0, d}) > ((1 << width) - 1))) begin $finish; end MYHDL13_put = ((ob1 | (d << doo)) & 255); disable MYHDL87_RETURN; end endfunction task MYHDL14_put_adv; input [9-1:0] d; input [4-1:0] width; reg pshift; integer carry; integer doo_next; begin: MYHDL88_RETURN if ((width > 9)) begin $finish; end if (($signed({1'b0, d}) > ((1 << width) - 1))) begin $finish; end pshift = ((doo + width) > 8); if (pshift) begin carry = ($signed({1'b0, width}) - (8 - $signed({1'b0, doo}))); ob1 <= $signed($signed({1'b0, d}) >>> ($signed({1'b0, width}) - carry)); end else begin ob1 <= (ob1 | (d << doo)); end do <= (do + pshift); o_oprogress <= (do + pshift); doo_next = ((doo + width) & 7); if ((doo_next == 0)) begin flush <= 1'b1; end doo <= doo_next; end endtask task MYHDL15_do_flush; begin: MYHDL89_RETURN flush <= 1'b0; ob1 <= 0; o_oprogress <= (do + 1); do <= (do + 1); end endtask function integer MYHDL16_rev_bits; input [13-1:0] b; input nb; integer nb; integer r; begin: MYHDL90_RETURN if ((b >= (1 << nb))) begin $finish; $write("too few bits"); $write("\n"); end 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)); r = r >>> (15 - $signed({1'b0, nb})); MYHDL16_rev_bits = r; disable MYHDL90_RETURN; end endfunction function integer MYHDL17_put; input d; integer d; input width; integer width; begin: MYHDL91_RETURN if ((width > 9)) begin $finish; end if ((d > ((1 << width) - 1))) begin $finish; end MYHDL17_put = (($signed({1'b0, ob1}) | (d << $signed({1'b0, doo}))) & 255); disable MYHDL91_RETURN; end endfunction task MYHDL18_put_adv; input d; integer d; input width; integer width; reg pshift; integer carry; integer doo_next; begin: MYHDL92_RETURN if ((width > 9)) begin $finish; end if ((d > ((1 << width) - 1))) begin $finish; end pshift = (($signed({1'b0, doo}) + width) > 8); if (pshift) begin carry = (width - (8 - $signed({1'b0, doo}))); ob1 <= $signed(d >>> (width - carry)); end else begin ob1 <= ($signed({1'b0, ob1}) | (d << $signed({1'b0, doo}))); end do <= (do + pshift); o_oprogress <= (do + pshift); doo_next = (($signed({1'b0, doo}) + width) & 7); if ((doo_next == 0)) begin flush <= 1'b1; end doo <= doo_next; end endtask function integer MYHDL19_put; input [9-1:0] d; input [4-1:0] width; begin: MYHDL93_RETURN if ((width > 9)) begin $finish; end if (($signed({1'b0, d}) > ((1 << width) - 1))) begin $finish; end MYHDL19_put = ((ob1 | (d << doo)) & 255); disable MYHDL93_RETURN; end endfunction task MYHDL20_put_adv; input [9-1:0] d; input [4-1:0] width; reg pshift; integer carry; integer doo_next; begin: MYHDL94_RETURN if ((width > 9)) begin $finish; end if (($signed({1'b0, d}) > ((1 << width) - 1))) begin $finish; end pshift = ((doo + width) > 8); if (pshift) begin carry = ($signed({1'b0, width}) - (8 - $signed({1'b0, doo}))); ob1 <= $signed($signed({1'b0, d}) >>> ($signed({1'b0, width}) - carry)); end else begin ob1 <= (ob1 | (d << doo)); end do <= (do + pshift); o_oprogress <= (do + pshift); doo_next = ((doo + width) & 7); if ((doo_next == 0)) begin flush <= 1'b1; end doo <= doo_next; end endtask function integer MYHDL21_put; input [9-1:0] d; input [4-1:0] width; begin: MYHDL95_RETURN if ((width > 9)) begin $finish; end if (($signed({1'b0, d}) > ((1 << width) - 1))) begin $finish; end MYHDL21_put = ((ob1 | (d << doo)) & 255); disable MYHDL95_RETURN; end endfunction task MYHDL22_put_adv; input [9-1:0] d; input [4-1:0] width; reg pshift; integer carry; integer doo_next; begin: MYHDL96_RETURN if ((width > 9)) begin $finish; end if (($signed({1'b0, d}) > ((1 << width) - 1))) begin $finish; end pshift = ((doo + width) > 8); if (pshift) begin carry = ($signed({1'b0, width}) - (8 - $signed({1'b0, doo}))); ob1 <= $signed($signed({1'b0, d}) >>> ($signed({1'b0, width}) - carry)); end else begin ob1 <= (ob1 | (d << doo)); end do <= (do + pshift); o_oprogress <= (do + pshift); doo_next = ((doo + width) & 7); if ((doo_next == 0)) begin flush <= 1'b1; end doo <= doo_next; end endtask function integer MYHDL31_get4; input boffset; input width; integer width; begin: MYHDL97_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL31_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL97_RETURN; end endfunction function integer MYHDL32_get4; input boffset; input width; integer width; begin: MYHDL98_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL32_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL98_RETURN; end endfunction function integer MYHDL33_get4; input boffset; integer boffset; input width; integer width; begin: MYHDL99_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL33_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL99_RETURN; end endfunction function integer MYHDL34_get4; input boffset; integer boffset; input width; integer width; begin: MYHDL100_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL34_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL100_RETURN; end endfunction function integer MYHDL35_get4; input boffset; integer boffset; input width; integer width; begin: MYHDL101_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL35_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL101_RETURN; end endfunction function integer MYHDL36_get4; input boffset; integer boffset; input width; integer width; begin: MYHDL102_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL36_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL102_RETURN; end endfunction task MYHDL37_adv; input width; integer width; integer nshift; begin: MYHDL103_RETURN nshift = ((dio + width) >>> 3); o_iprogress <= di; dio <= ((dio + width) & 7); di <= ($signed({1'b0, di}) + nshift); if ((nshift != 0)) begin filled <= 1'b0; end end endtask function integer MYHDL38_get4; input boffset; input width; integer width; begin: MYHDL104_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL38_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL104_RETURN; end endfunction task MYHDL39_adv; input width; integer width; integer nshift; begin: MYHDL105_RETURN nshift = ((dio + width) >>> 3); o_iprogress <= di; dio <= ((dio + width) & 7); di <= ($signed({1'b0, di}) + nshift); if ((nshift != 0)) begin filled <= 1'b0; end end endtask function integer MYHDL40_get4; input boffset; input width; integer width; begin: MYHDL106_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL40_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL106_RETURN; end endfunction function integer MYHDL41_get4; input boffset; input width; integer width; begin: MYHDL107_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL41_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL107_RETURN; end endfunction function integer MYHDL42_get4; input boffset; input width; integer width; begin: MYHDL108_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL42_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL108_RETURN; end endfunction task MYHDL43_adv; input width; integer width; integer nshift; begin: MYHDL109_RETURN nshift = ((dio + width) >>> 3); o_iprogress <= di; dio <= ((dio + width) & 7); di <= ($signed({1'b0, di}) + nshift); if ((nshift != 0)) begin filled <= 1'b0; end end endtask function integer MYHDL50_rev_bits; input [10-1:0] b; input [4-1:0] nb; integer r; begin: MYHDL110_RETURN if ((b >= (1 << nb))) begin $finish; $write("too few bits"); $write("\n"); end 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)); r = r >>> (15 - $signed({1'b0, nb})); MYHDL50_rev_bits = r; disable MYHDL110_RETURN; end endfunction function integer MYHDL51_makeLeaf; input [9-1:0] lcode; input [4-1:0] lbits; begin: MYHDL111_RETURN if ((lcode >= (1 << 10))) begin $finish; end if ((lbits >= (1 << 9))) begin $finish; end MYHDL51_makeLeaf = ((lcode << 9) | lbits); disable MYHDL111_RETURN; end endfunction function integer MYHDL52_makeLeaf; input [9-1:0] lcode; input [4-1:0] lbits; begin: MYHDL112_RETURN if ((lcode >= (1 << 10))) begin $finish; end if ((lbits >= (1 << 9))) begin $finish; end MYHDL52_makeLeaf = ((lcode << 9) | lbits); disable MYHDL112_RETURN; end endfunction function integer MYHDL53_makeLeaf; input [9-1:0] lcode; input [4-1:0] lbits; begin: MYHDL113_RETURN if ((lcode >= (1 << 10))) begin $finish; end if ((lbits >= (1 << 9))) begin $finish; end MYHDL53_makeLeaf = ((lcode << 9) | lbits); disable MYHDL113_RETURN; end endfunction function integer MYHDL54_get4; input boffset; input [5-1:0] width; begin: MYHDL114_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL54_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL114_RETURN; end endfunction function integer MYHDL55_get_bits; input [19-1:0] aleaf; begin: MYHDL115_RETURN MYHDL55_get_bits = ($signed({1'b0, aleaf}) & ((1 << 9) - 1)); disable MYHDL115_RETURN; end endfunction function integer MYHDL56_get_bits; input [19-1:0] aleaf; begin: MYHDL116_RETURN MYHDL56_get_bits = ($signed({1'b0, aleaf}) & ((1 << 9) - 1)); disable MYHDL116_RETURN; end endfunction task MYHDL57_adv; input width; integer width; integer nshift; begin: MYHDL117_RETURN nshift = $signed(($signed({1'b0, dio}) + width) >>> 3); o_iprogress <= di; dio <= (($signed({1'b0, dio}) + width) & 7); di <= ($signed({1'b0, di}) + nshift); if ((nshift != 0)) begin filled <= 1'b0; end end endtask function integer MYHDL58_get_code; input [19-1:0] aleaf; begin: MYHDL118_RETURN MYHDL58_get_code = (aleaf >>> 9); disable MYHDL118_RETURN; end endfunction function integer MYHDL59_get_code; input [19-1:0] aleaf; begin: MYHDL119_RETURN MYHDL59_get_code = (aleaf >>> 9); disable MYHDL119_RETURN; end endfunction function integer MYHDL60_get4; input boffset; integer boffset; input [5-1:0] width; begin: MYHDL120_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL60_get4 = ($signed($signed({1'b0, b41}) >>> ($signed({1'b0, dio}) + boffset)) & ((1 << width) - 1)); disable MYHDL120_RETURN; end endfunction function integer MYHDL61_get_bits; input [19-1:0] aleaf; begin: MYHDL121_RETURN MYHDL61_get_bits = ($signed({1'b0, aleaf}) & ((1 << 9) - 1)); disable MYHDL121_RETURN; end endfunction function integer MYHDL62_get4; input boffset; input width; integer width; begin: MYHDL122_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL62_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL122_RETURN; end endfunction function integer MYHDL63_get_code; input [19-1:0] aleaf; begin: MYHDL123_RETURN MYHDL63_get_code = (aleaf >>> 9); disable MYHDL123_RETURN; end endfunction function integer MYHDL64_get_bits; input [19-1:0] aleaf; begin: MYHDL124_RETURN MYHDL64_get_bits = ($signed({1'b0, aleaf}) & ((1 << 9) - 1)); disable MYHDL124_RETURN; end endfunction function integer MYHDL65_get4; input boffset; integer boffset; input width; integer width; begin: MYHDL125_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL65_get4 = ($signed($signed({1'b0, b41}) >>> ($signed({1'b0, dio}) + boffset)) & ((1 << width) - 1)); disable MYHDL125_RETURN; end endfunction function integer MYHDL66_get_bits; input [19-1:0] aleaf; begin: MYHDL126_RETURN MYHDL66_get_bits = ($signed({1'b0, aleaf}) & ((1 << 9) - 1)); disable MYHDL126_RETURN; end endfunction task MYHDL67_adv; input width; integer width; integer nshift; begin: MYHDL127_RETURN nshift = $signed(($signed({1'b0, dio}) + width) >>> 3); o_iprogress <= di; dio <= (($signed({1'b0, dio}) + width) & 7); di <= ($signed({1'b0, di}) + nshift); if ((nshift != 0)) begin filled <= 1'b0; end end endtask function integer MYHDL68_get4; input boffset; input width; integer width; begin: MYHDL128_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL68_get4 = ((b41 >>> (dio + boffset)) & ((1 << width) - 1)); disable MYHDL128_RETURN; end endfunction function integer MYHDL69_get4; input boffset; integer boffset; input width; integer width; begin: MYHDL129_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL69_get4 = ($signed($signed({1'b0, b41}) >>> ($signed({1'b0, dio}) + boffset)) & ((1 << width) - 1)); disable MYHDL129_RETURN; end endfunction function integer MYHDL70_rev_bits; input b; integer b; input nb; integer nb; integer r; begin: MYHDL130_RETURN if ((b >= (1 << nb))) begin $finish; $write("too few bits"); $write("\n"); end 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)); r = r >>> (15 - $signed({1'b0, nb})); MYHDL70_rev_bits = r; disable MYHDL130_RETURN; end endfunction function integer MYHDL71_get4; input boffset; integer boffset; input width; integer width; begin: MYHDL131_RETURN if ((nb != 4)) begin $write("----NB----"); $write("\n"); $finish; end MYHDL71_get4 = ($signed($signed({1'b0, b41}) >>> ($signed({1'b0, dio}) + boffset)) & ((1 << width) - 1)); disable MYHDL131_RETURN; end endfunction task MYHDL72_adv; input width; integer width; integer nshift; begin: MYHDL132_RETURN nshift = $signed(($signed({1'b0, dio}) + width) >>> 3); o_iprogress <= di; dio <= (($signed({1'b0, dio}) + width) & 7); di <= ($signed({1'b0, di}) + nshift); if ((nshift != 0)) begin filled <= 1'b0; end end endtask task MYHDL73_adv; input width; integer width; integer nshift; begin: MYHDL133_RETURN nshift = ((dio + width) >>> 3); o_iprogress <= di; dio <= ((dio + width) & 7); di <= ($signed({1'b0, di}) + nshift); if ((nshift != 0)) begin filled <= 1'b0; end end endtask always @(posedge clk) begin: DEFLATE_IO_LOGIC case (i_mode) 'h2: begin iram[(i_addr & 127)] <= i_data; isize <= i_addr; end 'h3: begin o_byte <= oram[i_addr]; end default: begin // pass end endcase end always @(posedge clk) begin: DEFLATE_LOGIC integer hm; integer skip; reg no_adv; integer cs_i; reg [4-1:0] outlen; reg [9-1:0] outbits; reg [8-1:0] bdata; integer adler1_next; integer nextdist; integer copydist; integer extra_dist; integer extra_bits; integer outcode; integer lencode; integer match; integer distance; integer stat_i; integer clo_i; integer n_adv; integer dbl_i; integer dbl; integer dist_i; integer limit; reg [4-1:0] j; integer t; integer hf2_i; reg [5-1:0] amb; integer ncode; reg [10-1:0] canonical; reg [4-1:0] bits_next; reg [15-1:0] aim; integer cto; integer mask; integer token; integer extraLength; integer tlength; integer distanceCode; integer moreBits; integer mored; if ((!reset)) begin $write("DEFLATE RESET"); $write("\n"); state <= 5'b00000; o_done <= 1'b0; end else begin case (state) 5'b00000: begin case (i_mode) 'h4: begin $write("STARTC"); $write("\n"); do_compress <= 1'b1; method <= 1; o_done <= 1'b0; o_iprogress <= 0; o_oprogress <= 0; di <= 0; dio <= 0; do <= 0; doo <= 0; filled <= 1'b1; cur_static <= 0; state <= 5'b01110; end 'h5: begin do_compress <= 1'b0; o_done <= 1'b0; o_iprogress <= 0; o_oprogress <= 0; di <= 0; dio <= 0; do <= 0; doo <= 0; filled <= 1'b1; state <= 5'b00001; end default: begin // pass end endcase end 5'b00001: begin if ((!filled)) begin filled <= 1'b1; end else if ((nb < 4)) begin // pass end else if ((di == 0)) begin if ((b1 == 120)) begin $write("deflate mode"); $write("\n"); end else begin $write("%h", di); $write(" "); $write("%h", dio); $write(" "); $write("%h", nb); $write(" "); $write("%h", b1); $write(" "); $write("%h", b2); $write(" "); $write("%h", b3); $write(" "); $write("%h", b4); $write(" "); $write("%h", isize); $write("\n"); $finish; o_done <= 1'b1; state <= 5'b00000; end MYHDL3_adv(16); end else begin if (MYHDL4_get4(0, 1)) begin $write("final"); $write("\n"); final <= 1'b1; end hm = MYHDL5_get4(1, 2); method <= hm; $write("method"); $write(" "); $write("%0d", hm); $write("\n"); case (hm) 'h2: begin state <= 5'b00010; numCodeLength <= 0; numLiterals <= 0; static <= 1'b0; MYHDL6_adv(3); end 'h1: begin static <= 1'b1; cur_static <= 0; state <= 5'b01110; MYHDL7_adv(3); end 'h0: begin state <= 5'b10101; skip = (8 - dio); if ((skip <= 2)) begin skip = (16 - dio); end length <= MYHDL8_get4(skip, 16); MYHDL9_adv((skip + 16)); cur_i <= 0; offset <= 7; end default: begin state <= 5'b00000; $write("Bad method"); $write("\n"); $finish; end endcase end end 5'b10110: begin no_adv = 0; if ((!filled)) begin no_adv = 1; filled <= 1'b1; end else if ((nb < 4)) begin no_adv = 1; // pass end else if ((cur_cstatic == 0)) begin flush <= 1'b0; ob1 <= 0; adler1 <= 1; adler2 <= 0; ladler1 <= 0; oaddr <= 0; obyte <= 120; end else if ((cur_cstatic == 1)) begin oaddr <= 1; obyte <= 156; do <= 2; end else if ((cur_cstatic == 2)) begin oaddr <= do; obyte <= MYHDL10_put(3, 3); MYHDL11_put_adv(3, 3); end else if (flush) begin $write("flush"); $write(" "); $write("%h", do); $write(" "); $write("%h", ob1); $write("\n"); no_adv = 1; oaddr <= do; obyte <= ob1; MYHDL12_do_flush; end else if ((($signed({1'b0, cur_cstatic}) - 3) > isize)) begin if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 1))) begin $write("Put EOF"); $write(" "); $write("%h", do); $write("\n"); cs_i = 256; outlen = codeLength[cs_i]; outbits = code_bits[cs_i]; $write("EOF BITS:"); $write(" "); $write("%0d", cs_i); $write(" "); $write("%h", outlen); $write(" "); $write("%h", outbits); $write("\n"); oaddr <= do; obyte <= MYHDL13_put(outbits, outlen); MYHDL14_put_adv(outbits, outlen); end else if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 2))) begin $write("calc end adler"); $write("\n"); adler2 <= ((adler2 + ladler1) % 65521); if ((doo != 0)) begin oaddr <= do; obyte <= ob1; do <= (do + 1); end end else if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 3))) begin $write("c1"); $write("\n"); oaddr <= do; obyte <= (adler2 >>> 8); do <= (do + 1); end else if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 4))) begin $write("c2"); $write("\n"); oaddr <= do; obyte <= (adler2 & 255); do <= (do + 1); end else if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 5))) begin $write("c3"); $write("\n"); oaddr <= do; obyte <= (adler1 >>> 8); do <= (do + 1); end else if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 6))) begin $write("c4"); $write("\n"); oaddr <= do; obyte <= (adler1 & 255); end else if ((($signed({1'b0, cur_cstatic}) - 3) == (isize + 7))) begin $write("EOF finish"); $write(" "); $write("%h", do); $write("\n"); o_done <= 1'b1; o_oprogress <= (do + 1); state <= 5'b00000; end else begin $write("%h", cur_cstatic); $write(" "); $write("%h", isize); $write("\n"); $finish; end end else begin bdata = iram[di]; adler1_next = ((adler1 + bdata) % 65521); adler1 <= adler1_next; adler2 <= ((adler2 + ladler1) % 65521); ladler1 <= adler1_next; state <= 5'b10111; cur_search <= (di - 1); end if ((!no_adv)) begin cur_cstatic <= (cur_cstatic + 1); end end 5'b11000: begin if (flush) begin MYHDL15_do_flush; end else begin case ((cur_i + 1)) 0: nextdist = 1; 1: nextdist = 2; 2: nextdist = 3; 3: nextdist = 4; 4: nextdist = 5; 5: nextdist = 7; 6: nextdist = 9; 7: nextdist = 13; 8: nextdist = 17; 9: nextdist = 25; 10: nextdist = 33; 11: nextdist = 49; 12: nextdist = 65; 13: nextdist = 97; 14: nextdist = 129; 15: nextdist = 193; 16: nextdist = 257; 17: nextdist = 385; 18: nextdist = 513; 19: nextdist = 769; 20: nextdist = 1025; 21: nextdist = 1537; 22: nextdist = 2049; 23: nextdist = 3073; 24: nextdist = 4097; 25: nextdist = 6145; 26: nextdist = 8193; 27: nextdist = 12289; 28: nextdist = 16385; default: nextdist = 24577; endcase if ((nextdist > cur_dist)) begin case (cur_i) 0: copydist = 1; 1: copydist = 2; 2: copydist = 3; 3: copydist = 4; 4: copydist = 5; 5: copydist = 7; 6: copydist = 9; 7: copydist = 13; 8: copydist = 17; 9: copydist = 25; 10: copydist = 33; 11: copydist = 49; 12: copydist = 65; 13: copydist = 97; 14: copydist = 129; 15: copydist = 193; 16: copydist = 257; 17: copydist = 385; 18: copydist = 513; 19: copydist = 769; 20: copydist = 1025; 21: copydist = 1537; 22: copydist = 2049; 23: copydist = 3073; 24: copydist = 4097; 25: copydist = 6145; 26: copydist = 8193; 27: copydist = 12289; 28: copydist = 16385; default: copydist = 24577; endcase extra_dist = (cur_dist - copydist); case ((cur_i / 2)) 0: extra_bits = 0; 1: extra_bits = 0; 2: extra_bits = 1; 3: extra_bits = 2; 4: extra_bits = 3; 5: extra_bits = 4; 6: extra_bits = 5; 7: extra_bits = 6; 8: extra_bits = 7; 9: extra_bits = 8; 10: extra_bits = 9; 11: extra_bits = 10; 12: extra_bits = 11; 13: extra_bits = 12; default: extra_bits = 13; endcase if ((extra_dist > ((1 << extra_bits) - 1))) begin $finish; end outcode = (MYHDL16_rev_bits(cur_i, 5) | (extra_dist << 5)); oaddr <= do; obyte <= MYHDL17_put(outcode, (5 + extra_bits)); MYHDL18_put_adv(outcode, (5 + extra_bits)); cur_i <= (($signed({1'b0, di}) - $signed({1'b0, length})) + 1); state <= 5'b11001; end else begin cur_i <= (cur_i + 1); end end end 5'b11001: begin if ((cur_i < di)) begin bdata = iram[(cur_i & 127)]; adler1_next = ((adler1 + bdata) % 65521); adler1 <= adler1_next; adler2 <= ((adler2 + ladler1) % 65521); ladler1 <= adler1_next; cur_i <= (cur_i + 1); end else begin state <= 5'b10110; end end 5'b10111: begin if ((!filled)) begin filled <= 1'b1; end else if ((nb < 4)) begin // pass end else begin if (((cur_search >= 0) && (cur_search >= ($signed({1'b0, di}) - 32)) && ($signed({1'b0, di}) < ($signed({1'b0, isize}) - 3)))) begin if (((iram[(cur_search & 127)] == b1) && (iram[((cur_search + 1) & 127)] == b2) && (iram[((cur_search + 2) & 127)] == b3))) begin lencode = 257; match = 3; if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 4)) && (iram[((cur_search + 3) & 127)] == b4))) begin lencode = 258; match = 4; if ((($signed({1'b0, di}) < ($signed({1'b0, isize}) - 5)) && (iram[((cur_search + 4) & 127)] == iram[((di + 4) & 127)]))) begin lencode = 259; match = 5; end end // if di < isize - 6 and iram[cur_search+5 & IBS] == iram[di + 5 & IBS]: // lencode = 260 // match = 6 // if di < isize - 7 and iram[cur_search+6 & IBS] == iram[di + 6 & IBS]: // lencode = 261 // match = 7 // if di < isize - 8 and iram[cur_search+7 & IBS] == iram[di + 7 & IBS]: // lencode = 262 // match = 8 // if di < isize - 9 and iram[cur_search+8 & IBS] == iram[di + 8 & IBS]: // lencode = 263 // match = 9 // if di < isize - 10 and iram[cur_search+9 & IBS] == iram[di + 9 & IBS]: // lencode = 264 // match = 10 $write("found:"); $write(" "); $write("%h", cur_search); $write(" "); $write("%h", di); $write(" "); $write("%h", isize); $write(" "); $write("%0d", match); $write("\n"); outlen = codeLength[lencode]; outbits = code_bits[lencode]; oaddr <= do; obyte <= MYHDL19_put(outbits, outlen); MYHDL20_put_adv(outbits, outlen); distance = ($signed({1'b0, di}) - cur_search); cur_dist <= distance; cur_i <= 0; di <= (di + match); cur_cstatic <= ((cur_cstatic + match) - 1); length <= match; state <= 5'b11000; end else begin cur_search <= (cur_search - 1); end end else begin bdata = iram[di]; di <= (di + 1); outlen = codeLength[bdata]; outbits = code_bits[bdata]; oaddr <= do; obyte <= MYHDL21_put(outbits, outlen); MYHDL22_put_adv(outbits, outlen); state <= 5'b10110; end end end 5'b01110: begin for (stat_i=0; stat_i<144; stat_i=stat_i+1) begin codeLength[stat_i] <= 8; end for (stat_i=144; stat_i<256; stat_i=stat_i+1) begin codeLength[stat_i] <= 9; end for (stat_i=256; stat_i<280; stat_i=stat_i+1) begin codeLength[stat_i] <= 7; end for (stat_i=280; stat_i<288; stat_i=stat_i+1) begin codeLength[stat_i] <= 8; end numCodeLength <= 288; cur_HF1 <= 0; state <= 5'b00111; // if cur_static < 288: // if cur_static < 144: // codeLength[cur_static].next = 8 // elif cur_static < 256: // codeLength[cur_static].next = 9 // elif cur_static < 280: // codeLength[cur_static].next = 7 // else: // codeLength[cur_static].next = 8 // cur_static.next = cur_static + 1 // else: // numCodeLength.next = 288 // cur_HF1.next = 0 // state.next = d_state.HF1 end 5'b00010: begin if ((!filled)) begin filled <= 1'b1; end else if ((nb < 4)) begin // pass end else if ((numLiterals == 0)) begin numLiterals <= (257 + MYHDL31_get4(0, 5)); $write("NL:"); $write(" "); $write("%0d", (257 + MYHDL32_get4(0, 5))); $write("\n"); numDistance <= (1 + MYHDL33_get4(5, 5)); $write("ND:"); $write(" "); $write("%0d", (1 + MYHDL34_get4(5, 5))); $write("\n"); b_numCodeLength <= (4 + MYHDL35_get4(10, 4)); $write("NCL:"); $write(" "); $write("%0d", (4 + MYHDL36_get4(10, 4))); $write("\n"); numCodeLength <= 0; MYHDL37_adv(14); end else begin if ((numCodeLength < 19)) begin case (numCodeLength) 0: clo_i = 16; 1: clo_i = 17; 2: clo_i = 18; 3: clo_i = 0; 4: clo_i = 8; 5: clo_i = 7; 6: clo_i = 9; 7: clo_i = 6; 8: clo_i = 10; 9: clo_i = 5; 10: clo_i = 11; 11: clo_i = 4; 12: clo_i = 12; 13: clo_i = 3; 14: clo_i = 13; 15: clo_i = 2; 16: clo_i = 14; 17: clo_i = 1; default: clo_i = 15; endcase if ((numCodeLength < b_numCodeLength)) begin codeLength[clo_i] <= MYHDL38_get4(0, 3); MYHDL39_adv(3); end else begin codeLength[clo_i] <= 0; end numCodeLength <= (numCodeLength + 1); end else begin numCodeLength <= 19; cur_HF1 <= 0; state <= 5'b00111; end end end 5'b00011: begin if ((!filled)) begin filled <= 1'b1; end else if ((nb < 4)) begin // pass end else if ((numCodeLength < (numLiterals + numDistance))) begin n_adv = 0; if ((code < 16)) begin howOften <= 1; lastToken <= code; end else if ((code == 16)) begin howOften <= (3 + MYHDL40_get4(0, 2)); n_adv = 2; end else if ((code == 17)) begin howOften <= (3 + MYHDL41_get4(0, 3)); lastToken <= 0; n_adv = 3; end else if ((code == 18)) begin howOften <= (11 + MYHDL42_get4(0, 7)); lastToken <= 0; n_adv = 7; end else begin $finish; end if ((n_adv != 0)) begin MYHDL43_adv(n_adv); end state <= 5'b00100; end else begin $write("FILL UP"); $write("\n"); for (dbl_i=0; dbl_i<32; dbl_i=dbl_i+1) begin dbl = 0; if (((dbl_i + $signed({1'b0, numLiterals})) < numCodeLength)) begin dbl = codeLength[(dbl_i + $signed({1'b0, numLiterals}))]; end distanceLength[dbl_i] <= dbl; end cur_i <= numLiterals; state <= 5'b00110; end end default: begin if ((state == 5'b00110)) begin if ((cur_i < 288)) begin codeLength[cur_i] <= 0; cur_i <= (cur_i + 1); end else begin numCodeLength <= 288; method <= 3; cur_HF1 <= 0; state <= 5'b00111; end end else begin case (state) 5'b00101: begin $write("DISTTREE"); $write("\n"); for (dist_i=0; dist_i<32; dist_i=dist_i+1) begin codeLength[dist_i] <= distanceLength[dist_i]; end numCodeLength <= 32; method <= 4; cur_HF1 <= 0; state <= 5'b00111; end 5'b00100: begin if ((howOften != 0)) begin codeLength[numCodeLength] <= lastToken; howOften <= (howOften - 1); numCodeLength <= (numCodeLength + 1); end else if ((numCodeLength < (numLiterals + numDistance))) begin cur_next <= 0; state <= 5'b10011; end else begin state <= 5'b00011; end end 5'b00111: begin if ((cur_HF1 < 16)) begin bitLengthCount[cur_HF1] <= 0; end if ((cur_HF1 < 128)) begin d_leaves[cur_HF1] <= 0; end if (((method != 4) && (cur_HF1 < 512))) begin lwaddr <= cur_HF1; wleaf <= 0; end limit = 512; if ((method == 4)) begin limit = 128; end if ((cur_HF1 < limit)) begin cur_HF1 <= (cur_HF1 + 1); end else begin $write("DID HF1 INIT"); $write("\n"); cur_i <= 0; state <= 5'b01000; end end 5'b01000: begin if ((cur_i < numCodeLength)) begin j = codeLength[cur_i]; bitLengthCount[j] <= (bitLengthCount[j] + 1); cur_i <= (cur_i + 1); end else begin bitLengthCount[0] <= 0; state <= 5'b01001; cur_i <= 1; if ((method == 4)) begin d_maxBits <= 0; end else begin maxBits <= 0; end minBits <= 15; end end 5'b01001: begin if ((cur_i <= 15)) begin if ((bitLengthCount[cur_i] != 0)) begin if ((cur_i < minBits)) begin minBits <= cur_i; end if ((method == 4)) begin if ((cur_i > d_maxBits)) begin d_maxBits <= cur_i; end end else begin if ((cur_i > maxBits)) begin maxBits <= cur_i; end end end cur_i <= (cur_i + 1); end else begin $write("%h", minBits); $write(" "); $write("%h", maxBits); $write("\n"); t = 10; if ((method == 4)) begin if ((t > d_maxBits)) begin t = d_maxBits; end d_instantMaxBit <= t; d_instantMask <= ((1 << t) - 1); end else begin if ((t > maxBits)) begin t = maxBits; end instantMaxBit <= t; instantMask <= ((1 << t) - 1); end $write("%0d", ((1 << t) - 1)); $write("\n"); state <= 5'b01010; cur_i <= minBits; code <= 0; for (hf2_i=0; hf2_i<15; hf2_i=hf2_i+1) begin nextCode[hf2_i] <= 0; end $write("to HF3"); $write("\n"); end end 5'b01010: begin amb = maxBits; if ((method == 4)) begin amb = d_maxBits; end if ((cur_i <= amb)) begin ncode = ((code + bitLengthCount[($signed({1'b0, cur_i}) - 1)]) << 1); code <= ncode; nextCode[cur_i] <= ncode; cur_i <= (cur_i + 1); end else begin state <= 5'b01011; cur_i <= 0; spread_i <= 0; $write("to HF4"); $write("\n"); end end 5'b01100: begin canonical = nextCode[bits]; nextCode[bits] <= (nextCode[bits] + 1); if ((bits > 15)) begin $finish; end reverse <= MYHDL50_rev_bits(canonical, bits); leaf <= MYHDL51_makeLeaf(spread_i, bits); state <= 5'b01101; end 5'b01101: begin if ((method == 4)) begin d_leaves[reverse] <= leaf; if ((bits <= d_instantMaxBit)) begin if (((reverse + (1 << bits)) <= d_instantMask)) begin step <= (1 << bits); spread <= (reverse + (1 << bits)); state <= 5'b10010; end else begin spread_i <= (spread_i + 1); state <= 5'b01011; end end else begin state <= 5'b01011; spread_i <= (spread_i + 1); end end else begin wleaf <= leaf; lwaddr <= reverse; code_bits[spread_i] <= reverse; if ((bits <= instantMaxBit)) begin if (((reverse + (1 << bits)) <= instantMask)) begin step <= (1 << bits); spread <= (reverse + (1 << bits)); state <= 5'b10010; end else begin spread_i <= (spread_i + 1); state <= 5'b01011; end end else begin spread_i <= (spread_i + 1); state <= 5'b01011; end end end 5'b01011: begin if ((spread_i < numCodeLength)) begin bits_next = codeLength[spread_i]; if ((bits_next != 0)) begin bits <= bits_next; state <= 5'b01100; end else begin spread_i <= (spread_i + 1); end end else begin if (do_compress) begin state <= 5'b10110; cur_cstatic <= 0; end else if ((method == 3)) begin state <= 5'b00101; end else if ((method == 4)) begin $write("DEFLATE m2!"); $write("\n"); state <= 5'b10011; end else if ((method == 2)) begin numCodeLength <= 0; state <= 5'b10011; end else begin state <= 5'b10011; end cur_next <= 0; cur_i <= 0; end end 5'b10010: begin if ((method == 4)) begin d_leaves[spread] <= MYHDL52_makeLeaf(spread_i, codeLength[spread_i]); end else begin lwaddr <= spread; wleaf <= MYHDL53_makeLeaf(spread_i, codeLength[spread_i]); end aim = instantMask; if ((method == 4)) begin aim = d_instantMask; end if (($signed({1'b0, spread}) > ($signed({1'b0, aim}) - $signed({1'b0, step})))) begin spread_i <= (spread_i + 1); state <= 5'b01011; end else begin spread <= (spread + step); end end 5'b10011: begin if ((!filled)) begin filled <= 1'b1; end else if ((nb < 4)) begin // pass end else if ((cur_next == 0)) begin cto = MYHDL54_get4(0, maxBits); cur_next <= 1; mask = ((1 << instantMaxBit) - 1); leaf <= leaves[(cto & mask)]; end else begin if ((MYHDL55_get_bits(leaf) < 1)) begin $write("< 1 bits: "); $write("\n"); $finish; end MYHDL57_adv(MYHDL56_get_bits(leaf)); if ((MYHDL58_get_code(leaf) == 0)) begin $write("leaf 0"); $write("\n"); end code <= MYHDL59_get_code(leaf); if ((method == 2)) begin state <= 5'b00011; end else begin state <= 5'b10100; end end end 5'b01111: begin if ((!filled)) begin filled <= 1'b1; end else if ((nb < 4)) begin // pass end else begin token = (code - 257); case (token) 0: extraLength = 0; 1: extraLength = 0; 2: extraLength = 0; 3: extraLength = 0; 4: extraLength = 0; 5: extraLength = 0; 6: extraLength = 0; 7: extraLength = 0; 8: extraLength = 1; 9: extraLength = 1; 10: extraLength = 1; 11: extraLength = 1; 12: extraLength = 2; 13: extraLength = 2; 14: extraLength = 2; 15: extraLength = 2; 16: extraLength = 3; 17: extraLength = 3; 18: extraLength = 3; 19: extraLength = 3; 20: extraLength = 4; 21: extraLength = 4; 22: extraLength = 4; 23: extraLength = 4; 24: extraLength = 5; 25: extraLength = 5; 26: extraLength = 5; 27: extraLength = 5; default: extraLength = 0; endcase cto = MYHDL60_get4(extraLength, d_maxBits); mask = ((1 << d_instantMaxBit) - 1); leaf <= d_leaves[(cto & mask)]; state <= 5'b10000; end end 5'b10000: begin if ((MYHDL61_get_bits(leaf) == 0)) begin $finish; end token = (code - 257); case (token) 0: tlength = 3; 1: tlength = 4; 2: tlength = 5; 3: tlength = 6; 4: tlength = 7; 5: tlength = 8; 6: tlength = 9; 7: tlength = 10; 8: tlength = 11; 9: tlength = 13; 10: tlength = 15; 11: tlength = 17; 12: tlength = 19; 13: tlength = 23; 14: tlength = 27; 15: tlength = 31; 16: tlength = 35; 17: tlength = 43; 18: tlength = 51; 19: tlength = 59; 20: tlength = 67; 21: tlength = 83; 22: tlength = 99; 23: tlength = 115; 24: tlength = 131; 25: tlength = 163; 26: tlength = 195; 27: tlength = 227; default: tlength = 258; endcase case (token) 0: extraLength = 0; 1: extraLength = 0; 2: extraLength = 0; 3: extraLength = 0; 4: extraLength = 0; 5: extraLength = 0; 6: extraLength = 0; 7: extraLength = 0; 8: extraLength = 1; 9: extraLength = 1; 10: extraLength = 1; 11: extraLength = 1; 12: extraLength = 2; 13: extraLength = 2; 14: extraLength = 2; 15: extraLength = 2; 16: extraLength = 3; 17: extraLength = 3; 18: extraLength = 3; 19: extraLength = 3; 20: extraLength = 4; 21: extraLength = 4; 22: extraLength = 4; 23: extraLength = 4; 24: extraLength = 5; 25: extraLength = 5; 26: extraLength = 5; 27: extraLength = 5; default: extraLength = 0; endcase tlength = tlength + MYHDL62_get4(0, extraLength); distanceCode = MYHDL63_get_code(leaf); case (distanceCode) 0: distance = 1; 1: distance = 2; 2: distance = 3; 3: distance = 4; 4: distance = 5; 5: distance = 7; 6: distance = 9; 7: distance = 13; 8: distance = 17; 9: distance = 25; 10: distance = 33; 11: distance = 49; 12: distance = 65; 13: distance = 97; 14: distance = 129; 15: distance = 193; 16: distance = 257; 17: distance = 385; 18: distance = 513; 19: distance = 769; 20: distance = 1025; 21: distance = 1537; 22: distance = 2049; 23: distance = 3073; 24: distance = 4097; 25: distance = 6145; 26: distance = 8193; 27: distance = 12289; 28: distance = 16385; default: distance = 24577; endcase case ($signed(distanceCode >>> 1)) 0: moreBits = 0; 1: moreBits = 0; 2: moreBits = 1; 3: moreBits = 2; 4: moreBits = 3; 5: moreBits = 4; 6: moreBits = 5; 7: moreBits = 6; 8: moreBits = 7; 9: moreBits = 8; 10: moreBits = 9; 11: moreBits = 10; 12: moreBits = 11; 13: moreBits = 12; default: moreBits = 13; endcase mored = MYHDL65_get4((extraLength + MYHDL64_get_bits(leaf)), moreBits); distance = distance + mored; MYHDL67_adv(((moreBits + extraLength) + MYHDL66_get_bits(leaf))); offset <= ($signed({1'b0, do}) - distance); length <= tlength; cur_i <= 0; oraddr <= offset; state <= 5'b10101; end default: begin if ((state == 5'b10100)) begin if ((!filled)) begin filled <= 1'b1; end else if ((nb < 4)) begin // pass end else if (($signed({1'b0, di}) > ($signed({1'b0, isize}) - 3))) begin state <= 5'b00000; o_done <= 1'b1; $write("NO EOF "); $write(" "); $write("%h", di); $write("\n"); $finish; end else if ((code == 256)) begin $write("EOF:"); $write(" "); $write("%h", di); $write(" "); $write("%h", do); $write("\n"); if ((!final)) begin state <= 5'b00001; end else begin o_done <= 1'b1; o_oprogress <= do; state <= 5'b00000; end end else begin if ((code < 256)) begin oaddr <= do; obyte <= code; o_oprogress <= (do + 1); do <= (do + 1); cur_next <= 0; state <= 5'b10011; end else if ((code == 300)) begin $finish; end else begin if (static) begin token = (code - 257); case (token) 0: tlength = 3; 1: tlength = 4; 2: tlength = 5; 3: tlength = 6; 4: tlength = 7; 5: tlength = 8; 6: tlength = 9; 7: tlength = 10; 8: tlength = 11; 9: tlength = 13; 10: tlength = 15; 11: tlength = 17; 12: tlength = 19; 13: tlength = 23; 14: tlength = 27; 15: tlength = 31; 16: tlength = 35; 17: tlength = 43; 18: tlength = 51; 19: tlength = 59; 20: tlength = 67; 21: tlength = 83; 22: tlength = 99; 23: tlength = 115; 24: tlength = 131; 25: tlength = 163; 26: tlength = 195; 27: tlength = 227; default: tlength = 258; endcase case (token) 0: extraLength = 0; 1: extraLength = 0; 2: extraLength = 0; 3: extraLength = 0; 4: extraLength = 0; 5: extraLength = 0; 6: extraLength = 0; 7: extraLength = 0; 8: extraLength = 1; 9: extraLength = 1; 10: extraLength = 1; 11: extraLength = 1; 12: extraLength = 2; 13: extraLength = 2; 14: extraLength = 2; 15: extraLength = 2; 16: extraLength = 3; 17: extraLength = 3; 18: extraLength = 3; 19: extraLength = 3; 20: extraLength = 4; 21: extraLength = 4; 22: extraLength = 4; 23: extraLength = 4; 24: extraLength = 5; 25: extraLength = 5; 26: extraLength = 5; 27: extraLength = 5; default: extraLength = 0; endcase tlength = tlength + MYHDL68_get4(0, extraLength); t = MYHDL69_get4(extraLength, 5); distanceCode = MYHDL70_rev_bits(t, 5); case (distanceCode) 0: distance = 1; 1: distance = 2; 2: distance = 3; 3: distance = 4; 4: distance = 5; 5: distance = 7; 6: distance = 9; 7: distance = 13; 8: distance = 17; 9: distance = 25; 10: distance = 33; 11: distance = 49; 12: distance = 65; 13: distance = 97; 14: distance = 129; 15: distance = 193; 16: distance = 257; 17: distance = 385; 18: distance = 513; 19: distance = 769; 20: distance = 1025; 21: distance = 1537; 22: distance = 2049; 23: distance = 3073; 24: distance = 4097; 25: distance = 6145; 26: distance = 8193; 27: distance = 12289; 28: distance = 16385; default: distance = 24577; endcase case ($signed(distanceCode >>> 1)) 0: moreBits = 0; 1: moreBits = 0; 2: moreBits = 1; 3: moreBits = 2; 4: moreBits = 3; 5: moreBits = 4; 6: moreBits = 5; 7: moreBits = 6; 8: moreBits = 7; 9: moreBits = 8; 10: moreBits = 9; 11: moreBits = 10; 12: moreBits = 11; 13: moreBits = 12; default: moreBits = 13; endcase distance = distance + MYHDL71_get4((extraLength + 5), moreBits); MYHDL72_adv(((extraLength + 5) + moreBits)); offset <= ($signed({1'b0, do}) - distance); length <= tlength; cur_i <= 0; oraddr <= offset; state <= 5'b10101; end else begin state <= 5'b01111; end end cur_next <= 0; end end else begin if ((state == 5'b10101)) begin if ((!filled)) begin filled <= 1'b1; end else if ((nb < 4)) begin // pass end else if ((method == 0)) begin if ((cur_i < length)) begin oaddr <= do; obyte <= b3; MYHDL73_adv(8); cur_i <= (cur_i + 1); do <= (do + 1); o_oprogress <= (do + 1); end else if ((!final)) begin state <= 5'b00001; end else begin o_oprogress <= do; o_done <= 1'b1; state <= 5'b00000; end end else if ((cur_i < (length + 1))) begin oraddr <= (offset + cur_i); if ((cur_i == 1)) begin copy1 <= orbyte; end if ((cur_i > 1)) begin if (((offset + cur_i) == (do + 1))) begin obyte <= copy1; end else begin obyte <= orbyte; end oaddr <= do; o_oprogress <= (do + 1); do <= (do + 1); end cur_i <= (cur_i + 1); end else begin oaddr <= do; if (((offset + cur_i) == (do + 1))) begin obyte <= copy1; end else begin obyte <= orbyte; end do <= (do + 1); o_oprogress <= (do + 1); cur_next <= 0; state <= 5'b10011; end end else begin $write("unknown state?!"); $write("\n"); state <= 5'b00000; end end end endcase end end endcase end end always @(posedge clk) begin: DEFLATE_FILL_BUF if ((!reset)) begin $write("FILL RESET"); $write("\n"); nb <= 0; b1 <= 0; b2 <= 0; b3 <= 0; b4 <= 0; end else begin if ((isize < 4)) begin // pass end else if (((i_mode == 4) || (i_mode == 5))) begin nb <= 0; end else begin nb <= 4; b1 <= iram[(di & 127)]; b2 <= iram[((di + 1) & 127)]; b3 <= iram[((di + 2) & 127)]; b4 <= iram[((di + 3) & 127)]; end end end always @(posedge clk) begin: DEFLATE_ORAMWRITE oram[oaddr] <= obyte; leaves[lwaddr] <= wleaf; end always @(posedge clk) begin: DEFLATE_ORAMREAD orbyte <= oram[oraddr]; end endmodule
Go to most recent revision | Compare with Previous | Blame | View Log