之前用FPGA做过视频时序方面的设计,现将视频时序的设计方法分享给大家,希望对大家有所帮助。

时序部分可以参考CEA-861D,VESA时序标准。

1080P一帧视频中,一行有2200个像素,其中280个像素为消影区像素,1920个像素为有效像素。 一场有1125行,其中45行为消影区,1080个有效行。

1080P@60的时钟计算方法: 2200x1125x60=148500000, 即148.5MHz。

1080P的时序图请参考如下图所示:

通过以上两幅图,我们可以很好地理解视频时序,在每一行的开始前和结束后,都是Blank。

我们可以通过设计计数器的方法来实现 代码如下:

  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer: Ricky
  5. //
  6. // Create Date: 16:38:46 04/17/2019
  7. // Design Name: Video timming generator
  8. // Module Name: Video_timming
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module Video_timming(
  22. input wire clk,
  23. input wire reset_n,
  24. output reg hsync_out,
  25. output reg hblank_out,
  26. output reg vsync_out,
  27. output reg vblank_out,
  28. output reg DE_out
  29.  
  30. );
  31.  
  32. ////////////////////hsblnk means the biggest active pixels from 0~1919, and it's the begining of hblank.
  33. ////////////////////hssync means the active pixels + Front Proch, and it's the begining of hsync signal.
  34. ////////////////////hesync means the active pixels + Front Proch + hsync, it's the end of hsync signal.
  35. ////////////////////heblnk means the biggest line pixels from 0~2199,it's the end of a line.
  36.  
  37. ////////////////////vsblnk means the biggest active lines from 0~1079, and it's the begining of vblank.
  38. ////////////////////vssync means the active lines + V Front Proch, and it's the begining of vsync signal.
  39. ////////////////////vesync means the active lines + V Front Proch + vsync, it's the end of vsync signal.
  40. ////////////////////veblnk means the biggest lines from 0~1124, it's the end of a frame.
  41.  
  42. parameter [:] tc_hsblnk = 'b0111_0111_1111; //hsblnk_1080P = 1920-1 = 1919
  43. parameter [:] tc_hssync = 'b0111_1101_0111; //hssync_1080P = 1919 + 88 = 2007
  44. parameter [:] tc_hesync = 'b1000_0000_0011; //hesync_1080P = 1919 + 88 + 44 = 2051
  45. parameter [:] tc_heblnk = 'b1000_1001_0111; //heblnk_1080P = 1919 + 88 + 44 + 148 = 2199
  46. parameter [:] tc_vsblnk = 'b0100_0011_0111; //vsblnk_1080P = 1080 -1 =1079
  47. parameter [:] tc_vssync = 'b0100_0011_1011; //vssync_1080P = 1079 + 4 = 1083
  48. parameter [:] tc_vesync = 'b0100_0100_0000; //vesync_1080P = 1079 + 4 + 5 = 1088
  49. parameter [:] tc_veblnk = 'b0100_0110_0100; //veblnk_1080P = 1079 + 4 + 5 + 36 = 1124
  50.  
  51. reg reg0;
  52. reg reg1;
  53. wire rst_n;
  54. reg hsync,vsync,hblank,vblank;
  55. reg [:] pixel_cnt,h_cnt,h_cntb;
  56.  
  57. always @ (posedge clk or negedge reset_n) //这里使用同步复位异步释放的方法设计复位
  58. begin
  59. if ( reset_n == 'b0)begin
  60. reg0 <= ;
  61. reg1 <= ;
  62. end
  63. else begin
  64. reg0 <= ;
  65. reg1 <= reg0;
  66. end
  67. end
  68.  
  69. assign rst_n = reg1;
  70.  
  71. always @ (posedge clk or negedge rst_n) begin // Pixel clock count
  72. if(!rst_n)
  73. pixel_cnt <= 'd0;
  74. else
  75. if(pixel_cnt >= tc_heblnk) //
  76. pixel_cnt <= 'd0;
  77. else
  78. pixel_cnt <= pixel_cnt + ;
  79. end
  80.  
  81. always @ (posedge clk or negedge rst_n) begin// generate hsync
  82. if(!rst_n)
  83. hsync <= 'b0;
  84. else
  85. if((pixel_cnt >= tc_hssync) && (pixel_cnt < tc_hesync))//2007 //
  86. hsync <= 'b1;
  87. else
  88. hsync <= 'b0;
  89. end
  90.  
  91. always @ (posedge clk or negedge rst_n) begin // generate hblank
  92. if(!rst_n)
  93. hblank <= 'b1;
  94. else
  95. if((pixel_cnt >= tc_hsblnk) && (pixel_cnt < tc_heblnk)) //1919 //
  96. hblank <= 'b1;
  97. else
  98. hblank <= 'b0;
  99. end
  100.  
  101. always @ (posedge clk or negedge rst_n) begin //Line count
  102. if(!rst_n)
  103. h_cnt <= 'd0;
  104. else
  105. if(h_cnt > tc_veblnk) //
  106. h_cnt <= 'd0;
  107. else
  108. if(pixel_cnt == tc_hssync-) //
  109. h_cnt <= h_cnt + ;
  110. else
  111. h_cnt <= h_cnt;
  112. end
  113.  
  114. always @ (posedge clk or negedge rst_n) begin // Generate vsync
  115. if(!rst_n)
  116. vsync <= 'b0;
  117. else
  118. if ((h_cnt > tc_vssync) && (h_cnt <= tc_vesync)) //1083 //
  119. vsync <= 'b1;
  120. else
  121. vsync <= 'b0;
  122. end
  123.  
  124. always @ (posedge clk or negedge rst_n) begin //Line Countb
  125. if(!rst_n)
  126. h_cntb <= 'd0;
  127. else
  128. if(h_cntb > tc_veblnk) //
  129. h_cntb <= 'd0;
  130. else
  131. if(pixel_cnt == tc_hsblnk - ) //
  132. h_cntb <= h_cntb + ;
  133. else
  134. h_cntb <= h_cntb;
  135. end
  136.  
  137. always @ (posedge clk or negedge rst_n) begin // Generate vblank
  138. if(!rst_n)
  139. vblank <= 'b1;
  140. else
  141. if((h_cntb > tc_vsblnk) && (h_cntb <= tc_veblnk)) //1079 //
  142. vblank <= 'b1;
  143. else
  144. vblank <= 'b0;
  145. end
  146.  
  147. always @ (posedge clk or negedge rst_n) begin // Generate output singles
  148. if(!rst_n) begin
  149. hsync_out <= 'b0;
  150. vsync_out <= 'b0;
  151. hblank_out <= 'b0;
  152. vblank_out <= 'b0;
  153. DE_out <= 'b0;
  154. end
  155. else
  156. begin
  157. hsync_out <= hsync;
  158. vsync_out <= vsync;
  159. hblank_out <= hblank;
  160. vblank_out <= vblank;
  161. DE_out <= (~ hblank) & (~ vblank);
  162. end
  163. end
  164.  
  165. endmodule

TB如下:

  1. `timescale 1ns/1ns
  2.  
  3. module TB_Timing_gen;
  4.  
  5. reg clk, reset_n;
  6. wire hsync,vsync,de,hblank,vblank;
  7.  
  8. initial begin
  9. clk = ;
  10. reset_n = ;
  11. #
  12. reset_n = ;
  13. end
  14.  
  15. always # clk = ~clk;
  16.  
  17. Video_timming timing_inst(
  18. .clk (clk),
  19. .reset_n (reset_n),
  20. .hsync_out (hsync),
  21. .hblank_out (hblank),
  22. .vsync_out (vsync),
  23. .vblank_out (vblank),
  24. .DE_out (de)
  25.  
  26. );
  27.  
  28. endmodule

波形如下:

 每行有1920个像素。

 hsync, DE,hblank的关系。

Vblan, Vsync和DE的关系,和hsync的关系。

原创代码,转载请注明出处,该部分已经申请发明专利,只是这里是用verilog写的,之前专利是用VHDL写的。

基于FPGA的视频时序生成的更多相关文章

  1. 基于FPGA视频时序生成中的库文件

    上一篇分享了一个视频时序生成代码,下面我根据之前项目中用到的时序,对各个参数做了库文件,方便调用. -- -- Package File Template -- -- Purpose: This pa ...

  2. 基于FPGA的DDR3多端口读写存储管理系统设计

    基于FPGA的DDR3多端口读写存储管理系统设计 文章出处:电子技术设计 发布时间: 2015/03/12 | 1747 次阅读 每天新产品 时刻新体验专业薄膜开关打样工厂,12小时加急出货   机载 ...

  3. 基于FPGA的图像去噪

    目录 结构图 其中FPGA 控制模块为核心,通过它实现视频图像数据的获取.缓存.处理和控制各模块间通讯[1].由CCD 相机对目标成像,高速图像数据由camera link 实时传输[2],经信号转换 ...

  4. 基于Xilinx FPGA的视频图像采集系统

    本篇要分享的是基于Xilinx FPGA的视频图像采集系统,使用摄像头采集图像数据,并没有用到SDRAM/DDR.这个工程使用的是OV7670 30w像素摄像头,用双口RAM做存储,显示窗口为320x ...

  5. 基于FPGA的LCD+CMOS视频采集显示使用小结

    基于FPGA的LCD+CMOS视频采集显示 液晶显示器采用扫描模式,RGB888 电源采用:+5V供电 usb供电有时候会出现供电不足的问题 显示器接口有两种选择:16bit或24bit  分别对应 ...

  6. 优化基于FPGA的深度卷积神经网络的加速器设计

    英文论文链接:http://cadlab.cs.ucla.edu/~cong/slides/fpga2015_chen.pdf 翻译:卜居 转载请注明出处:http://blog.csdn.net/k ...

  7. 基于FPGA的VGA可移植模块终极设计【转】

    本文转载自:http://www.cnblogs.com/lueguo/p/3373643.html 略过天涯   基于FPGA的VGA可移植模块终极设计 一.VGA的诱惑 首先,VGA的驱动,这事, ...

  8. FPGA经典:Verilog传奇与基于FPGA的数字图像处理原理及应用

    一 简述 最近恶补基础知识,借了<<Verilog传奇>>,<基于FPGA的嵌入式图像处理系统设计>和<<基千FPGA的数字图像处理原理及应用>& ...

  9. 基于FPGA的线阵CCD图像测量系统研究——笔记

    本文是对基于FPGA的线阵CCD图像测量系统研究(作者:高尚)的阅读笔记 第一章绪论 1. 读读看 读了前面的摘要依然没有看懂作者要做什么.接着往下读....终于看到了一个字眼“基于机器视觉的图像测量 ...

随机推荐

  1. eclipse查看一个方法被谁引用(调用)的快捷键四种方式

    1.(首推)双击选中该方法,Ctrl+Alt+H 如果你想知道一个类的方法到底被那些其他的类调用,那么请选中这个方法名,然后按“Ctrl+Alt+H”, Eclipse就会显示出这个方法被哪些方法调用 ...

  2. 咸鱼入门到放弃8--jsp<三>jsp内置对象

    NO. 内置对象 类型 1 pageContext javax.servlet.jsp.PageContext 2 request javax.servlet.http.HttpServletRequ ...

  3. 2018-2019-1 20189201 《LInux内核原理与分析》第六周作业

    希望是美好的 但仅仅是所想 一.书本第五章知识总结[系统调用的三层机制(下)] 深入理解系统调用的过程 system_call并不是一个普通的函数,只是一段汇编代码的起点,且内部没有严格遵守函数调用堆 ...

  4. pymongo使用手册

    MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活.在这一节中,我们就来看 ...

  5. React(七)独立组件间的共享Mixins

    (1)ES6的使用 (https://github.com/brigand/react-mixin) 下载依赖包 npm i react-mixin --save (2)导入react-mixin包 ...

  6. Mybatis_3.基于注解的增删改查

    1.实体类User.java public class User { private int id; private String name; private int age; //getter.se ...

  7. 动态规划-数位DPwindy

    https://vjudge.net/contest/297216?tdsourcetag=s_pctim_aiomsg#problem/L #include<bits/stdc++.h> ...

  8. CSS3_文本样式

    1. 文字阴影 text-shadow 使用: text-shadow:    水平方向偏移量    垂直方向偏移量    模糊程度    颜色; #box { text-shadow: 10px 1 ...

  9. CSS3_盒子背景

    盒子背景 盒子背景:content    padding    特殊的 boder 背景 背景绘制 从 padding 开始绘制 背景裁剪 background-clip(默认值 border-box ...

  10. Java for Android 学习第一周

    前言 专业Java程序员所必需掌握的3个主题: 1. Java编程语言 2. 使用Java的面向对象编程(OOP) 3. Java核心库 JDK.JRE和JVM 1. javac编译java源代码为字 ...