当前位置: 首页 > news >正文

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

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 模型:结果 - >创建眼图报告 - >矩形图

 

相关文章:

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

SIwave 是一种电源完整性和信号完整性工具。SIwizard 是 SIwave 中 SI 分析的主要工具&#xff0c;也是本博客的主题。 SIwizard 用于研究 RF、clock 和 control traces 的信号完整性。该工具允许用户进行瞬态分析、眼图分析和 BER 计算。用户可以将 IBIS 和 IBIS-AMI 模型添加…...

强化学习不愧“顶会收割机”!2大创新思路带你上大分,毕业不用愁!

强化学习之父Richard Sutton悄悄搞了个大的&#xff0c;提出了一个简单思路&#xff1a;奖励聚中。这思路简单效果却不简单&#xff0c;等于是给几乎所有的强化学习算法上了一个增强buff&#xff0c;所以这篇论文已经入选了首届强化学习会议&#xff08;RLC 2024&#xff09;&a…...

mac 修改启动图图标数量

调整每行显示图标数量&#xff1a; defaults write com.apple.dock springboard-rows -int 7 调整每列显示的数量 defaults write com.apple.dock springboard-columns -int 8 最后重置一下启动台 defaults write com.apple.dock ResetLaunchPad -bool TRUE;killall Dock 其…...

网站架构知识之Ansible进阶(day022)

1.handler触发器 应用场景&#xff1a;一般用于分发配置文件时候&#xff0c;如果配置文件有变化&#xff0c;则重启服务&#xff0c;如果没有变化&#xff0c;则不重启服务 案列01&#xff1a;分发nfs配置文件&#xff0c;若文件发生改变则重启服务 2.when判断 用于给ans运…...

VMware调整窗口为可以缩小但不改变显示内容的大小

也就是缩小窗口不会影响内容的大小 这样设置就好...

Vue 3 中,ref 和 reactive的区别

在 Vue 3 中&#xff0c;ref 和 reactive 是两种用于创建响应式数据的方法。它们有一些关键的区别和适用场景。以下是它们的主要区别&#xff1a; ref 用途&#xff1a; ref 主要用于处理基本数据类型&#xff08;如字符串、数字、布尔值等&#xff09;以及需要单独响应的复杂…...

window 利用Putty免密登录远程服务器

1 在本地电脑用putty-gen生成密钥 参考1 参考2 2 服务器端操作 将公钥上传至Linux服务器。 复制上述公钥到服务器端的authorized_keys文件 mkdir ~/.ssh vi ~/.ssh/authorized_keys在vi编辑器中&#xff0c;按下ShiftInsert键或者右键选择粘贴&#xff0c;即可将剪贴板中的文…...

OGNL表达式

介绍 OGNL生来就是为了简化Java属性的取值&#xff0c;比如想根据名称name引用当前上下文环境中的对象&#xff0c;则直接键入即可&#xff0c;如果想要引用当前上下文环境中对象text的属性title&#xff0c;则键入text.title即可。如果想引用对象的非值属性&#xff0c;OGNL也…...

AI 大模型重塑软件开发流程的现状与未来展望

