設計的板子到了SRIO調試階段了,在板子上,一片V6和兩片6678通過4XSRIO互聯,中間沒有Switch,總算搞定了相互之間的通信。
首先,感謝Ti論壇提供的SRIO程序范例,但是其硬件平台是EVM板,更多的只能用於loopback測試,但是可以在其基礎上修改。
1.初始化DSP的SRIO,主要是對SerDes進行配置,然后是Lane和Speed的配置,最后需要等待FPGA的LinK建立,我們在建立時候碰到一點困難,每次建立並不都是4X,一直沒有找到問題,我們使用了一個別的辦法來保證link為4X。
2.數據發送,DSP上提供的數據發送方法主要有兩種,DirectIO和Message,主要區別為DirectIO需要TX和RX雙方知道地址映射關系,而Message是通過Message中mail信息得到數據需要保存的地址,我們使用的為DirectIO方法,6678上提供了8組LSU來進行DirectIO數據發送,每個LSU有6個寄存器,當5th寄存器寫完后,數據會發送出去,第6個寄存器主要用於檢測當前的LSU狀態。LSU還有16(32)個影子寄存器
3.SWRITE/NWRITE/NREAD:對DSP來說,初始化完SRIO后,FPGA便可以通過SRIO來發送數據,但是要注意,Designer並不知道什么時候FPGA會發送數據,所以通常會先發送一個DoorBell信息來告知DSP,FPGA要發送數據了,DoorBell可以觸發中斷,對於NREAD來說,FPGA發送這個命令后,DSP會自動的將請求的數據發送出去,Designer也並不知道數據發送出去,這些都需要DoorBell來支持。