微处理器与嵌入式设备——SoC平台环境搭建

实验目的

  1. 了解SoC平台环境搭建的具体操作流程

  2. 学习Xilinx Vivado&SDK 2017.3工具的使用

  3. 熟悉SoC平台环境搭建过程和工作原理

实验内容

以PS与PL协同设计实现GPIO为例,搭建SoC平台环境。

将FPGA当做一个PS处理器的外设,通过寄存器地址映射到PS的寻址空间。在处理器中使用C程序访问这些寄存器,来实现软件和逻辑结合的协同设计的效果。

步骤可简述为:在VIVADO中配置ZYNQ处理器,做好FPGA的外设,互联完成之后生成BIT流文件下载到板子。在SDK环境下开发好软件之后,进行在线调试运行。

实验步骤

  1. 打开桌面VIVADO 2017.3,点击Create
    Project创建新工程。为新工程命名,选择工程保存路径,点击Next。选择芯片xc7z020clg484-1,点击Next
    → Finish。点击Create Block Design,创建块设计,并命名;

  2. 在右侧Diagram窗口空白处右击 → Add IP。搜索ZYNQ,双击ZYNQ7 Processing
    System,添加ZYNQ处理器,并点击Run Block Automation,勾选处理器→
    点击OK;

  3. 再添加两个GPIO核,在Diagram窗口空白处右击 → Add IP → 搜索GPIO →
    双击。操作两次,添加两个AXI GPIO核,点击Run Connection
    Automation,勾选All
    Automation,点击OK,进行自动配置。自动连接之后在空白处右击选择Regenerate
    Layout,重新布局;

  4. 双击ZYNQ处理器核,进行配置,更改DDR型号为MT41K256M16 RE-15E,将Bank1
    I/O电平设为1.8V,勾选Uart1,用于通过串口查看程序打印信息;

  5. 将GPIO IP核的名字和端口名称修改为LED和SW。双击LED
    IP核,配置LED为输出,GPIO Width设置为8,对应8个LED灯,点击OK。双击SW
    IP核,配置SW为输入,GPIO Width设置为8,对应8个拨码开关,点击OK;

  6. 新建约束文件:右击Constraints → Add Sources → 点击Next—Create
    File,为文件命名,点击OK →
    Finish。根据EES331用户手册中LED和SW的管脚约束表,在PINS_SET.xdc中添加引脚与电平约束并保存;

  7. 生成顶层文件:先右击system → Generate Output Products →
    Generate,再右击system → Create HDL Wrapper →
    OK。Vivado会为IP子系统生成一个顶层文件,以便对该系统进行综合、实现并生成比特流;

  8. 工程配置完成,点击左下侧Generate Bitstream生成比特流,点击Yes →
    OK,等待比特流生成。若没有其他错误,比特流生成完成后直接关闭弹出的窗口或选择查看报告;

  9. 硬件工程设计好之后,可在以下窗口中看到系统分配给外设的地址。接下来将硬件工程导出到SDK,在SDK中进行软件编译与运行(注:不要单独打开SDK,是在VIVADO中导出)。VIVADO
    -> File → Export Hardware Design to
    SDK,导出硬件到SDK,打钩,包括比特流,点击OK;

  10. 打开SDK:File → Launch SDK →
    OK,进入SDK界面。在SDK中新建工程对LED和SW进行编程,实现相应功能。为新工程命名,并产生相应的BSP
    → 注意选Next → 选择空工程 → Finish;

  11. 在新建的工程中添加源文件,新建Source File或者Header
    File,为文件命名,注意要跟上文件类型.c或.h,点击Finish,在源文件中添加代码;

  12. 硬件和软件设计好之后,保存工程,接下来调试和运行程序,运行之前先把板子的上所有拨码开关拨到下面。使用USB线连接PC机和开发板J3端口(JTAG/PS_UART),打开板子开关,在Vivado中点击左下角Open
    Hardware Manager → Open target → Auto Connection;

  13. 若连接不上板子

  14. 重启板子或电脑:开关断开或按下板子上的复位按钮(LED和数码管旁边S3/POR(B5))

  15. 杀进程:打开任务管理器------进程------hw_server.exe

  16. 下载比特流:点击Program
    device,在弹出的窗口中找到工程的比特流,比特流文件在工程中的路径为:project_name/project_name.runs/impl_1/system_wrapper.bit,如下图,点击Program下载比特流到板子。

  17. 若运行程序,则右击工程------Run As ------Launch on Hardware(GDB)

  18. 若调试程序,则右击工程------Debug As------Launch on Hardware(GDB)

  19. 查看串口打印:使用桌面串口工具Putty,设置波特率和端口号。

  20. 端口号查看方式:右击桌面电脑/计算机 → 管理 → 设备管理器 → 端口

  21. 若工程正确,可看到8个LED灯循环闪烁,向上拨动任意一个拨码开关时,流水灯运行到最后一个LD7时停止。

实验结果

硬软件的配置和例程的运行

在配置好各个IP核,完成连线并且添加约束文件后,点击生成定成文件,随后生成比特流。此步骤是容易出现问题的步骤,主要原因可能是由于文件目录,以及前期的配置出现了问题。生成成功的结果如下所示:

