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:
是的。