fpga这部分调试花了大部分时间,总结出来:调试难度大,调试方法单一
fpga控制ccd传感器和ad转换芯片以获得ccd将数据存储在所有阵列的电压数据中sdram然后控制68013芯片向上位机发送存储sdram中的数据。
乍看之下比较简单,一条线的逻辑,但是需求中这样一步一步操作比较浪费时间,就没法做到高效,因此在fpga要保证程序的高效性,必须并行使用。
以第四个为例ccd第三个数据ccd数据向ad转换器转换,存储第二个数据sdram,第1个数据从sdram中取出。在这些步骤中,第一个问题是时钟不同,第二个问题是如何保持数据准确性,这通常是一个相互关联的问题。这个问题比较困难。我花了很长时间才改变架构,最终确保了一个架构上数据的可靠性和高效传输。
每个部分都是单独工作,互相给信号,在工作中给信号sdram和ccd和ad在68013之间使用中间层mid模块负责总调度信号。
硬件是两个ccd,总调度信号为10000hz(可调)在中间层mid给出信号,ccd获得信号后,①在ccd_A获取数据后给ad转换器,②在ccd_B获取数据ad,同时,ccd_A转换后的数据发送给sdram,给sdram重复模块的信号①②直到两个ccd所有数据传输完成,即一帧数据获取,中间层mid到设定的采集帧数速率后才能再次给出ccd模块信号
这部分是双向的,输入和读取是异步的
①写入:可输入的条件是sdram数据大小可以写入一帧,如果到了,会给中间层mid信号,让mid无法给ccd信号开始读取。这样就有了万一上位机读取慢一点暂存的功能。
②读取:读取的条件是,只要sdram有数据,68013fifo中间还有空,只要满足就一直读,直到读空。
总调度,负责其他部分的信号沟通。
由于上位机是查询模式,只要68013的fifo只要有数据,68013就会读走fifo有空,并且sdram非空,读取sdram上位机取走68013后的数据fifo相应读取数据的长度会减少