CN110519497A - 一种基于vdma的零拷贝触发采集装置及方法 - Google Patents
一种基于vdma的零拷贝触发采集装置及方法 Download PDFInfo
- Publication number
- CN110519497A CN110519497A CN201910800319.5A CN201910800319A CN110519497A CN 110519497 A CN110519497 A CN 110519497A CN 201910800319 A CN201910800319 A CN 201910800319A CN 110519497 A CN110519497 A CN 110519497A
- Authority
- CN
- China
- Prior art keywords
- queue
- vdma
- caching
- image data
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/0007—Image acquisition
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N23/00—Cameras or camera modules comprising electronic image sensors; Control thereof
- H04N23/50—Constructional details
- H04N23/54—Mounting of pick-up tubes, electronic image sensors, deviation or focusing coils
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N23/00—Cameras or camera modules comprising electronic image sensors; Control thereof
- H04N23/80—Camera processing pipelines; Components thereof
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Image Input (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供了一种基于VDMA的零拷贝触发采集装置包括图像传感器,FPGA芯片和CPU端;FPGA芯片包括VDMA模块,CPU端包括驱动模块。启动采集前,设置VDMA模块将第一帧图像数据信息写入影子寄存器中,驱动模块使FPGA芯片产生一个同步信号,将写入影子寄存器的第一帧数据信息移至激活寄存器,使第一帧数据信息生效;并将第二帧图像数据信息写入影子寄存器中,才开始正式进行触发采集。本发明解决了VDMA在不同的帧同步模式下不能完全实现触发采集的问题,通过调整同步信号和写入地址的发送规则,实现了每次收到触发采集信号,VDMA均可正确的将一帧图像输送至内存中,使用户得到完整帧数的图像。
Description
技术领域
本发明涉及VDMA图像采集技术领域,尤其涉及一种基于VDMA的零拷贝触发采集装置及方法。
背景技术
VDMA是xilinx提供的一款IP核,提供了将图像数据从FPGA搬运到DDR内存的功能。VDMA在使用时有三种帧同步模式:帧头同步模式是在帧头发送同步信号的同步模式;由fsync同步模式是由使用者决定帧头发送或者帧尾发送同步信号的同步模式;不需要同步,一有数据就开始搬运,数据量够了就产生中断。不同步缺少数据校验,一旦出现错误,后续无法恢复正常,在某些环境严酷的场景下不适合使用;帧头同步模式,当帧头同步信号到来的时候产生中断,同时帧头同步信号会使得上一次配置的VDMA目的地址生效,第一帧的地址是开采命令的时候设置的,第一个帧头同步信号启动VDMA传输,不会产生中断,第二个帧头同步信号产生的中断会得到第一张图像,因此,每帧图像都是在下一帧的帧头才能产生,对于连续采集没有问题,但是对于触发采集的情况,下一帧的触发信号不发送,就不会得到本帧图像,显然不符合使用要求;fsync同步模式,如果在帧头发送同步信号,则情况和帧头同步相同,如果在帧尾发送,第一个fsync同步信号在第一帧的帧尾发送,此时刚刚启动VDMA,不会产生中断,在第二帧的场尾fsync同步信号会产生中断,会得到第二帧图像,后续的图像也会在场尾得到,但是第一帧发送的触发信号不会得到图像。
目前VDMA的几种常用配置方式,对于连续采集的方式均可以满足要求,但是对于触发采集均会存在一些问题,通常方法进行触发采集往往会因为没有定义采集地址或图像触发时VDMA尚未启动而导致缺少第一帧的图像或图像延迟显示。但是在高精度的工业生产中每一帧的图像都十分重要,即使仅缺少第一帧的图像也会产生严重的问题。
发明内容
本发明为了解决现有技术中几种触发方式在触发采集时依然会出现缺帧或图像延迟的问题,提出一种基于VDMA的零拷贝触发采集装置,包括图像传感器,FPGA芯片和CPU端;
其中,所述FPGA芯片还包括FIFO模块和VDMA模块;
所述CPU端还包括内存、调用模块和驱动模块;
所述图像传感器用于采集图像生成图像数据,所述FIFO模块用于缓存所述图像传感器采集的图像数据等待所述VDMA模块进行搬运,每个图像数据帧尾所述FPGA芯片产生同步信号;
所述VDMA模块用于将所述FIFO模块中图像数据搬运到所述CPU端内存中,供所述调用模块提取和使用;
所述驱动模块能够在触发采集前将第一帧图像数据的参数信息和目标地址写入VDMA模块中的影子寄存器,驱动所述FPGA芯片产生一个同步信号,使所述影子寄存器中图像数据的参数信息和目标地址移至激活寄存器,并将下一帧图像数据的参数信息和目标地址写入VDMA模块中的影子寄存器;开始触发采集后由所述VDMA模块收到所述同步信号反馈中断信号,使所述驱动模块进入中断服务函数,并在中断服务函数执行期间将完整写入缓存的图像数据交由所述调用模块提取和使用。
更进一步地,所述CPU端包括缓存和缓存控制器,所述驱动模块能够控制所述缓存控制器通过地址指针的方式管理所述缓存的使用顺序、发送以及回收;
所述缓存控制器设有等待采集队列、进行采集队列和用户占用队列;所述等待采集队列,用于容纳尚未进行工作的缓存的地址指针;所述进行采集队列,用于容纳进行图像数据搬运的缓存的地址指针;所述用户占用队列,用于容纳所述调用模块正在使用的缓存的地址指针。
更进一步地,所述VDMA模块包括中断状态寄存器,如果当前待搬运的图像数据完整写入所述缓存,所述中断状态寄存器在所述驱动模块执行中断服务函数期间产生确认写入信号。
更进一步地,所述驱动模块读取到所述确认写入信号,且所述进行采集队列中缓存的地址指针数量大于等于2时,则将所述进行采集队列的队首缓存的地址指针移除,并将所述缓存的地址指针加入所述用户占用队列队尾;如果进行采集队列中缓存数量小于2,则不进行队列操作。
更进一步地,其特征在于,FPGA芯片包括状态寄存器,所述驱动模块回收所述用户占用队列的缓存的地址指针时,读取所述状态寄存器,判断是否已经开始图像数据传输,如果已经开始传输,则不进行操作;如果尚未开始图像数据传输,则将准备交还的所述缓存的地址指针加入进行采集队列的队尾,并将下一帧图像数据信息写入影子寄存器中。
还提供了一种基于权利要求1-5所述的VDMA的采集装置的零拷贝触发采集方法,其特征在于,所述零拷贝触发采集方法包括以下步骤:
S1,编写FPGA驱动程序,设置VDMA模块的帧同步模式为s2mm_fsync同步模式并在每个图像数据帧尾由FPGA芯片产生同步信号;设置FPGA芯片能够接受驱动模块发送的同步命令产生一个同步信号;
S2,将第一帧图像数据的参数信息写入VDMA模块的影子寄存器中,并将对应缓存的地址指针移入进行采集队列尾部准备进行图像数据存储;
S3,驱动模块发送同步命令,使FPGA芯片产生一个同步信号,VDMA模块收到同步信号使最新写入影子寄存器的值转移至激活寄存器;
S4,将第二帧图像数据的参数信息写入VDMA模块的影子寄存器中,并将对应缓存的地址指针移入进行采集队列尾部准备进行图像数据存储;
S5,等待图像数据信号到来,将图像数据信号写入进行采集队列队首位置的缓存中;
S6,图像数据完整写入缓存时,FPGA芯片产生一个同步信号,将最新写入影子寄存器的值转移至激活寄存器,VDMA模块收到同步信号反馈中断信号,使驱动模块进入中断服务函数,驱动模块将图像数据完整写入的缓存对应的地址指针转移至用户占用队列供用户使用;
S7,将激活寄存器中图像的下一帧图像数据的参数信息写入影子寄存器中,并将对应缓存的地址指针加入进行采集队列尾部准备进行存储;
S8,CPU端执行交还缓存指令将用户占用队列中缓存的地址指针交还给进行采集队列或等待采集队列;
S9,重复执行步骤S5至S8,直至所有图像数据采集完成。
更进一步地,在步骤S2、S4和S7中,将图像数据信息写入所述VDMA模块的影子寄存器中,并将对应的所述缓存的地址指针加入所述进行采集队列尾部准备进行图像数据存储,包括以下步骤:
a.将所述等待采集队列中的第一个缓存地址addrN写入VDMA地址影子寄存器,并将所述缓存的地址指针移至进行采集队列队尾;
b.依次将行大小写入行大小影子寄存器,将步长写入步长影子寄存器,图像大小将写入图像大小影子寄存器。
更进一步地,在步骤S6中,VDMA模块收到同步信号反馈中断信号,驱动模块响应中断,执行中断服务函数期间,驱动模块读取中断状态寄存器寻找确认写入信号,如果产生了所述确认写入信号且所述进行采集队列中缓存的地址指针数量大于等于2时,则将所述进行采集队列的队首缓存的地址指针移除,将其加入用户占用队列队尾;如果所述进行采集队列中缓存的地址指针数量小于2,则不进行队列操作。
更进一步地,在步骤S8中,用户执行交还缓存指令归还缓存的地址指针,当所述等待采集队列不为空时,只将准备交还的所述缓存的地址指针加入所述等待采集队列的队尾;当所述等待采集队列为空时,驱动模块读取状态寄存器,判断是否已经开始传输,如果已经开始传输,则什么都不做;如果未进行传输,则将所述准备交还的所述缓存的地址指针对应地址写入VDMA地址影子寄存器,将所述缓存的地址指针加入进行采集队列的队尾;将行大小写入行大小影子寄存器,将步长写入步长影子寄存器,图像大小将写入图像大小影子寄存器。
本发明的有益效果是:
本发明解决了VDMA在不同的帧同步模式下不能完全实现触发采集的问题,通过调整fsync同步信号和写入地址的发送规则,采用帧尾发送fsync同步信号的方式,并设置采集装置在正式接收触发采集的图像数据信号前先将第一帧的图像数据信息写入影子寄存器,并通过驱动模块发送的fsync同步信号激活该影子寄存器,并将第二帧的图像数据信息写入影子寄存器。实现了每次收到触发采集信号,VDMA均可正确的将一帧图像输送至内存中,使用户得到完整帧数的图像。相比较现有技术,无需丢弃第一帧和通过错位取地址的方式实现触发采集,为采集驱动的开发降低了难度,同时也极大提升了图像采集器的性能。
本发明采用VDMA模块直接将数据搬运CPU端内存中的缓存buffer内,并在确认搬运数据完整写入后将缓存buffer的地址指针交给用户,供用户提取数据,这种搬运方式减少了数据在采集过程中拷贝的次数,不但提高了系统采集搬运图像的效率,降低了CPU处理数据拷贝时产生的负荷,同时较少的拷贝数量也使得出错率极大的降低,实现了零拷贝采集。
常规技术手段下,为了防止用户占用缓存buffer过长时间导致没有缓存buffer供新的图像数据写入,采用一味的提高缓存buffer的数量,通过占用巨大的缓存空间来保障连续的数据写入需求;与此同时,直接将采集到的缓存buffer给用户使用就不能避免用户占用缓存buffer,时间一长,无论分配多少缓存buffer,都不可避免的出现缓存buffer不够用,VDMA模块依然会将新的数据搬运至用户占用的缓存buffer中,使得用户使用的缓存buffer中内容被修改。本发明通过驱动模块对缓存控制器的控制及管理,只需要使用4个缓存buffer就实现了将采集到的图像数据搬运实时至CPU端并取回缓存buffer继续搬运的循环,极大的提高了缓存空间的利用效率。
常规技术手段下,用户交还缓存buffer的地址指针的时机并未被控制,只要等待采集队列为空,能够在任意时间进行交还缓存buffer的地址指针,并将该缓存buffer的地址指针立即加入进行采集队列,并写入下一帧的图像数据信息到影子寄存器;如果在非中断状态下交还了缓存buffer的地址指针并将该缓存buffer的地址指针立即加入进行采集队列写入下一帧地址,有一定几率造成VDMA将数据写入了错误的地址,而新交还的缓存buffer的地址指针没有被写而再次移至CPU端。本次新交还的缓存buffer的地址指针对应的图像数据信息的地址还未写入影子寄存器前,上一帧的图像数据采集完成后产生fsync信号,使得上次写入图像数据信息的影子寄存器中的值移至激活寄存器,但是被转移至的用户占用队列的缓存buffer的地址指针是新交还的缓存buffer对应的。本发明通过驱动模块对CPU端交还缓存buffer的地址指针的时机进行控制,当等待采集队列为空时,只有在执行中断服务函数期间下才接受CPU端交还缓存buffer的地址指针,避免出现图像数据信息与转移的buffer不对应的情况。
附图说明
图1是本发明实施例提供的一种基于VDMA的零拷贝触发采集装置的结构示意图;
图2是本发明实施例提供的一种基于VDMA的零拷贝触发采集方法示意图。
具体实施方式
下面通过实施例,并结合附图1-2,对本发明的技术方案作进一步具体的说明。
如附图1所示,本发明提出一种基于VDMA的零拷贝触发采集装置,包括图像传感器,FPGA芯片和CPU端;FPGA芯片还包括FIFO模块、VDMA模块和状态寄存器。
其中,图像传感器用于采集图像生成图像数据,通过AXI4总线写入FPGA芯片中的FIFO模块。
CPU端包括内存、缓存控制器、调用模块(比如用户程序)和驱动模块,通过VDMA模块将图像传感器写入FIFO模块的图像数据搬运至内存中,即可使调用模块接收并使用图像数据;驱动模块控制FPGA芯片完成图像的采集。
驱动模块还能控制缓存控制器调用缓存buffer的信息,读取缓存buffer的地址,控制缓存buffer的地址指针发送的顺序以及回收缓存buffer的地址指针;缓存buffer属于CPU端的内存,缓存控制器能够通过内存映射技术,使VDMA模块直接使用内核中的内存地址,驱动模块在VDMA产生中断时将完整写入缓存的图像数据存储的内存地址交给调用模块进行使用。
FIFO模块是先入先出存储器,用于将图像传感器输送的数据依据先入先出的原则写入VDMA模块的缓存中;
VDMA模块是xilinx提供的一款IP核,用于将图像数据搬运到CPU端的内存中;
VDMA模块包括中断状态寄存器,中断状态寄存器用于判断图像数据是否完整写入对应的缓存buffer,并记录错误信息;
状态寄存器用于监测VDMA模块是否处于进行数据传输的状态;
驱动模块设置VDMA模块采用s2mm_fsync的同步模式,在图像数据信号的帧尾由FPGA芯片产生同步信号fsync信号,当VDMA模块检测到fsync信号有一个下降沿的时候,驱动模块会收到VDMA模块在fsnyc产生后第64个时钟周期的时刻产生的一个interrupt中断信号,使驱动模块响应中断,执行中断服务函数,并将采集到图像的缓存buffer的地址指针转移到done_list队列中,将对应的地址指针指向的地址中存储的图像数据交由CPU端调用模块使用。同时,设置驱动模块能在发送autofsync命令的同时使FPGA芯片产生一个fsync信号。
缓存控制器设有pending_list队列、active_list队列和done_list队列;pending_list队列为等待采集队列,用于容纳尚未进行工作的缓存buffer的地址指针,缓存buffer的地址指针依队列顺序由队首至队尾依次使用,在本实施例中,设置有4个缓存buffer,则pending_list队列在初始状态时具有4个缓存buffer的地址指针;active_list队列为进行采集队列,用于容纳准备进行图像数据写入的缓存buffer的地址指针;done_list队列为用户占用队列,用于容纳调用模块正在使用的缓存buffer的地址指针,CPU端能够通过执行qbuf指令将缓存buffer的地址指针交还至pending_list队列。
VDMA模块包括影子寄存器和激活寄存器,同步信号fsync信号使得之前最新一次写入影子寄存器的值生效,生成同步信号fsync信号之后,即可写入下一帧的地址,且不影响本次采集。随时写入的都是影子寄存器,生成同步信号fsync信号之后,这些值被转移到了激活寄存器中,如果在同步信号fsync信号之前再次写入一个新地址,则同步信号fsync信号后是新地址生效。具体的影子寄存器和激活寄存器分为:地址寄存器、VDMA_HSIZE寄存器、VDMA_STRIDE寄存器和VDMA_VSIZE寄存器;VDMA模块每次搬运图像数据前应将图像数据相应的缓存地址、行大小HSIZE、步长STRIDE和图像大小VSIZE输入相应的影子寄存器中,上述影子寄存器当VDMA模块收到同步信号fsync信号后,写入的值被转移到激活寄存器。
中断状态寄存器用于存储在VDMA模块的错误状态,如果未发生错误并且图像数据完整写入缓存buffer中,则产生确认写入信号FRM_CNT中断。中断状态寄存器在每次读取存储信息后,都将中断状态寄存器内的错误状态进行清理,防止寄存的错误状态影响下一次正常的图像数据传输状态。
驱动模块在中断服务函数执行期间读取中断状态寄存器,对中断中的错误进行处理后,清除状态寄存器清除错误状态。如果中断状态寄存器中产生了FRM_CNT中断,且当前active_list队列中缓存buffer的地址指针的数量>=2时,则将active_list队列的队首缓存buffer的地址指针移除,并将该缓存buffer的地址指针加入done_list队列队尾,供用户获得该缓存buffer中完整的图像详细;如果active_list队列中缓存buffer的地址指针的数量<2,则不进行队列操作。如果未查找到FRM_CNT中断,则依据错误状态提示修复错误。
用户执行qbuf指令归还缓存buffer的地址指针时,当pending_list队列不为空时,只将准备交还的缓存buffer的地址指针加入pending_list队列的队尾;当pending_list为空时,驱动模块读取状态寄存器,判断是否已经开始传输,如果已经开始传输,则什么都不做;如果还没有开始传输,则将准备交还的缓存buffer的地址指针加入active_list队列的队尾,并将下一帧图像数据信息写入影子寄存器。
更详细地,通过对本发明的技术方案实施一次触发采集的实施例进行说明,首先对驱动模块进行设置,设置VDMA的帧同步模式采用s2mm_fsync的同步模式,并在图像数据信号的帧尾由FPGA芯片产生同步信号fsync信号;同时,设置FPGA芯片能够接收驱动模块发送的autofsync命令,收到命令的同时产生一个fsync信号。
其次,驱动模块设置完成后启动触发采集装置,将pending_list队列中的第一个缓存buffer的地址指针对应的地址addr1写入VDMA地址影子寄存器,并将pending_list队列中的第一个,即地址为addr1的缓存buffer地址指针移至active_list队列队尾,将行大小HSIZE写入VDMA_HSIZE影子寄存器,将步长STRIDE写入VDMA_STRIDE影子寄存器,图像大小将VSIZE写入VDMA_VSIZE影子寄存器。
驱动模块向FPGA芯片发送autofsync命令,产生一个fsync信号,VDMA模块收到fsync信号后使上述写入缓存地址、行大小HSIZE、步长STRIDE和图像大小VSIZE值的信息由影子寄存器转移到激活寄存器。
再次,将目前pending_list队列中的第一个缓存buffer的地址指针对应的地址addr2写入VDMA地址影子寄存器,并将目前pending_list队列中的第一个,即地址为addr2的缓存buffer的地址指针移至active_list队列队尾,将行大小HSIZE写入VDMA_HSIZE影子寄存器,将步长STRIDE写入VDMA_STRIDE影子寄存器,图像大小将VSIZE写入VDMA_VSIZE影子寄存器。由于初始状态时pending_list队列中设置有4个缓存buffer的地址指针,此时,pending_list队列中还有2个缓存buffer的地址指针尚未进行工作,active_list队列中有2个缓存buffer的地址指针等待写入数据。
最后,开始进行图像触发采集,当图像传感器被激活,第一帧图像数据被写入active_list队列中队首缓存buffer中,即地址为addr1的缓存buffer,并随着第一帧图像数据信号帧尾,FPGA芯片产生一个同步信号fsync信号,当检测到fsync信号有一个下降沿的时候,驱动模块会收到VDMA模块在fsnyc产生后的第64个时钟周期的时刻产生的一个interrupt中断信号,使驱动模块响应中断,执行中断服务函数。
与此同时,当VDMA模块收到fsync信号时,最新写入了缓存地址、行大小HSIZE、步长STRIDE和图像大小VSIZE值的信息由影子寄存器转移到激活寄存器。将目前pending_list队列中的第一个缓存buffer的地址指针对应的地址addr3写入VDMA地址影子寄存器,并将pending_list队列中的第一个,即地址为addr3的缓存buffer的指针移至active_list队列队尾,将行大小HSIZE写入VDMA_HSIZE影子寄存器,将步长STRIDE写入VDMA_STRIDE影子寄存器,图像大小将VSIZE写入VDMA_VSIZE影子寄存器。此时,pending_list队列还有1个缓存buffer尚未进行工作,active_list队列依然有2个缓存buffer等待写入数据。
驱动模块读取中断状态寄存器,清除状态寄存器清除错误状态并确认FRM_CNT中断,当前active_list队列中缓存buffer的地址指针数量为2,将active_list队列的队首缓存buffer的地址指针,即地址为addr1的缓存buffer的地址指针移除,并将该缓存buffer的地址指针加入done_list队列队尾,供调用模块获得该地址为addr1的缓存buffer中完整的图像数据。
当第二帧图像数据到来时,该帧图像数据将被写入地址为addr2的缓存buffer中,在图像数据写入buffer的同时,CPU端调用模块将地址为addr1的缓存buffer中数据使用结束后,将执行qbuf指令归还地址为addr1的缓存buffer的地址指针,由于此时pending_list队列中依然有一个缓存buffer,则归还的缓存buffer的地址指针直接置于pending_list队列队尾。
假如,CPU端数据处理较慢,执行qbuf指令时第三帧图像数据已经到来,驱动模块已经将pending_list队列中地址为addr4的缓存buffer的地址指针转移至active_list队列队尾,将active_list队列中地址为addr2的缓存buffer的地址指针转移至done_list队列,此时pending_list队列为空,则驱动模块读取FPGA状态寄存器,判断VDMA模块目前是否正在进行图像数据的传输,如果已经开始传输,则什么都不做;如果还没有开始传输,则将准备交还的缓存buffer的地址指针对应的地址addr1写入VDMA地址影子寄存器,并将地址为addr1的缓存buffer的地址指针直接加入active_list队列的队尾,将行大小HSIZE写入VDMA_HSIZE影子寄存器,将步长STRIDE写入VDMA_STRIDE影子寄存器,图像大小将VSIZE写入VDMA_VSIZE影子寄存器。等待下一帧图像数据到来产生的fsync信号使最新写入的缓存地址、行大小HSIZE、步长STRIDE和图像大小VSIZE值的信息由影子寄存器转移到激活寄存器。
通常情况下,由于CPU端对图像数据进行实时处理,4个缓存buffer已经能够满足采集中的循环使用需求,实现了完整的采集循环。
如附图2所示,本发明还提出了一种基于VDMA的零拷贝触发采集方法,包括以下步骤:
S1,编写FPGA驱动程序,设置VDMA模块的帧同步模式为s2mm_fsync同步模式并在每个图像数据帧尾由FPGA芯片产生同步信号;设置FPGA芯片能够接受驱动模块发送的同步命令产生一个同步信号;
S2,将第一帧图像数据的参数信息写入VDMA模块的影子寄存器中,并将对应缓存的地址指针移入进行采集队列尾部准备进行图像数据存储;
S3,驱动模块发送同步命令,使FPGA芯片产生一个同步信号,VDMA模块收到同步信号使最新写入影子寄存器的值转移至激活寄存器;
S4,将第二帧图像数据的参数信息写入VDMA模块的影子寄存器中,并将对应缓存的地址指针移入进行采集队列尾部准备进行图像数据存储;
S5,等待图像数据信号到来,将图像数据信号写入进行采集队列队首位置的缓存中;
S6,图像数据完整写入缓存时,FPGA芯片产生一个同步信号,将最新写入影子寄存器的值转移至激活寄存器,VDMA模块收到同步信号反馈中断信号,使驱动模块进入中断服务函数,驱动模块将图像数据完整写入的缓存对应的地址指针转移至用户占用队列供用户使用;
S7,将激活寄存器中图像的下一帧图像数据的参数信息写入影子寄存器中,并将对应缓存的地址指针加入进行采集队列尾部准备进行存储;
S8,CPU端执行交还缓存指令将用户占用队列中缓存的地址指针交还给进行采集队列或等待采集队列;
S9,重复执行步骤S5至S8,直至所有图像数据采集完成。
具体的,在步骤S2中,依顺序执行:将pending_list队列中的第一个缓存buffer的地址指针对应的地址addr1写入VDMA地址影子寄存器,并将pending_list队列中的第一个,即地址为addr1的缓存buffer的地址指针移至active_list队列队尾,将行大小HSIZE写入VDMA_HSIZE影子寄存器,将步长STRIDE写入VDMA_STRIDE影子寄存器,图像大小将VSIZE写入VDMA_VSIZE影子寄存器。
在步骤S4中,依顺序执行:将pending_list队列中的第一个缓存buffer的地址指针对应的地址addr2写入VDMA地址影子寄存器,并将pending_list队列中的第一个,即地址为addr2的缓存buffer的地址指针移至active_list队列队尾,将行大小HSIZE写入VDMA_HSIZE影子寄存器,将步长STRIDE写入VDMA_STRIDE影子寄存器,图像大小将VSIZE写入VDMA_VSIZE影子寄存器;
在步骤S6中,VDMA模块收到同步信号反馈中断信号,驱动模块响应中断,执行中断服务函数期间,驱动模块读取中断状态寄存器,对中断中的错误进行处理后,清除状态寄存器清除错误状态;并确认FRM_CNT中断,如果产生了FRM_CNT中断且如果当前active_list队列中缓存buffer的地址指针的数量>=2时,则将active_list队列的队首缓存buffer的地址指针移除,将其加入done_list队列队尾,获得完整的图像详细;如果active_list队列中缓存buffer的地址指针的数量<2,则不进行队列操作;
在步骤S7中,将pending_list队列中的第一个缓存buffer的地址指针对应的地址addrN写入VDMA地址影子寄存器,并将pending_list队列中的第一个,即地址为addrN的缓存buffer的地址指针移至active_list队列队尾,将行大小HSIZE写入VDMA_HSIZE影子寄存器,将步长STRIDE写入VDMA_STRIDE影子寄存器,图像大小将VSIZE写入VDMA_VSIZE影子寄存器。
在步骤S8中,用户执行qbuf指令归还缓存buffer的地址指针,当pending_list队列不为空时,只将准备交还的缓存buffer的地址指针加入pending_list队列的队尾。当pending_list为空时,驱动模块读取状态寄存器,判断是否已经开始传输,如果已经开始传输,则什么都不做;如果还没有开始传输,则将准备交还的缓存buffer的地址指针对应的地址写入VDMA地址影子寄存器,并将该缓存buffer的地址指针加入active_list队列的队尾;将行大小HSIZE写入VDMA_HSIZE影子寄存器,将步长STRIDE写入VDMA_STRIDE影子寄存器,图像大小将VSIZE写入VDMA_VSIZE影子寄存器。
虽然本发明已经以较佳实施例公开如上,但实施例并不是用来限定本发明的。在不脱离本发明之精神和范围内,所做的任何等效变化或润饰,同样属于本发明之保护范围。因此本发明的保护范围应当以本申请的权利要求所界定的内容为标准。
Claims (9)
1.一种基于VDMA的零拷贝触发采集装置,包括图像传感器,FPGA芯片和CPU端;
其中,所述FPGA芯片还包括FIFO模块和VDMA模块;
所述CPU端还包括内存、调用模块和驱动模块;
所述图像传感器用于采集图像生成图像数据,所述FIFO模块用于缓存所述图像传感器采集的图像数据等待所述VDMA模块进行搬运,在每个图像数据帧尾所述FPGA芯片产生同步信号;
所述VDMA模块用于将所述FIFO模块中图像数据搬运到所述CPU端内存中,供所述调用模块提取和使用;
所述驱动模块能够在触发采集前将第一帧图像数据的参数信息和目标地址写入VDMA模块中的影子寄存器,驱动所述FPGA芯片产生一个同步信号,使所述影子寄存器中图像数据的参数信息和目标地址移至激活寄存器,并将下一帧图像数据的参数信息和目标地址写入VDMA模块中的影子寄存器;开始触发采集后由所述VDMA模块收到所述同步信号反馈中断信号,使所述驱动模块执行中断服务函数,并在中断服务函数执行期间将完整写入缓存的图像数据交由所述调用模块提取和使用。
2.根据权利要求1所述的零拷贝触发采集装置,其特征在于,所述CPU端包括缓存和缓存控制器,所述驱动模块能够控制所述缓存控制器通过地址指针的方式管理所述缓存的使用顺序、发送以及回收;
所述缓存控制器设有等待采集队列、进行采集队列和用户占用队列;所述等待采集队列,用于容纳尚未进行工作的缓存的地址指针;所述进行采集队列,用于容纳进行图像数据搬运的缓存的地址指针;所述用户占用队列,用于容纳所述调用模块正在使用的缓存的地址指针。
3.根据权利要求2所述的零拷贝触发采集装置,其特征在于,所述VDMA模块包括中断状态寄存器,如果当前待搬运的图像数据完整写入所述缓存,所述中断状态寄存器在所述驱动模块执行中断服务函数期间产生确认写入信号。
4.根据权利要求3所述的零拷贝触发采集装置,其特征在于,所述驱动模块读取到所述确认写入信号,且所述进行采集队列中缓存的地址指针数量大于等于2时,则将所述进行采集队列的队首缓存的地址指针移除,并将所述缓存的地址指针加入所述用户占用队列队尾;如果进行采集队列中缓存数量小于2,则不进行队列操作。
5.根据权利要求2所述的零拷贝触发采集装置,其特征在于,FPGA芯片包括状态寄存器,所述驱动模块回收所述用户占用队列的缓存的地址指针时,读取所述状态寄存器,判断是否已经开始图像数据传输,如果已经开始传输,则不进行操作;如果尚未开始图像数据传输,则将准备交还的所述缓存的地址指针加入进行采集队列的队尾,并将下一帧图像数据信息写入影子寄存器中。
6.一种基于权利要求1-5所述的VDMA的采集装置的零拷贝触发采集方法,其特征在于,所述零拷贝触发采集方法包括以下步骤:
S1,编写FPGA驱动程序,设置VDMA模块的帧同步模式为s2mm_fsync同步模式并在每个图像数据帧尾由FPGA芯片产生同步信号;设置FPGA芯片能够接受驱动模块发送的同步命令产生一个同步信号;
S2,将第一帧图像数据的参数信息写入VDMA模块的影子寄存器中,并将对应缓存的地址指针移入进行采集队列尾部准备进行图像数据存储;
S3,驱动模块发送同步命令,使FPGA芯片产生一个同步信号,VDMA模块收到同步信号使最新写入影子寄存器的值转移至激活寄存器;
S4,将第二帧图像数据的参数信息写入VDMA模块的影子寄存器中,并将对应缓存的地址指针移入进行采集队列尾部准备进行图像数据存储;
S5,等待图像数据信号到来,将图像数据信号写入进行采集队列队首位置的缓存中;
S6,图像数据完整写入缓存时,FPGA芯片产生一个同步信号,将最新写入影子寄存器的值转移至激活寄存器,VDMA模块收到同步信号反馈中断信号,使驱动模块进入中断服务函数,驱动模块将图像数据完整写入的缓存对应的地址指针转移至用户占用队列供用户使用;
S7,将激活寄存器中图像的下一帧图像数据的参数信息写入影子寄存器中,并将对应缓存的地址指针加入进行采集队列尾部准备进行存储;
S8,CPU端执行交还缓存指令将用户占用队列中缓存的地址指针交还给进行采集队列或等待采集队列;
S9,重复执行步骤S5至S8,直至所有图像数据采集完成。
7.根据权利要求6所述的零拷贝触发采集方法,其特征在于,在步骤S2、S4和S7中,将图像数据信息写入所述VDMA模块的影子寄存器中,并将对应的所述缓存的地址指针加入所述进行采集队列尾部准备进行图像数据存储,包括以下步骤:
a.将所述等待采集队列中的第一个缓存地址addrN写入VDMA地址影子寄存器,并将所述缓存的地址指针移至进行采集队列队尾;
b.依次将行大小写入行大小影子寄存器,将步长写入步长影子寄存器,图像大小将写入图像大小影子寄存器。
8.根据权利要求6所述的零拷贝触发采集方法,其特征在于,在步骤S6中,VDMA模块收到同步信号反馈中断信号,驱动模块响应中断,执行中断服务函数期间,驱动模块读取中断状态寄存器寻找确认写入信号,如果产生了所述确认写入信号且所述进行采集队列中缓存的地址指针数量大于等于2时,则将所述进行采集队列的队首缓存的地址指针移除,将其加入用户占用队列队尾;如果所述进行采集队列中缓存的地址指针数量小于2,则不进行队列操作。
9.根据权利要求6所述的零拷贝触发采集方法,其特征在于,在步骤S8中,用户执行交还缓存指令归还缓存的地址指针,当所述等待采集队列不为空时,只将准备交还的所述缓存的地址指针加入所述等待采集队列的队尾;当所述等待采集队列为空时,驱动模块读取状态寄存器,判断是否已经开始传输,如果已经开始传输,则什么都不做;如果未进行传输,则将所述准备交还的所述缓存的地址指针对应地址写入VDMA地址影子寄存器,将所述缓存的地址指针加入进行采集队列的队尾;将行大小写入行大小影子寄存器,将步长写入步长影子寄存器,图像大小将写入图像大小影子寄存器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910800319.5A CN110519497B (zh) | 2019-08-28 | 2019-08-28 | 一种基于vdma的零拷贝触发采集装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910800319.5A CN110519497B (zh) | 2019-08-28 | 2019-08-28 | 一种基于vdma的零拷贝触发采集装置及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110519497A true CN110519497A (zh) | 2019-11-29 |
CN110519497B CN110519497B (zh) | 2020-11-17 |
Family
ID=68627486
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910800319.5A Active CN110519497B (zh) | 2019-08-28 | 2019-08-28 | 一种基于vdma的零拷贝触发采集装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110519497B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113259540A (zh) * | 2020-12-18 | 2021-08-13 | 深圳怡化电脑股份有限公司 | 扫描图像数据的处理方法、装置、设备及存储介质 |
WO2021159338A1 (zh) * | 2020-02-12 | 2021-08-19 | 深圳元戎启行科技有限公司 | 图像采集方法、装置、控制装置、计算机设备、可读存储介质、图像采集设备和远程驾驶系统 |
CN113328998A (zh) * | 2021-05-14 | 2021-08-31 | 维沃移动通信有限公司 | 影像数据传输的方法和电子设备 |
CN113347365A (zh) * | 2021-08-05 | 2021-09-03 | 浙江华睿科技股份有限公司 | 图像传感器的触发采集方法及图像采集设备 |
CN113612936A (zh) * | 2021-08-05 | 2021-11-05 | 中国大恒(集团)有限公司北京图像视觉技术分公司 | 一种csi相机高帧率图像采集方法 |
CN115220936A (zh) * | 2022-09-20 | 2022-10-21 | 之江实验室 | 一种多类传感器数据在控制器中零拷贝的方法和装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101150485A (zh) * | 2007-11-15 | 2008-03-26 | 曙光信息产业(北京)有限公司 | 一种零拷贝缓冲区队列网络数据发送的管理方法 |
CN101267361A (zh) * | 2008-05-09 | 2008-09-17 | 武汉飞思科技有限公司 | 一种基于零拷贝技术的高速网络数据包捕获方法 |
CN101583027A (zh) * | 2009-06-10 | 2009-11-18 | 中兴通讯股份有限公司 | 一种实时缓存图像数据的方法及移动终端 |
US8874801B1 (en) * | 2013-03-08 | 2014-10-28 | Xilinx, Inc. | On chip performance tracking for a system on a chip |
US20150016499A1 (en) * | 2013-07-12 | 2015-01-15 | Texas Instruments Incorporated | High Perfomance DMA Controller for Video Processors |
CN104320615A (zh) * | 2014-10-17 | 2015-01-28 | 智擎信息系统(上海)有限公司 | 一种智能视频安防系统及其信号处理方法 |
CN104506379A (zh) * | 2014-12-12 | 2015-04-08 | 北京锐安科技有限公司 | 网络数据捕获方法和系统 |
CN106060462A (zh) * | 2016-06-07 | 2016-10-26 | 中南大学 | 一种基于Zynq平台的高性能视频处理及传输系统 |
CN108806243A (zh) * | 2018-04-24 | 2018-11-13 | 东南大学 | 一种基于Zynq-7000的交通流量信息采集终端 |
-
2019
- 2019-08-28 CN CN201910800319.5A patent/CN110519497B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101150485A (zh) * | 2007-11-15 | 2008-03-26 | 曙光信息产业(北京)有限公司 | 一种零拷贝缓冲区队列网络数据发送的管理方法 |
CN101267361A (zh) * | 2008-05-09 | 2008-09-17 | 武汉飞思科技有限公司 | 一种基于零拷贝技术的高速网络数据包捕获方法 |
CN101583027A (zh) * | 2009-06-10 | 2009-11-18 | 中兴通讯股份有限公司 | 一种实时缓存图像数据的方法及移动终端 |
US8874801B1 (en) * | 2013-03-08 | 2014-10-28 | Xilinx, Inc. | On chip performance tracking for a system on a chip |
US20150016499A1 (en) * | 2013-07-12 | 2015-01-15 | Texas Instruments Incorporated | High Perfomance DMA Controller for Video Processors |
CN104320615A (zh) * | 2014-10-17 | 2015-01-28 | 智擎信息系统(上海)有限公司 | 一种智能视频安防系统及其信号处理方法 |
CN104506379A (zh) * | 2014-12-12 | 2015-04-08 | 北京锐安科技有限公司 | 网络数据捕获方法和系统 |
CN106060462A (zh) * | 2016-06-07 | 2016-10-26 | 中南大学 | 一种基于Zynq平台的高性能视频处理及传输系统 |
CN108806243A (zh) * | 2018-04-24 | 2018-11-13 | 东南大学 | 一种基于Zynq-7000的交通流量信息采集终端 |
Non-Patent Citations (2)
Title |
---|
邓健峰 等: "车载环境下实时行人检测系统研究", 《自动化仪表》 * |
陈广和 等: "基于ZYNQ 的毫米波雷达高速数据采集系统设计", 《现代电子技术》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021159338A1 (zh) * | 2020-02-12 | 2021-08-19 | 深圳元戎启行科技有限公司 | 图像采集方法、装置、控制装置、计算机设备、可读存储介质、图像采集设备和远程驾驶系统 |
CN113259540A (zh) * | 2020-12-18 | 2021-08-13 | 深圳怡化电脑股份有限公司 | 扫描图像数据的处理方法、装置、设备及存储介质 |
CN113259540B (zh) * | 2020-12-18 | 2024-04-02 | 深圳怡化电脑股份有限公司 | 扫描图像数据的处理方法、装置、设备及存储介质 |
CN113328998A (zh) * | 2021-05-14 | 2021-08-31 | 维沃移动通信有限公司 | 影像数据传输的方法和电子设备 |
CN113347365A (zh) * | 2021-08-05 | 2021-09-03 | 浙江华睿科技股份有限公司 | 图像传感器的触发采集方法及图像采集设备 |
CN113612936A (zh) * | 2021-08-05 | 2021-11-05 | 中国大恒(集团)有限公司北京图像视觉技术分公司 | 一种csi相机高帧率图像采集方法 |
CN113347365B (zh) * | 2021-08-05 | 2021-11-23 | 浙江华睿科技股份有限公司 | 图像传感器的触发采集方法及图像采集设备 |
CN115220936A (zh) * | 2022-09-20 | 2022-10-21 | 之江实验室 | 一种多类传感器数据在控制器中零拷贝的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110519497B (zh) | 2020-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110519497A (zh) | 一种基于vdma的零拷贝触发采集装置及方法 | |
US5175818A (en) | Communication interface for independently generating frame information that is subsequently stored in host memory and sent out to transmitting fifo by dma | |
JP4439491B2 (ja) | マルチグラフィックスプロセッサシステム、グラフィックスプロセッサおよびデータ転送方法 | |
CN101634975B (zh) | 一种实现dma数据传输的方法及装置 | |
CN103986931B (zh) | 一种fpga+dsp结构上基于srio总线传输视频数据的实现方法 | |
CN112084136B (zh) | 队列缓存管理方法、系统、存储介质、计算机设备及应用 | |
US9239811B2 (en) | Data processing apparatus and data processing method | |
WO2020034500A1 (zh) | 一种基于二值化算法的加速控制系统、芯片及机器人 | |
CN109189577B (zh) | 一种数据同步时防止内存溢出的方法和装置 | |
CN102131053A (zh) | 一种适用于高速成像系统的数据采集、编码和存储方法 | |
US11237991B2 (en) | Image processing accelerator | |
CN211403419U (zh) | 基于二值化算法的加速控制系统、芯片及机器人 | |
CN101056316A (zh) | 一种pci以太网媒体访问控制器传输数据的方法 | |
CN110519180A (zh) | 网卡虚拟化队列调度方法及系统 | |
EP2568388B1 (en) | Processor to message-based network interface using speculative techniques | |
CN110069435A (zh) | 基于usb3.0转sccb的多摄像模组配置装置及方法 | |
CN116301627A (zh) | 一种NVMe控制器及其初始化、数据读写方法 | |
CN100549928C (zh) | 一种虚拟先入先出内存的实现方法和控制装置 | |
JP4839489B2 (ja) | ディスクリプタ制御方法、ダイレクトメモリ転送装置およびプログラム | |
US10037169B2 (en) | Image processing semiconductor device and image processing device | |
CN115328832B (zh) | 一种基于pcie dma的数据调度系统与方法 | |
CN203057362U (zh) | 动态可回退码流缓冲模块系统 | |
CN109426634A (zh) | 基于SoCFPGA采集数据的传输方法 | |
JP2006094400A (ja) | 画像処理装置および画像処理方法 | |
JP2527066B2 (ja) | 受信待ち行列処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |