自学内容网 自学内容网

PL端:LED闪烁

实验环境

vivado2024.1

实验任务

LED闪烁

引脚关系

在这里插入图片描述

硬件配置

新建一个vivado实验
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建 Verilog HDL 文件点亮 LED

点击 Project Manager 下的 Add Sources 图标(或者使用快捷键 Alt+A)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

编辑led.v

module led(
 input sys_clk,
 input rst_n,
 output reg [3:0] led
 );
reg[31:0] timer_cnt;
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'd49_999_999)
 begin
 led <= ~led;
 timer_cnt <= 32'd0;
 end
 else
 begin
 led <= led;
 timer_cnt <= timer_cnt + 32'd1;
 end
 
end
endmodule

这是一个对系统时钟上升沿和复位信号下降沿敏感的always块。
当复位信号rst_n为低电平时:
将输出led初始化为 4’b0000。
将计数器timer_cnt初始化为 32’b0。
当计数器timer_cnt的值大于等于 32’d49_999_999 时:
对输出led取反,实现 LED 状态的切换。
将计数器timer_cnt重新初始化为 32’b0。
其他情况下:
保持输出led不变。
计数器timer_cnt自增 1。
总体来说,这个模块实现了一个基于计数器的 LED 闪烁功能。每当计数器达到特定值(49999999)时,LED 的状态就会切换一次。复位时,LED 熄灭且计数器清零。

添加管脚约束

Vivado 使用的约束文件格式为 xdc 文件。xdc 文件里主要是完成管脚的约束,时钟的约束, 以及组的约束。
点击“Open Elaborated Design”
在这里插入图片描述
将复位信号 rst_n 绑定到 PL 端的按键,给 LED 和时钟分配管脚、电平标准,完成后点击保存图标

在这里插入图片描述
ctrl+S 保存
在这里插入图片描述
在这里插入图片描述
普通 IO 口只需约束引脚号和电压,管脚约束如下:
set_property PACKAGE_PIN “引脚编号” [get_ports “端口名称”]
电平信号的约束如下:
set_property IOSTANDARD “电平标准” [get_ports “端口名称”]

电平标准中“LVCMOS33”后面的数字指 FPGA 的 BANK 电压,LED 所在 BANK 电压为 3.3伏,所以电平标准为“LVCMOS33”

添加时序约束

点击“Run Synthesis”开始综合
在这里插入图片描述
在这里插入图片描述
点击“Constraints Wizard”,在弹出的窗口中点击“Next”
在这里插入图片描述
时序约束向导分析出设计中的时钟,这里把“sys_clk”频率设置为 50Mhz,然后点击“Skip to Finish”结束时序约束向导
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个时候 led.xdc 文件已经更新,点击“Reload”重新加载文件,并保存文件

在这里插入图片描述

生成 BIT 文件

编译的过程可以细分为综合、布局布线、生成 bit 文件等,直接点击“Generate Bitstream”,直接生成 bit 文件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Vivado 仿真

设置 Vivado 的仿真配置,右击 SIMULATION 中 Simulation Settings。
在这里插入图片描述
在这里插入图片描述

添加激励测试文件,点击 Project Manager 下的 Add Sources 图标,按下图设置后单击 Next。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

编写激励文件

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/11/05 18:16:41
// Design Name: 
// Module Name: tb_led
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module tb_led;
// Inputs
reg sys_clk;
reg rst_n ;
// Outputs
wire [3:0] led;

// Instantiate the Unit Under Test (UUT)
led uut (
 .sys_clk(sys_clk), 
 .rst_n(rst_n),
 .led(led)
);

initial
begin
// Initialize Inputs
 sys_clk = 0;
 rst_n = 0 ;
 #1000 ;
 rst_n = 1;
end
//Create clock
always #10 sys_clk = ~ sys_clk;


endmodule

ctrl+s保存文件

在这里插入图片描述
点击 Run Simulation 按钮,再选择 Run Behavioral Simulation
在这里插入图片描述
Vivado 中的仿真软件开始工作了,需要耐心等待,才能看到实验变化
在这里插入图片描述

下载验证

  1. 连接好开发板的 JTAG 接口,给开发板上电
  2. 在“HARDWARE MANAGER”界面点击“Auto Connect”,自动连接设备

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在线调试

