RISC-V技术论坛
直播中

一曲作罢

10年用户 979经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术
私信 关注
[经验]

E203分享之DDR扩展方案实施流程(下)

vivado仿真:(仿200us以上,100us左右mig才完成初始化)
(1)测试代码
define DDR_BASE 0xA0000000

unsigned int ddr_offset = 0x00000000;
   for(int i=0;i<50;i++)
   {
       (unsigned int )(DDR_BASE+ddr_offset) = ddr_offset;
       ddr_offset += 0x00000004;
   }
  int rd_data;
   ddr_offset = 0x00000000;
   for(int i=0;i<50;i++)
   {
       rd_data = (unsigned int )(DDR_BASE+ddr_offset);
       if(rd_data==ddr_offset)
           printf(“memory [%d] correct : %drn”,i,rd_data);
       ddr_offset += 0x00000004;
   }
(2)测试效果,读数正确


vivado综合:
注意:(1)综合不需要例化ddr3模型,将soc_top层的ddr3的接口引出到最顶层system,mig的ddr3管脚约束在配置mig核的时候已经完成,不用再考虑。

(2)综合时需要把ui_clk和clk_16M间的时序路径设成false_path,因为mig产生的用户时钟ui_clk和系统顶层时钟clk_16M是异步的,故综合时不分析这段时序路径,否则会时序违约。
若出现异步时钟造成的时序违约如:

新建一个.xdc文件,打开综合下的timing summary,然后右键点击违约的时序路径,选择set false path,然后将约束写入新建的.xdc文件中,时序违约便可消除。
FPGA开发板下载程序:(想要用到扩展好的DDR3下载程序,需要修改链接文件)
该扩展方案支持程序的下载方式两种:
(1)ILM下载方式,程序先下载到ITCM中,溢出的部分则下载到DDR3里头。
在链接文件gcc_hbirdv2_ilm.ld中ITCM的基地址为0x80000000,寻址空间为64k。
程序从ITCM的基地址开始下载,当存满0x80000000以后的64k空间时,剩余的程序会下载到DDR3的存储空间。
将源链接文件gcc_hbirdv2_ilm.ld中:

修改为:

(2)FLASH下载方式,程序先下载到flash里头,再加载到ITCM和DDR3里头,然后运行。
将源链接文件gcc_hbirdv2_flash.ld中:

修改为:

扩展后FPGA开发板代码运行效果图:

在程序中加载了142KB的图像数据,并进行读出,依次比对,读出结果正确。

更多回帖

×
20
完善资料,
赚取积分