[米联客-安路飞龙DR1-FPSOC] SDK入门篇连载-01 FPSoc开发入门

news/2025/3/15 7:13:58/文章来源:https://www.cnblogs.com/milianke/p/18343876

软件版本:Anlogic -TD5.9.1-DR1_ES1.1

操作系统:WIN10 64bit

硬件平台:适用安路(Anlogic)FPGA

实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板

板卡获取平台:https://milianke.tmall.com/

登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!

1概述

1.1背景介绍

由于 FPSoc属于异构器件,同时包含处理器(Central Processing UnitCPU)和可编程逻辑门阵列(Field Programmable Gate ArrayFPGA)。故其应用开发具备特殊性,通常需要两步:

1、在 TD 中进行PL 侧的FPGA 开发,包括硬核IP 的配置和使用RTL 设计数字逻辑电路,并生成对应的比特流文件。

2、在 FD 中进行PS 侧嵌入式应用的开发、调试(这里特指裸机应用,即直接运行在开发板中,而非开发板的操作系统中,以下提到的应用、app等用语都是指裸机应用)。对应的开发流程为:

由上图中可以看出,FPSoc的开发需要经过以下步骤:

1、硬件设计:开发FPSoc应用时,推荐在硬件设计中使用IP CatalogDesign Integrator 来实例化IP,以便能正确生成HPF 文件。两者的区别是前者一次只能定制一个IP,需要手动生成IP 间连接的RTL;后者为一个图形化的集成工具,能帮助用户生成 IP 间连接的RTL

2、生成比特流文件。该步骤可选,在需要用到p1端的情况下,需要完成此步骤。

3、导出 HPF 文件,该文件包含了硬件设计的信息,包括比特流文件(PL端的设计)和寄存器配置文件(PS 端的外设初始化)

4、在 FD 中创建platform 工程。

5、在 FD 中创建、调试app 工程:

其中1~3 TD 中进行,45 FD 中进行。

2实验目的

    本实验是我们开始Anlogic FPSoc学习的第一个入门demo

    实验目的:

    1:掌握基于FD-TD创建SoC工程

    2:掌握基于图形化Design Intergrator的设计方法

    3:掌握ARM IP核的调用

    4:掌握ARM IP核的参数配置方法

    5:掌握生成一个基于ARM IP核的最小系统方法

    6:导出硬件参数HPF文件

    7:使用FD-TD创建soc base工程

    8:使用FD-TD创建自带sdk helloworld APP工程

    10:使用FD-TD创建以太网测试程序

2系统框图

本方案构建基于ARM IP核的最小系统,包含了PS DDRFLASHEMMCTF-CardUartUSBETH以太网

3搭建SoC系统工程

FPSoc中,CPU 资源作为整个SOC资源的一个硬核 IP(以下简称PS),与其他IP 的使用没有任何区别,可以对其接口、IO等进行定制,后文会详细介绍。IP 的定制在TD 中进行,可以使用IP Catalog Design Integrator 工具。

3.1创建soc_prj工程

1:创建工程路径

米联客新版本资料里面SoC工程一级目录一般包含3个文件夹,用于管理各类文件:

soc_hw:文件夹放hdf文件

soc_prj:文件夹放FPGA工程

soc_sdk:文件夹放SDK相关的开发文件

2:新建TD工程

双击打开TD软件

3:创建FPSoc硬件工程

由于已经创建好了路径,所以不需要让软件再次创建以工程命名的路径

这一步选择默认的FPGA芯片型号,指定整个TD工程的路径,输入工程名,我们米联客习惯使用fpga_prj作为TD工程的工程名,点击OK,工程创建完成。

3.2创建图形化模块

1:使用Design Integrator 工具

进入Design Integrator 工具界面

下面我们可以选择新建一个图形化界面设计文件,或者我们也可以直接导入已经完成的图形化界面工程。这里我们先点击新建。

我们米联客习惯将图形化界面设计文件命名为system,并且选择路径保存在/uisrc/01_rtl中方便管理和调用。

点击OK,创建成功。

点击+号,选择ARM定制IP

 

