超详细FPGA新手小白入门点亮LED灯

这篇具有很好参考价值的文章主要介绍了超详细FPGA新手小白入门点亮LED灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Vivado软件的基本操作(以控制LED灯闪烁为例)

其实之前早已用过Vivado进行FPGA的开发学习,但由于每次都是浅尝辄止地学了一些时间,加上Vivado软件和FPGA开发流程的复杂性,长时间不用就会遗忘。因此今天还是简单地写个笔记记录一下Vivado软件的一些基本操作,实现一个“hello world工程”:控制LED灯的闪烁。

实验基于的版本是Vivado17.4,FPGA芯片是Xilinx的XC7Z100-2FFG900。

创建Vivado工程

(1)双击Vivado快捷方式启动Vivado。

fpga亮灯,fpga开发

(2)点击Create Project创建一个新工程。

fpga亮灯,fpga开发

(3)在弹出的建立新工程的向导中点击Next。

fpga亮灯,fpga开发

(4)在弹出的对话框中输入工程名和工程存放的目录,之后点击Next。

需要注意工程路径“Project location”不能有中文空格,路径名称也不能太长。由于默认勾选了“Create project subdirectory”选项,Vivado会在所选工程目录下自动创建一个与工程名同名的文件夹,用于存放工程内的各钟文件。 Vivado会自动管理工程文件夹内的各种工程文件,并创建相应的子目录。

fpga亮灯,fpga开发

(5)在工程类型中选择RTL Project,之后点击Next。

  • “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提供的工程模板 。

fpga亮灯,fpga开发

(6)这里添加源文件界面直接点击Next,选择在创建完工程之后再创建和添加源文件。以及Target language选择Verilog(默认),但也可以使用VHDL,支持多语言混合编程。

fpga亮灯,fpga开发

(7)添加约束文件界面直接点击Next,即在创建完工程之后创建添加约束文件。

fpga亮灯,fpga开发

(8)接下来选择器件型号,这里根据大家自己的具体芯片型号去相应选择即可。选择完成后点击Next。

fpga亮灯,fpga开发

具体的ZYNQ命名规则如下图所示:

fpga亮灯,fpga开发

(9)进入工程概览界面,这个页面将之前几个步骤中的设置全部列了出来,供用户检查。确认无误后点击Finish完成工程的创建。

fpga亮灯,fpga开发

Vivado主界面介绍

fpga亮灯,fpga开发

(1)Flow Navigator:提供对命令和工具的访问,包含从输入到生成比特流的整个过程。

(2)数据窗口区域:默认情况下,这个区域显示与设计源文件和数据相关的信息,如:

  • Sources窗口:显示层次结构(Hierarchy)、IP源文件(IP Sources)、库(Libraries)和编译顺序(Compile Order)的视图。
  • Netlist窗口:提供分析后的(elaborated)或综合后的(synthesisized)逻辑设计的分层视图。

(3)Properties窗口:显示有关所选逻辑对象或器件资源的信息。

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

  • 用于显示和编辑基于文本的文件和报告的Text Editor。
  • 原理图(Schematic)窗口。
  • 器件(Device)窗口。
  • 封装(Package)窗口。

(5)结果区域窗口:在Vivado中所运行命令的状态和结果,显示在结果窗口区域内,这是一组子窗口的集合。子窗口的集合。在运行命令、生成消息、创建日志文件和报表文件时,相关信息将显示在此区域。默认情
况下,此区域包括以下窗口:

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

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

(7)主菜单:提供对Vivado命令的访问。常用的命令会一直显示(例如, File > Project > Open),而其他命令只在设计活动时显示 (例如,Reports > ReportDRC)。

(8)窗口布局(Layout)选择器:提供预定义的窗口布局,以方便设计过程中的各种任务。布局选择器能够轻松地更改窗口布局,也可以使用菜单栏中的 “Layout”菜单来更改窗口布局。

创建Verilog输入文件

(1)点击左侧的Add Sources或者右侧的“+“号。

fpga亮灯,fpga开发

(2)选择Add or create design sources,之后点击Next。

fpga亮灯,fpga开发

(3)选择Create file。

fpga亮灯,fpga开发

(4)自己输入文件名,点击“OK”。

fpga亮灯,fpga开发

(5)点击Finish,会出现如下窗口。

此窗口用于设置源文件的模块名称和端口列表,Vivado会根据在此窗口中的设置,自动地在HDL源文
件中写入相应的verilog语句。我们手动输入代码,所以这里不作任何设置,直接点击 OK即可。

fpga亮灯,fpga开发

(6)在弹出的对话框中选择“Yes”。

fpga亮灯,fpga开发

(7)此时“Sources”窗口中就出现了我们刚刚创建的源文件,如下图所示。

fpga亮灯,fpga开发

(8)这时可直接双击打开这个.v文件进行Verilog代码的编写。由于Vivado自带的编辑器不是很好用,所以我这里配置了将vscode代替默认的编辑器(网上有详细教程,可以自己查一下,包括也可以替换成vim、notepad++等)。

这里定义了一个 32 位的寄存器timer, 用于循环计数 0~199999999(1 秒钟), 计数到 199999999(1秒)的时候, 寄存器 timer 变为0,并翻转四个LED。这样原来LED是灭的话,就会点亮,如果原来LED为亮的话,就会熄灭。由于输入时钟为 200MHz 的差分时钟,因此需要添加IBUFDS原语连接差分信号。

编写好代码后切记保存

`timescale 1ns / 1ps

module led_twinkle(
    // 差分时钟输入
    input                sys_clk_p,
    input                sys_clk_n,
    input                rst_n,
    output reg  [3:0]    led
    );
    
    reg  [31:0]    timer_cnt;
    wire  sys_clk;

    IBUFDS # (
        .DIFF_TERM("FALSE"),
        .IBUF_LOW_PWR("TRUE"),
        .IOSTANDAND("DEFAULT")
    ) IBUFDS_inst (
        .O(sys_clk),
        .I(sys_clk_p),
        .IB(sys_clk_n)
    );

    always @ (posedge sys_clk or negedge rst_n) begin
        if (!rst_n) begin
            led <= 4'd0;
            timer_cnt <= 32'd0;
        end
        else if (timer_cnt >= 32'd199_999_999) begin
             led <= ~led;
             timer_cnt <= 32'd0;
        end
        else begin
            led <= led;
            timer_cnt <= timer_cnt + 32'd1;
        end
    end
    
endmodule

功能仿真

在设计输入之后,设计综合前进行RTL级仿真,称为综合前仿真,也称为前仿真或功能仿真。前仿真也就是纯粹的功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟。功能仿真需要的文件:

  • 设计HDL源代码。
  • 测试激励代码(TestBench):根据设计要求输入/输出的激励程序,由于不需要进行综合,书写具有很大的灵活性。
  • 仿真模型/库:根据设计内调用的器件供应商提供的模块而定,如:FIFO、ADD_SUB等。在使用Vivado Simulator时,仿真器所需的仿真模型/库是预编译好并集成在 Vivado中的,因此不需要进行额外的预编译操作,直接加载HDL设计和TestBench即可执行仿真。

(1)首先创建一个TestBench,点击左侧的Add Sources或者右侧的“+“号。

fpga亮灯,fpga开发

(2)在弹出的窗口中选择“ Add or Create Simulation Sources”,之后点击Next,如下图所示。

fpga亮灯,fpga开发

(3)在接下来的页面中点击Create File。

fpga亮灯,fpga开发

(4)在弹出的窗口中输入TestBench的文件名,TestBench源文件名称的后缀“tb”可以用来向用户示意该源文件是一个 TestBench源文件,仅用于仿真,并不能用于设计的综合和实现。

fpga亮灯,fpga开发

(5)点击OK后点击Finish。

fpga亮灯,fpga开发

(6)在弹出的自定义模块窗口中直接点击OK即可结束TestBench源文件的创建。

fpga亮灯,fpga开发

(7)编写.v文件代码。

代码第一行的timescale是Verilog语法中的不可综合语法,用于定义仿真的时间表示仿真的单位时间为1ns,精度为1ps,这是Xilinx官方推荐的仿真单位时间和精度。

`timescale 1ns / 1ps

module led_twinkle_tb;

    reg            sys_clk_p;
    wire           sys_clk_n;
    reg            rst_n;
    wire  [3:0]    led;

    led_twinkle u_led_twinkle (
        .sys_clk_p(sys_clk_p),
        .sys_clk_n(sys_clk_n),
        .rst_n(rst_n),
        .led(led)
    );

    initial begin
        sys_clk_p = 0;
        rst_n = 0;
        #1000;
        rst_n = 1;
    end

    always #2.5 sys_clk_p = ~sys_clk_p;

    assign sys_clk_n = ~sys_clk_p;

endmodule

(8)在“Flow Navigator“窗口中点击“Run Simulation”并选择 “Run Behavioral Simulation”。

fpga亮灯,fpga开发

(9)之后就进入了仿真界面。

fpga亮灯,fpga开发

