📄 jpeg_hm_decode.v
字号:
// Haffuman Table reg [15:0] HaffumanTable [0:15]; // Haffuman Table Number reg [7:0] HaffumanNumber [0:15]; reg [15:0] Place; // Place bit reg [15:0] TableCode; // Table Code reg [7:0] NumberCode; // Start Number of Table Code reg [3:0] CodeNumber; // Haffuman code width reg [15:0] DataNumber; // Haffuman code //reg [15:0] SubData; // Haffuman Dht Number //reg [7:0] OutDhtNumber; // Output Dht Number reg [2:0] ProcessColor; reg [6:0] ProcessCount; reg [6:0] NextProcessCount; reg OutEnable; // Output Enable reg [3:0] OutZero; // Output Zero Count reg [15:0] OutCode; // Output Data Code wire [15:0] OutCodeP; // Output Data Code reg [4:0] UseWidth; // Output used width //reg [23:0] OutData; reg DataOutEnable; reg [2:0] DataOutColor; reg signed [31:0] PreData [0:2]; wire [15:0] SubCode; parameter ProcIdle = 4'h0; parameter Phase1 = 4'h1; parameter Phase2 = 4'h2; parameter Phase3 = 4'h3; parameter Phase4 = 4'h4; parameter Phase5 = 4'h5; parameter Phase6 = 4'h6; parameter Phase7 = 4'h7; parameter Phase8 = 4'h8; parameter Phase9 = 4'h9; parameter Phase10 = 4'hA; parameter Phase11 = 4'hB;/* always @(*) begin case (DhtWidth) 4'h0: OutCodeP <= 16'h0000; 4'h1: OutCodeP <= {15'h0000,ProcessData[31]}; 4'h2: OutCodeP <= {14'h0000,ProcessData[31:30]}; 4'h3: OutCodeP <= {13'h0000,ProcessData[31:29]}; 4'h4: OutCodeP <= {12'h000, ProcessData[31:28]}; 4'h5: OutCodeP <= {11'h000, ProcessData[31:27]}; 4'h6: OutCodeP <= {10'h000, ProcessData[31:26]}; 4'h7: OutCodeP <= {9'h000, ProcessData[31:25]}; 4'h8: OutCodeP <= {8'h00, ProcessData[31:24]}; 4'h9: OutCodeP <= {7'h00, ProcessData[31:23]}; 4'hA: OutCodeP <= {6'h00, ProcessData[31:22]}; 4'hB: OutCodeP <= {5'h00, ProcessData[31:21]}; 4'hC: OutCodeP <= {4'h0, ProcessData[31:20]}; 4'hD: OutCodeP <= {3'h0, ProcessData[31:19]}; 4'hE: OutCodeP <= {2'h0, ProcessData[31:18]}; 4'hF: OutCodeP <= {1'h0, ProcessData[31:17]}; endcase // case(DhtWidth) case (DhtWidth) 4'h0: SubCode <= 16'hFFFF; 4'h1: SubCode <= 16'hFFFE; 4'h2: SubCode <= 16'hFFFC; 4'h3: SubCode <= 16'hFFF8; 4'h4: SubCode <= 16'hFFF0; 4'h5: SubCode <= 16'hFFE0; 4'h6: SubCode <= 16'hFFC0; 4'h7: SubCode <= 16'hFF80; 4'h8: SubCode <= 16'hFF00; 4'h9: SubCode <= 16'hFE00; 4'hA: SubCode <= 16'hFC00; 4'hB: SubCode <= 16'hF800; 4'hC: SubCode <= 16'hF000; 4'hD: SubCode <= 16'hE000; 4'hE: SubCode <= 16'hC000; 4'hF: SubCode <= 16'h8000; endcase // case(DhtWidth) end // always @ (*)*/ function [15:0] OutCodePSel; input [3:0] DhtWidth; input [31:0] ProcessData; begin case (DhtWidth) 4'h0: OutCodePSel = 16'h0000; 4'h1: OutCodePSel = {15'h0000,ProcessData[31]}; 4'h2: OutCodePSel = {14'h0000,ProcessData[31:30]}; 4'h3: OutCodePSel = {13'h0000,ProcessData[31:29]}; 4'h4: OutCodePSel = {12'h000, ProcessData[31:28]}; 4'h5: OutCodePSel = {11'h000, ProcessData[31:27]}; 4'h6: OutCodePSel = {10'h000, ProcessData[31:26]}; 4'h7: OutCodePSel = {9'h000, ProcessData[31:25]}; 4'h8: OutCodePSel = {8'h00, ProcessData[31:24]}; 4'h9: OutCodePSel = {7'h00, ProcessData[31:23]}; 4'hA: OutCodePSel = {6'h00, ProcessData[31:22]}; 4'hB: OutCodePSel = {5'h00, ProcessData[31:21]}; 4'hC: OutCodePSel = {4'h0, ProcessData[31:20]}; 4'hD: OutCodePSel = {3'h0, ProcessData[31:19]}; 4'hE: OutCodePSel = {2'h0, ProcessData[31:18]}; 4'hF: OutCodePSel = {1'h0, ProcessData[31:17]}; endcase // case(DhtWidth) end endfunction assign OutCodeP = OutCodePSel(DhtWidth, ProcessData); function [15:0] SubCodeSel; input [3:0] DhtWidth; begin case (DhtWidth) 4'h0: SubCodeSel = 16'hFFFF; 4'h1: SubCodeSel = 16'hFFFE; 4'h2: SubCodeSel = 16'hFFFC; 4'h3: SubCodeSel = 16'hFFF8; 4'h4: SubCodeSel = 16'hFFF0; 4'h5: SubCodeSel = 16'hFFE0; 4'h6: SubCodeSel = 16'hFFC0; 4'h7: SubCodeSel = 16'hFF80; 4'h8: SubCodeSel = 16'hFF00; 4'h9: SubCodeSel = 16'hFE00; 4'hA: SubCodeSel = 16'hFC00; 4'hB: SubCodeSel = 16'hF800; 4'hC: SubCodeSel = 16'hF000; 4'hD: SubCodeSel = 16'hE000; 4'hE: SubCodeSel = 16'hC000; 4'hF: SubCodeSel = 16'h8000; endcase // case(DhtWidth) end endfunction assign SubCode = SubCodeSel(DhtWidth); always @(posedge clk or negedge rst) begin if(!rst) begin Process <= ProcIdle; ProcessData <= 32'h00000000; OutEnable <= 1'b0; DataOutEnable <= 1'b0; DataOutColor <= 3'b000; PreData[0] <= 32'h00000000; PreData[1] <= 32'h00000000; PreData[2] <= 32'h00000000; UseWidth <= 7'h00; CodeNumber <= 4'd0; end else begin // if (!rst) case (Process) ProcIdle: begin if(DataInRun == 1'b1) begin Process <= Phase1; end else begin // Reset DC code PreData[0] <= 32'h00000000; PreData[1] <= 32'h00000000; PreData[2] <= 32'h00000000; end OutEnable <= 1'b0; ProcessColor <= 3'b000; ProcessCount <= 0; DataOutEnable <= 1'b0; DataOutColor <= 3'b000; end // case: ProcIdle // get a table-data and table-number Phase1: begin if(DataInEnable ==1'b1 & DataOutIdle == 1'b1) begin Process <= Phase2; ProcessData <= DataIn; end OutEnable <= 1'b0; DataOutEnable <= 1'b0; if(ProcessColor[2] == 1'b0) begin if(ProcessCount == 0) begin HaffumanTable[0] <= HaffumanTable0r[0]; HaffumanNumber[0] <= HaffumanNumber0r[0]; HaffumanTable[1] <= HaffumanTable0r[1]; HaffumanNumber[1] <= HaffumanNumber0r[1]; HaffumanTable[2] <= HaffumanTable0r[2]; HaffumanNumber[2] <= HaffumanNumber0r[2]; HaffumanTable[3] <= HaffumanTable0r[3]; HaffumanNumber[3] <= HaffumanNumber0r[3]; HaffumanTable[4] <= HaffumanTable0r[4]; HaffumanNumber[4] <= HaffumanNumber0r[4]; HaffumanTable[5] <= HaffumanTable0r[5]; HaffumanNumber[5] <= HaffumanNumber0r[5]; HaffumanTable[6] <= HaffumanTable0r[6]; HaffumanNumber[6] <= HaffumanNumber0r[6]; HaffumanTable[7] <= HaffumanTable0r[7]; HaffumanNumber[7] <= HaffumanNumber0r[7]; HaffumanTable[8] <= HaffumanTable0r[8]; HaffumanNumber[8] <= HaffumanNumber0r[8]; HaffumanTable[9] <= HaffumanTable0r[9]; HaffumanNumber[9] <= HaffumanNumber0r[9]; HaffumanTable[10] <= HaffumanTable0r[10]; HaffumanNumber[10] <= HaffumanNumber0r[10]; HaffumanTable[11] <= HaffumanTable0r[11]; HaffumanNumber[11] <= HaffumanNumber0r[11]; HaffumanTable[12] <= HaffumanTable0r[12]; HaffumanNumber[12] <= HaffumanNumber0r[12]; HaffumanTable[13] <= HaffumanTable0r[13]; HaffumanNumber[13] <= HaffumanNumber0r[13]; HaffumanTable[14] <= HaffumanTable0r[14]; HaffumanNumber[14] <= HaffumanNumber0r[14]; HaffumanTable[15] <= HaffumanTable0r[15]; HaffumanNumber[15] <= HaffumanNumber0r[15]; end else begin HaffumanTable[0] <= HaffumanTable1r[0]; HaffumanNumber[0] <= HaffumanNumber1r[0]; HaffumanTable[1] <= HaffumanTable1r[1]; HaffumanNumber[1] <= HaffumanNumber1r[1]; HaffumanTable[2] <= HaffumanTable1r[2]; HaffumanNumber[2] <= HaffumanNumber1r[2]; HaffumanTable[3] <= HaffumanTable1r[3]; HaffumanNumber[3] <= HaffumanNumber1r[3]; HaffumanTable[4] <= HaffumanTable1r[4]; HaffumanNumber[4] <= HaffumanNumber1r[4]; HaffumanTable[5] <= HaffumanTable1r[5]; HaffumanNumber[5] <= HaffumanNumber1r[5]; HaffumanTable[6] <= HaffumanTable1r[6]; HaffumanNumber[6] <= HaffumanNumber1r[6]; HaffumanTable[7] <= HaffumanTable1r[7]; HaffumanNumber[7] <= HaffumanNumber1r[7]; HaffumanTable[8] <= HaffumanTable1r[8]; HaffumanNumber[8] <= HaffumanNumber1r[8]; HaffumanTable[9] <= HaffumanTable1r[9]; HaffumanNumber[9] <= HaffumanNumber1r[9]; HaffumanTable[10] <= HaffumanTable1r[10]; HaffumanNumber[10] <= HaffumanNumber1r[10]; HaffumanTable[11] <= HaffumanTable1r[11]; HaffumanNumber[11] <= HaffumanNumber1r[11]; HaffumanTable[12] <= HaffumanTable1r[12]; HaffumanNumber[12] <= HaffumanNumber1r[12]; HaffumanTable[13] <= HaffumanTable1r[13]; HaffumanNumber[13] <= HaffumanNumber1r[13]; HaffumanTable[14] <= HaffumanTable1r[14]; HaffumanNumber[14] <= HaffumanNumber1r[14]; HaffumanTable[15] <= HaffumanTable1r[15]; HaffumanNumber[15] <= HaffumanNumber1r[15]; end // else: !if(ProcessCount == 0) end else begin // if (ProcessColor[2] == 1'b0) if(ProcessCount == 0) begin HaffumanTable[0] <= HaffumanTable2r[0]; HaffumanNumber[0] <= HaffumanNumber2r[0]; HaffumanTable[1] <= HaffumanTable2r[1]; HaffumanNumber[1] <= HaffumanNumber2r[1]; HaffumanTable[2] <= HaffumanTable2r[2]; HaffumanNumber[2] <= HaffumanNumber2r[2]; HaffumanTable[3] <= HaffumanTable2r[3]; HaffumanNumber[3] <= HaffumanNumber2r[3]; HaffumanTable[4] <= HaffumanTable2r[4]; HaffumanNumber[4] <= HaffumanNumber2r[4]; HaffumanTable[5] <= HaffumanTable2r[5]; HaffumanNumber[5] <= HaffumanNumber2r[5]; HaffumanTable[6] <= HaffumanTable2r[6]; HaffumanNumber[6] <= HaffumanNumber2r[6]; HaffumanTable[7] <= HaffumanTable2r[7]; HaffumanNumber[7] <= HaffumanNumber2r[7]; HaffumanTable[8] <= HaffumanTable2r[8]; HaffumanNumber[8] <= HaffumanNumber2r[8]; HaffumanTable[9] <= HaffumanTable2r[9]; HaffumanNumber[9] <= HaffumanNumber2r[9]; HaffumanTable[10] <= HaffumanTable2r[10]; HaffumanNumber[10] <= HaffumanNumber2r[10]; HaffumanTable[11] <= HaffumanTable2r[11]; HaffumanNumber[11] <= HaffumanNumber2r[11]; HaffumanTable[12] <= HaffumanTable2r[12]; HaffumanNumber[12] <= HaffumanNumber2r[12]; HaffumanTable[13] <= HaffumanTable2r[13]; HaffumanNumber[13] <= HaffumanNumber2r[13]; HaffumanTable[14] <= HaffumanTable2r[14]; HaffumanNumber[14] <= HaffumanNumber2r[14]; HaffumanTable[15] <= HaffumanTable2r[15]; HaffumanNumber[15] <= HaffumanNumber2r[15]; end else begin HaffumanTable[0] <= HaffumanTable3r[0]; HaffumanNumber[0] <= HaffumanNumber3r[0]; HaffumanTable[1] <= HaffumanTable3r[1]; HaffumanNumber[1] <= HaffumanNumber3r[1]; HaffumanTable[2] <= HaffumanTable3r[2]; HaffumanNumber[2] <= HaffumanNumber3r[2]; HaffumanTable[3] <= HaffumanTable3r[3]; HaffumanNumber[3] <= HaffumanNumber3r[3];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -