Vivado 使用教程(个人总结)

news2024/11/19 4:19:56

Vivado 是 Xilinx 公司推出的一款用于 FPGA 设计的集成开发环境 (IDE),提供了从设计输入到实现、验证、调试和下载的完整流程。本文将详细介绍 Vivado 的使用方法,包括项目创建、设计输入、约束文件、综合与实现、仿真、调试、下载配置等步骤。

一、创建新项目

1.1 启动 Vivado

打开 Vivado 应用程序,进入欢迎界面。

1.2 创建新项目

  1. 在欢迎界面选择“Create New Project”。
  2. 输入项目名称和路径。
  3. 选择“RTL Project”,并勾选“Do not specify sources at this time”。
  4. 选择目标器件(如 XC7Z020-1CLG484)。
  5. 点击“Finish”完成项目创建。

二、设计输入

2.1 添加设计源文件

  1. 在 Flow Navigator 面板中,选择“Add Sources”。
  2. 选择“Add or Create Design Sources”并点击“Next”。
  3. 点击“Create File”以创建新的 Verilog 或 VHDL 文件。
  4. 输入文件名并选择文件类型(Verilog/VHDL)。
  5. 点击“Finish”完成文件创建。

2.2 编辑设计源文件

  1. 在 Sources 面板中,双击新创建的源文件以打开编辑器。
  2. 编写设计代码。例如,以下是一个简单的 Verilog 模块:
module led_blink (
    input wire clk,
    input wire rst,
    output reg led
);

reg [23:0] counter;

always @(posedge clk or posedge rst) begin
    if (rst) begin
        counter <= 24'd0;
        led <= 1'b0;
    end else begin
        counter <= counter + 1;
        if (counter == 24'd9999999) begin
            counter <= 24'd0;
            led <= ~led;
        end
    end
end

endmodule

三、添加约束文件

3.1 添加约束文件

  1. 在 Flow Navigator 面板中,选择“Add Constraints”。
  2. 选择“Create File”并命名文件(如“constraints.xdc”)。
  3. 点击“Finish”完成文件创建。
  4. 在 Sources 面板中,双击新创建的约束文件以打开编辑器。
  5. 添加引脚约束。例如:
set_property PACKAGE_PIN W5 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]

set_property PACKAGE_PIN U16 [get_ports rst]
set_property IOSTANDARD LVCMOS33 [get_ports rst]

set_property PACKAGE_PIN V17 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports led]

3.2 约束文件细节

引脚约束:指定 FPGA 器件的引脚连接。

时序约束:定义时钟周期、输入和输出延迟、时钟偏移等时序要求。例如:

create_clock -period 10.000 -name clk [get_ports clk]
set_input_delay -max 5.000 -clock clk [get_ports rst]
set_output_delay -max 5.000 -clock clk [get_ports led]

布线约束:定义特定信号的布线要求,避免电源噪声和串扰。例如:

set_property PULLUP true [get_ports rst]
set_property DRIVE 12 [get_ports led]

3.3 约束文件的优化

  1. 确保时序约束的准确性,避免过于宽松或严格。
  2. 针对关键路径设置合理的时序约束,保证时序收敛。
  3. 使用分层约束文件,便于管理和维护。

四、综合与实现

4.1 运行综合(Synthesis)

  1. 在 Flow Navigator 面板中,选择“Run Synthesis”。
  2. Vivado 将开始综合设计。完成后,查看综合报告以确认无错误。

4.2 查看综合报告

  1. 在 Flow Navigator 面板中,选择“Open Synthesized Design”。
  2. 打开“Reports”选项卡,查看综合报告中的时序、资源利用情况等信息。

时序报告:检查所有路径是否满足时序要求。

资源利用报告:查看逻辑单元、寄存器、内存块、DSP 等资源的使用情况。

4.3 运行实现(Implementation)

  1. 在 Flow Navigator 面板中,选择“Run Implementation”。
  2. Vivado 将开始实现设计。完成后,查看实现报告以确认无错误。

4.4 查看实现报告

  1. 在 Flow Navigator 面板中,选择“Open Implemented Design”。
  2. 打开“Reports”选项卡,查看实现报告中的布线、时序等信息。

