⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpeg_hm_decode.v

📁 jpeg格式到bmp格式的硬件实现
💻 V
📖 第 1 页 / 共 3 页
字号:
                       HaffumanTable[4]  <= HaffumanTable3r[4];                       HaffumanNumber[4] <= HaffumanNumber3r[4];                       HaffumanTable[5]  <= HaffumanTable3r[5];                       HaffumanNumber[5] <= HaffumanNumber3r[5];                       HaffumanTable[6]  <= HaffumanTable3r[6];                       HaffumanNumber[6] <= HaffumanNumber3r[6];                       HaffumanTable[7]  <= HaffumanTable3r[7];                       HaffumanNumber[7] <= HaffumanNumber3r[7];                       HaffumanTable[8]  <= HaffumanTable3r[8];                       HaffumanNumber[8] <= HaffumanNumber3r[8];                       HaffumanTable[9]  <= HaffumanTable3r[9];                       HaffumanNumber[9] <= HaffumanNumber3r[9];                       HaffumanTable[10]  <= HaffumanTable3r[10];                       HaffumanNumber[10] <= HaffumanNumber3r[10];                       HaffumanTable[11]  <= HaffumanTable3r[11];                       HaffumanNumber[11] <= HaffumanNumber3r[11];                       HaffumanTable[12]  <= HaffumanTable3r[12];                       HaffumanNumber[12] <= HaffumanNumber3r[12];                       HaffumanTable[13]  <= HaffumanTable3r[13];                       HaffumanNumber[13] <= HaffumanNumber3r[13];                       HaffumanTable[14]  <= HaffumanTable3r[14];                       HaffumanNumber[14] <= HaffumanNumber3r[14];                       HaffumanTable[15]  <= HaffumanTable3r[15];                       HaffumanNumber[15] <= HaffumanNumber3r[15];                 end // else: !if(ProcessCount == 0)              end // else: !if(ProcessColor[2] == 1'b0)           end // case: Phase1           // compare table           Phase2: begin              Process    <= Phase4;				if(ProcessData[31:16] >= HaffumanTable[0])	Place[0] <= 1'b1;				else												Place[0] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[1])	Place[1] <= 1'b1;				else												Place[1] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[2])	Place[2] <= 1'b1;				else												Place[2] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[3])	Place[3] <= 1'b1;				else												Place[3] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[4])	Place[4] <= 1'b1;				else												Place[4] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[5])	Place[5] <= 1'b1;				else												Place[5] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[6])	Place[6] <= 1'b1;				else												Place[6] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[7])	Place[7] <= 1'b1;				else												Place[7] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[8])	Place[8] <= 1'b1;				else												Place[8] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[9])	Place[9] <= 1'b1;				else												Place[9] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[10])	Place[10] <= 1'b1;				else												Place[10] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[11])	Place[11] <= 1'b1;				else												Place[11] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[12])	Place[12] <= 1'b1;				else												Place[12] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[13])	Place[13] <= 1'b1;				else												Place[13] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[14])	Place[14] <= 1'b1;				else												Place[14] <= 1'b0;				if(ProcessData[31:16] >= HaffumanTable[15])	Place[15] <= 1'b1;				else												Place[15] <= 1'b0;           end           // shift code           Phase4: begin              Process <= Phase6;              case (Place)                16'b0000000000000001: begin                   TableCode   <= {15'h0000,HaffumanTable[0][15]};                   NumberCode  <= HaffumanNumber[0];                   CodeNumber  <= 4'h0;                   DataNumber  <= {15'h0000,ProcessData[31]};                   ProcessData <= {ProcessData[30:0],1'b0};                end                16'b0000000000000011: begin                   TableCode   <= {14'h0000,HaffumanTable[1][15:14]};                   NumberCode  <= HaffumanNumber[1];                   CodeNumber  <= 4'h1;                   DataNumber  <= {14'h0000,ProcessData[31:30]};                   ProcessData <= {ProcessData[29:0],2'b00};                end                16'b0000000000000111: begin                   TableCode   <= {13'h0000,HaffumanTable[2][15:13]};                   NumberCode  <= HaffumanNumber[2];                   CodeNumber  <= 4'h2;                   DataNumber  <= {13'h0000,ProcessData[31:29]};                   ProcessData <= {ProcessData[28:0],3'b000};                end                16'b0000000000001111: begin                   TableCode   <= {12'h000,HaffumanTable[3][15:12]};                   NumberCode  <= HaffumanNumber[3];                   CodeNumber  <= 4'h3;                   DataNumber  <= {12'h000,ProcessData[31:28]};                   ProcessData <= {ProcessData[27:0],4'h0};                end                16'b0000000000011111: begin                   TableCode   <= {11'h000,HaffumanTable[4][15:11]};                   NumberCode  <= HaffumanNumber[4];                   CodeNumber  <= 4'h4;                   DataNumber  <= {11'h000,ProcessData[31:27]};                   ProcessData <= {ProcessData[26:0],5'h00};                end                16'b0000000000111111: begin                   TableCode   <= {10'h000,HaffumanTable[5][15:10]};                   NumberCode  <= HaffumanNumber[5];                   CodeNumber  <= 4'h5;                   DataNumber  <= {10'h000,ProcessData[31:26]};                   ProcessData <= {ProcessData[25:0],6'h00};                end                16'b0000000001111111: begin                   TableCode   <= {9'h000,HaffumanTable[6][15:9]};                   NumberCode  <= HaffumanNumber[6];                   CodeNumber  <= 4'h6;                   DataNumber  <= {9'h000,ProcessData[31:25]};                   ProcessData <= {ProcessData[24:0],7'h00};                end                16'b0000000011111111: begin                   TableCode   <= {8'h00,HaffumanTable[7][15:8]};                   NumberCode  <= HaffumanNumber[7];                   CodeNumber  <= 4'h7;                   DataNumber  <= {8'h00,ProcessData[31:24]};                   ProcessData <= {ProcessData[23:0],8'h00};                end                16'b0000000111111111: begin                   TableCode   <= {7'h00,HaffumanTable[8][15:7]};                   NumberCode  <= HaffumanNumber[8];                   CodeNumber  <= 4'h8;                   DataNumber  <= {7'h00,ProcessData[31:23]};                   ProcessData <= {ProcessData[22:0],9'h000};                end                16'b0000001111111111: begin                   TableCode   <= {6'h00,HaffumanTable[9][15:6]};                   NumberCode  <= HaffumanNumber[9];                   CodeNumber  <= 4'h9;                   DataNumber  <= {6'h00,ProcessData[31:22]};                   ProcessData <= {ProcessData[21:0],10'h000};                end                16'b0000011111111111: begin                   TableCode   <= {5'h00,HaffumanTable[10][15:5]};                   NumberCode  <= HaffumanNumber[10];                   CodeNumber  <= 4'hA;                   DataNumber  <= {5'h00,ProcessData[31:21]};                   ProcessData <= {ProcessData[20:0],11'h000};                end                16'b0000111111111111: begin                   TableCode   <= {4'h0,HaffumanTable[11][15:4]};                   NumberCode  <= HaffumanNumber[11];                   CodeNumber  <= 4'hB;                   DataNumber  <= {4'h0,ProcessData[31:20]};                   ProcessData <= {ProcessData[19:0],12'h000};                end                16'b0001111111111111: begin                   TableCode   <= {3'h0,HaffumanTable[12][15:3]};                   NumberCode  <= HaffumanNumber[12];                   CodeNumber  <= 4'hC;                   DataNumber  <= {3'h0,ProcessData[31:19]};                   ProcessData <= {ProcessData[18:0],13'h0000};                end                16'b0011111111111111: begin                   TableCode   <= {2'h0,HaffumanTable[13][15:2]};                   NumberCode  <= HaffumanNumber[13];                   CodeNumber  <= 4'hD;                   DataNumber  <= {2'h0,ProcessData[31:18]};                   ProcessData <= {ProcessData[17:0],14'h0000};                end                16'b0111111111111111: begin                   TableCode   <= {1'h0,HaffumanTable[14][15:1]};                   NumberCode  <= HaffumanNumber[14];                   CodeNumber  <= 4'hE;                   DataNumber  <= {1'h0,ProcessData[31:17]};                   ProcessData <= {ProcessData[16:0],15'h0000};                end                16'b1111111111111111: begin                   TableCode   <= HaffumanTable[15];                   NumberCode  <= HaffumanNumber[15];                   CodeNumber  <= 4'hF;                   DataNumber  <= ProcessData[31:16] ;                   ProcessData <= {ProcessData[15:0],16'h0000};                end              endcase // case(Place)           end // case: Phase4           Phase5: begin              Process <= Phase6;              //SubData <= DataNumber - TableCode;              //OutDhtNumber <= DataNumber - TableCode + NumberCode;           end           Phase6: begin              if(DataOutIdle == 1'b1) Process   <= Phase7;              //DhtNumber <= SubData[7:0] + NumberCode;           end           Phase7: begin              Process          <= Phase9;              OutZero          <= DhtZero;              UseWidth         <= CodeNumber   + DhtWidth +1;              if(ProcessCount == 0) begin                 NextProcessCount <= 7'd1;                 OutEnable        <= 1'b1;              end else begin                 if(DhtZero == 4'h0 & DhtWidth == 4'h0) begin                    ProcessCount     <= 7'd64;                    NextProcessCount <= 7'd64;                    OutEnable        <= 1'b0;                 end else if(DhtZero == 4'hF & DhtWidth == 4'h0) begin                    ProcessCount     <= ProcessCount + 4'hF;                    NextProcessCount <= ProcessCount + 4'hF;                    OutEnable        <= 1'b0;                 end else begin                    ProcessCount     <= ProcessCount + DhtZero;                    NextProcessCount <= ProcessCount + DhtZero +1;                    OutEnable        <= 1'b1;                 end              end // else: !if(ProcessCount == 0)                               if(ProcessData[31] == 1'b0 & DhtWidth != 0) begin                 OutCode <= (OutCodeP | SubCode) + 16'h0001;              end else begin                 OutCode <= OutCodeP;              end           end // case: Phase7           Phase8: begin              Process <= Phase9;           end           Phase9: begin              Process <= Phase11;              if(ProcessCount == 0) begin                 if(ProcessColor[2] == 1'b0) begin                    OutCode    <= OutCode + PreData[0];                    PreData[0] <= OutCode + PreData[0];                 end else begin                    if(ProcessColor[0] == 1'b0) begin                       OutCode    <= OutCode + PreData[1];                       PreData[1] <= OutCode + PreData[1];                    end else begin                       OutCode    <= OutCode + PreData[2];                       PreData[2] <= OutCode + PreData[2];                    end                 end // else: !if(ProcessColor[2] == 1'b0)              end // if (ProcessCount == 0)           end // case: Phase9           Phase10: begin              Process   <= Phase11;              //OutData   <= DqtData * OutCode;           end           Phase11: begin              OutEnable <= 1'b0;              if(NextProcessCount <64) begin                 Process      <= Phase1;                 ProcessCount <= NextProcessCount;              end else begin                 ProcessCount  <= 7'd0;                 DataOutEnable <= 1'b1;                 DataOutColor  <= ProcessColor;                 if(ProcessColor == 5) begin                    ProcessColor <= 3'b000;                    if(DataInRun == 1'b0) Process <= ProcIdle;                    else Process <= Phase1;                 end else begin                    Process <= Phase1;                    ProcessColor <= ProcessColor +1;                 end              end // else: !if(NextProcessCount <64)           end // case: Phase11         endcase // case(Process)      end // else: !if(!rst)   end // always @ (posedge clk or negedge rst)      assign DhtColor[1]    = ProcessColor[2];   assign DhtColor[0]    = ProcessCount != 0;   //assign DhtNumber      = OutDhtNumber[7:0];   assign DhtNumber      = DataNumber - TableCode + NumberCode;   assign DqtColor       = ProcessColor[2];   assign DqtNumber      = ProcessCount[5:0];   //assign DecodeUseBit   = Process == Phase8;   assign DecodeUseBit   = Process == Phase9;   assign DecodeUseWidth = UseWidth;   assign DecodeEnable   = OutEnable == 1'b1 & Process == Phase11;   assign DecodeColor    = ProcessColor;   assign DecodeCount    = ProcessCount[5:0];   assign DecodeZero     = OutZero;   //assign DecodeCode     = OutData[15:0];   assign DecodeCode     = DqtData * OutCode;endmodule // jpeg_hm_decode

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -