(二)CCD传感器1000帧(可调)采集,fpga主控,sdram存储 68013usb2.0传输到上位机保存显示:fpga逻辑程序

本文讲述了作者在FPGA项目中遇到的挑战,如何通过并行设计解决时钟同步、数据准确性和信号协调问题,以提升CCD与AD转换、SDRAM和68013之间的数据传输效率。详细描述了各模块的工作原理和架构调整过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fpga这部分是花了大部分时间调试的,总结出来:比较难调试,调试方式单一

概述

fpga控制ccd传感器和ad转换芯片,从而获得ccd上所有阵列的电压数据,之后将数据存储在sdram中,然后控制68013芯片向上位机发送存储在sdram中的数据。

乍看之下比较简单,一条线的逻辑,但是需求中这样一步一步操作比较浪费时间,就没法做到高效,因此在fpga程序中保证高效就得采用并行。

举例来说取第4个ccd数据的时候,第3个ccd数据向ad转换器转换,第2个数据存入sdram,第1个数据从sdram中取出。而这些步骤之中,首先一个问题是时钟不同,其次问题是如何保持数据准确性,总的来说就是互相联调的问题。这个问题比较困难,我改了好几次架构花了好久,最终在一个架构上保证了数据可靠高效传输。具体如下我目前做的工作

架构部分

每个部分采用单独工作,相互给信号,给到信号在工作,其中在sdram和ccd和ad和68013之间用一个中间层mid模块负责总调度信号。

ccd部分

硬件是两个ccd,总调度信号由1000hz(可调)在中间层mid给出信号,ccd获得信号后,①在ccd_A上获取数据后给ad转换器,②在ccd_B上获取数据给ad,同时,ccd_A经过转换的数据发送给sdram,给sdram模块一个信号重复①②直到两个ccd所有数据传输完成也就是一帧数据获取到了,中间层mid到了设置的采集帧数速率后才能再次给ccd模块信号

sdram部分

这部分是双向的,输入和读取是异步

①写入:可以输入的条件是sdram没有到一帧可写入数据大小,如果到了,会给中间层mid信号,让mid无法给ccd信号开始读取。这样就有了万一上位机读取慢一点暂存的功能。

②读取:可以读取条件就是只要sdram有数据并且68013的fifo中还有空,只要满足就一直读取,直到读空。

mid部分

总调度,负责其他部分的信号沟通。

68013usb2.0部分

由于上位机是查询模式,只要68013的fifo中有数据就会读走,所以68013是只要fifo有空,并且sdram非空,就读取sdram的数据,上位机取走68013的数据后fifo就会减少相应读取数据的长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小都爱吃小橘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值