基于FPGA的图像采集之二 GEN_FRAME(成帧)模块

2023-10-27

距离上次的博客已经有段时间了,这写些日子一直在调SDRAM的模块以及文档的书写,SDRAM的子模块比较多,包括init(初始化模块)、refresh(刷新模块)、write(写模块)、read(读模块),使用起来相比之前的USB控制模块、今天的GEN_FRAME(以下均表示为成帧模块)都稍显复杂一些。好了,接下来介绍我们今天的主角:成帧模块。成帧模块的作用有两个:

1.完成时钟域的转换:将缓存到sdram中的数据读出发送给USB,sdram芯片可以达到的时钟频率范围大致为24MHZ-256MHZ,该时钟由FPGA给出,具体的时钟还要看FPGA稳定工作可以达到的时钟。另一方面,USB控制器的时钟有USB芯片给出,为48MHZ。数据在不同时钟域间的传输就要用到时钟域的转换。
2.给数据加下帧头:发送数据之前,首先给数据加上一行帧头,表明我的一行数据开始发送,该帧头包含了图像的列信息,然后将加了帧头的数据发送给USB控制模块,由它通过USB芯片发给上位机。

1.跨时钟域的转换

下面我们来谈谈今天主角中的主角:跨时钟域的转换
1,不做时钟域的转换有什么危害?2.单bit的信号与多bit的信号的处理方式有何不同?
带着这两个疑问我们来看。我们在做项目的时候不免会遇到两个模块的时钟不同的情况,A用的时钟是48MHZ,B用到的时钟是133MHZ(这里的48跟133只是说明时钟不同)。
以单bit的信号为例,都以上升沿采样:
A.现在有一个由133MHZ产生的脉冲信号(一个时钟周期)flag,通过接口传给A(48MHZ),A要检测到它,可是现象是,你133MHZ太快了(太短),A的上升沿根本采不到它(也有概率可以采得到)。
B.反过来呢?A(48MHZ)的信号传给B(133MHZ),由于A的时钟频率比B慢,根本不会存在B采不到A信号的情况,但是还会有问题(就是不能让你好好传),亚稳态。
解释一下亚稳态:a.概念:指触发器无法在某个规定时间段内达到一个可确认的状态。(是不是还是有点不懂,没事看下面)。
b.什么情况会导致亚稳态:在同步系统中,建立时间、保持时间不满足就可能会产生,此时的输出端(Q端)在有效的时钟沿之后比较长时间处于不确定状态,毛刺、振荡或者是一个固定的某一电压(却不是D端的电压),这段时间成为决断时间,之后稳定在0、1上,但是这是随机的,跟输入没有必然的关系。
说了这么多,什么意思?就是每个频率的时钟都有自己的一个规则(建立时间、保持时间),我的地盘听我的,到了我的地盘就要按我的规矩办事,你不按我的规则来可以,后果就是,我随便给你输出一个值,这个值是什么,看心情,用了这个数据出不出问题就不是我的事了。
c.如何解决:1.减低时钟频率。2.将寄存器打两拍再使用。
跨时钟域的处理
A比较惨,A的情况包含了B,即包含采不到的情况,又存在亚稳态的问题,下面给出A的处理过程。有没有发现今天的图非常少,先上图。
1.gif

将数据打三拍,一共四个寄存器,通过一个or门,时钟域转换为48MHZ,再延时两拍得到稳定的标志位。通过or门产生的信号会有毛刺,打两拍还可以起到去毛刺的作用。

在这里插入图片描述

另外,多bit同频率,异相位的时钟域切换,使用双口ram进行同步(同频异相),不同频不同相时钟转换使用异步FIFO做同步。成帧模块用到了异步FIFO做处理。

2.GEN_FRAME模块描述

2.1 模块框图

在这里插入图片描述

1.SDRAM存储一帧数据后使能read_start信号,GEN_FRAME将帧头发给USB W_FIFO,同时SDRAM向GEN_FRAME的内部FIFO写入一行数据。
2.SDRAM写完一行数据后等待写下一行的命令(read_req),GEN_FRAME继续向USB W_FIFO写入数据(w_flag有效),直到写完一行后等待。当PC将W_FIFO中数据读完,即flag_C==0时,read_req有效。

3.当read_req有效时,下一行开始传输,GEN_FRAME中的FIFO同时进行读写(SDRAM向GEN_FRAME中的FIFO中写,同时将GEN_FRAME中的数据读出到USB W_FIFO)。

4.直到读完一帧图像后(即行计数row_cnt计满),read_req无效,w_flag无效,停止读写。

2.2 接口定义

4.gif

3关键信号时序

A)读GEN_frame数据到USB W_FIFO

5.gif

① Sdram存完一帧数据后发送read_start信号,经夸时钟域处理后得到read_start_48,在此信号后检测到flag_C为0(即W_FIFO为空),因此要将read_start_48做延展,得到read_start_buf,取它的下降沿为读一帧数据开始。

② 检测到read_start_buf的下降沿后将w_usb_flag_reg拉高,同时w_usb_cnt开始计数,由于数据给出客观上延时一拍才能读到,所以讲使能信号延时一拍发出,即w_usb_flag。该信号为传入下一级的使能信号。

③ 一行数据读出后,继续检测flag_C=0时,F_read_req(向GEN FIFO发送读请求),r_fifo_en与w_usb_flag一致,同时读出fifo中的数据r_fifo_data。

注意:根据同步fifo的经验,这里的r_fifo_en本应该提前数据一拍给出,但上面写到同时读出fifo数据。没错,根据代码发现,异步fifo的读使能r_fifo_en与读数据r_fifo_data居然是同一时刻给出来!!!!!

④ 每读完一行数据我们的行计数gen_cnt_row要加一。这里的行计数是由w_usb_flag_reg的下降沿来触发目的是保证不要丢数据。

⑤ 最终GEN_FRAME输出数据w_data根据行号来选择,gen_cnt_row=0选择zhen_data,否则选择fifo_data。

注意:这里面的gen_cnt_row要记到row_cnt+1(帧头)。

B)sdram向GEN_FRAME FIFO中写数据

6.gif

① 利用sdram时钟检测flag_C的下降沿,产生read_req,并输出到sdram控制模块中。

② 检测到read_req为高时,sdram将数据传入GEN模块,cnt_data开始计数,计数器由SD_data_v使能信号控制(读sdram被刷新打断,数据会被打断),计数到499停止。

③ 写入fifo的数据为512个16bit的数据,数据只有500个,所以要补12个16bit的数据零,cnt_12从cnt_data==499时开始计数,计到11为止。