至此硬件部分的配置结束,我们将Bit流导出到SDK中进行软件的编译和运行。代码已经给出,我们可以直接将其添加到工程中。

D:\QQ接收的文件\MobileFile\809AD65781F18525109073DEB36B7DA2.png

随后软件和硬件的配置工作都已经完成,我们将进行板级验证,使用USB线连接PC机和开发板J3端口,运行之前先把板子的上所有拨码开关拨到下面。在Vivado中连接板子。如果出现了连接不上的问题,是由于开发板,数据线,电脑USB接口的问题。此时可以将开关断开或按下板子上的复位按钮(LED和数码管旁边S3/POR(B5)),随后打开任务管理器将进程中的hw_server.exe结束。数次尝试后往往是开发板。数据线或者是USB接口的问题。

连接成功如下所示:

D:\QQ接收的文件\MobileFile\CF2CEE8E7510E1E127A9B22FC47A3B91.png

然后点击Program
device,将Bit流上传到板子,在SDK中运行或者调试程序。我们可以看到LED灯循环闪烁,向上拨动任意一个拨码开关时,流水灯运行到LD7时停止。基本的结果如下所示:

D:\QQ接收的文件\MobileFile\Screenshot_20210503_120551.jpg

程序运行后,我们可以通过串口工具查看程序的运行状态,串口号选择COM12或者COM11,波特率设置为115200,输出的语句已经在main函数中给出,由此可以查看程序的运行状态。

倒序点亮流水灯

首先分析原有程序的功能,下图给出的是点亮LED流水灯函数的功能说明:

修改程序如下所示,以期达到流水灯的效果:

即首先点亮最后一个LED,随后逐次递减,由于环境中没有负数的概念,当Ledbit=0,再次执行Ledbit—会导致反向溢出,所以将判断条件改为:Ledbit<
Gpio_Width。

实验总结

在本次实验中,我们了解SoC平台环境搭建的具体操作流程,学习Xilinx
Vivado&SDK 2017.3工具的使用,熟悉SoC平台环境搭建过程和工作原理。

在实验中,了解了软件和硬件的配置方法,和板级验证的方法。配置GPIO来实现流水灯,并且通过串口查看程序的运行状态。

特别的,通过使用debug调试程序,才能发现程序中没有负数的概念,才能实现逆序的流水灯。

实验思考题

  1. ZYNQ7000中提供了哪几种实现GPIO的方式,这几种之间有什么区别与联系?
  1. ZYNQ 7000中三种实现GPIO的方式,分别为MIO、EMIO和IP方式。

  2. MIO:多功能IO接口,属于ZYNQ的PS部分,在芯片外部有54个引脚。这些引脚可以用在GPIO、SPI、UART、TIMER、Ethernet、USB等功能上,每个引脚都同时具有多种功能,故叫多功能。

  3. EMIO:扩展MIO,依然属于ZYNQ的PS部分,只是连接到了PL上,再从PL的引脚连到芯片外面实现数据输入输出。当我们想通过PS来访问PL又不想浪费AXI总线时,就通过EMIO接口来访问。

  4. 在54个I/O中,有一些只能用于MIO,大部分可以用于MIO与EMIO,一些接口信号线只能通过EMIO访问。

  5. MIO实现的GPIO需要在做PCB板卡之前就对功能有所限制;EMIO实现GPIO也使用PS,但是有FPGA的灵活。MIO和EMIO方式是使用PS部分的GPIO模块来实现GPIO功能的,支持54个MIO(可输出三态)、64个输入和128个输出(64个输出和64个输出使能)EMIO

  6. 而IP方式是在PL部分实现GPIO功能,PS部分通过MAXl_GP接口来控制该GPIOIP模块;

  1. Create Block Design过程中,添加IP核之后不点击Run BlockAutomation和Run Connection Automation,尝试自己连接线,理解其工作原理,并叙述。

首先添加三个部件

然后为FIXED_IO和DDR接口生成外部连接,点击Make
External,为FIXED_IO和DDR添加外部链接

双击接口可以进行配置:

同样的,为GPIO增添外部接口

为了使用GPIO和RESET,我们增加Processor System Reset(复位管理单元)和AXI
Interconnect(AXI互联模块)。

AXI Interconnect核心连接1个或者多个AXI内存映射的控制设备到1个或者多个内存映射的从设备中,它能管理多个AXI接口的IP。用户如果用到多个AXI
IP,那么只需PS将M_AXI_GP0引脚连接到AXI Interconnect
IP的SO0_AXI引脚,再将AXI Interconnect IP的输出分别连接到每个AXI
IP的S_AXI引脚即可,省去了多个AXI互联的管理问题。Processor System Reset
IP为其他IP提供复位信号。

连接完毕AXI IP后,还需进行IP的地址分配,以便PS部分对IP的调用。在Address
Editor一栏,直接点击左侧的Auto Assign Address按钮即可。

了解了这些特殊的工作方式之后,我们进行连接,并可以参照自动生成的连接图进行对比,大致结果如下所示:

image-20230623184916685

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值