MicroBlaze控制LED入门【史上最详细】

MicroBlaze控制LED入门【史上最详细】MicroBlaze 控制 LED 入门 史上最详细 码字截图不易 转载请注明标题和作者 谢谢 本教程是写给以 Xilinx 官方开发板作为平台的初学者本实例中开发环境 软件平台 Win10 专业版 64bit Vivado2017 4 版硬件平台 Xilinx KC705 本实例完整工程下载 请戳此处下面是两个进阶工程 设计过程和本文要讲的 LED 几乎一样 这里不在赘述 Micr

MicroBlaze控制LED入门【史上最详细】

码字截图不易,转载请注明标题和作者,谢谢!!!

本教程是写给以Xilinx官方开发板作为平台的初学者

本实例中开发环境:

  • 软件平台:Win10专业版 64bit + Vivado2017.4版
  • 硬件平台:Xilinx-KC705

本实例完整工程下载:请戳此处

下面是两个进阶工程,设计过程和本文要讲的LED几乎一样,这里不在赘述。

MicroBlaze控制1602_LCD下载:请戳此处

MicroBlaze控制1602_LCD+LED+UART下载:请戳此处

注:所有工程用Vivado2017.4完美运行。如果你用的是2017.4以后的版本,打开工程后按照提示升级IP即可;如果你用的是2017.4以前的版本,只能用只读模式打开无法改动。

写在前面的话

  不少同学在学习FPGA之前有接触过单片机,单片机属于ASIC。ASIC比FPGA普及得多得多,但是ASIC的功能相对固定,它是为了专一功能而生,希望对它进行任何的功能和性能的改善往往是无济于事的。打个浅显的比喻,如下图所示,如果说ASIC是布满铅字的印刷品,那么FPGA就是可以自由发挥的白纸一张。(摘自《深入浅出玩转FPGA》作者:特权同学)

MicroBlaze控制LED入门【史上最详细】

  MicroBlaze是Xilinx平台上的软核。如果之前有接触过单片机可以暂时把MicroBlaze当作单片机来看待。只不过我们用单片机开发的时候硬件结构是已经搭建好的,而且是固定的,我们只需编写需要的控制程序即可。就像上面提到的,FPGA白纸一张,现在要通过MicroBlaze实现LED的控制就必须分两步走:第一,在这张“白纸”上搭建硬件电路。第二,编写LED的控制程序。这就会造成一个问题:用FPGA实现一个功能,经历的步骤会更多,中间任何一个环节出错都会影响到最终结果。(大家看完后文步骤就能体会到有多麻烦)

  问题来了,既然在实现相同的功能情况下,用FPGA + MicroBlaze的方式要复杂的多,而且FPGA的成本比单片机高很多,为什么要整这么麻烦,随便找个MCU不就搞定?

  这个问题的答案也是我下决心写这篇博客的原因。FPGA和ASIC各有所长,各有所限。在嵌入式领域市面上常见的有FPGA,AMR,DSP。ARM长处在于控制和管理,DSP专门为数学运算设计,而FPGA则适用于灵活性高,定制化程度高的场合。很多时候它们实现的功能无法直接代替。在科技发展过程中,出现了你中有我,我中有你的共存现象。比如ARM中有DSP;Xilinx的FPGA中有MicroBlaze软核,Zynq系列更是嵌入了ARM的硬核。在比较复杂的设计中不同的任务之间需要调度管理,依靠FPGA逻辑控制很难实现复杂任务的管理,而把任务间的调度管理交给MicroBlaze处理,会使设计变得很简单。因此,在FPGA设计中掌握软核的应用非常重要。接下来我从之前提到设计的两大部分,依次做详细说明。

  本例程作为初学的第一个例子,在这个工程示例中大部分配置参数都采用默认值,这样可以用较少的步骤很快搭建一个完整的工程,先不用理会设计细节,在比较短的时间完整的走完一个工程所有的步骤,尽快看到实验结果。这样有助于增强初学者的自信,才有可能抱着探索的心态继续学下去。后面的学习中再去探索每个参数背后的意义。