布线报告:检查布线是否合理,是否存在长路径或高拥堵区域。

时序报告:再次检查时序收敛情况,确保所有路径满足时序要求。

4.5 优化布线

  1. 调整约束:检查和优化约束文件,确保时序约束和布线约束合理。
  2. 重复综合和实现:多次运行综合和实现过程,逐步优化设计。
  3. 使用物理布局工具:在 Vivado 中使用物理布局工具查看和调整关键路径的布线。

4.6 布局和资源优化示例

资源优化示例

假设我们有一个简单的计数器设计:

module counter(
    input wire clk,
    input wire rst,
    output reg [3:0] count
);
    always @(posedge clk or posedge rst) begin
        if (rst)
            count <= 4'b0000;
        else
            count <= count + 1;
    end
endmodule

资源利用报告

  1. 在综合完成后,查看综合报告中的“Utilization Report”,检查 LUT、FF、BRAM 和 DSP 的使用情况。
  2. 如果发现某些资源使用过多,可以尝试以下优化:
    • 重写代码以减少不必要的逻辑。
    • 使用更高效的数据结构(如将组合逻辑转换为查找表或存储器)。
布局优化示例
  1. 在综合和实现完成后,查看实现报告中的“Placement Report”和“Routing Report”。
  2. 检查是否有信号的延迟过长或拥堵区域。
  3. 使用 Vivado 的“Floorplanning”工具进行手动布局优化:
    • 将相关模块放置在相邻区域内,减少布线长度。
    • 确保关键信号的路径尽可能短,减少延迟。
    • 示例:将计数器和 LED 驱动逻辑放置在相邻的逻辑块中。

五、仿真

5.1 添加仿真源文件

  1. 在 Flow Navigator 面板中,选择“Add Sources”。
  2. 选择“Add or Create Simulation Sources”并点击“Next”。
  3. 点击“Create File”以创建新的仿真文件(如“testbench.v”)。
  4. 输入文件名并选择文件类型(Verilog/VHDL)。
  5. 点击“Finish”完成文件创建。

5.2 编写测试平台

  1. 在 Sources 面板中,双击新创建的仿真文件以打开编辑器。
  2. 编写测试平台代码。例如:
module counter(
    input wire clk,
    input wire rst,
    output reg [3:0] count
);
    always @(posedge clk or posedge rst) begin
        if (rst)
            count <= 4'b0000;
        else
            count <= count + 1;
    end
endmodule

5.3 运行仿真

  1. 在 Flow Navigator 面板中,选择“Run Simulation”。
  2. 选择“Run Behavioral Simulation”。
  3. 仿真完成后,查看波形窗口以验证设计行为。

5.4 波形查看和分析

  1. 在仿真过程中,可以使用 Vivado 仿真器查看波形图。
  2. 在波形窗口中,选择感兴趣的信号,点击“Add to Wave”以添加到波形视图中。
  3. 使用“Zoom In”和“Zoom Out”工具调整波形视图。
  4. 在波形视图中,检查信号的时序关系和逻辑行为,验证设计的正确性。

5.5 仿真报告

查看仿真日志,确认所有测试用例通过,并且没有错误和警告。

六、调试

6.1 设置调试探针

  1. 在设计源文件中插入 ILA (Integrated Logic Analyzer) 核。
  2. 例如,将以下代码添加到 Verilog 模块中:
ila_0 ila_inst (
    .clk(clk),
    .probe0(count)
);

6.2 配置调试核

  1. 在 Flow Navigator 面板中,选择“Open IP Integrator”。
  2. 在 IP Integrator 中添加 ILA 核,并将其连接到设计中相应的信号。

6.3 运行调试

  1. 在 Flow Navigator 面板中,选择“Run Implementation”。
  2. 生成比特流文件并下载到 FPGA。
  3. 打开硬件管理器,配置 ILA 并运行调试。

七、下载配置

7.1 下载比特流文件

  1. 连接 FPGA 开发板与计算机。
  2. 在 Flow Navigator 面板中,选择“Open Hardware Manager”。
  3. 选择“Open Target”,然后选择“Auto Connect”。
  4. 选择“Program Device”,并选择生成的比特流文件进行下载。

