VGA显示时序及生成行帧有效信号的Verilog代码

1.显示器电子枪扫描方式

在这里插入图片描述

显示器的电子枪扫描方式如下:

  1. 打开显示,扫描坐标从显示器的左上角开始,沿着第一个水平向右的箭头所示的方向逐个像素向右扫描。
  2. 扫描到第一行最右侧的像素后,关闭显示,扫描坐标沿着第一个虚线的方向从第一行的末尾转移至第二行的行首。
  3. 打开显示,扫描坐标从第二行的左上角开始,沿着第二个水平向右的箭头所示的方向逐个像素向右扫描。
  4. 扫描到第二行最右侧的像素后,关闭显示,扫描坐标沿着第二个虚线的方向从第二行的末尾转移至第三行的行首。
  5. 重复上述步骤,直至扫描至显示器的右下角时,关闭显示,扫描坐标从显示器的右下角转移至显示器的左上角。

从一行的末尾转移至下一行的行首的过程称为行同步(行消隐),从显示器的右下角转移至显示器的左上角的过程称为场同步(场消隐)

2.VGA的行扫描时序

在这里插入图片描述
一个完整的行扫描周期(H_TOTAL)由以上H_SYNC,H_BACK,H_DISP,H_FRONT四个部分组成,一行开始时,先进入行同步(H_SYNC)时期,进行行扫描地址的复位;紧接着进入行消隐后沿(H_BACK)时期,该时期为行扫描地址转移后的稳定等待期;接下来进入行显示有效(H_DISP)时期,该时期的数据有效;最后进入行消隐前沿(H_FRONT)时期,该时期进行扫描地址转移的准备。

3.VGA的帧(场)扫描时序

在这里插入图片描述
帧扫描周期与行扫描周期类似,一个完整的帧扫描周期(V_TOTAL)由以上V_SYNC,V_BACK,V_DISP,V_FRONT四个部分组成,一行开始时,先进入帧同步(V_SYNC)时期,进行帧扫描地址的复位;紧接着进入帧消隐后沿(V_BACK)时期,该时期为帧扫描地址转移后的稳定等待期;接下来进入帧显示有效(V_DISP)时期,该时期的数据有效;最后进入帧消隐前沿(V_FRONT)时期,该时期进帧扫描地址转移的准备。

4.不同分辨率的时序表

分辨率时钟(MHz)行同步H_SYNC行消隐后沿H_BACK行有效H_DISP行消隐前沿H_FRONT行扫描总周期H_TOTAL帧同步V_SYNC帧消隐后沿 V_BACK帧有效V_DISP帧消隐前沿V_FRONT帧扫描总周期V_TOTAL
640*480@60Hz25.17596486401680023348010525
800*600@60Hz501206480056104062360037666
1024*768@60Hz6513616010242413446297683806
1280*720@25Hz74.25402201280242039605207205750
1280*720@30Hz37.12540220128011016505207205750
1280*720@30Hz74.25402201280176033005207205750
1280*720@50Hz74.2540220128044019805207205750
1280*720@60Hz74.2540220128011016505207205750
1280*1024@60Hz1081122481280481688338102411066
1920*1080@25Hz74.254414819205282640536108041125
1920*1080@30Hz74.25441481920882200536108041125
1920*1080@50Hz148.54414819205282640536108041125
1920*1080@60Hz148.5441481920882200536108041125

5.产生帧行有效信号的Verilog代码

点击link即可下载产生帧行有效信号的Verilog代码。

6.帧行有效信号的vivado仿真结果

在这里插入图片描述
上图的配置参数为:

parameter H_PIXELS     = 36; // Number of effective pixels in a row.
parameter H_FRONT      = 5;   // Row blanking front.
parameter H_BACK       = 5;   // Row blanking back.
parameter H_SYNCTIME   = 5;   // Number of row synchronization points.
parameter H_PERIOD = H_PIXELS + H_FRONT + H_BACK + H_SYNCTIME; // Row period value.
parameter V_LINES      = 6; // The number of valid rows in a frame.
parameter V_FRONT      = 1;    // Frame blanking front.
parameter V_BACK       = 0;    // Frame blanking back.
parameter V_SYNCTIME   = 1;    // Number of frame synchronization points.
parameter V_PERIOD = V_LINES + V_FRONT + V_BACK + V_SYNCTIME; // Frame period value.

在这里插入图片描述

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Verilog是一种硬件描述语言,用于描述数字电路和系统的行为。它被广泛用于设计和验证集成电路和数字系统。VGA(Video Graphics Array)是一种视频显示标准,用于连接计算机和显示器。 在Verilog中,你可以使用模块化的方式来描述VGA时序。通常,VGA时序由垂直同步信号(VSYNC)、水平同步信号(HSYNC)、像素时钟信号(CLK)和像素数据信号(DATA)组成。 以下是一个简单的Verilog代码示例,用于生成VGA时序信号: ```verilog module vga_timing ( input wire clk, // 像素时钟信号 output wire vsync, // 垂直同步信号 output wire hsync // 水平同步信号 ); reg [9:0] v_counter; // 垂直计数器 reg [9:0] h_counter; // 水平计数器 always @(posedge clk) begin // 在这里根据VGA时序规范更新计数器的值 // 生成垂直同步信号 if (v_counter >= 2'd3FF) vsync <= 1'b1; else vsync <= 1'b0; // 生成水平同步信号 if (h_counter >= 2'd639) hsync <= 1'b1; else hsync <= 1'b0; // 更新计数器的值 if (h_counter >= 2'd799) begin h_counter <= 2'd0; if (v_counter >= 2'd524) v_counter <= 2'd0; else v_counter <= v_counter + 2'd1; end else begin h_counter <= h_counter + 2'd1; end end endmodule ``` 这个示例代码使用了两个计数器(v_counter和h_counter),根据VGA时序规范生成了垂直同步和水平同步信号。根据具体的VGA分辨率和刷新率,你可能需要调整计数器的范围和阈值。 请注意,这只是一个简单的示例,实际的VGA时序可能更加复杂,并且可能需要处理其他信号(如像素数据)以生成完整的视频信号

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值