伽马矫正公式为:
为伽马矫正后Y通道输出数据,
为伽马矫正前Y通道输入数据,r为伽马矫正指数,若像素值处于暗处区域,则n取暗处区域最大值,若像素值处于亮处区域,则n取亮处区域最小值;
Matlab仿真曲线如图所示
主要通过查找表的方式用ROM来实现。
`timescale 1ns / 1ps
//
//实现功能: 非线性Gamma校正 video_data_out = ((video_data_in/255)^exp)*255 ——exp是变化的
//
//输入接口
//video_clk 时钟
//rst_n 复位
//video_data_in 输入Y通道图像数据,12位,
//gamma_cmd 全局Gamma校正参数
//de 使能信号
// gamma_cmd = 1 —— 全局反Gamma=1.0
// gamma_cmd = 2 —— 全局反Gamma=1.05
// gamma_cmd = 3 —— 全局反Gamma=1.1
// gamma_cmd = 4 —— 全局反Gamma=1.15
// gamma_cmd = 5 —— 全局反Gamma=1.2
// gamma_cmd = 6 —— 全局反Gamma=1.25
// gamma_cmd = 7 —— 全局反Gamma=1.3
//
//输出接口
//video_data_out Gamma校正后输出Y通道视频数据,
//
//中间变量
//video_data_gamma10 全局反Gamma=1.0时读取出的ROM数据
//video_data_gamma11 全局反Gamma=1.1时读取出的ROM数据
//video_data_gamma12 全局反Gamma=1.2时读取出的ROM数据
//video_data_gamma105 全局反Gamma=1.05时读取出的ROM数据
//video_data_gamma115 全局反Gamma=1.15时读取出的ROM数据
//video_data_gamma125 全局反Gamma=1.25时读取出的ROM数据
//video_data_gamma13 全局反Gamma=1.3时读取出的ROM数据
//提示:共例化了七个ROM分别用于储存全局Gamma=1.0、1.05、1.1、1.15、1.2、1.25、1.3时的查找表输出数据
//
//备注:video_data_out延后video_data_in三个时钟周期
//
module gamma_correction(
input video_clk ,
input rst ,
input de_in ,
input hync_in ,
input vync_in ,
input [4:0] gamma_cmd ,
input [47:0] video_data_in_y,
input [47:0] video_data_in_u,
input [47:0] video_data_in_v,
output reg hync_out ,
output reg vync_out ,
output reg de_out ,
output reg [47:0] video_data_out_y,
output reg [47:0] video_data_out_u,
output reg [47:0] video_data_out_v
);
wire [11:0] video_data_gamma10_1;
wire [11:0] video_data_gamma10_2;
wire [11:0] video_data_gamma10_3;
wire [11:0] video_data_gamma10_4;
wire [11:0] video_data_gamma10_1_out;
wire [11:0] video_data_gamma10_2_out;
wire [11:0] video_data_gamma10_3_out;
wire [11:0] video_data_gamma10_4_out;
wire [11:0] video_data_gamma105_1;
wire [11:0] video_data_gamma105_2;
wire [11:0] video_data_gamma105_3;
wire [11:0] video_data_gamma105_4;
wire [11:0] video_data_gamma105_1_out;
wire [11:0] video_data_gamma105_2_out;
wire [11:0] video_data_gamma105_3_out;
wire [11:0] video_data_gamma105_4_out;
wire [11:0] video_data_gamma11_1;
wire [11:0] video_data_gamma11_2;
wire [11:0] video_data_gamma11_3;
wire [11:0] video_data_gamma11_4;
wire [11:0] video_data_gamma11_1_out;
wire [11:0] video_data_gamma11_2_out;
wire [11:0] video_data_gamma11_3_out;
wire [11:0] video_data_gamma11_4_out;
wire [11:0] video_data_gamma115_1;
wire [11:0] video_data_gamma115_2;
wire [11:0] video_data_gamma115_3;
wire [11:0] video_data_gamma115_4;
wire [11:0] video_data_gamma115_1_out;
wire [11:0] video_data_gamma115_2_out;
wire [11:0] video_data_gamma115_3_out;
wire [11:0] video_data_gamma115_4_out;
wire [11:0] video_data_gamma12_1;
wire [11:0] video_data_gamma12_2;
wire [11:0] video_data_gamma12_3;
wire [11:0] video_data_gamma12_4;
wire [11:0] video_data_gamma12_1_out;
wire [11:0] video_data_gamma12_2_out;
wire [11:0] video_data_gamma12_3_out;
wire [11:0] video_data_gamma12_4_out;
wire [11:0] video_data_gamma125_1;
wire [11:0] video_data_gamma125_2;
wire [11:0] video_data_gamma125_3;
wire [11:0] video_data_gamma125_4;
wire [11:0] video_data_gamma125_1_out;
wire [11:0] video_data_gamma125_2_out;
wire [11:0] video_data_gamma125_3_out;
wire [11:0] video_data_gamma125_4_out;
wire [11:0] video_data_gamma13_1;
wire [11:0] video_data_gamma13_2;
wire [11:0] video_data_gamma13_3;
wire [11:0] video_data_gamma13_4;
wire [11:0] video_data_gamma13_1_out;
wire [11:0] video_data_gamma13_2_out;
wire [11:0] video_data_gamma13_3_out;
wire [11:0] video_data_gamma13_4_out;
/
wire [11:0] video_data_zgamma10_1;
wire [11:0] video_data_zgamma10_2;
wire [11:0] video_data_zgamma10_3;
wire [11:0] video_data_zgamma10_4;
wire [11:0] video_data_zgamma10_1_out;
wire [11:0] video_data_zgamma10_2_out;
wire [11:0] video_data_zgamma10_3_out;
wire [11:0] video_data_zgamma10_4_out;
wire [11:0] video_data_zgamma105_1;
wire [11:0] video_data_zgamma105_2;
wire [11:0] video_data_zgamma105_3;
wire [11:0] video_data_zgamma105_4;
wire [11:0] video_data_zgamma105_1_out;
wire [11:0] video_data_zgamma105_2_out;
wire [11:0] video_data_zgamma105_3_out;
wire [11:0] video_data_zgamma105_4_out;
wire [11:0] video_data_zgamma11_1;
wire [11:0] video_data_zgamma11_2;
wire [11:0] video_data_zgamma11_3;
wire [11:0] video_data_zgamma11_4;
wire [11:0] video_data_zgamma11_1_out;
wire [11:0] video_data_zgamma11_2_out;
wire [11:0] video_data_zgamma11_3_out;
wire [11:0] video_data_zgamma11_4_out;
wire [11:0] video_data_zgamma115_1;
wire [11:0] video_data_zgamma115_2;
wire [11:0] video_data_zgamma115_3;
wire [11:0] video_data_zgamma115_4;
wire [11:0] video_data_zgamma115_1_out;
wire [11:0] video_data_zgamma115_2_out;
wire [11:0] video_data_zgamma115_3_out;
wire [11:0] video_data_zgamma115_4_out;
wire [11:0] video_data_zgamma12_1;
wire [11:0] video_data_zgamma12_2;
wire [11:0] video_data_zgamma12_3;
wire [11:0] video_data_zgamma12_4;
wire [11:0] video_data_zgamma12_1_out;
wire [11:0] video_data_zgamma12_2_out;
wire [11:0] video_data_zgamma12_3_out;
wire [11:0] video_data_zgamma12_4_out;
wire [11:0] video_data_zgamma125_1;
wire [11:0] video_data_zgamma125_2;
wire [11:0] video_data_zgamma125_3;
wire [11:0] video_data_zgamma125_4;
wire [11:0] video_data_zgamma125_1_out;
wire [11:0] video_data_zgamma125_2_out;
wire [11:0] video_data_zgamma125_3_out;
wire [11:0] video_data_zgamma125_4_out;
wire [11:0] video_data_zgamma13_1;
wire [11:0] video_data_zgamma13_2;
wire [11:0] video_data_zgamma13_3;
wire [11:0] video_data_zgamma13_4;
wire [11:0] video_data_zgamma13_1_out;
wire [11:0] video_data_zgamma13_2_out;
wire [11:0] video_data_zgamma13_3_out;
wire [11:0] video_data_zgamma13_4_out;
/
reg hync_r0;
reg hync_r1;
reg vync_r0;
reg vync_r1;
reg de_r0;
reg de_r1;
reg [47:0] video_data_y_r0;
reg [47:0] video_data_y_r1;
reg [47:0] video_data_u_r0;
reg [47:0] video_data_u_r1;
reg [47:0] video_data_v_r0;
reg [47:0] video_data_v_r1;
assign {video_data_gamma10_1,video_data_gamma10_2,video_data_gamma10_3,video_data_gamma10_4} = video_data_in_y;
assign {video_data_gamma105_1,video_data_gamma105_2,video_data_gamma105_3,video_data_gamma105_4} = video_data_in_y;
assign {video_data_gamma11_1,video_data_gamma11_2,video_data_gamma11_3,video_data_gamma11_4} = video_data_in_y;
assign {video_data_gamma115_1,video_data_gamma115_2,video_data_gamma115_3,video_data_gamma115_4} = video_data_in_y;
assign {video_data_gamma12_1,video_data_gamma12_2,video_data_gamma12_3,video_data_gamma12_4} = video_data_in_y;
assign {video_data_gamma125_1,video_data_gamma125_2,video_data_gamma125_3,video_data_gamma125_4} = video_data_in_y;
assign {video_data_gamma13_1,video_data_gamma13_2,video_data_gamma13_3,video_data_gamma13_4} = video_data_in_y;
assign {video_data_zgamma10_1,video_data_zgamma10_2,video_data_zgamma10_3,video_data_zgamma10_4} = video_data_in_y;
assign {video_data_zgamma105_1,video_data_zgamma105_2,video_data_zgamma105_3,video_data_zgamma105_4} = video_data_in_y;
assign {video_data_zgamma11_1,video_data_zgamma11_2,video_data_zgamma11_3,video_data_zgamma11_4} = video_data_in_y;
assign {video_data_zgamma115_1,video_data_zgamma115_2,video_data_zgamma115_3,video_data_zgamma115_4} = video_data_in_y;
assign {video_data_zgamma12_1,video_data_zgamma12_2,video_data_zgamma12_3,video_data_zgamma12_4} = video_data_in_y;
assign {video_data_zgamma125_1,video_data_zgamma125_2,video_data_zgamma125_3,video_data_zgamma125_4} = video_data_in_y;
assign {video_data_zgamma13_1,video_data_zgamma13_2,video_data_zgamma13_3,video_data_zgamma13_4} = video_data_in_y;
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
video_data_u_r0 <= 48'd0;
video_data_u_r1 <= 48'd0;
video_data_out_u<= 48'd0;
end
else
begin
video_data_u_r0 <= video_data_in_u;
video_data_u_r1 <= video_data_u_r0;
video_data_out_u<= video_data_u_r1;
end
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
video_data_v_r0 <= 48'd0;
video_data_v_r1 <= 48'd0;
video_data_out_v<= 48'd0;
end
else
begin
video_data_v_r0 <= video_data_in_v;
video_data_v_r1 <= video_data_v_r0;
video_data_out_v<= video_data_v_r1;
end
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
video_data_y_r0 <= 48'd0;
video_data_y_r1 <= 48'd0;
end
else
begin
video_data_y_r0 <= video_data_in_y;
video_data_y_r1 <= video_data_y_r0;
end
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
hync_r0 <= 1'b0;
hync_r1 <= 1'b0;
hync_out <= 1'b0;
end
else
begin
hync_r0 <= hync_in;
hync_r1 <= hync_r0;
hync_out <= hync_r1;
end
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
vync_r0 <= 1'b0;
vync_r1 <= 1'b0;
vync_out <= 1'b0;
end
else
begin
vync_r0 <= vync_in;
vync_r1 <= vync_r0;
vync_out <= vync_r1;
end
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
de_r0 <= 1'b0;
de_r1 <= 1'b0;
de_out <= 1'b0;
end
else
begin
de_r0 <= de_in;
de_r1 <= de_r0;
de_out <= de_r1;
end
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
video_data_out_y <= 48'b0;
else if((gamma_cmd == 5'd1)&&(de_out))
video_data_out_y <= {video_data_gamma10_1_out,video_data_gamma10_2_out,video_data_gamma10_3_out,video_data_gamma10_4_out};
else if((gamma_cmd == 5'd2)&&(de_out))
video_data_out_y <= {video_data_gamma105_1_out,video_data_gamma105_2_out,video_data_gamma105_3_out,video_data_gamma105_4_out};
else if((gamma_cmd == 5'd3)&&(de_out))
video_data_out_y <= {video_data_gamma11_1_out,video_data_gamma11_2_out,video_data_gamma11_3_out,video_data_gamma11_4_out};
else if((gamma_cmd == 5'd4)&&(de_out))
video_data_out_y <= {video_data_gamma115_1_out,video_data_gamma115_2_out,video_data_gamma115_3_out,video_data_gamma115_4_out};
else if((gamma_cmd == 5'd5)&&(de_out))
video_data_out_y <= {video_data_gamma12_1_out,video_data_gamma12_2_out,video_data_gamma12_3_out,video_data_gamma12_4_out};
else if((gamma_cmd == 5'd6)&&(de_out))
video_data_out_y <= {video_data_gamma125_1_out,video_data_gamma125_2_out,video_data_gamma125_3_out,video_data_gamma125_4_out};
else if((gamma_cmd == 5'd7)&&(de_out))
video_data_out_y <= {video_data_gamma13_1_out,video_data_gamma13_2_out,video_data_gamma13_3_out,video_data_gamma13_4_out};
/
else if((gamma_cmd == 5'd8)&&(de_out))
video_data_out_y <= {video_data_zgamma10_1_out,video_data_zgamma10_2_out,video_data_zgamma10_3_out,video_data_zgamma10_4_out};
else if((gamma_cmd == 5'd9)&&(de_out))
video_data_out_y <= {video_data_zgamma105_1_out,video_data_zgamma105_2_out,video_data_zgamma105_3_out,video_data_zgamma105_4_out};
else if((gamma_cmd == 5'd10)&&(de_out))
video_data_out_y <={video_data_zgamma11_1_out,video_data_zgamma11_2_out,video_data_zgamma11_3_out,video_data_zgamma11_4_out};
else if((gamma_cmd == 5'd11)&&(de_out))
video_data_out_y <={video_data_zgamma115_1_out,video_data_zgamma115_2_out,video_data_zgamma115_3_out,video_data_zgamma115_4_out};
else if((gamma_cmd == 5'd12)&&(de_out))
video_data_out_y <={video_data_zgamma12_1_out,video_data_zgamma12_2_out,video_data_zgamma12_3_out,video_data_zgamma12_4_out};
else if((gamma_cmd == 5'd13)&&(de_out))
video_data_out_y <={video_data_zgamma125_1_out,video_data_zgamma125_2_out,video_data_zgamma125_3_out,video_data_zgamma125_4_out};
else if((gamma_cmd == 5'd14)&&(de_out))
video_data_out_y <= {video_data_zgamma13_1_out,video_data_zgamma13_2_out,video_data_zgamma13_3_out,video_data_zgamma13_4_out};
/
else
video_data_out_y <= video_data_y_r1;
end
blk_mem_gen_0 gamma10_1 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma10_1), // input wire [11 : 0] addra
.douta(video_data_gamma10_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_0 gamma10_2 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma10_2), // input wire [11 : 0] addra
.douta(video_data_gamma10_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_0 gamma10_3 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma10_3), // input wire [11 : 0] addra
.douta(video_data_gamma10_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_0 gamma10_4 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma10_4), // input wire [11 : 0] addra
.douta(video_data_gamma10_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_1 gamma105_1 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma105_1), // input wire [11 : 0] addra
.douta(video_data_gamma105_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_1 gamma105_2 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma105_2), // input wire [11 : 0] addra
.douta(video_data_gamma105_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_1 gamma105_3 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma105_3), // input wire [11 : 0] addra
.douta(video_data_gamma105_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_1 gamma105_4 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma105_4), // input wire [11 : 0] addra
.douta(video_data_gamma105_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_2 gamma11_1 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma11_1), // input wire [11 : 0] addra
.douta(video_data_gamma11_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_2 gamma11_2 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma11_2), // input wire [11 : 0] addra
.douta(video_data_gamma11_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_2 gamma11_3 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma11_3), // input wire [11 : 0] addra
.douta(video_data_gamma11_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_2 gamma11_4 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma11_4), // input wire [11 : 0] addra
.douta(video_data_gamma11_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_3 gamma115_1 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma115_1), // input wire [11 : 0] addra
.douta(video_data_gamma115_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_3 gamma115_2 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma115_2), // input wire [11 : 0] addra
.douta(video_data_gamma115_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_3 gamma115_3 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma115_3), // input wire [11 : 0] addra
.douta(video_data_gamma115_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_3 gamma115_4 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma115_4), // input wire [11 : 0] addra
.douta(video_data_gamma115_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_4 gamma12_1 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma12_1), // input wire [11 : 0] addra
.douta(video_data_gamma12_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_4 gamma12_2 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma12_2), // input wire [11 : 0] addra
.douta(video_data_gamma12_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_4 gamma12_3 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma12_3), // input wire [11 : 0] addra
.douta(video_data_gamma12_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_4 gamma12_4 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma12_4), // input wire [11 : 0] addra
.douta(video_data_gamma12_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_5 gamma125_1 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma125_1), // input wire [11 : 0] addra
.douta(video_data_gamma125_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_5 gamma125_2 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma125_2), // input wire [11 : 0] addra
.douta(video_data_gamma125_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_5 gamma125_3 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma125_3), // input wire [11 : 0] addra
.douta(video_data_gamma125_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_5 gamma125_4 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma125_4), // input wire [11 : 0] addra
.douta(video_data_gamma125_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_6 gamma13_1 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma13_1), // input wire [11 : 0] addra
.douta(video_data_gamma13_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_6 gamma13_2 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma13_2), // input wire [11 : 0] addra
.douta(video_data_gamma13_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_6 gamma13_3 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma13_3), // input wire [11 : 0] addra
.douta(video_data_gamma13_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_6 gamma13_4 (
.clka(video_clk), // input wire clka
.addra(video_data_gamma13_4), // input wire [11 : 0] addra
.douta(video_data_gamma13_4_out) // output wire [11 : 0] douta
);
/
blk_mem_gen_7 zgamma10_1 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma10_1), // input wire [12 : 0] addra
.douta(video_data_zgamma10_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_7 zgamma10_2 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma10_2), // input wire [12 : 0] addra
.douta(video_data_zgamma10_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_7 zgamma10_3 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma10_3), // input wire [12 : 0] addra
.douta(video_data_zgamma10_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_7 zgamma10_4 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma10_4), // input wire [12 : 0] addra
.douta(video_data_zgamma10_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_8 zgamma105_1 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma105_1), // input wire [12 : 0] addra
.douta(video_data_zgamma105_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_8 zgamma105_2 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma105_2), // input wire [12 : 0] addra
.douta(video_data_zgamma105_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_8 zgamma105_3 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma105_3), // input wire [12 : 0] addra
.douta(video_data_zgamma105_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_8 zgamma105_4 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma105_4), // input wire [12 : 0] addra
.douta(video_data_zgamma105_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_9 zgamma11_1 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma11_1), // input wire [12 : 0] addra
.douta(video_data_zgamma11_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_9 zgamma11_2 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma11_2), // input wire [12 : 0] addra
.douta(video_data_zgamma11_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_9 zgamma11_3 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma11_3), // input wire [12 : 0] addra
.douta(video_data_zgamma11_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_9 zgamma11_4 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma11_4), // input wire [12 : 0] addra
.douta(video_data_zgamma11_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_10 zgamma115_1 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma115_1), // input wire [12 : 0] addra
.douta(video_data_zgamma115_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_10 zgamma115_2 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma115_2), // input wire [12 : 0] addra
.douta(video_data_zgamma115_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_10 zgamma115_3 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma115_3), // input wire [12 : 0] addra
.douta(video_data_zgamma115_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_10 zgamma115_4 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma115_4), // input wire [12 : 0] addra
.douta(video_data_zgamma115_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_11 zgamma12_1 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma12_1), // input wire [12 : 0] addra
.douta(video_data_zgamma12_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_11 zgamma12_2 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma12_2), // input wire [12 : 0] addra
.douta(video_data_zgamma12_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_11 zgamma12_3 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma12_3), // input wire [12 : 0] addra
.douta(video_data_zgamma12_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_11 zgamma12_4 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma12_4), // input wire [12 : 0] addra
.douta(video_data_zgamma12_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_12 zgamma125_1 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma125_1), // input wire [12 : 0] addra
.douta(video_data_zgamma125_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_12 zgamma125_2 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma125_2), // input wire [12 : 0] addra
.douta(video_data_zgamma125_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_12 zgamma125_3 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma125_3), // input wire [12 : 0] addra
.douta(video_data_zgamma125_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_12 zgamma125_4 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma125_4), // input wire [12 : 0] addra
.douta(video_data_zgamma125_4_out) // output wire [11 : 0] douta
);
/*
blk_mem_gen_13 zgamma13_1 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma13_1), // input wire [12 : 0] addra
.douta(video_data_zgamma13_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_13 zgamma13_2 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma13_2), // input wire [12 : 0] addra
.douta(video_data_zgamma13_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_13 zgamma13_3 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma13_3), // input wire [12 : 0] addra
.douta(video_data_zgamma13_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_13 zgamma13_4 (
.clka(video_clk), // input wire clka
.addra(video_data_zgamma13_4), // input wire [12 : 0] addra
.douta(video_data_zgamma13_4_out) // output wire [11 : 0] douta
);*/
endmodule
以上为伽马校正查找表代码,根据优化我们可以把亮部放入一个ROM中,暗部放入一个ROM中,如图所示
`timescale 1ns / 1ps
//
//实现功能: 非线性Gamma校正 video_data_out = ((video_data_in/255)^exp)*255 ——exp是变化的
//
//输入接口
//video_clk 时钟
//rst_n 复位
//video_data_in 输入Y通道图像数据,12位,
//gamma_cmd 全局Gamma校正参数
//de 使能信号
// gamma_cmd = 1 —— 全局反Gamma=1.0
// gamma_cmd = 2 —— 全局反Gamma=1.05
// gamma_cmd = 3 —— 全局反Gamma=1.1
// gamma_cmd = 4 —— 全局反Gamma=1.15
// gamma_cmd = 5 —— 全局反Gamma=1.2
// gamma_cmd = 6 —— 全局反Gamma=1.25
// gamma_cmd = 7 —— 全局反Gamma=1.3
//
//输出接口
//video_data_out Gamma校正后输出Y通道视频数据,
//
//中间变量
//video_data_gamma10 全局反Gamma=1.0时读取出的ROM数据
//video_data_gamma11 全局反Gamma=1.1时读取出的ROM数据
//video_data_gamma12 全局反Gamma=1.2时读取出的ROM数据
//video_data_gamma105 全局反Gamma=1.05时读取出的ROM数据
//video_data_gamma115 全局反Gamma=1.15时读取出的ROM数据
//video_data_gamma125 全局反Gamma=1.25时读取出的ROM数据
//video_data_gamma13 全局反Gamma=1.3时读取出的ROM数据
//提示:共例化了七个ROM分别用于储存全局Gamma=1.0、1.05、1.1、1.15、1.2、1.25、1.3时的查找表输出数据
//
//备注:video_data_out延后video_data_in四个时钟周期
//
module gamma_correction(
input video_clk ,
input rst ,
input de_in ,
input hync_in ,
input vync_in ,
input [4:0] gamma_cmd ,
input [47:0] video_data_in_y,
input [47:0] video_data_in_u,
input [47:0] video_data_in_v,
output reg hync_out ,
output reg vync_out ,
output reg de_out ,
output reg [47:0] video_data_out_y,
output reg [47:0] video_data_out_u,
output reg [47:0] video_data_out_v
);
reg [11:0] video_data_y_in_1;
reg [11:0] video_data_y_in_2;
reg [11:0] video_data_y_in_3;
reg [11:0] video_data_y_in_4;
wire [11:0] video_data_gamma10_1_out;
wire [11:0] video_data_gamma10_2_out;
wire [11:0] video_data_gamma10_3_out;
wire [11:0] video_data_gamma10_4_out;
wire [11:0] video_data_gamma105_1_out;
wire [11:0] video_data_gamma105_2_out;
wire [11:0] video_data_gamma105_3_out;
wire [11:0] video_data_gamma105_4_out;
wire [11:0] video_data_gamma11_1_out;
wire [11:0] video_data_gamma11_2_out;
wire [11:0] video_data_gamma11_3_out;
wire [11:0] video_data_gamma11_4_out;
wire [11:0] video_data_gamma115_1_out;
wire [11:0] video_data_gamma115_2_out;
wire [11:0] video_data_gamma115_3_out;
wire [11:0] video_data_gamma115_4_out;
wire [11:0] video_data_gamma12_1_out;
wire [11:0] video_data_gamma12_2_out;
wire [11:0] video_data_gamma12_3_out;
wire [11:0] video_data_gamma12_4_out;
wire [11:0] video_data_gamma125_1_out;
wire [11:0] video_data_gamma125_2_out;
wire [11:0] video_data_gamma125_3_out;
wire [11:0] video_data_gamma125_4_out;
wire [11:0] video_data_gamma13_1_out;
wire [11:0] video_data_gamma13_2_out;
wire [11:0] video_data_gamma13_3_out;
wire [11:0] video_data_gamma13_4_out;
/
wire [11:0] video_data_zgamma10_1_out;
wire [11:0] video_data_zgamma10_2_out;
wire [11:0] video_data_zgamma10_3_out;
wire [11:0] video_data_zgamma10_4_out;
wire [11:0] video_data_zgamma105_1_out;
wire [11:0] video_data_zgamma105_2_out;
wire [11:0] video_data_zgamma105_3_out;
wire [11:0] video_data_zgamma105_4_out;
wire [11:0] video_data_zgamma11_1_out;
wire [11:0] video_data_zgamma11_2_out;
wire [11:0] video_data_zgamma11_3_out;
wire [11:0] video_data_zgamma11_4_out;
wire [11:0] video_data_zgamma115_1_out;
wire [11:0] video_data_zgamma115_2_out;
wire [11:0] video_data_zgamma115_3_out;
wire [11:0] video_data_zgamma115_4_out;
wire [11:0] video_data_zgamma12_1_out;
wire [11:0] video_data_zgamma12_2_out;
wire [11:0] video_data_zgamma12_3_out;
wire [11:0] video_data_zgamma12_4_out;
wire [11:0] video_data_zgamma125_1_out;
wire [11:0] video_data_zgamma125_2_out;
wire [11:0] video_data_zgamma125_3_out;
wire [11:0] video_data_zgamma125_4_out;
wire [11:0] video_data_zgamma13_1_out;
wire [11:0] video_data_zgamma13_2_out;
wire [11:0] video_data_zgamma13_3_out;
wire [11:0] video_data_zgamma13_4_out;
wire [11:0] video_data_kgamma_1_out;
wire [11:0] video_data_kgamma_2_out;
wire [11:0] video_data_kgamma_3_out;
wire [11:0] video_data_kgamma_4_out;
/
reg hync_r0;
reg hync_r1;
reg hync_r2;
reg vync_r0;
reg vync_r1;
reg vync_r2;
reg de_r0;
reg de_r1;
reg de_r2;
reg [47:0] video_data_y_r0;
reg [47:0] video_data_y_r1;
reg [47:0] video_data_y_r2;
reg [47:0] video_data_u_r0;
reg [47:0] video_data_u_r1;
reg [47:0] video_data_u_r2;
reg [47:0] video_data_v_r0;
reg [47:0] video_data_v_r1;
reg [47:0] video_data_v_r2;
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
video_data_y_in_1 <= 12'b0;
video_data_y_in_2 <= 12'b0;
video_data_y_in_3 <= 12'b0;
video_data_y_in_4 <= 12'b0;
end
else if(gamma_cmd == 5'd16)
{video_data_y_in_1,video_data_y_in_2,video_data_y_in_3,video_data_y_in_4} <= {video_data_in_y[47:36]+12'd1200,video_data_in_y[35:24]+12'd1200,video_data_in_y[23:12]+12'd1200,video_data_in_y[11:0]+12'd1200};
else if(gamma_cmd == 5'd17)
{video_data_y_in_1,video_data_y_in_2,video_data_y_in_3,video_data_y_in_4} <= {video_data_in_y[47:36]+12'd2800,video_data_in_y[35:24]+12'd2800,video_data_in_y[23:12]+12'd2800,video_data_in_y[11:0]+12'd2800};
else
{video_data_y_in_1,video_data_y_in_2,video_data_y_in_3,video_data_y_in_4} <= {video_data_in_y[47:36],video_data_in_y[35:24],video_data_in_y[23:12],video_data_in_y[11:0]};
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
video_data_u_r0 <= 48'd0;
video_data_u_r1 <= 48'd0;
video_data_u_r2 <= 48'd0;
video_data_out_u<= 48'd0;
end
else
begin
video_data_u_r0 <= video_data_in_u;
video_data_u_r1 <= video_data_u_r0;
video_data_u_r2 <= video_data_u_r1;
video_data_out_u<= video_data_u_r2;
end
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
video_data_v_r0 <= 48'd0;
video_data_v_r1 <= 48'd0;
video_data_v_r1 <= 48'd0;
video_data_out_v<= 48'd0;
end
else
begin
video_data_v_r0 <= video_data_in_v;
video_data_v_r1 <= video_data_v_r0;
video_data_v_r2 <= video_data_v_r1;
video_data_out_v<= video_data_v_r2;
end
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
video_data_y_r0 <= 48'd0;
video_data_y_r1 <= 48'd0;
video_data_y_r2 <= 48'd0;
end
else
begin
video_data_y_r0 <= video_data_in_y;
video_data_y_r1 <= video_data_y_r0;
video_data_y_r2 <= video_data_y_r1;
end
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
hync_r0 <= 1'b0;
hync_r1 <= 1'b0;
hync_r2 <= 1'b0;
hync_out <= 1'b0;
end
else
begin
hync_r0 <= hync_in;
hync_r1 <= hync_r0;
hync_r2 <= hync_r1;
hync_out <= hync_r2;
end
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
vync_r0 <= 1'b0;
vync_r1 <= 1'b0;
vync_r2 <= 1'b0;
vync_out <= 1'b0;
end
else
begin
vync_r0 <= vync_in;
vync_r1 <= vync_r0;
vync_r2 <= vync_r1;
vync_out <= vync_r2;
end
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
begin
de_r0 <= 1'b0;
de_r1 <= 1'b0;
de_r2 <= 1'b0;
de_out <= 1'b0;
end
else
begin
de_r0 <= de_in;
de_r1 <= de_r0;
de_r2 <= de_r1;
de_out <= de_r2;
end
end
always@(posedge video_clk or posedge rst)
begin
if(rst)
video_data_out_y <= 48'b0;
else if((gamma_cmd == 5'd1)&&(de_r2))
video_data_out_y <= {video_data_gamma10_1_out,video_data_gamma10_2_out,video_data_gamma10_3_out,video_data_gamma10_4_out};
else if((gamma_cmd == 5'd2)&&(de_r2))
video_data_out_y <= {video_data_gamma105_1_out,video_data_gamma105_2_out,video_data_gamma105_3_out,video_data_gamma105_4_out};
else if((gamma_cmd == 5'd3)&&(de_r2))
video_data_out_y <= {video_data_gamma11_1_out,video_data_gamma11_2_out,video_data_gamma11_3_out,video_data_gamma11_4_out};
else if((gamma_cmd == 5'd4)&&(de_r2))
video_data_out_y <= {video_data_gamma115_1_out,video_data_gamma115_2_out,video_data_gamma115_3_out,video_data_gamma115_4_out};
else if((gamma_cmd == 5'd5)&&(de_r2))
video_data_out_y <= {video_data_gamma12_1_out,video_data_gamma12_2_out,video_data_gamma12_3_out,video_data_gamma12_4_out};
else if((gamma_cmd == 5'd6)&&(de_r2))
video_data_out_y <= {video_data_gamma125_1_out,video_data_gamma125_2_out,video_data_gamma125_3_out,video_data_gamma125_4_out};
else if((gamma_cmd == 5'd7)&&(de_r2))
video_data_out_y <= {video_data_gamma13_1_out,video_data_gamma13_2_out,video_data_gamma13_3_out,video_data_gamma13_4_out};
/
else if((gamma_cmd == 5'd8)&&(de_r2))
video_data_out_y <= {video_data_zgamma10_1_out,video_data_zgamma10_2_out,video_data_zgamma10_3_out,video_data_zgamma10_4_out};
else if((gamma_cmd == 5'd9)&&(de_r2))
video_data_out_y <= {video_data_zgamma105_1_out,video_data_zgamma105_2_out,video_data_zgamma105_3_out,video_data_zgamma105_4_out};
else if((gamma_cmd == 5'd10)&&(de_r2))
video_data_out_y <={video_data_zgamma11_1_out,video_data_zgamma11_2_out,video_data_zgamma11_3_out,video_data_zgamma11_4_out};
else if((gamma_cmd == 5'd11)&&(de_r2))
video_data_out_y <={video_data_zgamma115_1_out,video_data_zgamma115_2_out,video_data_zgamma115_3_out,video_data_zgamma115_4_out};
else if((gamma_cmd == 5'd12)&&(de_r2))
video_data_out_y <={video_data_zgamma12_1_out,video_data_zgamma12_2_out,video_data_zgamma12_3_out,video_data_zgamma12_4_out};
else if((gamma_cmd == 5'd13)&&(de_r2))
video_data_out_y <={video_data_zgamma125_1_out,video_data_zgamma125_2_out,video_data_zgamma125_3_out,video_data_zgamma125_4_out};
else if((gamma_cmd == 5'd14)&&(de_r2))
video_data_out_y <= {video_data_zgamma13_1_out,video_data_zgamma13_2_out,video_data_zgamma13_3_out,video_data_zgamma13_4_out};
/
else if((gamma_cmd == 5'd15)&&(de_r2))
video_data_out_y <= {video_data_kgamma_1_out,video_data_kgamma_2_out,video_data_kgamma_3_out,video_data_kgamma_4_out};
else if((gamma_cmd == 5'd16)&&(de_r2))
video_data_out_y <= {video_data_kgamma_1_out,video_data_kgamma_2_out,video_data_kgamma_3_out,video_data_kgamma_4_out};
else if((gamma_cmd == 5'd17)&&(de_r2))
video_data_out_y <= {video_data_kgamma_1_out,video_data_kgamma_2_out,video_data_kgamma_3_out,video_data_kgamma_4_out};
else if(de_r2)
video_data_out_y <= video_data_y_r2;
else
video_data_out_y <= 48'b0;
end
blk_mem_gen_0 gamma10_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [11 : 0] addra
.douta(video_data_gamma10_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_0 gamma10_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [11 : 0] addra
.douta(video_data_gamma10_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_0 gamma10_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [11 : 0] addra
.douta(video_data_gamma10_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_0 gamma10_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [11 : 0] addra
.douta(video_data_gamma10_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_1 gamma105_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [11 : 0] addra
.douta(video_data_gamma105_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_1 gamma105_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [11 : 0] addra
.douta(video_data_gamma105_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_1 gamma105_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [11 : 0] addra
.douta(video_data_gamma105_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_1 gamma105_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [11 : 0] addra
.douta(video_data_gamma105_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_2 gamma11_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [11 : 0] addra
.douta(video_data_gamma11_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_2 gamma11_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [11 : 0] addra
.douta(video_data_gamma11_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_2 gamma11_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [11 : 0] addra
.douta(video_data_gamma11_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_2 gamma11_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [11 : 0] addra
.douta(video_data_gamma11_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_3 gamma115_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [11 : 0] addra
.douta(video_data_gamma115_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_3 gamma115_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [11 : 0] addra
.douta(video_data_gamma115_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_3 gamma115_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [11 : 0] addra
.douta(video_data_gamma115_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_3 gamma115_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [11 : 0] addra
.douta(video_data_gamma115_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_4 gamma12_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [11 : 0] addra
.douta(video_data_gamma12_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_4 gamma12_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [11 : 0] addra
.douta(video_data_gamma12_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_4 gamma12_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [11 : 0] addra
.douta(video_data_gamma12_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_4 gamma12_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [11 : 0] addra
.douta(video_data_gamma12_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_5 gamma125_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [11 : 0] addra
.douta(video_data_gamma125_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_5 gamma125_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [11 : 0] addra
.douta(video_data_gamma125_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_5 gamma125_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [11 : 0] addra
.douta(video_data_gamma125_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_5 gamma125_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [11 : 0] addra
.douta(video_data_gamma125_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_6 gamma13_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [11 : 0] addra
.douta(video_data_gamma13_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_6 gamma13_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [11 : 0] addra
.douta(video_data_gamma13_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_6 gamma13_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [11 : 0] addra
.douta(video_data_gamma13_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_6 gamma13_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [11 : 0] addra
.douta(video_data_gamma13_4_out) // output wire [11 : 0] douta
);
/
blk_mem_gen_7 zgamma10_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [12 : 0] addra
.douta(video_data_zgamma10_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_7 zgamma10_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [12 : 0] addra
.douta(video_data_zgamma10_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_7 zgamma10_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [12 : 0] addra
.douta(video_data_zgamma10_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_7 zgamma10_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [12 : 0] addra
.douta(video_data_zgamma10_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_8 zgamma105_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [12 : 0] addra
.douta(video_data_zgamma105_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_8 zgamma105_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [12 : 0] addra
.douta(video_data_zgamma105_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_8 zgamma105_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [12 : 0] addra
.douta(video_data_zgamma105_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_8 zgamma105_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [12 : 0] addra
.douta(video_data_zgamma105_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_9 zgamma11_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [12 : 0] addra
.douta(video_data_zgamma11_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_9 zgamma11_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [12 : 0] addra
.douta(video_data_zgamma11_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_9 zgamma11_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [12 : 0] addra
.douta(video_data_zgamma11_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_9 zgamma11_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [12 : 0] addra
.douta(video_data_zgamma11_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_10 zgamma115_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [12 : 0] addra
.douta(video_data_zgamma115_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_10 zgamma115_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [12 : 0] addra
.douta(video_data_zgamma115_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_10 zgamma115_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [12 : 0] addra
.douta(video_data_zgamma115_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_10 zgamma115_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [12 : 0] addra
.douta(video_data_zgamma115_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_11 zgamma12_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [12 : 0] addra
.douta(video_data_zgamma12_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_11 zgamma12_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [12 : 0] addra
.douta(video_data_zgamma12_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_11 zgamma12_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [12 : 0] addra
.douta(video_data_zgamma12_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_11 zgamma12_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [12 : 0] addra
.douta(video_data_zgamma12_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_12 zgamma125_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [12 : 0] addra
.douta(video_data_zgamma125_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_12 zgamma125_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [12 : 0] addra
.douta(video_data_zgamma125_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_12 zgamma125_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [12 : 0] addra
.douta(video_data_zgamma125_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_12 zgamma125_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [12 : 0] addra
.douta(video_data_zgamma125_4_out) // output wire [11 : 0] douta
);
blk_mem_gen_13 zgamma13_1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [12 : 0] addra
.douta(video_data_zgamma13_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_13 zgamma13_2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [12 : 0] addra
.douta(video_data_zgamma13_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_13 zgamma13_3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [12 : 0] addra
.douta(video_data_zgamma13_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_13 zgamma13_4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [12 : 0] addra
.douta(video_data_zgamma13_4_out) // output wire [11 : 0] douta
);
//
blk_mem_gen_14 kgamma1 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_1), // input wire [11 : 0] addra
.douta(video_data_kgamma_1_out) // output wire [11 : 0] douta
);
blk_mem_gen_14 kgamma2 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_2), // input wire [11 : 0] addra
.douta(video_data_kgamma_2_out) // output wire [11 : 0] douta
);
blk_mem_gen_14 kgamma3 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_3), // input wire [11 : 0] addra
.douta(video_data_kgamma_3_out) // output wire [11 : 0] douta
);
blk_mem_gen_14 kgamma4 (
.clka(video_clk), // input wire clka
.addra(video_data_y_in_4), // input wire [11 : 0] addra
.douta(video_data_kgamma_4_out) // output wire [11 : 0] douta
);
endmodule