Vivado 下 LED 灯闪烁实验

这篇具有很好参考价值的文章主要介绍了Vivado 下 LED 灯闪烁实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Vivado 下 LED 灯闪烁实验

1、简介

2、实验环境

3、实验任务

4、硬件设计

5、程序设计

5.1、LED 闪烁模块代码

5.2、Vivado 仿真验证

5.2.1、编写 TB 仿真代码

6、下载验证

6.1、添加约束文件 .xdc

6.2、下载验证

注意:一定要先把下载器的一端连接到了电脑、另一端连接了 JTAG 接口之后,再给开发板上电!否则,对开发板的 JTAG 接口进行带电热插拔,有一定概率会损坏 JTAG 接口!!!


Vivado 下 LED 灯闪烁实验

       LED 灯闪烁作为一个经典的入门实验,其地位堪比编程界的“HelloWorld!”。对于很多电子工程师来说,LED 灯闪烁都是他们在硬件上观察到的第一个实验现象。本章我们同样通过 LED 灯闪烁实验,带你进入 FPGA 的精彩世界。

1、简介

       LED,又名发光二极管。LED 灯工作电流很小(有的仅零点几毫安即可发光),抗冲击和抗震性能好,可靠性高,寿命长。由于这些优点,LED 灯被广泛用在仪器仪表中作指示灯、液晶屏背光源等诸多领域。

       不同材料的发光二极管可以发出红、橙、黄、绿、青、蓝、紫、白这八种颜色的光。图 7.1.1 是可以发出黄、红、蓝三种颜色的直插型二极管实物图,这种二极管长的一端是阳极,短的一端是阴极。图 7.1.2 是开发板上用的贴片二极管实物图。贴片二极管的正面一般都有颜色标记,有标记的那端就是阴极。

Vivado 下 LED 灯闪烁实验,FPGA学习-实战,fpga开发,硬件工程,dsp开发,算法,嵌入式硬件

       发光二极管与普通二极管一样具有单向导电性。给它加上阳极正向电压后,通过 5mA 左右的电流就可以使二极管发光。通过二极管的电流越大,发出的光亮度越强。不过我们一般将电流限定在 3~20mA 之间,否则电流过大就会烧坏二极管。

2、实验环境

  • Windows 10  64 位
  • vivado 2020.2
  • Xinlinx 黑金 FPGA 开发板(AX7A035t 开发板、AX7A100t 开发板、AX7A200t 开发板)

3、实验任务

       本节实验任务是使用 Xinlinx 黑金 FPGA 开发版上的 LED0 和 LED1 以固定的频率交替闪烁。

4、硬件设计

       四个 LED 灯均有连接三极管,这是由于 LED0~LED3 连接到了 FPGA IO,但是电压只有 1.35V,电压较低,所以此处连接三极管,起到放大信号的作用。当 FPGA 输出 LED0~LED3 为高电平时,三极管导通,点亮 LED 灯;当 FPGA 输出 LED0~LED3 为低电平时,三极管截止,LED 灯熄灭。

Vivado 下 LED 灯闪烁实验,FPGA学习-实战,fpga开发,硬件工程,dsp开发,算法,嵌入式硬件

5、程序设计

       由于发光二极管的阳极与 FPGA 的管脚相连,只需要改变与 LED 灯相连的 FPGA 管脚的电平,LED 灯的亮灭状态就会发生变化。当 FPGA 管脚为高电平时,LED 灯点亮;为低电平时,LED 灯熄灭。

本次设计的模块端口及信号连接如下图所示:

Vivado 下 LED 灯闪烁实验,FPGA学习-实战,fpga开发,硬件工程,dsp开发,算法,嵌入式硬件

       其中,计数器对 50MHz 时钟进行计数,从而达到计时的目的。计数器在每次计时到 1 秒之后清零,然后重新开始计数,计数的值用于控制 LED 的显示状态。当计数器的值小于 0.5s 时,就把 LED0 点亮并把 LED1 熄灭;每当计数器的值大于 0.5s 时,就把 LED0 熄灭并把 LED1 点亮,以此实现两个 LED 的交替闪烁。

5.1、LED 闪烁模块代码

