ZYNQ PL开发流程
2 ZYNQ PL开发
开发流程
开发使用vivado,流程如下
1.新建工程
工程项目含义
这里简单介绍下各个工程类型的含义。“RTL Project”是指按照正常设计流程所选择的类型,这也是常用的一种类型
“RTL Project”下的“Do not specify sources at this time”用于设置是否在创建工程向导的过程中添加设计文件,如果勾选后,则不创建或者添加设计文件;
“Post-synthesis Project”在导入第三方工具所产生的综合后网表时才选择;
“I/O Planning Project”一般用于在开始 RTL 设计之前,创建一个用于早期IO 规划和器件开发的空工程;
“Imported Project” 用于从 ISE、XST 或 Synopsys Synplify 导入现有的工程源文件;
“Example Project”是指创建一个 Vivado 提供的工程模板。
这个可以加也可以跳过
这个可以加也可以跳过
对应型号选择板卡,我用的是pynq-z2,直接选择xilink集成好的板卡
如何添加pynq-z2板文件看这一篇博客
如何添加PYNQ-Z2板文件到Vivado
(1)Flow Navigator。Flow Navigator 提供对命令和工具的访问,其包含从设计输入到生成比特流的整个过程。 在点击了相应的命令时,整个 Vivado 工程主界面的各个子窗口可能会作出相应的更改。
(2)数据窗口区域。默认情况下,Vivado IDE 的这个区域显示的是设计源文件和数据相关的信息。
• Sources 窗口:显示层次结构(Hierarchy)、IP 源文件(IP Sources)、库(Libraries)和编译顺序(Compile Order)的视图。
• Netlist 窗口:提供分析后的(elaborated)或综合后的(synthesized)逻辑设计的分层视图。
(3)Properties 窗口:显示有关所选逻辑对象或器件资源的特性信息。
(4)工作空间(Workspace):工作区显示了具有图形界面的窗口和需要更多屏幕空间的窗口,包括:
• Project Summary。提供了当前工程的摘要信息,它在运行设计命令时动态地更新。
• 用于显示和编辑基于文本的文件和报告的 Text Editor。
• 原理图(Schematic)窗口。
• 器件(Device)窗口。
• 封装(Package)窗口。
(5)结果窗口区域:在 Vivado IDE 中所运行的命令的状态和结果,显示在结果窗口区域中,这是一组子窗口的集合。在运行命令、生成消息、创建日志文件和报告文件时,相关信息将显示在此区域。默认情况下,此区域包括以下窗口:
• Tcl Console:允许您输入 Tcl 命令,并查看以前的命令和输出的历史记录
• Messages:显示当前设计的所有消息,按进程和严重性分类,包括“Error”、“Critical Warning”、“Warning”等等
• Log:显示由综合、实现和仿真 run 创建的日志文件。
• Reports:提供对整个设计流程中的活动 run 所生成的报告的快速访问。
• Designs Runs:管理当前工程的 runs。
(6)主工具栏:主工具栏提供了对 Vivado IDE 中最常用命令的单击访问。
(7)主菜单:主菜单栏提供对 Vivado IDE 命令的访问。
(8)窗口布局(Layout)选择器:Vivado IDE 提供预定义的窗口布局,以方便设计过程中的各种任务。
布局选择器使您能够轻松地更改窗口布局。或者,可以使用菜单栏中的“Layout”菜单来更改窗口布局。
2设计输入
如果事先有编写好的代码,可以点击“Add Files”按
钮来添加文件;如果没有,则点击“Create File”创建一个新的设计文件。由于我们事先没有编写好的设计
文件,这里点击“Create File”来创建一个新的设计文件,如下图所示:
输入点灯代码
module led_twinkle( 2 input sys_clk , //系统时钟input sys_rst_n, //系统复位,低电平有效output [1:0] led //LED 灯 6 );//reg definereg [25:0] cnt ;//*****************************************************//** main code//*****************************************************//对计数器的值进行判断,以输出 LED 的状态assign led = (cnt < 26'd2500_0000) ? 2'b01 : 2'b10 ;//计数器在 0~5000_000 之间进行计数always @ (posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)cnt <= 26'd0;else if(cnt < 26'd5000_0000)cnt <= cnt + 1'b1;elsecnt <= 26'd0;endendmodule
3.分析和综合
分析
代码输入完毕之后,就可以对设计进行分析(Elaborated)了。点击“Flow Navigator”窗口中的“Open Elaborated Design”按钮
此时,Vivado 会编译 RTL 源文件并进行全面的语法检查,并在 Messages 窗口中给出相应的“Error”和“Warning”。如果出现“Error”,则分析失败,用户必须修改设计文件,并重新编译源文件来取消“Error”。如果出现“Warning”,用户也可逐一查看,以确定哪些是设计缺陷,哪些是可以忽略的。打开分析后(Elaborated)的设计,Vivado 会生成顶层原理图视图,并在默认 view layout 中显示设计
引脚分配
此时,窗口布局会打开 IO 相关的子窗口,在下方的“I/O Ports”窗口中,就可以进行 IO 的分配了。这里我们暂时不分配,先对设计进行综合,综合之后再统一输入时序约束和 IO 引脚的物理约束
4.约束输入
#IO 管脚约束
set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk]
set_property -dict {PACKAGE_PIN J15 IOSTANDARD LVCMOS33} [get_ports sys_rst_n]
set_property -dict {PACKAGE_PIN J18 IOSTANDARD LVCMOS33} [get_ports {led[0]}]
set_property -dict {PACKAGE_PIN H18 IOSTANDARD LVCMOS33} [get_ports {led[1]}]
第一行以“#”号开头,表示这是一条注释语句,每一条注释也单独占用一行。第二行是有效的约束命令,每一个约束命令单独占用一行,命令的结尾不需要像 verilog 代码一样,添加分号“;”结束符号。命令的第一个关键字代表该命令的名称,其后的所有字段都是该命令的参数列表。IO 管脚约束是对端口的引脚位置和电平标准进行约束,例如第二行命令是对系统时钟的管脚进行约束,“set_property”是命令的名称;“PACKAGE_PIN U18”是引脚位置参数,代表引脚位置是 U18;“[get_ports sys_clk]”代表该约束所要附加的对象是 sys_clk 引脚;“IOSTANDARD LVCMOS33”代表该引脚所使用的电平标准是 LVCMOS33。 IO管脚约束比较好理解,就是我们的程序所驱动的IO和ZYNQ芯片的IO对应起来。而时序约束(Timing Constraints)用来描述设计人员对时序的要求,比如时钟频率,输入输出的延时等,以满足设计的时序要求。
约束语句如下:
#时钟周期约束
create_clock -name clk -period 20 [get_ports sys_clk ]
“create_clock”是该命令的名称,它会创建一个时钟;其后的“-name clk”、“-period 20”、“[get_ports sys_clk ]”都是该命令的各个参数,分别表示所创建时钟的名称是“clk”、时钟周期是 20ns、时钟源是 sys_clk 端口,一般只对输入的时钟做周期的约束。对时钟的约束最简单的理解就是,设计者需要告诉 EDA 工具设计中所使用的时钟的频率是多少;然后工具才能按照所要求的时钟频率去优化布局布线,使设计能够在要求的时钟频率下正常工作。本次实验sys_clk 的时钟频率为 50MHz,周期为 20ns,在做约束时可以等于这个值或者略低于这个值,不建议周期设置的太小,否则软件在布局布线时很难满足这个要求。其实对于比较简单的设计,可以不对工程做时序约束,即使不进行时序约束,也不影响最终的功能。 而当设计变得复杂起来,或者输入的时钟频率比较高的时候,如果不添加时序约束,那么就有可能在验证设计结果的时候出现一些意料之外的情况。
5.设计实现
约束输入完毕之后,就可以开始实现设计了。我们点击“Flow Navigator”窗口中的“Run Implementation”按钮,如下图所示
实现完成后会弹出提示窗口,我们直接点击取消来关闭窗口,如下图所示:
6.下载bit流
在弹出的窗口中直接点击 OK
比特流生成完毕之后,Vivado 会弹出提示窗口,我们点击取消关闭该窗口:
接下来我们开始下载比特流,点击“Flow Navigator”窗口中的“Open Hardware Manager”按钮,如下
图所示:
开发板完成并打开电源开关后,点击“Hardware”子窗口中的“Auto Connect”按钮,如下图所示:
需要说明的是,下载完比特流后,如果开发板断电,程序会丢失。如果想要程序断电不丢失的话,需要将程序固化至开发板中,这个需要在嵌入式 SDK 软件中完成,ZYNQ 芯片无法单独固化比特流文件(PL的配置文件)**。这是由于 ZYNQ 非易失性存储器的引脚(如 SD 卡、QSPI Flash)是 ZYNQ PS 部分的专用引脚,这些非易失性存储器由 PS 的 ARM 处理器进行驱动,需要将 bit 流文件和 elf 文件(软件程序的下载文件)合成一个 BOOT.BIN,才能进行固化,因此需要学习 ZYNQ 嵌入式 SDK 的开发流程。硬件调试和仿真下节再说。
ZYNQ PL开发流程相关推荐
- Zynq芯片开发流程
ZYNQ将CPU和FPGA集成到了一起 开发人员需要具备技能: 1.ARM操作系统应用程序 2.设备驱动程序 3.FPGA硬件逻辑设计 需要了解Linux操作系统,系统架构,FPGA和ARM系统之间的 ...
- ZYNQ之路--初级开发流程介绍
很多有玩过FPGA的老兄入手了ZYNQ,也明白什么PS+PL的开发方式,但是不知道开发ZYNQ究竟要怎么样做.本篇博客是本人阅读正点原子等开发资料的一些感悟,希望能让大家对ZYNQ的开发流程有一个更清 ...
- zynq自定义PL IP核linux驱动开发流程
概述 zynq的开发主要分为两个阶段: 1)硬件逻辑开发阶段:该过程与传统的fpga 软核cpu(microblaze)开发类似,在vivado中进行.需要在BlockDesign中例化zynq硬核c ...
- Zynq的AMP开发流程说明(基于OCM)
目录 一.平台说明 二.软件安装 三.基本开发流程 3.1.AMP模式介绍 3.2.开发流程框图 四.具体开发流程 4.1.下载官方Demo源码 4.2.Vivado工程创建(Windows 64位环 ...
- ZYNQ学习(1) —— 基础开发流程
ZYNQ学习(1) -- 基础开发流程 1. 现在PlanAhead中新建一个工程 2. 添加嵌入式内核,进入EDK中配置内核(导入XML模板,添加模块,设置端口等) 3. 回到PlanAhead生成 ...
- 【基于zynq的卷积神经网络加速器设计】(一)熟悉vivado和fpga开发流程:使用Vivado硬件调试烧写hello-world led闪烁程序实现及vivado软件仿真
HIGHLIGHT: vivado设计流程: note: 分析与综合 和 约束输入 可以调换顺序 [基于zynq的卷积神经网络加速器设计](一)熟悉vivado和fpga开发流程:使用Vivado硬件 ...
- ip核在linux的驱动,Linux驱动开发笔记:对zynq PL部分IP核的驱动开发过程
reg_addr = (((hopcount+1) #include * Xilinx RapidIO 3. 驱动设计 } #include Amba_pl对应PL部分的amba,devicetree ...
- Vivado18.3-Zynq PS的开发流程(Hello World) 学习笔记
本文内容学习自正点原子ZYNQ领航者FOGA视频-p41 众所周知之,所有软件的开发学习都是从Hello World开始,Zynq PS也不例外. 图为ZYNQ嵌入式最小系统. Memory用来存储数 ...
- zynq linux开发与普通ARM平台的不同点
zynq系列 linux开发特点 前言 平台简介 开发方式 使用petalinux直接配置 使用源码工程传统开发 启动linux文件的区别 1.patelinux配置开发 2.使用源码工程开发 pin ...
- asp.net 网站开发流程总结
由于这学期要做asp.net的网站开发,导师让我们在前期做详细的计划说明,时间安排.由于网站开发流程不知道,以及需要学什么指示都是盲懂,所以计划安排需在了解大致流程之后才能做出来,一下是询问同学和在网 ...
最新文章
- python自动发送微信公众号_使用python一步一步搭建微信公众平台(四)----将小黄鸡引入微信自动回复...
- Win 10 安装detectron2 详细手册
- 深入理解lombok
- .net一个函数要用另一个函数的值_MATLAB中的神经网络工具箱(2)函数命令及模型搭建...
- selenium报错解决 ElementNotInteractableException,element not interactable
- iOS - AutoLayout
- spring4.x(13)---SpringEL-操作List、Map
- Java通讯录管理系统使用线性表任务台程序
- 微信为什么没有公众号导航
- 美团大众点评面试经验——后台开发
- 【SMTP】服务端口
- ios键盘done中文_iOS键盘事件实现、控制
- 腾讯撕开中国NFT的“遮羞布”
- Excel去除重复项的几种方法
- 点菜系统(适合Java基础练习)
- 【ESD专题】2.ESD防护及保护器件(电介质和压敏电阻)
- split和ubound函数的用法
- ABeam( 德硕 ) 携手北京优锘科技共同探讨”数字孪生可视化运营”方案
- windows 10 defender 577的错误处理方法
- 【mud】文字mud游戏的魅力(龟跑比赛)