基于小梅哥的FPGA串口传图到TFT屏幕添加一个RGB转Ycbcr模块

基于小梅哥的FPGA串口传图到TFT屏幕做一个RGB转Ycbcr模块

我是用的是小梅哥的AC620开发板,自带了一个从pc通过uart串口传图到FPGA的sdram中,再从sdram读取图片到TFT屏幕上。因为是通过RGB格式输出的图片,所以我想在他的工程里添加一个模块用于RGB转Ycbcr。图中红色选中就是我添加的模块

在这里插入图片描述
首先是RGB转Ycbcr算法: (这是一种转换格式)
计算公式: Y = 0.299R + 0.587G + 0.114B
Y = -0.619R - 0.331G + 0.500B + 128
Y = 0.500R - 0.419G - 0.081B + 128

但是在FPGA中浮点数计算不方便,耗费资源多,为了加快速度,所以去掉浮点:把小数扩大256倍,舍去小数点 Y0 ≈ 76R + 150G + 29B ,因为数值扩大256倍,所以把Y0右移8位得正确结果,

module rgb2Ycbcr(
	input clk,
	input reset,
	input idata_en,
	input	ihsync,
	input ivsync,
	input [7:0]ired,
   input	[7:0]igreen,
   input	[7:0]iblue,
	
	output odata_en,
	output ohsync,
	output ovsync,
	output [7:0]Y_data,
	output [7:0]cb_data,
	output [7:0]cr_data
);
//第一步:耗时一个clk,完成9个乘法计算
	reg [15:0]red0,red1,red2;
	reg [15:0]green0,green1,green2;
	reg [15:0]blue0,blue1,blue2;
always@(posedge clk)begin
	red0 <= ired * 8'd76;
	red1 <= ired * 8'd43;
	red2 <= ired * 8'd128;
	green0 <= igreen * 8'd150;
	green1 <= igreen * 8'd84;
	green2 <= igreen * 8'd107;
	blue0 <= iblue * 8'd29;
	blue1 <= iblue * 8'd128;
	blue2 <= iblue * 8'd20;
end

	
//第二步:耗时一个clk,完成加减法运算
	reg [15:0]Y0,cb0,cr0;
always@(posedge clk)begin
	Y0 <= red0 + green0 + blue0;
	cb0 <= blue1 - green1 -red1 + 16'd32768;
	cr0 <= red2 - green2 - blue2 + 16'd32768;
end


//第三步:耗时一个clk,把数据缩小为1/256
	reg [15:0]Y1,cb1,cr1;
always@(posedge clk)begin
	Y1 <= Y0[15:8];
	cb1 <= cb0[15:8];
	cr1 <= cr0[15:8];
end

//前面三步耗费了3个clk,所以把场行同步信号也延迟三拍
	reg hsync1,hsync2,hsync3;
	reg vsync1,vsync2,vsync3;
	reg data_en1,data_en2,data_en3;
always@(posedge clk or negedge reset)
begin
		hsync1 <= ihsync;
		vsync1 <= ivsync;
		data_en1 <= idata_en;
		
		hsync2 <= hsync1;
		vsync2 <= vsync1;
		data_en2 <= data_en1;
		
		hsync3 <= hsync2;
		vsync3 <= vsync2;
		data_en3 <= data_en2;
	end
	
	assign ohsync = hsync3;
	assign ovsync = vsync3;
	assign odata_en = data_en3;
	assign Y_data = ohsync?Y1:8'd0;
	assign cb_data = ohsync?cb1:8'd0;
	assign cr_data = ohsync?cr1:8'd0;


endmodule

因为进行乘法移位等运算,耗费三个时钟,所以图片的行同步和场同步信号也延迟三个时钟以达到同步。代码是参考《基于FPGA和MATLAB的图像处理》,作者延时是使用向量方法(下图),但是在quartus II中会报错,所以我还是用打拍子的方式延时。最后在小梅哥的工程里把本模块例化就行。最后可以在TFT屏幕上显示Ycbcr各个分量
在这里插入图片描述

