SIwave:释放 SIwizard 求解器的强大功能

news2024/11/25 16:47:39

SIwave 是一种电源完整性和信号完整性工具。SIwizard 是 SIwave 中 SI 分析的主要工具,也是本博客的主题。

SIwizard 用于研究 RF、clock 和 control traces 的信号完整性。该工具允许用户进行瞬态分析、眼图分析和 BER 计算。用户可以将 IBIS 和 IBIS-AMI 模型添加到 TX 和 RX 端。SIwave 支持 NRZ 和 PAM4 信号。

 

b752eac50efef12f9049f632bc5b359d.png

图 1:SIwizard 求解器 4th图标

SIwave 不应用于构建 PCB。虽然这是可能的,但这不是使用 SIwave 的最佳方式。SIwave 可以导入以下类型的 CAD 文件:

 

d7e27c1b110b1f731a4d8673f336dcbd.png

图 2:SIwave 中的导入对话框

Allegro 和 Altium 的用户可以安装 Ansys EDB 转换器来生成 EDB 文件。对于使用 Orcad 的用户,建议使用 IPC-2581。使用 Mentor Expedition 的人应该使用 ODB++ 文件。对于 Cadence 用户,生成 BRD 文件并将其导入 3D 布局。为此,必须在同一台计算机上安装 Cadence,还必须安装 Extracta from Cadence,并且其位置应位于 Path 环境变量中。

SIwave 从 CAD 文件中提取大量信息,例如叠层、材料、组件和网络。因此,模型已准备好进行求解。

  1. 差分线路

在启动 SIwizard 之前,请确保 SIwave 识别差分走线。从 Home 中,选择 differential 选项卡。

 

2a63aebb3943459929900d6665f0b1f9.png

图 3:差分网络选项卡

如果它是空的,但用户确定模型中存在差分线,则单击自动识别。SIwave 将打开一个新对话框,并显示它使用什么符号来识别 _P 和 _N 的差分线。如果正确,请单击 auto-identify(自动识别)。如果不同,用户必须在对话框中更改它们。

 

456c9ee1606fa24cffcb5c8e363fbc64.png

图 4:差分网络自动识别对话框

单击自动识别后:

 

524a0f921cc87de02e8ea399edd6e6d6.png

图 5:自动识别走线后的 Differential nets 选项卡

用户还可以手动选择两个网络,将鼠标移动到显示区域,右键单击,然后选择 Create Differential Pairs。

 

c40499eeba59af6bd3156f2103bb4a1a.png

图 6:构建差分网络的替代方法

如果 DC 模块将差分线路分开,用户可以选择先将线路合并为扩展网络,然后从中创建差分线路。首先单击扩展选项卡,然后选择 auto-identify

 

6cfa6b550d27cccdd16d52849d5e521d.png

图 7:扩展网络自动识别对话框

SIwave 将显示一个对话框,显示 SIwave 使用 R 来识别扩展网络。因此,任何两个名称相同但一个末尾有额外 R 的网络将被合并。

 

5c556e0619b06c6711950b4e49d3d818.png

图 8:扩展网络自动识别对话框

创建扩展网络的另一种方法,特别是当网络有两个以上的网络时,是输入扩展网络的名称,然后单击 edit:

 

6ee135299129d7b86b7e42c3275c41c8.png

图 9:扩展网络选项卡

然后,从列表中选择可以连接的网络以创建扩展网络。

 

57849624bba4bebc2f739b34db433261.png

图 10:扩展网络:选择要加入的任何网络

另一种手动方法是,用户可以通过以下方式创建扩展网络:从 Single Ended 选项卡中选择单个网络,将鼠标移动到显示区域,右键单击,然后选择 Create Extended Net。

 

07f616dd638239db12496cd132a6e590.png

图 11:构建扩展网络的替代方法

现在,如果用户想将新的扩展网络更改为差分扩展网络,那么用户必须按照前面解释的相同步骤创建差分线。最好的方法是将 _P 和 _N 表示法与新的延长线一起使用,在差分选项卡中自动识别,然后让 SIwave 进行组合。

 

  1. 设置求解器

单击 SIwizard 求解器。

在设置求解器之前,用户需要了解 SIwave 究竟会产生什么。它将在电子桌面中创建电路并完成所有设置。在 SIwave 中,求解器仅计算 s 参数框。然而,它使用用户提供的所有信息在 Electronic desktop 中构建和运行电路。让我们看看这是如何完成的。

 

08859f68cbda3ca51696048b9285cb93.png

图 12:示意图:使用 Eyesource 和 Eyeprobe

SIwave: DC、PI、SI 或辐射中的任何过程都从选择求解器开始。选择求解器后,SIwave 会生成一个看起来像表单的对话框。用户需要检查表单并填写缺失的信息。

例如,SIwave 使用模型中的所有现有跟踪填充对话框。可以选择一些行或解决所有行。请注意,此处 SIwave 仅选择跟踪。任何被归类为功率平面 SIwave 的东西都不会将其放入表格中。

现在,在表中,有四个类别:单一、差异、扩展和扩展差异。确保检查这四个类别并选择跟踪以对它们执行 SI。为简单起见,选择使用 8 条单线。

 

3db1ae4896f3f96527344dcd73959eec.png

图 13:选择跟踪

选择下一步以显示 Set Drivers/Receivers 对话框。这些列的含义是什么?

 

67b11fecfb9875ad481cfd73738778d8.png

图 14:定义激励:驱动器和接收器

  • 第一列是单端网络的名称。即使线路是差分的,SIwave 仍显示单端名称。
  • 第二列是第五列 Reference Designator 中提到的 component 中的引脚名称。
  • 第三列 Expose 表示用户希望 SIwave 在跟踪的该端放置一个端口。通常,只有连接到分立器件或集成电路的末端会暴露出来。这并不意味着如果两端连接到 R、L 或 C,则它不能暴露。
  • 第 5 列是第 5 列的部件号。因此,同一部分可以在电路中多次使用。每个指标都有自己的参考标号,如第 <> 列所述
  • 第 6 列,其中用户指定此端是 driver 还是 receiver(如果选中了 expose 选项)。在一端,选择 Driver (驱动程序);另一方面,选择 接收器.此信息将进入 circuit。SIwave 不使用此信息。
  • 第 7 列是拐角,即如果用户添加了 IBIS 模型。这些通常与温度和电源电压条件有关。SIwave 在此处根据您的选择选择正确的数据集:Max、Min、...
  • 第 8 列是 TX 或 RX 侧的 IBIS 模型。如果选中了一个选项,则用户还必须在第 9 列和第 10 列中指定选项。
  • 第 12 列是 PKG RLC。如果您使用的是 IBIS 模型,并且希望将封装的 RLC 包含在 IBIS 模型中,这一点非常重要。
  • 第 11 列是信号。用户可以选择 PRBS、clock、step 或随机 RPBS。在此列的正下方,有激发源框。单击 Manage sources(管理源)。请注意这四个选项。

 

ac53b440efa801bfcb1f0dc389720a82.png

图 15:定义信号

对于每个 API,用户需要指定

  • 的电压 DDR4 它是 1.2伏
  • 信号的类型,
  • 如果是自定义 PRBS 或时钟,则为位列表,
  • 种子(在定义 Bytes 时使用),
  • 期间,
  • 占空比,1 和 0 持续时间之间的比率,
  • 比特率 /
  • 延迟,
  • 上升时间,在 DDR4-3200 中为 35ps
  • 下降时间,与上升时间相同,最后
  • Driver 的输入阻抗。

请注意,如果用户想要一个随机位序列 PRBS,请在种子字段中输入 RAND。

用户还可以添加更多源,但它们必须是以下四种类型之一:脉冲 PRBS、脉冲起始高电平、脉冲起始低电平或随机位序列。因此,可以添加具有不同数据速率或上升时间的 PRBS 信号。

返回设置 Driver 和 Receiver。有关信号的信息也进入 eye source 和 eye probe 定义中的电路中。

如果用户选择多行,则底部的选项将被激活。所以现在,用户可以一键更改多行。

对选择感到满意后,单击 Next 为接收方分配适当的终端:

 

2ff36baeca3c41b2360a22e7eec783e1.png

图 16:定义接收器设置:Vtt 上拉电压。

  • 第一列是比赛名称,
  • 第二列是引脚号,
  • 第 3 列是部件号,
  • 第四列是参考指示符,
  • 第 2 列是 SDR 应用使用的 Vtt,通常等于 VddQ/<>。它是上拉电压,
  • 第 6 列是用于 SDR 应用的 Rvtt,它是上拉电阻器,
  • 第 7 列是端接电阻,
  • 第 8 列是端接分流电容。

与 SIwave 中的每个对话框一样,如果用户选择多行,则下半部分将被激活。

单击 Next。

以下对话框是 power plane 设置。在此对话框中,用户可以调整电源网络,为输入或输出处的走线中使用的元件供电。用户通常不需要更改任何内容,因为 SIwave 会填充所有条目。

 

eebe50c94c1f37ea93aba07cd0cf0568.png

图 17:电源平面设置

最后一步是求解器。

 

35fd278e359574255d4f13195cbed760.png

图 18:求解器设置

  • 在第一行中输入解决方案的名称:SIwizard with no IBIS models。
  • 在第二行中,如果选中,则 SIwave 不会生成原理图。
  • 第三行,如果选中,SIwave 将在电子桌面中生成原理图。
  • 第四行,如果用户希望 SIwave 包含用户定义的端口。这些端口是用户在 SIwizard 外部生成的,并希望它们包含在 s 参数中。类似于电源平面端口的接入点。
  • 第 1 行是步长,这是最短上升时间的函数;5/<> 是最大值
  • 第 6 行是 Stop time (停止时间);通常,它是最长结构的函数。第 5 行和第 6 行用于瞬态求解器的定义。
  • 第 7 行强制电子桌面中的瞬态求解器进行求解
  • 第 8 行、第 9 行和第 10 行用于绘制结果。
  • 第 11 行用于调用电子桌面中生成眼图的快速眼图求解器。
  • 第 12 行是在完成快速眼睛求解器后绘制眼睛。同样,电路中使用了 11 号线和 12 号线。
  • 第 13 行用于 SIwave 中的 s 参数求解器。SIwave 只对 s 参数进行求解。瞬态和快速眼是在电子桌面中完成的。
  • 第 14 行和第 15 行用于确认 s 参数端口的参考阻抗。

在第 13 行中,如果用户单击 edit(编辑),则会弹出 SYZ 求解器中解释的 s 参数求解器。请在此处观看 PI 求解器的视频,了解有关设置的更多信息。应该注意,最大频率与最小 Rise/Fall 时间有关。此外,请注意,如果用户单击其他求解器选项,则存在更多选项。

 

2da22f08956d950e66a6178ebb98753e.png

图 19:S 参数求解器设置

 

98a93ce341a58c6e100f65817838bbd2.png

图 20:精度与速度设置

返回 transient solver 设置,然后按 OK

添加 IBIS 模型并使用 IBIS 模型将解决方案 SIwizard 命名为 SIwizard 后,重复相同的步骤。这样,用户就可以看到两者之间的区别。

  1. 解决 方案
    • 瞬态解决方案

第一个结果来自瞬态求解器。瞬态求解器绘制用户要求的内容,当然,对于所选走线,Driver 和 Receiver 处的电压。请注意,在图中,p-p 电压是 1.2 伏特的一半。这是因为该电路充当电源和负载之间的功率分压器。因此,在设置中,始终输入两倍的电压。

d3ea80ae7d065bdd727e925a4e32c68a.png

 

c0fc214efcd0b136b73464a4f6a3ffa0.png

图 21:瞬态响应 PRBS 信号

如果用户没有进行眼图分析的许可证,则用户始终可以使用瞬态求解器生成眼图。执行瞬态操作后,选择 Results->Create eye diagram report->Rectangular plot-。将解决方案保留在 Transient 上,但将单位间隔更改为 1 位的间隔。

 

7762ec738712c185b5ce445e827bc78c.png

 

e96a35b8694687882879ec6a65c03ce7.png

图 22:从瞬态求解器生成眼图

  •  Quick Eye 解决方案

第二个结果来自 Quick Eye。用户可以从快速眼图求解器中绘制三种类型的眼图。请注意,需要选择要绘制的探针。

  • 结果->创建眼图报告->矩形图
  • 可以添加眼睛信息和度量
  • 是时间间隔的函数
  • 显示信号形状的 10 倍于 Transient 求解器中指定的周期。
  • 添加掩码:双击图形,再次选择 Mask (掩码)、Edit(编辑)、Edit(编辑),然后在电压和时间中输入掩码。

    图 23: 结果->创建眼图报告->矩形图


    图 24:眼图:结果->创建眼图报告->矩形图

    9b0b0e8df3a2ecd341f3f2e30843f723.png

    848c5eeca367e0a8d0f33dc20f8e2713.png


     
  • 结果->创建 眼图 报表-> 堆叠眼图:
    • 可以添加眼睛信息和度量
    • 是时间间隔的函数
    • 无法添加蒙版
    • 眼睛测量值在侧面自动生成

 

8c5b6d02204f709c09852b8726f03fc9.png

图 25:眼图:结果->创建眼图报告->堆叠眼图图

  • 结果->创建统计眼图 - >统计眼图
    • 可以添加眼睛信息和度量
    • 是单位间隔的函数
    • 可以添加所有眼睛信息
    • 可以添加掩码:双击图表,再次选择 Mask, Edit, Edit,然后以电压和单位间隔输入掩码。

    7e41f2ee3e7de2d402c5b104f35533e5.png

     

    图 26:眼图:结果->创建统计眼图 - >统计眼图

  • Verify Eye 解决方案

如果用户添加了 Verify Eye 求解器,则第三个结果可用。然后,用户可以绘制 Bathtub 结果。用户可以从浴缸中确定特定 BER 的眼宽。只需选择 y 标记并将 y 值设置为所需的 BER。

Results->Create Standard Report->Rectangular Plot->Bathtub

  • Can add a Y-marker to detect the eye-opening at any level (the Y-axis is the BER level)
  • Can also add a limit line
     

    f0454761788f7bcc833be582956c03e7.png

    Figure 27:  Eye Bathtub from VerifyEye

  • Vtt 模型

将 Vtt 和 Rvtt 添加到设置中。如前所述,当您没有 IBIS 模型并且迹线用于 SRD 而不是 DDR 时,会使用此设置。电路如下所示。

 

fe5c90771ca942cdbc954db0aa4f4e82.png

图 28:原理图:使用 Eyesource 和 Eyeprobe 和 Vtt 电路

这就是结果。完全不同。

 

2ffdb20e2e6a17eae7ed3d9895c0a4fe.png

图 29:眼图:结果 - >创建 眼图 报告 - >矩形图

  • IBIS 模型

添加 IBIS 模型后,电路将更改为在 Ansys 电路中包含 IBIS 组件。请注意,对于这些组件,用户仍然需要拥有 eye source 和 eye probe。

 

260f852662d99d83f177a8f184fff0c8.png

图 30:在激励定义中输入 IBIS 模型

如果用户想要使用 Quickeye 和 Verifyeye 解算器,则眼睛源和眼睛探针就在那里。但是,Eyesource 内部的设置是错误的,因为它没有被使用。有关信号的所有信息都来自 IBIS 模型。

 

e9bce7111464fee1ca002e46abf8e97e.png

 

25176e4ff09d10ac1f7909714e982db2.png

图 31:原理图:使用 IBIS 模型

打开 IBIS 模型的对话框。

 

ee964c91ac6d2c6a5282037866be3207.png

图 32:IBIS 模型对话框

  • 文件名
  • 文件名中使用的模型,在本例中选择 HSTL (high-speed transceiver logic)
  • 键入角:是 typical、min、max 还是其他任何内容?这些是 IBIS 文件中的选项。
  • 电源来自 IBIS 文件本身,而不是来自 Eyesource(内部)
  • Buffer:输入 Rx、输出 Tx 或输入-输出。记录在 IBIS 文件中,用户无法更改它。对于 input-output,则在下面的 buffer_mode中,用户必须指定哪一个:input 或 output。
  • 极性,反相或非反相
  • 文件中的 Pin-name
  • 组件名称
  • 封装选择器(Pin/Package/None):在 IBIS 文件中,有两个部分,[Package] 部分和 [PIN] 部分。Package 具有传统的 R_pkg、 L_pkg 和 C_pkg。Pin 1 是 pin 名称的列表
  • 探针芯片侧:
  • Die Side Node Prefix(晶片侧节点前缀):如果晶粒引脚的名称中包含任何前缀。
  • Buffer_mode:当缓冲区为 input-output 时使用。
  • Logic_in 以用户输入 Eyesource 引脚的名称。如果设置为 internal,则用户需要转到 Bits 选项卡并输入信号的定义。
  • Out-of-in(输出输入):
     

    7264f1980ae3856eed2e334e010048ff.png

     

    21df1c95937b6fabf66136acc15927de.png


     

图 33:IBIS 文件:[package] 和 [pin] 部分

如果用户选择使用内部源而不是 eye 源,则 Bits 选项卡中会出现一个类似于 eye 源中的对话框。

 

982e64862bf0d50e6bcc18a2e36395a3.png

 

2118779495ea488dc4974da94fd59de1.png

Figure 34: Bits tab with and without Eyesource

If the IBIS file has more options, then activate show hidden, and the user can have more items to select.

 

008823f2ad5315d6beb71d0d216e097a.png

图 35:具有更多选项的 IBIS 模型对话框

结果如下:

 

8ed37c4e6c588e1636c01612d31f1cc0.png

图 36:使用 IBIS 模型:结果 - >创建眼图报告 - >矩形图

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka 可观测性最佳实践

Kafka 概述 Kafka 是由 LinkedIn 开发一个分布式的基于发布订阅模式的消息队列&#xff0c;是一个实时数据处理系统&#xff0c;可以横向扩展。与 RabbitMQ、RockerMQ 等中间件一样拥有几大特点&#xff1a; 异步处理服务解耦流量削峰 监控 Kafka 是非常重要的&#xff0c;因…

342--358作业整理(错误 + 重点)

目录 1. 在需要运行的类中 定义 main 方法 2. this 。访问逻辑&#xff1a;先访问本类中&#xff0c;再访问父类中可以访问的成员&#xff08;不包括和本类中重名的成员&#xff09; 3. super 。访问逻辑&#xff1a;super&#xff08;父类对象&#xff09;直接访问父类及以…

Android自启动管控

1. 自启动管控需求来源 自启动、关联启动、交叉启动、推送启动等现象的泛滥除了对个人信息保护带来隐患外&#xff0c;还会导致占用过多的系统CPU和内存资源&#xff0c;造成系统卡顿、发热、电池消耗过快&#xff1b;还可能引入一些包含“恶意代码”的进程在后台隐蔽启动&…

智能的编织:C++中auto的编织艺术

在C的世界里&#xff0c;auto这个关键字就像是一个聪明的助手&#xff0c;它能够自动帮你识别变量的类型&#xff0c;让你的代码更加简洁和清晰。下面&#xff0c;我们就来聊聊auto这个关键字的前世今生&#xff0c;以及它在C11标准中的新用法。 auto的前世 在C11之前&#x…

函数式编程Stream流(通俗易懂!!!)

重点&#xff1a;只关注传入的参数列表和方法体&#xff08;数据操作&#xff09; 1.Lambda表达式 本质是匿名内部类的优化&#xff0c;先写匿名内部类 1.1 基本用法 public class lambdaTest {public static void main(String[] args) { // int i calculateNum((…

C#里对数组的排序操作

