FPGA 26 RGB888 简单屏幕显示(demo)测试

在这里插入图片描述

FPGA 26 RGB888 简单屏幕显示(demo)测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bbmSgLM8-1629212106464)(img/blog_img/fpga/image-20210817224309092.png)]

主要功能 :设计了disp_ctrl_module 的显示测试模块

实现(设计)流程:根据RGB888 屏幕的工作原理以及数据传输协议方式,编写输出信号的发送,进而将我们要显示的图像显示到屏幕上。

实验目的 : 结合上个小节设计的rgb888 驱动模块,通过该模块输出的rgb888 的X ,Y 坐标,作为输入给本次的数据结果,然后再输出坐标即可。(本次在内部使用的组合逻辑,并没有用到时序逻辑,可以根据实际的情况,设计时序逻辑也是可以的)

实验现象 : 通过内部设计一个屏幕驱动显示模块,实现屏幕2*4=8 区域颜色显示的效果

整体设计过程如下所示:(由实验目的分析下面该图即可)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0DJbr9Pk-1629212106466)(img/blog_img/fpga/image-20210817224112392.png)]

注: 下面的文件,包括了所有的顶层文件和逻辑文件,实际上,最好的方式是将 disp_ctrl_module 给独立出来,便于在其他环境下的一个使用,顶层文件一般来说,只有连线,而不应该存在的代码编译的部分,虽然可以用,但是这是不规范的.

module TFT_CTRL_test(
	Clk, 	//50MHZ时钟
	Rst_n,
	TFT_RGB,//TFT数据输出
	TFT_HS,	//TFT行同步信号
	TFT_VS,	//TFT场同步信号
	TFT_CLK,
	TFT_DE,
	TFT_PWM
);

	input Clk;
	input  Rst_n;
	output [15:0]TFT_RGB;
	output TFT_HS;
	output TFT_VS;
	output TFT_CLK;
	output TFT_DE;
	output TFT_PWM;
	
	reg [15:0]disp_data;
	wire [9:0]hcount;
	wire [9:0]vcount;
	wire Clk33M;



TFT_pll TFT_pll_01 (
	.inclk0(Clk),
	.c0(Clk33M)
	);

	
	
TFT_LCD TFT_LCD_01
	(
		.Clk33M(Clk33M),
		.Rst_n(Rst_n),
		.Data_in(disp_data),
		
		.vcount(vcount),
		.hcount(hcount),
		.TFT_RGB(TFT_RGB),
		.TFT_VS(TFT_VS),
		.TFT_HS(TFT_HS),
		.TFT_CLK(TFT_CLK),
		.TFT_DE(TFT_DE),
		.TFT_PWM(TFT_PWM)
	);


//定义颜色编码
localparam 
	//BLACK		= 16'h0000, //黑色
	BLACK		= 16'h4000, //棕色
	BLUE		= 16'h001F, //蓝色
	RED		= 16'hF800, //红色
	PURPPLE	= 16'hF81F, //紫色
	GREEN		= 16'h07E0, //绿色
	CYAN		= 16'h07FF, //青色
	YELLOW	= 16'hFFE0, //黄色
	WHITE		= 16'hFFFF; //白色
	
//定义每个像素块的默认显示颜色值
localparam 
	R0_C0 = BLACK,	//第0行0列像素块
	R0_C1 = BLUE,	//第0行1列像素块
	R1_C0 = RED,	//第1行0列像素块
	R1_C1 = PURPPLE,//第1行1列像素块
	R2_C0 = GREEN,	//第2行0列像素块
	R2_C1 = CYAN,	//第2行1列像素块
	R3_C0 = YELLOW,	//第3行0列像素块
	R3_C1 = WHITE;	//第3行1列像素块

	wire R0_act = vcount >= 0 && vcount < 120;	//正在扫描第0行
	wire R1_act = vcount >= 120 && vcount < 240;//正在扫描第1行
	wire R2_act = vcount >= 240 && vcount < 360;//正在扫描第2行
	wire R3_act = vcount >= 360 && vcount < 480;//正在扫描第3行
	
	wire C0_act = hcount >= 0 && hcount < 400; //正在扫描第0列
	wire C1_act = hcount >= 400 && hcount < 800;//正在扫描第1列 
	
	wire R0_C0_act = R0_act & C0_act;	//第0行0列像素块处于被扫描中标志信号
	wire R0_C1_act = R0_act & C1_act;	//第0行1列像素块处于被扫描中标志信号
	wire R1_C0_act = R1_act & C0_act;	//第1行0列像素块处于被扫描中标志信号
	wire R1_C1_act = R1_act & C1_act;	//第1行1列像素块处于被扫描中标志信号
	wire R2_C0_act = R2_act & C0_act;	//第2行0列像素块处于被扫描中标志信号
	wire R2_C1_act = R2_act & C1_act;	//第2行1列像素块处于被扫描中标志信号
	wire R3_C0_act = R3_act & C0_act;	//第3行0列像素块处于被扫描中标志信号
	wire R3_C1_act = R3_act & C1_act;	//第3行1列像素块处于被扫描中标志信号
	
	always@(*)
		case({R3_C1_act,R3_C0_act,R2_C1_act,R2_C0_act,
				R1_C1_act,R1_C0_act,R0_C1_act,R0_C0_act})
			8'b0000_0001:disp_data = R0_C0;
			8'b0000_0010:disp_data = R0_C1;
			8'b0000_0100:disp_data = R1_C0;
			8'b0000_1000:disp_data = R1_C1;
			8'b0001_0000:disp_data = R2_C0;
			8'b0010_0000:disp_data = R2_C1;
			8'b0100_0000:disp_data = R3_C0;
			8'b1000_0000:disp_data = R3_C1;
			default:disp_data = R0_C0;
		endcase
	
endmodule


	
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值