一种多核DSP处理芯片核间通信系统及其方法与流程

文档序号:17288219发布日期:2019-04-03 03:44阅读:895来源:国知局
一种多核DSP处理芯片核间通信系统及其方法与流程

本发明涉及多核dsp处理芯片及嵌入式实时操作技术领域,尤其涉及一种多核dsp处理芯片核间通信系统及其方法。



背景技术:

随着互联网和计算机技术的飞速发展,对中央处理器的性能要求越来越高,体积要求越来越小。以前主要是通过提高处理能力,或增加硬件来提升性能,但随之而来的晶体管的数量也越来越多,体积也会越来越大,这显然不符合实际发展的需求。所以,另外一种提高性能的方式就是使用多核处理器。

在嵌入式开发领域,多核dsp处理器的使用越来越多。顾名思义,多核dsp处理器就是在一个dsp处理芯片上集成两个及以上的处理单元,每个处理单元独立的成为一个核。多核dsp处理器中的每个核可以单独处理独立的任务,而每个核之间也时常需要传递数据信息,这就涉及到核间通信的相关流程。



技术实现要素:

本发明的目的就在于提供一种多核dsp处理芯片核间通信系统及其方法。

本发明的目的是这样实现的:

通过核间转发,打包发送数据,实现核间通信;核间消息传递可以指定一个最大发送长度,然后分条消息逐级进行打包,写入在共享内存区规划好的地址区域,调用ipc中断,统一发送的方式进行;特别是在多核(2个及以上)处理时,该方法能大大简化核间通信的处理流程。

多核处理器中只有主核与上层应用程序进行通信,核与核之间通信时,核间消息采用打包组合,逐级通信的机制;当源核需要发送消息时,将需要发送给目标核的消息放在共享消息区内,然后源核通过中断告知目标核需要传递的任务,在目标核读取中断寄存器中的任务时,即可知道源核标识,从而从对应的共享内存区域中提取消息内容,用于目标核本核的通信处理流程;本发明针对多核处理器中的每一个核,相当于虚拟出两个收发端口,每一个收发端口都可独立的进行操作,且针对每一个收发行为具有统一的操作,遵循全双工模式,在利用多核dsp芯片处理器进行核间消息通信的相关设计时,会大大简化设计和编程的复杂度,具有实用性强,通用性高的特点。

一、多核dsp处理芯片核间通信系统(简称系统)

本系统包括上层应用程序模块,设置有多核处理器模块;

上层应用程序模块和多核处理器模块交互。

所述的多核处理器模块包括第1、2、3、4核;

在第1、2核之间设置有第1核到第2核的共享内存区和第2核到第1核的共享内存区;

在第2、3核之间设置有第2核到第3核的共享内存区和第3核到第2核的共享内存区;

在第3、4核之间设置有第3核到第4核的共享内存区和第4核到第3核的共享内存区;

上列核与核之间通过共享内存区进行消息交互,并遵循全双工和逐级通信原则。

二、多核dsp处理芯片核间通信方法(简称方法)

①在共享内存区域中,细划分出源核与目标核之间共享内存区的地址,长度,且方向唯一;

②在内存中,为每一个核虚拟出两个收发端口,port0与port1,两个端口的数据缓存区域分别msg_buf_port0,msg_buf_port1;

③在源核需要发送消息时,

a、如果是port0发送消息,先检测msg_buf_port0中是否存在需要发送的消息,如果有,则逐一提取并进行打包;然后将需要发送的消息写入指定的共享内存区,同时递减消息队列中数目;

b、如果是port1发送消息,先检测msg_buf_port1中是否存在需要发送的消息,如果有,则逐一提取并进行打包;然后将需要发送的消息写入指定的共享内存区,同时递减消息队列中数目;

④源核将需要传递的目标核标识,以及任务标识,通过ipc中断传递给目标核;

⑤目标核监控到属于自己的任务标识时,则去规划的共享内存区域中读取消息;

