PL端:LED闪烁

news/2024/11/6 11:31:48/

实验环境

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)
beginif (!rst_n)beginled <= 4'd0 ;timer_cnt <= 32'd0 ;endelse if(timer_cnt >= 32'd49_999_999)beginled <= ~led;timer_cnt <= 32'd0;endelsebeginled <= led;timer_cnt <= timer_cnt + 32'd1;endend
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 Inputssys_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

在这里插入图片描述

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

调试
在这里插入图片描述

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


http://www.ppmy.cn/news/1544806.html

相关文章

C语言中如何实现动态内存分配

在C语言中&#xff0c;动态内存分配是通过标准库中的malloc、calloc和free函数实现的。这些函数允许程序在运行时请求内存&#xff0c;从而提供灵活性&#xff0c;尤其是在不知道所需内存大小的情况下。下面是对这三个函数的详细解释和使用示例。 1. malloc malloc&#xff0…

electron 中 ipcRenderer 作用

1. 理解 IPC&#xff08;进程间通信&#xff09;的背景 在 Electron 应用中&#xff0c;有主进程&#xff08;main process&#xff09;和渲染进程&#xff08;renderer process&#xff09;之分。 主进程&#xff1a;负责管理应用程序的生命周期、创建和管理窗口等核心任务。…

【已解决】element-plus配置主题色后,sass兼容问题。set-color-mix-level() is...in Dart Sass 3

项目&#xff1a;vue3vite "scripts": {"dev": "vite","build": "vite build","preview": "vite preview"},"dependencies": {"element-plus/icons-vue": "^2.3.1",&quo…

51单片机教程(八)- 数码管的静态显示

1、项目分析 使用数码管显示指定的字符、数字和符号。 2、技术准备 1、显示器及其接口 单片机系统中常用的显示器有&#xff1a; 发光二极管LED&#xff08;Light Emitting Diode&#xff09;显示器、液晶LCD&#xff08;Liquid Crystal Display&#xff09;显示器、CRT显…

【Vue】在 Vue 组件的 methods 中,箭头函数和不带箭头函数中的this的区别

具体说明 箭头函数在定义时就绑定了它的 this&#xff0c;这个 this 通常是组件定义环境的上下文&#xff08;即创建 Vue 实例之前的环境&#xff09;&#xff0c;而不是 Vue 实例本身。这意味着在 Vue 组件的 methods 中使用箭头函数时&#xff0c;this 通常不会指向 Vue 实例…

TS基础内容(第一部分)

TS基础内容 1.1 TypeScript简介 TypeScript是由微软开发&#xff0c;是基于JavaScript的一个扩展语言TypeScript包含了JavaScript的所有内容&#xff0c;即&#xff1a;TypeScript是JavaScript的超能TypeScript增加了&#xff1a;静态类型检查、接口、泛型等很多现代开发特性…

Redis 实现分布式缓存

一、引言 在当今互联网时代&#xff0c;随着业务的不断发展和用户量的持续增长&#xff0c;系统的性能和可扩展性成为了关键挑战。分布式缓存作为一种重要的技术手段&#xff0c;能够有效地缓解数据库压力、提高系统响应速度、增强系统的可扩展性。Redis 作为一种高性能的内存数…

计算机网络——网络层导论

转发是局部功能——数据平面 路由是全局的功能——控制平面 网卡 网卡&#xff0c;也称为网络适配器&#xff0c;是计算机硬件中的一种设备&#xff0c;主要负责在计算机和网络之间进行数据传输。 一、主要功能 1、数据传输&#xff1a; 发送数据时&#xff0c;网卡将计算机…