Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

VGA_layer_demo

文件结构

/src 工程文件

/scipts 用于转图像的脚本文件

简介

这是一个适用于浙江大学数字逻辑设计课程SWORD板的VGA显示子模块。

src

由于SWORD板DAC限制,VGA的色域被限制在RGB444。然而对于分辨率和刷新率,只要写出符合相应VGA时序的vga_timing即可实现。本项目中给出的是最常见的640x480@60Hz时序。若有其他需求,可自行替换vga_timing模块。

这个模块比较好的包装了RGBA混色,多图层叠加的操作,并提供了方便的调整图像位置/图像透明度(可以用于支持淡入淡出等动画)的接口。

只要是满足addr->[15:0]RGBdata的“储存器”模块,均能作为一个图层传入vga_display_top模块。因此,我们可以使用BRAM(Block Memory Generator IP核控制的内存),也可以使用一个大reg在模块内部储存图像信息。工程中分别给出了background和platform_renderer两个典型的例子。BRAM的优点在于使用板上BRAM资源,(推测:不像大reg需要复杂的布线推导),综合时间相对较快;reg的优点在于可以同时在多处访问,不像BRAM原生只支持至多两个addr端口(也就是同一时钟周期只能访问图像数据两个位置,更多支持需要书写访问仲裁器),reg这一特性使得其能更好的支持图像复用的场景。我们也可以在模块内部额外封装颜色滤镜、镜像、旋转、图片片选等操作,以支持更高级的动画。例如figure实现了人物12个动作的切换和左右镜像,platform实现了自由大小的圆角草方块平台。

这个模块实际上是我们数字逻辑设计课程工程的一部分。由于最后时间过于仓促,很多原定的整理和改进都没能实现,也留下了很多小bug尚未修复orz。

scripts

脚本基于image-2-coe/image2coe.py at master · Jesse-Millwood/image-2-coe。将其改写为了Python3版本。由于初始时想要支持较好的渐变色效果,了解到抖色算法(可以理解为通过多个像素点模拟一个像素点更丰富的颜色效果)。于是向原始代码中加入了dither算法。然而写得效果并不好(逃)。大部分时候我们都是用no_dithered版本处理素材的。注意reg和coe的大端序小端序不太一样。

Known Bugs or Possible Improvements:

由于未添加双缓存,该模块在显示高速运动时容易出现图像撕裂问题。可以考虑使用SRAM添加双缓存。可能需要了解verilog inout接口的相关知识。需要了解异步SRAM的相关原理。SWORD板上相关SRAM的使能信号均为低电平有效。

当图层右边界接近屏幕边缘,图层左边界会发生一定回绕。

A通道精度过小,会导致透明度渲染存在一定问题。

可以将“储存器”和图层renderer的交互接口由addr,data变为pixel_x,pixel_y,data,这样在“储存器”内部有相关坐标变换需求时、运算量更小;且接口更直观。

Tips:

储存器的时序一般要选用和VGA像素时序相同的时序(无论是BRAM还是reg实现),否则会出现彩色斑点/错位像素等情况。以25.175MHz为例,当Vivado工程Implementation报告中的WST(Worst Slack Time)超过约-40ns时,说明此时应该有相关路径存在较大的时序问题,很有可能导致VGA显示错误。此时应该检查相关运算流程是否过长,是否存在跨时钟域等问题。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages