当前位置: 首页 > news >正文

Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录

注:本文为 “Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录” 相关文章合辑。

略作重排,未整理去重。
如有内容异常,请看原文。


Vivado 开发流程(手把手教学实例)(FPGA)

不完美先生 于 2018-04-20 11:38:22 发布

欢迎界面

新建工程

打开 Vivado 软件,在欢迎界面点击 Create New Project,或在开始菜单中选择 File - New Project 即可新建工程。

新建工程

点击 Next

下一步

输入工程名称和路径。

输入工程信息

选择 RTL Project,勾选 Do not specify……(这样可以跳过添加源文件的步骤,源文件可以后面再添加)。

选择项目类型

根据自己的开发板选择器件型号,可以直接通过型号进行搜索。例如,Basys3 开发板上的芯片型号为 xc7a35tcpg236-1。如果不了解或者暂时不确定开发板,可以随便选一个型号,后面需要时再修改。

选择器件型号

点击 Finish,项目新建完成。

项目完成

添加 Verilog 设计文件(Design Source)

Project Manager 窗口中,选择 Source 子窗口,在空白处或任意文件夹上右击,选择 Add Sources

添加源文件

选择 Add or Create Design Sources,点击 Next

选择设计文件

点击 Create File 按钮,在弹出的小窗口中输入文件名,点击 OK

创建文件

可以一次性新建或添加多个文件,最后点击 Finish

完成添加

稍后会弹出定义模块的窗口,也就是刚刚添加的 test 文件。可以在这里设置 test 模块的输入输出端口;或者直接点击 OK,稍后再自行编写。

定义模块

点击 OK 后,如果弹出下面窗口直接点击 Yes

确认操作

test 文件和对应的模块即创建完成,如图。

模块完成

添加 Verilog 仿真文件(Simulation Source)

操作和上一步添加 Verilog 设计文件基本一致,唯一的区别是选择 Add or Create Simulation Sources。我们新建一个名为 simu 的仿真文件。

添加仿真文件

设计文件新建完成后,在 Design SourcesSimulation Sources 中都有,而仿真文件只会出现在 Simulation Sources 文件夹中。设计文件可以用于仿真,也可以用于最终烧写进开发板,而仿真文件仅用于仿真。

文件分类

编写代码

打开 test 模块,编写代码实现一个简单的非门电路如下:

module test (input in,output out
);assign out = ~in;
endmodule

行为仿真(Behavioral Simulation)与 Testbench

为了验证代码是否正确,可以对代码进行行为仿真。我们给上面的 test 模块输入端 in 接入一个时钟信号,则输出端 out 就会产生一个电平相反的时钟信号。

行为仿真时,输入信号可以使用 Testbench 编写。

如果直接修改 test 模块,在其中添加 Testbench 代码,再进行仿真,是一种不太正确的做法。因为 test 模块是设计文件,后面可能会直接烧写进板子。进行仿真时添加了 Testbench 代码,之后再烧写进板子又得删掉 Testbench 代码,这样容易出现错误,而且操作起来也比较麻烦。尤其是接口数量多,内部比较复杂的模块。

因此,我们将 Testbench 代码全部写到仿真文件 simu 中,并在 simu 文件中调用 test 模块,从而进行仿真。

编写仿真代码

simu 模块中编写代码如下:

module simu ();// testbench 时钟信号reg clk = 0;always #10 clk <= ~clk;// 输出信号wire out;// 调用 test 模块test mytest (clk, out);
endmodule

代码说明

  • reg clk = 0 声明了一个 reg 信号,并赋初值为 0
  • always #10 clk <= ~clk 为 Testbench 代码,让 clk 每隔 10 ns 翻转一次,产生周期为 20 ns 的时钟信号。
  • wire out 声明了一个 wire 信号,用于连接到 test 模块的输出。
  • test mytest (clk, out) 调用了前面写好的 test 模块,其中 mytest 是模块名称,这里的 clkout 分别连接了 mytest 模块内部的 inout 信号。

这种写法类似于面向对象的编程语言中,对象的实例化,test 为类名,而 mytest 为对象名称。同样,Verilog 中调用模块时,可以实例化多个 test 对象。

更多 Testbench 的写法请上网搜索相关资料。

行为仿真

右击 simu 模块,选择 Set as Top,将 simu 模块设置为仿真时的顶层模块。顶层模块类似于 C 编程时的入口函数,即 main 函数。main 函数可以调用其他子函数;类似的,顶层模块可以调用其他模块。

设置顶层模块

Flow Navigator 窗口中点击 Run Simulation - Run Behavioral Simulation;或者在菜单中选择 Flow - Run Simulation - Run Behavioral Simulation,即可启动行为仿真。

启动仿真

操作技巧

双击图中右侧的 Untitled 2 标签,可以最大化仿真波形窗口。在波形窗口按住 Ctrl 键并滚动鼠标滚轮,可以横向缩放波形;按住 Shift 并滚动鼠标滚轮,可以横向平移波形。

如图,可以看出 clk 为周期 20 ns 的时钟信号,而 outclk 的电平始终相反,即 test 模块中的非门工作正确。

波形分析

Behavioral Simulation 窗口中的 Scopes 子窗口,根据模块调用关系选中 mytest,在右侧的 Objects 窗口即可看到 test 模块中所有的信号(包括内部信号,即没有写到模块声明语句 module (a,b,c) 括号中的信号)。

右击信号,选择 Add To Wave Window,可将波形添加到右侧的仿真波形窗口,保存仿真文件,再次仿真时就可以看到该信号的波形。

添加波形

对于一些输出数字信号波形的情况,例如让 reg [7:0] sine_out 输出正弦波,仿真后右击信号,选择 Waveform Style - Analog,即可以波形的形式查看信号。如图显示的就是正弦波信号(注意这里信号本身还是数字信号,并不是模拟信号,只是用软件显示出了其幅值随时间变化的波形)。

正弦波显示

对于多位信号例如 wire [7:0] p,默认使用二进制形式显示,可以根据需要修改。例如右击选择 Radix - Unsigned Decimal 即可设置为无符号十进制显示。

信号显示方式


【FPGA】Vivado 基本开发流程

Louis1874 于 2020-07-22 20:37:25 发布

本文为 FPGA 学习总结,欢迎分享交流。

Vivado 软件的使用着实让人头疼,尤其对于新手来说更是一种折磨。本篇文章通过简单的 MUX 程序教你快速简单地掌握 Vivado 基本开发流程。

运行环境

  • Windows 10
  • Vivado 2018.3
  • Modelsim 10.7

创建工程

首先在主页面点击 Create Project 创建一个新的工程:

创建工程

然后点击 Next,默认选择工程名称及路径(路径中最好不要有中文),再点击 Next

然后选择 RTL 工程,勾选 不在此时创建源文件,点击 Next

选择项目类型

在这里我们直接输入器件型号,然后点击我们需要的型号,点击 Next

选择器件型号

然后点击 Finish。工程的创建到此结束。

主界面

主界面各部分用途见下图:

主界面

创建源文件

首先点击 Add Sources,再勾选 添加或创建设计文件,点击 Next

添加设计文件

首先点击 Create File 创建文件,在弹出窗口中选择 Verilog 语言,给文件命名为 mux21a,点击 OK

创建文件

在第一行就可以看到刚才添加的文件,点击 Finish

完成添加

在这个窗口中需要定义模块的输入和输出管脚,我们选择不定义:

定义管脚

这样就创建好了设计源文件:

源文件完成

编程

将下面的代码粘贴到 mux21a.v 文件中:

module mux21a (input wire D0,input wire D1,input wire SEL,output wire LED
);assign LED = (~SEL & D0) | (SEL & D1);
endmodule

代码示例

下面我们还需要创建一个设计源文件作为顶层模块,创建步骤与上面相同。

创建顶层模块

将下面的代码粘贴到 mux21topv.v

module mux21topv (input wire [2:0] sw,output wire led
);mux21a M1 (.D0 (sw [0]),.D1 (sw [1]),.SEL (sw [2]),.LED (led));
endmodule

通过顶层模块调用 mux21a,可以让约束文件的信号和二选一多路选择器模块的信号相连接。

仿真

完成源文件的创建后,我们就可以进行仿真了。仿真是指在综合编译之前对所设计的电路进行基本功能验证,验证设计是否满足需求。在这里我们还需要创建一个仿真文件,首先勾选 创建仿真源文件,点击 Next

创建仿真文件

后面操作与设计源文件相同,不再赘述。

仿真文件完成

将下面的代码粘贴到仿真文件中:

