[X]关闭

[米联客-XILINX-H3_CZ08_7100] FPGA_SDK入门篇连载-01 Vitis Soc开发入门

文档创建者:FPGA课程
浏览次数:403
最后更新:2024-09-23
文档课程分类-AMD-ZYNQ
AMD-ZYNQ: ZYNQ-SOC » 1_SDK应用方案(仅旗舰型号) » 1-SDK基础入门方案
本帖最后由 FPGA课程 于 2024-9-23 18:15 编辑

软件版本:VIVADO2021.1
操作系统:WIN10 64bit
硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA
实验平台:米联客-MLK-H3-CZ08-7100开发板
板卡获取平台:https://milianke.tmall.com/
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!

1概述        
        本实验是我们开始XILINX ZYNQ SOC的第一个入门demo。
        实验目的:
        1:掌握基于vitis-vivado创建SOC工程
        2:掌握基于图形化Block Design的设计方法
        3:掌握ZYNQ IP核的调用
        4:掌握ZYNQ IP核的参数配置方法
        5:掌握生成一个基于ZYNQ IP核的最小系统方法
        6:导出硬件参数xsa文件
        7:使用vitis-sdk创建sdk base工程
        8:使用vitis-sdk创建自带sdk helloworld APP工程
        10:使用vitis-sdk创建以太网测试程序
2系统框图
本方案构建基于ZYNQ IP核的最小系统,包含了PS DDR、FLASH、EMMC、TF-Card、Uart、USB、ETH以太网
image.jpg
3搭建SOC系统工程
Vitis-vivado和其他版本的vivado使用方法基本一致,只有最后导出的xsa文件是vitis才有的文件格式。对于初学者,请认真学习以下每一个步骤。
3.1创建soc_prj工程1:创建工程路径
米联客新版本资料里面SOC工程一级目录一般包含3个文件夹,用于管理各类文件:
soc_hw:文件夹放system.xsa文件
soc_prj:文件夹放FPGA工程
soc_sdk:文件夹放SDK相关的开发文件
image.jpg
2:启动vivado
image.jpg
image.jpg
3:创建soc硬件工程
由于已经创建好了路径,所以不需要让软件再次创建以工程命名的路径
image.jpg
image.jpg
这一步选择芯片型号,一定要选择和自己开发板相匹配的型号(本实验使用的开发平台是米联客 MLK_H3_CZ08- 7100-MZ7100FC 对应的芯片型号为 xc7z100ffg900-2)
image.jpg

image.jpg
image.jpg
3.2创建BD图形化模块
1:创建空的BD
56c69c139edd445ab03d11a3cd7d92dd.jpg
米联客的BD统一命名为system
bd8cbb3821024a34ad4aa9c92ca744c5.jpg
单击“+”号
d9883f645264435ea5932650b8502a0d.jpg
双击ZYNQ7 Processing System
0eeedbaca62341d6bd6c516ca9bcbe0e.jpg
68cdc7d75444459b9c884745c0acd4c7.jpg
2:配置ZYNQ IP的参数
双击IP对IP的各个功能参数进行配置,这个配置必须参考硬件原理图完成,所以FPGA或者SOC工程师必须具备一定的硬件分析能力,可以阅读原理图,实现对硬件资料在软件上的定义分配。
20c4abf9f61a4650b5324cd0e8c5fafb.jpg
这里我们使用已经提供的配置文件对参数进行配置。
293683eeecee4003b53462c77341047a.jpg
在本demo配套工程的uisrc/06/doc路径下,提供了配置参数
1f7a3a80f30a4acbb8535c8eed762cc6.jpg
等待配置完成即可
5bb536620dc34b209b98a6618f691dc4.jpg
3.3ZYNQ IP的配置参数
以上通过已经提供的配置参数,快速完成了IP的基本配置。这个过程在后续的demo中不再重复,后续demo会对用到的资源说明分析,或对IP部分功能重新配置。以下我们针对主要的外设资源对IP的配置说明。
1:MIO的BANK电压
米联客ZYNQ系列核心板的MIO BANK0对应核心板硬件原理图上的BANK500设置3.3V, MIO BANK1对应核心板硬件原理图上的BANK501设置1.8V
a9cd87ede7484a42861686b4dd01f8e1.jpg
2:MIO接口功能定义2-1:QSPI-FLASH接口
cd967853db124ddcaf4569a26dee7260.jpg
2-2:PS以太网接口
9df7f11681654a4fb2dba4881f10c7d6.jpg
2-3:USB接口
4a522f7084e64919848f73506b49727a.jpg
2-4:SDIO0-EMMC
3f0462ed2a9b4b949b166db0bcbb4845.jpg
2-5:SDIO1-SD卡
844d18d0c79a40aea41fe11d520fef3e.jpg
2-6:串口1
77713a4c00b54cc690278b656fbe90c4.jpg