①Scope窗口:Scope(范围)是HDL设计的层次划分。在Scope窗口中,可以看到设计层次结构。当选择了一个Scope层次结构中的作用域时,该作用域内的所有 HDL对象,包括reg、wire等都会出现在“Objects”窗口中。可以在 “Objects”窗口中选择HDL对象,并将它们添加到波形查看器中。

②Object窗口:“Objects”窗口会显示在Scopes”窗口中选择的范围内的所有HDL仿真对象。例如,在Scope窗口中选择顶层模块“led_twinkle”,在“Objects”窗口中就会自动显示出led_twinkle模块中所有的对象。如下图所示:

fpga亮灯,fpga开发

③波形窗口:用于显示所要观察信号的波形。若要向波形窗口添加单个HDL对象或多个HDL对象,可以在“Objects”窗口中,右键单击一个或多个对象,然后从下拉菜单中选择“Add to Wave Window”选项。例如,可以把 “led_twinkle”模块 下的“timer_ cnt”计数器添加到波形窗口中。

fpga亮灯,fpga开发

④仿真工具栏:仿真工具栏包含运行各个仿真动作的命令按钮。从左至右依次是:

  • Restart:将仿真时间重置为零,此时波形窗口中原有的波形都会被清除。下次执行仿真时,会从0时刻重新开始。

  • Run all:运行仿真,直到其完成所有事件或遇到 HDL语句中的 s t o p 或 stop或 stopfinish命令为止。注意,如果没有在 TestBench语句中加入 s t o p 或 stop或 stopfinish命令,当点击Run all命令时,仿真器会无休止地一直仿真下去,除非用户点击仿真工具栏中的“ Break”按钮来手动地结束仿真。但是这里有个地方需要注意,如果此时需要仿真的设计比较复杂,则仿真器在运行仿真时会耗费电脑大量的CPU和内存资源,此时有可能会造成电脑卡顿甚至死机的情况。所以,如果设计比较复杂,且没有在 TestBench语句中加入 s t o p 或 stop或 stopfinish命令,最好不要轻易点击 Run all命令。

  • Run For:运行特定的一段时间。紧随在后面的两个文本框用于设定仿真时长的数值大小和时间单位。

  • Step:按步运行仿真,每一步仿真一个HDL语句。

  • Break:暂停当前仿真。

  • Relaunch :重新编译仿真源并重新启动仿真。

  • 源代码进行修改。在修改完 HDL源代码后,如果需要修改HDL代码,可以点击Relaunch按钮来重新加载UUT设计和 TestBench,以重新对修改后的HDL源代码进行仿真。此时就不需要再关闭并重新打开仿真器了。

在刚打开仿真器时,仿真器会首先将TestBench中的信号加入到波形窗口中 ,并执行一段时长的仿真。仿真的时长由Settings设置窗口中的参数值指定,如下图所示:

fpga亮灯,fpga开发

可以看到,仿真器启动后默认立即执行的仿真时长是1000ns。由于我们是在默认立即执行仿真结束之后,才加入了“timer_cnt”计数器信号,所以新加入的”timer_cnt“信号并没有波形。此时我们需要将仿真时刻重置为0,重新开始仿真。点击Restart按钮,波形窗口中的当前仿真时刻点(黄色标尺)就会回归到0ns,且原先的所有波形都被清除,如下图所示:

fpga亮灯,fpga开发

点击仿真工具栏中的Run For按钮,默认仿真时长是10us,此时就可以看到波形窗口中就出现了波形。

fpga亮灯,fpga开发

分析与综合

(1)点击“Flow Navigator”窗口中的“Open Elaborated Design”按钮。此时,Vivado会编译RTL源文件并进行全面的语法检查,并在Messages窗口中给出相应的“Error”和“Warning”。

fpga亮灯,fpga开发

(2)打开分析后 Elaborated的设计后Vivado会生成顶层原理图视图,并在默认view layout中显示设计,如下图所示:

fpga亮灯,fpga开发

(3)将打开的分析后的设计关闭,再点击“Flow Navigator”窗口中的“Run Synthesis”按钮进行综合。

fpga亮灯,fpga开发

fpga亮灯,fpga开发

(4)在弹出的窗口中点击"OK"。

fpga亮灯,fpga开发

(5)综合完成后弹出如下窗口,直接关闭即可。

fpga亮灯,fpga开发

约束输入

(1)首先需要创建一个用于存储约束语句的约束文件。点击“Sources”窗口中的 “+”号,在弹出的窗口选择“ Add or create constraints”,如下图所示,点击“Next”:

fpga亮灯,fpga开发

(2)点击“Create File”。

fpga亮灯,fpga开发

