之前说通过将数据固化到block ram的方式作为一个临时的解决方案,不过不幸的是也正是我之前所担心的FPGA的block ram资源并没有我想象中的那么多,V5的LX155T的distributed ram与blockram加起来不到10Mb,注意是小b,也就是1M多B。所以我想起了beecube技术支持刚开始说的那种方式就是通过网口传送,在bps的安装路径下会有参考设计。于是我按照参考设计生成了针对bee3板子的和XUPV5板子的bit流,参考了bps的user guide,根据需要修改了host上的程序,用于跟FPGA通信,一切准备就绪后开始测试,结果很块就跑通了,也就是说我现在可以通过网口,在主机上运行程序读取主机上的文件然后发送给XUPV5板子的ddr了,我只测试了ddr,其他的没有测试,但是这已经足够了。而且做适当的修改就可以把shader的相关数据发送到ddr中。
改完c代码之后,我打算着手在bee3板子上试试,我觉得应该不出意外的话就通了。在我更改生成的LX155T工程的时候发现它的ES工程中怎么又mdm模块呢?而且我测试了一下,通了!也就是说,bee3也可以通过mdm进行软件调试,我了个去了,我忽然意识到之前做了好多白费力的工作。我之前通过手动的方式也自己添加过mdm模块,但是没添加成功,但是我还是不确定bee3上能不能添加mdm模块,因为很可能是我添加时没做正确的设置。后来询问了一下beecube的技术支持,说添加了mdm,但是没调通。他说,那可能bee3就不支持mdm调试吧!他自己也没做过这方面的工作。所造成的后果就是,我竟然完全相信了。通过自己的错误经验已及他的确认于是我就认定bee3不支持mdm调试,于是剩下的时间就在寻找其他的方式将数据放到ddr中。。。于是就饶了一个又一个弯。最后不得不寻求网络的帮助,哎。。。
不过从另一个角度上来说,我又学会了另一种与FPGA通信的方式,而且这种方式有很大的扩展性,因为我可以异地操作呀。也就是说我现在有两种可行的方案来解决我之前碰到的难题了。一个是网口,另一个是mdm调试。我打算两种方式都试一试。
昨天通过网口试了一下,主机能发送数据到FPGA的ddr中,但是不能发送数据到shader的block ram中,原因可能出在原本我以为往ddr中传数与往block ram中传数是相同的,于是就用了同一个API操作,原因可能出在这,当然也不排除其他方面的原因,因为问题可能出现在任何地方,你想到的或者你想不到的。还有就是就算数据正确放到ddr了,我也能把shader需要的指令数据和cmem数据放到shader的block ram中了,但是启动shader后发现VF并没有将数据从DDR中取回来,由于VF通过mpmc从ddr中取数,而网口的一些功能也要通过MPMC跟ddr打交道,我怀疑是这方面的原因。具体原因不详,有待寻找。
转向mdm吧,先跑通了再说,别让老师等的太着急了。今天搜了一下如何添加mdm,没有找到添加mdm时需要做的工作,但是找到了删除mdm时需要做的工作,于是逆向去考虑我就知道怎么去添加我的mdm模块了,现在正在产生bit流,等待着奇迹的发生吧...
ps:xilinx AR #38353
12.2 XPS/EDK - How do I build a MicroBlaze processor system without the debug module?
Solution
To remove the debug module, perform the following:
- Clear the parameter C_DEBUG_ENABLED to 0 in the MB instance of the MHS file.
- Remove or comment out "BUS_INTERFACE DEBUG = microblaze_0_mdm_bus" in the MB instance of the MHS file.
- Remove or comment out "PORT MB_Debug_Sys_Rst = Debug_SYS_Rst" in the proc_sys_reset instance of the MHS file.
- Remove or comment out the MDM instance of the MHS file.
- Remove or comment out the MDM driver instance of the MSS file.