![在这里插## 标题入图片描述](https://i-blog.csdnimg.cn/direct/cf41e32d3b3649ce9a543afd4d31abba.gif#pic_center)​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 随着AI技术&#xff0c;尤其是大模型的快速发展&#xff0c;软件开发领域正在经历深刻…...

Spring Boot 的核心注解

一、引言 Spring Boot 作为一种流行的 Java 开发框架&#xff0c;以其简洁高效的开发方式受到广泛关注。其中&#xff0c;核心注解在 Spring Boot 应用的开发中起着至关重要的作用。理解这些注解的含义和用法&#xff0c;对于充分发挥 Spring Boot 的优势至关重要。本文将深入剖…...

蓝桥杯备考——算法

一、排序 冒泡排序、选择排序、插入排序、 快速排序、归并排序、桶排序 二、枚举 三、二分查找与二分答案 四、搜索&#xff08;DFS&#xff09; DFS&#xff08;DFS基础、回溯、剪枝、记忆化&#xff09; 1.DFS算法&#xff08;深度优先搜索算法&#xff09; 深度优先搜…...

MutationObserver与IntersectionObserver的区别

今天主要是分享一下MutationObserver和IntersectionObserver的区别&#xff0c;希望对大家有帮助! MutationObserver 和 IntersectionObserver 的区别 MutationObserver 作用&#xff1a;用于监听 DOM 树的变动&#xff0c;包括&#xff1a;元素的属性、子元素列表或节点文本的…...

生产与配置

1.鲁滨孙克苏鲁经济 鲁滨孙克苏鲁经济是一种非常简单的自给自足的经济&#xff0c;劳动时间与休息时间总和为总的时间。 即 摘椰子的数量为劳动时间的函数 由于鲁滨孙喜欢椰子&#xff0c;厌恶劳动时间&#xff0c;因此无差异曲线表现为厌恶品的形态。 根据无差异曲线和生…...

Android Kotlin Flow 冷流 热流

在 Android 开发中&#xff0c;Flow 是 Kotlin 协程库的一部分&#xff0c;用于处理异步数据流的一个组件。本质上&#xff0c;Flow 是一个能够异步生产多个值的数据流&#xff0c;与 suspend 函数返回单个值的模式相对应。Flow 更类似于 RxJava 中的 Observable&#xff0c;但…...

订单日记助力“实峰科技”提升业务效率

感谢北京实峰科技有限公司选择使用订单日记&#xff01; 北京实峰科技有限公司&#xff0c;成立于2022年&#xff0c;位于北京市石景区&#xff0c;是一家以从事生产、销售微特电机、输配电及控制设备等业务为主的企业。 在业务不断壮大的过程中&#xff0c;想使用一种既能提…...

如何安装和配置JDK17

教程目录 零、引言1、新特性概览2、性能优化3、安全性增强4、其他改进5、总结 一、下载安装二、环境配置三、测试验证 零、引言 JDK 17&#xff08;Java Development Kit 17&#xff09;是Java平台的一个重要版本&#xff0c;它带来了许多新特性和改进&#xff0c;进一步提升了…...

智能化温室大棚控制系统设计(论文+源码)

1 系统的功能及方案设计 本次智能化温室大棚控制系统的设计其系统整体结构如图2.1所示&#xff0c;整个系统在器件上包括了主控制器STC89C52&#xff0c;温湿度传感器DHT11&#xff0c;LCD1602液晶&#xff0c;继电器&#xff0c;CO2传感器&#xff0c;光敏电阻&#xff0c;按…...

面试题之---解释一下原型和原型链

实例化对象 和普调函数一样&#xff0c;只不过调用的时候要和new连用&#xff08;实例化&#xff09;&#xff0c;不然就是一个普通函数调用 function Person () {} const o1 new Person() //能得到一个空对象 const o2 Person() //什么也得不到&#xff0c;这就是普通的…...

【Leecode】Leecode刷题之路第46天之全排列

题目出处 46-全排列-题目出处 题目描述 个人解法 思路&#xff1a; todo代码示例&#xff1a;&#xff08;Java&#xff09; todo复杂度分析 todo官方解法 46-全排列-官方解法 预备知识 回溯法&#xff1a;一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解…...

自动驾驶革命:从特斯拉到百度,谁将主宰未来交通?

内容概要 自动驾驶技术正在经历一个前所未有的革命性变化&#xff0c;各大企业纷纷抢占这一充满潜力的新市场。以特斯拉和百度为代表的行业巨头&#xff0c;正利用各自的优势在这一技术的赛道上展开激烈竞争。特斯拉凭借其在电动汽车和自动驾驶领域的前瞻性设计与不断革新的技…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...