OpenCores
URL https://opencores.org/ocsvn/djpeg/djpeg/trunk

Subversion Repositories djpeg

[/] [djpeg/] [trunk/] [src/] [jpeg_ycbcr.v] - Diff between revs 6 and 9

Only display areas with differences | Details | Blame | View Log

Rev 6 Rev 9
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// File Name   : jpeg_ycbcr.v
// File Name   : jpeg_ycbcr.v
// Module Name : jpeg_ycbcr
// Module Name : jpeg_ycbcr
// Description : Convert to RGB from YCbCr 
// Description : Convert to RGB from YCbCr 
// Project     : JPEG Decoder
// Project     : JPEG Decoder
// Belong to   : 
// Belong to   : 
// Author      : H.Ishihara
// Author      : H.Ishihara
// E-Mail      : hidemi@sweetcafe.jp
// E-Mail      : hidemi@sweetcafe.jp
// HomePage    : http://www.sweetcafe.jp/
// HomePage    : http://www.sweetcafe.jp/
// Date        : 2006/10/01
// Date        : 2006/10/01
// Rev.        : 1.1
// Rev.        : 1.1
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Rev. Date       Description
// Rev. Date       Description
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// 1.01 2006/10/01 1st Release
// 1.01 2006/10/01 1st Release
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// $Id: 
 
//---------------------------------------------------------------------------
 
