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

📄 jpeg_regdata.v

📁 jpeg格式到bmp格式的硬件实现
💻 V
字号:
//---------------------------------------------------------------------------// File Name    : jpeg_regdata.v// Module Name  : jpeg_regdata// Description  : get Data// Project              : JPEG Decoder// Belong to    : // Author               : H.Ishihara// E-Mail               : hidemi@sweetcafe.jp// HomePage             : http://www.sweetcafe.jp/// Date                 : 2007/04/11// Rev.                 : 1.03//---------------------------------------------------------------------------// Rev. Date             Description//---------------------------------------------------------------------------// 1.01 2006/10/01 1st Release// 1.02 2006/10/04 Remove a RegEnd register.//                                        When reset, clear on OutEnable,PreEnable,DataOut registers.//                                        Remove some comments.// 1.03 2007/04/11 Don't OutEnable, ImageEnable == 1 and DataOut == 0xFFD9XXXX//                 Stop ReadEnable with DataEnd(after 0xFFD9 of ImageData)//---------------------------------------------------------------------------// $Id: //---------------------------------------------------------------------------`timescale 1ps / 1ps        module jpeg_regdata(        rst,        clk,        // Read Data        DataIn,                 //         DataInEnable,   // Data Enable        DataInRead,             // Data Read        // DataOut        DataOut,                // Data Out        DataOutEnable,  // Data Out Enable        //         ImageEnable,        ProcessIdle,                // UseData        UseBit,         // Used data bit        UseWidth,       // Used data bit width        UseByte,        // Used data byte        UseWord         // Used data word        );        input                   rst;        input                   clk;        input [31:0]    DataIn;        input                   DataInEnable;        output                  DataInRead;        output [31:0]   DataOut;        output                  DataOutEnable;        input                   ImageEnable;        input                   ProcessIdle;                input                   UseBit;        input [6:0]             UseWidth;        input                   UseByte;        input                   UseWord;        wire                    RegValid;        reg [95:0]              RegData;        reg [7:0]               RegWidth;        reg                             DataEnd;        assign                  RegValid        = RegWidth > 64;        assign                  DataInRead      = RegValid == 1'b0 & DataInEnable == 1'b1;                always @(posedge clk or negedge rst) begin                if(!rst) begin                        RegData  <= 96'd0;                        RegWidth <= 8'h00;                end else begin                        if(RegValid == 1'b0 & (DataInEnable == 1'b1 | DataEnd == 1'b1)) begin                                if(ImageEnable == 1'b1) begin                                        if(RegData[39: 8] == 32'hFF00FF00) begin                                                RegWidth                <= RegWidth + 16;                                                RegData[95:64]  <= {8'h00,RegData[71:48]};                                                RegData[63:32]  <= {RegData[47:40],16'hFFFF,RegData[7:0]};                                        end else if(RegData[39:24] == 16'hFF00 &                                                RegData[15: 0] == 16'hFF00) begin                                                RegWidth                <= RegWidth + 16;                                                RegData[95:64]  <= {8'h00,RegData[71:48]};                                                RegData[63:32]  <= {RegData[47:40],8'hFF,RegData[23:16],8'hFF};                                        end else if(RegData[31: 0] == 32'hFF00FF00) begin                                                RegWidth                <= RegWidth + 16;                                                RegData[95:64]  <= {16'h0000,RegData[71:56]};                                                RegData[63:32]  <= {RegData[55:40],16'hFFFF};                                        end else if(RegData[39:24] == 16'hFF00) begin                                                RegWidth                <= RegWidth + 24;                                                RegData[95:64]  <= {RegData[71:40]};                                                RegData[63:32]  <= {8'hFF,RegData[23:0]};                                        end else if(RegData[31:16] == 16'hFF00) begin                                                RegWidth                <= RegWidth + 24;                                                RegData[95:64]  <= {RegData[71:40]};                                                RegData[63:32]  <= {RegData[39:32],8'hFF,RegData[15:0]};                                        end else if(RegData[23: 8] == 16'hFF00) begin                                                RegWidth                <= RegWidth + 24;                                                RegData[95:64]  <= {RegData[71:40]};                                                RegData[63:32]  <= {RegData[39:32],RegData[31:24],8'hFF,RegData[7:0]};                                        end else if(RegData[15: 0] == 16'hFF00) begin                                                RegWidth                <= RegWidth + 24;                                                RegData[95:64]  <= {RegData[71:40]};                                                RegData[63:32]  <= {RegData[39:32],RegData[31:16],8'hFF};                                        end else begin                                                RegWidth                <= RegWidth + 32;                                                RegData[95:64]  <= RegData[63:32];                                                RegData[63:32]  <= RegData[31:0];                                        end                                end else begin                                        RegWidth                <= RegWidth + 32;                                        RegData[95:64]  <= RegData[63:32];                                        RegData[63:32]  <= RegData[31:0];                                end                                RegData[31: 0] <= {DataIn[7:0],DataIn[15:8],DataIn[23:16],DataIn[31:24]};                        end else if(UseBit == 1'b1) begin                                RegWidth <= RegWidth - UseWidth;                        end else if(UseByte == 1'b1) begin                                RegWidth <= RegWidth - 8;                        end else if(UseWord == 1'b1) begin                                RegWidth <= RegWidth - 16;                        end                end        end        always @(posedge clk or negedge rst) begin                if(!rst) begin                        DataEnd <= 1'b0;                end else begin                        if(ProcessIdle) begin                                DataEnd <= 1'b0;                        end else if(ImageEnable == 1'b1 & (RegData[39:24] == 16'hFFD9 | RegData[31:16] == 16'hFFD9 | RegData[23: 8] == 16'hFFD9 | RegData[15: 0] == 16'hFFD9)) begin                                DataEnd <= 1'b1;                        end                end        end        function [31:0] SliceData;                input [95:0] RegData;                input [7:0]  RegWidth;                case(RegWidth)                        8'd65: SliceData = RegData[64:33];                        8'd66: SliceData = RegData[65:34];                        8'd67: SliceData = RegData[66:35];                        8'd68: SliceData = RegData[67:36];                        8'd69: SliceData = RegData[68:37];                        8'd70: SliceData = RegData[69:38];                        8'd71: SliceData = RegData[70:39];                        8'd72: SliceData = RegData[71:40];                        8'd73: SliceData = RegData[72:41];                        8'd74: SliceData = RegData[73:42];                        8'd75: SliceData = RegData[74:43];                        8'd76: SliceData = RegData[75:44];                        8'd77: SliceData = RegData[76:45];                        8'd78: SliceData = RegData[77:46];                        8'd79: SliceData = RegData[78:47];                        8'd80: SliceData = RegData[79:48];                        8'd81: SliceData = RegData[80:49];                        8'd82: SliceData = RegData[81:50];                        8'd83: SliceData = RegData[82:51];                        8'd84: SliceData = RegData[83:52];                        8'd85: SliceData = RegData[84:53];                        8'd86: SliceData = RegData[85:54];                        8'd87: SliceData = RegData[86:55];                        8'd88: SliceData = RegData[87:56];                        8'd89: SliceData = RegData[88:57];                        8'd90: SliceData = RegData[89:58];                        8'd91: SliceData = RegData[90:59];                        8'd92: SliceData = RegData[91:60];                        8'd93: SliceData = RegData[92:61];                        8'd94: SliceData = RegData[93:62];                        8'd95: SliceData = RegData[94:63];                        8'd96: SliceData = RegData[95:64];                        default: SliceData = 32'h00000000;                endcase        endfunction        reg                     OutEnable;        reg                     PreEnable;                reg [31:0]              DataOut;        always @(posedge clk or negedge rst) begin                if(!rst) begin                        OutEnable       <= 1'b0;                        PreEnable       <= 1'b0;                        DataOut         <= 32'h00000000;                end else begin                        OutEnable       <= RegWidth >64;                        PreEnable       <= (UseBit == 1'b1 | UseByte == 1'b1 | UseWord == 1'b1);                        DataOut         <= SliceData(RegData,RegWidth);                end        end        assign DataOutEnable = (PreEnable == 1'b0)?OutEnable:1'b0;                endmodule  

⌨️ 快捷键说明

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