FPGA硬件逻辑独有的并行性使其在实时处理和并行算法中占尽优势,但当执行串行操作时却需要使用笨重的状态机来完成。因此,要实现对实时性要求不高的串行操作,对各类IP核的总体控制调度,亦或是快速移植软件协议栈时,利用fpga内部CPU 是个比较好的选择。
下面描述怎么搭建一个最小的microblaze软核,以及各个模块的意义。
create block design,添加microblaze软核。
配置添加microblaze之后,点击 run block automation
这里暂时不使用DDR之类的缓存设备,利用片内memory存储代码,因此将local memory 容量增大。
点击OK后,工具自动生成CPU 系统所需要的所有必要硬件模块,包括:时钟管理单元(clk_wiz_1),复位逻辑(rst_clk_wiz),调试模块(MDM),microblaze CPU ,以及local memory 。
MDM模块 选择 enable jtag uart.可以连接jtag,在SDK 界面打印调试信息。
按照硬件需求,配置时钟复位,添加输入输出端口,进行电气检查。
右键,source窗口中 block design 名称,依次选中generate output products 和generate HDL wrapper 。前者生成可综合,布局布线的.V文件,后者产生工程顶层封装。
按照正常流程,添加XDC 文件,生成bit文件。file ---- export ------ export hardware,导出硬件平台。这里要选择include bitstream,否则SDK 中无法识别硬件系统。最后点击file --- launch SDK 启动软件开发工具,开始软件设计流程。
C 代码添加,在test 的src目录下添加,这里只是描述一下调试怎么配置jtag模式。在对应的 _bsp 上,右键,选择board support package setting 。
配置为mdm即可在测试的时候直接在SDK 打印结果。如果外挂有uart,也可以用外部的串口,同时board support package setting 全部设置为外部串口