Xilinx SDK 基于 MicroBlaze MCS IP 核的嵌入式开发与调试

导读

        本文主要记录了 Xilinx SDK 软件进行嵌入式程序开发和调试的操作流程,不涉及 Vivado 工程和 Xilinx SDK 的具体代码实现。第一部分主要是背景知识,如果想看实际操作可以直接从第二部分开始。

目录

导读

第一部分  FPGA与嵌入式系统

1 嵌入式系统

2 在 FPGA 中使用嵌入式系统的好处

3 能否将功能需求都用高级语言实现,规避FPGA中的HDL开发

4 Xilinx SDK 嵌入式开发套件

5 FPGA 中常见的嵌入式系统 IP —— MicroBlaze MCS IP 核

第二部分  Xilinx SDK 开发与调试流程(基于 MicroBlaze MCS IP 核)

1 创建一个 Xilinx SDK 工程

1.1 使用 vivado 2018.2,打开一个 vivado 工程

1.2 导出 .hdf 文件

1.3 打开 Xilinx SDK 界面

2 创建与开发嵌入式程序

2.1 创建 HPS 项目(Hardware Platform Specification 硬件平台规范)

2.2 创建 BSP 项目(Board Support Package 板卡支持包)

 2.3 创建应用程序

 2.4 开发应用程序

3 调试嵌入式程序

3.1 将 vivado 工程生成的 bitstream 和 SDK 工程生成的 ELF 文件一同烧写到 FPGA 中

3.2 调试嵌入式程序

总结



第一部分  FPGA与嵌入式系统

1 嵌入式系统

        嵌入式系统是一种特殊类型的计算机系统,它被设计用于执行特定任务或功能,并集成到更大的系统中,通常嵌入在其他设备或产品中。通俗来讲,要求系统能运行在特定的硬件平台上并满足特定需求,就可以考虑嵌入式系统。

2 在 FPGA 中使用嵌入式系统的好处

        虽然 FPGA 是可编程的,可以实现不同的逻辑功能,但针对某些应用场景和需求,嵌入式系统的设计与开发更为有效。在我的实际经验中,在 FGPA 中开发嵌入式系统的好处包括:

        1、功能设计上:嵌入式系统提供了更高的抽象层次,使得软件开发更方便。说白了就是习惯了软件的思维,可以在功能设计上发挥高级语言的优势。

        2、开发与调试上:FPGA 直接的 HDL 设计和开发相对复杂,HDL 语言的特性导致编写思维必须符合硬件思维。而在嵌入式系统中,可以使用标准的软件开发工具和流程,更容易进行软件开发、调试和维护。

        3、相互协同:硬件 HDL 设计可以作为主控 FPGA 板上资源的主要逻辑,而嵌入式系统可以在更简易的开发下完成某些复杂的逻辑,和 HDL 设计相辅相成。(我所经历过的一套硬件设计方案) 

3 能否将功能需求都用高级语言实现,规避FPGA中的HDL开发

        在某些情况下可以直接在 FPGA 中设计嵌入式程序,而无需使用硬件描述语言(HDL)如 Verilog 或 VHDL。另外一种方案是只编写  C/C++ 代码,使用高级综合(High-Level Synthesis,HLS)工具将高级语言转换为底层硬件逻辑。使用嵌入式系统或 HLS 工具虽然可以让开发人员更专注于软件开发,而无需处理底层的 HDL 细节,但在某些复杂的应用场景下,仍然需要使用 HDL 进行更细粒度的控制和优化。特别是对于要求严格的时序控制、硬件级别的优化和复杂的状态机逻辑,HDL 编写可能更为合适。

4 Xilinx SDK 嵌入式开发套件

        Xilinx SDK(Software Development Kit)是一种用于在 FPGA 上进行嵌入式系统开发的工具套件。FPGA 中主要有两类嵌入式系统:Xilinx FPGA(Field-Programmable Gate Array)芯片和 Zynq SoC(System on Chip),本文接下来的内容针对前者中常见的 MicroBlaze MCS IP 核进行嵌入式开发。开发者可以在 Xilinx SDK 中进行应用程序开发,SDK 负责将 C/C++ 代码编译成针对 MicroBlaze 处理器的目标机器码,进而生成的可执行文件,然后再将可执行文件下载到连接到 FPGA 中的 MicroBlaze MCS IP 核上运行。

5 FPGA 中常见的嵌入式系统 IP —— MicroBlaze MCS IP 核

        MicroBlaze MCS 是 Xilinx 公司提供的一个用于控制器应用的完整处理器系统。它是高度集成的,包括 MicroBlaze 处理器、用于程序和数据存储的本地存储器以及实现一组标准外围设备的紧密耦合 I/O 模块。


第二部分  Xilinx SDK 开发与调试流程(基于 MicroBlaze MCS IP 核)

1 创建一个 Xilinx SDK 工程

1.1 使用 vivado 2018.2,打开一个 vivado 工程

         注意:如果 Vivado 工程中没有使用 MicroBlaze MCS IP 核或其他支持的处理器核(如 ARM Cortex-A9 或 ARM Cortex-R5),则无法创建 SDK 项目。SDK 是用于与处理器系统相关的嵌入式软件开发工具,因此需要至少一个处理器核的支持才能进行嵌入式软件开发。

1.2 导出 .hdf 文件

①依次点击左上角 File -> Export -> Export Hardware:

② 选择文件的导出路径:

         可以在 vivado 工程根目录下创建一个“sdk”的文件夹,将 .hdf 导出到该文件夹中,以便后续Xilinx SDK 开发使用。这里勾选上“Include bitstream”,方便后续的调试工作。

 注:.hdf 文件的生成对于嵌入式系统开发非常重要。在嵌入式系统开发中,通常使用处理器系统来运行软件应用程序,并与 FPGA 的硬件逻辑进行交互。通过将 FPGA 的硬件配置信息和处理器系统的配置信息打包在 .hdf 文件中,可以方便地在后续的开发环境中加载和使用硬件平台。

1.3 打开 Xilinx SDK 界面

①依次点击左上角 File -> Launch SDK:

② 选择 Exported Location(导出位置)和 Workspace(工作空间):

        Exported Location(导出位置)是指 Vivado 导出的硬件配置和信息的存放位置,即 .hdf 文件的存放目录。在打开 SDK 时,SDK 将会读取 .hdf 文件中的信息,以便正确配置 FPGA 和处理器系统。

        Workspace(工作空间)指 SDK 项目的工作空间目录,用于存放嵌入式软件项目和相关文件。可以理解为嵌入式系统软件项目的项目根目录。这里我在“sdk”文件夹下创建文件夹“elf”。

③弹出新窗口 Xilinx SDK 界面:

        在打开 Xilinx SDK 界面后,自动创建了 xxxx_hw_platform_0,该项是 Xilinx SDK 通过之前生成的 .hdf 文件创建的一种 project——"Hardware Platform Specification"(硬件平台规范)。这里我们不必理会它,在接下来的步骤中我们自行创建。

        目前为止,我们已经创建出一个 Xilinx SDK 工程,接下来是进行嵌入式系统应用程序的创建与开发。

2 创建与开发嵌入式程序

2.1 创建 HPS 项目(Hardware Platform Specification 硬件平台规范)

①依次点击左上角 File -> New -> Project:

         项目类型选择 Xilinx 下的 Hardware Platform Specification。

②指定 .hdf 文件:

        Target Hardware Specification 选择之前导出的 .hdf 文件。

注:"Hardware Platform Specification"(硬件平台规范)是一个用于描述硬件平台的文件。它的作用是为 SDK 提供与硬件平台相关的信息,以便在嵌入式软件开发过程中正确配置和连接硬件资源。

当前项目视图:

         可以观察到我们创建的 HPS 项目和之前 SDK 软件自动创建的项目最左边图标一致,并且由于指定的 .hdf 文件相同,两个 HPS 下的内容基本是一样的。

2.2 创建 BSP 项目(Board Support Package 板卡支持包)

①依次点击左上角 File -> New -> Project:

        Hardware Platform 选择我们上一步中创建的HSP项目,Board Support Package OS选择  standalone 即可。

注:"Xilinx Board Support Package Project"(BSP 项目)是一个用于支持特定 Xilinx 开发板的项目类型。BSP 项目的主要作用是为特定的硬件平台提供驱动程序、配置和初始化代码,以便在该硬件平台上正确运行嵌入式软件应用程序。

②配置 Board Support Package Settings 界面:

        在创建 BSP 项目后,会自动弹出该界面,如果没有也可以通过点击上方菜单栏“Xinlinx -> Board Support Package Settings”进行设置。

        Overview 中可以选取需要的依赖包,如果没有需求可以默认都不勾选;

         drivers 下自动存在了一个"microblaze_l","microblaze_l" 选项的存在是因为我的硬件平台中包含了 MicroBlaze MCS IP 核, SDK 为该核自动生成相应的 drivers 设置。

当前项目视图:

 2.3 创建应用程序

①依次点击左上角 File -> New -> Application Project:

         这里的 Hardware Platform 选择之前创建的 HPS 项目,Board Support Package 选择Use existing,选择上一步创建的 BSP 项目。

②点击 Next,选择项目类型:

        这里我们直接选择 Empty Application。接下来就可以在该项目工程下进行 C 语言开发了。

当前项目视图:

 2.4 开发应用程序

①创建 Header File(头文件)和 Source File(源文件):

        右键项目目录下的 src。

②编译生成 ELF 文件:

        右键项目文件,点击 Build Project。

        Debug 目录下会生成一个 .elf 文件,该文件可用于嵌入式程序的调试。至此,嵌入式程序的开发过程已经完毕,接下来介绍嵌入式程序的调试。

3 调试嵌入式程序

3.1 将 vivado 工程生成的 bitstream 和 SDK 工程生成的 ELF 文件一同烧写到 FPGA 中

①点击工具栏的三个绿色方块图标,即 Program FPGA:

 ②配置选项之 Bitstream 和 BMM/MMI File:

        由于在导出 .hdf 文件的步骤中点击了“Include bitstream”,这里的 Bitstream 和 BMM/MMI File 将自动包含进来。

注:Bitstream 是 FPGA 的配置文件,描述了可编程逻辑的状态,而 BMM/MMI 文件是 FPGA 的物理资源和地址映射描述文件,指导 Vivado 工具将逻辑配置映射到 FPGA 的物理资源上。这两个文件共同确保 FPGA 设计的正确配置和功能。

③配置选项之 Software Configuration:

        点击 bootloop,下拉框中选中刚才在 Debug 目录下生成的 elf 文件。

注:"Software Configuration"(软件配置)选项可以用来指定 FPGA 启动时加载的软件镜像文件。这个选项的作用是在 FPGA 配置完成后,自动加载并运行嵌入式软件应用程序,以实现 FPGA 和处理器系统的初始化和启动。

        确保烧写器连接了计算机设备与 FPGA 硬件后,点击 Program 后便开启了烧写工作,该过程会将 bitstream 连同 elf 一起烧写到板卡上。

3.2 调试嵌入式程序

①右键 Debug 目录下的 elf 文件,点击 Debug As -> Launch on Hardware (System Debugger):

②在文本编辑区打开源代码文件,双击代码所在行的左侧边栏添加/删除断点;

③右键 Debug 窗口下的 System Debuger using Debug_nfhe_elf.elf on Local,点击 Relaunch 重新启动嵌入式程序:

         重新运行后成功停在断点处,说明进入了调试状态。

总结

        相比于开发,硬件的调试过程更为复杂,硬件的黑盒属性导致出现了问题很难通过表面现象进行分析,因此有效的调试手段必不可少。本文主要记录了自己对于 Xilinx SDK 软件进行嵌入式程序开发和调试的过程,欢迎大家交流问题,一起成长。

  • 12
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kennencool

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值