2-7:DDR配置
MLK_H3_CZ08-7100-MZ7100FC 的内存焊接 2 片 256M 的 DDR3L 设置如下:
c217f820555244d891521cde46df4848.jpg
2-8:时钟配置
0ee33ae3f3b942ffb2d62ff9d1d0bb87.jpg
相关PL的设置本demo没有用到,后面相关demo用到的时候再进行配置

3.4 ZYNQ IP的配置参数保存
对于配置好的参数可以保存下来,方便后面新建工程使用,减少重复步骤
62fd1a8df97d4cf4b4f93ea8bfe88f8f.jpg
be84e912170641b89c04c2ba740d7f3d.jpg
3.5自动连线
完成配置后,可以自动连线,让软件自动引出接口
b83e801ffec54b51bb8156ac4a8feae2.jpg
这里需要注意:VIVADO的自动化连线可以完成一些简单的信号连线设计,前提是开发者必须知道原理,否则自动连线可能会导致错误。
3.6检验BD工程
通过Validate Design可以快速初步排查BD工程是否有错误
a21257ad892249b09d772a4c01b972ac.jpg
1c03f6f7d7894c6093423661cb9705a3.jpg
3.7地址空间分配
由于没有使用任何PL资源,本demo中不需要分配地址
6db9927a09cc498a90958d7d7bdd9874.jpg
3.8编译并导出平台文件
1:单击Block文件à右键àGenerate the Output ProductsàGlobalàGenerate。
49d4e5e08b5f4315b98568ebb1d01e28.jpg
79a490e43bf7495590a217db7750a611.jpg
ca17f4465d7043febb93f8e1b1a815f1.jpg
4eace358bf424dbdac65b1335961861d.jpg
2:单击Block文件à右键à Create a HDL wrapper(生成HDL顶层文件)àLet vivado manager wrapper and auto-update(自动更新)。
右击system.bd创建Create HDL Wrapper
1078108d925a48458fa408687c6cf91c.jpg
b530826948b548d494148fd6d8ca6925.jpg
该文件就是一个FPGA Verilog文件。而BD图形化工程,VIVADO把BD封装成了一个模块。顶层的verilog文件通过模块接口就可以调用BD图形代码了。
b6a6322a8cfa4c50bbd4fed3b4f19f49.jpg
eb543e40fee6442a9a144a3449725c4e.jpg
3:添加fpga_pin.xdc文件
该文件主要是对bit设置压缩,减少bit的大小
4ab3ecf42bc84ea0b0cf34314b62b194.jpg
这个文件用户可以自己创建,也可以选择uisrc/04_pin路径下已经提供的fpga_pin.xdc文件
e77604125aab4dba86cb7c2fb06fbc1a.jpg
f0bdf197f8d040369bd9e289cc396039.jpg
4:生成Bit文件。
f6a237793c3c4ce6bf569c6ea6b222b6.jpg
单击Cancel
ed0f891e5d9945578e5dc12588d7150c.jpg
5:导出到硬件: FileàExport HardwareàInclude bitstream
d0d281067bf844c185329d5817c9524e.jpg
9fb27a383e85461dbec51c1aff87d305.jpg
a863e174117b42e8b161a795855e6671.jpg
b36991ee94b6462f8ca4a97251e06f7e.jpg
06b73507e049446ead07e46e337d787d.jpg
6:导出完成后,对应工程路径的soc_hw路径下有硬件平台文件:system_wrapper.xsa的文件。根据硬件平台文件system_wrapper.xsa来创建需要Platform平台。
23bc50b5af6d44de9bbba703dae90ba4.jpg

4搭建Vitis-sdk工程
创建soc_base sdk platform和APP工程。
4.1创建SDK Platform工程
启动Vitis-Sdk
d0732f06a1ff4b3981aefc57995b8d6b.jpg
设置好路径
60348539c044408ab1ee03a88f0b4651.jpg
米联客资料中的路径规范如下图:
soc_prj里面是基于SOC的硬件工程源码
soc_hw里面是xsa格式文件,soc_prj编译会导出system_wrapper.xsa到这个文件
soc_sdk里面是裸机的sdk工程,sdk工程创建依赖soc_hw中的system_wrapper.xsa
82a018febf1a4c62bf7390c56293dfa3.jpg
单击Create Platform Project 创建基于开发平台的工程
2893eabde1a147f0ba703fb2f9d10ed4.jpg
8c50548570434e5f9b35ef3097cc01c2.jpg
添加之前创建的system_wrapper.xsa文件
3f64a24268104df3abab0e5585ca6029.jpg
创建完成后
26de7e35a28c477c922482b97a58b57d.jpg
LWIP库的修改:
1:ZU系以及米联客ZYNQ系列开发板列网口芯片是工业级RTL8211FDI(商业级为RTL8211FD)(国产YT8531DH或者YT8531DC完全兼容RTL8211,未来也会使用国产PHY芯片,使用方法一样),由于默认的驱动不支持,需要手动自己修改库文件。我们这里已经提供了修改好的库,解压到vivado的安装路径下的对于路径下:
feff296b87ef4e938bff423aa0b4002b.jpg
dcd66540db1b4c40b1a97c9b7927e104.jpg
修改好后,需要关闭vitis-sdk然后重新打开sdk,否则无法识别修改的库

