当前位置:网站首页>图像处理1:RGB888_YCbCr444
图像处理1:RGB888_YCbCr444
2022-07-23 07:20:00 【刘颜儿】
前言
正文
一、YCbCr
1.1 重点
- 计算公式
- 流水线
- 行信号打拍

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2022/04/19 10:02:26
// Design Name:
// Module Name: RGB888_YCbCr444
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module RGB888_YCbCr444
(
//global clock
input clk, //cmos video pixel clock
input rst_n, //global reset
//Image data prepred to be processd
input per_frame_vsync, //Prepared Image data vsync valid signal
input per_frame_href, //Prepared Image data href vaild signal
input per_frame_clken, //Prepared Image data output/capture enable clock
input [7:0] per_img_red, //Prepared Image red data to be processed
input [7:0] per_img_green, //Prepared Image green data to be processed
input [7:0] per_img_blue, //Prepared Image blue data to be processed
//Image data has been processd
output post_frame_vsync, //Processed Image data vsync valid signal
output post_frame_href, //Processed Image data href vaild signal
output post_frame_clken, //Processed Image data output/capture enable clock
output [7:0] post_img_Y, //Processed Image brightness output
output [7:0] post_img_Cb, //Processed Image blue shading output
output [7:0] post_img_Cr //Processed Image red shading output
);
//--------------------------------------------
/********************************************* //Refer to <OV7725 Camera Module Software Applicaton Note> page 5 Y = (77 *R + 150*G + 29 *B)>>8 Cb = (-43*R - 85 *G + 128*B)>>8 + 128 Cr = (128*R - 107*G - 21 *B)>>8 + 128 Y = (77 *R + 150*G + 29 *B)>>8 Cb = (-43*R - 85 *G + 128*B + 32768)>>8 Cr = (128*R - 107*G - 21 *B + 32768)>>8 **********************************************/
//Step 1
reg [15:0] img_red_r0, img_red_r1, img_red_r2;
reg [15:0] img_green_r0, img_green_r1, img_green_r2;
reg [15:0] img_blue_r0, img_blue_r1, img_blue_r2;
// 第一级流水线:执行乘法
[email protected](posedge clk or negedge rst_n)begin
if(!rst_n)
begin
img_red_r0 <= 0;
img_red_r1 <= 0;
img_red_r2 <= 0;
img_green_r0 <= 0;
img_green_r1 <= 0;
img_green_r2 <= 0;
img_blue_r0 <= 0;
img_blue_r1 <= 0;
img_blue_r2 <= 0;
end
else
begin
img_red_r0 <= per_img_red * 8'd77;
img_red_r1 <= per_img_red * 8'd43;
img_red_r2 <= per_img_red * 8'd128;
img_green_r0 <= per_img_green * 8'd150;
img_green_r1 <= per_img_green * 8'd85;
img_green_r2 <= per_img_green * 8'd107;
img_blue_r0 <= per_img_blue * 8'd29;
img_blue_r1 <= per_img_blue * 8'd128;
img_blue_r2 <= per_img_blue * 8'd21;
end
end
//--------------------------------------------------
//Step 2
reg [15:0] img_Y_r0;
reg [15:0] img_Cb_r0;
reg [15:0] img_Cr_r0;
// 第二级流水线:执行加法
[email protected](posedge clk or negedge rst_n)begin
if(!rst_n)
begin
img_Y_r0 <= 0;
img_Cb_r0 <= 0;
img_Cr_r0 <= 0;
end
else
begin
img_Y_r0 <= img_red_r0 + img_green_r0 + img_blue_r0;
img_Cb_r0 <= img_blue_r1 - img_red_r1 - img_green_r1 + 16'd32768;
img_Cr_r0 <= img_red_r2 + img_green_r2 + img_blue_r2 + 16'd32768;
end
end
//--------------------------------------------------
//Step 3
reg [7:0] img_Y_r1;
reg [7:0] img_Cb_r1;
reg [7:0] img_Cr_r1;
// 第三级流水线:右移8位=除以256 ??????
[email protected](posedge clk or negedge rst_n)begin
if(!rst_n)
begin
img_Y_r1 <= 0;
img_Cb_r1 <= 0;
img_Cr_r1 <= 0;
end
else
begin
img_Y_r1 <= img_Y_r0[15:8];
img_Cb_r1 <= img_Cb_r0[15:8];
img_Cr_r1 <= img_Cr_r0[15:8];
end
end
//------------------------------------------
//lag 3 clocks signal sync
// 上面有3级流水线,因此经历了3个时钟,于是需要把输入的行、使能信号等进行3次打拍操作
// 这里的打拍操作比较厉害,值得学习!!
//---------------------------------------------
reg [2:0] per_frame_vsync_r;
reg [2:0] per_frame_href_r;
reg [2:0] per_frame_clken_r;
[email protected](posedge clk or negedge rst_n)begin
if(!rst_n)
begin
per_frame_vsync_r <= 0;
per_frame_href_r <= 0;
per_frame_clken_r <= 0;
end
else
begin
per_frame_vsync_r <= {
per_frame_vsync_r[1:0], per_frame_vsync};
per_frame_href_r <= {
per_frame_href_r [1:0], per_frame_href};
per_frame_clken_r <= {
per_frame_clken_r[1:0], per_frame_clken};
end
end
assign post_frame_vsync = per_frame_vsync_r[2];
assign post_frame_href = per_frame_href_r [2];
assign post_frame_clken = per_frame_clken_r[2];
// 当有行信号时,就输出
assign post_img_Y = post_frame_href ? img_Y_r1 : 8'd0;
assign post_img_Cb = post_frame_href ? img_Cb_r1: 8'd0;
assign post_img_Cr = post_frame_href ? img_Cr_r1: 8'd0;
endmodule
边栏推荐
- prometheus+node-exporter+grafana 监控服务器系统资源
- 魔兽地图编辑器触发器笔记
- How to deal with the new development mode when doing testing?
- ES6——周考题
- Unity制作简单拦截近防炮——如何预测打击目标
- 数据库系统原理与应用教程(045)—— MySQL 查询(七):聚合函数
- 数据库系统原理与应用教程(039)—— MySQL 查询(一):SELECT 命令的语法分析
- Error running ‘XXX‘: Command line is too long. Shorten command line for AudioTest or also ...
- Probability meditation: 2. The quantitative rules
- Wechat applet -- dynamically set the navigation bar color
猜你喜欢
随机推荐
数据库-视图详探
General contents of radar introduction column
2. Les règles quantitatives
Reference and output message types in ROS
Warcraft map editor trigger notes
专题讲座5 组合数学 学习心得(长期更新)
LeetCode_52_N皇后Ⅱ
【STM32】串口通信基础知识
4D antenna array layout design
Elephant Swap的LaaS方案优势分析,致eToken表现强势
Kotlin - suspend function
Talking about the CPU type of anroid device and the placement directory of so files
C # make a simple browser
PHP gets the current timestamp three bit MS MS timestamp
挖财开户风险性大吗,安全吗?
建立STM32F103C8T6工程模板和STM32 ST-LINK Utilit烧录hex文件
2022-07-22 review linked list operation and some problems
SeekTiger的Okaleido有大动作,生态通证STI会借此爆发?
Tutorial on principles and applications of database system (040) -- MySQL query (II): set the column name or expression to be queried
ROS2自学笔记:URDF机器人建模







