Xilinx MicroBlaze实践总结
来源:互联网 发布:在线域名生成器 编辑:程序博客网 时间:2024/05/12 10:26
该总结来源于对自己根据HUST_STI的视频教程与《xilinx开发实例教程》一书的实践总结。有机会可以玩玩开源的or1200.
MicroBlaze即xilinx的软核。下面介绍相关的工具及开发流程,以及一些需要注意的点。
下面根据视频流程梳理。
1、xps软件,新建bsp工程。文件后最为xmp。选择AXI的总线架构。可以选着开发套件如ML605也可以自定义,需指定cpu的reset引脚。后面添加IP外设、DDR、串口。生产bsp工程后可以看到总线的连接图,生成了.mhs文件,可以看到个模块的系统图,UCF引脚约束文件
2、可以现在双击修改ddr控制器的ip核设置,修改端口的外设总线连接、时钟分频、可以修改没有用到的引脚。修改microblaze内核的icache与dcache的大小,可以看到各个外设的地址。
需注意;ucf中的端口port及总线连接中的名称一致,clk需修改我们板子上的无源的,修改clk模块中的脚
3、添加gpio,选axi_lite总线,修改gpio的名字与ucf中的一致。添加spi控制器的ip核、在总线图里修改spi控制器的某些脚接地,删掉没用的脚,注意修改对应的端口一致。
编译生成system.bit文件,即为内核文件。可以注意生成过程即是按照mhs文件中的内容分布综合映射的。这时export design/export &launch sdk。打开sdk。最后在sdk_export目录下新建一个sw的目录用来放我们的软件,设置工作区在这。
打开edk界面可以看到xml文件,生成了一个platform工程,有之前的system.bit文件、system.xml文件、bmm文件与xps中的bram中是一致的。新建一个hello world工程(默认是在ddr上跑的),关闭自动编译功能。建好工程会自动编译一遍、生成了2个工程、bsp工程与用户工程。bsp工程中可以看到有lib等c语言函数库等常用的如xgpio.h。里面根据我们的实际外设都有相应的驱动。用户工程中有个ld文件,决定程序在那里跑。可以看到与xps中的地址是符合的,build一下可以看到生成的elf文件大小。program FPGA菜单中,选择loop,这样将根据system.bit与bmm文件即孔的loop文件生成download.bit文件。下进去,但是只是下了内核。后面在工程处,右键,run as/launch on hardware,即将软件程序下进去了,可以在终端窗口看到串口发过来的hello world证明ok
再新建一个外设测试工程。工程类型是外设测试,可以看到生成了相应的外设测试的c文件。直接编译进fpga,串口可以看到测试通过了。
4、建一个在bram上跑的ram工程。新建的工程默认在ddr上跑,需修改ld文件。generate a linker script,修改后就变了。修改hello world.c文件,实现流水灯,需要用到bsp提供的驱动函数。可以研究下<xgpio.h>文件。这个时候,由于是在bram里面跑,program fpga不用选loop,而是生成的elf文件,生成download.bit后下载可以看到流水灯跑起来了。
若想固化到flash中,则需生成mcs文件,打开impact,新建spi工程,添加download.bit,填充到spi中,然后初始化chain,添加spi,选择我们的spi的型号、生成了mcs文件再下进去,设置从flash启动,断电后就跑了起来
5、自定义外设(数码管驱动外设):xps中点开建立外设向导,练到axi4_lite总线上,设置需要几个寄存器,好了后即可在ip分类的user下看到自己的SEG7的ip。实际上先关的文件再pcores文件夹下。需进行修改,在mpd文件中的ports部分添加自己的端口,修改userlogic.v中添加自己的端口,input和output。vhd文件中有3出修改,需修改2处ports,map部分中也得修改
6、添加ip后,project-rescan USER Repositions更新后看到自己的ip外设端口出来了设置方向与名称。将自己的逻辑添加到user_logic.v文件中的相应位置
7、修改管脚约束,生成bitstream,导入sdk,更新下xml文件。看到加进来的外设有了。新建hello world工程,看到mss文件。修改ld文件让代码为到ddr中跑。写数码管的c语言程序,需要用到<xil_io.h><xbasic_types.h>等文件。后面下进去看到数码管工作起来了
8、添加spi的控制器,删掉原来的。修改ip核的配置,分频系数等,修改引脚名字和脚的连接。
9、导入sdk,同上,更新xml文件,新建helloworld,将提前写好的c文件加进来。下程序时还是空的loop(只有为在bram上跑的程序才能一起合并,否则都只能是loop)
10、体会用户程序与boot程序:
需2个工程。用户用处与boot工程。用户工程spi_user_app.c,编译生成elf文件,这个是跑在ddr上的,对于的ld文件中得是相应的设置boot工程、spi_bootloader.c。改c文件中用了函数指针调到了用户程序spi_user_app.c中。这个是在bram中跑的。这个一起生成bootload文件下进去,然后再把用户elf文件通过run as方式下进去
11、全部固化到flash中:
需用到一些工具,目的是将上面的由bootloader合并生成的bit文件与用户程序的elf文件生成mcs文件。最后生成了combine.mcs文件。这样每次断电后重启都是这样的
感想:
1、选用ip的时候,连到那个总线上,即会生成一整套的总线接口
2、自定义ip的时候也是,在合适的地方添加自己的逻辑实现即可,软件自动帮你生成了相应的接口,即axi的总线接口标准
3、可以体会一下有了硬件的seg驱动,软件上应该怎么写,与原来我们用单片机实现seg驱动有什么不一样。
4、有机会可以试试开源的OR1200,相应的软件工具和环境都是开源的,linux也支持
2014-4-14于hust 西一
- Xilinx MicroBlaze实践总结
- Xilinx MicroBlaze的使用方法
- xilinx-microblaze的应用疑惑
- 聊一聊如何实现Xilinx Microblaze Bootloader
- 求救,有谁用过xilinx的edk开发过microblaze吗?
- xilinx ISE 调用microblaze 启动SDK遇到了问题
- ISE MicroBlaze GPIO输入输出测试总结
- 针对Xilinx FPGA Microblaze的不到千行轻量级抢占式操作系统
- xilinx 的4个 HDMI的IPCORE, 用一个 Microblaze控制。
- Xilinx实习一年总结
- xilinx各个工具总结
- xilinx开发总结
- 用Vivado/SDK实现microblaze的一些总结
- Xilinx zynq zc702学习总结
- Xilinx FPGA开发工具总结
- Xilinx zynq zc702学习总结
- 关于FPGA软核的一些总结(microblaze && NIOS II)
- Xilinx zynq zc702学习总结 部分内容更正
- 【蓝桥杯】【基础练习08】【杨辉三角】
- Android自定义控件实现手机摆放位置的校准
- 关于在使用easyui的时候,实现光标定位在easyui-combogrid和easyui-textbox输入框内(也就是获取焦点)
- 25 个 JavaScript 面试题
- xml解析时getElementById方法返回为null
- Xilinx MicroBlaze实践总结
- 1005. Spell It Right (20)
- 如何使用PulltoRefush实现下拉刷新,上拉加载
- Binary Tree Preorder Traversal
- 实用SQL语句大全
- 游标
- 10个最常见的 HTML5 面试题及答案
- 解决了App后端逻辑重复开发和维护的问题
- DefaultSingletonBeanRegistry源码详解