LED 闪烁模块的代码如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/05/09 19:57:15
// Design Name: 
// Module Name: led_twinkle
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module led_twinkle(
//    input               sys_clk,       //50MHz系统时钟
    //differential system clocks//200MHz系统时钟
    input               sys_clk_p,       //system clock positive
    input               sys_clk_n,       //system clock negative
    input               sys_rst_n, //系统复位,低电平有效
    
    output [1:0] led //2位LED灯
    );
    
//FPGA板载50MHz时钟,所以一个时钟周期为:1/50MHz=20ns,
//计数器通过对50MHz系统时钟计数,计时到0.5s,需要累加0.5s/20ns=25000_000次。

//黑金Artix7A35t板载200MHz时钟,所以一个时钟周期为:1/200MHz=5ns,
//计时到0.5s,需要累加0.5s/5ns=100_000_000次。
   
//define the time counter
reg [31:0] cnt;  

//*********差分时钟这么处理***START******************
wire        sys_clk;
//差分输入时钟缓冲器-黑金FPGA
IBUFDS sys_clk_ibufgds //generate single end clock
(
	.O                          (sys_clk                  ),
	.I                          (sys_clk_p                ),
	.IB                         (sys_clk_n                )
);
//*********差分时钟这么处理*****END*******************

//************************************************
//**           main code
//************************************************

