MicroBlaze 开发流程 一 MicroBlaze 的优势 MicroBlaze 软内核是一种针对 Xilinx FPGA 器件而优化的功能强大的标准 32 位 RISC 处理器 采用传统的单处理器方法进行的基础设计配合 Virtex-II Pro FPGA 在 150 MHz 的时钟频率下, 性能达到 125 Dhrystone MIPS (DMIPS), 如果与 Spartan-3 FPGA 配合, 在 85 MHz 的时钟频率下, 性能达到 68 Dhrystone MIPS (DMIPS) 为了达到更高的性能, 在 Virtex-II 系列平台 FPGA 中植入 32 位 PowerPCTM 内核, 它的 DMIPS 性能是竞争软处理器内核的五倍多 在 Virtex-II Pro FPGA 中实现的 32 位 PowerPC 内核, 在时钟频率为 450 MHz 时的性能超过 680 DMIPS 总体性能如此之高, 但成本却很低, 这是因为集成在 Virtex-II FPGA 中的处理器既简化了设计, 占用的片芯面积也减小了 例如, 一个高效的设计仅使用了 Xilinx 2VP50 器件中不到 2% 的芯片面积 1 用户可以根据不同的需要灵活地定制系统特性和外设 2 提升系统性能 3 降低成本 4 加快产品的上市时间如图, 使用了嵌入式 CPU 内核, 把一些外设集成到单片 FPGA 中, 可以减小系统复杂性, 降低功耗和成本 传统的系统框架图 SOPC 框架图个人使用体会 : 使用 CPU 软核做一些控制还是非常方便的, 而且 Xilinx 提供了强大的模块支持, 如 GPIO TIMER UART EMC 等等 用于实现参数可变的数字滤波器也比较方便 三 EDK 软件开发环境
Xilinx 软件开发环境功能强大, 而且非常容易上手 集成开发环境如下 : ISE 7.1 EDK 7.1 3.1 EDK 安装目录介绍服务器上的 EDK 开发工具安装包 :edk_71i_pc.bin, 这个光盘映象文件里有安装文件和 SP2 的升级程序 建议大家打上 SP2 的补丁 EDK 安装后, 安装目录树如下 : 其中比较重要的子目录是 doc 和 sw doc 目录下放了大量的文档资料, 具有重大参考价值 如 : edk_getstarted.pdf Getting Started with Xilinx EDK ps_ug.pdf Platform Studio User Guide oslib_rm.pdf OS and Libraries Document Collection iss_ug.pdf Instruction Set Simulator User s Guide mb_ref_guide.pdf MicroBlaze Processor Reference Guide psf_rm.pdf Platform Specification Format Reference Manual 其中比较重要的是 ps_ug.pdf sw 目录下放置的是 Drivers, BSP s and software services 对于我们编写 C 代码来说, 是非常重要的参考资料
如图, 可以看到在 sw 下面的 XilinxProcessorIPLib 目录里面有 drivers 目录 我们用 Microblaze 实现串口 GPIO 等等, 这些硬件模块的驱动就放着 drivers 下 我们以 GPIO 为例说明 有 gpio_v1_00_a 和 gpio_v2_00_a 两个子目录 数字代表了 driver 的版本号 html / api 是我们可以调用的函数的说明, 通过这些函数我们可以操作硬件 examples 是一些 C 程序代码例子, 我们可以参照这些代码来编写我们自己的程序 后面会通过具体例程来说明这个目录的重要性 3.2 EDK 的界面介绍通过实例说明 参见 8.1 3.3 EDK 工程文件中的目录及文件 ( 后缀 ) 说明通过实例说明 参见 8.1 四 EDK 使用流程 4.1 Microblaze 作为 Top Module Microblaze 可以作为 Top Module, 那么在开发过程中, 不需要是用 ISE, 只用 EDK 集成开发环境 流程如下 ( 后面有具体实例 ):
1 硬件设计 选择 FPGA 芯片, 定制合适的 CPU 存储器以及外围器件, 生成网表 编辑 UCF, 配置管脚 综合, 生成 bit 文件, 下载 2 软件设计 EDK 会根据硬件配置, 生成系统库, 提供底层硬件驱动和调用接口 使用 C 语言编写具体软件, 编译生成可执行文件 将 bit 下载到硬件上运行 4.2 Microblaze 作为 Sub Module ISE 工程中可以像调用诸如 DCM 模块的 IP Core 一样, 调用 Microblaze 如下图所示: Embedded Processor 这个选项在安装 EDK 软件之后才会出现 这样就可以添加一个嵌入式软核 Microblaze 作为 ISE 的一个子模块, 这个子模块跟其他 VHDL 子模块是一样的, 通过 component 实例化, 通过 signal 来连接 具体操作过程后面会通用实例来说明 作为 Sub Module 一个很重要的问题 : 必须把 C 代码编译后的可执行文件初始化到 FPGA 的 RAM 中! 五 一个简单的例子 (Top Module) 下面通过一个例子介绍一下具体的开发流程 可以不用深究具体的实现细节, 先通过这个例子体会一下开发的过程 有了感性的了解后, 在下一节将作具体讨论 本例子功能是点亮一盏 LED 灯 1 硬件 1 在某一路径下建立目录 nios_small ( 注意 :EDK 不支持中文目录 ) 运行 Xilinx Platform Studio 进入到以下界面, 点击 OK:
2 选择 I would like to create a new design 点击 Next
3 选择 I would like to create a system for custom board. 然后点击 Next 4 选择具体 Xilinx FPGA 芯片 我们常使用的是 Spartan 3 系列的芯片, 该芯片只支持 Microblaze 选择完毕后点击 Next
5 选择晶振频率, 复位信号电平, 是否需要 Debug, 以及 Memory 大小
6 点击 Add Device,IO Interface Type 选择 GPIO,Device 选择 LEDS 点击 OK
7 选择 GPIO 的数据位数 Next
8 选择内部元件 ( 如 Timer), 本例程不使用, 直接 Next
9 系统自动提供测试程序, 不建议选中 去掉 2 个勾 Next
10 Next
11 完成
12 这时, 会弹出一个窗口, 它的意思是你需要修改两个文件 一个是当前目录下 data/system.ucf 文件 ( 这是一个管脚配置文件 ) 另外一个是 etc/download.cmd 文件 ( 这是 JTAG 下载配置文件, 不用管它 ) 点击 OK 2 软件 硬件平台建立完毕后, 编写软件以及在 FPGA 中实现功能 1 选中 Tools -> Generate Libraries and BSPs 作用: 生成可供程序调用的库函数 放
在了工程目录中的 microblaze_0 下面 2 选择 Applications 标签, 新建软件工程, 添加 c 文件
3 编写 c 代码 #include "xbasic_types.h" #include "xparameters.h" #include "xutil.h" #include "xgpio_l.h" int main() { int i; // Set the direction for all signals to be inputs except the LED output XGpio_mSetDataDirection(XPAR_GPIO_REG_BASE, 1, 0x0); // Loop forever blinking the LED while (1) { XGpio_mSetDataReg(XPAR_GPIO_REG_BASE, LED_CHANNEL, 0xff); for (i = 0; Delay < 1000000; i++); XGpio_mSetDataReg(XPAR_GPIO_REG_BASE, LED_CHANNEL, 0x00); for (i = 0; Delay < 1000000; i++); } return 0; }
4 选择 Tools - > Build All User Applications 5 编辑 UCF 文件 针对本例, 只要在默认文件的基础上该即可
UCF 文件放在了工程下 data 目录里面 Net sys_clk_pin LOC=H14; Net sys_rst_pin LOC=Y11; ## System level constraints Net sys_clk_pin TNM_NET = sys_clk_pin; TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 10000 ps; Net sys_rst_pin TIG; ## FPGA pin constraints Net fpga_0_leds_gpio_d_out_pin<0> LOC=AF15; Net fpga_0_leds_gpio_d_out_pin<1> LOC=N19; Net fpga_0_leds_gpio_d_out_pin<2> LOC=V20; 6 生成网表
7 生成 bit 文件 生成的 bit 文件放在工程的 implementation\ 目录下
然后就可以下载到 FPGA 上运行了 十参考链接 http://www.fpgarelated.com/usenet/fpga.php http://groups.google.ca/ http://www.opencores.org/ http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux