之前系统microblaze使用的是本地存储BRAM,空间有限,因此添加外部存储系统DDR3;QSPI Flash将程序固化到开发板上,使开发板每次重启时自动烧写程序
新建工程—选择arty a7开发板—创建BD设计—添加系统时钟
系统时钟修改
拖动DDR3到BD面板,即mig_7series(MIG IP),关键在于时钟设置(时钟配置如果错误,则后续运行会报错)。
在arty a7用户开发手册中找到DDR3的表格,找到recommended input clock period,对应的value为166.667MHZ,即给mig_7series的系统时钟sys_clk分配166.667MHZ的时钟,参考时钟clk_ref分配200MHZ的时钟(200MHZ的依据可以双击打开MIG IP,在user guide中搜索clk_ref即可找到,今后在使用其他IP时,如果对引脚配置不清楚,也可以在user guide中进行查找)
对引脚进行手动连接,删除mig的外接clk_ref_i引脚和sys_clk_i引脚
添加microblaze软核—添加QSPI FLASH,连接50Mhz时钟
点击run block automation,可以把local memory 和cache configuration设置的小一些,此处分别设为32k和16k,clock connection选择mig分出来的ui clk,点击ok
继续添加led灯,拨码开关和uart(修改uart波特率为115200),点击run connection automation自动进行连线,这样添加了DDR3和QSPI Flash的硬件系统就搭建完毕。
在source创建HDL封装文件—生成比特流文件(number of jobs改为12)—导出硬件信息(file-export hardware,注意勾选include beatstream,若使用vivado2019.2版本注意查看保存路径,版本升级后不会保存在默认路径,有可能保存到上一个工程路径下)
进入vitis软件设计,新建helloworld工程
查看存储空间说明文件(已变为ddr3)
修改bsp
点击锤子进行编译
编译完成
注:在vitis左侧窗口可能会同时打开多个工程(如果设置在同一文件夹下,注意区分,否则编译会出错)
新建工程(启动器),选择我们刚刚创建的硬件平台
生成spi bootloader
先选中编译,会生成.elf文件
同样地,把helloword文件也编译生成elf文件,设置串口,运行helloworld,会在串口窗口接收到
打开bootloader文件下的blconfig.h,修改应用工程的偏移量(arty a7 35开发板的偏移量是00c00000),并编译
program fpga
生成download.bit文件
烧写到flash
根据输出的信息修改flash type
提示烧写成功
选择hello world项目program flash,修改以下项目,偏移量与刚刚在程序中修改的一致
点击开发板prog等待几秒后,指示灯会重新亮起(等待的几秒是程序重新烧写的时间),在串口窗口也会看到提示消息