昨天顺利的度过了玛雅的最后一天,而且也终于按时交上了我的并行计算大作业,可以暂时松一口气了,虽然下周一考并行计算,不过考试我估计应该不会那么难,而且考试内容应该跟实验内容想一致,所以考试我倒反而不发愁了,回顾上周在bee3板上调试GPU系统的情景到现在还历历在目,当时确实给自己太大的压力,因为之前就设定要在12月中旬将结果调试出来,能在屏幕上显示一个茶壶,万事俱备在板上调试的时候没想到会会碰到这么多的工程限制问题,在这里我不得不抱怨一下,bee3的可配置性有点太差了,系统频率基本上是不可变的只能在100MHz,原因是MPMC的频率已经固化到了200MHz,所以如果你想用MPMC的话那只能在一个系统频率下工作,还有DDR是bee3板上唯一的一个大容量存储部件,所以如果存在较大量的数据还必须用它的频率已经固化的MPMC(注MPMC是DDR的控制器),所以问题就来了,假如你的模块想跟cpu通信,挂到PLB总线上,而你的频率又打不到100M,那应该怎么办呢?这确实是一个问题,原先我们的设计是在xupv5的板子上进行验证的,这块板子的系统频率可以很容易地更改,即使有DDR。
那么刚才提到的问题应该怎么解决呢?在我们的GPU模块中是有好几片cpu通过PLB总线可访的ram,cpu与GPU通过这几篇ram进行通行,所以给出的解决方案就是将所有cpu可访的ram都变为双口ram,双口ram是可以工作在两个时钟频率之下的,这样的话总线访问ram仍然是100M,而内部通过另外一个口访问ram,这个时钟频率可以是任意设置的。这样就勉强解决了频率不匹配的原因。于是我就得把原先已经在XUPV5板子上验证通过的rtl设计又得重新进行修改,以照顾bee3开发板!!
好了,经过近两天的修改调试终于把rtl代码修改完了 ,我想这下总算可以在bee3上进行验证了吧?且慢,我应该时刻谨记这么一条规律,在通往成功的道路上总是充满荆棘和曲折的,这一个问题解决了也就意味着下一个问题该来了。硬件调通以后就开始调试软件了,因为我要通过cpu给GPU传递一些初始化的数据,然后启动GPU运行,GPU在运行的过程中需要从DDR中取大量的顶点数据,这些顶点数据是不可能存放在FPGA内部的数据存储区中的,因为量太大,存不下,那就只能存放在DDR中了,而且最好是存放在DDR中,我的GPU去数据的接口也是针对DDR的。但是存放在DDR中有什么问题呢,那就是数据事前怎么样存放在DDR中呢?我先说说在XUPV5板子上数据是如何放到DDR中的,因为V5板子是支持mdm调试的,在每个SoC系统生成的时候会自动添加一个mdm调试模块,EDK会提供一个调试窗口通过这个shell,我可以把我的数据下载到FPGA的指定位置上去,通过调试窗口我也可以启动我的程序,查看运行后存放在存储器中的结果,软件调试非常方便!!但是bee3不支持mdm调试...,这就让我很是无语,那我的数据应该怎么存放到DDR中呢?这确实是一个问题...
现在我的初步想法是,在FPGA内部开辟一个较大的ram空间,将我的所有要存放到DDR中的顶点数据和索引数据先固化到ram中,上电后再从让cpu从ram搬到DDR中,然后再进行后续的操作,这个方法只能是一个临时的解燃眉之急的解决方案了。。不过就算是这样我还得祈祷希望FPGA有足够的资源可用,God bless me~~