第一部分:“白纸”上搭建硬件电路

  1. 打开Vivado如下图所示,点击创建工程
MicroBlaze控制LED入门【史上最详细】
  1. 此时弹出如下窗口,点击Next
MicroBlaze控制LED入门【史上最详细】
  1. 选择工程路径创建工程名,工程名建议尽量短,window路径有256Byte限制,工程名太长会导致深层子文件夹无法读取而综合失败
MicroBlaze控制LED入门【史上最详细】
  1. 建工程时选择不添加源文件
MicroBlaze控制LED入门【史上最详细】
  1. 选择板子型号
MicroBlaze控制LED入门【史上最详细】
  1. 点击Finish
MicroBlaze控制LED入门【史上最详细】
  1. 点击创建Block Design
MicroBlaze控制LED入门【史上最详细】
  1. 命名为Micro_led然后点OK
MicroBlaze控制LED入门【史上最详细】
  1. 在Diagram中点“+”号添加IP核
MicroBlaze控制LED入门【史上最详细】
  1. 添加MicroBlaze IP核
MicroBlaze控制LED入门【史上最详细】
MicroBlaze控制LED入门【史上最详细】
  1. 按下图所示顺序添加时钟 IP核,添加后默认设置为输出1路100MHz时钟
MicroBlaze控制LED入门【史上最详细】
MicroBlaze控制LED入门【史上最详细】
  1. 和上面方法一样添加LED IP核
MicroBlaze控制LED入门【史上最详细】
  1. 点击Run Block Automation,这一步会把MicroBlaze所需的额外IP核自动添加进来并连接
MicroBlaze控制LED入门【史上最详细】
  1. 点击local memory更改为32K,然后点击OK,等待完成连接
MicroBlaze控制LED入门【史上最详细】
  1. 完成连接后会多出三个IP,如下图
MicroBlaze控制LED入门【史上最详细】
  1. 接下来点击Run Connection Automation 接着会把剩下的线连接完毕
MicroBlaze控制LED入门【史上最详细】
  1. 在弹出的窗口中全部勾选然后点OK
MicroBlaze控制LED入门【史上最详细】
  1. 连接完毕后,如下图所示。这里又增加一个IP AXI interconnect 是 MicroBlaze 连接外设的桥梁
MicroBlaze控制LED入门【史上最详细】
  1. 生成输出。按下图所示顺序操作(这一步到22是完成FPGA设计的单个IP核的综合和实现)
MicroBlaze控制LED入门【史上最详细】
  1. 保持默认直接点击Generate
MicroBlaze控制LED入门【史上最详细】
  1. 输出顶层。按下图所示顺序操作,在弹出的中直接点击OK
MicroBlaze控制LED入门【史上最详细】
MicroBlaze控制LED入门【史上最详细】
  1. 在Vivado的右上角看运行状态
MicroBlaze控制LED入门【史上最详细】
  1. 等待完成后Vivdo右上角出现Ready字样,表示综合实现完成
MicroBlaze控制LED入门【史上最详细】
  1. 接下来生成Bitstream文件。Bitstream是最终下载到FPGA芯片的文件。在Flow Navigator栏中找到下图所指示的位置,然后点击 Generate Bitstream
MicroBlaze控制LED入门【史上最详细】
  1. 此时提示没有找到实现的结果,要开始综合和实现,点击Yes。在接下来弹出的窗口中,保持默认直接点击OK。注意此处提示的综合是指整个工程的全局层面的综合,19–32步中的综合是指单个IP的综合
MicroBlaze控制LED入门【史上最详细】
MicroBlaze控制LED入门【史上最详细】
  1. 完成Bitstream文件生成后会有下图所示的弹框,直接关闭即可
MicroBlaze控制LED入门【史上最详细】

至此,第一部分结束




第二部分 编写LED的控制程序

这部分SDK和Vivado这两个软件要来回切换,注意不要搞混

  1. 在Vivado环境下,按下图所示顺序操作
MicroBlaze控制LED入门【史上最详细】
  1. 此时弹出如下窗口,保持默认设置直接点击OK
MicroBlaze控制LED入门【史上最详细】
  1. 在Vivado环境下,按下图所示顺序操作
MicroBlaze控制LED入门【史上最详细】
  1. 此时弹出如下窗口,保持默认设置直接点击OK,等待打开SDK完毕
MicroBlaze控制LED入门【史上最详细】
  1. 在SDK环境下,按下图所示顺序操作,新建SDK工程。这个工程有点类似在51单片机上用Keil建应用工程
MicroBlaze控制LED入门【史上最详细】
  1. 此时弹出如下窗口,按下图所示顺序操作
MicroBlaze控制LED入门【史上最详细】
  1. 此时进入下级窗口,按下图所示顺序操作,完成SDK工程的新建
MicroBlaze控制LED入门【史上最详细】
  1. 按下图所示按照文件层级关系,打开testperiph.c文件然后删除文件里面的内容
MicroBlaze控制LED入门【史上最详细】
  1. 将下面的程序粘贴到打开的testperiph.c文件中并按Ctrl+S保存(这里按Ctrl+S保存后会自动编译)
#include  
        #include "xparameters.h" #include "xil_cache.h" #include "xgpio.h" #include "gpio_header.h" #define LED_CHANNEL 1 XGpio GpioOutput; /* The driver instance for GPIO Device configured as O/P */ XGpio GpioInput; void delay(u32 ms) { 
       volatile u32 Delay1=0; volatile u32 Delay2=0; for (Delay1 = 0; Delay1 < ms; Delay1++) { 
       for (Delay2 = 0; Delay2 < 8332; Delay2++); } } int main () { 
       int Status; int cunt=0; Xil_ICacheEnable(); Xil_DCacheEnable(); Status = XGpio_Initialize(&GpioOutput, XPAR_AXI_GPIO_0_DEVICE_ID); if (Status != XST_SUCCESS) { 
       return XST_FAILURE; } XGpio_SetDataDirection(&GpioOutput, LED_CHANNEL, 0x0); XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL, 0x0); while(1) { 
       if(cunt==8) cunt=0; XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL ,0xf0); delay(500); XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL ,0x0f); delay(500); cunt++; } Xil_DCacheDisable(); Xil_ICacheDisable(); return 0; } 
  1. 切换到Vivado环境,在Flow Navigator栏中找到并双击打开下图所指示的位置
MicroBlaze控制LED入门【史上最详细】
  1. 此时出现如下界面,单击图中所示的位置打开寻找目标器件
MicroBlaze控制LED入门【史上最详细】
  1. 如果找到器件则在localhost下就会有器件信息,(如果未找到器件一般检查板子和电脑是不是已连接好,驱动程序是不是已安装,板子电源开关是不是已打开)然后按下图所示的顺序给板子下载Bitstream文件
MicroBlaze控制LED入门【史上最详细】
  1. 此时弹出如下窗口,保持默认设置直接点击Program,等待下载Bitstream文件完成
MicroBlaze控制LED入门【史上最详细】
  1. 最后切换到SDK环境,先确保当前打开的窗口是testperiph.c,然后按下图所示的顺序操作就可以将编译好的led控制程序运行在MicroBlaze上,此时可以观察到板子上高四位LED和低四位LED交替闪动,周期大约为1秒。
MicroBlaze控制LED入门【史上最详细】

到这里,整个设计流程就结束了,希望这篇博客对初学者有所帮助。如有问题可以一起交流,共同学习。邮箱:

本实例完整工程下载链接在本文开头

码字截图不易,转载请注明标题和作者,谢谢!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204590.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午7:59
下一篇 2026年3月19日 下午7:59


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号