(3)在弹出的对话框中输入约束文件的名称“led_twinkle”,然后点击 OK。

fpga亮灯,fpga开发

(4)点击“Finish”即可。

fpga亮灯,fpga开发

Vivado的约束文件是以“.xdc”为文件后缀的ASCII文本文件,其中存储的是一条条的xdc约束命令。

fpga亮灯,fpga开发

点开此文件,输入如下内容:

set_property PACKAGE_PIN AJ16 [get_ports {led[0]}]
set_property PACKAGE_PIN AK16 [get_ports {led[1]}]
set_property PACKAGE_PIN AE16 [get_ports {led[2]}]
set_property PACKAGE_PIN AE15 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
set_property PACKAGE_PIN AF18 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
set_property PACKAGE_PIN F9 [get_ports sys_clk_p]
set_property IOSTANDARD DIFF_SSTL15 [get_ports sys_clk_p]

create_clock -period 5.000 -name sys_clk_p -waveform {0.000 2.500} [get_ports sys_clk_p]

普通 IO 口只需约束引脚号和电压,管脚约束如下:

set_property PACKAGE_PIN “引脚编号” [get_ports “端口名称”]

电平信号的约束如下:

set_property IOSTANDARD “电平标准” [get_ports “端口名称”]

这里需要注意文字的大小写,端口名称是数组的话用{ }括起来,端口名称必须和源代码中的名字一致,且端口名字不能和关键字一样。

电平标准中“LVCMOS33”后面的数字指FPGA的BANK 电压,LED所在BANK电压为3.3伏,所以电平标准为“LVCMOS33”。Vivado 默认要求为所有 IO 分配正确的电平标准和管脚编号。

对于xdc文件,每一个约束命令单独占用一行,命令的结尾没有如verilog中的分号一样的语句结束符号。每一条注释也单独占用一行。命令的第一个关键字代表该命令的名称,其后的所有字段都是该命令的参数列表。

设计实现

(1)约束输入完毕之后,就可以开始实现设计了。点击“Flow Navigator”窗口中的”Run Implementation”按钮。

fpga亮灯,fpga开发

(2)在弹出的界面选择OK。

fpga亮灯,fpga开发

可以看到实现正在进行。

fpga亮灯,fpga开发

(3)直接关闭实现完成后的提示窗口。

fpga亮灯,fpga开发

再次查看“Design Runs”窗口中的实现结果,发现时序要求都已满足,即没有报红,说明设计成功地在FPGA中完成了实现。

fpga亮灯,fpga开发

下载比特流

(1)生成用于下载到器件中的比特流文件,点击“Flow Navigator”窗口中的“Generate Bitstream”按钮。

fpga亮灯,fpga开发

(2)在弹出的窗口中直接点击OK。

fpga亮灯,fpga开发

此时可以看到“Design Runs”窗口中显示正在生成比特流:

fpga亮灯,fpga开发

(3)生成完成后,直接关闭提示窗口。

fpga亮灯,fpga开发

(4)开始下载比特流,点击“Flow Navigator”窗口中的“Open Hardware Manager”按钮。

fpga亮灯,fpga开发

(5)将开发板上电并接好JTAG接口,点击Open target中的Auto Connect(或Hardware中的此按钮)。

fpga亮灯,fpga开发

出现如下界面就表示 Vivado就已经和下载器连接成功了:

fpga亮灯,fpga开发

(6)右击xc7z100_1,在弹出的菜单中点击Program Device。

fpga亮灯,fpga开发

(7)在弹出的对话框中直接点Program即可。
fpga亮灯,fpga开发

下载成功后,可以观察到板子上的LED灯在不停地闪烁。

fpga亮灯,fpga开发

总结

至此使用Vivado开发FPGA实现一个简单的LED闪烁的流程就走完了,可以看到还是比较复杂的。之后还有Vivado中在线逻辑分析仪的使用、固化文件的生成等,就另起文章记录了。

参考

达芬奇之FPGA开发指南 V1.2

cource_s1_ALINX_ZYNQ(AX7Z100)开发平台FPGA教程V1.07文章来源地址https://www.toymoban.com/news/detail-765120.html

