update scaler and RAM
This commit is contained in:
		
							
								
								
									
										67
									
								
								Merge/chanels_to_RGB.v
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								Merge/chanels_to_RGB.v
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
`timescale 1ns/1ps
 | 
			
		||||
 | 
			
		||||
// 三通道图像合成一个RGB图像
 | 
			
		||||
module chanels_to_RGB #(
 | 
			
		||||
    parameter IN_DEPTH = 12,        // 输入图像的色深
 | 
			
		||||
    parameter OUT_DEPTH = 8         // 输出图像的色深
 | 
			
		||||
) (
 | 
			
		||||
    input clk,
 | 
			
		||||
    input reset,
 | 
			
		||||
 | 
			
		||||
    input in_en,
 | 
			
		||||
    input [IN_DEPTH - 1:0] data_in [2:0], // 0:R 1:G 2:B
 | 
			
		||||
 | 
			
		||||
    // 输出相关
 | 
			
		||||
    input data_que;                                 // 数据请求
 | 
			
		||||
    output reg out_en,
 | 
			
		||||
    output reg [3 * OUT_DEPTH - 1:0] data_out
 | 
			
		||||
);
 | 
			
		||||
    reg [31:0] data_cal [2:0]; // 用于保存运算结果,防止溢出
 | 
			
		||||
    reg fifo_en;
 | 
			
		||||
    wire [3 * OUT_DEPTH - 1:0] fifo_in; // 输入fifo中缓存
 | 
			
		||||
    wire fifo_empty;
 | 
			
		||||
    // wire fifo_alempty;
 | 
			
		||||
 | 
			
		||||
    always @(posedge clk or posedge reset) begin
 | 
			
		||||
        if (reset) begin
 | 
			
		||||
            // 初始化
 | 
			
		||||
            out_en <= 0;
 | 
			
		||||
            data_out <= 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),
 | 
			
		||||
        // .wfull(),
 | 
			
		||||
        // .awfull(),
 | 
			
		||||
        
 | 
			
		||||
        // .arempty(fifo_alempty)
 | 
			
		||||
        .rempty(fifo_empty),
 | 
			
		||||
        .rdata(data_out),
 | 
			
		||||
        .rinc(out_en)
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
endmodule
 | 
			
		||||
		Reference in New Issue
	
	Block a user