14.基础实验(3)vga显示

vga显示

一、实验内容

实验要求

实现vga接口显示,可以将需要发送的数据显示屏幕上。

实验环境

实验平台:特权同学Cy4_Altera开发板

实验软件:Quartus 18.1 + Modelsim 10.7

主控芯片:EP4CE6E22C8

二、系统框图

image-20210105201113869

VGA实现的接口时序,即hsync和vsync都为高有效(其中一种)。

不论是vsync,还是hsync,都是在addressable video区域输出有效的数据,而hsync是在front_porch后出现信号。

三、设计分析

根据上面的时序图,我们需要设计相应的时序波形。我们设计的分辨率以640x480@60Hz为例进行实现。

其时钟频率为25MHz,与输入的时钟频率一致。

主要的参数有front porch、sync time、back porch、top/left border、addr time、totaltime

image-20210105202714303

根据上面的参数,设计相应的时序。同时hsync的拉高表示一帧的开始。

image-20210105205445462

关键在于输出vsync信号和hsync信号,以及在有效的数据方位内输出将要显示的数据。

四、实验步骤

采用parameter定义一些宏变量,来实现相应的功能,方便适应其他的分辨率和显示帧数。

根据时序图编写代码,然后使用modelsim仿真查看结果。

//hsync_flag
always @(posedge clk) 
begin
	if (rst == 1'b1) 
		hsync_flag <= 1'b0;
	else if (hcnt == (H_SYNC_TIME - 'd1))
		hsync_flag <= 1'b0;
	else if (hcnt == (H_TOTAL_TIME - 'd1))
		hsync_flag <= 1'b1;
end

//vsync_flag
always @(posedge clk) 
begin
	if (rst == 1'b1) 
		vsync_flag <=1'b0;
	else if (vcnt == (V_SYNC_TIME - 'd1) && hcnt == (H_TOTAL_TIME - 'd1))
		vsync_flag <= 1'b0;
	else if (vcnt == (V_TOTAL_TIME - 'd1) && hcnt == (H_TOTAL_TIME - 'd1))
		vsync_flag <= 1'b1;
end

其中很重要的就是hsync和vsync信号的产生。

五、实际波形仿真

查看modelsim的仿真结果。

image-20210105214440731

hcnt计数到95时hsync拉低,数据正确。

image-20210105214753626

hcnt计数到143拉高,这里提前了一拍,拉高,可以保证数据就能够与实际要求的位置同步。如下图所示。

image-20210105214927029

最后是相应的结果,基本是正确的。

image-20210105215054152

没问题,那就下板测试。

image-20210105223043366

结果正确,搞定。

六、总结与讨论*

1.先设计时序图,然后编写代码,使用modelsim仿真,最后下板测试,这是一个连续的过程。若还是有问题,可以考虑使用ila抓取数据,进一步查找问题。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值