团队名称:就你手搓CPU是吧
报名编号:CICC1607
文章编号:4
我们组计划基于E203内核搭建用于手势识别任务的智能Soc,为了实现结果输出,需要给系统搭建视频输出接口。因为Nexys A7板卡有一个VGA视频输出接口,需要实现其驱动,下面介绍我们的方法。
VGA的全称是Video Graphics Array,即视频图形阵列,是一个使用模拟信号进行视频传输的标准。早期的CRT显示器由于设计制造上的原因,只能接收模拟信号输入,因此FPGA内部的需要进行数模转换。VGA接口共有15针,分成3排,每排5个孔。最基本的包含R\G\B\H\V(分别为红、绿、蓝、行、场)5个分量,不管以何种类型的接口接入,其信号中至少包含以上这5个分量。
VGA 显示器扫描方式从屏幕左上角一点开始,从左向右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步信号进行同步;当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。完成一行扫描的时间称为水平扫描时间,其倒数称为行频率;完成一帧(整屏)扫描的时间称为垂直扫描时间,其倒数称为场频率,即屏幕的刷新频率,常见的有 60Hz,75Hz 等等,但标准的 VGA 显示的场频 60Hz
VGA的配置主要是设置对应分辨率输出的时序,其配置参数如下所示:
如640*480的时钟位25.175M = (96+48+16+640) * (2+33+480+10) * 60,不同的分辨率与帧率对应了不同的时钟频率,都可以通过这张表进行查询/计算
对于VGA的逻辑控制接口主要有以下
module VGA(
input wire i_clk, // base clock
input wire i_pix_stb, // pixel clock strobe
input wire i_rst, // reset: restarts frame
output wire o_hs, // horizontal sync
output wire o_vs, // vertical sync
output wire o_blanking, // high during blanking interval
output wire o_active, // high during active pixel drawing
output wire o_screenend, // high for one tick at the end of screen
output wire o_animate, // high for one tick at end of active drawing
output wire [9:0] o_x, // current pixel x position
output wire [8:0] o_y // current pixel y position
);
板卡管脚分配如下所示:
在配置过程中要注意:
1、行时序是以”像素”为单位的, 场时序是以”行”为单位的。
2、VGA 工业标准显示模式要求:行同步,场同步都为负极性,即同步脉冲要求是负脉冲。
3、VGA 行时序对行同步时间、消隐时间、行视频有效时间和行前肩时间有特定的规范,场时序也是如此。