当前位置: 首页 > news >正文

基于DE1-SoC的My_First_oneAPI(二)

本期我们介绍在DE1-SoC开发板的FPGA上实现并部署Simple DMA和Simple Adder两个案例。

上一期我们从oneAPI CLI Samples Browser复制保存的Simple DMA是基于Quartus Pro的Nios V示例,无法直接用在DE1-SoC开发板上,因此这一节我们用的Simple DMA是基于Quartus Standard的Nios II 示例,后续会计划用新版Quartus Standard软件将DE1-SoC的oneAPI示例升级到Nios V。

注:请复制链接http://mail.terasic.com.cn/~bingxia/My_First_oneAPI_de1_soc.zip到浏览器去下载My_First_oneAPI_de1_soc BSP,内含example code。

一、配置Simple DMA IP

使用oneAPI DPC++/C++编译器可以将Simple DMA编译成RTL IP硬件模块,然后将RTL IP集成到FPGA,使用Plarform Designer可以将该IP核集成到设计中。

1. 打开Intel oneAPI命令窗口,切换到My_First_oneAPI_de1_soc\exmple_code\simple_dma\kernels\simple_dma路径,执行以下命令创建build文件夹,并指定FPGA为DE1-SoC开发板的5CSEMA5F31C6。

mkdir build && cd build

cmake .. -G "NMake Makefiles" -DFPGA_DEVICE=5CSEMA5F31C6

2. 执行nmake report编译DMA IP,生成IP组件及优化报告。

3. 打开My_First_oneAPI_de1_soc\exmple_code\simple_dma路径下的Quartus工程。

4. 从Quartus Tools菜单栏里打开Platform Designer,并打开simple_dma/nios2_system.qsys工程。

5. 在nios2_system.qsys里添加oneAPI -->simple_dma_report_di IP,并按下图所示连接,再完成Assign Base Addresses。

6. 点击Generate HDL-->Generate,生成HDL代码。

7. 编译Quartus工程。

8. 将编译生成的.sof文件烧录到FPGA。

9. 从Quartus Tools里打开Nios II Software Build Tools for Eclipse,workspace切换到simple_dma/software。

10. 右键点击simple_dma_bsp,选择Nios II > Generate BSP。

11. 右键点击simple_dma -->Run As --> 3 Nios II Hardware。

12. 在Nios II Console终端上会显示程序运行结果。

二、修改Simple DMA为Simple Adder

本节通过对Simple DMA设计进行扩展,添加基本算术功能,将其转换为Simple Adder。在保留原有DMA数据传输机制的同时引入两种类型的常量输入: c1--通过conduit接口提供;c2--通过CSR(Control and Status Register)配置。

在传输过程中,这些常量会被添加到数据中,这为如何在FPGA上集成数据处理和控制逻辑提供了一个示例。

接下来我们将解释如何配置和使用conduit接口与CSR接口以及它们之间的差异,并演示如何在Platform Designer中连接这些接口。我们还将介绍完整的开发流程,包括从SYCL(基于 C++ 的开放标准,用于简化异构计算如 CPU、GPU、FPGA 等并行设备的编程)示例代码编译到IP生成、Quartus集成、硬件配置以及在FPGA上验证结果。

  • conduit接口

SYCL示例代码(My_First_oneAPI_de1_soc\exmple_code\vector_add\kernels\vector_add\src\vector_add.cpp)如下,将其配置成conduit。

将代码转换为RTL IP后,该接口就可以在Platform Designer中看到。

导出conduit接口,并在DE1_SOC_golden_top.v文件中例化连接到DE1-SoC开发板的滑动开关。

  • 控制状态寄存器

常量c2使用控制状态寄存器(CSR)来定义。在内核中声明此变量时,不需要额外的参数,默认为控制状态寄存器(CSR)。 

c2的寄存器偏移自动产生,可在kernels/vector_add/build/vector_add.report.prj/include/kernel_headers/VectorAddTwoConst_register_map.h中找到。

  • 测试步骤

按照以下步骤在DE1-SoC开发板的FPGA上实现并部署Simple Adder。

1. 打开Intel oneAPI 命令窗口,执行chcp 65001命令将语言编码更改为UTF-8,并切换到My_First_oneAPI_de1_soc\exmple_code\vector_add\kernels\vector_add路径。

2. 执行以下命令创建并切换到build文件夹,以及指定FPGA为DE1-SoC开发板的5CSEMA5F31C6。

mkdir build && cd build

cmake .. -G "NMake Makefiles" -DFPGA_DEVICE=5CSEMA5F31C6

3. 执行nmake report命令编译Simple Adder IP,生成IP组件以及优化报告。

4. 打开DE1_SOC_golden_top.qpf工程。

5. 打开vector_add/nios2_system.qsys工程。

6. 添加oneAPI里的vector_add_report_di,并按下图所示连接。

7. 点击Generate HDL-->Generate生成HDL。

8. 编译Quartus工程,并将生成的.sof烧录到FPGA。

9. 运行Nios II Software Build Tools for Eclipse,将workspace切换到vector_add/software。

10. 右键点击vector_add_bsp,选择Nios II -->Generate BSP,生成BSP;右键点击vector_add选择Build Project编译工程。 

11. 右键点击vector_add,选择Run As > 3 Nios II Hardware,烧录.elf文件运行工程。然后在Nios II Console终端显示结果。

三、Q&A

1. Quartus Standard v23.1的Nios II Software Build Tools for Eclipse如果无法运行起来,请参考Getting Start Install Eclipse IDE into Nios EDS文档里的步骤安装Eclipse IDE。

2. vector_add Nios II工程无法编译,请参考Getting Start Install WSL安装WSL。

oneAPI · 目录

上一篇基于DE1-SoC的My_First_oneAPI(一)

阅读 90

留言

写留言

http://www.lryc.cn/news/574626.html

相关文章:

  • 黑马Day01-03集开始
  • 第24篇:Linux内核深度解析与OpenEuler 24.03实践指南
  • TCP/UDP协议深度解析(一):UDP特性与TCP确认应答以及重传机制
  • 交易期权先从买方开始
  • C8BJWD8BJV美光固态闪存HSA22HSA29
  • android脱糖
  • Kubernetes生命周期管理:深入理解 Pod 生命周期
  • python有哪些常用的GUI(图形用户界面)库及选择指南
  • Unity Text-Mesh Pro无法显示中文的问题
  • Android检测当前进程或者应用是否被调试
  • 安卓android com.google.android.material.tabs.TabLayout 设置下拉图标无法正常显示
  • 国产化条码类库Spire.Barcode教程:如何使用 C# 读取 PDF 中的条码(两种方法轻松实现)
  • 【数字后端】- 什么是NDR规则?
  • vscode打开.c文件后中文乱码
  • ros(一)使用消息传递图像+launch启动文件
  • 通过Prompt提示构建思维链
  • git操作练习(3)
  • WHAT - React Native 的 Expo Router
  • 华为云Flexus+DeepSeek征文|华为云ModelArts Studio:利用New API实现大模型网关与AI资产管理的无缝对接
  • 梳理React中的fiber架构
  • 学历信息查询API (IVYZ9A2B) 的对接实战 | 天远API
  • WPF/Net Core 简单显示PDF
  • WEB安全--Java安全--jsp webshell免杀1
  • 原子操作(CAS)
  • 【AI大模型】Spring AI 基于Redis实现对话持久存储详解
  • 打包上传到Linux部署并启动
  • 鸿蒙 FolderStack 组件全解析:折叠屏悬停布局开发指南
  • kvm console 的使用
  • linux网 络
  • 计算机基础和Java编程的练习题