到了这里,关于超详细FPGA新手小白入门点亮LED灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • cubmx基础操作,hal库基本配置流程之使用 stm32cubmx生成HAL库进行gpio点亮led(stm32h7xx)(超详细,小白教程)

    HAL库(硬件抽象层库)是一个提供对底层硬件操作的抽象的库,它使得开发者可以使用统一的接口进行硬件操作,而不必关心底层硬件的具体实现细节。HAL库通常由硬件厂商提供,用于支持其硬件设备,并为其提供标准化的接口。 HAL库的主要目的是简化底层硬件的操作,使得

    2024年02月20日
    浏览(46)
  • 51单片机——LED 点阵点亮一个点,小白详解

    LED点阵介绍:        LED点阵是由发光二极管排列组成的显示器件,在我们生活中的电器中随处可见,被广泛用于汽车报站器,广告屏等。         通常用用较多的是8*8点阵,然后使用多个8*8点阵组成不同分辨率的LED点阵显示屏,比如16*16点阵可以使用4个8*8点阵构成。因

    2024年02月09日
    浏览(32)
  • Java新手小白入门篇 JDK安装及环境变量配置(超详细)

    学习Java,必备的就是JDK,所以我们必须得下载安装JDK,才能学习Java,下面我们会介绍 JDK是什么,如何安装并配置。 一、JDK简介 1.名词解释 JVM (Java Virtual Machine) Java虚拟机 作用:加载 .class 文件 并 运行 .class 文件 JRE (Java Runtime Environment) Java运行环境 包含 JVM + 运行Java程序所必

    2024年02月04日
    浏览(48)
  • FPGA/Verilog HDL/AC620零基础入门学习——第一个项目按键控制LED

    最近要考试了,所以我赶紧补习FPGA,我们用的是小梅哥的AC620开发板,软件是Quartus。推荐看这个视频教程:零基础轻松学习FPGA,小梅哥FPGA设计思想与验证方法视频教程 用按键控制LED灯的亮灭就是一个二选一多路器,两个IO,a、b,可以是高电平,也可以是低电平。 输入按键

    2024年02月05日
    浏览(43)
  • FPGA在校学习记录系列---实验4不同状态的LED+开发板(Verilog HDL)

    此系列记录FPGA在学校的学习过程。 FPGA系列 需要用到的软硬件: 软件:Quartus II 15.0 (64-bit) 硬件: 5CEBA4F23C7芯片 链接: FPGA在校学习记录系列—新建一个FPGA工程编写程序并仿真(Verilog HDL) 创建的工程名字为:LED (这次不用仿真,直接用开发板验证) 编译文件 按键资源:

    2024年04月09日
    浏览(37)
  • FPGA 芯片点亮标准?

    芯片设计完成,给到工厂制造,封装后回来,要经过最重要的一个点亮的环节,你知道什么叫做点亮吗? 其实,什么样叫做点亮,每家公司有每家的标准,本着自已不为难自已的原则,一般会有最简单的过程。当然,和不同的芯片也有关系,这里我只是以FPGA芯片为例,说说

    2024年02月06日
    浏览(37)
  • 【FPGA】FPGA入门 —— 基本开发流程

    快速上手verilog语法 状态机,线性序列机 FPGA常见的设计方法 自己写代码,下载代码进行使用,使用厂家/第三方提供的IP核 常见接口设计 等等。。 学习时间:基础内容的学习 - 20*8h,啊啊啊我可以我能行,看来这个月我给把时间砸这上面了~~ 仿真两大作用:检查验证设计功能

    2024年02月11日
    浏览(42)
  • FPGA学习——点亮流水灯

    在FPGA开发板中,一般板载LED默认高电平点亮,因此我们只需要将想要亮起的LED赋值为1即可。 本入门实验要求为每隔1s开发板上的LED轮流亮起,因此我们需要一个1s的计数器, 由于开发板晶振时钟为50MHz,因此我们计数50_000_000即为1s。 注意:为了后续方便仿真所以这里MAX设置

    2024年02月13日
    浏览(38)
  • 最详细STM32,cubeMX 点亮 led

    这篇文章将详细介绍 如何在 stm32103 板子上点亮一个LED. 实验开发板:STM32F103C8T6。 所需软件:keil5 , cubeMX 。 实验目的:了解 led 点亮原理,cubeMX配置 , GPIO 等相关函数 。 代码编写软件 : MDK keil5 。 图形化配置软件 :STM32cubeMX。 仿真器驱动 : STLINK 。 串口驱动 :CH340 。

    2024年01月16日
    浏览(37)
  • ESP8266入门教程03:点亮LED灯

    ESP8266默认是高电平工作,所以想要点亮LED只需要给相应的引脚设置低电平即可。  第11行:使用pinMode(pin, mode)来设置GPIO口工作模式,pin取值范围0 ~ 16,数字引脚0-15可设置为INPUT、OUTPUT、INPUT_PULLUP模式(输入、输出、上拉输入);数字引脚16可设置为INPUT、OUTPUT、INPUT_PULLDOWN_16模式

    2024年02月14日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包