ISP/Merge/chanels_to_RGB.v

74 lines
2.1 KiB
Verilog
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

`timescale 1ns/1ps
// 三通道图像合成一个RGB图像
module chanels_to_RGB #(
parameter IN_DEPTH = 12, // 输入图像的色深
parameter OUT_DEPTH = 8 // 输出图像的色深
) (
input clk,
input reset,
input in_en,
input [15:0] data_in [2:0], // 0:R 1:G 2:B
// 输出相关
input data_que, // 数据请求
output out_en,
output [3 * OUT_DEPTH - 1:0] data_out
);
reg [31:0] data_cal [2:0]; // 用于保存运算结果,防止溢出
reg fifo_en;
reg [3 * OUT_DEPTH - 1:0] fifo_in; // 输入fifo中缓存
wire fifo_empty;
// wire fifo_alempty;
always @(posedge clk or posedge reset) begin
if (reset) begin
// 初始化
data_cal[0] <= 0;
data_cal[1] <= 0;
data_cal[2] <= 0;
fifo_en <= 0;
fifo_in <= 0;
end
else begin
if (in_en) begin
data_cal[0] <= data_in[0] * OUT_DEPTH / IN_DEPTH;
data_cal[1] <= data_in[1] * OUT_DEPTH / IN_DEPTH;
data_cal[2] <= data_in[2] * OUT_DEPTH / IN_DEPTH;
fifo_in <= {data_cal[0][OUT_DEPTH - 1:0], data_cal[1][OUT_DEPTH - 1:0],data_cal[2][OUT_DEPTH - 1:0]};
// data_out <= {data_cal[0][OUT_DEPTH - 1:0], data_cal[1][OUT_DEPTH - 1:0],data_cal[2][OUT_DEPTH - 1:0]};
end
fifo_en <= in_en;
end
end
// 存在数据请求且FIFO不为空时才发送数据
assign out_en = (data_que && !fifo_empty) ? 1 : 0;
async_fifo #(
.DSIZE(3 * OUT_DEPTH),
.ASIZE(128),
) RGB_FIFO (
.wclk(clk),
.rclk(clk),
.wrst_n(reset),
.rrst_n(reset),
.winc(fifo_en),
.wdata(fifo_in),
/* verilator lint_off PINCONNECTEMPTY */
.wfull(),
/* verilator lint_off PINCONNECTEMPTY */
.awfull(),
/* verilator lint_off PINCONNECTEMPTY */
.arempty(),
.rempty(fifo_empty),
.rdata(data_out),
.rinc(out_en)
);
endmodule