复位信号的同步与释放(同步复位、异步复位、异步复位同步释放)

文章目录

  • 背景
  • 前言
  • 一、复位信号的同步与释放
    • 1.1 ··· 同步复位
      • 1.1.1 ··· 综述
      • 1.1.2 ··· 优缺点
    • 1.2 ··· recovery time和removal time
    • 1.3 ··· 异步复位
      • 1.3.1 ··· 综述
      • 1.3.2 ··· 优缺点
    • 1.4 ··· 同步复位 与 异步复位
    • 1.5 ··· 异步复位、同步释放
      • 1.5.1 ··· 总述
      • 1.5.2 ··· 机理
      • 1.5.3 ··· 复位网络
  • 二、思考与补充
    • 2.1 ··· 复位信号是否被需要
    • 2.2 ··· 关于第一级触发器的数据端口
    • 2.3 ··· 第二个dff是否存在亚稳态
    • 2.4 ··· 异步复位去毛刺
    • 2.5 ··· PLL配置后的复位设计
    • 2.6 ··· 复位的消耗的资源比你想象的要多
  • 参考文献


说明1:在查阅相关资料过程中,发现一些关于有趣的知识点,本文有尝试对其进行整合,力求详尽。
说明2:如果文章有误,欢迎大家指出、讨论,笔者也会积极改正,希望大家一起进步!


背景

笔者前一阵子在写Verilog代码时,关于rst_N信号,用的是如下片段。

input Clk;
input rst_N;
reg rst_N_d;
always @(posedge Clk or negedge rst_N) begin
	if (!rst_N) begin
		rst_N_d <= 1'b0;
	end else begin
		rst_N_d <= 1'b1;
	end
end
// 将rst_N_d作为整个工程的复位信号,接到顶层模块下面的各个子模块中。

但是,实际将代码下载到开发板后,发现将输入信号rst_N反复置0、置1切换时,输出的效果相比于预期效果,不是很稳定,百思不得其解。随后,一个经验丰富的大佬告诉我,可以考虑异步复位、同步释放的方式来控制所有子模块的rst_N_d 信号,如下所示。

input Clk;
input rst_N;
reg rst_N_d1,rst_N_d2;
always @(posedge Clk or negedge rst_N)
	if (!rst_N) begin
		rst_N_d1 <= 1'b0;
		rst_N_d2 <= 1'b0;
	end else begin
		rst_N_d1 <= 1'b1;
		rst_N_d2 <= rst_N_d1;
end
// 将rst_N_d2作为整个工程的复位信号,接到顶层模块下面的各个子模块中。

改完后,发现代码下载到开发板后的效果比较不错,稳定了很多。
基于此,考虑到自身学FPGA是野路子,决定好好研究一下同步与释放,记作此文。

前言

  • 复位的作用:
    可以使代码或者是器件恢复到一个已知、确定的状态,如初始状态;
    可以寄存器、计数器等内部的数据置为预设的值。

  • 复位的目的:
    1、通过控制复位信号,确保电路从已知的初始状态开始运行。
    2、通过控制复位信号,使电路从某个错误状态回到已知状态。

  • 在FPGA设计中,复位信号的同步与释放是确保系统稳定性和可靠性的关键。几种常见的复位信号,如下:
    1、同步复位
    2、异步复位
    3、异步复位、同步释放

  • 关于触发器,已在前文《7系列 之 存储单元(Storage Elements)》中有过介绍,诸位道友可点击链接进行传送。

  • 本文所查看得RTL、Synthesis视图,是基于xc7a100tfgg676-2 (active)进行的。

一、复位信号的同步与释放

1.1 ··· 同步复位

1.1.1 ··· 综述

  • 诸位道友经常提及的 同步复位 ,
    即同步复位、同步释放,Synchronous Reset and Synchronous Release。

  • 复位信号的复位、释放都是与时钟信号同步进行的,
    这意味着,复位信号的变化只在特定的时钟边沿(通常是上升沿)发生。

  • Verilog代码,如下:

input Clk;
input rst_N;
reg rst_N_d;
always @(posedge Clk ) begin
	if (!rst_N) begin
		rst_N_d <= 1'b0;
	end else begin
		rst_N_d <= 1'b1;
	end
end
  • 其RTL视图为:
    在这里插入图片描述
  • 其综合后的电路为:
    在这里插入图片描述
    从RTL视图来看,同步复位的代码过程就是一次触发器过程。
    而其综合的结果为,FDRE。
    注:FDRE,为Xilinx的触发器的Primitive之一;功能描述为:同步使能、同步复位。

1.1.2 ··· 优缺点

  • 优点:
    1、复位、释放操作是在时钟边沿同步进行的,因此可以确保所有的寄存器和逻辑单元在同一个时钟周期内被正确地复位、释放,从而给了寄存器足够的时间来稳定状态来减少复位信号引起的亚稳态问题、避免了由于复位信号不同步导致的时序不确定性。
    2、同步复位使得电路是同步的,可使静态时序分析更加简单,减少时序分析难度。

  • 缺点:
    1、采用同步复位,需要在数据输入端增加组合逻辑,消耗额外的逻辑资源;
    在这里插入图片描述2、同步复位比较依赖于时钟信号,且复位信号的脉冲宽度必须要大于一个时钟周期,才能确保同步复位。
    3、如下图所示,博文《异步复位 & 同步释放》在同步复位的缺点中提及到:“一些三态总线的初始化过程中,要求最好异步复位。”。在这里插入图片描述
    4、当复位信号的撤销时间在建立时间和保持时间以内时,也会产生亚稳态。

1.2 ··· recovery time和removal time

信号的本身不稳定、或者信号采样时刻不确定,都可能会带来亚稳态。

在同步电路中,输入数据需要与时钟满足setup time和hold time才能进行数据的正常传输,防止亚稳态。同样的道理,对于一个异步复位寄存器来说,异步复位信号同样需要和时钟满足recovery time和removal time 才能有效进行复位操作和复位释放操作,防止输出亚稳态。(《异步复位和同步释放》)

  • recovery time(恢复时间),指撤销复位状态时,在时钟有效沿来临之前,复位信号保持无效电平的最短时间,即复位释放与下一个时钟有效沿之间需要间隔的最小时间,类似于setup time。
  • removal time(去除时间),指进入复位状态时,在时钟有效沿来临之后,复位信号保持有效电平的最短时间,即复位信号与上一个时钟有效沿之间需要间隔的最小时间,类似于hold time。
    在这里插入图片描述

无论是复位信号的电平,
必须要满足recovery time和removal time这两个要求,否则可能会造成亚稳态。

另外,并不是复位信号撤销时才可能出现亚稳态,复位信号一开始出现时,同样可能会存在亚稳态,只不过异步复位信号持续时间长,即使第一个周期出现了亚稳态(即第一个周期复位未成功),下一个时钟周期也不会再出现亚稳态了。如果复位信号的变化只持续刚刚一个时钟周期,那么复位信号开始和撤销时都可能会出现亚稳态。(《异步复位,同步释放》)

1.3 ··· 异步复位

  • 诸位道友所经常提及的 异步复位 ,
    即,异步复位、异步释放,Asynchronous Reset and Asynchronous Release。
    复位信号,不随着系统时钟的边沿触发起作用,而是可独立于时钟信号起作用。

1.3.1 ··· 综述

  • Verilog代码,如下:
input Clk;
input rst_N;
reg rst_N_d;
always @(posedge Clk or negedge rst_N) begin
	if (!rst_N) begin
		rst_N_d <= 1'b0;
	end else begin
		rst_N_d <= 1'b1;
	end
end
  • 其RTL视图为:
    在这里插入图片描述相比于同步复位,拥有异步复位的寄存器在设计过程中就多了一个引脚(复位引脚)。

  • 其综合后的电路为:
    在这里插入图片描述而其综合的结果为,FDCE。

注:FDCE,为Xilinx的触发器的Primitive之一;功能描述为:同步使能、异步复位。
在这里插入图片描述

1.3.2 ··· 优缺点

  • 优点:
    1、大多数的触发器都有异步复位端口,能保证数据路径上是干净的,不用消耗额外的逻辑资源。
    2、复位信号不依赖于时钟,不管有没有时钟信号,复位信号都能使电路复位。

  • 缺点:
    1、当异步复位信号的撤销时间在Trecovery(恢复时间)和Tremoval(移除时间)之间时,输出结果就会出现亚稳态,造成复位失败。

recovery time和removal time都是检查异步信号(reset或preset或set)的释放沿,释放沿必须在时钟沿前面提前recovery time释放,或者在时钟沿后removal time之后释放。由于异步复位信号与时钟无必然联系,两者都是独立的,所以复位信号的释放将有一定的概率导致电路出现亚稳态。(《异步复位同步释放》)

在这里插入图片描述
2、系统所产生的的噪声或毛刺会引发伪复位,需要设计过滤器来消除复位电路上毛刺的影响。
3、异步复位需要确保满足时序要求。(补充:“复位信号和时钟信号一样,都是大扇出,所以无论同步或异步,在后端版图设计时需要分析复位树的时序确保满足时序要求。尽管存在复位 buffer tree,但最好要对复位信号少做逻辑。”(《异步复位,同步释放》))

1.4 ··· 同步复位 与 异步复位

只能说,各有优缺点。同步复位的好在于它只在时钟信号clk的上升沿触发进行系统是否复位的判断,这降低了亚稳态出现的概率;它的不好上面也说了,在于它需要消耗更多的器件资源,这是我们不希望看到的。FPGA的寄存器有支持异步复位专用的端口,采用异步复位的端口无需额外增加器件资源的消耗,但是异步复位也存在着隐患。异步时钟域的亚稳态问题同样的存在与异步复位信号和系统时钟信号之间。(《异步复位同步释放—关于复位的问题》)

ADD:

对于xilinx 7系列的FPGA而言,flip-flop支持高有效的异步复/置位和同步复位/置位。对普通逻辑设计,同步复位和异步复位没有区别,当然由于器件内部信号均为高有效,因此推荐使用高有效的控制信号,最好使用高有效的同步复位。输入复位信号的低有效在顶层放置反相器可以被吸收到IOB中。(《xilinx FPGA复位浅析》)

经过上述分析,同步复位和异步复位都有优缺点,那么是否能将连着结合、取长补短呢?

1.5 ··· 异步复位、同步释放

  • 其实,阅读到这里,
    不难看出异步复位、同步释放是同步释放和异步复位相结合的产物,
    而不是同步异步与复位释放两两相组合的结果。

  • 异步复位、同步释放,即
    复位信号的复位状态有效时不受时钟信号的同步控制,
    而在复位信号释放时(复位状态无效时)受到时钟信号的同步控制。

  • 异步复位、同步释放的目的是在于:防止复位信号释放时产生亚稳态,且节省逻辑资源。

1.5.1 ··· 总述

  • Verilog代码,如下:
input Clk;
input rst_N;
reg rst_N_d1,rst_N_d2;
always @(posedge Clk or negedge rst_N)
	if (!rst_N) begin
		rst_N_d1 <= 1'b0;
		rst_N_d2 <= 1'b0;
	end else begin
		rst_N_d1 <= 1'b1;
		rst_N_d2 <= rst_N_d1;
end
  • 其RTL视图为:
    在这里插入图片描述- 其综合后的电路为:
    在这里插入图片描述

1.5.2 ··· 机理

  • 异步复位:当复位信号拉低时,rst_N拉低,直接进入复位状态。

  • 同步释放:当复位信号释放时,由于加入了两级同步缓存器,复位状态不会立即释放,而是等到同步时钟的有效沿时再进行释放;且,rst_N的释放信号不会随着rst_N的撤销而撤销。

  • 同步释放的具体过程,如下:
    1 第一个有效时钟沿到来时:当异步复位信号rst_N释放时,用来同步的第二级寄存器 rst_N_d2 的数据仍然是0,因此第二级寄存器 rst_N_d2 是不会出现亚稳态的。即便第一级寄存器 rst_N_d1 可能会出现亚稳态,但这个亚稳态并不是直接经过第二级寄存器 rst_N_d2 进行输出 ,需要等待下一个时钟有效沿的到来,相当于被打了节拍。
    2 第二个有效时钟沿到来时:当第一级寄存器 rst_N_d1 上一个时刻的这个亚稳态经过第二级寄存器时,基本已经稳定下来了;即便稳定下来不为无效电平,那也就相当于复位信号的有效电平多持续了一个周期。因此我们可以看出,使用异步复位同步释放时,异步复位撤销后需要额外等待一个时钟周期。

简单理解:第2级DFF释放信号与时钟clk边沿同步,所以释放信号在clk上升沿后需经过Tco(Tsu+thd)才能到达下一级DFF的复位端口,所以可以满足下一级DFF的recovery time和removal time,从而不会出现亚稳态。(《异步复位同步释放》)

  • 思考:
    1、第一级触发器的输出,存在亚稳态的可能,这是毋庸置疑的,而且第一级触发器输出的亚稳状态是在逐渐衰减的,且可以持续一个时钟周期;正常情况下,第二级触发器的输出是非亚稳态。但是,如果在第二级触发器的采样时保持时间不够长,且这时第一级触发器的输出依旧处于亚稳态,那么,第二级触发器的输出也会是亚稳态的。不过,这属于小概率事件。
    2、在目前的同步化设计中,用两级触发器进行同步可以消除绝大部分可能的亚稳态了。那么,是不是三级同步操作,会使输出的复位信号更加稳定呢;当然,这样会多消耗一个触发器。
    3、《2级同步引发的思考》,关于两级触发器的思考,可以深入了解下。

既解决了同步复位的资源消耗问题,也解决了异步复位的亚稳态问题。其根本思想,也是将异步信号同步化。(《异步复位同步释放—关于复位的问题》)

不同的复位方式有各自的优缺点。但是在工程中,一般都用异步复位的方法,最好是异步复位同步释放的方法。(《异步复位,同步释放》)

1.5.3 ··· 复位网络

《异步复位 & 同步释放》提及到了复位分发技术,用两级触发器对复位信号打了两次节拍,这也算是异步复位、同步释放的应用了。
在这里插入图片描述

二、思考与补充

逛博客的时候,看到了一些有趣的问题与思考,截图放在文中了,供诸位道友参考学习。
也可以直接到 参考文献 这一章节,直接点击文章名称进行转跳。

2.1 ··· 复位信号是否被需要

在这里插入图片描述
实际上,在写Verilog代码时,写了过多的复位信号反而会对Fmax产生限制。
笔者感觉《同步复位和异步复位》这篇博客的这段解释,如下图所示,似乎更为细致。
在这里插入图片描述
同时,在一博客下面有看到对Xilinx官方文档《UltraFast Design Methodology Guide for FPGAs and SoCs (UG949)》的描述:
在这里插入图片描述

2.2 ··· 关于第一级触发器的数据端口

在这里插入图片描述

2.3 ··· 第二个dff是否存在亚稳态

《异步复位,同步释放的理解》,通过引用文献,对复位同步器得第二个dff是否存在亚稳态进行了解答,如下图所示。这也算是对本文章节《2.2.2 ··· 机理》中思考的一个解答吧。
在这里插入图片描述

2.4 ··· 异步复位去毛刺

《同步复位和异步复位》,这篇博客也有提到这么一个操作,截图给诸位道友看一下。
在这里插入图片描述

2.5 ··· PLL配置后的复位设计

文章《异步复位同步释放(Synchronized Asynchronous Reset)》中,提到了一种PLL配置后的复位设计,感觉有点眼熟,截个图放下面,供诸位道友观摩、讨论。

文字描述如下:
在这里插入图片描述代码综合后的RTL如下:
在这里插入图片描述

2.6 ··· 复位的消耗的资源比你想象的要多

以下截图出自博客《你真的会Xilinx FPGA的复位吗?》。
在这里插入图片描述
嗯,这部分实际上和前文中的 “复位信号是否被需要 ”这部分倒是挺相似的,道友们可以多留意下。
在这里插入图片描述

参考文献

1、《异步复位和同步释放》
2、《异步复位,同步释放》
3、《异步复位同步释放—关于复位的问题》
4、《异步复位 & 同步释放》
5、《异步复位,同步释放的理解》,这篇不错,安利一波。
6、《异步复位同步释放原理》
7、《同步复位和异步复位》
8、《异步复位同步释放》
9、《同步复位和异步复位》,这篇也不错。
10、《2级同步引发的思考》
11、《异步复位同步释放(Synchronized Asynchronous Reset)》
12、《xilinx FPGA复位浅析》
13、《你真的会Xilinx FPGA的复位吗?》,这篇也很不错。
14、《How do I reset my FPGA?》(笔者对这篇文章进行了翻译,《翻译:How do I reset my FPGA?》)
15、《RTL设计- 多时钟域按顺序复位释放》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

欢迎来到linux大陆!本次试炼地点——秩序“权限”圣殿

一篇关于权限的学习笔记~ 1、权限的概念2、权限管理2.1 角色的不同分类2.2 文件权限原理剖析2.2.1 熟悉指令2.2.2 普通用户只能更改自己的文件权限&#xff0c;但是sudo提权可以更改其他文件权限2.2.3 没有权限&#xff0c;系统拒绝访问2.2.4 权限匹配2.2.5 root用户不受任何限…

Spring 定时任务:@Scheduled 注解四大参数解析

本文主要介绍了在 Spring 框架中使用Scheduled注解实现定时任务的方法&#xff0c;重点讲解了fixedRate、fixedDelay、cron和initialDelay这四个参数的用法&#xff0c;并通过实例代码进行了详细说明。 1. fixedRate 参数 参数含义 fixedRate指定任务固定时间间隔执行。如设…

使用频谱仪:测量宽带信号的功率

marker默认只测一个频率点的功率&#xff0c;当测试宽带信号&#xff0c;如20MHz&#xff0c;不能直接使用marker来测量功率。 有2种方式&#xff1a; 宽带信号需要使用Measure-> channel power 来测量。 meas setup integ BW&#xff1a;500mhz Freq&#xff1a;中心频…

postman请求参数化

postman界面介绍 一、使用环境变量(Environment Variables)进行参数化 1、在请求中使用环境变量 在请求的url、请求头(Headers)、请求体(Body)等部分都可以使用环境变量。 URL 部分示例 点击 Postman 界面右上角的 “眼睛” 图标(Environment Quick Look)打开环境管理…

优选算法——哈希表

目录 1. 哈希表简介 2. 两数之和 3. 判定是否为字符重排 4. 存在重复元素 5. 字母异位词分组 1. 哈希表简介 2. 两数之和 题目链接&#xff1a;1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; 题目展示&#xff1a; 题目分析&#xff1a; 大家来看上面的图&…

【C语言学习】:C语言补充:转义字符,<<,>>操作符,IDE

&#x1f381;个人主页&#xff1a;我们的五年https://blog.csdn.net/djdjiejsn?typeblog &#x1f50d;系列专栏&#xff1a;C课程学习https://blog.csdn.net/djdjiejsn/category_12617142.html &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 C语言学…

Cesium特效——城市白模的科技动效的各种效果

最终效果图如下&#xff1a; 实现方法&#xff1a; 步骤一&#xff1a;使用cesiumlib生产白模&#xff0c;格式为3dtiles 注意事项&#xff1a;采用其他方式可能导致白模贴地&#xff0c;从而导致不能实现该效果&#xff0c;例如把步骤二的服务地址改为Cesium Sandcastle 里的…

仿 RabbitMQ 的消息队列3(实战项目)

七. 消息存储设计 上一篇博客已经将消息统计文件的读写代码实现了&#xff0c;下一步我们将实现创建队列文件和目录。 实现创建队列文件和目录 初始化 0\t0 这样的初始值. //创建队列对应的文件和目录&#xff1a;public void createQueueFile(String queueName) throws IO…

无人机 PX4 飞控 | PX4源码添加自定义参数方法并用QGC显示与调整

无人机 PX4 飞控 | PX4源码添加自定义参数方法并用QGC显示与调整 0 前言 之前文章添加了一个自定义的模块&#xff0c;本篇文章在之前的自定义模块中&#xff0c;添加两个自定义参数 使用QGC显示出来&#xff0c;并通过QGC调整参数值&#xff0c;代码实现参数更新 新增的参…

【真机调试】前端开发:移动端特殊手机型号有问题,如何在电脑上进行调试?

目录 前言一、怎么设置成开发者模式&#xff1f;二、真机调试基本步骤&#xff1f; &#x1f680;写在最后 前言 edge浏览器 edge://inspect/#devices 谷歌浏览器&#xff08;开tizi&#xff09; chrome://inspect 一、怎么设置成开发者模式&#xff1f; Android 设备 打开设…

2024年第十五届蓝桥杯青少组国赛(c++)真题—快速分解质因数

快速分解质因数 完整题目和在线测评可点击下方链接前往&#xff1a; 快速分解质因数_C_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/cpp/show-3781.htmlhttps://www.hixinao.com/tiku/cpp/show-3781.html 若如其他赛事真题可自行前往题库中心查找&#xff0c;题…

Linux系统下速通stm32的clion开发环境配置

陆陆续续搞这个已经很久了。 因为自己新电脑是linux系统无法使用keil&#xff0c;一开始想使用vscode里的eide但感觉不太好用&#xff1b;后面想直接使用cudeide但又不想妥协&#xff0c;想趁着这个机会把linux上的其他单片机开发配置也搞明白&#xff1b;而且非常想搞懂cmake…

【FFmpeg】FLV 格式分析 ③ ( Tag Body 数据块体结构 - Vedio Data 视频数据 )

文章目录 一、Tag Body 数据块体结构 - Video Data 视频数据1、Vedio Data 视频数据 类型标识2、Vedio Data 视频数据 结构分析3、Composition Time Offset 字段涉及的时间计算4、AVC Packet Type 字段说明① AVC Sequence Header 类型② AVC NALU 类型③ AVC End of Sequence …

尚硅谷大数据数仓项目superset db upgrade报错解决(2025.1.23解决)

尚硅谷大数据数仓项目superset db upgrade报错解决&#xff08;2025.1.23解决&#xff09;和 superset安装MySQL报错解决 解决方法&#xff08;2025.1.23解决&#xff09; 0.卸载之前安装好的Superset -- 退出当前环境 conda deactivate-- 卸载Superset conda remove -n sup…

vue3+uniapp开发鸿蒙初体验

去年7月20号&#xff0c;uniapp官网就已经开始支持鸿蒙应用开发了&#xff0c;话不多说&#xff0c;按照现有规则进行配置实现一下鸿蒙开发效果&#xff1b; 本文基于macOS Monterey 版本 12.6.5实现 开发鸿蒙的前置准备 这里就直接说我的版本&#xff1a; DevEco Studio 5.…

996引擎 - 前期准备-配置开发环境

996引擎 - 前期准备 官网搭建服务端、客户端单机搭建 开发环境配置后端开发环境配置环境 前端开发环境配置环境 后端简介前端简介GUILayoutGUIExport 官网 996传奇引擎官网 所有资料从官网首页开始&#xff0c;多探索。 文档&#xff1a; 996M2-服务端Lua 996M2-客户端Lua 搭…

Python FastAPI 实战应用指南

文章目录 1. 前言2. FastAPI 的优势3. FastAPI 快速入门3.1 安装3.2 最简单的 API 案例 4. 基础功能应用4.1 模型验证和参数校验4.2 实现高级计划&#xff1a;用于实时功能和快速发布 5. 高级应用5.1 实现 OAuth2 认证5.2 提供 WebSocket 支持 6. 总结 1. 前言 FastAPI 是一个…

Vue3 项目打包并部署到Nginx

一、安装Nginx 官网下载链接&#xff1a; nginx: downloadhttps://nginx.org/en/download.htmlhttps://nginx.org/en/download.html 下载后解压并双击 nginx.exe 启动服务&#xff1a; 打开浏览器&#xff0c;访问 http://localhost/ &#xff0c;若出现如下页面&#xff0c…

二叉树(了解)c++

二叉树是一种特殊的树型结构&#xff0c;它的特点是: 每个结点至多只有2棵子树(即二叉树中不存在度大于2的结点) 并且二叉树的子树有左右之分&#xff0c;其次序不能任意颠倒&#xff0c;因此是一颗有序树 以A结点为例&#xff0c;左边的B是它的左孩子&#xff0c;右边的C是…

会议签到系统的架构和实现

会议签到系统的架构和实现 摘要:通过定制安卓会议机开机APP呈现签到界面&#xff0c;并且通过W/B结构采集管理签到信息&#xff0c;实现会议签到的功能。为达到此目标本文将探讨使用Redis提供后台数据支持&#xff1b;使用SocketIo处理适时消息&#xff1b;使用Flask进行原型开…