首先,为每个存储体设置3个“信号灯”寄存器,分别对应除本通道之外的其他3个DSP核,作为同步/互斥操作的硬件锁。“信号灯”寄存器映射了全局共享的物理地址,通过公共配置总线与四个DSP核相连。每个“信号灯”具有“点亮”和“熄灭”两种状态,分别表示存储体内的共享数据“已写入”和“已读出”。DSP核通过同步指令改写“信号灯”寄存器的状态,实现核间的同步操作。具体的数据一致性协议为:

当“生产者”DSP-i向某个存储体写入共享数据后,将其“信号灯”置为“点亮”状态。若这批共享数据有2~3个“消费者”,则点亮相应的2~3个“信号灯”。在某个“信号灯”处于“熄灭”状态时,相应的DSP核对该存储体的读请求全部进入读队列等待。

当“消费者”DSP-j读出某个存储体的共享数据后,将该存储体与自己对应的“信号灯”置为“熄灭”状态。当某个存储体的所有3个“信号灯”都“熄灭”时,该存储体被释放,处于可写状态;否则,DSP核对该存储体的写请求全部进入写队列等待。

“点亮”和“熄灭”信号灯的顺序一致性由DSP核对公共配置总线的独占性访问来保证。

需要说明的是,DSP核不一定要将其对应的存储体写满才能点亮“信号灯”,一次同步操作所传输的数据量最小可以是一个字节,最大不超过单个存储体的容量。

由于FSDP的访存通路与同步操作通路(即配置总线)是相互分离的,因此可能出现同步操作指令通过配置总线先于访存指令提前执行的错误情况。本文通过软件延迟槽的方式解决这一问题:由编译器通过指令调度技术,在最后一条共享数据的读指令和“熄灯”指令之间插入1~2条无关指令或空操作(NOP),作为等待共享数据返回的延迟槽,确保最后一个读请求被处理之后再执行“熄灯”操作。具体所需的软件延迟槽数量取决于DSP流水线的设计。对于本文而言,如果DSP核在发出Load指令的第3拍没有接收到返回的数据,则暂停指令派发,因此只需要2个延迟槽。图4给出了两个DSP核i和j传递共享数据的实例。

(a)延迟槽与同步操作的程序实例

(b)存储体的内容变化与信号灯状态

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查