• ZYNQ入门


    目录

    一、ZYNQ简介

    二、vivado工程

    ①创建工程

     ②添加设计文件

    ③生产顶层HDL模块

    ④生成 Bitstream 文件并导

     三、vitis工程

    ①启动vitis

     ②创建工程

    ③编译与下载


    一、ZYNQ简介

    ZYNQ 是赛灵思公司(Xilinx)推出的新一代全可编程片上系统(APSoC),它将处理器的软件可编程性与 FPGA 的硬件可编程性进行完美整合,以提供无与伦比的系统性能、灵活性与可扩展性。与传统SoC 解决方案不同的是,高度灵活的可编程逻辑(FPGA)可以实现系统的优化和差异化,允许添加定制外设与加速器,从而适应各种广泛的应用。

    ZYNQ芯片总统框图:

    ZYNQ 是由两个主要部分组成的:一个由双核 ARM Cortex-A9 为核心构成的处理系统(PS,
    Processing System)和FPGA 的可编程逻辑(PL, Programmable Logic)部分。

    ZYNQ 架构的简化模型如上图所示。

    PS 具有固定的架构,包含了处理器和系统的存储器;PL 是灵活的,由使用者定制外设。

    这里记录一下vivado和vitsi软件的使用过程。

    二、vivado工程

    ①创建工程

     进入到工程名字创建和位置指定

     

    选择开发板型号

    创建成功后,来到主界面

     

     Vivado 工程主界面中的主要子窗口:

    Flow Navigator:Flow Navigator 提供对命令和工具的访问,其包含从设计输入到生成比特流的整个过程。 在点击了相应的命令时,整个 Vivado 工程主界面的各个子窗口可能会作出相应的更改。

    数据窗口区域:这个区域显示的是设计源文件和数据相关的信息
            • Sources 窗口: 显示层次结构(Hierarchy)、 IP 源文件(IP Sources)、库(Libraries)和编译顺序(Compile Order)的视图。
            • Netlist 窗口: 提供分析后的(elaborated)或综合后的(synthesized)逻辑设计的分层视图。

    Properties 窗口: 显示有关所选逻辑对象或器件资源的特性信息

    工作空间(Workspace): 工作区显示了具有图形界面的窗口和需要更多屏幕空间的窗口,包括:

             • Project Summary。提供了当前工程的摘要信息,它在运行设计命令时动态地更新。
            • 用于显示和编辑基于文本的文件和报告的 Text Editor。
            • 原理图(Schematic)窗口。
            • 器件(Device)窗口。
            • 封装(Package)窗口。

    结果窗口区域:在 Vivado 中所运行的命令的状态和结果,显示在结果窗口区域中,这是一组子窗口的集合。在运行命令、生成消息、创建日志文件和报告文件时,相关信息将显示在此区域。

            • Tcl Console: 允许您输入 Tcl 命令,并查看以前的命令和输出的历史记录
            • Messages: 显示当前设计的所有消息,按进程和严重性分类,包括“Error”、“Critical
                    Warning”、“Warning”
            • Log: 显示由综合、实现和仿真 run 创建的日志文件。
            • Reports: 提供对整个设计流程中的活动 run 所生成的报告的快速访问。
            • Designs Runs: 管理当前工程的 runs。

    ⑥主工具栏: 主工具栏提供了对 Vivado中最常用命令的单击访问


    ⑦主菜单: 主菜单栏提供对 Vivado命令的访问


    ⑧窗口布局(Layout)选择器: Vivado 提供预定义的窗口布局,以方便设计过程中的各种任务。布局选择器使您能够轻松地更改窗口布局
     

     ②添加设计文件

    点击 Create Block Design,创建一个Block设计。名字可以不用改。

    然后点击add IP图标,添加IP核

    搜索zynq,在搜索结果列表中双击“ ZYNQ7 Processing System”

     出现如下图:

     可以双击processing_system7_0 ZYNQ7 Processing,配置相关参数,如下图


    在 Zynq Block Design 页面,显示了 Zynq 处理系统( PS)的各种可配置块,其中灰色部分是固定的,绿色部分是可配置的,按工程实际需求配置。可以直接单击各种可配置块(以绿色突出显示)进入相应的配置页面进行配置,也可以选择左侧的页导航面板进行系统配置。

    PS-PL Configuration:配置 PS-PL 接口,包括 AXI、 HP 和 ACP 总线接口


    Peripheral IO Pins:为不同的 I/O 外设选择 MIO/EMIO 配置


    MIO Configuration :为不同的 I/O 外设具体配置 MIO/EMIO


    Clock Configuration :配置 PS 输入时钟、外设时钟,以及 DDR 和 CPU 时钟


    DDR Configuration :设置 DDR 控制器配置信息


    SMC Timing Calculation :于执行 SMC 时序计算


    Interrupts :配置 PS-PL 中断端口。
     

     本次使用基本上不用设置,点击ok退出。

     点击上图中箭头所指示的位置“Run Block Automation”,会弹出如下图所示的对话框

     在该界面中可以选择自动连接 IP 模块的接口, 包括导出外部端口,甚至可以自动添加模块互联过
    程中所需的 IP。 本次设计中只有一个 IP 模块, 在左侧确认勾选 processing_system7_0,然后点击“ OK”。

    将FCLK_CLK0和M_AXI_GPO_ACLK连接起来。

     部分接口介绍:

    M_AXI_GP0:通用( General Purpose) AXI 接口,它包含了一组信号。 首字母 M 表示 PS 作为主机( Master), PL 中的外设作为从机( Slave) 

    M_AXI_GP0_ACLK :是M_AXI_GP0全局时钟信号,它是一个输入信号, M_AXI_GP0 接口的所有信号都是在这个全局时钟的上升沿采样的

    FCLK_CLK0 :PS 输出的时钟信号, 它将作为 PL 中外设模块的时钟源。 这个时钟由 PS 中的 IO PLL产生, 频率范围可以从 0.1 到 250MHz, 在配置 ZYNQ7 PS 的时候, 该时钟默认为 50MHz。

    FCLK_RESET0_N :由 PS 输出到 PL 的全局复位信号,低电平有效。
     

     按快捷键 Ctrl+S 保存当前设计,验证当前设计。

     如果验证结果报出错误或者警告,大家需要重新检查自己的设计。

    ③生产顶层HDL模块

      在 Sources 窗口中,选中 Design Sources 下的 .bd文件, 这就是刚刚完成的 Block Design 设计。

    依次点击如下执行 

     

     在对话框中 Synthesis Options 选择 Global; Run Setings 用于设置生成过程中要使用的处理器的线程数,进行多线程处理, 保持默认或设置为个人电脑处理器最大可使用线程数都可以,一般选择最大可使用线程数的一般。然后点击“Generate”来生成设计的综合、实现和仿真文件

    在“ Generate”过程中会为设计生成所有需要的输出结果。 比如 Vivado 工具会自动生成处理系统的 XDC约束文件,因此不需要手动对 ZYNQ PS 引出的接口( DDR 和 FIXED_IO) 进行管脚分配。

    然后选择“Create HDL Wrapper”,在弹出的对话框中确认勾选“ Let Vivado manage wrapper and auto-update”, 然后点击“ OK”。如下图

     .v 为创建的 Verilog 文件,当前模块为顶层模块。 该模块使用 Verilog HDL 对设计进行封装, 主要完成了对 block design 的例化。勾选了“ Let Vivado manage wrapper and auto-update”, 在修改了 Block Design 之后就不需要再重新生成顶层模块, Vivado 工具会自动更新该文件。

    注意:若使用了PL的资源,比如说一些引脚,需要配置EMIO,并且为EMIO分配引脚,添加约束文件。对引脚进行约束配置:

    点击”Flow Navigator“窗口中的”Open Elaborated Design“按钮,会先进行分析与综合。Vivado会编译RTL源文件进行全面的语法检查,并且给出相应的Error和Warning。打开分析后(Elaborated)的设计后,Vivado会生成顶层原理图视图,并在默认view layout中显示设计。

    根据自己开发板设置引脚编号和电平(此处也需要结合原理图确定)。设置完成后点击保存,并自行输入管脚约束文件的文件名。之后会记录相关笔记。对应本次实验来说不需要操作这里。
     

    ④生成 Bitstream 文件并导

    如果设计中使用了 PL 的资源,则需要添加引脚约束并对该设计进行综合、实现并生成 Bitstream 文件。

    在菜单栏选择 File > Export > Export hardware

    在弹出的对话框中,因为没有生成 bitstream 文件,所以无需勾选“ Include bitstream”,直接点击“ OK”按钮。
     

    选择保存路径和名字,在 Export Hardware 的过程中, 工具会将硬件以一个 ZIP 压缩文件的形式导出到该工作空间中。

     导出后,工程目录下会出现如下压缩包。

     三、vitis工程

    ①启动vitis

     ②创建工程

    选择vivado工程目录

     创建工程

     选择刚刚那个xsa文件

     添加工程名字

     

    这里选择hello worlf作为演示实验,后面一般选择Empty Application。

    打开后工作区如下:

     在启动 vitis之前,我们将硬件以一个 ZIP 压缩文件的形式导出到软件的工作空间。 在vitis启动时,该文件会自动解压, 可以在左侧看到解压后的所有文件。 其中红框部分包含了 Zynq SOC 处理系统的初始化代码,以及 DDR、时钟、 pll 和 MIO 的初始化设置信息。在初始化过程中,vitsi 使用这些信息去配置相应的模块, 使得应用程序能够在 PS 上运行

    ③编译与下载

    编译整个工程

     先下载PL部分,点击Program Device

     点击Program即可。下载完成后,开发板的done指示灯会亮起。

    然后下载PS部分

     点击工程名,点击Run As,然后,等待进度条下载完成。

    然后打开串口

     

     

     

    配置串口信息,这里配置信息是在vivado中要和uart配置的信息一致。

    打开串口可以看到例程输出的两个print语句内容。 

     

     代码解析:

     init_platform 函数的作用是使能 caches 和初始化 uart; cleanup_platform 函数的作用是取消使
    能 caches。 实际上这两个函数在该工程中并没有启动任何作用,因为这两个函数是针对于特定平台如Microblaze 的,对于我们使用的 ZYNQ 平台而言是不起作用的,所以 main 函数中只需包含 print语句就可以了,出于平台的通用性和可移植性,此处保留这两个函数。

    注意程序中打印字符串“ Hello World”使用的是 print()函数,而不是 C 语言里的 printf()函数。
    print()函数是 Xilinx 定义的一个用于打印字符串的函数,调用该函数需要包含头文件“ xil_printf.h”。
     

     

  • 相关阅读:
    Java中的文件操作(基础知识+三个小程序练习)
    餐饮行业数字化营销方案 | 如何用优质内容驱动营收、口碑双增长
    ubuntu 22.04 图文安装
    Python爱好者的自我修养(1):简单输入与输出
    QT基础教程(GUI程序原理分析)
    【C语言】指针传参引发的相关问题
    java 生成相亲信息海报
    【电源专题】什么是AC/DC转换器
    (十六)网络编程
    工作5年,测试用例都设计不好?来看看大神的用例设计总结
  • 原文地址:https://blog.csdn.net/qq_53144843/article/details/126789969