报名编号:CICC1764
团队名称:两年半IC练习生
vivado仿真:(仿200us以上,100us左右mig才完成初始化)
(1)测试代码
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 : %d\r\n”,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的图像数据,并进行读出,依次比对,读出结果正确。