Vivado 中的 Integrated Logic Analyzer(ILA)是强大的调试工具。主要功能包括信号监测与分析,可同时监测多个信号并设置触发条件以特定信号状态捕获数据;触发条件设置灵活,基于单个信号值、组合逻辑或特定序列等;数据存储深度可配置,便于平衡资源利用与调试效果;与 Vivado 设计流程完全集成,使用方便且捕获数据可直接分析查看。使用步骤为添加 ILA IP 核并配置参数,连接需监测信号,设置触发条件,生成比特流下载到 FPGA 后开始工作,最后在 Vivado 中分析数据。其优势明显,高效调试,无需额外硬件设备,降低成本和复杂性,快速定位问题缩短设计周期;灵活性强,适应复杂场景,多种触发和显示方式满足不同需求;集成性好,紧密融入设计流程,提高工作效率。

添加 ILA IP 核

在这里插入图片描述
修改名称为 ila,由于要采样两个信号,Probes 的数量设置为 2,Sample Data Depth 指的是
采样深度,设置的越高,采集的信号越多,同样消耗的资源也会越多
在这里插入图片描述

在 Probe_Ports 页面,设置 Probe 的宽度,设置 PROBE0 位宽为 32,用于采样 timer_cnt,设置 PROBE1 位宽为 4,用于采样 led。点击 OK
在这里插入图片描述

在这里插入图片描述

在 led.v 中例化 ila,并保存

ila ila_inst(
    .clk(sys_clk),
    .probe0(timer_cnt),
    .probe1 (led)
 );

在这里插入图片描述
重新生成 Bitstream
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下载程序

在这里插入图片描述

这时候看到有 bit 和 ltx 文件,点击 program
在这里插入图片描述

此时弹出在线调试窗口,出现了我们添加的信号
在这里插入图片描述

点击运行按钮,出现信号的数据

在这里插入图片描述

也可以触发采集,在 Trigger Setup 窗口点击“+”,深度选择 timer_cnt 信号

在这里插入图片描述
将 Radix 改为 U,也就是十进制,在 Value 中设置为 49999999,也就是 timer_cnt 计数的最大值
在这里插入图片描述

添加MARK DEBUG

在 Vivado 等 FPGA 开发环境中,“MARK DEBUG” 是一个非常重要的功能。
基本含义
“MARK DEBUG” 的主要目的是标记那些需要在调试过程中重点关注的信号、网线(nets)或模块等设计元素。当你在设计中使用这个功能标记了特定的对象后,开发工具就会知道这些是需要特殊处理用于调试的部分。
与调试工具的关联
它和调试工具(如 ILA)紧密相关。例如,在 Vivado 中,当你使用 “MARK DEBUG” 标记了信号后,这些被标记的信号可以很方便地被连接到诸如 Integrated Logic Analyzer(ILA)这样的调试核上。这样一来,在调试阶段,你就能够通过 ILA 等工具捕获和观察这些标记信号的行为,有助于对设计中的问题进行定位和分析。
使用方式和好处
从使用方式上,一般是在设计的图形化界面或者代码编辑环境中,通过特定的操作(如右键菜单选项等)来对信号等进行 “MARK DEBUG” 标记。其好处在于,它提供了一种有针对性的调试手段。在复杂的 FPGA 设计中,可能有成千上万的信号,通过 “MARK DEBUG” 可以挑选出那些与当前调试任务最相关的信号,避免在无关信号的观察和分析上浪费时间,从而更高效地进行设计调试。

上面介绍了添加 ILA IP 的方式在线调试,下面介绍在代码中添加综合属性,实现在线调试。
首先打开 led.v,将 ila 的例化部分注释掉
在这里插入图片描述
在 led 和 timer_cnt 的定义前面添加(* MARK_DEBUG=”true” *),保存文件。
在这里插入图片描述

点击综合
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

综合结束后,点击 Set Up Debug
在这里插入图片描述

弹出的窗口点击 Next
在这里插入图片描述

按照默认点击 Next
在这里插入图片描述

采样深度窗口,选择 Next
在这里插入图片描述

点击 Finish

在这里插入图片描述

ctrl+s保存
在这里插入图片描述

重新生成 bitstream

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

调试
在这里插入图片描述

此时弹出在线调试窗口,出现了我们添加的信号
在这里插入图片描述
点击运行按钮,出现信号的数据
在这里插入图片描述


原文地址:https://blog.csdn.net/qq_43441284/article/details/143509247

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!