7.2 验证设计

  1. 确认 FPGA 已正确配置。
  2. 验证设计功能是否符合预期。

八、综合和实现的优化技巧

8.1 Lint 检查

Lint 检查用于在代码综合之前查找和修复代码中的潜在错误和不规范写法。

  1. 在 Flow Navigator 面板中,选择“Open Synthesized Design”。
  2. 选择“Report”->“Report DRC”进行设计规则检查。
  3. 选择“Report”->“Report CDC”进行时钟域交叉检查。
  4. 查看报告中的警告和错误信息,修改代码以修复这些问题。

8.2 时序优化

  1. 在综合和实现过程中,检查时序报告,确保所有路径满足时序要求。
  2. 使用多重约束(Multi-Constraint)文件,根据不同的工作条件设置不同的时序约束。
  3. 调整代码结构,优化关键路径,减少路径延迟。

8.3 资源优化

  1. 检查资源利用报告,确保设计在目标 FPGA 上的资源利用率合理。
  2. 使用高效的数据结构和算法,减少资源消耗。
  3. 使用分层设计,将复杂模块分解为多个子模块,提高设计的可维护性和可扩展性。

8.4 物理布局优化

  1. 在物理布局阶段,使用 Vivado 提供的布局工具,手动调整关键路径的布局。
  2. 确保关键信号布线尽量短,减少布线延迟。
  3. 使用区域约束(Area Constraints),将相关模块放置在相邻的区域内,减少信号延迟。

8.5 布局和资源优化示例

假设我们有一个简单的计数器设计:

module counter(
    input wire clk,
    input wire rst,
    output reg [3:0] count
);
    always @(posedge clk or posedge rst) begin
        if (rst)
            count <= 4'b0000;
        else
            count <= count + 1;
    end
endmodule

资源优化示例

  1. 在综合完成后,查看综合报告中的“Utilization Report”,检查 LUT、FF、BRAM 和 DSP 的使用情况。
  2. 如果发现某些资源使用过多,可以尝试以下优化:
    • 重写代码以减少不必要的逻辑。
    • 使用更高效的数据结构(如将组合逻辑转换为查找表或存储器)。

布局优化示例

  1. 在综合和实现完成后,查看实现报告中的“Placement Report”和“Routing Report”。
  2. 检查是否有信号的延迟过长或拥堵区域。
  3. 使用 Vivado 的“Floorplanning”工具进行手动布局优化:
    • 将相关模块放置在相邻区域内,减少布线长度。
    • 确保关键信号的路径尽可能短,减少延迟。
    • 示例:将计数器和 LED 驱动逻辑放置在相邻的逻辑块中。

九、实机条件下的调试

9.1 设置和配置调试核

  1. 在设计中添加 ILA 核,捕获实际工作条件下的信号。
  2. 配置 ILA 核,选择要捕获的信号和触发条件。例如:
ila_0 ila_inst (
    .clk(clk),
    .probe0(count)
);

9.2 运行实机调试

  1. 生成比特流文件并下载到 FPGA。
  2. 连接调试设备(如 JTAG 调试器)与 FPGA 开发板。
  3. 在 Vivado 中打开硬件管理器,选择“Open Hardware Manager”。
  4. 选择“Open Target”,然后选择“Auto Connect”。
  5. 在硬件管理器中配置 ILA,设置触发条件并捕获信号数据。
  6. 分析捕获到的波形数据,检查信号时序和逻辑行为。

9.3 调试步骤示例

  1. 在硬件管理器中,选择“Add Probes”添加需要监控的信号。
  2. 设置触发条件,例如设置计数器达到特定值时触发捕获。
  3. 开始捕获数据,运行 FPGA 设计,触发器触发时自动捕获信号。
  4. 分析波形图,检查信号是否按照预期工作。
  5. 根据需要调整设计,重新生成比特流文件,并再次下载和验证。

十、总结

