1nnocent 发表于 2024-7-31 17:22

【Zynq UltraScale+MPSoC学习01】Helloworld最小系统的搭建

<div class='showpostmsg'> 本帖最后由 1nnocent 于 2024-8-5 11:38 编辑

<p>&nbsp;&nbsp;&nbsp;&nbsp;实现PS端通过串口输出HelloWorld功能,熟悉ZYNQ的操作流程。本次实验使用的芯片是Xilinx Zynq UltraScale+ MPSoC系列,型号为XCZU9CG FFVB1156。使用的软件:vivado2023.2、vitis2023.2。</p>

<p><strong><span style="font-size:18px;">MPSoC最小系统</span></strong></p>

<p><strong><span style="font-size:18px;">&nbsp; </span></strong><span style="font-size:18px;">&nbsp;</span>&nbsp;MPSoC最小系统包含ARM核心,DDR4,串口(用于打印PS端运行的信息)。</p>

<p> &nbsp;</p>

<p><strong><span style="font-size:18px;">step1 创建vivado工程</span></strong></p>

<p>&nbsp; &nbsp; 打开vivado2023.2后Create Project,根据提示给工程命名并选择工程存放路径,选择相应的芯片(xczu9cg-ffvb1156-2-i)。</p>

<p> &nbsp;</p>

<p><strong><span style="font-size:18px;">step2 使用IP Integrate Processing System</span></strong></p>

<p>&nbsp; &nbsp; 点击Create Block Design创建Block Design并命名,点击&ldquo;+&rdquo;号添加Zynq UltraScale+ MPSoC IP核。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 生成下图的IP核:</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 双击该IP核配置外设,此时IP核中maxihpm0_lpd_aclk、pl_clk0、pl_resetn0、M_AXI_HPM0_LPD等接口,这些接口在本实验中不需要,所以要将这些接口关掉。双击IP核后点击UART1,在跳出的窗口中勾选UART1并选择MIO24.25(在选择MIO时需要查看硬件原理图将需要使用的串口接到芯片的那个引脚)。</p>

<p><strong><span style="font-size:18px;">step3 生成顶层HDL</span></strong></p>

<p>&nbsp; &nbsp; &nbsp; 选中I/O Configuration 中设置IO bank的供电电压(需要查看硬件原理图设置相应的供电电压);选中Clock Configuration,点击Output Clocks取消&ldquo;PL0&rdquo;的勾选该部分给PL提供时钟,由于本实验没有使用PL端所以取消勾选。</p>

<p> &nbsp;&nbsp;&nbsp;</p>

<p>&nbsp; &nbsp; 选中DDR Configuration,根据硬件原理图使用的DDR颗粒进行相应的配置。</p>

<p>&nbsp; &nbsp; &nbsp; 选中PS-PL Configuration,取消Fabric Reset Enable和AXI HPM0 LPD。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 以上配置完成后点击OK得到的IP核如下图所示,之前不需要的接口都去掉了。</p>

<p> &nbsp;</p>

<p><strong><span style="font-size:18px;">step4 (生成Bitstream)并导出Hardware</span></strong></p>

<p>&nbsp; &nbsp; 本次实验没有使用PL端,所以不需要生成Bitstream,右击创建的Block Design并点击Generate Output Produces。</p>

<p> &nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;Generate Output Produces运行完成之后右击创建的Block Design并点击Create HDL Wrapper。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 点击File-&gt;Export-&gt;Export Hardware。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 由于没有Bitstream所以不需要include bitstream,命名并选择保存路径。</p>

<p> &nbsp;</p>

<p><strong><span style="font-size:18px;">step5 在Vitis中进行软件设计</span></strong></p>

<p>&nbsp; &nbsp; 点击Tools-&gt;Launch Vitis IDE打开Vitis进行设计。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 打开vitis后点击Open Workspace选择一个路径作为工作空间,建议在vivado工程目录下新建一个Vitis文件夹,并将生成的xsa文件放到该文件夹下,将这个文件夹设置为工作空间。</p>

<p> &nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;单击 Vitis Unified IDE 中的&ldquo;File&rdquo;(文件)选项,然后选中&ldquo;New Component&rdquo; &rarr; &ldquo;Platform&rdquo;(新建组件 &gt; 平台)。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 选择给Platform命名并选择保存路径后选中xsa文件的路径。</p>

<p> &nbsp;&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 创建完成之后左边VITIS窗口中可以看到Platform工程。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 点击自带历程选择HelloWorld</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 命名并选择保存路径。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 选择刚刚创建的Platform后一路Next直到Finish。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 创建完成之后左边VITIS窗口多了一个Application文件,点击Source-&gt;Src-&gt;helloworld.c可以查看代码。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 坐标FLOW窗口中选中Platform文件并进行编译。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 将文件换成Application文件,进行同上的编译操作。</p>

<p> &nbsp;</p>

<p><strong><span style="font-size:18px;">step6 板级验证</span></strong></p>

<p>&nbsp; &nbsp; 硬件上连接JTAG接口和UART接口,打开串口调试助手进行以下设置并打开串口:</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; FPGA开发板进行上电,Vitis中运行代码并观察串口输出现象。</p>

<p> &nbsp;</p>

<p>&nbsp; &nbsp; 成功运行HelloWorld程序。</p>

<p> &nbsp;</p>

<p><strong><span style="font-size:18px;">结语</span></strong></p>

<p>&nbsp; &nbsp; 本实验主要是熟悉Zynq PS端的开发过程,目前网络上找到的教程都是2023.2之前的版本,从2023.2之后的Vitis的操作界面和之前差别较大,跟着网络上旧版本的操作学习时都没能实现功能,最后结合官方文档《ug1400-vitis-embedded-zh-cn-2023.2.pdf》的操作流程后终于实现了HelloWorld功能。</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

Jacktang 发表于 2024-8-1 08:56

<p>跟着网络上旧版本的操作学习时都没能实现功能,看来新的Zynq PS变化挺多</p>

1nnocent 发表于 2024-8-1 09:14

Jacktang 发表于 2024-8-1 08:56
跟着网络上旧版本的操作学习时都没能实现功能,看来新的Zynq PS变化挺多

<p>主要还是刚开始学Zynq,而且用的软件版本也比较新。</p>

<p>vitis自带的串口调试也不知道在哪打开,直接用友善串口调试助手了</p>
页: [1]
查看完整版本: 【Zynq UltraScale+MPSoC学习01】Helloworld最小系统的搭建