踩坑日记8 microblaze运行在DDR上固化到flash

        在一些遇到工程较大的情况下,如果工程运行在内部软核BRAM,会提示内存空间溢出,这个时候就必须将工程放到DDR上运行,这个时候要固化我们需要用到SERC启动工程,SERC运行在软核BRAM,我们的工程运行在DDR,两者都固化到FLASH之后,SERC启动BootLoader程序,将FLASH中的工程代码搬运到DDR上,搬运完后SERC程序终止,开始运行我们的工程。

        同时注意,当工程运行在DDR上时候,usleep函数不可用,会变得很慢。

        当前FLASH连接到芯片专用的SPI引脚上,我们需要启动芯片原语功能(primitive),选择STARTUP Primitive internal to IP(比较方便),然后IP核内部会自动分配引脚,不需要在进行约束。

        要在软核上运行FreeRtos,需要使用中断控制器,一个定时器time,并且定时器中断引脚要连上去,此外,如果concat有个引脚悬空,比如下面,Vivado生产bit时候不会报错,但是在SDK新建工程会报错[Updatemem 57-153]。

保证软核地址为0x00000000起始,否之烧录代码时会出现stalled on instruction fetch问题。

添加约束加快加载速度,电压根据芯片选择

set_property CONFIG_VOLTAGE 1.8 [current_design]

set_property CFGBVS GND  [current_design]

set_property CONFIG_MODE SPIx4  [current_design]

set_property BITSTREAM.GENERAL.COMPRESS true [current_design]

set_property BITSTREAM.CONFIG.CONFIGRATE 31.9 [current_design]

set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design]

set_property BITSTREAM.CONFIG.SPI_FALL_EDGE YES [current_design]

set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]

启动SDK,新建工程,确保工程运行在DDR上

如下确认完成。

新建工程FSBL

选择

确保FSBL工程运行在BRAM上

由于FSBL中会用到芯片厂家宏定义,修改一下

我使用的镁光(micron)的flash选择5

点击blconfig.h,这个参数决定了bootloader在什么地址取代码。我的flash为32Mbytes,取中间一半0x01000000。

点击program FPGA,把FSBL和工程bit文件一起生成新bit。

下载到flash

然后我们将工程文件也烧到flash,偏移地址以blconfig.h为准。

重启就可以看到,bootloader在启动搬运程序到DDR上

大概两分钟左右加载完成。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值