| 1 |
2 |
davidklun |
/////////////////////////////////////////////////////////////////////
|
| 2 |
|
|
//// ////
|
| 3 |
|
|
//// JPEG Encoder Core - Verilog ////
|
| 4 |
|
|
//// ////
|
| 5 |
|
|
//// Author: David Lundgren ////
|
| 6 |
|
|
//// davidklun@gmail.com ////
|
| 7 |
|
|
//// ////
|
| 8 |
|
|
/////////////////////////////////////////////////////////////////////
|
| 9 |
|
|
//// ////
|
| 10 |
|
|
//// Copyright (C) 2009 David Lundgren ////
|
| 11 |
|
|
//// davidklun@gmail.com ////
|
| 12 |
|
|
//// ////
|
| 13 |
|
|
//// This source file may be used and distributed without ////
|
| 14 |
|
|
//// restriction provided that this copyright statement is not ////
|
| 15 |
|
|
//// removed from the file and that any derivative work contains ////
|
| 16 |
|
|
//// the original copyright notice and the associated disclaimer.////
|
| 17 |
|
|
//// ////
|
| 18 |
|
|
//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
|
| 19 |
|
|
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
|
| 20 |
|
|
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
|
| 21 |
|
|
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
|
| 22 |
|
|
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
|
| 23 |
|
|
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
|
| 24 |
|
|
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
|
| 25 |
|
|
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
|
| 26 |
|
|
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
|
| 27 |
|
|
//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
|
| 28 |
|
|
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
|
| 29 |
|
|
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
|
| 30 |
|
|
//// POSSIBILITY OF SUCH DAMAGE. ////
|
| 31 |
|
|
//// ////
|
| 32 |
|
|
/////////////////////////////////////////////////////////////////////
|
| 33 |
|
|
|
| 34 |
|
|
/* This module combines the dct, quantizer, and huffman modules. */
|
| 35 |
|
|
|
| 36 |
|
|
|
| 37 |
|
|
`timescale 1ns / 100ps
|
| 38 |
|
|
|
| 39 |
|
|
module cbd_q_h(clk, rst, enable, data_in,
|
| 40 |
|
|
JPEG_bitstream, data_ready, cb_orc,
|
| 41 |
|
|
end_of_block_empty);
|
| 42 |
|
|
input clk;
|
| 43 |
|
|
input rst;
|
| 44 |
|
|
input enable;
|
| 45 |
|
|
input [7:0] data_in;
|
| 46 |
|
|
output [31:0] JPEG_bitstream;
|
| 47 |
|
|
output data_ready;
|
| 48 |
|
|
output [4:0] cb_orc;
|
| 49 |
|
|
output end_of_block_empty;
|
| 50 |
|
|
|
| 51 |
|
|
wire dct_enable, quantizer_enable;
|
| 52 |
|
|
wire [10:0] Z11_final, Z12_final, Z13_final, Z14_final;
|
| 53 |
|
|
wire [10:0] Z15_final, Z16_final, Z17_final, Z18_final;
|
| 54 |
|
|
wire [10:0] Z21_final, Z22_final, Z23_final, Z24_final;
|
| 55 |
|
|
wire [10:0] Z25_final, Z26_final, Z27_final, Z28_final;
|
| 56 |
|
|
wire [10:0] Z31_final, Z32_final, Z33_final, Z34_final;
|
| 57 |
|
|
wire [10:0] Z35_final, Z36_final, Z37_final, Z38_final;
|
| 58 |
|
|
wire [10:0] Z41_final, Z42_final, Z43_final, Z44_final;
|
| 59 |
|
|
wire [10:0] Z45_final, Z46_final, Z47_final, Z48_final;
|
| 60 |
|
|
wire [10:0] Z51_final, Z52_final, Z53_final, Z54_final;
|
| 61 |
|
|
wire [10:0] Z55_final, Z56_final, Z57_final, Z58_final;
|
| 62 |
|
|
wire [10:0] Z61_final, Z62_final, Z63_final, Z64_final;
|
| 63 |
|
|
wire [10:0] Z65_final, Z66_final, Z67_final, Z68_final;
|
| 64 |
|
|
wire [10:0] Z71_final, Z72_final, Z73_final, Z74_final;
|
| 65 |
|
|
wire [10:0] Z75_final, Z76_final, Z77_final, Z78_final;
|
| 66 |
|
|
wire [10:0] Z81_final, Z82_final, Z83_final, Z84_final;
|
| 67 |
|
|
wire [10:0] Z85_final, Z86_final, Z87_final, Z88_final;
|
| 68 |
|
|
wire [10:0] Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18;
|
| 69 |
|
|
wire [10:0] Q21, Q22, Q23, Q24, Q25, Q26, Q27, Q28;
|
| 70 |
|
|
wire [10:0] Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38;
|
| 71 |
|
|
wire [10:0] Q41, Q42, Q43, Q44, Q45, Q46, Q47, Q48;
|
| 72 |
|
|
wire [10:0] Q51, Q52, Q53, Q54, Q55, Q56, Q57, Q58;
|
| 73 |
|
|
wire [10:0] Q61, Q62, Q63, Q64, Q65, Q66, Q67, Q68;
|
| 74 |
|
|
wire [10:0] Q71, Q72, Q73, Q74, Q75, Q76, Q77, Q78;
|
| 75 |
|
|
wire [10:0] Q81, Q82, Q83, Q84, Q85, Q86, Q87, Q88;
|
| 76 |
|
|
|
| 77 |
|
|
cb_dct u5(
|
| 78 |
|
|
.clk(clk),.rst(rst), .enable(enable), .data_in(data_in),
|
| 79 |
|
|
.Z11_final(Z11_final), .Z12_final(Z12_final),
|
| 80 |
|
|
.Z13_final(Z13_final), .Z14_final(Z14_final), .Z15_final(Z15_final), .Z16_final(Z16_final),
|
| 81 |
|
|
.Z17_final(Z17_final), .Z18_final(Z18_final), .Z21_final(Z21_final), .Z22_final(Z22_final),
|
| 82 |
|
|
.Z23_final(Z23_final), .Z24_final(Z24_final), .Z25_final(Z25_final), .Z26_final(Z26_final),
|
| 83 |
|
|
.Z27_final(Z27_final), .Z28_final(Z28_final), .Z31_final(Z31_final), .Z32_final(Z32_final),
|
| 84 |
|
|
.Z33_final(Z33_final), .Z34_final(Z34_final), .Z35_final(Z35_final), .Z36_final(Z36_final),
|
| 85 |
|
|
.Z37_final(Z37_final), .Z38_final(Z38_final), .Z41_final(Z41_final), .Z42_final(Z42_final),
|
| 86 |
|
|
.Z43_final(Z43_final), .Z44_final(Z44_final), .Z45_final(Z45_final), .Z46_final(Z46_final),
|
| 87 |
|
|
.Z47_final(Z47_final), .Z48_final(Z48_final), .Z51_final(Z51_final), .Z52_final(Z52_final),
|
| 88 |
|
|
.Z53_final(Z53_final), .Z54_final(Z54_final), .Z55_final(Z55_final), .Z56_final(Z56_final),
|
| 89 |
|
|
.Z57_final(Z57_final), .Z58_final(Z58_final), .Z61_final(Z61_final), .Z62_final(Z62_final),
|
| 90 |
|
|
.Z63_final(Z63_final), .Z64_final(Z64_final), .Z65_final(Z65_final), .Z66_final(Z66_final),
|
| 91 |
|
|
.Z67_final(Z67_final), .Z68_final(Z68_final), .Z71_final(Z71_final), .Z72_final(Z72_final),
|
| 92 |
|
|
.Z73_final(Z73_final), .Z74_final(Z74_final), .Z75_final(Z75_final), .Z76_final(Z76_final),
|
| 93 |
|
|
.Z77_final(Z77_final), .Z78_final(Z78_final), .Z81_final(Z81_final), .Z82_final(Z82_final),
|
| 94 |
|
|
.Z83_final(Z83_final), .Z84_final(Z84_final), .Z85_final(Z85_final), .Z86_final(Z86_final),
|
| 95 |
|
|
.Z87_final(Z87_final), .Z88_final(Z88_final), .output_enable(dct_enable));
|
| 96 |
|
|
|
| 97 |
|
|
cb_quantizer u6(
|
| 98 |
|
|
.clk(clk),.rst(rst),.enable(dct_enable),
|
| 99 |
|
|
.Z11(Z11_final), .Z12(Z12_final), .Z13(Z13_final), .Z14(Z14_final),
|
| 100 |
|
|
.Z15(Z15_final), .Z16(Z16_final), .Z17(Z17_final), .Z18(Z18_final),
|
| 101 |
|
|
.Z21(Z21_final), .Z22(Z22_final), .Z23(Z23_final), .Z24(Z24_final),
|
| 102 |
|
|
.Z25(Z25_final), .Z26(Z26_final), .Z27(Z27_final), .Z28(Z28_final),
|
| 103 |
|
|
.Z31(Z31_final), .Z32(Z32_final), .Z33(Z33_final), .Z34(Z34_final),
|
| 104 |
|
|
.Z35(Z35_final), .Z36(Z36_final), .Z37(Z37_final), .Z38(Z38_final),
|
| 105 |
|
|
.Z41(Z41_final), .Z42(Z42_final), .Z43(Z43_final), .Z44(Z44_final),
|
| 106 |
|
|
.Z45(Z45_final), .Z46(Z46_final), .Z47(Z47_final), .Z48(Z48_final),
|
| 107 |
|
|
.Z51(Z51_final), .Z52(Z52_final), .Z53(Z53_final), .Z54(Z54_final),
|
| 108 |
|
|
.Z55(Z55_final), .Z56(Z56_final), .Z57(Z57_final), .Z58(Z58_final),
|
| 109 |
|
|
.Z61(Z61_final), .Z62(Z62_final), .Z63(Z63_final), .Z64(Z64_final),
|
| 110 |
|
|
.Z65(Z65_final), .Z66(Z66_final), .Z67(Z67_final), .Z68(Z68_final),
|
| 111 |
|
|
.Z71(Z71_final), .Z72(Z72_final), .Z73(Z73_final), .Z74(Z74_final),
|
| 112 |
|
|
.Z75(Z75_final), .Z76(Z76_final), .Z77(Z77_final), .Z78(Z78_final),
|
| 113 |
|
|
.Z81(Z81_final), .Z82(Z82_final), .Z83(Z83_final), .Z84(Z84_final),
|
| 114 |
|
|
.Z85(Z85_final), .Z86(Z86_final), .Z87(Z87_final), .Z88(Z88_final),
|
| 115 |
|
|
.Q11(Q11), .Q12(Q12), .Q13(Q13), .Q14(Q14), .Q15(Q15), .Q16(Q16), .Q17(Q17), .Q18(Q18),
|
| 116 |
|
|
.Q21(Q21), .Q22(Q22), .Q23(Q23), .Q24(Q24), .Q25(Q25), .Q26(Q26), .Q27(Q27), .Q28(Q28),
|
| 117 |
|
|
.Q31(Q31), .Q32(Q32), .Q33(Q33), .Q34(Q34), .Q35(Q35), .Q36(Q36), .Q37(Q37), .Q38(Q38),
|
| 118 |
|
|
.Q41(Q41), .Q42(Q42), .Q43(Q43), .Q44(Q44), .Q45(Q45), .Q46(Q46), .Q47(Q47), .Q48(Q48),
|
| 119 |
|
|
.Q51(Q51), .Q52(Q52), .Q53(Q53), .Q54(Q54), .Q55(Q55), .Q56(Q56), .Q57(Q57), .Q58(Q58),
|
| 120 |
|
|
.Q61(Q61), .Q62(Q62), .Q63(Q63), .Q64(Q64), .Q65(Q65), .Q66(Q66), .Q67(Q67), .Q68(Q68),
|
| 121 |
|
|
.Q71(Q71), .Q72(Q72), .Q73(Q73), .Q74(Q74), .Q75(Q75), .Q76(Q76), .Q77(Q77), .Q78(Q78),
|
| 122 |
|
|
.Q81(Q81), .Q82(Q82), .Q83(Q83), .Q84(Q84), .Q85(Q85), .Q86(Q86), .Q87(Q87), .Q88(Q88),
|
| 123 |
|
|
.out_enable(quantizer_enable));
|
| 124 |
|
|
|
| 125 |
|
|
cb_huff u7(.clk(clk), .rst(rst), .enable(quantizer_enable),
|
| 126 |
|
|
.Cb11(Q11), .Cb12(Q21), .Cb13(Q31), .Cb14(Q41), .Cb15(Q51), .Cb16(Q61), .Cb17(Q71), .Cb18(Q81),
|
| 127 |
|
|
.Cb21(Q12), .Cb22(Q22), .Cb23(Q32), .Cb24(Q42), .Cb25(Q52), .Cb26(Q62), .Cb27(Q72), .Cb28(Q82),
|
| 128 |
|
|
.Cb31(Q13), .Cb32(Q23), .Cb33(Q33), .Cb34(Q43), .Cb35(Q53), .Cb36(Q63), .Cb37(Q73), .Cb38(Q83),
|
| 129 |
|
|
.Cb41(Q14), .Cb42(Q24), .Cb43(Q34), .Cb44(Q44), .Cb45(Q54), .Cb46(Q64), .Cb47(Q74), .Cb48(Q84),
|
| 130 |
|
|
.Cb51(Q15), .Cb52(Q25), .Cb53(Q35), .Cb54(Q45), .Cb55(Q55), .Cb56(Q65), .Cb57(Q75), .Cb58(Q85),
|
| 131 |
|
|
.Cb61(Q16), .Cb62(Q26), .Cb63(Q36), .Cb64(Q46), .Cb65(Q56), .Cb66(Q66), .Cb67(Q76), .Cb68(Q86),
|
| 132 |
|
|
.Cb71(Q17), .Cb72(Q27), .Cb73(Q37), .Cb74(Q47), .Cb75(Q57), .Cb76(Q67), .Cb77(Q77), .Cb78(Q87),
|
| 133 |
|
|
.Cb81(Q18), .Cb82(Q28), .Cb83(Q38), .Cb84(Q48), .Cb85(Q58), .Cb86(Q68), .Cb87(Q78), .Cb88(Q88),
|
| 134 |
|
|
.JPEG_bitstream(JPEG_bitstream), .data_ready(data_ready), .output_reg_count(cb_orc),
|
| 135 |
|
|
.end_of_block_empty(end_of_block_empty));
|
| 136 |
|
|
|
| 137 |
|
|
|
| 138 |
|
|
endmodule
|