双击ARM Processor System IP(以下简称ARM IP

未配置的IP就已经添加成功,可自定义IP名,这边我们保持默认,其他IP的添加也相同,后面就不再赘述。

2:配置IP的参数

双击IPIP的各个功能参数进行配置,这个配置必须参考硬件原理图完成,所以FPGA或者SOC工程师必须具备一定的硬件分析能力,可以阅读原理图,实现对硬件资料在软件上的定义分配。

3.3 ARM IP的配置参数

以下我们针对主要的外设资源对IP的配置说明。

1:PSIOBANK电压

AD101开发板的MIO BANK200设置3.3V, 核心板硬件原理图上的BANK201设置1.8V

2:PSIO接口功能定义

2-1:QSPI-FLASH接口

2-2:PS以太网接口

2-3:USB接口

2-4:SDIO0-EMMC

2-5:SDIO1-SD

2-6:串口1

2-7:剩余IO

2-8:DDR配置

2-9:时钟配置

2-10:取消PS-PL交互接口

相关PL的设置本demo没有用到,后面相关demo用到的时候再进行配置,点击OK完成配置。

3.4完成连线

完成配置后,可以引出接口,右键该接口

选择Create Design Port,引出接口

该界面保持默认,点击Add,添加完成后点击Close

图形化界面部分配置完成

3.5检验BD工程

点击ValidateDesign可以快速初步排查工程是否有错误

点击Design Navigation,选择Generate Design,完成图形化界面到TD的同步。

点击Generate,完成同步

3.6地址空间分配

由于没有使用任何PL资源,本demo中不需要地址分配,后续用到了我们再详细介绍。

3.7编译并导出平台文件

1:回到TD界面,双击可查看自动生成的TD顶层文件,如果没有任何PL逻辑使用的情况下,此时就能直接编译。但是为了我们后续工程的可拓展性和可重复利用性,所以我们依旧添加TOP文件。

2:添加我们准备好的TOP文件,点击OK添加完成

3:右键->Set As Top注意该步骤非常重要,如果不设置,系统默认Generate产生的文件为Top文件,后续的demo中,会出现编译报接口错误的现象。

设置完成后,由于本demo不需要调用PL资源,所以不需要添加管教约束文件,直接编译即可。

4:依次双击,生成Bit文件。

5:导出到硬件: ProjectExport Hardware Platform

SoC 的应用开发过程中,需要将硬件设计信息通过文件的形式传递到软件开发工具(FD)中使用,该文件被称之为HPF(Hardware Platform File)文件。

6:勾选Include bitstream,位置选择/soc_hw,点击OK,导出成功

6:导出完成后,对应工程路径的soc_hw路径下有硬件平台文件:fpga_prj.hpf的文件。根据硬件平台文件fpga_prj.hpf来创建需要Platform平台。

4搭建SDK工程

创建soc_base sdk platformAPP工程。

4.1创建SDK Platform工程

双击打开FD软件

设置好路径/soc_sdk文件夹后点击Launch

米联客资料中的路径规范如下图:

soc_prj里面是基于SOC的硬件工程源码

soc_hw里面是hpf格式文件,soc_prj编译会导出fpga_prj.hpf到这个文件

soc_sdk里面是裸机的sdk工程,sdk工程创建依赖soc_hw中的fpga_prj.hpf

打开后,先显示的是Welcome界面,关闭

新建Platform Project

添加之前创建的hpf文件,名称我们根据米联客习惯,命名为soc_base,点击finish

创建完成后

展开soc_base可以看到

4.2创建hello_world APP工程

命名为hello_world,选择自带的工程模板,点击finish完成

添加完成后,点击build编译

编译完成后,等待测试

4.3以太网测试

1:创建lwip ping APP工程

创建lwip_ping工程,创建的时候发现缺少库文件,lwip工程需要添加库文件。

soc_base中添加lwip库,勾选lwip库文件

点击ok,确认添加成功

添加成功后,再次添加lwip_ping APP,发现没有报错,成功添加,build之后等待测试

5方案演示

5.1硬件准备

本实验需要用到JTAG下载器、USB转串口外设,另外需要把SW1模式开关设置到JTAG模式(模式开关错误,无法下载程序)

如下图所示把SW1模式开关切换到ON-ON,就是设置JTAG模式

注意:在使用FD OpenOCD调试之前,需要先关闭TD中的One Cable Hardware Server,否则One Cable处于占用状态,FD将无法进入调试模式。

点击stop server,关闭TD One Cable Server,点击Apply修改完需重新插拔一下载器

具体One Cable下载器的安装以及使用方法,可以参考《快速入门篇》,本章节不再重复赘述。One Cable下载器安装较为复杂,如果安装错误,将无法完成下载)

 

 

5.2hello_world实验结果

展开GDB OpenOCD Debugging,可以看到下方有我们的工程(目前仅支持此一种debug方式),点击debug

程序进入带触发状态。

此时,把串口线插入PS Uart接口,为了观察实现结果,需要打开串口。如果不清楚串口号的,可以查看下设备管理器,如果发现没装串口驱动的安装上驱动

FD软件中,连接上串口,点击OK

点击run,触发程序

成功输出Hello world

5.3以太网测试

给开发板通电,连接网口,并且根据以下步骤,设置电脑端IP地址

