FPGA 28 ,基于 Vivado Verilog 的呼吸灯效果设计与实现( 使用 Vivado Verilog 实现呼吸灯效果 )

目录

前言
一. 设计流程
1.1 需求分析
1.2 方案设计
1.3 PWM解析
二. 实现流程
2.1 确定时间单位和精度
2.2 定义参数和寄存器
2.3 实现计数器逻辑
2.4 控制 LED 状态
三. 整体流程
3.1 全部代码
3.2 代码逻辑
1. 参数定义
2. 分级计数
3. 状态切换
4. LED 输出控制
四. 注意事项
五. 本文总结
六. 更多操作

前言

在数字电路设计领域,呼吸灯是一个经典且有趣的项目,它模拟人类呼吸的节奏,使 LED 灯呈现出从暗到亮再从亮到暗的渐变效果,常被用于电子产品的状态指示、氛围营造等场景。这里将详细介绍如何使用 Verilog 硬件描述语言实现一个呼吸灯效果,并对实现过程中的关键知识点、设计流程、代码逻辑以及注意事项进行深入探讨。

实现的呼吸灯效果,渐明渐暗、渐明渐暗,循环往复:

一. 设计流程

1.1 需求分析

        呼吸灯的核心需求是让 LED 灯呈现出类似人类呼吸的渐变效果,即亮度从暗到亮再从亮到暗循环变化。为了实现这一效果,我们需要通过控制 LED 灯的驱动信号来改变其亮度,而在数字电路中,通常使用脉冲宽度调制(PWM)技术来模拟模拟电压,从而控制 LED 灯的亮度。

1.2 方案设计

        为了实现 PWM 控制,我们将采用分级计数的方式来实现不同时间尺度的延时。具体来说,我们会设计三个计数器:微秒级计数器、毫秒级计数器和秒级计数器。通过这三个计数器的协同工作,我们可以精确控制 PWM 信号的占空比,从而实现 LED 灯亮度的渐变。

1.3 PWM解析

        脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信、功率控制等领域中。


二. 实现流程

2.1 确定时间单位和精度

在进行 Verilog 代码编写之前,首先要明确时间单位和精度。这一步对于后续处理不同时间尺度的延时至关重要。在本例中,我们使用timescale编译指令来声明时间单位和精度。

// 时间尺度声明,仿真时间单位为1ns,仿真精度为1ps
`timescale 1ns / 1ps

这里选择 1ns 作为时间单位,1ps 作为时间精度,意味着在仿真过程中,时间的最小步进是 1ps,能够满足处理微秒(us)、毫秒(ms)等较大时间尺度的需求。这样的设置可以让我们更精确地模拟时间流逝,从而实现对呼吸灯渐变效果的精细控制。

2.2 定义参数和寄存器

确定好时间单位和精度后,接下来要定义一些关键的参数和寄存器。这些参数和寄存器将用于控制计数器的行为,进而影响 LED 灯的状态变化。

// 定义呼吸灯模块,模块开始
module breath_led(input clk,      // 时钟信号,用于同步电路的操作input rst_n,    // 复位信号,低电平有效,用于初始化电路状态output reg led  // 输出信号,控制LED灯的亮灭);
// 定义参数,用于延时计数
parameter us_delay = 50;  // 定义微秒级延时的计数值
parameter ms_delay = 1000; // 定义毫秒级延时的计数值
parameter s_delay = 1000;  // 定义秒级延时的计数值
// 定义计数器寄存器
reg [5:0] cnt_lus;  // 微秒级计数器,6位宽,最大计数值为63
reg [9:0] cnt_lms;  // 毫秒级计数器,10位宽,最大计数值为1023
reg [9:0] cnt_ls;   // 秒级计数器,10位宽,最大计数值为1023
reg led_en;         // LED使能信号,用于控制LED的亮灭模式
  • 参数部分

    • us_delay:用于设置微秒级延时的计数值。当微秒级计数器cnt_lus达到us_delay - 1时,会触发一些操作,如毫秒级计数器的递增。
    • ms_delay:定义毫秒级延时的计数值。毫秒级计数器cnt_lms达到ms_delay - 1时,会影响秒级计数器的状态。
    • s_delay:表示秒级延时的计数值。秒级计数器cnt_ls达到s_delay - 1时,会引发 LED 使能信号led_en的状态切换。
  • 寄存器部分

    • cnt_lus:微秒级计数器,6 位宽,其最大计数值为 63。在时钟信号的驱动下,它会不断递增,用于精确计时微秒级的时间间隔。
    • cnt_lms:毫秒级计数器,10 位宽,最大计数值为 1023。它依赖于微秒级计数器的状态进行递增,用于计时毫秒级的时间。
    • cnt_ls:秒级计数器,同样是 10 位宽,最大计数值为 1023。它在微秒级和毫秒级计数器满足特定条件时才会递增,用于计时秒级的时间。
    • led_en:LED 使能信号,用于控制 LED 灯的亮灭模式。通过改变led_en的值,可以实现 LED 灯亮度的渐变效果。

2.3 实现计数器逻辑

为了模拟时间的流逝,我们需要实现三个层次的计数器:微秒计数器、毫秒计数器和秒计数器。每个计数器根据不同的条件进行递增或重置,从而实现精确的时间控制。

// 微秒级计数器逻辑
always@(posedge clk)beginif(!rst_n)  // 如果复位信号有效(低电平)cnt_lus <= 0;  // 微秒级计数器清零else if(cnt_lus == us_delay - 1)  // 如果微秒级计数器达到设定的延时值减1cnt_lus <= 0;  // 微秒级计数器清零elsecnt_lus <= cnt_lus + 1;  // 微秒级计数器加1
end// 毫秒级计数器逻辑
always@(posedge clk)beginif(!rst_n)  // 如果复位信号有效(低电平)cnt_lms <= 0;  // 毫秒级计数器清零else if(cnt_lus == us_delay - 1)begin  // 当微秒级计数器达到设定的延时值减1if(cnt_lms == ms_delay - 1)  // 如果毫秒级计数器达到设定的延时值减1cnt_lms <= 0;  // 毫秒级计数器清零elsecnt_lms <= cnt_lms + 1;  // 毫秒级计数器加1end// 其他情况保持不变,由于时序逻辑,不需要写
end// 秒级计数器逻辑
always@(posedge clk)beginif(!rst_n)  // 如果复位信号有效(低电平)cnt_ls <= 0;  // 秒级计数器清零else if(cnt_lus == us_delay - 1)begin  // 当微秒级计数器达到设定的延时值减1if(cnt_lms == ms_delay - 1)begin  // 当毫秒级计数器达到设定的延时值减1if(cnt_ls == s_delay - 1)  // 如果秒级计数器达到设定的延时值减1cnt_ls <= 0;  // 秒级计数器清零elsecnt_ls <= cnt_ls + 1;  // 秒级计数器加1endend
end
  • 微秒级计数器 cnt_lus:在每个时钟信号的上升沿,首先检查复位信号rst_n是否有效。如果有效,将微秒级计数器清零,以确保电路在复位时能够恢复到初始状态。如果复位信号无效,接着检查计数器是否达到us_delay - 1。若达到该值,说明已经完成了一次微秒级的延时,将计数器清零,重新开始计时;若未达到,则将计数器加 1,继续计时。
  • 毫秒级计数器 cnt_lms:同样在时钟信号的上升沿进行操作。当复位信号有效时,将毫秒级计数器清零。当微秒级计数器达到us_delay - 1时,说明已经经过了一个微秒级的时间间隔,此时检查毫秒级计数器是否达到ms_delay - 1。若达到,则将毫秒级计数器清零,开始新的毫秒计时;若未达到,则将毫秒级计数器加 1。
  • 秒级计数器 cnt_ls:在时钟上升沿,当复位信号有效时,秒级计数器清零。只有当微秒级计数器达到us_delay - 1且毫秒级计数器达到ms_delay - 1时,才会进一步检查秒级计数器是否达到s_delay - 1。若达到,则将秒级计数器清零,重新开始秒计时;若未达到,则将秒级计数器加 1。

通过这三个计数器的协同工作,我们可以实现从微秒到毫秒再到秒的精确计时,为后续控制 LED 灯的状态变化提供时间基础。

2.4 控制 LED 状态

在完成计数器逻辑的实现后,接下来要根据计数器的状态来控制 LED 灯的状态。这里我们通过一个 LED 使能信号led_en来切换 LED 灯的亮灭模式,从而实现呼吸灯的渐变效果。

// LED使能信号逻辑
always@(posedge clk)beginif(!rst_n)  // 如果复位信号有效(低电平)led_en <= 0;  // LED使能信号清零else if(cnt_lus == us_delay - 1 && cnt_lms == ms_delay - 1 && cnt_ls == s_delay - 1)// 当微秒级、毫秒级和秒级计数器都达到设定的延时值减1时led_en <= ~led_en;  // 取反LED使能信号
end
// LED输出逻辑
always@(posedge clk)beginif(!rst_n)  // 如果复位信号有效(低电平)led <= 0;  // LED输出信号清零else if(led_en == 0)  // 如果LED使能信号为0// 如果秒级计数器大于毫秒级计数器,LED输出高电平,否则输出低电平led <= (cnt_ls > cnt_lms)? 1 : 0;  else if(led_en == 1)  // 如果LED使能信号为1// 如果秒级计数器大于毫秒级计数器,LED输出低电平,否则输出高电平led <= (cnt_ls > cnt_lms)? 0 : 1; 
end
//模块结束
endmodule
  • LED 使能信号逻辑:在时钟信号的上升沿,首先检查复位信号rst_n。若复位信号有效,将 LED 使能信号led_en清零。当微秒级计数器cnt_lus、毫秒级计数器cnt_lms和秒级计数器cnt_ls都达到各自设定的延时值减 1 时,说明已经经过了一个完整的计时周期,此时将 LED 使能信号取反,从而切换 LED 灯的亮灭模式。
  • LED 输出逻辑:同样在时钟上升沿进行操作。当复位信号有效时,将 LED 输出信号led清零。当 LED 使能信号led_en为 0 时,比较秒级计数器cnt_ls和毫秒级计数器cnt_lms的大小。如果cnt_ls > cnt_lms,则 LED 输出高电平,使 LED 灯点亮;否则输出低电平,使 LED 灯熄灭。当 LED 使能信号led_en为 1 时,逻辑相反,即cnt_ls > cnt_lms时 LED 输出低电平,否则输出高电平。

随着时间的推移,计数器的值不断变化,LED 使能信号也会周期性地切换,从而使 LED 灯的亮度呈现出从暗到亮再从亮到暗的渐变效果,模拟出呼吸的节奏。


三. 整体流程

3.1 全部代码

// 时间尺度声明,仿真时间单位为1ns,仿真精度为1ps
`timescale 1ns / 1ps// 定义呼吸灯模块
module breath_led(input clk,      // 时钟信号,用于同步电路的操作input rst_n,    // 复位信号,低电平有效,用于初始化电路状态output reg led  // 输出信号,控制LED灯的亮灭);// 定义参数,用于延时计数
parameter us_delay = 50;  // 定义微秒级延时的计数值
parameter ms_delay = 1000; // 定义毫秒级延时的计数值
parameter s_delay = 1000;  // 定义秒级延时的计数值// 定义计数器寄存器
reg [5:0] cnt_lus;  // 微秒级计数器,6位宽,最大计数值为63
reg [9:0] cnt_lms;  // 毫秒级计数器,10位宽,最大计数值为1023
reg [9:0] cnt_ls;   // 秒级计数器,10位宽,最大计数值为1023
reg led_en;         // LED使能信号,用于控制LED的亮灭模式// 微秒级计数器逻辑
always@(posedge clk)beginif(!rst_n)  // 如果复位信号有效(低电平)cnt_lus <= 0;  // 微秒级计数器清零else if(cnt_lus == us_delay - 1)  // 如果微秒级计数器达到设定的延时值减1cnt_lus <= 0;  // 微秒级计数器清零elsecnt_lus <= cnt_lus + 1;  // 微秒级计数器加1
end// 毫秒级计数器逻辑
always@(posedge clk)beginif(!rst_n)  // 如果复位信号有效(低电平)cnt_lms <= 0;  // 毫秒级计数器清零else if(cnt_lus == us_delay - 1)begin  // 当微秒级计数器达到设定的延时值减1if(cnt_lms == ms_delay - 1)  // 如果毫秒级计数器达到设定的延时值减1cnt_lms <= 0;  // 毫秒级计数器清零elsecnt_lms <= cnt_lms + 1;  // 毫秒级计数器加1end// 其他情况保持不变,由于时序逻辑,不需要写
end// 秒级计数器逻辑
always@(posedge clk)beginif(!rst_n)  // 如果复位信号有效(低电平)cnt_ls <= 0;  // 秒级计数器清零else if(cnt_lus == us_delay - 1)begin  // 当微秒级计数器达到设定的延时值减1if(cnt_lms == ms_delay - 1)begin  // 当毫秒级计数器达到设定的延时值减1if(cnt_ls == s_delay - 1)  // 如果秒级计数器达到设定的延时值减1cnt_ls <= 0;  // 秒级计数器清零elsecnt_ls <= cnt_ls + 1;  // 秒级计数器加1endend
end// LED使能信号逻辑
always@(posedge clk)beginif(!rst_n)  // 如果复位信号有效(低电平)led_en <= 0;  // LED使能信号清零else if(cnt_lus == us_delay - 1 && cnt_lms == ms_delay - 1 && cnt_ls == s_delay - 1)// 当微秒级、毫秒级和秒级计数器都达到设定的延时值减1时led_en <= ~led_en;  // 取反LED使能信号
end// LED输出逻辑
always@(posedge clk)beginif(!rst_n)  // 如果复位信号有效(低电平)led <= 0;  // LED输出信号清零else if(led_en == 0)  // 如果LED使能信号为0led <= (cnt_ls > cnt_lms)? 1 : 0;  // 如果秒级计数器大于毫秒级计数器,LED输出高电平,否则输出低电平else if(led_en == 1)  // 如果LED使能信号为1led <= (cnt_ls > cnt_lms)? 0 : 1;  // 如果秒级计数器大于毫秒级计数器,LED输出低电平,否则输出高电平
endendmodule

3.2 代码逻辑

1. 参数定义
  • us_delay:微秒级延时计数值,用于控制微秒级计数器重置条件。
  • ms_delay:毫秒级延时计数值,用于控制毫秒级计数器重置条件。
  • s_delay:秒级延时计数值,用于控制秒级计数器重置条件。
2. 分级计数
  • 微秒级(cnt_lus:时钟上升沿,复位信号 rst_n 有效则清零;否则计到 us_delay - 1 清零,未到则加 1。
  • 毫秒级(cnt_lms:时钟上升沿,复位有效则清零;cnt_lusus_delay - 1 时,计到 ms_delay - 1 清零,未到则加 1。
  • 秒级(cnt_ls:时钟上升沿,复位有效则清零;cnt_lusus_delay - 1cnt_lmsms_delay - 1 时,计到 s_delay - 1 清零,未到则加 1。
3. 状态切换

led_en 控制 LED 亮灭模式。三个计数器均达延时值,led_en 取反,依其值比较 cnt_lscnt_lms 控制 led 输出。

4. LED 输出控制
  • led_en 为 0,cnt_ls > cnt_lmsled 高电平,反之低电平。
  • led_en 为 1,逻辑相反。 随时间推进,cnt_lscnt_lms 大小关系变化,使 LED 呈呼吸渐变效果。


四. 注意事项

  1. 参数设置:代码中的参数 us_delayms_delays_delay 决定了呼吸灯渐变的速度。若参数设置不合理,可能导致呼吸灯渐变速度过快或过慢,甚至因计数值过大造成资源占用过多或仿真时间过长。例如,若 us_delayms_delays_delay 设置过小,呼吸灯渐变过程会极快,人眼难以察觉;反之,设置过大则渐变过程缓慢,影响用户体验。
  2. 时钟频率:代码依赖输入的时钟信号 clk 进行同步操作。时钟频率不合适会影响呼吸灯效果。若时钟频率过高,计数器计数速度快,呼吸灯渐变过程难以察觉;若时钟频率过低,呼吸灯渐变过程慢,甚至可能出现闪烁不连贯的情况。因此,实际设计中需根据具体需求和硬件条件选择合适的时钟频率。
  3. 硬件实现:若将代码烧录到实际硬件中,需考虑硬件特性和限制。如硬件驱动能力、LED 灯特性等都可能影响呼吸灯实际效果。若硬件驱动能力不足,可能无法正常驱动 LED 灯;若 LED 灯响应速度慢,也可能无法实现理想的渐变效果。进行硬件实现时,需对硬件充分测试和调试,确保呼吸灯正常工作。


五. 本文总结

通过本文的分享记录,我们详细了解了如何使用 Verilog 硬件描述语言实现一个呼吸灯,涵盖了相关时间单位知识、设计流程、代码逻辑以及注意事项。呼吸灯设计不仅是一个有趣的项目,还涉及数字电路设计中的许多重要概念,如分级计数、状态切换和 PWM 控制等。希望这里能帮助你更好地掌握数字电路设计相关知识和技能。


六. 更多操作

完整FPGA系列,请看

FPGA系列,文章目录https://blog.csdn.net/weixin_65793170/article/details/144185217?spm=1001.2014.3001.5501https://blog.csdn.net/weixin_65793170/article/details/144185217?spm=1001.2014.3001.5501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16820.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日常知识点之面试后反思裸写string类

1&#xff1a;实现一个字符串类。 简单汇总 最简单的方案&#xff0c;使用一个字符串指针&#xff0c;以及实际字符串长度即可。 参考stl的实现&#xff0c;为了提升string的性能&#xff0c;实际上单纯的字符串指针和实际长度是不够了&#xff0c;如上&#xff0c;有优化方案…

用AI绘制CAD气温曲线图

此文章视频讲解地址 https://www.bilibili.com/video/BV1JtKjenEhF 需求 根据气温的JSON数据&#xff0c;用AI自动生成CAD格式的气温曲线DWG图 数据准备 用deepseek获取了北京市最近一个月的气温json数据 AI对话 首先进入唯杰地图云端管理平台 选择与唯杰地图AI对话 需求描…

Web应用项目开发 ——Spring Boot邮件发送

一.邮件发送介绍 邮件发送是一个非常常见的功能&#xff0c;注册时的身份认证、重要通知发送等都会用到邮件发送。在现代的Web应用程序中&#xff0c;邮件发送功能是非常常见且重要的一部分&#xff0c;Spring Boot框架提供了简单且强大的方式来实现邮件发送功能。Spring中提供…

【STM32】通过L496的HAL库Flash建立FatFS文件系统(CubeMX自动配置R0.12C版本)

【STM32】通过L496的HAL库Flash建立FatFS文件系统&#xff08;CubeMX自动配置R0.12C版本&#xff09; 文章目录 FlashFlash地址写Flash地址读 FatFS文件系统配置FatFS移植驱动函数时间戳函数 文件操作函数工作区缓存文件挂载和格式化测试文件读写测试其他文件操作函数 测试附录…

机械臂运动学笔记(一):正向运动学

正向运动学指的是通过相邻关节间的转动和移动坐标&#xff0c;将末端的坐标计算出来。 反向运动学指的是已知机械臂末端的坐标&#xff0c;反算每个关节可能的转动和移动参数。 参考资料&#xff1a;4.机械臂几何法与DH表示法_哔哩哔哩_bilibili 一.任意连杆连接的变量定义&a…

Leetcode - 周赛435

目录 一、3442. 奇偶频次间的最大差值 I二、3443. K 次修改后的最大曼哈顿距离三、3444. 使数组包含目标值倍数的最少增量四、3445. 奇偶频次间的最大差值 II 一、3442. 奇偶频次间的最大差值 I 题目链接 本题使用数组统计字符串 s s s 中每个字符的出现次数&#xff0c;然后…

鸿蒙HarmonyOS NEXT开发:优化用户界面性能——组件复用(@Reusable装饰器)

文章目录 一、概述二、原理介绍三、使用规则四、复用类型详解1、标准型2、有限变化型2.1、类型1和类型2布局不同&#xff0c;业务逻辑不同2.2、类型1和类型2布局不同&#xff0c;但是很多业务逻辑公用 3、组合型4、全局型5、嵌套型 一、概述 组件复用是优化用户界面性能&#…

pyrender 渲染报错解决

pyrender渲染后&#xff0c;出来的图样子不对&#xff1a; 正确的图&#xff1a; 解决方法&#xff1a; pip install numpy1.26 下面的不是必须的&#xff1a; pip install pyrender0.1.45 os.environ["PYOPENGL_PLATFORM"] "egl" os.environ[EGL_DEVI…

CCFCSP第34次认证第一题——矩阵重塑(其一)

第34次认证第一题——矩阵重塑&#xff08;其一&#xff09; 官网链接 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 相关文件&#xff1a; 题目目录&#xff08;样例文件&#xff09; 题目背景 矩阵&#xff08;二维&#xff09;的重塑&#xff08;reshap…

Neurlps2024论文解读|BERTs are Generative In-Context Learners-water-merged

论文标题 BERTs are Generative In-Context Learners BERTs 是生成式上下文学习器 论文链接 BERTs are Generative In-Context Learners论文下载 论文作者 David Samuel 内容简介 本文探讨了掩码语言模型&#xff08;如DeBERTa&#xff09;在上下文学习中的生成能力&…

深入理解Java对接DeepSeek

其实&#xff0c;整个对接过程很简单&#xff0c;就四步&#xff0c;获取key&#xff0c;找到接口文档&#xff0c;接口测试&#xff0c;代码对接。 1.获取 KEY https://platform.deepseek.com/transactions 直接付款就是了&#xff08;现在官网暂停充值2025年2月7日&#xf…

OSPF高级特性(3):安全特效

引言 OSPF的基础我们已经结束学习了&#xff0c;接下来我们继续学习OSPF的高级特性。为了方便大家阅读&#xff0c;我会将高级特性的几篇链接放在末尾&#xff0c;所有链接都是站内的&#xff0c;大家点击即可阅读&#xff1a; OSPF基础&#xff08;1&#xff09;&#xff1a;工…

HCIA项目实践--静态路由的总结和简单配置

七、静态路由 7.1 路由器获取未知网段的路由信息&#xff1a; &#xff08;1&#xff09;静态路由&#xff1a;网络管理员手工配置的路由条目&#xff0c;它不依赖网络拓扑的变化进行自动更新&#xff0c;而是根据管理员预先设定的路径来转发数据包。其优点是配置简单、占用系…

3dtiles——Cesium ion for Autodesk Revit Add-In插件

一、说明&#xff1a; Cesium已经支持3dtiles的模型格式转换&#xff1b; 可以从Cesium官方Aesset中上传gltf等格式文件转换为3dtiles&#xff1b; 也可以下载插件&#xff08;例如revit-cesium插件&#xff09;转换并自动上传到Cesium官方Aseet中。 Revit转3dtiles插件使用…

HCIA项目实践---网络层次常见的三种模型

2.2 网络的层次 2.2.1 常见的三种网络层次划分 应用层 &#xff08;1&#xff09;OSI 七层模型 物理层&#xff1a;处于最底层&#xff0c;主要负责处理物理介质上的信号传输&#xff0c;如电缆、光纤、无线等。其作用是定义物理设备的接口标准、信号的编码方式、传输速率等&…

【图片转换PDF】多个文件夹里图片逐个批量转换成多个pdf软件,子文件夹单独合并转换,子文件夹单独批量转换,基于Py的解决方案

建筑设计公司在项目执行过程中&#xff0c;会产生大量的设计图纸、效果图、实景照片等图片资料。这些资料按照项目名称、阶段、专业等维度存放在多个文件夹和子文件夹中。 操作需求&#xff1a;为了方便内部管理和向客户交付完整的设计方案&#xff0c;公司需要将每个项目文件…

Python:凯撒密码

题目内容&#xff1a; 凯撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法&#xff0c;它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符&#xff0c;对应关系如下&#xff1a; 原文&#xff1a;A B C D E F G H I J K L M N O P Q R …

亚信安全正式接入DeepSeek

亚信安全致力于“数据驱动、AI原生”战略&#xff0c;早在2024年5月&#xff0c;推出了“信立方”安全大模型、安全MaaS平台和一系列安全智能体&#xff0c;为网络安全运营、网络安全检测提供AI技术能力。自2024年12月DeepSeek-V3发布以来&#xff0c;亚信安全人工智能实验室利…

2024BaseCTF_week4_web上

继续&#xff01;冲冲冲 目录 圣钥之战1.0 nodejs 原型 原型链 原型链污染 回到题目 flag直接读取不就行了&#xff1f; 圣钥之战1.0 from flask import Flask,request import jsonapp Flask(__name__)def merge(src, dst):for k, v in src.items():if hasattr(dst, __geti…

【Java 面试 八股文】Redis篇

Redis 1. 什么是缓存穿透&#xff1f;怎么解决&#xff1f;2. 你能介绍一下布隆过滤器吗&#xff1f;3. 什么是缓存击穿&#xff1f;怎么解决&#xff1f;4. 什么是缓存雪崩&#xff1f;怎么解决&#xff1f;5. redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&…