• 【FPGA项目】图像采集及显示(3)总结


    前言

            最基础的FPGA图像采集及显示的项目做完,这里小小的总结一下,也顺便聊聊项目中常用的一些调试手段。

    一、项目重点

    1.1 系统框架的理解

            我们先说下数据流,接收——>缓存——>处理——>发送,可以发现很多项目都存在这么一个过程,不同的只是接口而已。而系统框图也基本可以按照这个流程进行划分。

    接收:根据不同的器件/接口, 有不同的时序,根据时序设计接收逻辑即可。

    缓存:因为内部逻辑处理需要时间,所以数据必须要存起来,等待处理。而图像数据很大,所以一般通过DDR进行存储。

    处理:本项目没有涉及,但是后续我们加入图像处理的一些逻辑。

    发送:如果是本项目这种LCD显示,则需要设计LCD驱动的时序,XY扫描一帧一帧显示;但是大多都会发给上位机,这时就看使用什么接口了,再做相应的逻辑。

    1.2 接口时序

            接口时序其实就是协议,只有双方都遵守了才能正确的通信。比如常见的图像类时序,行有效、场有效。

            玩接口,FPGA最是拿手不过,一些常见的高速接口,FPGA厂家都做了IP,我们只需要学习其IP使用方法,而不需要关注内部协议细节处理。

            顺手推荐下我的FPGA接口专栏:FPGA接口篇

    ​​​​​​​1.3 DDR3 IP使用

    详细使用方法可以参加另外的博客:Xilinx FPGA平台DDR3设计保姆式教程(汇总篇)——看这一篇就够了

    ​​​​​​​1.4 FIFO IP使用

            FIFO是逻辑设计最常用的缓存方式了,IC里面需要自己写(使用公司公共库代码),FPGA最好还是使用IP,肯定比你写的好~

            所以必须要掌握FIFO IP的使用,但是呢,这个也很简单,关注下datasheet里面的读写时序就可以了。这里就不展开了,详细内容请看《PG057-FIFO》。

    二、调试小技巧

    2.1 用LED指示工作状态

            为了能够一眼直接看出当前项目的工作状态,可以添加LED信号灯进行指示,比如:(不同的项目可以设置不同的状态指示)

    管脚

    状态指示

    Led[3]

    ...

    Led[2]

    表示DDR3正常

    Led[1]

    表示数据正常发送

    Led[0]

    表示数据正常接收

    2.2 逻辑内集成仿真图像数据

            本项目中,如果摄像头不在手上,你怎么证明自己的逻辑是正确的呢?(俗称甩锅)

            我们可以在逻辑内部增加一个模块:data_gen,用来产生一个模拟的图像数据,比如灰度条数据;再增加一个寄存器开关src_slc或者VIO来做切换 :

    src_slc / VIO(复位为0)

    描述

    1

    模拟灰度条数据

    0

    真实摄像头数据

    后记

            因为最近在学习RISC-V的一些东西,所以后续准备先手搓一个简易的MPU练练手;(其他一些FPGA项目暂时先放放)然后记录一下RISC-V CPU蜂鸟e203的整体学习,以及移植到FPGA跑跑程序的整个过程。

            顺便提一下,CPU设计真的是芯片设计的集大成者,博大精深,知识点又多又细又深入,头皮发麻,什么时候才能成长为系统架构师 = _=

            咱们下期见~

  • 相关阅读:
    【Try to Hack】veil-evasion免杀
    【Vue】Vue安装和环境配置
    shell学习笔记
    OceanBase 4.3 特性解析:列存技术
    【Scala】Scala语法中=>、->、<-与{}、()的使用
    adb 命令集
    Python的张量运算
    微信多开,张大龙-《软件方法》自测题解析018
    消火栓地下水管网压力监测智能化解决方案
    关于这半年,我在干些什么,有一些想和你分享的话题
  • 原文地址:https://blog.csdn.net/m0_52840978/article/details/133285143