module mux21_simulation ();reg D0, D1, SEL;wire LED;mux21a test ( // 实例化二选一多路选择器模块.D0 (D0),.D1 (D1),.SEL (SEL),.LED (LED));initial begin // 8 种状态作为激励#0 SEL = 0;    // 000D1 = 0;D0 = 0;#100 SEL = 0;    // 001D1 = 0;D0 = 1;#100 SEL = 0;    // 010D1 = 1;D0 = 0;#100 SEL = 0;    // 011D1 = 1;D0 = 1;#100 SEL = 1;    // 100D1 = 0;D0 = 0;#100 SEL = 1;    // 101D1 = 0;D0 = 1;#100 SEL = 1;    // 110D1 = 1;D0 = 0;#100 SEL = 1;    // 111D1 = 1;D0 = 1;#100 $finish;end
endmodule

Testbench 的概念可参考文章 Vivado 仿真。

这时把仿真源文件设置为 top

设置顶层

然后就可以进行仿真了!点击 Run Simulation 后,点击 Run Behavioral Simulation 进行仿真:

启动仿真

点击 Untitled 1 打开仿真波形窗口,点击 Zoom Fit 进行可视化,将 SEL 拖拽到第一个,展示出波形如图:

波形展示

我们对波形进行分析:当 SEL = 0 时,若 D0 = 1,则 LED 输出高电平;当 SEL = 1 时,若 D1 = 1,则 LED 输出高电平。仿真结果表明,我们的设计是正确的。

然后我们就可以在 RTL Analysis 中查看原理图。点击 Open Elaborated Design,再点 OK

查看原理图

双击 Schematic 打开原理图窗口,点击加号可以展开原理图:

原理图

原理图中门电路与硬件描述语言一致:

assign LED = (~SEL & D0) | (SEL & D1);

原理图代码

综合

综合的过程是由 FPGA 综合工具箱将 HDL 原理图或其他形式源文件进行分析,进而推演出由 FPGA 芯片中底层基本单元表示的电路网表的过程。通俗来讲,就是将自己的设计映射到 FPGA 中。

点击左侧的 Run Synthesis 进行综合,点击 OK

启动综合

综合完成后,查看综合后的原理图,点击 OK,下个弹窗点击 YES

查看综合结果

在左侧点击 Schematic 查看综合后的原理图:

综合后原理图

综合后的原理图如下。中间是与器件相关的 LUT

LUT

引脚约束

在综合后我们就可以进行引脚约束了,即指定 FPGA 的引脚。

首先创建引脚约束文件,其添加方式与前面其他文件相同。勾选 添加引脚约束文件

添加约束文件

Basys3 的引脚约束文件粘贴到 mux21_xdc.xdc 中(见 Basys3 开发板 的设计资源下的 Master XDC-zip):

粘贴约束文件

这里面我们需要的引脚是在 Basys3 上的三个开关和一个 LEDsw [0], sw [1], sw [2] 作为三个输入,解开对应注释:

输入引脚

一个引脚为 U16LED 作为 MUX 的输出,解开对应注释:

输出引脚

此时,我们完成了约束文件的创建。我们可以运行实现,点击 Run Implementation,再点 OK

运行实现

耐心等待实现成功后会有弹窗提示,点击 Cancel

实现成功

实现后仿真

FPGA 在门电路形成映射后,需要查看电路的时序分析,是否有产生延时或毛刺,符合要求才能使用。

运行后仿真,点击 Run Simulation,点击 Run Post-Implementation Timing Simulation

启动后仿真

得到后仿真波形图:

后仿真波形

SEL = 0,若 D0 = 1,则 LED 亮;当 SEL = 1,若 D1 = 1,则 LED 亮。注意在 D0 为高电平时,LED 有时会延迟一会才会亮,此处不明显。这里的后仿真与前面的行为仿真不同,可能因为硬件原因而出现延迟。

比特流文件

生成比特流文件后,就可以下载到 FPGA 中,完成 FPGA 的配置。

点击左侧 Generate Bitstream 生成比特流文件:

生成比特流文件

成功后会有弹窗,打开硬件管理:

打开硬件管理

点击 Open target,自动连接:

连接硬件

然后点击 Program

烧录程序

这样就可以将自己的比特流文件下载到 FPGA 中了,随后可以在 Basys3 开发板上验证设计是否正确。至此,Vivado 基本开发流程就结束啦。


Vivado 工程创建(从新建到下板)

筱羊冰冰 于 2020-12-17 09:32:20 发布

新建项目

双击软件,注意是三个菱形的快捷方式,有时可能会看到两个不一样的 Vivado,选择第二个。

软件启动

然后是:

欢迎界面

选择一个地址和项目名称,注意项目名称和路径 不要有中文

项目信息

接下来是选择项目类型,这里注意在 导入不源文件(Do not specify sources at this time) 要选上。

项目类型

然后需要选择器件类型,也就是使用的 FPGA 板子的类型。按自己的板子选,不要照抄。然后搜索和选项卡的筛选会在这个环节帮你省下不少时间。

选择器件

然后一路继续即可。

进入界面

主界面

首先是 source 框,其中有三项是我们经常使用的。

  • 第一部分的蓝笔:是我们写程序的地方。
  • 黄色荧光笔部分:是约束文件,是连接主文件的输入输出和板子上的管脚连接的重要部分。
  • 红色部分:是仿真文件,用于验证代码是否正确。

注意:仿真和最后的综合和实现不大一样,仿真没问题不代表综合和实现过程中会顺利完成。

然后是 source 右侧的代码区,下面是控制台和报错提示(有一些没有用的报错直接用垃圾箱按键删除即可,能删掉的都是没用的)。

最左边是项目需要使用的一些流程。

添加源代码

设计(design)、仿真和约束文件的创建方式基本相同,注意以下几点:

  • 右键点击 source(表示三种 source 中的一个)。
  • 一定要确定好自己要选择的文件类型,有时在对应文件类型下的选项并不是当前的文件类型(可能有一点绕,但遇到了就懂了)。

添加文件

点击加号,选择 Create File,然后为其命名。

创建文件

这样就创建好了:

文件创建完成

点击 Finish 后会有一个弹窗,这是让你选择文件的管脚等信息。因为我们有 约束文件,所以直接关闭即可。

每一种文件的类型在后续小项目中会进行介绍,这里不做赘述。

其他功能(左侧功能介绍)

仿真

仿真可以在一定程度上判断程序的运行是否正确,虽然本文没有关于仿真文件写法的讲述,但还是要介绍这个主要功能的使用。

我们有一个叫 a 的 design 模块,仿真文件 调用了这个模块,所以在仿真区中可以看到 a_sim(仿真文件)下面显示的子文件为 a

仿真文件结构

点击 Run Simulation(左边蓝色部分)。

启动仿真

仿真开始后,我们会看到这样的界面:

仿真界面

最左边的一条是整个工程文件中的设计文件(design),中间框是对应的文件中的变量(输入输出变量和中间变量都有),右边是仿真文件产生的波形,通过这个就能看到程序的运行。

设置中可以调整输出的进制(其实也可以在左侧的 swled 中一个个右键调整)。

调整进制

上面的一行是一些功能,介绍一些常用的:

  • 播放键:表示运行,需要点击 暂停键 截止。
  • 播放键右下角有 m 标记的按键:定时运行,到时间就自动停止,在它右边是设置时间。
  • 黄色荧光笔按键:将整个波形安排在一个窗口上。
  • 红笔的位置:将当前位置调整到开始 / 结束。
  • 黑笔部分:一个变量波形的下一个 / 上一个变化位置,例如当前 sw63,点击 “上一个” 就能达到上一个值的位置。
  • 蓝笔:添加光标位置,这样就可以用两条线来测量时间(在物理仪器中确实蛮常用的)。

仿真功能键

在关闭仿真时(点击图示的位置),会提示你要不要保存仿真波形,如果有需要就保存一下,但会导致整体文件变大很多。

保存波形

综合

接下来部分就是下板三件套了,如果我们希望将一个文件真正的在板子上运行,对你按下的按键或者是拨码开关有反应,那么接下来的步骤就是不可或缺的。

(按照顺序,黄色荧光笔依次为综合、实现和生产比特流,实际应用也是按照这个顺序来进行)

下板流程

综合:将高级抽象层次的语言描述转化成较低层次的电路结构。

我们一定要知道,FPGA 的含义(百度百科截图):

FPGA 定义

我们在编程的过程中,尽管有几种不同层次的书写方式,但这种语言还是属于一种高级语言,也就是说我们可以只写代码,让软件帮我们设计电路图。

(这也是为什么仿真过了有时候下板还是不对,实际的电路图可能因为书写不规范产生一些问题导致)

言归正传,这里还有一个查看管脚分配(个人暂且还没用上):

(在综合和实现之间的 RTL ANALYSIS,点击 Open Elaborated Design

查看管脚分配

实现 & 生产比特流

这两个步骤和上面基本一致,只要进行点击即可,重点是 一定要好好看看弹出的 warning!有时可能确实能生成比特流,但结果并不满意,这时这些报错就很重要了。

下板

当生产比特流成功,会有这样的弹窗,按照图片选择打开硬件。

打开硬件

连接方式:(注意一定要先打开板子的电源)

  • 这种比较快:

    快速连接

  • 这种是在操作栏里面寻找,在左下角 open target

    操作栏连接

然后在选中的部位右键,选择 Program Device,弹出窗口。选择继续。

烧录程序

然后我们的板子就读入比特流,实现了按照我们编程的内容进行工作。

其他细节

快速实现下板三件套

快速操作

在快捷栏里面就有,甚至如果你直接点击比特流,会提醒你没有综合、实现,然后按照提示进行点击直接一步到位。

报错在这里,旁边还有控制台

报错信息

更改背景颜色

更改背景

这里面有很多项可以修改,按照自己的意愿就好,如果有选择困难就上网找一个博客,挑一个搭配好的颜色,个人的调色多少沾点阴间就不展示了。

改完了记得 save as……

最后介绍一下项目的文件构成

项目文件

选中处可以直接打开项目,不需要通过 Vivado;

直接打开项目

这里面是项目源码,source 是源文件,sim 是仿真文件,应该还有一个 constrs_1 文件夹,是约束文件(这里在举例子的时候没写)。

文件分类

这个 sim 是存放项目中仿真波形图的,之前提到过那个可能会导致整个项目变大的波形图。如果是自己可以考虑留一部分,如果是传递文件这部分还是省了吧。(之前见过一个仿真波形图文件达到 600M 的,如果跑的时间长确实很占空间)

有一些应该还有一个 .runs 文件夹的,这里面能找到你生成的比特流文件。(截图是另一个项目的)

比特流文件

如果 没有按照提示的顺序来 或者是 用错了板子导致生成了两份综合实现文件,软件就可能不会自己为你找到 bit 文件的位置,就需要在框中自己选择 bit 文件。

选择 bit 文件


Vivado 开发 FPGA 使用流程、教程 Verilog(建立工程、编译文件到最终烧录的全流程)

xingxing 点灯 已于 2023-08-10 20:15:31 修改

一、概述

Vivado 开发 FPGA 流程分为创建工程、添加设计文件、编译、线上仿真、布局布线(添加约束文件)、生成比特流文件、烧录等步骤,下文将按照这些步骤讲解 Vivado 从创建工程到程序烧录到 FPGA 里的操作流程。

二、工程创建

打开 Vivado 软件后,出现下图:

欢迎界面

选择 Create Project 后,出现下图:

创建工程

选择 Next 后,出现下图:

下一步

Project Name 中修改文件名称(名称和路径最好不要有中文),然后点击 Next,出现下图:

输入工程信息

继续点击 Next,出现下图:

选择项目类型

文件的添加和创建后面可以进行,这里可以直接点击 Next,然后出现下图:

添加文件

约束文件后面也可以添加,所以继续点击 Next,出现下图:

添加约束文件

选择对应的 FPGA 的型号以后点击 Next,出现下面的总结图:

工程总结

点击 Finish,空的工程就创建完毕了。

三、添加设计文件并编译

空的工程创建完毕后,如下图所示,点击 按钮,添加 Verilog 文件。

添加文件

然后在下图中,我们现在在创建设计文件,所以默认的第二个就好,然后点击 Next

选择文件类型

然后出现下图:

创建文件

这里点击 Create File,有的 Vivado 会出现下面的图片,有的不出现,如果出现下面的图片,起一个名字,创建 Verilog HDL 文件(也可以点击 Add Files,添加已有文件,这里以创建新的文件为例)。

文件命名

选择名字和文件位置,然后点击 OK,位置默认情况会放在工程文件夹下,点击 OK,出现下图:

文件创建成功

上图表示一个设计文件已经添加成功了,然后可以继续上述创建文件的操作,直到创建完毕,然后点击 Finish,出现下图:

完成添加

点击 OK,出现下图:

确认操作

点击 Yes,此时一个空的文件就创建好了,然后写 Verilog 代码(可以在 Vivado 里编辑,也可以在其他的文字编辑器,诸如 VSCode、Notepad++、电脑自带的 txt 文本等进行代码编辑,具体用什么进行编辑这里不再赘述)。下图是代码已经写完的情况:

代码完成

写完代码以后,就要进行编译操作了,点击左侧导航栏的 Run Synthesis 进行编译,这个编译在哪可以参考下图:

启动编译

然后出现下图,点击 OK

确认编译

此时正在进行编译操作(具体 Vivado 编译、布局布线、生成比特流文件都是什么意思,有什么意义,这里不再赘述,本文主要是讲解 Vivado 开发 FPGA 的操作流程,流程的意义不再赘述),编译是否完成可以在下图所示的位置查看:

编译状态

编译成功后,有的会出现下图所示的提示,有的不会出现,出现的话可以点 × 关掉这个提示框(编译不成功会报错,此时说明代码有问题,具体如何解决代码中出现的问题本文不再赘述),此时编译已经结束,说明 Verilog 代码没有出现语法上的错误。

编译成功

四、线上仿真

三的操作只是写了代码,并且代码没有语法错误,但并不代表代码的功能也和预期一样,此时需要进行功能验证,也就是进行线上仿真。

第一步还是添加文件,三里添加的是设计文件,这次要添加仿真文件,也叫 tb 文件,还是点击 +,然后选择第三个选项(仿真文件),如下图所示:

添加仿真文件

具体点了 Next 以后怎么操作参考三里怎么添加的设计文件,流程一模一样,只是一个添加的是设计文件,一个添加的是仿真文件,这里不再赘述。

同样,仿真文件添加完以后要写对应的代码,代码写完以后进行仿真,具体点哪里进行仿真可以参考下图:

启动仿真

如果报错,说明 tb 文件写的有问题,没问题会出现下图的仿真界面:

仿真界面

然后出现的仿真界面观察波形是否有问题,蓝色代表高阻态,红色代表未知态,绿色代表逻辑 01,具体仿真界面的操作本文不再赘述,仿真没有问题以后,说明代码现在不仅没有语法错误,功能同样也没有错误。

五、布局布线

现在代码没有语法错误、功能错误,就可以考虑布局布线了,把具体的输入、输出映射到 FPGA 对应的引脚上,操作如下所示:

点击左侧导航栏的 Run Implementation,让 Vivado 先自动进行布局布线,点哪里可以参考下图:

启动布局布线

等待一段时间,成功以后出现下面的框:

布局布线成功

可以 × 掉上面的框,在左侧导航栏打开 Open Implemented Design,也可以点击上图的 Open Implemented 后点击 OK

打开布局布线设计以后,出现下面的图:

布局布线设计

上图选择 I/O ports,如果找不到,就点击 layout,再点击 I/O Planning(注意,只有 open implementation 时才可以在 layout 里找到 I/O Planning)。

然后如下图,点击 scalar ports,进行引脚约束:

引脚约束

在上图里,在 Scalar ports 更改端口的位置(Package Pin)、以及电压标准(I/O Std)。

具体设置到什么端口看原理图,电压标准大多数时候选择 LVCMOS33 就好,只有差分等特殊情况选择别的电压标准,这里不再介绍如何查看原理图,不同电压标准的区别。

然后端口、电压标准等设置好以后,键盘按 Ctrl + S 进行约束文件的保存(约束文件里就是刚才对引脚、电压标准等的约束)。

现在,我们设计文件、仿真文件、约束文件就都写好了,可以看一下下面的图:

文件结构

这就是刚才我们创建的设计文件、仿真文件、约束文件,然后再点一次 Run Implementation,因为我们更改了约束文件,所以重新进行一下编译和布局布线操作,具体的对话框的提示都很简单,大概意思就是文件已经改变了是否重新编译这种意思,点击 Yes 重新编译、布局布线就好了,然后布局布线在这里也就结束了。

六、生成比特流文件

现在已经可以生成比特流文件了(这个文件就是烧录到 FPGA 里的文件),点击左侧的 Generate Bitstream,如下图所示:

生成比特流文件

点一些框的 OKYes 之类的,然后生成比特流文件成功(如果不成功,考虑是约束文件的问题,这里不再对约束文件进行太过详细的解释,可以百度约束文件的作用,然后查看自己刚才保存的约束文件是否有问题,通常 Ctrl + S,如果有默认的没有改变的引脚号,它不会保存在约束文件里,自己添加即可)。

七、烧录

接下来就是烧录操作了,点击左侧导航栏的 Open Hardware Manager,然后点击 Open Target 然后点击 Auto Connect 进行连接,如下图所示:

硬件连接

然后点击 Program Device 选择型号:

选择设备

出现下图,直接点 Program 即可:

烧录程序

现在文件就可以烧录到 FPGA 里了,观察上板后的情况即可。


via:

  • vivado工程创建(从新建到下板)_vivado怎么新建工程-CSDN博客
    https://blog.csdn.net/rebortt/article/details/111304264_

  • Vivado开发FPGA使用流程、教程 verilog(建立工程、编译文件到最终烧录的全流程)_vivado烧写程序步骤-CSDN博客
    https://blog.csdn.net/weixin_45676874/article/details/132215573

  • Vivado 开发流程(手把手教学实例)(FPGA)_vivado设计流程示例-CSDN博客
    https://blog.csdn.net/Gentleman_Qin/article/details/80016273

  • 【FPGA】Vivado 基本开发流程_vivado设计流程-CSDN博客
    https://blog.csdn.net/weixin_44413191/article/details/107522317

相关文章:

Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录

注&#xff1a;本文为 “Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录” 相关文章合辑。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 Vivado 开发流程&#xff08;手把手教学实例&#xff09;&#xff08;FPGA&#xff09; 不完美先生 于 2018-04-…...

PowerShell从5.1升级到7.X

文章目录 环境背景安装PowerShell 7.X其它启动PowerShell 5.1和7.X$PSVersionTable.PSVersion启动PowerShell 5.1时强制启动7.X 参考 环境 Windows 11 专业版 背景 PowerShell 5.1是Windows内置的&#xff0c;发布时间是2016 年。现在PowerShell版本已经到了7.5.1&#xff0…...

域名与官网的迷思:数字身份认证的全球困境与实践解方-优雅草卓伊凡

域名与官网的迷思&#xff1a;数字身份认证的全球困境与实践解方-优雅草卓伊凡 一、官网概念的法律与技术界定 1.1 官网的实质定义 当卓伊凡被问及”公司域名就是官网吗”这一问题时&#xff0c;他首先指出&#xff1a;”这相当于问’印着某公司logo的建筑就是该公司总部吗’…...

Vue实现成绩增删案例

Vue实现成绩增删案例 案例功能需求案例实现实现思路完整代码功能演示 案例小结 案例功能需求 1.通过vue渲染数据&#xff0c;将成绩的相关信息显示出来&#xff08;学号&#xff0c;学科&#xff0c;成绩&#xff09; 2.能够增加相关的成绩信息 3.能够删除相关的成绩信息 4.能…...

开源项目实战学习之YOLO11:ultralytics-cfg-models-rtdetr(十一)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 1. __init__.py2. model.py3. predict.py4. train.py5. val.py ultralytics-cfg-models-rtdetr 主要与 Ultralytics 库中 RTDETR&#xff08;实时目标检测模型&#xff0c;R…...

【Bootstrap V4系列】学习入门教程之 组件-按钮(Buttons)

Bootstrap V4系列 学习入门教程之 组件-按钮&#xff08;Buttons&#xff09; 按钮&#xff08;Buttons&#xff09;一、示例二、可用作按钮的 HTML 标签三、带轮廓线的按钮四、按钮的尺寸五、活动状态六、禁用状态七、按钮插件切换状态Checkbox and radio buttons &#xff08…...

【java八股文】深入浅出synchronized优化原理

&#x1f50d; 开发者资源导航 &#x1f50d;&#x1f3f7;️ 博客主页&#xff1a; 个人主页&#x1f4da; 专栏订阅&#xff1a; JavaEE全栈专栏 synchronized优化原理 synchronized即使悲观锁也是乐观锁&#xff0c;拥有自适应性。 jvm内部会统计每个锁的竞争激烈程度&…...

裴蜀定理及其证明

裴蜀定理 对于所有整数 a a a和 b b b&#xff0c;存在&#xff1a; g c d ( a , b ) a x b y gcd(a,b)axby gcd(a,b)axby 并且 a x b y axby axby一定是 g c d ( a , b ) gcd(a,b) gcd(a,b)的倍数。 证明 定义一个集合&#xff1a; { a x b y &#xff5c; a x b y &…...

单片机嵌入式CAN库

kw_can库说明 本库是针对CAN类型数据的收发设计&#xff1a; 主要应用于大数据量&#xff08;数据处理速度高于缓存CAN_RTX_FIFO_SIZE大小&#xff09;接收不丢包可快速进出接收中断可跨线程调用发送接口。 本库开源连接地址&#xff1a;gitee连接 实现思路 本库采用C语言…...

基于 JSP 和 Servlet 的数字信息分析小应用

Java Web 实验&#xff1a;基于 JSP 和 Servlet 的数字信息分析小应用 一、实验目的 实现一个简单的 Java Web 应用&#xff0c;通过 JSP 表单收集用户输入的文本信息&#xff0c;提交至 Servlet 分析其中是否包含数字&#xff0c;并返回结果。掌握 JSP 与 Servlet 的协同工作…...

从零认识阿里云OSS:云原生对象存储的核心价值

引言 在云计算时代&#xff0c;海量数据的存储与管理成为企业数字化转型的关键命题。阿里云对象存储OSS&#xff08;Object Storage Service&#xff09;作为云原生的分布式存储服务&#xff0c;凭借其独特的架构设计和丰富的功能矩阵&#xff0c;正在成为企业构建数据湖、管理…...

2025年深圳杯数学建模(东三省)B题【颜色转换】原论文讲解

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2025年深圳杯数学建模&#xff08;东三省&#xff09;B题【颜色转换】完整的成品论文。 给大家看一下目录吧&#xff1a; 目录 摘 要&#xff1a; 一、问题重述 二&#xff0e;问题分析 2.1问题一 2.2问…...

开源语音合成和转换项目

开源语音合成和转换项目 大模型出来以后&#xff0c;语音合成和转换方面也有了很大的变化。在语音转换文字方面有Whisper、SeamlessM4T等&#xff1b;在语音合成方面有ChatTTS&#xff08;中英文&#xff09;、Orpheus TTS&#xff08;仅仅支持英文&#xff09;、Amphion&…...

考研408《计算机组成原理》复习笔记,第二章计算机性能

一、计算机各项性能指标 1、计算机系统整体的性能指标&#xff1a; 从宏观上看&#xff0c;整个计算机是由软件硬件共同性能决定的&#xff0c;但是【最主要的决定性的影响】还是来自于【硬件】 因为计算机组成原理主要讲【硬件】&#xff0c;那么我们也仅考虑【硬件性能】 2…...

智能决策支持系统的基本概念与理论体系

决策支持系统是管理科学的一个分支&#xff0c;原本与人工智能属于不同的学科范畴&#xff0c;但自20世纪80年代以来&#xff0c;由于专家系统在许多方面取得了成功&#xff0c;于是人们开始考虑把人工智能技术用于计算机管理中来。在用计算机所进行的各种管理中&#xff0c;如…...

什么是运算符重载

运算符重载&#xff0c;就是对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型&#xff0c;本质上是函数重载。以下为您详细介绍&#xff1a; 实现原理与方式 - 原理&#xff1a;把指定的运算表达式转化为对运算符函数的调用&#xff0…...

自定义Dockerfile,发布springboot项目

(1) 上传jar包 把hello项目打成一个可执行的jar包 hello-1.0-SNAPSHOT.jar&#xff0c;把这个jar包上传到linux中 (2) 创建文件&#xff0c;文件名my_hello&#xff08;就是一个Dockerfile&#xff09;&#xff0c;内容如下 #1.定义父镜像(定义当前工程依赖的环境)&#xff1a;…...

什么是多租户系统

随着云计算和 SaaS&#xff08;Software as a Service&#xff09;模式的普及&#xff0c;多租户架构&#xff08;Multi-Tenant Architecture&#xff09;成为 SaaS 产品设计中的核心模式之一。多租户架构允许多个用户&#xff08;租户&#xff09;共享同一套基础设施和应用&am…...

摩尔缠论课程合集完整版核心课程前置课程圈子问答星球圈子摩尔缠论三个阶段

一、教程描述 这是一套摩尔缠论课程合集&#xff08;完整版&#xff09;&#xff0c;内容非常系统并且极为全面&#xff0c;包括视频、图片和文档等不同文件类型&#xff0c;摩尔缠论共有三个版本&#xff0c;有些类似软件版本迭代&#xff0c;后一版本是前一版本的升级和进化…...

java学习之数据结构:三、八大排序

主要介绍学过的各种排序算法 目录 1.插入排序 1.1直接插入排序 1.2希尔排序 2.选择排序 2.1直接选择排序 2.2堆排序 3.交换排序 3.1冒泡排序 3.2快速排序 4.归并排序 5.基数排序 1.插入排序 1.1直接插入排序 基本思想&#xff1a;就是将待排序的数据按照其元素值的…...

Docker Compose:服务编排:批量管理多个容器

通过docker compose进行容器批量管理&#xff1a;一次性启动四个容器&#xff08;nginx&#xff0c;tomcat&#xff0c;redis&#xff0c;mysql&#xff09; &#xff08;1&#xff09; 创建docker-compose目录 mkdir ~/docker-compose cd ~/docker-compose &#xff08;2&…...

微服务设计约束

相较于单体应用&#xff0c;微服务架构在提升开发、部署等环节灵活性的同时&#xff0c;也提升了在运维、监控环节的复杂性。结合实践总结&#xff0c;微服务架构的设计有以下四条设计约束遵循&#xff1a; (1)微服务个体约束 一个设计良好的微服务应用&#xff0c;所完成的功…...

C语言中的自定义类型 —— 结构体.位段.联合体和枚举

自定义类型 1. 前言2. 结构体2.1 结构体的声明2.2 结构体变量的定义和初始化2.3 结构体的特殊声明2.4 结构体的自引用2.5 结构体的内存对齐2.6 修改默认对齐数2.7 结构体传参 3. 位段4. 联合体5. 枚举6. 结言 1. 前言 在C语言中已经为用过户提供了内置类型&#xff0c;如&…...

【序列贪心】摆动序列 / 最长递增子序列 / 递增的三元子序列 / 最长连续递增序列

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;贪心算法 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 摆动序列最长递增子序列递增的三元子序列最长连续递增序列 摆动序列 摆动序列 贪心策略&#xff1a;统计出所有的极大值和极小…...

从零开发一个B站视频数据统计Chrome插件

从零开发一个B站视频数据统计Chrome插件 前言 B站&#xff08;哔哩哔哩&#xff09;作为国内最大的弹幕视频网站之一&#xff0c;视频的播放量、点赞、投币、收藏等数据对于内容创作者和数据分析者来说非常重要。本文将带你一步步实现一个Chrome插件&#xff0c;自动统计并展…...

【Python实战】飞机大战

开发一个飞机大战游戏是Python学习的经典实战项目&#xff0c;尤其适合结合面向对象编程和游戏框架&#xff08;如Pygame&#xff09;进行实践。以下是游戏设计的核心考虑因素和模块划分建议&#xff1a; 一、游戏设计核心考虑因素 性能优化 Python游戏需注意帧率控制&#xff…...

WebAPI项目从Newtonsoft.Json迁移到System.Text.Json踩坑备忘

1.控制器层方法返回类型不能为元组 控制器层方法返回类型为元组时&#xff0c;序列化结果为空。 因为元组没有属性只有field&#xff0c;除非使用IncludeFields参数专门指定&#xff0c;否则使用System.Text.Json进行序列化时不会序列化field var options new JsonSerializ…...

人工智能助力工业制造:迈向智能制造的未来

在当今数字化转型的浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;技术正逐渐成为推动工业制造领域变革的核心力量。智能制造作为工业 4.0 的重要组成部分&#xff0c;通过将 AI 技术与传统制造工艺深度融合&#xff0c;正在重塑整个生产流程&#xff0c;提高生产效率、…...

影楼精修-露齿笑算法解析

注意&#xff0c;为避免侵权&#xff0c;本文图片均为AIGC生成或网络公开数据&#xff1b; 像素蛋糕-露齿笑 在介绍本文之前&#xff0c;先说一下&#xff0c;其实露齿笑特效&#xff0c;并非像素蛋糕首创&#xff0c;早在几年前&#xff0c;face app就率先推出了这个效果&am…...

【iview】es6变量结构赋值(对象赋值)

变量的解构赋值 以iview的src/index.js中Vue.prototype.$IVIEW改造为例练习下怎么使用变量的解构赋值 原来的写法&#xff1a; const install function(Vue, opts {}) {if (install.installed) return;locale.use(opts.locale);locale.i18n(opts.i18n);Object.keys(iview).fo…...

在Windows系统中使用Docker发布镜像到镜像仓库

在Windows系统中使用Docker发布镜像到镜像仓库的步骤如下&#xff1a; 步骤 1&#xff1a;安装并配置Docker 安装Docker Desktop • 下载Docker Desktop for Windows并安装。 • 确保启用WSL 2或Hyper-V后端&#xff08;根据系统版本选择&#xff09;。 验证Docker运行状态 打…...

糖尿病筛查常识---秋浦四郎

糖尿病筛查可以早期发现糖尿病或糖尿病前期&#xff08;血糖异常但未达到糖尿病标准&#xff09;&#xff0c;以利于及时干预&#xff0c;预防并发症。因为许多人患上糖尿病时没有明显症状&#xff0c;但已经开始对身体造成损害&#xff0c;有了明显糖尿病症状才检查发现糖尿病…...

CSS 预处理器 Sass

目录 Sass 一、Sass 是什么&#xff1f; 二、核心功能详解 1. 变量&#xff08;Variables&#xff09; 2. 嵌套&#xff08;Nesting&#xff09; 3. 混合宏&#xff08;Mixins&#xff09; 4. 继承&#xff08;Inheritance&#xff09; 5. 运算&#xff08;Operations&…...

Mybatisplus:一些常用功能

自动驼峰 mybatis-plus:configuration:# 开启驼峰命名规则&#xff0c;默认true开启map-underscore-to-camel-case: true# 控制台日志打印&#xff0c;便于查看SQLlog-impl: org.apache.ibatis.logging.stdout.StdOutImpl TableName 作用&#xff1a;表名注解&#xff0c;标识…...

Golang WaitGroup 用法 源码阅读笔记

使用 sync.WaitGroup可以用来阻塞等待一组并发任务完成 下面是如何使用sync.WaitGroup的使用 最重要的就是不能并发调用Add()和Wait() var wg sync.WaitGroupfor ... {wg.Add(1) // 不能和wg.Wait()并发执行go func() {// 不能在启动的函数里面执行wg.Add(), 否则会panicde…...

第二章:一致性基础 A Primer on Memory Consistency and Cache Coherence - 2nd Edition

在本章中&#xff0c;我们将介绍足够多的缓存一致性知识&#xff0c;以便理解一致性模型是如何与缓存相互作用的。我们在 2.1 节首先给出在本入门教程中所考虑的系统模型。为了简化本章以及后续章节的阐述&#xff0c;我们选择了尽可能简单的系统模型&#xff0c;该模型足以说明…...

C++类_移动构造函数

std::move 的主要用途是在对象所有权转移时&#xff0c;触发移动构造函数或移动赋值运算符&#xff0c;避免不必要的深拷贝&#xff0c;提升性能。 移动构造函数 和 移动赋值运算符&#xff0c; std::move转换为右值&#xff0c;匹配到移动构造函数和移动赋值运算符。…...

Spring AI 实战:第一章、Spring AI入门之DeepSeek调用

引言&#xff1a;当Spring遇上AI&#xff0c;会擦出怎样的火花&#xff1f; 作为一名Java开发者&#xff0c;是否曾经眼红Python阵营那些花里胡哨的AI应用&#xff1f;是否在对接各种大模型API时&#xff0c;被五花八门的接口规范搞得头大&#xff1f;好消息是&#xff0c;Spr…...

fastapi+vue中的用户权限管理设计

数据库设计&#xff1a;RBAC数据模型 这是一个典型的基于SQLAlchemy的RBAC权限系统数据模型实现&#xff0c;各模型分工明确&#xff0c;共同构成完整的权限管理系统。 图解说明&#xff1a; 实体关系&#xff1a; 用户(USER)和角色(ROLE)通过 USER_ROLE 中间表实现多对多关系…...

Space Engineers 太空工程师 [DLC 解锁] [Steam] [Windows]

Space Engineers 太空工程师 [DLC 解锁] [Steam] [Windows] 需要有游戏正版基础本体&#xff0c;安装路径不能带有中文&#xff0c;或其它非常规拉丁字符&#xff1b; DLC 版本 至最新全部 DLC 后续可能无法及时更新文章&#xff0c;具体最新版本见下载文件说明 DLC 解锁列表&…...

随机变量数字特征

主要介绍一维随机变量期望和方差、二维随机变量期望和方差、以及协方差相关公式&#xff0c;及推导。 一维随机变量 以一个抛硬币的场景作为例子&#xff0c;如下&#xff1a; 抛掷两枚均匀硬币&#xff0c;如果两枚都是正面向上&#xff0c;则赢得2元&#xff0c;否则就输掉…...

C++总结01-类型相关

一、数据存储 1.程序数据段 • 静态&#xff08;全局&#xff09;数据区&#xff1a;全局变量、静态变量 • 堆内存&#xff1a;程序员手动分配、手动释放 • 栈内存&#xff1a;编译器自动分配、自动释放 • 常量区&#xff1a;编译时大小、值确定不可修改 2.程序代码段 •…...

【多线程】七、POSIX信号量 环形队列的生产者消费者模型

文章目录 Ⅰ. 信号量一、POSIX 信号量的概念二、POSIX 信号量的类型区别三、POSIX 信号量与 SystemV 信号量的区别Ⅱ. 线程信号量基本原理一、为什么要引入信号量❓二、PV 操作三、POSIX 信号量的实现原理四、CAS操作介绍Ⅲ. POSIX未命名信号量接口一、初始化无名信号量二、销毁…...

二维码批量识别—混乱多张二维码识别-物品分拣—-未来之窗-仙盟创梦IDE

仙盟模型 用途 精准分拣&#xff1a;快速准确识别物品上复杂或多个二维码&#xff0c;依据码中信息&#xff08;如目的地、品类等&#xff09;实现物品自动化分拣&#xff0c;提高分拣效率与准确性。库存管理&#xff1a;识别入库、出库物品二维码&#xff0c;更新库存数据&am…...

《TensorFlow 与 TensorFlow Lite:协同驱动 AI 应用全景》

《TensorFlow 与 TensorFlow Lite&#xff1a;协同驱动 AI 应用全景》 摘要 &#xff1a;在机器学习技术浪潮中&#xff0c;TensorFlow 与 TensorFlow Lite 作为 Google 技术栈的核心组件&#xff0c;分别占据云端训练与端侧部署的关键位置。本文将系统梳理二者架构特性、功能…...

Spring AI 实战:第三章、Spring AI结构化输出之告别杂乱无章

引言&#xff1a;当程序员遇上剧荒 “周末看什么&#xff1f;” 这个看似简单的问题&#xff0c;往往能让我们在各大影视平台间反复横跳半小时&#xff0c;最后无奈选择重刷《老友记》。本期让我们用技术解决这个"世纪难题"&#xff1a;让大模型成为你的私人影视推荐…...

ros2 humble 控制真实机械臂(以lerobot为例)

基础版 0.确保串口访问权限 sudo chmod 666 /dev/ttyARM0 # 确保串口访问权限 1.下载 lerobot 驱动功能包 git clone https://gitee.com/kong-yue1/lerobot_devices.git 2.编写控制节点&#xff08;完整代码&#xff09; 主要功能是与 Feetech 电机总线进行通信&#…...

REINFORCE蒙特卡罗策略梯度算法详解:python从零实现

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…...

模拟SIP终端向Freeswitch注册用户

1、简介 使用go语言编写一个程序&#xff0c;模拟SIP-T58终端在Freeswitch上注册用户 2、思路 以客户端向服务端Freeswitch发起REGISTER请求&#xff0c;告知服务器当前的联系地址构造SIP REGISTER请求 创建UDP连接&#xff0c;连接到Freeswitch的5060端口发送初始的REGISTER请…...

Elasticsearch 中的索引模板:如何使用可组合模板

作者&#xff1a;来自 Elastic Kofi Bartlett 探索可组合模板以及如何创建它们。 更多阅读&#xff1a; Elasticsearch&#xff1a;可组合的 Index templates - 7.8 版本之后 想获得 Elastic 认证吗&#xff1f;查看下一期 Elasticsearch Engineer 培训的时间&#xff01; El…...