一般情况下是采用 Array.Sort(a) 来进行排序。 例子代码如下: /** C# Program to Sort a String using Predefined Function*/ using System; class linSearch {public static void Main(){Console.WriteLine("Enter Number of Elements you Want to Hold in the Arra…

算法每日双题精讲——双指针(移动零,复写零)

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; 别再犹豫了&#xff01;快来订阅我们的算法每日双题精讲专栏&#xff0c;一起踏上算法学习的精彩之旅吧&#xff01;&#x1f4aa;…

【Android】View—基础知识,滑动,弹性滑动

基础知识 什么是View 在 Android 中&#xff0c;View 是用户界面&#xff08;UI&#xff09;中的基本组件&#xff0c;用于绘制图形和处理用户交互。所有的 UI 组件&#xff08;如按钮、文本框、图片等&#xff09;都是 View 的子类。可以说&#xff0c;View 是构建 Android …

【Unity】Game Framework框架学习使用

前言 之前用过一段时间的Game Framework框架&#xff0c;后来有那么一段时间都做定制小软件&#xff0c;框架就没再怎么使用了。 现在要做大型项目了&#xff0c;感觉还是用框架好一些。于是又把Game Framework拾起来了。 这篇文章主要是讲Game Framework这个框架是怎么用的…

【SoC设计指南 基于Arm Cortex-M】学习笔记1——AMBA

AMBA简介 先进微控制器总线架构&#xff08;Advanced Microcontroller Bus Architecture&#xff0c;AMBA&#xff09;是用在arm处理器上的片上总线协议规范集。 AMBA总线协议规范集包含AHB、APB、AXI等。 AHB&#xff1a;先进高性能总线(Advanced High-performance Bus) APB&…

pytorch模型转onnx的动态batch转换说明

将PyTorch模型&#xff08;.pth&#xff09;转换为ONNX格式时&#xff0c;通常需要指定一个batch size。这是因为ONNX模型需要一个固定的输入形状&#xff0c;而批处理大小是输入形状的一部分。 下面是一个简单的转换示例&#xff0c;假设你已经加载了一个PyTorch模型&#xff…

【王木头】最大似然估计、最大后验估计

目录 一、最大似然估计&#xff08;MLE&#xff09; 二、最大后验估计&#xff08;MAP&#xff09; 三、MLE 和 MAP 的本质区别 四、当先验是均匀分布时&#xff0c;MLE 和 MAP 等价 五、总结 本文理论参考王木头的视频&#xff1a; 贝叶斯解释“L1和L2正则化”&#xff…

从0到1基于LangChain制作一个AI猫娘

前言&#xff1a; 看到B站上的AIVtuber的项目落地了&#xff0c;就心血来潮想制作一个AI的猫娘供自己使用&#xff0c;顺便出一个简单的教程&#xff0c;跳过理论&#xff0c;直接实践&#xff0c;作者也还在学习摸索中&#xff0c;所以有错误可以直接在评论区指正。&#xff0…

Vue全栈开发旅游网项目(7)-搜索界面开发及其接口联调

1.搜索界面开发 1.1 模糊查询 文件地址&#xff1a;pycharm- class SightListView(ListView):paginate_by 5def get_queryset(self):#is_validTrue&#xff1a;表中is_valid列&#xff0c;有值则被查询出来query Q(is_validTrue)#1.获得热门景点is_hot self.request.GET.…

python识别ocr 图片和pdf文件

#识别图片 pip3 install paddleocr pip3 install paddlepaddle#识别pdf pip3 install PyMuPDF 重点&#xff1a;路径不能有中文&#xff0c;不然pdf文件访问不了 from paddleocr import PaddleOCR from rest_framework.response import Response from rest_framework.views im…

量化分析工具日常操作日记-5-通合科技

使用量化分析微信小程序工具“梦想兔企业智能风险分析助手”日常操作日记-5-军工-通合科技&#xff08;300491&#xff09;。 周末国家新政策&#xff0c;要大力支持军工行业&#xff0c;我用工具挖掘了两个低位股&#xff0c;供大家参考。通合科技&#xff08;300491&#xff…

详解基于C#开发Windows API的SendMessage方法的鼠标键盘消息发送

在C#中&#xff0c;SendMessage方法是一个强大的工具&#xff0c;它允许我们与Windows API交互&#xff0c;模拟键盘和鼠标事件。本文将详细介绍如何使用SendMessage方法来发送鼠标和键盘消息。 1. SendMessage方法概述 SendMessage是Windows API中的一个函数&#xff0c;它用…

CSS教程(三)- CSS 三大特性

1. 层叠性 介绍 多组CSS样式共同作用于一个元素&#xff0c;就会出现 覆盖&#xff08;层叠&#xff09; 另一个冲突的样式。 层叠原则 样式冲突&#xff1a;遵循就近原则&#xff08;哪个样式离结构近&#xff0c;就执行哪个样式&#xff09; 样式不冲突&#xff0c;就不会重…

CyclicBarrier使用详解及遇到的坑

上一篇文章讲的是关于是使用CountDownLatch实现生成年底报告遇到的问题&#xff0c;这个计数器和CyclicBarrier也有类似功能&#xff0c;但是应用场景不同。 一、应用场景 CountDownLatch&#xff1a; 有ABCD四个任务&#xff0c;ABC是并行执行,等ABC三个任务都执行完…