ZYNQ入门

article/2025/9/24 18:44:38

目录

一、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”。
 

 


http://chatgpt.dhexx.cn/article/oeKMGbFG.shtml

相关文章

ZYNQ架构

ZYNQ 首先,我们来了解传统的SOC架构,一般使用 ARM 作为主控,通过 ARM 的外设并行 RAM 类总线外挂 FPGA ,使用 FPGA 来做高速的数据采集或者运算,因为FPGA 有灵活性好,资源丰富,可反复编程&#…

zynqmp soc 移植vxWorks 7

1.使用worksbench4创建vsb工程; 2.使用worksbench4创建vip工程; 3.修改设备树文件,根据硬件电路选择对应的UART; 4.tftp引导启动;

ZYNQ开发系列——ZYNQ系统的搭建

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列——ZYNQ系统的搭建 DDR设置FLASH设置UART设置网口设置当我们有一个要用ZYNQ做的项目时,首先当然是把其最小系统搭建起来。这个最小系统可以交付给开发PS的同事开发裸机程序/RTOS实时操作系统/…

ZYNQ之高速AD/DA验证实验

文章目录 前言一、ADDA模块介绍二、添加ROM IP核三、添加ILA IP核四、编写测试程序五、管脚分配六、连接开发板测试总结 前言 本实验是高速AD/DA验证实验,将使用高速DA芯片实现数模转换,产生正弦波模拟电压信号,并通过高速AD芯片将模拟信号转…

ZYNQ - 嵌入式Linux开发 -10- ZYNQ启动流程分析

FSBL启动准备工作 在静态情况下,Boot.BIN启动文件存放在SD卡或QSPI等存储介质中,然后Boot.BIN文件中已经包含了FSBL代码,也就是说FSBL代码已经集成在了Boot.BIN文件中,所以FSBL代码也是存放在Boot .BIN文件中。 如果要启动FSBL代…

初识ZYNQ结构

本文介绍了zynq的结构,简述了PS中的APU。 处理器系统 所有的 Zynq 芯片都有相同的基本架构。作为处理器系统的基础,所有的芯片都包含了一颗双核 ARM Cortex-A9 处理器。这是一颗 “ 硬 ” 处理器 —— 它是芯片上专用而且优化过的硅片元件。 作为比较…

zynq中断

在zynq中选择中断信号后: 只能看到一个[0:0]的向量,完全无法对应中断号: 且属性栏目没有配置选项,一般可以看到有些连接图如下: 如果看成最低位的话就是61,那么其它中断号怎么使用呢:查到的资料如下&#x…

ZYNQ基础知识

1.ZYNQ介绍 全称为Zynq-7000 All Programmable Soc 1.Zynq是赛灵思(Xilinx)推出的新一代全可编程片上系统,将处理器的软件可编程性和FPGA的硬件可编程性完美结合。具有较强的系统性能、灵活性与可扩展性。 2.旨在为视频监控、汽车驾驶员辅助…

一、ZYNQ简介

1 ZYNQ简介 (1)ZYNQ简介 ​ ZYNQ全称Zynq-7000 All Programmable SoC,是赛灵思公司(Xilinx)推出的新一代全可编程片上系统((APSoC)(全可编程指的是硬件和软件都可以编程…

ZYNQ简介

目录 1.ZYNQ简介 2.片上系统,板上系统,可编程片上系统,全可编程上系统 (1)板上系统 (2)片上系统(SOC) (3)可编程片上系统(SOPC&a…

【ZYNQ】从入门到秃头01 初识ZYNQ(PS和PL之间连接)

文章目录 从嵌入式Linux到ZYNQZYNQ简介PL简介常用的可编程逻辑器件:PL结构 PS简介AXIAXI4 StreamAXI4 ZYNQ芯片开发流程的简介学习ZYNQ要具备哪些技能 从嵌入式Linux到ZYNQ 之前的学习领域一直是ARM,从STM32到NXP iMX6, 从裸机开发到Linux操…

css-输入框和文本域样式调整

输入框去掉选中后的边框变化效果 选中后边框变化: 去掉变化效果方法:添加css属性- - - outline: none; 文本域去掉右下角拖拽图样 默认文本域右下角有个拖拽的图样,将鼠标移动到右下角可以进行拖拽实现放大缩小: 代码示例&#x…

HTML5-列表框、文本域和文件域

<!--下拉框&#xff0c;列表框selected 默认选择--><p>国家&#xff1a;<select name"列表名称" ><option value"china">中国</option><option value"us">美国</option><option value"eth&qu…

【多行文本输入框--文本域】(html,css)

<style>textarea{width: 300px;height: 300px;resize: none;/* resize:重新设置大小&#xff0c;vertical,horizontal,both,none */} </style> <body><div>多行文本输入框--文本域</div><div><!-- placeholder--提示文字 --><!--…

JTextArea:文本域组件

文本域与文本框的最大区别就是文本域允许用户输入多行文本信息。在 Swing 中使用 JTextArea 类实现一个文本域&#xff0c;其常用构造方法如下。 JTextArea()&#xff1a;创建一个默认的文本域。JTextArea(int rows,int columns)&#xff1a;创建一个具有指定行数和列数的文本…

html文本域

<!DOCTYPE <!DOCTYPE html><html><head><meta charset"utf-8"/><title>文本域</title></head><body>用户留言:<br/><form action"mailto:minriqq.com" name"invest" method"p…

文本域textarea

文本域 CreateTime--2017年5月23日15:12:08Author:Marydon 二、文本域 &#xff08;一&#xff09;语法 <textarea></textarea> &#xff08;二&#xff09;用法介绍 2.2.1 页面展示 内容一定要写在标签体内&#xff0c;即&#xff1a; <textarea>页面要展示…

textarea文本域,多行文本输入

当用户需要在表单中输入大段文字时&#xff0c;需要用到文本输入域。 语法&#xff1a; <textarea rows"行数" cols"列数">默认出现文本</textarea> 注意&#xff1a; rows,cols这两个属性可用css样式的width和height来代替&#xff1a;co…

为文本域(textarea)中的个别字体设置不同的样式

文章目录 将textarea文本域用可编辑的div来代替相关JavaScript代码效果显示参考链接 将textarea文本域用可编辑的div来代替 将contenteditable设置为true后可将div模拟成textarea <div id"" class"" contenteditable"true"></div>…

Vue3文本域(Textarea)

APIs 参数说明类型默认值必传width文本域宽度string | number‘100%’falseallowClear可以点击清除图标删除内容booleanfalsefalseautoSize自适应内容高度boolean | {minRows?: number, maxRows?: number}falsefalsedisabled是否禁用booleanfalsefalsemaxlength最大长度numb…