3:对lwip库参数修改以达到最佳性能。
本例程使用 RAW API,即函数调用不依赖操作系统。传输效率也比 SOCKET API 高,(具体可参考 xapp1026)。 将 use_axieth_on_zynq 和 use_emaclite_on_zynq 设为 0。如下图所示。
2472e138b5244188af22e8b2cda081f4.jpg
修改 lwip_memory_options设置,将mem_size,memp_n_pbuf,mem_n_tcp_pcb,memp_n_tcp_seg这 4 个参数值设大,这样会提高 TCP 传输效率。如下图所示。
869cf21bc22343c0babe89d28a5a7f45.jpg
修改pbuf_options设置,将pbuf_pool_size设大,增加可用的pbuf数量,这样同样会提高TCP传输效率。如下 图所示。
4bdf607165af46da90d8324c2e6c1802.jpg
修改tcp_options设置,将tcp_snd_buf,tcp_wnd参数设大,这样同样会提高TCP传输效率。如下图所示。
385e32aa70f7417aa7c07e16d278c2fd.jpg
修改temac_adapter_options设置,将n_rx_descriptors和n_tx_descriptors参数设大。这样可以提高zynq内部emac dma的数据迁移效率,同样能提高TCP传输效率。如下图所示。
45b27183fde746c6976363124327401b.jpg

最后,右击soc_base完成编译
19d4b14664da4cf4a20f20db01342182.jpg

4.2创建hello_world APP工程
image.jpg
image.jpg
image.jpg
可以看到,工程模板包括:
1-空的C或者C++工程
2-Hello World测试工程
3-lwip echo Server工程
4-lwip TCP Perf Client TCP 性能测试
等等….
我们开发的SDK应用方案大多都基于XILINX SDK模板来实现,本方案通过模板创建要给HelloWorld工程
image.jpg
image.jpg
第一种编译方法,右击编译只产生elf文件
image.jpg
image.jpg
第二种编译方法,右击编译可以产生elf文件,和BOOT.BIN文件,但是时间较长一些
image.jpg
image.jpg
4.3以太网测试
1:创建lwip echo APP工程
用同样的方法创建lwip_echo_server
image.jpg
2:创建lwip_tcp_perf_client APP工程
image.jpg 5程序分析
image.jpg
hello_word APP就是简单通过串口输出一些字符信息,本文重点演示软件使用方法,程序代码不做分析,后面SDK高级篇到以太网部分,用到相关功能再分析代码。
6方案演示
6.1硬件准备
本实验需要用到 JTAG 下载器、USB 转串口外设,另外需要把核心板上的 2P模式开关设置到 JTAG 模式,即 ON ON (注意新版本的 MLK_H3_CZ08-7100-MZ7100FC),支持 JTAG 模式,对于老版本的核心板,JTAG 调试的时候 一定要拔掉 TF 卡,并且设置模式开关为 OFF OFF)
image.jpg
6.2 hello_world实验结果
为了观察实现结果,需要打开串口
image.jpg
image.jpg
如果不清楚串口号的,可以查看下设备管理器,如果发现没装串口驱动的安装上驱动
image.jpg
选中hello_world APP并且右击,然后单击Debug As->Debug Configuration
image.jpg
双击Single Application Debug,之后选Debug
image.jpg
程序运行停在debug入口,单击file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml9028/wps92.jpg运行
image.jpg
输出打印结果
image.jpg
6.3以太网测试
1:lwip_echo_server APP实验结果
给开发板通电,连接网口,并且根据以下步骤,设置电脑端IP地址
image.jpg
image.jpg
image.jpg
调试程序
image.jpg
image.jpg
打开网络调试助手,并且设置如下
image.jpg
单击发送数据
image.jpg
2:lwip_tcp_perf_server APP实验结果
给开发板通电,连接网口, 并且根据以下步骤,设置电脑端IP地址
image.jpg
image.jpg
image.jpg
打开网络调试助手,设置接收数据不显示,否则速度太快会卡死
image.jpg
调试程序
image.jpg
image.jpg
image.jpg








image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
image.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则