本队伍编号CICC3042,本文介绍如何为蜂鸟添加DDR内存扩展。一些需要大存储空间的设计中经常需要使用DDR,这时我们希望蜂鸟可以访问DDR,以实现更好的软硬件协同。
简单阅读蜂鸟的代码发现,蜂鸟本身提供了外部存储器的访问接口,在e203_subsys_mems.v文件中可以找到:
同时在这个源文件中实现了一主多从的总线系统,可以看到sysmem被分配到0x80000000到0xFFFFFFFF的地址空间,共有2G。注意这里ITCM的起始地址为0x80000000,DTCM的起始地址为0x90000000,与sysmem地址空间重合,实际上在代码中判断了如果访存地址位于0x80000000和0x90000000起始的64k空间范围内时,内核会访问ITCM和DTCM;如果不在上述空间范围内,内核会通过sysmem接口访问外部存储器。这里通过sysmem接口扩展内存空间是简单方便的方法。
蜂鸟提供了icb2axi模块,为了方便在block design中使用,将其封装为IP,保留其可配置参数,如下所示:
为了方便多个设备访问DDR,这里采用axi接口的MIG控制器,可以方便地使用axi interconnect,block design结构如下,MIG控制器的使用这里不再展开。
随后需要分配地址空间,为了节省BRAM空间,我们去掉了ITCM和DTCM,因此DDR的地址空间从0x80000000开始,这样蜂鸟可以访问完整的DDR空间。这里为了测试处理器访问0x40000000的地址空间,使用了两块BRAM,从0x40000000开始分别分配4k的地址空间(仅作测试用,可以正常访问)。
最后在顶层system.v文件中例化block design,并添加DDR访问接口:
添加DDR内存扩展前,原来的蜂鸟v2在Nexys Video上的资源消耗如下:
添加DDR访问的部分,去掉ITCM和DTCM后,蜂鸟v2在Nexys Video上的资源消耗如下:
测试发现程序可以正常下载和运行。