将SD_data_v与cnt_12_flag作或操作,时序赋值给w_fifo_en。数据时序赋值给w_fifo_data。分别为写入fifo的使能信号与数据信号。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于FPGA的图像采集之二 GEN_FRAME(成帧)模块 的相关文章

  • 使用python实现简单全连接神经网络

    最近在学习神经网络的相关知识 特在此做一个笔记 python语言的功能很强大 可以使用很少的代码实现很多功能 因此大家如果想研究深度学习的话 一定要懂得python语言 这篇笔记记录我的第一次使用python编写神经网络代码的过程 其中代码
  • 八段数码管动态显示(输入数据为BCD编码)

    八段数码管动态显示 输入数据为BCD编码 一 数码管概述 图1 八段共阴数码管内部等效原理图 图2 八段共阳数码管内部等效原理图 上面两图分别是对应八段共阴 共阳的数码管内部等效图 共阴是将八个LED数码管的阴极连接在一起接低 阳极segm
  • SIFT和SURF的替换算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转)

    SIFT和SURF的替代算法 ORB Oriented FAST and Rotated BRIEF 快速定向和旋转 1 效果图 2 源码 参考 1 用于关键点检测和描述的SIFT Scale Invariant Feature Trans
  • 深度特征融合---高低层(多尺度)特征融合

    目录 概述 基本概念 典型方法概述 相关工作 多尺度模型设计 Deep Feature Fusion for VHR 高分辨率图像 Remote Sensing Scene Classification DCA特征融合方法 基于神经网络的目
  • 【Matlab图片剪裁】

    标题Matlab剪裁图片 提取感兴趣部分 问题描述 当需要从一幅图片中提取一些感兴趣的内容时 比如一些细小的文字 图案等 如果从整个图片中直接提取 必然会大大增加计算量 导致处理时间很长 而且多数计算都是无效计算 进而非常消耗资源 解决办法
  • Edraw Max教程】如何有趣的创建梦幻般的思维导图

    Edraw Max 亿图图示 是一款综合图形图表制作软件 它包含丰富的实例和模版 帮助您轻松创建流程图 网络拓扑图 组织结构图 商业图表 工程图 思维导图 软件设计图和平面布局图等 亿图采用更智能和人性化的绘制方式 最大程度帮助设计者降低工
  • 【Xilinx Vivado时序分析/约束系列4】FPGA开发时序分析/约束-实验工程上手实操

    目录 建立工程 添加顶层 模块1 模块2 添加约束文件 编辑时钟约束 打开布线设计 代码代表的含义 时序报告 进行时序分析 Summary 包含了汇总的信息量 Source Clock Path 这部分是表示Tclk1的延时细节 Data
  • 【OpenCV】车辆识别 C++ OpenCV 原理介绍 + 案例实现

    目录 前言 一 图像处理 二值化处理 膨胀 腐蚀 开运算 闭运算 二 案例实现 Step1 灰度处理 Step2 对视频进行帧差处理 Step3 二值化处理 Step4 腐蚀处理 Step5 膨胀处理 Step6 标记 框选目标 完整代码
  • 2021全国电设(F题)openmv的图像识别之数字识别

    基于openmv的图像识别 通过参加全国电子设计大赛F题总结出openmv4的数字识别 其它版本暂时没试过 欢迎交流 openmv简介 OpenMV是一个开源 低成本 功能强大的机器视觉模块 以STM32F427CPU为核心 集成了OV77
  • MEF:COA-NET

    COA NET COLLABORATIVE ATTENTION NETWORK FOR DETAIL REFINEMENT MULTI EXPOSURE IMAGE FUSION COA NET 用于细节细化多曝光图像融合的协作关注网络 近
  • EPI distortion correction形变矫正, eddy, fieldmap等五种不同方法

    EPI distortion correction形变矫正 1 topup eddy 2 fieldmap eddy 2 1 对mag做去脑壳 2 2 基于去过脑壳的mag 1volume bet nii gz数据 对fieldmap进行预
  • 蓝桥杯真题:迷宫

    目录 题目描述 运行限制 dfs bfs 结果 题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 下图给出了一个迷宫的平面图 其中标记为 11 的为障碍 标记为 00 的为可以通行的地方 010000 000
  • pil_openvcv_scikit-image_tensorflow四种读图方式对比

    文章目录 1 四种不同的库读取jpg图显示 2 评估所读图片的差异 3 简单说明有差异原因 4 同样的流程对png图片进行处理 5 png图片转jpg 5 1 使用PIL进行转换 5 2 使用Opencv进行转换 5 3 使用Tensorf
  • ALLEGRO等长时如何将PIN DELAY和VIA长度计算在内

    在PCB设计中 对于时序要求严格的线路 Via和IC pin delay的长度必须得到重视 通过下面的操作 可将Via和Pin delay加入到线路长度的计算中 1st 计算Pin delay 打开Constraint Manager 选择
  • Python的PIL库

    Python图像库PIL Python Image Library 是python的第三方图像处理库 图像类Image class Image类是PIL中的核心类 比如从文件中加载一张图像 处理其他形式的图像 或者是从头创造一张图像等 Im
  • 图像处理——我理解的傅里叶变换

    1 傅里叶变换的理解 傅里叶变换的相关数学公式目前还没有搞懂 先不整那个东西 我们主要是研究傅里叶变换的一些思想和应用 这个思想起源于牛顿研究那个三棱镜 白光透过棱镜之后会被分解为七种颜色的光 这些光叠加又能形成白光 所以说可以把一种事物分
  • 图像特征提取技术

    目 录 前 言 基于颜色的特征提取 1 颜色空间 2 直方图以及特征提取 基于纹理的特征提取 1 灰度共生矩阵 2 tamura纹理 基于深度神经网络的图像处理 前 言 图像特征提取属于图像分析的范畴 是数字图像处理的高级阶段 本文将从理论
  • 【FMC141】基于VITA57.4标准的4通道2.8GSPS 16位DA播放子卡(2片DAC39J84)

    FMC141是一款基于VITA57 4标准的4通道2 8GSPS 2 5GSPS 1 6GSPS采样率16位DA播放FMC子卡 该板卡为FMC 标准 符合VITA57 4与VITA57 1规范 16通道的JESD204B接口通过FMC 连接
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • 图像分割-Grabcut法

    版权声明 本文为博主原创文章 转载请在显著位置标明本文出处以及作者网名 未经作者允许不得用于商业目的 本文的C 版本请访问 图像分割 Grabcut法 C CSDN博客 GrabCut是一种基于图像分割的技术 它可以用于将图像中的前景和背景