01 试看小梅哥fpga设计思想与验证方法视频:http://bbs.elecfans.com/jishu_484523_1_1.html 02 芯航线FPGA开发平台设计初衷:http://bbs.elecfans.com/jishu_514523_1_1.html 03 芯航线FPGA学习平台介绍:http://bbs.elecfans.com/jishu_514526_1_1.html 04 芯航线FPGA学习平台焊接记录:http://bbs.elecfans.com/jishu_514914_1_1.html 05 芯航线FPGA学习平台系统调试:http://bbs.elecfans.com/jishu_515169_1_1.html 06【连载视频教程(一)】科学的开发流程:http://bbs.elecfans.com/jishu_515340_1_1.html 07【连载视频教程(二)】3-8译码器设计验证:http://bbs.elecfans.com/jishu_515468_1_1.html 08【连载视频教程(三)】二进制计数器设计验证:http://bbs.elecfans.com/jishu_515476_1_1.html 09【连载视频教程(四)】高性能计数器IP核使用:http://bbs.elecfans.com/jishu_515714_1_1.html 10【连载视频教程(五)】BCD码计数器设计验证:http://bbs.elecfans.com/jishu_515893_1_1.html 11【连载视频教程(六)】例解阻塞赋值与非阻塞赋值:http://bbs.elecfans.com/jishu_516094_1_1.html 12【连载视频教程(七)】例说状态机:http://bbs.elecfans.com/jishu_516249_1_1.html 13【连载视频教程(八)】基于状态机的独立按键消抖:http://bbs.elecfans.com/jishu_516791_1_1.html 14【连载视频教程(九)】独立按键控制LED与亚稳态问题引入:http://bbs.elecfans.com/jishu_516795_1_1.html 15【连载视频教程(十)】数码管动态扫描设计与实现:http://bbs.elecfans.com/jishu_516979_1_1.html 16【连载视频教程(十一)】UART串口发送模块设计与验证:http://bbs.elecfans.com/jishu_516984_1_1.html 17【连载视频教程(十二)】UART串口接收模块设计与验证:http://bbs.elecfans.com/jishu_518308_1_1.html 18【芯航线FPGA学习平台众筹进度帖】芯航线FPGA开发板入手测试说明:http://bbs.elecfans.com/jishu_518301_1_1.html 19【芯航线FPGA学习平台众筹进度帖】芯航线FPGA学习套件配置文件固化教程 http://bbs.elecfans.com/jishu_518816_1_1.html 20【芯航线FPGA学习平台众筹进度帖】芯航线FPGA学习套件众筹回报已发放完毕,特公布运单号 http://bbs.elecfans.com/jishu_518819_1_1.html 21【芯航线FPGA学习平台众筹进度帖】芯航线FPGA学习套件众筹总结暨抽奖结果 http://bbs.elecfans.com/jishu_520454_1_1.html 22【芯航线FPGA学习平台众筹进度帖】【有奖活动】芯航线FPGA学习平台有奖活动第一季——看教程,秀笔记,赢好礼 http://bbs.elecfans.com/jishu_520463_1_1.html 23【连载视频教程(十三)】嵌入式块RAM应用之双口RAM:http://bbs.elecfans.com/jishu_520914_1_1.html 24【连载视频教程(十四)】搭建串口收发与存取双口RAM简易应用系统: http://bbs.elecfans.com/jishu_520915_1_1.html 25【连载视频教程(十五)】ROM的搭建与Signaltap II 工具使用:http://bbs.elecfans.com/jishu_522774_1_1.html 26【连载视频教程(十六)】FIFO介绍与时序验证:http://bbs.elecfans.com/jishu_522778_1_1.html 27【连载视频教程(十七)】使用PLL进行设计+Verilog参数化设计介绍: http://bbs.elecfans.com/jishu_524442_1_1.html 28【芯航线FPGA学习平台众筹进度帖】芯航线FPGA学习套件下载器驱动安装说明 http://bbs.elecfans.com/jishu_524793_1_1.html 29【芯航线FPGA学习平台众筹进度帖】Verilog语法基础讲解之参数化设计: http://bbs.elecfans.com/jishu_528770_1_1.html 30【连载视频教程(十八)】基于线性序列机设计思想的串行DAC(TLC5620)驱动: http://bbs.elecfans.com/jishu_533944_1_1.html 31【连载视频教程(十九)】基于线性序列机设计思想的串行ADC驱动: http://bbs.elecfans.com/jishu_537056_1_1.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值