找回密码
 注册
关于网站域名变更的通知
查看: 457|回复: 3
打印 上一主题 下一主题

DSP6678核间通信

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-11-15 14:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
核间通信一般有3种方式:共享数据空间、硬件中断和任务中断。
8 F8 t: Z: P" X. f( Y8 `4 U' o共享数据空间:0 _- c" I' U) a( I- W  l
是指两个核都可以访问相同的内存空间,根据其信息来交换数据和状态。该方式一般需要逐个核去查询,但采用查询方法一般很难适用于实时性要求较高的场合。6 s3 \5 x% A2 r! w$ P+ u
硬件中断方式:/ P. h  f4 v0 C, H0 {
是核之间通过硬件中断方式来通知状态,这种方式实时性最高,可以实时响应中断。但引起的问题是:如果存在多个任务,核间中断会打断正在运行的较高优先级的事件;如果在高级事件中屏蔽中断,在多次中断中只会响应最后一次中断,导致前面的中断丢失。为了解决这两个问题,多核处理器一般采用任务中断方式来实现核间信息交互。9 A  i, n4 H4 O  V( b
任务中断方式:2 Q2 G$ w# a  r# ~7 l/ |3 E
在单核的软件中,任务是实时运行的进程,由信号量来触发。一个任务完成后退出,信号量会减1,直到该任务对应的信号量为0;触发一个任务,就会给该任务的信号量加1。在多核处理器中,将信号量做成硬件信号量(Hardware Semaphore)来实现核间通信,硬件信号量具有硬件中断的实时性,又具有任务的排队机制,可以较好地解决核间通信问题。" g% f! S3 t1 {1 h6 B
本文以8核DSP芯片TMS320C6678为例介绍了硬件信号量的应用。文中详细介绍了硬件信号量模块的结构和寄存器组合,以及实现核间中断的原理,最后以实例介绍两个核之间利用硬件信号量交互信息的方法和流程。
% C/ b3 ~( b$ b* i. M' N: b$ N1 多核DSP及其结构
* M; b+ y/ X! _: C7 E- x+ YTMS320C6678(C6678)是TI公司多核处理器中的一款8核浮点型DSP,最高工作频率达到1.25 GHz,单核可以提供40 GMAC定点计算或者20 GFLOPS浮点计算能力,单个芯片可以提供320 GMAC或者160 GFLOPS计算能力。C6678的片内结构如图1所示。' i2 ?/ o! K( a' ?; D

' L9 q* S) E/ d1 v0 A6 N
图1 TMS320C6678内部结构图$ A& m- U8 ~! z( x8 n- o
C6678的每个核具有32 KB的程序、32 KB的数据以及512 KB的二级Cache存储空间,芯片片内具有一个4 MB的共享SRAM。C6678具有DDR3控制器接口,可以外接DDR3,直接寻址范围达到8 GB。C6678的片内设有RapidIO、PCIe、EMIF以及I2C/SPI等接口,这些接口通过片内的TeraNet总线和各个处理器交互数据。 从图1中可以看出,核访问共享RAM的速度最快,它们之间不通过TeraNet,而是有专用的数据总线,也不会和其他外设产生冲突,每个核访问共享RAM的速率大概在50 Gb/s。: b+ o% M0 N! k% u1 S# i2 j+ v& U
每个核访问DDR3的速度仅次于访问共享RAM,因为DDR3的数据需要通过共享RAM过渡,其访问速度读写有所差别,读速率可以到10 Gb/s,写速率可以到20 Gb/s。核访问其他片内和片外设备都要经过TeraNet,可能存在总线仲裁,但这些外设一般不会长时间占据TeraNet总线。各个核通过TeraNet访问硬件信号量,也可以通过TeraNet和HyperLink接口实现两个芯片之间的硬件信号量访问。
  R0 x" L0 c& D5 w( i$ D! E! A2 硬件信号量模块
& [% E3 |4 T4 ^/ G0 M- N9 ?硬件信号量模块的组成如图2所示,主要由信号量模块、寄存器组和中断模块3部分组成。
6 q0 O8 J5 z5 @" ]/ Z4 C2 f
! _5 c+ O7 L: E# Z
图2 硬件信号量模块
- s  |3 T' d6 l  \* E3 J硬件信号量模块由64个独立的信号量组成,这64个信号量和硬件资源以及核之间没有必然联系,由软件根据每个核处理任务的多少分配,任务多的核获得更多的信号量。对信号量的访问有3种方式:直接访问(图中的SEM_Dir)、间接访问(SEM_inDir)和查询方式(SEM_Query)。这3种方式软件上访问的方法都一样,就是对相应的寄存器进行读写操作,但不同访问方式的硬件响应机制不同。5 {" P, n, b8 A' p0 }
直接访问方式下,如果该信号量空闲,访问的核将马上捕获该信号量;如果该信号量被其他核占用,将返回,整个访问工作结束。" S* y& _# I1 a- _" E. J
间接访问方式和直接访问的唯一差别就是当该信号量被占用时,访问的事件被发布到队列中排队,一旦信号量被其他核释放,队列采用先进先出的方式给相应的核发出中断,相应的核占用该信号量。
4 R1 m, c& i8 F; c查询方式是利用寄存器查询信号量的状态。这3种访问方式的状态如表1所列。: V' C. G8 w0 D$ n% h* Y5 P
表1 三种硬件信号量访问的状态! d' o2 A' ?8 S' Z; C6 U* B

& w" M" |$ s5 ~1 T2 {! P9 }硬件信号量有两个中断,其中一个为正常的捕获中断,该中断由读写寄存器启动,由信号量被释放触发,反映到EOI(End Of Interrupt)寄存器,该寄存器发送中断到相应的CPU,CPU根据中断标志寄存器中(高32个信号量反映到FLAGH_0,低32个信号量反映到FLAGL_0)的标志位识别是来自哪个信号量的中断。CPU完成中断服务程序,退出中断时要通过FLAG_C寄存器来清除标志位,为下一次中断作准备;CPU也可以通过FLAG_S寄存器人为设置一个中断标志,产生一个中断。
+ E( k( b" g+ q( j4 E1 Y8 \% }' n硬件信号量的另外一个中断为错误中断,当出现错误访问时会产生该中断,中断响应及操作方法与捕获中断类似。产生错误的情况有:去释放某个空闲信号量;去释放其他核占用的信号量;捕获一个自身占用的信号量;多次去捕获一个被占用的信号量。0 b% O% q7 I& n
3 软件设计
- B. o+ \$ d3 h! ]- u硬件信号量的软件设计主要包括初始化、中断响应和中断服务程序。由于硬件信号量是用于核间通信,使得调试工作需要在多个核之间切换,查阅各自寄存器。/ }% t1 a" ?7 \/ U% M
因为是核间通信,采用单核常用的断点和单步这些调试方法将非常困难,需要软件设计者非常清晰地了解多个核的程序运行情况。" y2 ]# u1 b+ d* s3 V2 }3 L
下面是核0和核1之间通过硬件信号量10来实现通信的例子。软件流程如图3所示。

3 y: L/ V7 ]" O2 E0 w/ l: c
图3 软件流程
+ @, _/ k6 @$ b# {; b6 _. H4 t首先各个核进行各自寄存器的初始化,主要包括硬件信号量寄存器和中断寄存器的初始化。需要注意的是,由于每个核都进行初始化,而且每个核都可以访问这些寄存器,所以不能出现配置的紊乱,也不能出现多个核同时对某个寄存器配置的情况,这样可能会写入错误数据(即使在写入同样数据情况下)。, m/ V3 t+ ?8 ^1 I  j9 r, |
为了避免核1首先抢占信号量10,程序中核0先锁定核1,然后确保自己可以捕获到信号量10,捕获后释放核1,此时核1可以请求硬件信号量10。: f$ D! ]) a- W4 }
但此时,信号量10被核0占用,核1无法得到请求,核1的请求被放到请求队列中,核1的请求任务结束,可以进行其他任务。一旦核0释放了信号量10,核1会收到一个硬件中断,因为中断优先级高于任务,核1将响应该中断,进入中断服务程序,完成中断服务程序后会继续执行被打断的任务。3 |* f+ W+ N! \' R! V+ X7 \
硬件信号量的中断服务程序一般用于共享RAM的读写,因为共享RAM只有一组数据总线,无法实现多个核同时读写。如果多个核同时读写该空间,会出现等待现象,使得处理器的使用效率降低。# K& ]- h# T) Z5 t* O
如果时序处理不好,会出现总线互锁现象,使得程序无法进行。采用硬件信号量后,可以按照优先排队方法进行队列管理,而且由于一个核不可能多次申请一个硬件信号量,所以在软件上很容易管理。如果软件功能较多、设计复杂,可以通过增加硬件信号量来区分,最多可以增加64个硬件信号量,基本能够满足当前处理器的要求。
' \( h5 L" _& }  k$ F结语
+ K. e! E5 M1 e0 ^' ?5 m硬件信号量是多核处理器中一种新模块,它将单核的信号量硬件化,实现快速实时的操作,并和硬件中断联系在一起,实现了多核之间的握手协议。硬件信号量具有相应的队列排队机制,既不会出现中断丢失问题,也不会出现多次访问问题。硬件信号量解决了常规硬件中断中多次中断不响应会丢失的问题,实现了软件和硬件的相结合,在多核软件编程中,是比较好的一种核间通信机制。9 A0 z4 `, p, k1 x5 Q

( T! ]- W  ?2 l; n$ q: w$ o6 E" q7 X6 z3 ]5 V4 d

该用户从未签到

2#
发表于 2021-11-15 14:29 | 只看该作者
在单核的软件中,任务是实时运行的进程,由信号量来触发

该用户从未签到

3#
发表于 2021-11-15 14:29 | 只看该作者
共享数据空间是指两个核都可以访问相同的内存空间,根据其信息来交换数据和状态
  • TA的每日心情

    2019-11-19 15:55
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2021-11-15 14:31 | 只看该作者
       C6678具有DDR3控制器接口,可以外接DDR3,直接寻址范围达到8 GB
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-9-11 07:58 , Processed in 0.140625 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表