2020-08-06

VGA显示RGB颜色

VGA(Video Graphics Array)做为视频输出输入接口已经广泛使用很长时间,主要通过红、绿、
蓝三原色的模拟量传输。本实验通过在 VGA 屏幕上显示彩条,来练习视频的时序和视频颜色的表
示,为后面视频处理实验做个基础。
VGA 显示器扫描方式从屏幕左上角一点开始,从左向右逐点扫描,每扫描完一行,电子束回到
屏幕的左边下一行的起始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步信号
进行同步;当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,
同时进行场消隐,开始下一帧。
完成一行扫描的时间称为水平扫描时间,其倒数称为行频率;完成一帧(整屏)扫描的时间
称为垂直扫描时间,其倒数称为场频率,即刷新一屏的频率,常见的有 60Hz,75Hz 等等。标准
的 VGA 显示的场频 60Hz。
时钟频率:以 1024x768@59.94Hz(60Hz)为例,每场对应 806 个行周期,其中 768 为显示行。每
显示行包括 1344 点时钟,其中 1024 点为有效显示区。由此可知:需要点时钟频率:806134460
约 65MHz。

1024*768*60
top代码如下

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date:    21:08:02 08/05/2020 
// Design Name:  robetwu
// Module Name:    vga_sample 1024*768pix*60Hz
//							1344*806*60=64.99MHZjian
//							将时钟设置为65MHZ
// Project Name: 
// Target Devices: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//
module vga_sample(
	input clk,
	input rst_n,
	output reg [15:0] rgb,//R[4:0],G[10:5],B[15:0]
	output reg Hsync,
	output reg Vsync
/*	output  clk_vga*/
    );
	
parameter CNT_H=1344;
parameter CNT_V=806;
parameter CNT_MOVE=162500;

reg [19:0]cnt_h;
reg [19:0]cnt_v;
reg [19:0]cnt_move;

reg [11:0]b_cnt_v;
reg [11:0]b_cnt_h;
reg flag_move;
wire clk_vga;
//PLL65MHz时钟 全局bufg

  IBUFG clkf_buf
   (.O (clkfb),
    .I (clk));

  pll pll_vga
   (// Clock in ports
    .CLK_IN1(clkfb),      // IN
    // Clock out ports
    .clk_cga(clk_vga));    // OUT
	 
//行像素为剳6为高其他为低	 
always@(posedge clk_vga or negedge rst_n)
if(!rst_n)
cnt_h<=0;
else if(cnt_h==CNT_H)
cnt_h<=0;
else
cnt_h<=cnt_h+1;

always@(posedge clk_vga or negedge rst_n)
if(!rst_n)
	Hsync<=0;
else if(cnt_h>=0&&cnt_h<=135)
	Hsync<=1;
else
	Hsync<=0;

//列像素为剤¸ªpix为高其他为低
always@(posedge clk_vga or negedge rst_n)
if(!rst_n)
cnt_v<=0;
else if((cnt_h==CNT_H)&&(cnt_v==CNT_V))
cnt_v<=0;
else if(cnt_h==20'd800)
cnt_v<=cnt_v+1;

always@(posedge clk_vga or negedge rst_n)
if(!rst_n)
	Vsync<=0;
else if(cnt_v>=0&&cnt_v<=2)
	Vsync<=1;
else
	Vsync<=0;

//产生移动标倊always@(posedge clk_vga or negedge rst_n)
if(!rst_n)
begin
cnt_move<=0;
flag_move<=0;
end
else if(cnt_move==CNT_MOVE)
begin
cnt_move<=0;
flag_move<=1;
end
else if((cnt_h<=20'd1321&&cnt_h>=20'd296)&&(cnt_v<=20'd806&&cnt_v>=20'd35))
begin
cnt_move<=cnt_move+1;
flag_move<=0;
end
else 
flag_move<=0;

reg h_direction;
reg v_direction;
//块向上下运动
always@(posedge clk_vga or negedge rst_n)
if(!rst_n)
b_cnt_v<=0;
else if (v_direction==1&&flag_move==1)
b_cnt_v<=b_cnt_v-1;
else if(v_direction==0&&flag_move==1)
b_cnt_v<=b_cnt_v+1;

always@(posedge clk_vga or negedge rst_n)
if(!rst_n)
v_direction<=0;//向下运动
else if(b_cnt_v==12'd700)//下边界
v_direction<=1;//向上运动
else if(b_cnt_v==0)
v_direction<=0;

//块向左右运动
always@(posedge clk_vga or negedge rst_n)
if(!rst_n)
b_cnt_h<=0;
else if (h_direction==1&&flag_move==1)
b_cnt_h<=b_cnt_h-1;
else if(h_direction==0&&flag_move==1)
b_cnt_h<=b_cnt_h+1;

always@(posedge clk_vga or negedge rst_n)
if(!rst_n)
h_direction<=0;//向zuo运动
else if((b_cnt_h==12'd1200))//右边界
h_direction<=1;//向you运动
else if(b_cnt_h==0)
h_direction<=0;	
//生成RGB竖条纊always@(posedge clk_vga or negedge rst_n)
if(!rst_n)
rgb<=16'd0;
else if ((cnt_h>=296+b_cnt_h&&cnt_h<=396+b_cnt_h)&&(cnt_v>=35+b_cnt_v&&cnt_v<=135+b_cnt_v))
rgb<=16'b11111_111111_11111;
else if((cnt_h<=20'd637&&cnt_h>=20'd296)&&(cnt_v<=20'd806&&cnt_v>=20'd35))
rgb<=16'b11111_000000_00000;
else if((cnt_h<=20'd978&&cnt_h>=20'd637)&&(cnt_v<=20'd806&&cnt_v>=20'd35))
rgb<=16'b00000_111111_00000;
else if((cnt_h<=20'd1321&&cnt_h>=20'd979)&&(cnt_v<=20'd806&&cnt_v>=20'd35))
rgb<=16'b00000_000000_11111;
else 
rgb<=16'd0;



//
//wire [35 : 0] CONTROL0;	
//wire [255 : 0] TRIG0;
//chipscope_icon chipscope_icon_inst(
//    .CONTROL0(CONTROL0)) /* synthesis syn_black_box syn_noprune=1 */;
//
//
//chipscope_ila chipscope_ila_inst(
//    .CONTROL(CONTROL0),
//    .CLK(clk_vga),
//    .TRIG0(TRIG0)) /* synthesis syn_black_box syn_noprune=1 */;
//
//
//assign TRIG0[4:0]=rgb[4:0];
//assign TRIG0[10:5]=rgb[10:5];
//assign TRIG0[15:11]=rgb[15:11];	
//assign TRIG0[16]=Hsync;	
//assign TRIG0[17]=Vsync;	
//assign TRIG0[18]=clk_vga;	
	
endmodule

结果如下图所示
在这里插入图片描述
在这里插入图片描述

利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值