System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于数字信息传输,尤其涉及一种cpu与fpga间循环缓冲通信方法及系统。
技术介绍
1、现有cpu与fpga间数据通信多采用local bus、pcie、rapidio及axi等总线接口,各总线数据传输时都需要对cpu端进行地址映射,即cpu端需提供一段存储区用于fpga的读写访问,该存储区多为cpu端的一段ddr空间;由于与fpga间进行数据收发时采用ddr进行,驱动无统一的设备封装,软件访问直接面对ddr的地址,缺乏便捷性;
2、其次,收发数据采用ddr进行,cpu端难以分辨数据收发结束标识,需单独对内存进行标识,收发双方数据同步困难;另外,涉及对ddr同一地址的读写访问时,数据需要进行互斥访问的特殊处理;
3、最后,当fpga端数据传输瞬时带宽增大,或cpu端偶发负载增大时,对同一ddr区域的数据可能造成覆盖,导致丢包与错包现象出现;
4、现有技术存在cpu与fpga间直接ddr访问中存在直接访问风险大且直观性差、数据同步性较差、数据互斥及数据覆盖的问题。
技术实现思路
1、本专利技术提供一种cpu与fpga间循环缓冲通信方法及系统,以解决上述
技术介绍
中存在的cpu与fpga间直接ddr访问中存在直接访问风险大且直观性差、数据同步性较差、数据互斥及数据覆盖的问题;
2、本专利技术所解决的技术问题采用以下技术方案来实现:
3、第一方面,本专利技术提供一种cpu与fpga间循环缓冲通信方法,包括:
5、基于发送循环缓冲队列,通过发起入队操作,将发送数据从cpu端写入fpga端;
6、cpu端读取fpga端:
7、基于接收循环缓冲队列,通过发起出队操作,并由接收中断事件触发数据接收线程,将接收数据从fpga端读取cpu端。
8、进一步地,所述发起入队操作包括:
9、判断发送队列状态:判断发送循环缓冲队列是否为满,若已满,则标志发送循环缓冲队列满后通知fpga端,否则,将发送数据写入相应的发送缓冲地址;
10、更新发送队列状态:更新写指针和写计数;
11、写入发送完成状态:标志发送完成状态后通知fpga端。
12、进一步地,所述判断发送队列状态还包括:
13、基于写指针和读指针,通过发送队列状态判断函数,确定发送循环缓冲队列是否为满;
14、所述队列状态判断函数:
15、;
16、所述为写指针;
17、所述为读指针;
18、所述n1为循环缓冲队列长度。
19、进一步地,所述判断发送队列状态还包括:
20、基于缓冲区基地址和当前写指针,通过写入地址计算函数,确定相应的内存地址并写入发送数据;
21、所述写入地址计算函数:
22、;
23、所述为发送缓冲区基地址;
24、所述为单位发送缓冲区长度;
25、所述为预写入相应的内存地址;
26、所述wptr为写指针;
27、所述n1为循环缓冲队列长度;
28、所述更新发送队列状态还包括:
29、基于当前写指针值,通过写指针更新函数,更新当前写指针;
30、所述写指针更新函数:
31、;
32、基于当前写计数值,通过写计数更新函数,更新当前写计数;
33、所述写计数更新函数:
34、;
35、所述为当前写计数。
36、进一步地,所述发起出队操作包括:
37、中断发起处理:若fpga端写入完成的中断事件发起,则清除中断标志,并向接收数据线程释放信号量,并结束中断服务;
38、判断接收队列状态:若获取到接收数据线程释放信号量,则读取读指针和读计数,判断接收循环缓冲队列是否为空,若为空,则标志接收循环缓冲队列空后通知fpga端,否则,从相应的接收缓冲地址读取接收数据;
39、更新接收队列状态:更新读指针和读计数;
40、读取接收完成状态:标志接收完成状态后通知fpga端。
41、进一步地,所述判断接收队列状态还包括:
42、基于写指针和读指针,通过接收队列状态判断函数,确定接收循环缓冲队列是否为空;
43、所述接收队列状态判断函数:
44、;
45、所述wptr为写指针;
46、所述rdptr为读指针;
47、进一步地,所述判断接收队列状态还包括:
48、基于缓冲区基地址和当前读指针,通过读取地址计算函数,确定相应的内存地址并读取接收数据;
49、所述读取地址计算函数:
50、;
51、所述为接收缓冲区基地址;
52、所述为单位接收缓冲区长度;
53、所述为预读取相应的内存地址。
54、所述n2为接收循环缓冲队列长度;
55、所述rdptr为读指针;
56、所述更新接收队列状态还包括:
57、基于当前读指针值,通过读指针更新函数,更新当前读指针;
58、所述读指针更新函数:
59、;
60、基于当前读计数值,通过读计数更新函数,更新当前读计数;
61、所述读计数更新函数:
62、;
63、所述rdcount为当前读计数;
64、进一步地,所述中断发起处理前还包括判断缓冲区满;
65、所述判断缓冲区满包括判断是否发起异常中断,若发起异常中断,则跳转到中断异常处理,在中断异常处理中,读取异常状态信息,判断接收循环缓冲队列是否已满,若队列已满,则标志和通知接收满异常,并通过初始化函数清空接收循环缓冲队列。
66、所述初始化函数:
67、;
68、所述wptr为写指针;
69、所述rdptr为读指针;
70、所述rdcount为当前读计数。
71、进一步地,所述更新接收队列状态后还包括判断中断丢失;
72、所述判断中断丢失包括通过数据包缓存判定标准判断接收循环缓冲队列是否存在数据包缓存,若存在数据包缓存,则主动向接收数据线程释放信号量,并发起下一次发起出队操作。
73、所述数据包缓存判定标准还包括:
74、若()且(),则当前接收队列存在数据包缓存;
75、所述wptr为写指针;
76、所述rdptr为读指针;
77、所述wcount为当前写计数;
78、所述rdcount为当前读计数。
79、第二方面,基于同一专利技术构思,本专利技术还提供一种cpu与fpga间循环缓冲通信系统,包括:所述通信系统实现第一方面所述的本文档来自技高网...
【技术保护点】
1.一种CPU与FPGA间循环缓冲通信方法,其特征在于,包括:
2.根据权利要求1所述循环缓冲通信方法,其特征在于,所述发起入队操作包括:
3.根据权利要求2所述循环缓冲通信方法,其特征在于,所述判断发送队列状态还包括:
4.根据权利要求2所述循环缓冲通信方法,其特征在于,所述判断发送队列状态还包括:
5.根据权利要求1所述循环缓冲通信方法,其特征在于,所述发起出队操作包括:
6.根据权利要求5所述循环缓冲通信方法,其特征在于,所述判断接收队列状态还包括:
7.根据权利要求5所述循环缓冲通信方法,其特征在于,所述判断接收队列状态还包括:
8.根据权利要求5所述循环缓冲通信方法,其特征在于,所述中断发起处理前还包括判断缓冲区满;
9.根据权利要求5所述循环缓冲通信方法,其特征在于,所述更新接收队列状态后还包括判断中断丢失;
10.一种CPU与FPGA间循环缓冲通信系统,其特征在于,所述通信系统实现如权利要求1~9中任一项所述的循环缓冲通信方法,所述通信系统包括写入模块和读出模
...【技术特征摘要】
1.一种cpu与fpga间循环缓冲通信方法,其特征在于,包括:
2.根据权利要求1所述循环缓冲通信方法,其特征在于,所述发起入队操作包括:
3.根据权利要求2所述循环缓冲通信方法,其特征在于,所述判断发送队列状态还包括:
4.根据权利要求2所述循环缓冲通信方法,其特征在于,所述判断发送队列状态还包括:
5.根据权利要求1所述循环缓冲通信方法,其特征在于,所述发起出队操作包括:
6.根据权利要求5所述循环缓冲通信方法,其特征在于,所述判断...
【专利技术属性】
技术研发人员:张明,王雪波,乔广欣,
申请(专利权)人:天津七一二通信广播股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。