随机推荐

  • caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)

    准备数据集 http yann lecun com exdb mnist 提供了训练集与测试集数据的下载 但是caffe并不是直接处理这些数据 而是要转换成lmdb或leveldb格式进行读取 如何转换可以再去查阅相关资料 为简化步骤 直接
  • 【CVPR小目标检测】- ISNet红外小目标检测

    ISNet 红外小目标探测的形状问题 从分割的角度完成小目标红外检测 红外图像 红外小目标使用红外热成像技术 使得红外目标检测能够全天候工作 可视距离远 抗干扰能力强 当像素距离较远时 目标所占比例小 亮度低 呈现弱小目标 红外图像中 弱小
  • 【毕业设计】图像检索算法(以图搜图)

    文章目录 1 前言 2 图像检索介绍 2 1 无监督图像检索 2 2 有监督图像检索 3 图像检索步骤 4 应用实例 5 最后 1 前言 Hi 大家好 这里是丹成学长的毕设系列文章 对毕设有任何疑问都可以问学长哦 这两年开始 各个学校对毕设
  • 线性代数的学习和整理2:什么是线性,线性相关,线性无关 以及什么是线性代数?

    目录 1 写在前面的话 1 1 为什么要先总结一些EXCEL计算矩阵的工具性知识 而不是一开始就从基础学起呢 1 2 关于线性代数入门时的各种灵魂发问 1 3 学习资料 2 什么是线性 关系 2 1 线性的到底是一种什么关系 线性关系 正比
  • Q-learning和Sarsa

    一 Q learning Q Learning的目的是学习特定state下 特定action的价值 是建立一个Q table 以state为行 action为列 通过每个动作带来的奖赏更新Q table 是异策略 行动策略和评估策略不是一个
  • Java实验报告(四)

    文章目录 题目一 题目二 题目三 题目四 题目五 题目六 题目七 题目一 一 程序一 源程序 public class Leaf int i 0 Leaf increment i return this void print System
  • 除了敲代码,程序员还能有什么副业?晓健韩品批发

    积极发展副业中 做韩妆一般贸易进口 跟集装箱通关的 仓库在山东烟台莱山区 做的比较大 价格方面有优势 有需要 可以私聊哈 正品是本分 xiaojian675050734 H19950211H
  • composer 中国镜像

    我的个人博客 逐步前行STEP 使用以下代码将packagist源更换为中国镜像 composer config g repo packagist composer https packagist phpcomposer com 或者 co
  • 【满分】【华为OD机试真题2023 JAVA&JS】不爱施肥的小布

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 不爱施肥的小布 知识点二分查找 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 某农场主管理了一大片果园 fields i 表示不同果林的面积 单位 m 2 现在
  • targetElement.closest

    在组件挂载时 给 document 添加点击事件监听 onMounted gt document addEventListener click closeIdentity 点击事件处理函数 用于改变 isExpanded 的值为 false
  • Lock wait timeout exceeded; try restarting transaction

    2016 08 05 09 21 52 com zhishi common controller BaseController ERROR Error updating database Cause com mysql jdbc excep
  • 教师怎样将成绩单独发送给学生和家长?

    在工作学习中 我们经常会遇到怎样将成绩单独发送给学生和家长这样的问题 因此 面对怎样将成绩单独发送给学生和家长我们应该有努力探索的精神 诚挚的心灵 是学生情感的钥匙 高尚的师德 是学生心灵的明镜 对于这个问题也是一样的 读书忌死读 死读钻牛
  • redhat7.6安装weblogic12c

    目录 一 环境准备 二 使用root创建用户和组 三 创建部署目录 四 上传安装包 五 创建 oraInst loc 文件 六 创建wls rsp 响应文件 七 进行安装 八 使用 wlst sh 离线模式创建一个域 九 启动服务 十 浏览
  • 电脑wps可以语音录入吗_怎样用word进行语音录入文字

    怎样用 word 进行语音录入文字 有时候我们不方便手敲键盘输入时 可以利用 word 的语音录入功能进行输入 以下是学习啦小编为您带来的关于用 Word 进行语音录入文字 希望对您有所帮助 用 Word 进行语音录入文字 语音输入功能添加
  • 最适合程序猿的笔记软件

    因为这几天小编要去听课 所以心血来潮找了几个适合程序猿的笔记软件 经过几天在csdn上的扒饭之后 我结合自己的某些要求 为大家整理出了这几个软件 有需要直接去后面找 一 必须支持markdown markdown的重要性不需要在这里多说了吧
  • TypeScript 联合类型(union type)

    TS是JS的超集 在JS的基础上添加了一套类型系统 这样的TS可以被静态分析带来的好处显而易见 let val string val 声明一个string类型的变量val let val string val val 1 Type numb
  • hive异常MetaException-Metastore contains multiple versions

    在执行hive运行脚本时 出现了MetaException Metastore contains multiple versions异常错误 Exception in thread main java lang RuntimeExcepti
  • Java 手动分页

    功能需求背景 今天负责短信后台定时任务时 需要定时向用户发送短信信息 但数据库记录的待发送记录数量比较大 无法一次查询出结果 需要手动分页 手动分页核心功能代码 Date now DateUtils getBeforeMouth new D
  • Arduino基本知识

    analogWrite 将一个模拟数值写进Arduino引脚 这个操作可以用来控制LED的亮度 或者控制电机的转速 Arduino每一次对引脚执行analogWrite 指令 都会给该引脚一个固定频率的PWM信号 digitalRead 读
  • 基于FPGA的图像采集之二 GEN_FRAME(成帧)模块

    距离上次的博客已经有段时间了 这写些日子一直在调SDRAM的模块以及文档的书写 SDRAM的子模块比较多 包括init 初始化模块 refresh 刷新模块 write 写模块 read 读模块 使用起来相比之前的USB控制模块 今天的GE