⑥目标核接收消息时,

a、如果是port0接收消息,先从对应源核发送的共享内存区域中获取消息,然后进行消息解析,解析完毕后将消息存放在msg_buf_port1消息缓存中,同时递增消息队列中数目;

b、如果是port1接收消息,先从对应源核发送的共享内存区域中获取消息,然后进行消息解析,解析完毕后将消息存放在msg_buf_port0消息缓存中,同时递增消息队列中数目。

本发明具有下列优点和积极效果:

①多核dsp处理器中的核间通信消息可多条一起,采用打包形式发送;

②多核处理中的每一个核只与前核和后一个核进行核间通信,采用逐级转发的形式,能较大简化设计和编程难度,通用性强;

③每一个核虚拟出了两个收发端口,采用消息队列的方式处理,实用性高。

④共享内存区被规划出多个子共享内存区,只供源核与目标核使用,且具有方向性,这样可遵循全双工的通信模式,效率高。

附图说明

图1是本系统的结构方框图(以4核进行释意说明);

图中:

0—上层应用程序模块0

1—多核处理器

10—第1核(主核),

101—第1核port0收发缓存区,

102—第1核ipc中断模块,

103—第1核内程序运行模块,

104—第1核port1收发缓存区;

20—第2核,

201—第2核port0收发缓存区,

202—第2核ipc中断模块,

203—第2核内程序运行模块,

204—第2核port1收发缓存区;

30—第3核,

301—第3核port0收发缓存区,

302—第3核ipc中断模块,

303—第3核内程序运行模块,

304—第3核port1收发缓存区;

40—第4核,

401—第4核port0收发缓存区,

402—第4核ipc中断模块,

403—第4核内程序运行模块,

404—第4核port1收发缓存区。

12—第1核到第2核的共享内存区;

21—第2核到第1核的共享内存区;

23—第2核到第3核的共享内存区;

32—第3核到第2核的共享内存区;

34—第3核到第4核的共享内存区;

43—第4核到第3核的共享内存区。

图2是某一个核进行核间消息发送时的流程图;

图3是某一个核进行核间消息接收时的流程图。

具体实施方式

下面结合附图和实施例详细说明:

一、系统(多核处理器一般为双核、4核或8核,本系统以4核为例进行说明)

1、总体

如图1,本系统包括上层应用程序模块0,设置有多核处理器模块1;

上层应用程序模块0和多核处理器模块1交互。

所述的多核处理器模块1包括第1、2、3、4核10、20、30、40;

在第1、2核10、20之间设置有第1核到第2核的共享内存区12和第2核到第1核的共享内存区21;

在第2、3核20、30之间设置有第2核到第3核的共享内存区23和第3核到第2核的共享内存区32;

在第3、4核30、40之间设置有第3核到第4核的共享内存区34和第4核到第3核的共享内存区43;

上列核与核之间通过共享内存区进行消息交互,并遵循全双工和逐级通信原则。

2、功能块

第1、2、3、4核10、20、30、40的结构相同。

1)第1核10

第1核10包括第1核port0收发缓存区101、第1核ipc中断模块102、第1核内程序运行模块103和第1核port1收发缓存区104;

2)第2核20

第2核20包括第2核port0收发缓存区201、第2核ipc中断模块202、第2核内程序运行模块203和第1核port1收发缓存区204;

3)第3核30

第3核30包括第3核port0收发缓存区301、第3核ipc中断模块302、第3核内程序运行模块303和第3核port1收发缓存区304;

4)第4核40

第4核40包括第4核port0收发缓存区401、第4核ipc中断模块402、第4核内程序运行模块403和第4核port1收发缓存区404。

3、工作机理:

多核处理中的某一个核虚拟出两个收发端口,一个是port0前向收发端口,负责与前一个核进行消息的收发,另外一个是port1后向收发端口,负责与后一个核进行消息的收发。