`timescale 1ps / 1ps
`timescale 1ps / 1ps
 
 
module jpeg_ycbcr
module jpeg_ycbcr(
  (
 
   rst,
   rst,
   clk,
    clk,
 
 
 
    ProcessInit,
 
 
   DataInEnable,
   DataInEnable,
   DataInPage,
    DataInPage,
   DataInCount,
    DataInCount,
   DataInIdle,
    DataInIdle,
   Data0In,
    Data0In,
   Data1In,
    Data1In,
   DataInBlockWidth,
    DataInBlockWidth,
 
 
   OutEnable,
    OutEnable,
   OutPixelX,
    OutPixelX,
   OutPixelY,
    OutPixelY,
   OutR,
    OutR,
   OutG,
    OutG,
   OutB
    OutB
   );
    );
 
 
   input          rst;
    input           rst;
   input          clk;
    input           clk;
 
 
 
    input           ProcessInit;
 
 
   input          DataInEnable;
   input          DataInEnable;
   input [2:0]    DataInPage;
    input [2:0]     DataInPage;
   input [1:0]    DataInCount;
    input [1:0]     DataInCount;
   output         DataInIdle;
    output          DataInIdle;
   input [8:0]    Data0In;
    input [8:0]     Data0In;
   input [8:0]    Data1In;
    input [8:0]     Data1In;
   input [11:0]   DataInBlockWidth;
    input [11:0]    DataInBlockWidth;
 
 
   output         OutEnable;
    output          OutEnable;
   output [15:0]  OutPixelX;
    output [15:0]   OutPixelX;
   output [15:0]  OutPixelY;
    output [15:0]   OutPixelY;
   output [7:0]   OutR;
    output [7:0]    OutR;
   output [7:0]   OutG;
    output [7:0]    OutG;
   output [7:0]   OutB;
    output [7:0]    OutB;
 
 
   reg            DataInBank;
 
   reg [2:0]      DataInColor;
   reg [2:0]      DataInColor;
   reg [11:0]     DataInBlockX;
    reg [11:0]      DataInBlockX;
   reg [11:0]     DataInBlockY;
   reg [11:0]     DataInBlockY;
   reg            BankAActive;
 
   reg            BankBActive;
 
   wire           BankAEnable;
 
   wire           BankBEnable;
 
 
 
   wire [8:0]     BankAY;
 
   wire [8:0]     BankACb;
 
   wire [8:0]     BankACr;
 
   wire [8:0]     BankBY;
 
   wire [8:0]     BankBCb;
 
   wire [8:0]     BankBCr;
 
 
 
   reg [11:0]     BankABlockX;
 
   reg [11:0]     BankABlockY;
 
   reg [11:0]     BankBBlockX;
 
   reg [11:0]     BankBBlockY;
 
 
 
   wire           ConvertEnable;
   wire           ConvertEnable;
 
    wire            ConvertRead;
   wire           ConvertBank;
   wire           ConvertBank;
   wire [7:0]     ConvertAddress;
    wire [7:0]      ConvertAddress;
   wire [8:0]     DataY;
    wire [8:0]      DataY;
   wire [8:0]     DataCb;
    wire [8:0]      DataCb;
   wire [8:0]     DataCr;
    wire [8:0]      DataCr;
   wire [11:0]    ConvertBlockX;
    wire [11:0]     ConvertBlockX;
   wire [11:0]    ConvertBlockY;
    wire [11:0]     ConvertBlockY;
 
 
   wire           BankAIdle;
 
   wire           BankBIdle;
 
 
 
   always @(posedge clk or negedge rst) begin
   always @(posedge clk or negedge rst) begin
      if(!rst) begin
      if(!rst) begin
         DataInBank   <= 1'b0;
 
         DataInColor  <= 3'b000;
         DataInColor  <= 3'b000;
         DataInBlockX <= 12'h000;
        end else begin
         DataInBlockY <= 12'h000;
            if(ProcessInit) begin
         BankAActive  <= 1'b0;
                DataInColor <= 3'b000;
         BankBActive  <= 1'b0;
            end else if(DataInEnable == 1'b1 & DataInPage == 3'b111 & DataInCount == 2'b11) begin
         BankABlockX  <= 12'h000;
 
         BankABlockY  <= 12'h000;
 
         BankBBlockX  <= 12'h000;
 
         BankBBlockY  <= 12'h000;
 
      end else begin // if (!rst)
 
         if(DataInEnable == 1'b1 & DataInColor == 3'b101 &
 
            DataInPage == 3'b111 & DataInCount == 2'b11) begin
 
         end
 
         if(DataInEnable == 1'b1 & DataInColor == 3'b101 &
 
            DataInPage == 3'b111 & DataInCount == 2'b11 &
 
            DataInBank == 1'b0   & BankAActive == 1'b0) begin
 
            BankAActive <= 1'b1;
 
            BankABlockX <= DataInBlockX;
 
            BankABlockY <= DataInBlockY;
 
         end else if(ConvertBank == 1'b0 & ConvertAddress == 7'b111) begin
 
            BankAActive <= 1'b0;
 
         end
 
         if(DataInEnable == 1'b1 & DataInColor == 3'b101 &
 
            DataInPage == 3'b111 & DataInCount == 2'b11 &
 
            DataInBank == 1'b1   & BankBActive == 1'b0) begin
 
            BankBActive <= 1'b1;
 
            BankBBlockX <= DataInBlockX;
 
            BankBBlockY <= DataInBlockY;
 
         end else if(ConvertBank == 1'b1 & ConvertAddress == 7'b111) begin
 
            BankBActive <= 1'b0;
 
         end
 
         if(DataInEnable == 1'b1 &
 
            DataInPage == 3'b111 & DataInCount == 2'b11) begin
 
            if(DataInColor == 3'b101) begin
            if(DataInColor == 3'b101) begin
               DataInColor <= 3'b000;
               DataInColor <= 3'b000;
               DataInBank <= ~DataInBank;
 
               if(DataInBlockWidth == DataInBlockX +1) begin
 
                  DataInBlockX <= 12'h000;
 
                  DataInBlockY <= DataInBlockY + 12'h001;
 
               end else begin
 
                  DataInBlockX <= DataInBlockX + 12'h001;
 
               end
 
            end else begin
            end else begin
               DataInColor <= DataInColor + 3'b001;
               DataInColor <= DataInColor + 3'b001;
            end // else: !if(DataInColor == 3'b101)
                end
         end // if (DataInEnable == 1'b1 &...
            end
 
 
      end // else: !if(!rst)
 
   end // always @ (posedge clk or negedge rst)
 
 
 
   assign BankAEnable = DataInEnable == 1'b1 & DataInBank == 1'b0;
 
   assign BankBEnable = DataInEnable == 1'b1 & DataInBank == 1'b1;
 
 
 
   /*
 
   assign ConvertBlockX = (ConvertBank)?BankBBlockX:BankABlockX;
 
   assign ConvertBlockY = (ConvertBank)?BankBBlockY:BankABlockY;
 
    */
 
 
 
   assign ConvertEnable = DataInEnable == 1'b1 & DataInColor == 3'b101 &
 
                          DataInPage == 3'b111 & DataInCount == 2'b11;
 
 
 
   assign DataInIdle = BankAActive == 1'b0 | BankBActive == 1'b0;
        end
 
    end
 
 
   //------------------------------------------------------------------------
    //------------------------------------------------------------------------
   // YCbCr Memory
    // YCbCr Memory
   //------------------------------------------------------------------------
   //------------------------------------------------------------------------
   jpeg_ycbcr_mem u_jpeg_ycbcr_mem0(
    jpeg_ycbcr_mem u_jpeg_ycbcr_mem(
 
        .rst            ( rst               ),
                                     .clk(clk),
                                     .clk(clk),
 
 
                                     .DataInEnable (BankAEnable),
        .DataInit       ( ProcessInit       ),
                                     .DataInColor  (DataInColor),
 
                                     .DataInPage   (DataInPage),
 
                                     .DataInCount  (DataInCount),
 
                                     .Data0In      (Data0In),
 
                                     .Data1In      (Data1In),
 
 
 
                                     .DataOutAddress (ConvertAddress),
 
                                     .DataOutY       (BankAY),
 
                                     .DataOutCb      (BankACb),
 
                                     .DataOutCr      (BankACr)
 
                                     );
 
   jpeg_ycbcr_mem u_jpeg_ycbcr_mem1(
 
                                     .clk(clk),
 
 
 
                                     .DataInEnable (BankBEnable),
        .DataInEnable   ( DataInEnable      ),
                                     .DataInColor  (DataInColor),
                                     .DataInColor  (DataInColor),
                                     .DataInPage   (DataInPage),
        .DataInPage     ( DataInPage        ),
                                     .DataInCount  (DataInCount),
        .DataInCount    ( DataInCount       ),
                                     .Data0In      (Data0In),
        .Data0In        ( Data0In           ),
                                     .Data1In      (Data1In),
        .Data1In        ( Data1In           ),
 
 
 
        .DataOutEnable  ( ConvertEnable     ),
                                     .DataOutAddress (ConvertAddress),
                                     .DataOutAddress (ConvertAddress),
                                     .DataOutY       (BankBY),
        .DataOutRead    ( ConvertRead       ),
                                     .DataOutCb      (BankBCb),
        .DataOutY       ( DataY             ),
                                     .DataOutCr      (BankBCr)
        .DataOutCb      ( DataCb            ),
 
        .DataOutCr      ( DataCr            )
                                     );
                                     );
 
 
   reg    ConvertBankD;
 
   always @(posedge clk or negedge rst) begin
 
      if(!rst) ConvertBankD <= 1'b0;
 
      else     ConvertBankD <= ConvertBank;
 
   end
 
 
 
 
 
   assign DataY  = (ConvertBankD)?BankBY :BankAY;
 
   assign DataCb = (ConvertBankD)?BankBCb:BankACb;
 
   assign DataCr = (ConvertBankD)?BankBCr:BankACr;
 
 
 
   //------------------------------------------------------------------------
   //------------------------------------------------------------------------
   // YCbCr to RGB
    // YCbCr to RGB
   //------------------------------------------------------------------------
   //------------------------------------------------------------------------
   jpeg_ycbcbr2rgb u_jpeg_ycbcr2rgb(
    always @(posedge clk or negedge rst) begin
 
        if(!rst) begin
 
            DataInBlockX <= 12'h000;
 
            DataInBlockY <= 12'h000;
 
        end else begin
 
            if(ProcessInit) begin
 
                DataInBlockX <= 12'h000;
 
                DataInBlockY <= 12'h000;
 
            end else if((ConvertRead == 1'b1) && (ConvertAddress == 5'h1F)) begin
 
                if(DataInBlockWidth == DataInBlockX +1) begin
 
                    DataInBlockX <= 12'h000;
 
                    DataInBlockY <= DataInBlockY + 12'h001;
 
                end else begin
 
                    DataInBlockX <= DataInBlockX + 12'h001;
 
                end
 
            end
 
        end
 
    end
 
 
 
    jpeg_ycbcr2rgb u_jpeg_yccr2rgb(
                                    .rst(rst),
                                    .rst(rst),
                                    .clk(clk),
        .clk        ( clk               ),
 
 
                                    .InEnable  ( ConvertEnable  ),
                                    .InEnable  ( ConvertEnable  ),
 
        .InRead     ( ConvertRead       ),
                                    .InBlockX  ( DataInBlockX  ),
                                    .InBlockX  ( DataInBlockX  ),
                                    .InBlockY  ( DataInBlockY  ),
                                    .InBlockY  ( DataInBlockY  ),
                                    .InIdle    ( ConvertIdle    ),
 
                                    .InBank    ( ConvertBank    ),
 
                                    .InAddress ( ConvertAddress ),
                                    .InAddress ( ConvertAddress ),
                                    .InY       ( DataY          ),
        .InY        ( DataY             ),
                                    .InCb      ( DataCb         ),
        .InCb       ( DataCb            ),
                                    .InCr      ( DataCr         ),
        .InCr       ( DataCr            ),
 
 
                                    .OutEnable ( OutEnable      ),
        .OutEnable  ( OutEnable         ),
                                    .OutPixelX ( OutPixelX      ),
        .OutPixelX  ( OutPixelX         ),
                                    .OutPixelY ( OutPixelY      ),
        .OutPixelY  ( OutPixelY         ),
                                    .OutR      ( OutR           ),
        .OutR       ( OutR              ),
                                    .OutG      ( OutG           ),
        .OutG       ( OutG              ),
                                    .OutB      ( OutB           )
        .OutB       ( OutB              )
                                    );
                                    );
endmodule // jpeg_ycbcr
endmodule
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.