TMS320C645x DSP SRIO寄存器(六)——LSU控制寄存器和拥塞控制

本文是对TI的TMS320C645x DSP SRIO User’s Guide中5.32-5.39节内容的搬运

一、LSU控制寄存器

总共有4个LSU(Load/Store Unit),每个LSU对应有6个控制寄存器。
为什么有四个LSU呢?对于需要响应的事务类型,这允许四个未完成的事务同时等待。

LSU控制寄存器0(LSUn_REG0)

TMS320C645x DSP SRIO寄存器(六)——LSU控制寄存器和拥塞控制
该寄存器用于存放扩展地址的高32位

LSU控制寄存器1(LSUn_REG1)

TMS320C645x DSP SRIO寄存器(六)——LSU控制寄存器和拥塞控制
该寄存器的内容值需要分两种情况考虑:

  1. 当FTYPE字段为2、5或6时,基本上是直接读写事务,此时该寄存器内的值为目的地址的低32位;
  2. 当FTYPE字段为8时,此时为维护事务,寄存器内的值应为目的偏移地址,只有24位,且低两位为0。

LSU控制寄存器2(LSUn_REG2)

TMS320C645x DSP SRIO寄存器(六)——LSU控制寄存器和拥塞控制
DSP端的32位字节地址,这个地址在RapidIO的事务包的包头中是不会体现出来的。

LSU控制寄存器3(LSUn_REG3)

TMS320C645x DSP SRIO寄存器(六)——LSU控制寄存器和拥塞控制

  • 低12位:要读写的字节数;
  • 其他均为保留值,只读且恒为0

LSU控制寄存器4(LSUn_REG4)

TMS320C645x DSP SRIO寄存器(六)——LSU控制寄存器和拥塞控制

  • D31-30:outport_ID,输出端口号;
  • D29-28:priority,优先级;
  • D27-26:xamsb,目的地址的高两位扩展;
  • D25-24:ID_size,8位设备ID(00),16位设备ID(01);
  • D23-8::DESTID,目的设备ID;
  • 第0位:INTERRUPT_REQ,完成传输后不产生中断(0),完成传输后产生中断(1)

LSU控制寄存器5(LSUn_REG5)

TMS320C645x DSP SRIO寄存器(六)——LSU控制寄存器和拥塞控制

  • D31-16:DRBELL_INFO,门铃事务携带的信息;
  • D15-8:HOP_COUNT,维护事务中用于定位交换结构的“跳数”;
  • D7-0:PACKET_TYPE,高四位为FTYPE,低四位为TTYPE。

LSU控制寄存器6(LSUn_REG6)

TMS320C645x DSP SRIO寄存器(六)——LSU控制寄存器和拥塞控制

  • D4-1:COMPLETION_CODE,指示传输完成的状态;
  • 第0位:BSY,不忙(0),可以发起新的事务;忙(1),当前事务正在传输。

二、LSU拥塞控制

FTYPE字段为7的事务包被称为拥塞控制事务包(Congestion Control Packets ,CCPs.)
接收到这类事务包的设备会启动(Xon)或者停止(Xoff)特定目的设备ID和优先级的事务包的发送
有几点需要注意:

  1. 相同的Xoff CCP可能会接收到多个,如果要恢复启动,那么要再接收到相同数目的Xon CCP才能启动;
  2. CCP的发送没有响应包,因此有可能丢失,为了防止因为包丢失而一直阻值某一种事务包的发送,有一个简单的超时机制作保障;

以上是Rapid IO规范中对拥塞控制的要求,在DSP上的实现进行了一定的简化。
TMS320C645x DSP SRIO寄存器(六)——LSU控制寄存器和拥塞控制
数据流没有考虑优先级,而只考虑目的设备ID。上图*16个流控制寄存器,分别对应16种数据流,仅用目的设备ID来区分。流控制不再是靠接收到CCP而动态管理,而是静态地对有可能发生拥塞的几条数据流进行控制。
TMS320C645x DSP SRIO寄存器(六)——LSU控制寄存器和拥塞控制
上图中的FLOW MASK相当于开关的作用。总共有12个寄存器(LSU4个,CPPI发送8个),可以对LSU、CPPI的发送分别进行控制。将MASK置一,就能允许该数据流发送;置零则不允许发送。