发明名称 一种基于FPGA的单中断实时数据传输方法
摘要 本发明涉及一种数据传输方法,特别涉及将多个异步数据源的数据经过基于FPGA的单中断数据传输设备进行缓存,再发送到上位机的一种实时数据传输方法,属于实时信号处理技术领域。该方法首先根据不丢失数据下数据传输条件不等式选择合适的中断周期,然后在FPGA内部创建数据缓冲区,并且创建各数据缓冲区的写状态寄存器,接着根据缓冲区发出的半满和全满信号来产生一个周期性中断信号,上位机通过响应这个周期信号来触发中断服务程序从而完成实时连续传输目的。本发明方法相比多中断源触发方式,降低了软硬件编程调试的复杂度并且提高了系统的可靠性,由于每次中断产生的数据量大小相对稳定,故数据更便于集中进行批量传输和后处理。
申请公布号 CN102004711A 申请公布日期 2011.04.06
申请号 CN201010547869.X 申请日期 2010.11.17
申请人 北京理工大学 发明人 安建平;周荣花;孙磊;杨淼
分类号 G06F13/38(2006.01)I 主分类号 G06F13/38(2006.01)I
代理机构 代理人
主权项 一种基于FPGA的单中断实时数据传输方法,其特征在于包括以下具体步骤:步骤一:选择合适的中断周期根据各异步数据源1,2,…,n的写数据速率Wk和上位机的读数据速率R,利用不丢失数据下实时连续数据传输条件不等式W1+W2+...+Wn<R,首先确认系统实现的可行性,在系统可实现的前提下,再依据FPGA硬件资源的大小及其他限制条件,选择合适的中断周期T1,因为各数据缓冲区的总字节数至少为(W1+W2+...+Wn)×T1×2;步骤二:创建数据缓冲区根据各异步数据源1,2,…,n的写数据速率Wk和中断周期T1,确定各个异步数据源的缓冲区存储量大小为Wk×T1×2,为这n个异步数据源建立n个数据缓冲区,并确定其中的某一个数据缓冲区为乒乓缓冲区,不妨假设选B1为乒乓缓冲区,其缓冲区分成上下半区B1L和B1H,具有半满和全满指示信号,而其它数据缓冲区则为普通数据缓冲区即可;步骤三:创建各数据缓冲区的写状态指针寄存器创建各数据缓冲区的写状态指针寄存器时,其中的乒乓缓冲区B1的写状态指针值为当前写操作地址最高位的值,其值可能为0或1,而其他数据缓冲区的写状态指针为当前写操作地址值;步骤四:产生周期性中断信号依据乒乓缓冲区B1的写操作产生的缓冲区半满和全满信号产生与上位机相对应的周期性中断信号,该中断信号发送至上位机即可触发中断服务子程序,从而完成读取FPGA中各数据缓冲区数据操作;步骤五:建立上位机和FPGA中各数据缓冲区(B1,B2,…,Bn)之间的总线接口;将上位机的读操作指令中包含的读时钟C、读操作地址A及读使能等信号转换为各数据缓冲区的读时钟C、读使能(E1,E2,…,En)和读地址(A1R,A2R,…,AnR)信号及各缓冲区的写状态指针寄存器的读地址信号AR等,以读取上述存储空间中的数据;步骤六:创建上位机中断服务子程序上位机中断服务子程序工作过程如下:上位机中断服务子程序接收到硬件中断信号后,先做是否要初始化的判断:如果系统是刚上电复位或其他形式重置之后,则将FPGA各缓冲区写地址和上位机的历史写指针寄存器值初始化为其相应的起始地址,否则跳过该初始化步骤,然后读取各数据缓冲区的当前写状态指针寄存器值,而上位机程序中保存有上一次中断时存储的各数据缓冲区的写状态指针寄存器值,不妨称为历史写状态指针寄存器值,中断服务子程序然后利用当前写状态指针和上位机保存的历史写状态指针的一个临时备份来完成读取FPGA中各数据缓冲区相应地址段的数据,并在历史写状态指针寄存器值备份之后和上位机读操作之前,把历史写状态指针寄存器值更新为当前写状态指针寄存器值,以保证下次中断时能够正确读取各缓冲区相应地址段的数据,上位机中断服务子程序执行读操作完毕后结束,进入等待下次中断状态;步骤七:上位机在周期性中断信号的触发下循环调用步骤六中所述中断服务子程序,即可达到实时连续数据传输目的。
地址 100081 北京市海淀区中关村南大街5号