问题描述:
论坛经常有人问关于microblaze程序固化在SPI FLASH中的问题,虽然网上有很多的关于SDK程序固化的教程,但是其实没有说清楚xilinx FPGA不同型号的SDK程序固化其实是有不一样的地方的,今天我们就来详细说一说关于SDK程序固化的一些细节问题。
相关介绍:
之前我也有点搞不懂为什么网上的教程那么多,但是实际试验下来发现能用的几乎没有几个,我在这里整理了一些资料,和大家分享一下:
- 【Arty-A7入门连载】Vivado中为Arty A7创建MicroBlaze嵌入式系统硬件工程 http://digilent.com.cn/community/197.html
-
【JokerのKintex7325】SDK程序从QSPI启动。https://blog.csdn.net/natty715/article/details/104084681
- How To Store Your SDK Project in SPI Flash https://reference.digilentinc.com/learn/programmable-logic/tutorials/htsspisf/start?_ga=2.189178594.87643803.1594185081-1026760797.1592460060
具体步骤:
因为我的板子就是Arty-A7 所以我就以此为例介绍具体流程
需要注意的是:《Vivado中为Arty A7创建MicroBlaze嵌入式系统硬件工程》这个教程中有一张图是错的,就是那个Mig个时钟连接的图,正确的连接图应该是图上面的连接 sys_clk 是DDR3的时钟所以应该 连接到166.667MHz clk_ref是告知系统时钟所以连接到200MHz。
在添加完成上述设置之后要添加SPI FLASH IP:
添加完成双击
点击自动连线完成设计,生成bitstream,导出:SDK相关的文件
打开SDK
我这里用的是Vitis,流程是一样的,打开Vitis,创建板子,然后注意修改一个文件:
设置完成点击OK ,此时
创建相关工程,按照上述参考资料二完成后续操作就没有问题了。
答疑解惑:
1. zynq的SDK程序固化和MicroBlaze的固化是不一样的,准确的说是有ARM核的FPAG和没有ARM核的FPGA使用MicroBlaze软核固化方法不一样,网上有的例子适用于在Zynq平台下构建MicroBlaze然后固化的方式,在K7 A7上面这中方法是不可行的。所以基本上必须要用 BootLoader这个代码 将应用程序的代码放在flash上,再从flash读到DDR中运行。
2. 在软核设计过程中,一定要注意相关时钟的选择,有的时候时钟的连接很重要,不同的时钟虽然软件都能跑,但是内部参数设置还是存在一定的隐患。
3. 关于vitis和SDK使用基本上大同小异,没有特别需要大改的地方,用习惯了就好。
4.有很多人的出错往往都是只看教程,忽略了自己板子和教程板子的器件差异导致不成功。
后续:
MicroBlaze SDK从flash加载还有一个加速版本,那就是大神的操作了,我就不做过多的赘述,具体参见:
【JokerのKintex7325】SDK程序从QSPI启动过慢分析。https://blog.csdn.net/natty715/article/details/104241415
大神就是大神,解决问题直击根本,亲测有效。