具体为第1核10的前向收发端口port0的收发缓存区101,与上层应用子程序0进行收发操作;第1核的port0收发缓存区101中的数据,在经过第1核内程序运行模块103处理后,将其分条放置在第1核port1收发缓存区104中,并记录消息缓存区中的数目。

①如果第1核10需要向第2核20发送消息,则会先检查第1核port1收发缓存区104消息队列中是否有消息可发送,如果有,则逐一提取并进行打包,然后将需要发送的消息写入第1核10到第2核20共享内存区12,同时递减消息队列中数目,且会通过ipc中断告知第2核20。

②如果第1核10接受第2核20的消息,第1核10会不断监控第1核ipc中断模块102,当检测到有属于自己的任务标识时,首先读取任务标识号,识别出第2核20,然后在第2核到第1核共享内存区21中获取核间消息,放置在第1核10的第1核port1收发缓存区104中,同时递增port1消息队列中的数目;

同样地,当核第2核20、第3核30、第1核40的port0或者是port1进行消息的收发时,都遵循同样的收发规则。

特别说明,当源核是主核时,其port0端口只负责与上层应用程序0进行通信;当目标核是最后一个核时,即第4核40,其port1不进行核间消息的收发操作。

二、方法

1、某一个核进行核间消息发送时的流程

如图2,某一个核进行核间消息发送时的流程如下:

a、在共享内存区域内,细划分出源核与目标核之间共享内存区的地址、长度,且方向唯一;其次需要根据设置核与核之间传递的任务标识,且源核与目标核具有方向性-s100;

b、源核需要发送消息-s102;

c、判断是port0端口发送还是port1端口发送-s105,

分为两路,第1路为:

a1、如果是port0发送,则判断源核是否为主核-s104,是则发送给上层应用程序-s101,否则进入步骤b1;

b1、判断源核的msg_buf_port0中是否有消息,即cnt0是否>0-s107,是则进入步骤c1,否则为无消息发送-s108;

c1、提取msg_buf_port0中的消息,打包填充到规划的共享消息内存区,并cnt0-1-s110;

d1、判断规划内存区域中所填消息是否达到最大发送长度-s112,是则进入步骤d,否则继续步骤c1;

第2路为:

a2、如果是port1发送,则判断源核是否为最后一个核-s106,是则不做处理-s103,否则进入步骤b2;

b2、判断源核的msg_buf_port1中是否有消息,即cnt1是否>0-s109,是则进入步骤c2,否则为无消息发送-s108;

c2、提取msg_buf_port1中的消息,打包填充到规划的共享消息内存区,并cnt1-1-s111;

d2、判断规划内存区域中所填消息是否达到最大发送长度-s113,是则进入步骤d,否则继续步骤c2;

d、通过ipc中断告知目标核任务标识-s114。

2、某一个核进行核间消息接收时的流程

如图3,某一个核进行核间消息接收时的流程如下

a、目标通过识别ipc中断,发现有属于自己的任务消息-s200;

b、识别源核的id号,目标核接收消息-s201;

c、判断是port0接收消息,还是port1接收消息-s202,

分为两路,第1路为:

a1、如果是port0接收,判断目标核是否为主核-s203,是则接收上层应用程序的消息-s204,再跳转到步骤c1,否则进入步骤b1;

b1、从源核指向目标核的共享内存区域中,提取消息-s205;

c1、进行消息的解码,将解码正确的消息流放置在虚拟的发送端口msg_buf_port1的缓存区中,并msg_cnt1+1;

第2路为:

a2、如果是port1接收,判断目标核是否为最后一个核-s207,是则不做处理-s208,否则进入步骤b2;

b2、从源核指向目标核的共享内存区域中,提取消息-s209;

c2、进行消息的解码,将解码正确的消息流放置在虚拟的发送端口msg_buf_port0的缓存区中,并msg_cnt0+1。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1