ISP/isp.v

112 lines
2.6 KiB
Coq
Raw Normal View History

2024-06-27 21:52:46 +08:00
`timescale 1ns / 1ps
2024-05-09 22:56:32 +08:00
module isp #(
2024-06-27 21:52:46 +08:00
parameter IN_WIDTH = 1936,
parameter IN_HEIGHT = 1088,
parameter OUT_WIDTH = 1920,
parameter OUT_HEIGHT = 1080,
parameter COLOR_DEPTH = 8,
2024-06-27 21:52:46 +08:00
parameter RAW_TYPE = 3 // 0:grbg 1:rggb 2:bggr 3:gbrg
2024-05-09 22:56:32 +08:00
) (
2024-05-10 20:13:58 +08:00
// 基本信号
input wire clk,
input wire reset,
2024-05-09 23:23:23 +08:00
2024-05-10 20:13:58 +08:00
// 数据输入信号
input wire data_en,
2024-06-27 21:52:46 +08:00
input reg [15:0] data_in[2:0], // 数据输入线012分别表示第一三行
2024-05-10 20:13:58 +08:00
output reg data_que, // 数据请求线高电平请求三个数据直到读取完才拉低
output wire out_clk,
output wire out_en,
output reg [3 * COLOR_DEPTH - 1:0] data_out,
input wire color_correction
2024-05-09 22:56:32 +08:00
);
2024-06-27 21:52:46 +08:00
localparam BAYER_WIDTH = IN_WIDTH - 2;
localparam BAYER_HEIGHT = IN_HEIGHT - 2;
// 三通道合成RGB图像
wire rgb_en;
wire [15:0] im_red, im_green, im_blue;
// 任意比例缩放图像
reg scale_in_en;
wire scale_in_que; // scaler 请求数据
reg [3 * COLOR_DEPTH - 1:0] scale_in_data;
// 写入RAM
// wire RAM_in_en;
// wire RAM_in_que; // RAM 请求数据
// wire [3 * COLOR_DEPTH - 1:0] RAM_in_data;
always @(clk) out_clk <= clk;
demosaic2 #(
.IM_WIDTH (IN_WIDTH),
.IM_HEIGHT(IN_HEIGHT),
.RAW_TYPE (RAW_TYPE)
) CFA (
.clk(clk),
.reset(reset),
.data_en(data_en),
.data_in(data_in),
.data_que(data_que),
.out_en(rgb_en),
.out_r(im_red),
.out_g(im_green),
.out_b(im_blue)
);
ColorBlender #(
.IN_DEPTH (12),
.OUT_DEPTH(8),
.GAIN_RED(120),
.GAIN_GREEN(50),
.GAIN_BLUE(95),
.DECIMAL(2)
) blender (
.clk(clk),
.reset(reset),
.in_en(rgb_en),
.data_in({im_blue, im_green, im_red}),
.out_que(scale_in_que),
.out_en(scale_in_en),
.data_out(scale_in_data),
.color_correction(color_correction)
);
crop #(
.IN_WIDTH(BAYER_WIDTH),
.IN_HEIGHT(BAYER_HEIGHT),
.OUT_WIDTH(OUT_WIDTH),
.OUT_HEIGHT(OUT_HEIGHT),
.COLOR_DEPTH(COLOR_DEPTH)
) crop_process (
.clk (clk),
.reset(reset),
.in_en (scale_in_en),
.in_que (scale_in_que),
.data_in(scale_in_data),
.out_en (out_en),
.data_out(data_out)
);
// RGB_to_RAM write_to_RAM (
// .clk(clk),
// .reset(reset),
// .in_en(RAM_in_en),
// .in_que(RAM_in_que),
// .data_in(RAM_in_data),
// .write_que(out_que),
// .write_en(out_en),
// .data_write(data_out)
// );
2024-05-10 21:41:47 +08:00
endmodule