Vivado 是一个功能强大的 FPGA 开发工具,提供了从设计输入到实现、验证、调试和下载的完整流程。本文详细介绍了 Vivado 的使用方法,包括项目创建、设计输入、约束文件、综合与实现、仿真、调试、下载配置、优化技巧等步骤。通过这些内容的学习和实践,可以有效提高 FPGA 设计的性能和可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1692265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何生成Github Badge徽章图标

如何生成徽章Badge 什么是徽章(Badge)生成小徽章shields网站开源项目的徽章lib版本徽章代码测试覆盖度开源协议Github workflow的徽章 开源代码实践效果py-enumjs-enumerate 什么是徽章(Badge) 在开源项目的README中&#xff0c;经常会见到一些徽章(Badge)小图标&#xff0c;如…

抽烟行为检测:从传统巡查到智能算法

在当前人工智能和计算机视觉技术的迅猛发展下&#xff0c;基于视觉分析的抽烟行为检测算法成为一种高效的技术手段。此类算法通常依赖于深度学习模型&#xff0c;特别是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;通过对摄像头捕捉的视频流进行实时分析&#xff0c;能…

租赁系统|北京租赁系统|租赁软件开发流程

在数字化时代的浪潮下&#xff0c;小程序成为了各行各业争相探索的新领域。租赁行业亦不例外&#xff0c;租赁小程序的开发不仅提升了用户体验&#xff0c;更为商家带来了更多商业机会。本文将详细解析租赁小程序的开发流程&#xff0c;为有志于进军小程序领域的租赁行业从业者…

AI爆文写作:如果你有一篇文章爆了,正确的做法是:自己抄袭自己,重复发,还可以继续爆!

爆款总是相似的&#xff0c;如果你有一篇文章爆了&#xff0c;正确的做法&#xff0c;就是重复发&#xff0c;让它继续爆下去。 以前我在小红书看到一个人&#xff0c;将一篇自己火的笔记&#xff0c;连续发了5次&#xff0c;每次点赞数据都不错。 公众号文章也是一样的。 我…

【LeetCode】【209】长度最小的子数组(1488字)

文章目录 [toc]题目描述样例输入输出与解释样例1样例2样例3 提示进阶Python实现前缀和二分查找滑动窗口 个人主页&#xff1a;丷从心 系列专栏&#xff1a;LeetCode 刷题指南&#xff1a;LeetCode刷题指南 题目描述 给定一个含有n个正整数的数组和一个正整数target找出该数组…

Spring Boot 3.3 正式发布,王炸级更新,应用启动速度直接起飞!

最新消息&#xff0c;Spring Boot 一次性发布了 3 个版本&#xff1a; 3.3.0 3.2.6 3.1.13 Spring Boot 3.3 正式发布了&#xff0c;3.1.x 在前几天也停止维护了。 最新的支持版本如下&#xff1a; 从路线图可以看到每个版本的终止时间&#xff0c;每个版本的生命周期只有…

【VUE】 如何关闭ESlint的自动修复功能

问题描述例如&#xff1a;原书写代码ESLint自动修复报错如下 方案一、在文件中添加屏蔽警告的代码html代码中JavaScript代码中 方案二、关闭ESLint的自动修复功能1、VSCode 扩展找到 ESLint 插件2、在设置中找到在 settings,json 中编辑3、将"autoFix": true改为&quo…

跟TED演讲学英文:Bring on the learning revolution! by Sir Ken Robinson

Bring on the learning revolution! Link: https://www.ted.com/talks/sir_ken_robinson_bring_on_the_learning_revolution Speaker: Sir Ken Robinson Date: February 2010 文章目录 Bring on the learning revolution!IntroductionVocabularySummaryTranscriptAfterword I…

ingress-nginx控制器安装(ingress ImagePullBackOff )

支持的版本&#xff08;查看自己的kubernetes版本替换安装过程中的版本选择合适的版本安装&#xff09; 安装过程&#xff1a; 这里不采用helm的方式&#xff0c;而是采用YAML manifest的方式来安装。 下载ingress-nginx的https://raw.githubusercontent.com/kubernetes/ingr…

开放式耳机什么牌子好用?五大高分力作安利,不容错过!