修改本地IP地址,确保与开发板在同一个IP域内,同时通过详细信息二次确认,防止IP被占用现象。

调试程序

打开命令终端,输入ping指令:ping 192.168.31.222 -tping指令用法如下

Ctrl+c结束

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/778278.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven 中 scope标签的作用以及引入本地jar包打包方法

1. scope标签的作用2、使用system标签 项目三方jar存放位置结构:pom.xml中引入三方jar: <dependency><groupId>test</groupId><artifactId>testa</artifactId><version>0.0.1</version><scope>system</scope><syst…

强大的USB协议分析工具

2020年最后一天了,感谢大家一年来对我文章的支持,有你们的支持就是我强大的动力。 今天来给大家介绍一个USB 协议分析软件LeCroy USB Advisor,软件安装包下载连接如下: 链接:https://pan.baidu.com/s/12qBCOjuy4i8kr1MHjBrfYQ 提取码:2rpx 这个软件对于USB协议学习有很大…

python用弹窗选文件

from tkinter.filedialog import askopenfilename file_path = askopenfilename() 这是我能找到的最简洁版本来源:https://blog.csdn.net/u014769180/article/details/84639775 from tkinter.filedialog import askopenfilenamefile_path = askopenfilename()这是我能找到的最…

D38 2-SAT CF27D Ring Road 2

视频链接:D38 2-SAT CF27D Ring Road 2_哔哩哔哩_bilibili CF27D Ring Road 2 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)#include <iostream> #include <cstring> #include <algorithm> using namespace std;const int N=205; int n,m,x[N],y[N]; i…

Linux的特殊权限

特殊权限是什么 在Linux中,特殊权限是指针对文件或目录的特殊权限设置,包括SetUID、SetGID和Sticky Bit。特殊权限说明SetUID Set User ID 当一个可执行文件被设置了SetUID权限后,当任何用户执行该文件时,文件的所有者权限会被赋予执行者,而不是执行者的权限。这使得用户可…

性能测试之内存瓶颈问题分析与调优

注意:内存问题是性能分析与调优非常常见的一类问题(内存不足/内存泄露/内存溢出等) 一、内存概念: 计算机的存储系统分为主存储系统(内存) 辅助存储系统(外存) 外存 :计算机的辅助存储器,包括硬盘、软盘、光盘、网络云盘等 【输入-键盘,鼠标,输出- 屏幕,音频 视频】…

【待做】【域渗透】获取域控方法总结

搭建虚拟环境 【域控】,192.168.10.3 【域成员】,192.168.10.4工具 mimikatz procdump64在域渗透中、作为渗透测试人员,获取域控的权限基本上可以获取整个内网的权限。在大多数情况下,攻击者可以通过定位域管理员所登录的服务器,利用漏洞获取服务器system权限,找到域管理…

南京大学计算机基础(四)踩坑笔记

第六周 缓冲区溢出章节 bang问题:每次输入的id将影响getbuf中的堆栈位置,用-u 12的ebp和-u 123的ebp位置就不一样。 注意汇编代码中不能出现a0(代表换行符),如果地址有a0就将它随便改改就行了(a0改为a8-0x8)。注意gdb如果不能重定向,可能是因为你修改了gdbinit:https://s…

【PythonRS】基于矢量点读取遥感影像波段值制作训练样本

在进行遥感定量反演或数据分析时,往往我们都具有矢量的真值,可能是点文件也可能是面文件,最重要的还是通过这个矢量获取影像中该区域的值,这样方便做波段分析以及后续的反演等流程。今天给大家分享一下如何通过点文件获取影像的波段值。​ 在进行遥感定量反演或数据…

17.python字符类型

python之字符类型字符串 (一)字符类型的符号: <class str> (二)查看字符类型语句:type()(三)常见的字符串类型语句: capitalize()、title()、count()、join、split、strip、strip、rstrip、startswith、startswith、endswith、find、rfind、replace、upper、…

SqlDbx客户端连接服务器Oracle数据库

查了很多文章,介绍的不对,走了好多弯路,最后整理一下,供参考 一、下载Oracle客户端1、SqlDbx如果是32位的,客户端也要下载32位的 2、Oracle客户端版本要和服务端版本一致(本例用的是12.1.0.2.0) 3、32位客户端下载地址:https://www.oracle.com/database/technologies/i…

Python异常处理机制

编程错误 编写程序时遇到的错误可大致分为 2 类,分别为语法错误和运行时错误。 语法错误 语法错误,也就是解析代码时出现的错误。当代码不符合Python语法规则时,Python解释器在解析时就会报出SyntaxError语法错误,与此同时还会明确指出最早探测到错误的语句。例如: print …