//对计数器的值进行判断,以输出LED的状态
assign led = (cnt<32'd10000_0000)?2'b01:2'b10;
//assign led = (cnt<32'd5)?2'b01:2'b10; //仅用于仿真

//计数器在0~5000_0000之间进行计数
always@(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        cnt<=32'd0;
    else if(cnt<32'd20000_0000)
    //else if(cnt<32'd10) //仅用于仿真
        cnt<=cnt+1'b1;
    else
         cnt<=32'd0;
end
    
endmodule

       本程序中输入时钟为 200MHz,所以一个时钟周期为 5ns1/200MHz)。因此计数器 cnt 通过对 200MHz 系统时钟计数,计时到 1s,需要累加 1s/5ns=20000_0000 次。在代码第 67 行,每当计时到 1s 计数器清零一次。
       同时,在代码的第 58 行,对根据计数器的计数值来赋值两个 LED 的状态。当计数值小于 32'd1000_0000 即计时到 1s 中的前 500ms 时,LED0 点亮 LED1 熄灭;当计数值大于等于 32'd1000_0000,即计时到 1s 中的后 500ms 时,LED0 熄灭 LED1 点亮。当计数到 1s 时,计数器又会回 0,重复此过程。以此实现两个 LED 的交替闪烁。

5.2、Vivado 仿真验证

       为了验证我们的程序,我们在 Vivado 内对代码进行仿真。为了更容易地看到仿真现象,我们将源代码中的计数器的最大计数值修改为 5,然后再仿真,如下图所示:

Vivado 下 LED 灯闪烁实验,FPGA学习-实战,fpga开发,硬件工程,dsp开发,算法,嵌入式硬件

        因为本实验我们只有系统时钟和系统复位这两个输入信号,以及两个LED 灯输出信号,所以仿真文件也只需要编写这四个信号的激励即可。

5.2.1、编写 TB 仿真代码

Testbench 模块仿真代码如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/05/09 20:40:24
// Design Name: 
// Module Name: tb_led_twinkle
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module tb_led_twinkle();      //测试模块

//parameter T = 20; //50Mhz系统时钟,周期为20ns
parameter T = 5;  //黑金FPGA-差分时钟:200Mhz系统时钟,周期为5ns

//输入
//reg         sys_clk;
reg         sys_clk_p;   //时钟信号
wire        sys_clk_n;
reg         sys_rst_n;

//输出
wire    [1:0]   led;

//***************************************
//**        main code
//***************************************

//信号初始化
initial begin
//    sys_clk = 1'b0;
    sys_clk_p = 1'b0;
    sys_rst_n = 1'b0;
    #200    //延时200ns
    sys_rst_n = 1'b1;
end

//生成时钟
//always #(T/2) sys_clk =~sys_clk;
always #(T/2) sys_clk_p =~sys_clk_p;
assign sys_clk_n=~sys_clk_p;

//实例化待测设计
led_twinkle u_led_twinkle(
//    .sys_clk        (sys_clk),
	  .sys_clk_p      (sys_clk_p), 
	  .sys_clk_n      (sys_clk_n),
    .sys_rst_n      (sys_rst_n),
    .led            (led)
    );

endmodule

仿真得到的波形图如下图所示:Vivado 下 LED 灯闪烁实验,FPGA学习-实战,fpga开发,硬件工程,dsp开发,算法,嵌入式硬件

       从图中可以看到,计数器 cnt 的值在 0 10 之间循环计数。当 cnt 的值小于 5 时,led0 为高电平;大于 5 led0 为高电平。两个 LED 的状态随着计数器的计数循环翻转,实现 LED 闪烁的效果。

6、下载验证

6.1、添加约束文件 .xdc

添加约束文件 led_twinkle.xdc,添加约束文件.xdc 的详细步骤见: Vivado 下 LED 流水灯实验_OliverH-yishuihan的博客-CSDN博客 中的 “4.3、添加 XDC管脚约束文件

约束文件 breath_led.xdc 的具体内容如下:

############## clock define 时钟引脚、电平信号约束#####黑金-FPGA##################
create_clock -period 5.000 [get_ports sys_clk_p]
set_property PACKAGE_PIN R4 [get_ports sys_clk_p]
set_property IOSTANDARD DIFF_SSTL15 [get_ports sys_clk_p]
############## reset key define##########################
set_property -dict {PACKAGE_PIN F15 IOSTANDARD LVCMOS15} [get_ports sys_rst_n]
############## LED define ############################
set_property -dict {PACKAGE_PIN L13 IOSTANDARD LVCMOS15} [get_ports {led[0]}]
set_property -dict {PACKAGE_PIN M13 IOSTANDARD LVCMOS15} [get_ports {led[1]}]
##############SPI Configurate Setting##################
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property CONFIG_MODE SPIx4 [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]

6.2、下载验证

       编译工程并生成比特流.bit 文件后,点击 Vivado 左侧 “Flow Navigator” 窗口最下面的 “Open Hardware Manager” 按钮如下图所示。

Vivado 下 LED 灯闪烁实验,FPGA学习-实战,fpga开发,硬件工程,dsp开发,算法,嵌入式硬件

       此时将 Xilinx 下载器一端连接电脑,另一端与开发板上的 JTAG 下载口连接,开发板连接电源线,如下图所示:

Vivado 下 LED 灯闪烁实验,FPGA学习-实战,fpga开发,硬件工程,dsp开发,算法,嵌入式硬件

       经过前面的编译和仿真,我们可以把 bit 文件下载到 FPGA 芯片中,看一下 LED 实际运行的效果(两个 LED 灯交替闪烁)。下载和调试之前先连接硬件,把 JTAG 下载器和开发板连接(如下图是 AX7A200 开发板 JTAG 连接 作为参考),然后开发板上电。

注意:一定要先把下载器的一端连接到了电脑、另一端连接了 JTAG 接口之后,再给开发板上电!否则,对开发板的 JTAG 接口进行带电热插拔,有一定概率会损坏 JTAG 接口!!!

详细步骤见:“ Vivado 下 LED 流水灯实验_OliverH-yishuihan的博客-CSDN博客” 中的 “4.6 下载和调试”、“4.7、FLASH 程序固化” 文章来源地址https://www.toymoban.com/news/detail-614071.html

到了这里,关于Vivado 下 LED 灯闪烁实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • FPGA自学教程 03 设计一个以1秒频率闪烁的LED灯

    双非硕士 研一下学期视觉转FPGA(在b站跟小梅哥视频) 长路漫漫,但希望前途光明 此篇文章开始省去建工程的操作,如果有不懂的同学可以看我之前的两篇文章。 1.新建文件名为:led_flash,等待右侧弹出Verilog代码框。 2.计数器逻辑图如下 3.以1秒频率闪烁的LED灯的代码内容如

    2024年02月04日
    浏览(39)
  • 【FPGA】时序逻辑电路——基于计数器实现一个以1秒频率闪烁的LED灯

    1 D触发器 分析: 特性:输出端Q只在CK处于上升沿的时候变化 图中波形的形成过程: 当D处于高电平时,CK未处于上升沿时,Q仍处于低电平 当CK来到上升沿,Q需要根据D发生变化,由于D是高电平,所以Q要从低电平变化成高电平 D从高电平变化成低电平,但是此时CK未来到上升沿

    2024年02月09日
    浏览(46)
  • FPGA 固化 硬件底层和软件hex代码 基于vivado和keil

    首先参考这篇博客完成FPGA的硬件固化 参考arm官方文档发现直接导入hex不能使用,开始转向文档中提到的第二个方法 发现这篇博客满足要求 下面进行第二篇博客的细节补充 修改mmi文件 找到元件名字 打开FPGA工程的实现 融合bit文件 生成完 mcs文件后 直接打开 然后就完成软件和

    2024年02月11日
    浏览(48)
  • 从零开始学习vivado——day4 跑马灯(让8个LED灯以每个0.5s的速率循环闪烁)

    研一从零开始学习verilog!!!此时不学何时学! 第一次写博客,以此激励自己努力学习! 我跟的视频教程是b站的一个up主,小梅哥爱漂流。 ①编写端口代码: ②计数器 其中,一定是=,如果直接用=,则波形图会出现错误,从00000010到00000100的时间会非常短,导致整个图像看

    2024年02月02日
    浏览(49)
  • FPGA时序约束--实战篇(读懂Vivado时序报告)

    目录 一、新建工程 二、时序报告分析 1、打开时序报告界面 2、时序报告界面介绍 3、时序路径分析 三、总结 FPGA开发过程中,vivado和quartus等开发软件都会提供时序报告,以方便开发者判断自己的工程时序是否满足时序要求。 本文将详细介绍如何读懂Vivado时序报告,包括报告

    2024年02月12日
    浏览(46)
  • FPGA时序约束--实战篇(Vivado添加时序约束)

    前面几篇文章已经详细介绍了FPGA时序约束基础知识以及常用的时序约束命令,相信大家已经基本掌握了时序约束的方法。 今天介绍一下,如何在Vivado中添加时序约束,Vivado添加约束的方法有3种:xdc文件、时序约束向导(Constraints Wizard)、时序约束编辑器(Edit Timing Constrain

    2024年02月10日
    浏览(51)
  • FPGA开发环境 Vivado

    Vivado是Xilinx系列FPGA开发环境。本文记载收录了vivado常用开发技巧,随机记录、随时更新。。。 任何Xilinx相关问题都可到WELCOME TO XILINX SUPPORT!查询 静态时序分析(Static Timing Analysis, STA):简介及内容导航 VIVADO的综合属性ASYNC_REG 在XDC中作如下约束,表示对名字末尾为 _cdc_to 的寄

    2024年02月11日
    浏览(58)
  • FPGA 学习笔记:Vivado 工程更改FPGA 型号

    FPGA 不同系列,型号有些区别,并且不同型号FPGA 工程生成的 bit 文件,无法下载 当前最好的方式是每个型号都重新创建一个工程,不过这样多少有点繁琐,Vivado可以更改FPGA型号 设置里面,可以查看当前的FPGA型号 也可以通过【Window】 - 【Project Summary】,查看当前工程的FPGA

    2024年02月11日
    浏览(44)
  • FPGA开发环境安装VIVADO

     BASYS3开发板使用的是 Xilinx 厂商的 Artix-7 FPGA 芯片,所以要使用 Xilinx 提供的配套开发软件 Vivado ,我使用的是 Vivado 18.3 。Vivado 18.3 的版本相对来说是较为稳定的,所以推荐给大家这个版本当然 读者也可安装更新的版本,安装步骤都是大同小异的。 第一步: 找到 Vivado 2018.

    2024年02月09日
    浏览(90)
  • FPGA开发必备软件——Vivado,安装教程

    FPGA开发必备软件——Vivado,安装教程 如果你想开始FPGA的开发学习,那么Vivado是一个不可或缺的软件。它是Xilinx推出的一款针对FPGA、SoC和ASIC开发的综合设计环境。在这里,我们详细介绍如何下载、安装和配置Vivado软件。 在Xilinx官网上注册一个账号。注册时需要提供自己的邮

    2024年02月13日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包