RISC-V MCU中文社区

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

发表于 全国大学生集成电路创新创业大赛 2023-05-25 19:02:37
0
1388
0

报名编号:CICC1764
团队名称:两年半IC练习生

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 : %d\r\n”,i,rd_data);
ddr_offset += 0x00000004;
}
(2)测试效果,读数正确
图片alt
图片alt

vivado综合:
注意:(1)综合不需要例化ddr3模型,将soc_top层的ddr3的接口引出到最顶层system,mig的ddr3管脚约束在配置mig核的时候已经完成,不用再考虑。
图片alt
(2)综合时需要把ui_clk和clk_16M间的时序路径设成false_path,因为mig产生的用户时钟ui_clk和系统顶层时钟clk_16M是异步的,故综合时不分析这段时序路径,否则会时序违约。

若出现异步时钟造成的时序违约如:
图片alt
新建一个.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中:
图片alt
修改为:
图片alt

(2)FLASH下载方式,程序先下载到flash里头,再加载到ITCM和DDR3里头,然后运行。
将源链接文件gcc_hbirdv2_flash.ld中:
图片alt
修改为:
图片alt
扩展后FPGA开发板代码运行效果图:
图片alt
在程序中加载了142KB的图像数据,并进行读出,依次比对,读出结果正确。

喜欢0
用户评论
北落师门

北落师门 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板