芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 活动
查看: 1268|回复: 5

【更新0412】小梅哥OV7670摄像头适配的工程实例和使用说明

[复制链接]
  • TA的每日心情
    可爱
    2019-5-10 10:58
  • 201

    主题

    366

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    10792
    发表于 2019-4-10 23:32:05 | 显示全部楼层 |阅读模式
    2019年4月10日
    OV7670_SDRAM_VGA

    ov7670_sdram_vga.rar (131.21 KB, 下载次数: 80)
    回复

    使用道具 举报

  • TA的每日心情
    可爱
    2019-5-10 10:58
  • 201

    主题

    366

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    10792
     楼主| 发表于 2019-4-13 23:22:50 | 显示全部楼层
    适配VGA模块一定要通过翻转像素时钟来解决吗?不,一定不是这样的,一定是哪里没有做好,比如。。。。。IO的时序约束。

    emmmmm,说干就干,看了下GM7123的数据手册,建立时间0.8ns,保持时间1.5ns,emmmm,这个参数非常的常规,根本不用翻转时钟,所以,一定是没加IO约束,让Quartus随心所欲,结果搞砸了导致的。那么,开干,加上约束后,就真的解决了问题耶。以下为时序约束的内容


    1. ## Generated SDC file "ov7670_sdram_display.sdc"

    2. ## Copyright (C) 1991-2013 Altera Corporation
    3. ## Your use of Altera Corporation's design tools, logic functions
    4. ## and other software and tools, and its AMPP partner logic
    5. ## functions, and any output files from any of the foregoing
    6. ## (including device programming or simulation files), and any
    7. ## associated documentation or information are expressly subject
    8. ## to the terms and conditions of the Altera Program License
    9. ## Subscription Agreement, Altera MegaCore Function License
    10. ## Agreement, or other applicable license agreement, including,
    11. ## without limitation, that your use is for the sole purpose of
    12. ## programming logic devices manufactured by Altera and sold by
    13. ## Altera or its authorized distributors.  Please refer to the
    14. ## applicable agreement for further details.


    15. ## VENDOR  "Altera"
    16. ## PROGRAM "Quartus II"
    17. ## VERSION "Version 13.0.0 Build 156 04/24/2013 SJ Full Version"

    18. ## DATE    "Sat Apr 13 21:27:43 2019"

    19. ##
    20. ## DEVICE  "EP4CE10F17C8"
    21. ##


    22. #**************************************************************
    23. # Time Information
    24. #**************************************************************

    25. set_time_format -unit ns -decimal_places 3



    26. #**************************************************************
    27. # Create Clock
    28. #**************************************************************

    29. create_clock -name {clk50} -period 20.000 -waveform { 0.000 10.000 } [get_ports {clk}]
    30. create_clock -name {pclk} -period 46.667 -waveform { 0.000 23.333 } [get_ports {cmos_pclk}]


    31. #**************************************************************
    32. # Create Generated Clock
    33. #**************************************************************

    34. create_generated_clock -name {pll|altpll_component|auto_generated|pll1|clk[0]} -source [get_pins {pll|altpll_component|auto_generated|pll1|inclk[0]}] -duty_cycle 50.000 -multiply_by 2 -master_clock {clk50} [get_pins {pll|altpll_component|auto_generated|pll1|clk[0]}]
    35. create_generated_clock -name {pll|altpll_component|auto_generated|pll1|clk[1]} -source [get_pins {pll|altpll_component|auto_generated|pll1|inclk[0]}] -duty_cycle 50.000 -multiply_by 2 -phase -90.000 -master_clock {clk50} [get_pins {pll|altpll_component|auto_generated|pll1|clk[1]}]
    36. create_generated_clock -name {pll|altpll_component|auto_generated|pll1|clk[2]} -source [get_pins {pll|altpll_component|auto_generated|pll1|inclk[0]}] -duty_cycle 50.000 -multiply_by 12 -divide_by 25 -master_clock {clk50} [get_pins {pll|altpll_component|auto_generated|pll1|clk[2]}]
    37. create_generated_clock -name {pll|altpll_component|auto_generated|pll1|clk[3]} -source [get_pins {pll|altpll_component|auto_generated|pll1|inclk[0]}] -duty_cycle 50.000 -multiply_by 12 -divide_by 25 -master_clock {clk50} [get_pins {pll|altpll_component|auto_generated|pll1|clk[3]}]
    38. create_generated_clock -name {Clk_TFT} -source [get_pins {pll|altpll_component|auto_generated|pll1|clk[3]}] -master_clock {pll|altpll_component|auto_generated|pll1|clk[3]} [get_ports {Disp_PCLK}]


    39. #**************************************************************
    40. # Set Clock Latency
    41. #**************************************************************



    42. #**************************************************************
    43. # Set Clock Uncertainty
    44. #**************************************************************



    45. #**************************************************************
    46. # Set Input Delay
    47. #**************************************************************

    48. set_input_delay -add_delay -max -clock [get_clocks {pclk}]  26.667 [get_ports {cmos_data[0]}]
    49. set_input_delay -add_delay -min -clock [get_clocks {pclk}]  8.000 [get_ports {cmos_data[0]}]
    50. set_input_delay -add_delay -max -clock [get_clocks {pclk}]  26.667 [get_ports {cmos_data[1]}]
    51. set_input_delay -add_delay -min -clock [get_clocks {pclk}]  8.000 [get_ports {cmos_data[1]}]
    52. set_input_delay -add_delay -max -clock [get_clocks {pclk}]  26.667 [get_ports {cmos_data[2]}]
    53. set_input_delay -add_delay -min -clock [get_clocks {pclk}]  8.000 [get_ports {cmos_data[2]}]
    54. set_input_delay -add_delay -max -clock [get_clocks {pclk}]  26.667 [get_ports {cmos_data[3]}]
    55. set_input_delay -add_delay -min -clock [get_clocks {pclk}]  8.000 [get_ports {cmos_data[3]}]
    56. set_input_delay -add_delay -max -clock [get_clocks {pclk}]  26.667 [get_ports {cmos_data[4]}]
    57. set_input_delay -add_delay -min -clock [get_clocks {pclk}]  8.000 [get_ports {cmos_data[4]}]
    58. set_input_delay -add_delay -max -clock [get_clocks {pclk}]  26.667 [get_ports {cmos_data[5]}]
    59. set_input_delay -add_delay -min -clock [get_clocks {pclk}]  8.000 [get_ports {cmos_data[5]}]
    60. set_input_delay -add_delay -max -clock [get_clocks {pclk}]  26.667 [get_ports {cmos_data[6]}]
    61. set_input_delay -add_delay -min -clock [get_clocks {pclk}]  8.000 [get_ports {cmos_data[6]}]
    62. set_input_delay -add_delay -max -clock [get_clocks {pclk}]  26.667 [get_ports {cmos_data[7]}]
    63. set_input_delay -add_delay -min -clock [get_clocks {pclk}]  8.000 [get_ports {cmos_data[7]}]
    64. set_input_delay -add_delay -max -clock [get_clocks {pclk}]  26.667 [get_ports {cmos_href}]
    65. set_input_delay -add_delay -min -clock [get_clocks {pclk}]  8.000 [get_ports {cmos_href}]
    66. set_input_delay -add_delay -max -clock [get_clocks {pclk}]  26.667 [get_ports {cmos_vsync}]
    67. set_input_delay -add_delay -min -clock [get_clocks {pclk}]  8.000 [get_ports {cmos_vsync}]


    68. #**************************************************************
    69. # Set Output Delay
    70. #**************************************************************

    71. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Blue[0]}]
    72. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Blue[0]}]
    73. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Blue[1]}]
    74. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Blue[1]}]
    75. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Blue[2]}]
    76. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Blue[2]}]
    77. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Blue[3]}]
    78. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Blue[3]}]
    79. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Blue[4]}]
    80. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Blue[4]}]
    81. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Blue[5]}]
    82. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Blue[5]}]
    83. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Blue[6]}]
    84. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Blue[6]}]
    85. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Blue[7]}]
    86. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Blue[7]}]
    87. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_DE}]
    88. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_DE}]
    89. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Green[0]}]
    90. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Green[0]}]
    91. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Green[1]}]
    92. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Green[1]}]
    93. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Green[2]}]
    94. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Green[2]}]
    95. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Green[3]}]
    96. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Green[3]}]
    97. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Green[4]}]
    98. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Green[4]}]
    99. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Green[5]}]
    100. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Green[5]}]
    101. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Green[6]}]
    102. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Green[6]}]
    103. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Green[7]}]
    104. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Green[7]}]
    105. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_HS}]
    106. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_HS}]
    107. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Red[0]}]
    108. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Red[0]}]
    109. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Red[1]}]
    110. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Red[1]}]
    111. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Red[2]}]
    112. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Red[2]}]
    113. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Red[3]}]
    114. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Red[3]}]
    115. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Red[4]}]
    116. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Red[4]}]
    117. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Red[5]}]
    118. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Red[5]}]
    119. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Red[6]}]
    120. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Red[6]}]
    121. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_Red[7]}]
    122. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_Red[7]}]
    123. set_output_delay -add_delay -max -clock [get_clocks {Clk_TFT}]  0.200 [get_ports {Disp_VS}]
    124. set_output_delay -add_delay -min -clock [get_clocks {Clk_TFT}]  -1.500 [get_ports {Disp_VS}]


    125. #**************************************************************
    126. # Set Clock Groups
    127. #**************************************************************



    128. #**************************************************************
    129. # Set False Path
    130. #**************************************************************

    131. set_false_path -from [get_keepers {*rdptr_g*}] -to [get_keepers {*ws_dgrp|dffpipe_qe9:dffpipe16|dffe17a*}]
    132. set_false_path -from [get_keepers {*delayed_wrptr_g*}] -to [get_keepers {*rs_dgwp|dffpipe_pe9:dffpipe13|dffe14a*}]
    133. set_false_path -from [get_keepers {*rdptr_g*}] -to [get_keepers {*ws_dgrp|dffpipe_se9:dffpipe9|dffe10a*}]
    134. set_false_path -from [get_keepers {*delayed_wrptr_g*}] -to [get_keepers {*rs_dgwp|dffpipe_re9:dffpipe6|dffe7a*}]


    135. #**************************************************************
    136. # Set Multicycle Path
    137. #**************************************************************



    138. #**************************************************************
    139. # Set Maximum Delay
    140. #**************************************************************



    141. #**************************************************************
    142. # Set Minimum Delay
    143. #**************************************************************



    144. #**************************************************************
    145. # Set Input Transition
    146. #**************************************************************


    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    可爱
    2019-5-10 10:58
  • 201

    主题

    366

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    10792
     楼主| 发表于 2019-4-22 23:08:19 | 显示全部楼层
    camera_sdram_display.rar (60.42 KB, 下载次数: 24)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2019-8-12 22:29
  • 5

    主题

    12

    帖子

    138

    积分

    初级会员

    Rank: 3Rank: 3

    积分
    138
    发表于 2019-6-20 09:58:27 | 显示全部楼层
    关于2019年4月12日OV7670_SDRAM_Display工程使用中遇到的问题:
    1、工程默认为4.3寸TFTLCD显示设备+OV7670,使用时硬件配置使用AC620+OV7670+4.3寸LCD显示屏幕(均为小梅哥店铺产品)
    2、编译器为Quartus 17.1
    3、压缩文件解压后对工程进行了一次全编译,Quartus提示IP需要升级
    4、编译完成后,PLL模块的clock_2,clock_3输出时钟均被设置为24M,(按照工程和代码注释,clock_3为LCD的驱动时钟,TFT模式下应该为9M)
    5、下载后LCD显示无图像
    6、PLL中无法通过设置分频出9MHZ的时钟
    希望小梅哥有时间解答一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    可爱
    2019-5-10 10:58
  • 201

    主题

    366

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    10792
     楼主| 发表于 2019-6-20 10:23:52 | 显示全部楼层
    萌萌的_X29uk 发表于 2019-6-20 09:58
    关于2019年4月12日OV7670_SDRAM_Display工程使用中遇到的问题:
    1、工程默认为4.3寸TFTLCD显示设备+OV7670 ...

    1、clock2和clock3都是24M,这没问题,因为LCD的时钟即使不准也能显示,不过就是帧率的变化,而VGA的时钟必须是准确的24M,所以为了兼容性统一设置的24M。
    2、下载后LCD无法显示,请检查你的引脚分配。使用对应的tcl文件重新执行一次
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2019-9-6 16:13
  • 0

    主题

    1

    帖子

    19

    积分

    新手入门

    Rank: 1

    积分
    19
    发表于 2019-9-6 16:01:43 | 显示全部楼层
    请问一下,有这方面相关的视频或文档吗
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|手机版|Archiver|芯路恒电子技术论坛  

    GMT+8, 2019-9-23 21:04 , Processed in 0.104984 second(s), 11 queries , File On.

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表