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

📄 jpeg_ycbcr_mem.v

📁 jpeg格式到bmp格式的硬件实现
💻 V
字号:
//---------------------------------------------------------------------------// File Name   : jpeg_ycbcr_mem.v// Module Name : jpeg_ycbcr_mem// Description : Memory for YCbCr2RGB// Project     : JPEG Decoder// Belong to   : // Author      : H.Ishihara// E-Mail      : hidemi@sweetcafe.jp// HomePage    : http://www.sweetcafe.jp/// Date        : 2006/10/01// Rev.        : 1.1//---------------------------------------------------------------------------// Rev. Date       Description//---------------------------------------------------------------------------// 1.01 2006/10/01 1st Release// 1.02 2006/10/04 remove a WriteData,WriteDataA,WriteDataB wires.//---------------------------------------------------------------------------// $Id: //---------------------------------------------------------------------------`timescale 1ps / 1psmodule jpeg_ycbcr_mem  (   clk,   DataInEnable,   DataInColor,   DataInPage,   DataInCount,   Data0In,   Data1In,   DataOutAddress,   DataOutY,   DataOutCb,   DataOutCr   );   input          clk;      input          DataInEnable;   input [2:0]    DataInColor;   input [2:0]    DataInPage;   input [1:0]    DataInCount;   input [8:0]    Data0In;   input [8:0]    Data1In;      input [7:0]    DataOutAddress;   output [8:0]   DataOutY;   output [8:0]   DataOutCb;   output [8:0]   DataOutCr;   reg [8:0]      MemYA  [0:127];   reg [8:0]      MemYB  [0:127];   reg [8:0]      MemCbA [0:31];   reg [8:0]      MemCbB [0:31];   reg [8:0]      MemCrA [0:31];   reg [8:0]      MemCrB [0:31];   reg [6:0]      WriteAddressA;   reg [6:0]      WriteAddressB;   always @(DataInColor or DataInPage or DataInCount) begin      WriteAddressA[6] <= DataInColor[1];      WriteAddressB[6] <= DataInColor[1];      if(DataInColor[2] == 1'b0) begin         if(DataInColor[0] == 1'b0) begin            case(DataInCount)              2'h0: begin                 WriteAddressA[5:0] <= DataInPage +  0;                 WriteAddressB[5:0] <= DataInPage +112 -64;              end              2'h1: begin                 WriteAddressA[5:0] <= DataInPage + 16;                 WriteAddressB[5:0] <= DataInPage + 96 -64;              end              2'h2: begin                 WriteAddressA[5:0] <= DataInPage + 32;                 WriteAddressB[5:0] <= DataInPage + 80 -64;              end              2'h3: begin                 WriteAddressA[5:0] <= DataInPage + 48;                 WriteAddressB[5:0] <= DataInPage + 64 -64;              end            endcase // case(DataInCount)         end else begin // if (DataInColor[0] == 1'b0)            case(DataInCount)              2'h0: begin                 WriteAddressA[5:0] <= DataInPage +  0 +8;                 WriteAddressB[5:0] <= DataInPage +112 +8 -64;              end              2'h1: begin                 WriteAddressA[5:0] <= DataInPage + 16 +8;                 WriteAddressB[5:0] <= DataInPage + 96 +8 -64;              end              2'h2: begin                 WriteAddressA[5:0] <= DataInPage + 32 +8;                 WriteAddressB[5:0] <= DataInPage + 80 +8 -64;              end              2'h3: begin                 WriteAddressA[5:0] <= DataInPage + 48 +8;                 WriteAddressB[5:0] <= DataInPage + 64 +8 -64;              end            endcase // case(DataInCount)         end // else: !if(DataInColor[0] == 1'b0)      end else begin // if (DataInColor[2] == 1'b0)         case(DataInCount)           2'h0: begin              WriteAddressA[5:0] <= DataInPage +  0;              WriteAddressB[5:0] <= DataInPage + 56 -32;           end           2'h1: begin              WriteAddressA[5:0] <= DataInPage +  8;              WriteAddressB[5:0] <= DataInPage + 48 -32;           end           2'h2: begin              WriteAddressA[5:0] <= DataInPage + 16;              WriteAddressB[5:0] <= DataInPage + 40 -32;           end           2'h3: begin              WriteAddressA[5:0] <= DataInPage + 24;              WriteAddressB[5:0] <= DataInPage + 32 -32;           end         endcase // case(DataInCount)      end // else: !if(DataInColor[2] == 1'b0)   end // always @ (DataInColor or DataInPage or DataInCount)      always @(posedge clk) begin      if(DataInColor[2] == 1'b0 & DataInEnable == 1'b1) begin         MemYA[WriteAddressA] <= Data0In;         MemYB[WriteAddressB] <= Data1In;      end   end      always @(posedge clk) begin      if(DataInColor == 3'b100 & DataInEnable == 1'b1) begin         MemCbA[WriteAddressA[4:0]] <= Data0In;         MemCbB[WriteAddressB[4:0]] <= Data1In;      end   end      always @(posedge clk) begin      if(DataInColor == 3'b101 & DataInEnable == 1'b1) begin         MemCrA[WriteAddressA[4:0]] <= Data0In;         MemCrB[WriteAddressB[4:0]] <= Data1In;      end   end   reg [8:0] ReadYA;   reg [8:0] ReadYB;   reg [8:0] ReadCbA;   reg [8:0] ReadCbB;   reg [8:0] ReadCrA;   reg [8:0] ReadCrB;   reg [7:0] RegAdrs;      always @(posedge clk) begin      RegAdrs <= DataOutAddress;            ReadYA  <= MemYA[{DataOutAddress[7],DataOutAddress[5:0]}];      ReadYB  <= MemYB[{DataOutAddress[7],DataOutAddress[5:0]}];      ReadCbA <= MemCbA[{DataOutAddress[6:5],DataOutAddress[3:1]}];      ReadCrA <= MemCrA[{DataOutAddress[6:5],DataOutAddress[3:1]}];      ReadCbB <= MemCbB[{DataOutAddress[6:5],DataOutAddress[3:1]}];      ReadCrB <= MemCrB[{DataOutAddress[6:5],DataOutAddress[3:1]}];   end // always @ (posedge clk)   assign DataOutY  = (RegAdrs[6] ==1'b0)?ReadYA:ReadYB;   assign DataOutCb = (RegAdrs[7] ==1'b0)?ReadCbA:ReadCbB;   assign DataOutCr = (RegAdrs[7] ==1'b0)?ReadCrA:ReadCrB;      endmodule // jpeg_ycbcr_mem

⌨️ 快捷键说明

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