TI中文支持网
TI专业的中文技术问题搜集分享网站

关于c6678 srio收发地址位数

Hi,Ti guys,

我在使用自己板上的c6678,利用论坛上keystone_srio程序调试dsp和fpga端的通信。同事从fpga(v6,srio核)看来收发地址都是34卫的,但我调DSP互联的时候用的是默认32位地址。我想请问一下,如果要利用srio收发34位地址,DSP端keystone_srio的程序要做什么改进?我看了keystone_srio初始化代码,它的PE_LL_CTL寄存器已经配置成了支持34为地址,但是我要收发时应该怎么做?以directio发包为例,是吧32低位填在LSU_Reg1中(32位地址的话就只填了这一个地址寄存器),然后把高位2位写在LSU_Reg0的RapidIO Address MSB中吗?收端又如何解析34位地址呢?谢谢!

xin jin2:

两家协议之间好像有差异

King Wang1:

这个不冲突的,LSU只是TI的DSP在Rapid IO协议上封装的东西,实际上在逻辑层还是按照协议来发送,收端也是按照协议上规定的结构来收。

你配置LSU的时候,SRIO在发包的过程中会根据协议上规定的包类型配置固定的报文格式,这些固定的格式信息就是从你的LSU配置中获取的。比如地址信息,SRIO的packet type2的结构中有1个extend address,可以是0,16,和32,这个就对应你的LSU_Reg0。当DSP的SRIO填好这个按照协议固定的结构后,就发送给FPGA。

FPGA收到的都是按照SRIO规定好的协议结构的报文,因此它需要解析这个物理层的报文;同样它也会解析得到extend address,但是它是如何使用这些结构的,那么就和FPGA特性的IP有关系了,所以你需要了解到这方面的东西。

David Yang:

回复 King Wang1:

您好:

谢谢您的解答!您的意思就是说,比如我给FPGA发swrite包,在包格式上地址位是29位,在DSP端配置LSU的时候是将本地原地址(32bit)填在LSU_REG1上作为输入参数,但实际上这是封装以后的结果,发出去的包上面还是填的29位地址。同理FPGA封装看上去是34位地址,但发出去的包上是29位地址位,到DSP后TI的SRIO封装自动解析为内部memory需要的32为地址。过程是这样的吗?另外比如您说的packet type =2 的包格式,在哪里能查到?TI的SPRUGW1A文档上只有swrite的包格式。

 谢谢!

King Wang1:

回复 David Yang:

SWRITE是packet 6, 你可以在SRIO的文档中看到LSU中的Ftype,是这样的

ftype field for all packets2 -> NREAD, Atomic instruction (TType for more details)5 -> NWRITE, NWRITE_R, Atomic (TType for more details)6 -> SWRITE8 -> Maintenance10 -> DoorbellAll other encodings

至于更加具体的结构信息需要参考Lp-serial的协议。

David Yang:

回复 King Wang1:

谢谢您的解答~另外,我想问,发Swrite给fpga的时候,即使fpga端看上去需要34位地址,DSP端LSU_Reg0还是不用填,做法和DSP往DSP发一样~是吗?

David Yang:

回复 Zhan Xiang:

那LSU_REG0 rapidIO address msb这个域是干嘛的?在srio的文档上看来是填额外地址的啊?

谢谢!!

Zhan Xiang:

回复 David Yang:

SRIO标准是支持34bit 或 66bit地址,当支持66bit是才需要填MSB。

David Yang:

回复 Zhan Xiang:

也就是说,如果我要发34Bit的包,PE_LL_CTL配成支持34bit模式,然后把高两位地址写在LSU_Reg4寄存器的Xambs就可以了;用66bit时候才需呀使用LSU_REG0 rapidIO address msb,是吗?

谢谢!

Zhan Xiang:

回复 David Yang:

是的。

赞(0)
未经允许不得转载:TI中文支持网 » 关于c6678 srio收发地址位数
分享到: 更多 (0)