​开放式耳机如今备受瞩目&#xff0c;其独特的不入耳设计不仅避免了长时间佩戴对耳道的压力&#xff0c;还维护了耳朵的卫生健康&#xff0c;特别受运动爱好者和耳机发烧友青睐。然而&#xff0c;市场上的开放式耳机品质良莠不齐&#xff0c;让许多消费者在选择时陷入困惑。作…

滑动谜题 leetcode的BFS题目 启发如何写一个拼图编程呢

题目链接 题目要求&#xff0c;要将上面的拼板拼成123450 首先&#xff0c;转换为字符串&#xff0c;为什么要转换为字符串呢&#xff0c;因为处理会变得很简单比如示例一&#xff0c;转化为字符串是12345&#xff0c;目标字符串为123450&#xff0c;只需要证明通过某种交换&a…

Linux环境基础开发工具的使用(yum,vim,gcc/g++,make/Makefile,gdb)

Linux 软件包管理器-yum 什么是软件包及安装方式 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理…

使用HTTP长连接减少文件描述符和端口占用

在当今互联网技术飞速发展的背景下&#xff0c;高并发处理能力已经成为衡量服务器性能的一个重要标准。面对高并发场景&#xff0c;服务器需要同时应对大量的请求&#xff0c;这就带来了一个棘手的问题&#xff1a;资源有限。具体来说&#xff0c;文件描述符和端口号&#xff0…

【全开源】点餐小程序系统源码(ThinkPHP+FastAdmin+UniApp)

基于ThinkPHPFastAdminUniApp开发的点餐微信小程序&#xff0c;类似肯德基&#xff0c;麦当劳&#xff0c;喜茶等小程序多店铺模式&#xff0c;支持子商户模式&#xff0c;提供全部前后台无加密源代码和数据库&#xff0c;支持私有化部署。 革新餐饮行业的智慧点餐解决方案 一…

世界机器人大赛的含金量高吗?

世界机器人大赛的含金量非常高。 世界机器人大赛&#xff08;World Robot Contest&#xff09;是世界机器人大会&#xff08;World Robot Conference&#xff09;的重要组成部分&#xff0c;自2015年起已成功举办了多届&#xff0c;吸引了全球20余个国家的众多选手参赛。这一赛…

python02 循环与容器

一、if的条件判断 1-1 if elif else 判断年龄属于哪个年龄段 # 判断学生 core input(请输入成绩) ​ if int(core) >90 :print(优秀) elif int(core) >70 and int(core) <90:print(中等) elif int(core) >60 and int(core) <70:print(及格) else:print(不及…

不同类型水表计量技术的优缺点

1.单流束水表 1.1优点 (1)耐受悬浮固体。适用于硬水或悬浮颗粒物。 (2)多样性&#xff0c;可用性&#xff0c;容易找到需要的合适的表型。 (3)技术可靠&#xff0c;已使用了数十年。 (4)体积小&#xff0c;可以安装在狭小的空间里。 (5)13mm、15mm、20mm水表可能是市面…

【Java面试】一、Redis篇(上)

文章目录 0、准备1、缓存穿透&#xff1a;不存在的key2、缓存击穿&#xff1a;热点key过期3、缓存雪崩&#xff1a;大批key同时过期4、双写一致性4.1 要求高一致性4.2 允许一定的一致延迟 5、面试 0、准备 Redis相关概览&#xff1a; 以简历上所列的项目为切入点&#xff0c;展…

《2024年中国机器人行业投融资报告》| 附下载

近年来&#xff0c;国内机器人行业取得了显著的技术进步&#xff0c;包括人工智能、感知技术、自主导航等技术方面的突破&#xff0c;使得机器人能够更好地适应复杂环境和任务需求&#xff0c;带动了机器人行业加快发展。 当然&#xff0c;技术的进步是外在驱动因素&#xff0…

WPF密码输入框明文掩码切换

1&#xff0c;效果 2&#xff0c;代码&#xff1a; WPF的PasswordBox不能像Winform中的PasswordBox那样&#xff0c;通过PasswordBox.PasswordChar(char)0显示明文。所以这里使用无外观控件构筑掩码明文切换。 无外观控件遵守Themes/Generic.xaml文件配置. <ResourceDicti…