软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! 1.1 概述ZYNQ系列FPGA与其他系列FPGA最大的区别在于内部具有双核Cortex-A9硬核。本课详细讲解如何搭建一个最小的SOC系统,并且使用软件自带的工程HelloWorld工程、MemTest内存测试工程、DRAMTest内存测试工程、LWIP网络协议工程对SOC的基本外设进行测试。对工程搭建及ZYNQ IP参数配置细节进行了详细的说明,是SOC开发必看的课程,通过本课,你将掌握如何创建一个SOC最小系统工程与SDK软件的基本使用。 从本课开始,是裸机部分,如果你拿到的开发板,TF卡还插在开发板上,请拿掉后调试,否则程序依然会从TF卡启动,影响裸机调试。 1.2 最小系统分析这张图展示了我们需要构建的最小系统。并且下面的嵌入式实验会基于这个最小系统进行添加外设。 本实验中将会只使用到PS部分资源包括了ARM Cortex-A9、DDR3内存、一个UART串口。这就是我们的最小系统。首先我们程序会加载到DDR内存中,然后CPU一条一条执行,那么执行的情况我们可以通过串口打印观察。 1.3 硬件电路分析1、开发板使用资源 PS端DDR:例程使用PS端DDR。开发板PS端DDR容量为1GB(MZ7XA-7010mini内存为512MB)。 PS端网口:例程使用PS端一路网口。 PS端串口:例程使用PS端一路串口。
2、硬件连接 串口线:一端连接电脑串口,另一端连接开发板串口(USB-232)。 网口线:一端连接电脑网口,另一端连接开发板PS端网口。 1.4 创建VIVADO工程Step1:在打开的VIVADO软件界面,单击Create Project。 Step2:单击NEXT,在弹出的窗口中输入工程名和选择保存路径,然后单击Next。 Step3: Step4:选择芯片类型,然后单击OK。 MZ7XA-7010mini、MZ7XA-7010采用的FPGA芯片为XC7Z010-CLG400-1如下图所示设置: MZ7XA-7020、MZ7XB-7020采用的FPGA芯片为XC7Z020-CLG400-2如下图所示设置: Step5:单击Finish完成工程的创建 Step6:单击IP INTEGRATOR àCreate Block Design,输入System。 Step7: 单击下图中添加IP按钮 Step8:搜索单词ZYNQ选择ZYNQ7 Processing System,然后双击 Step9:添加进来了ZYNQ CPU IP,然后单击Run Block Automation ,直接单击OK。 Step10:在Block文件中,我们进行连线,将鼠标放在引脚处,鼠标变成铅笔后进行拖拽,连线如下图所示。连线的作用就是把PS的时钟可以接入PL部分,当然这里我们暂时用不到PL部分的资源。 Step11:双击ZYNQ CPU IP,对其进行设置,使其对应我们的硬件设置。我们需要做的就是修改时钟频率,内存类型和接口输出。需要注意的是,如果时钟频率与内存类型与我们的硬件不一致时,SDK中的程序会崩溃,运行不过来。在后续的调试中,如果遇到程序奔溃的情况需要检查下你的DDR型号,以及时钟频率。 正确的配置是成功的必要条件。 PS时钟配置: PS 输入频率:33.333333MHZ CPU PLL时钟:666.666666MHZ(这个时钟对于MZ7XA-7020和MZ7XB-7020最大可以设置776MHZ) PL Fabric Clocks-FCLK_CLK0:100MHZ 这个时钟可以用于提供给PLL使用 PS内存配置: 开发板内存型号配置: MZ7XA-7010mini的内存为512MB,选取内存型号(兼容型号):MT41K128M16 JT-125,如下图: MZ7XA-7020、MZ7XB-7020、MZ702N、MZ702P、MZ7015、MZ7035、MZ7100的内存型号为1024GB,选取内存型号(兼容型号):MT41K256M16RE-125如下图: Step12:设置外设接口,之后点击OK。 电压配置:首先注意,这里的Bank0对应原理图闪的Bank500,BANK1对应原理图上的Bank501 如果读者对于PS(ARM)的IO分配有不清楚的,请查看硬件硬件设计原理图,会阅读原理图也是开发必备技能之一。 Bank0 IO Voltage为LVCMOS3.3V Bank1 IO Voltage为LVCMOS1.8V QSPI FLASH配置: 以太网配置: SD(TF)卡配置: 串口配置: 以上配置完成后单击OK Step13:右击 system.bd, 单击Generate Output Products。 Step14:选择Global。等待生成成功,点确认。 Step15:右击system.bd 选择 Create HDL Wrapper 这步的作用是产生顶层的HDL文件 Step16:选择Leave Let Vivado manager wrapper and auto-update 然后单击OK Step17:我们查看源码的层次结构,可以看到system_wrapper.v就是顶层文件,调用了CPU. Step18:查看system_wrapper.v源码
可以看到顶层文件的源码调用了CPU接口,所有外设的接口也都是通过顶层文件引出来的。 Step19:Run Implementation(执行)->Generate Bitstream(生成bit流)。生成bit流文件成功。 1.5 新建SDK工程Step1: File->Export->Export Hardware,导出硬件。 Step2:勾选Include bitstream 直接单击OK Step3:File->Launch SDK加载到SDK Step4:单击OK 1.6 Hello World实验Step1:导出完成后如下图 图中标“1”区域:硬件部分,这部分就是从VIVADO定制好的SOC硬件 图中标“2”区域:这部分是硬件的地址空间分配 Step2:选择File->New->Application Project Step3:工程命名为HelloWorld,然后单击NEXT Step4:系统里面有很多自带的测试程序,本次就用自带的Helloworld程序做测试,单击Finish。 选项“Empty Application” 创建一个空的SDK工程。 选项“Hello World” “lwIP Echo Server”等是系统自带的测试工程,可以用来测试串口、网口、内存等。 选项“Zynq FSBL”在固化文件时使用。 Step5:完成后 Step6:右击HelloWorld->Generate linker Script
Step8:进入调试前,需要给开发板通电;连接好开发板上的串口(USB-232),查看串口号(设备管理器中查看);连接PS端的网口。 Step10:双击Xilinx C/C++ application(System Debugger) 这个位置新建,生成HelloWorld的调试文件 Step11:然后进行如下设置 Step12:进入SDK调试界面 1、启动2、暂停3、停止4、代码5、信息控制台6、调试变量 Step13:启用系统自带的串口调试助手,进行相关的设置。 图中标“1”:系统自带的串口调试助手窗口。 图中标“2”:创建一个串口连接。 图中标“3”:串口参数设置(查看设备管理器中串口号)。 Step13:单击运行,查看输出结果 1.7 MemTest内存测试程序MemTest内存测试程序工程建立方法与HelloWorld工程建立方法相同。 Step1:新建一个名为Mem_Test的工程 Step2:仍然采用自带的测试函数测试 Step3:Debug Configurations中,双击Xilinx C/C++ application(System Debugger) 这个位置新建,生成Mem_Test的调试文件 Step4:测试结果 1.8 DRAMTest内存测试程序DRAM_Test内存测试程序工程建立方法与HelloWorld工程建立方法相同。 Step1:新建一个名为DRAM_Test的工程 Step2:仍然采用自带的测试函数测试 Step3:Debug Configurations中,双击Xilinx C/C++ application(System Debugger) 这个位置新建,生成DRAM_Test的调试文件 Step4:测试结果 根据提示可以在控制台中输入相关序号按回车进行(r,i测试会有一部分错误,和程序空间有关系) 1.9 LWIP协议对千兆网口测试LWIP千兆网口测试工程建立方法与HelloWorld工程建立方法相同。 Step1:新建一个名为LWIP_Test的工程 Step2:选择LWIP Echo Server 之后单击Finish 注意! MZ7X系列工业级开发板板载网口芯片是RTL8211FDI,由于默认的驱动不支持 RTL8211 FDI的寄存器配置,所以无法支持自动适应速度 (通过自己修改库可以实现自动适应但是工作量大,考虑到投入时间和产出比,这里就不修改了)。所以需要手动修改 LWIP 库让网口芯片工作于1000Mbps。 修改如下所示: 出现如下界面。 单击lwip,将temac_adapter_options->phy_link_speed 设置为 1000Mbps(定速模式)。点击OK,设置完成。 选中bspà右键à Re-generate BSP Sources。重新生成一下BSP包(一般情况下,修改完会自动更新,如果没有更新,手动更新一下)。 Step3:Debug Configurations中,双击Xilinx C/C++ application(System Debugger) 这个位置新建,生成DRAM_Test的调试文件 Step4:运行之后的串口打印信息。从打印信息可以看出,开发板的IP地址是192.168.1.10。 Step5:用网络助手实现回传测试。 设置电脑的IP地址192.168.1.100 网络调试助手: 本地主机地址à电脑的IP地址 远程主机地址à开发板IP地址 1.10 使用快捷按钮调试瓢虫图标是debug,三角形图标是运行模式,可以方便调试。 1.11 固化程序ZYNQ程序固化的详细步骤在“01_example_FPGA_BASE” 之 “CH05 FPGA程序的固化和下载”中有详细介绍,这里不再累述。 |
扫描关注,了解最新资讯