【电路笔记 信号】Metastability 平均故障间隔时间(MTBF)公式推导:进入亚稳态+退出亚稳态+同步器的可靠性计算
- 这是一个简化的电路分析模型。图2中的典型触发器包括主锁存器、从锁存器和去耦反相器(这个结构类似 主从边沿触发器)。
- 在亚稳态中,主锁存器的节点A、B的电压电平大致在逻辑“1”(VDD)和“0”(GND)之间。确切的电压电平取决于晶体管尺寸(通过设计以及由于任意工艺变化),并且对于两个都不一定相同。然而,为了简单起见,假设它们是( V A = V B = V D D / 2 V_A=V_B=V_{DD}/2 VA=VB=VDD/2)。
1.1 Entering Metastability 进入亚稳态
- 主锁如何进入亚稳态?考虑图2中左侧的触发器。假设时钟为低,节点A处于“1”,输入D从“0”变为“1”。结果,节点a下降,节点B上升。当时钟上升时,它会断开节点A的输入并关闭A-B环路。如果A和B恰好在亚稳态水平附近,那么它们需要很长时间才能偏离合法的数值,如下所示。
- 事实上,如果触发器的输出变化晚于标称时钟到Q传播延迟(tpCQ),那么触发器一定是亚稳态的。我们可以通过调整时钟和数据的相对时序来模拟效果,直到我们获得所需的结果,如图3所示。顺便说一句,触发器的其他错误定时输入(异步复位、清除,甚至由于错误的时钟门控导致时钟脉冲太短)也可能导致亚稳态。
- 当时钟与数据的时序关系未知时,我们使用概率来评估锁存器进入亚稳态的可能性(这里我们暂时只关注主锁存器,稍后会讨论整个触发器)。异步输入的最简单模型假设数据可能在任何时刻发生变化,且变化具有均匀分布。我们可以定义一个短时间窗口 T W T_W TW,围绕时钟的采样边沿(类似于“建立时间”和“保持时间”),如果数据在该窗口内发生变化,锁存器可能会进入亚稳态(即触发器输出可能会晚于 tpCQ 改变)。如果已知数据在某个时钟周期内确实发生了变化,并且该变化在时钟周期 T C T_C TC 内均匀分布,则进入亚稳态的概率,即数据在 TW 窗口内发生变化的概率为 T W / T C = T W ∗ F C T_W/T_C = T_W*F_C TW/TC=TW∗FC。然而,数据并非每个周期都发生变化;如果数据变化的频率为 F D F_D FD,那么进入亚稳态的速率将为 R a t e = F D F C T W Rate = F_DF_CT_W Rate=FDFCTW。例如,如果 F C F_C FC = 1GHz, F D F_D FD = 100MHz, T W T_W TW = 20ps,那么 Rate = 2,000,000 次/秒。事实上,这个“脆弱”的锁存器很容易进入亚稳态,每微秒两次,或者每 500 个时钟周期一次!注意,我们将概率转化为速率——这是我们下面需要的。
1.2 Exiting Metastability 退出亚稳态
- 现在我们知道锁存器进入亚稳态的频率,接下来要探讨的是锁存器从亚稳态中退出的速度。在亚稳态中,两个反相器处于其线性传递函数区域,可以通过(小信号)模型将其视为(负)放大器(见图 4),每个反相器通过其输出电阻 R 驱动一个电容性负载 C,该负载包括另一个反相器的输入电容以及连接到该节点的其他外部负载。通常,主锁存器在时钟周期的第二阶段之前会从亚稳态中解决;但在极少数情况下,当主锁存器在亚稳态发生后的恰好半个时钟周期内解决时,从锁存器可能会因此进入亚稳态(其输入恰好在时钟断开输入的时刻发生变化,进而重复了关于主锁存器的情况)。
- 通过一阶微分方程来建模锁存器退出亚稳态的过程。
- 模型涉及到两个一阶微分方程,分别描述了电压 V A V_A VA 和 V B V_B VB 随时间的变化:
-
对于电压 V A V_A VA:
d V A d t = 1 R ( − A V B − V A ) ⋅ 1 C \frac{dV_A}{dt} = \frac{1}{R} \left( -AV_B - V_A \right) \cdot \frac{1}{C} dtdVA=R1(−AVB−VA)⋅C1 -
对于电压 V B V_B VB:
d V B d t = 1 R ( − A V A − V B ) ⋅ 1 C \frac{dV_B}{dt} = \frac{1}{R} \left( -AV_A - V_B \right) \cdot \frac{1}{C} dtdVB=R1(−AVA−VB)⋅C1
- 将第二个方程从第一个方程中减去,来合并这两个方程:
d V A d t − d V B d t = ( V B − V A ) + A ( V A − V B ) R \frac{dV_A}{dt} - \frac{dV_B}{dt} = \frac{ (V_B - V_A)+A (V_A - V_B) }{R} dtdVA−dtdVB=R(VB−VA)+A(VA−VB)
将右侧的项整理一下:
C ( d V A d t − d V B d t ) = V B − V A R C(\frac{dV_A}{dt} - \frac{dV_B}{dt}) = \frac{V_B - V_A}{R} C(dtdVA−dtdVB)=RVB−VA
C d V A − d V B d t = V B − V A R C\frac{dV_A- {dV_B}}{dt} = \frac{V_B - V_A}{R} CdtdVA−dVB=RVB−VA
- 令 V A − V B = V V_A - V_B = V VA−VB=V
- 令 τ = R C A − 1 \tau = \frac{RC}{A-1} τ=A−1RC
V = τ d V d t V=\tau \frac{dV}{dt} V=τdtdV
V ( t ) = K e − t / τ V(t) = K e^{-t / \tau} V(t)=Ke−t/τ
其中, K K K 是由初始条件(即亚稳态时的电压)决定的常数。
解释
- 时间常数 τ \tau τ:它是电路的特征时间,决定了电压恢复到稳定状态的速度。较大的 $ \tau $ 意味着恢复时间较长。
- 指数衰减 e − t / τ e^{-t / \tau} e−t/τ:表示电压随着时间逐渐恢复,直到达到稳定状态。
- 常数 K K K:它由初始电压条件决定,反映了系统的初始状态。
这个模型描述了锁存器如何从亚稳态中退出。时间常数 τ \tau τ 控制了锁存器恢复的速度,而恢复过程是一个指数衰减过程。
-
由于 A / R ≈ g m A/R ≈ g_m A/R≈gm,我们通常估计 τ = C / g m τ = C/g_m τ=C/gm;主节点上的更高电容负载或较低的反相器增益会妨碍亚稳态的解析度。主锁存器对电容具有指数级的敏感性,不同的锁存电路通常在驱动的电容负载上有所不同。过去,τ 在技术发展过程中表现出较好的可扩展性,但最近有新的证据表明,在未来的技术中,τ 可能会恶化而不是改善。
-
因此,电压差 V 展现出一种“爆炸”现象(就像任何其他以指数速度增长的物理量,例如化学爆炸)。这一行为最能通过锁存器的电路仿真来展示,从一个微小的电压差 V0=1μV 开始(见图5)。两个节点的电压曲线似乎并没有很快变化(更不用说爆炸了)。然而,通过观察图6中电压差 V 的对数,我们可以看到完全不同的情况。从初始电压 V0 到约 V1=0.1V 或 log(V1) = –1(V1 大约是晶体管的阈值电压 VTH)这段直线经历了五个数量级的指数增长速率,表明“爆炸”实际上发生在微观层面。当电压差接近晶体管的阈值电压时,锁存器的工作模式从两个互联的小信号线性放大器(如图4所示)变为典型的、更慢的数字电路。我们说一旦电压 V 的增长速率不再是指数级的(图6中的对数曲线趋于平缓),亚稳态就得到了分辨。
这段话介绍了如何通过对数图表来估算时间常数 τ \tau τ,并且讨论了现实中影响 τ \tau τ 的一些因素。
使用对数图估算 τ \tau τ
在对数图表上,锁存器的电压变化可以近似为一条直线。通过取这条直线上的两个任意电压值 V x V_x Vx 和 V y V_y Vy,并计算它们之间的比值,我们可以估算出时间常数 τ \tau τ。这个过程如下:
-
假设电压 V V V 随时间 t t t 指数衰减,可以表示为:
V ( t ) = K e − t / τ V(t) = K e^{-t/\tau} V(t)=Ke−t/τ
其中, K K K 是常数,表示初始电压。 -
取时间 t x t_x tx 和 t y t_y ty 两个时刻的电压 V x V_x Vx 和 V y V_y Vy,有:
V x = K e − t x / τ , V y = K e − t y / τ V_x = K e^{-t_x/\tau}, \quad V_y = K e^{-t_y/\tau} Vx=Ke−tx/τ,Vy=Ke−ty/τ -
对两者取自然对数:
ln ( V x ) = ln ( K ) − t x τ , ln ( V y ) = ln ( K ) − t y τ \ln(V_x) = \ln(K) - \frac{t_x}{\tau}, \quad \ln(V_y) = \ln(K) - \frac{t_y}{\tau} ln(Vx)=ln(K)−τtx,ln(Vy)=ln(K)−τty -
通过这两个方程,可以得到:
ln ( V x V y ) = t y − t x τ \ln\left(\frac{V_x}{V_y}\right) = \frac{t_y - t_x}{\tau} ln(VyVx)=τty−tx从而可以解出时间常数 τ \tau τ:
τ = t y − t x ln ( V x / V y ) \tau = \frac{t_y - t_x}{\ln(V_x / V_y)} τ=ln(Vx/Vy)ty−tx
这是一种简单的方法,可以通过对数图来估算时间常数 τ \tau τ。
影响 τ \tau τ 的因素
在实际电路中,影响 τ \tau τ 的因素有很多:
-
过程变化:在某些电路中, τ \tau τ 可能会在亚稳态解析的过程中发生变化,这使得图线不再是完全直线。因此,模拟得到的 τ \tau τ 值可能会比实际值小。
-
低供电电压:特别是当亚稳态电压接近阈值电压时,跨导 g m g_m gm 会显著下降,导致 τ \tau τ 增大。
-
温度变化:非常高或极低的温度也会使得 τ \tau τ 增加几个数量级。
这些因素使得同步研究成为一个有趣的挑战,并且具有实际意义。它们可能导致预期的恢复时间(即 τ \tau τ)比模拟计算的结果大得多。因此,在设计高速数字电路时,考虑到这些实际影响至关重要。
- 亚稳态退出的时间 t m t_m tm 与电压 V 0 V_0 V0 和 V 1 V_1 V1 之间的关系:
退出亚稳态的时间 t m t_m tm
- 如果亚稳态的开始电压是 V 0 V_0 V0,结束电压是 V 1 V_1 V1,那么从亚稳态退出的时间 t m t_m tm 可以通过以下公式来表示:
t m = τ ln ( V 0 V 1 ) t_m = \tau \ln\left( \frac{V_0}{V_1} \right) tm=τln(V1V0)
其中:
- τ \tau τ 是电路的时间常数(如之前所讨论的)。
- V 0 V_0 V0 是亚稳态开始时的电压。
- V 1 V_1 V1 是亚稳态结束时的电压。
这个公式表明,从亚稳态退出的时间 t m t_m tm 依赖于初始电压 V 0 V_0 V0,而与固定的结束电压 V 1 V_1 V1 无关。
解释
- 对数关系:退出亚稳态的时间 t m t_m tm 与初始电压 V 0 V_0 V0 成对数关系。也就是说, V 0 V_0 V0 越大,退出亚稳态所需的时间 t m t_m tm 就越长。
- 电压范围:电压 V 0 V_0 V0 和 V 1 V_1 V1 之间的比值决定了退出亚稳态的速率。随着 V 0 V_0 V0 的增大,退出的时间 t m t_m tm 也会增大,但这种增大是对数性质的。
- 图示验证:如图 7 所示,这个关系在图形上是清晰可见的。随着 V 0 V_0 V0 的增大,所需的时间 t m t_m tm 会明显增加,但增加的速率减缓。
总结
- 从亚稳态退出的时间 t m t_m tm 取决于开始时的电压 V 0 V_0 V0,并且它是对数关系。
- 固定的结束电压 V 1 V_1 V1 对 t m t_m tm 的影响较小,主要影响的是 V 0 V_0 V0。
- 这种对数关系意味着在实际电路中,如果初始电压较高,系统可能需要更长的时间来从亚稳态恢复。
-
Figure 7: Simulations of metastability resolution with the starting voltage difference varying from 100mV (left) to 10pV (right); the lower the starting voltage, the longer it takes to resolve. The top chart shows voltage of the two latch nodes (the chart for V0=1\mu V is same as in Figure 5); the bottom chart shows the log of their difference (the line starting at –6 is the same as in Figure 6)
-
© IEEE 2011 6 To be published in IEEE Design & Test
-
进一步探讨了锁存器进入亚稳态后的行为,特别是亚稳态持续时间的概率性质以及影响初始电压 V 0 V_0 V0 的因素。
初始电压对亚稳态持续时间的影响
-
当 V 0 = V 1 V_0 = V_1 V0=V1 时,即亚稳态初始电压与结束电压相等,亚稳态的持续时间 t m t_m tm 为零(见图 7 中的最左侧曲线)。这种情况表示亚稳态已经在初始时刻就已经解决。
-
当 V 0 = 0 V_0 = 0 V0=0 时,也就是锁存器输入电压完全为零,理论上我们需要无限长的时间才能退出亚稳态。但这种情况非常不可能发生,因为实际电压不会完全为零。
亚稳态的实际过程
对于一些流行的说法,“亚稳态时,锁存器的两个节点会卡在中间,最终会通过某种随机过程摆脱困境”,需要谨慎对待。这类说法过于简化了亚稳态的过程。
亚稳态的实际初始电压 V 0 V_0 V0 受两个因素的影响:
-
时钟采样边沿的精确时刻:即时钟的采样边沿究竟在什么时刻锁存器输入被阻塞,并关闭了锁存器。此时的实际电压值是 V 0 V_0 V0。
-
噪声的影响:噪声,特别是热噪声,可能会在电压上产生小的波动。例如,热噪声通常会产生 1μV 到 1mV 之间的电压变化,这个噪声值远高于图 7 右侧极端情况下的电压。
随机性与统计估算
由于我们无法精确地知道初始电压 V 0 V_0 V0 的具体值,因此我们无法确定锁存器将保持亚稳态的确切时间。但我们可以进行统计估算:
-
概率分析表明,假设锁存器在时间 t = 0 t = 0 t=0 时进入亚稳态,那么它在 t > 0 t > 0 t>0 时保持亚稳态的概率为:
P ( t ) = e − t / τ P(t) = e^{-t/\tau} P(t)=e−t/τ
这个概率随着时间的推移指数衰减。 -
换句话说,即使锁存器进入了亚稳态,它也会相当快地恢复稳定。具体来说,随着时间的推移,亚稳态持续的概率会迅速降低。
结论
- 初始电压 V 0 V_0 V0 对亚稳态的持续时间有重要影响,但由于噪声和时钟采样的随机性,我们无法精确预测亚稳态的持续时间。
- 概率分析显示,即使锁存器进入亚稳态,它通常也会很快恢复,恢复时间是由时间常数 τ \tau τ 决定的,且恢复过程遵循指数衰减规律。
- 这些结果表明,虽然亚稳态的出现是一个不确定过程,但在大多数情况下,它不会持续很长时间。
1.3 Synchronization Reliability 同步器的可靠性
- 这一切引导我们开始计算同步器的可靠性。如果一个锁存器接收异步输入,我们无法保证它永远不会进入亚稳态——事实上,我们已经知道,在上述示例中,锁存器肯定会以 ( F_D \cdot F_C \cdot T_W ) 的高频率(2M/s)进入亚稳态!相反,我们可以计算它因此导致失败的可靠性。同步器的整个目的(如下所述)就是最小化这种失败的概率。因此,我们现在可以最终定义和估算同步失败:我们希望亚稳态在同步周期 ( S ) 内得到解决,以便我们可以安全地采样锁存器(或触发器)的输出。失败意味着一个触发器(i)在时钟的采样边缘之后变得亚稳态,并且(ii)在 ( S ) 时间后仍然处于亚稳态。由于这两个事件是独立的,我们可以将它们的概率相乘:
p ( f a i l u r e s ) = p ( e n t e r M S ) × p ( t i m e t o e x i t > S ) = T W F C × e − S / τ p(failures)=p(enter MS) \times p(time to exit > S)=T_WF_C \times e^{-S/\tau} p(failures)=p(enterMS)×p(timetoexit>S)=TWFC×e−S/τ
- 现在我们可以利用上面计算的进入亚稳态速率的表达式,推导出预期失败的速率:
R a t e ( f a i l u r e s ) = T W F C F D × e − S / τ Rate(failures)=T_WF_CF_D\times e^{-S/\tau} Rate(failures)=TWFCFD×e−S/τ
- 故障率的倒数就是平均故障间隔时间(MTBF):
M T B F = e S / τ T W F C F D MTBF = \frac{e^{S/\tau}}{T_WF_CF_D} MTBF=TWFCFDeS/τ
CG
-
主要翻译自 Metastability and Synchronizers A Tutorial
-
William J. Dally and John W. Poulton, Digital Systems Engineering, Cambridge University Press, 1998
-
ASIC 中的异步时序设计,2004
-
https://www.doc88.com/p-311748560902.html?s=rel&id=4
-
Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog
-
跨时钟域处理方法总结–最终详尽版
-
精确 MTBF 计算公式
-
https://reliabilityacademy.com/wp-content/uploads/2021/12/Simple-guide-to-MTBF-1.pdf
-
http://www.ai.mit.edu/courses/6.915/6.915.html
-
Practical design for transferring signals between clock domains
-
A Scalable Dual-Clock FIFO for Data Transfers Between Arbitrary and Haltable Clock Domains
-
A High Performance and Robust FIFO Synchronizer-Interface for Crossing Clock Domains in SFQ Logic
-
你真的懂2-flop synchronizer吗-- CDC的那些事(2)
-
更多零件 --> 更低的 MTBF,更少的零件 --> 更高的 MTBF
-
- https://trilobyte.com/pdf/golson_snug14.pdf
-
- 19 Theoretical and experimental behavior of synchronizers operating in the metastable region.
-
https://www.ti.com/lit/an/scza004a/scza004a.pdf
-
https://my.ece.utah.edu/~kstevens/mscas/mscas12-session2a.pdf
-
Product Level MTBF Calculation
-
MTBF of a Multi-Synchronizer System on Chip
-
FPGA中亚稳态的理解(Understanding Metastability in FPGAs)
-
Understanding Metastability in FPGAs
-
- https://web.stanford.edu/class/ee183/handouts/synchronization_pres.pdf
- https://web.stanford.edu/class/ee183/handouts/synchronization_pres.pdf
-
注:
-
1. 您不能将多位数据与 FF 链同步。数据可能会变得不一致,因为每个位只能自行同步。它在特殊条件下工作,例如递增变化的灰色编码数字,每个 clock cycle 少于 1 个计数。所以讨论显然是关于单比特二进制数据。
- 来自不相关 clock domain 的二进制数据,在每个 clock cycle上发生变化,只有一个 ‘X’ 结果。没有同步器可以提供帮助。
相关文章:

【电路笔记 信号】Metastability 平均故障间隔时间(MTBF)公式推导:进入亚稳态+退出亚稳态+同步器的可靠性计算
这是一个简化的电路分析模型。图2中的典型触发器包括主锁存器、从锁存器和去耦反相器(这个结构类似 主从边沿触发器)。 在亚稳态中,主锁存器的节点A、B的电压电平大致在逻辑“1”(VDD)和“0”(GND)之间。确切的电压电平…...

计算机视觉:原理、分类与应用
计算机视觉是当今科技领域中一个至关重要的分支,它赋予了计算机通过视觉感知和理解世界的能力。简单来说,计算机视觉实现了对图像、视频等视觉数据的分析、处理、识别和理解。这是一个跨学科的研究领域,涉及计算机科学、信息工程、数学、物理…...

Vue.js组件开发-使用watch进行深度观察
在Vue.js中,watch选项允许观察和响应Vue实例上数据的变化。当需要对某个数据属性进行深度观察,即在其内部嵌套的对象或数组发生变化时也能触发回调时,可以使用deep选项。 示例: new Vue({el: #app,data: {user: {name: John,age…...

明厨亮灶系统
校园食堂明厨亮灶AI分析系统通过yolov5网络模型技术,校园食堂明厨亮灶监控分析系统针对校园餐厅后厨不按要求戴口罩、不穿厨师帽、陌生人员进入后厨、厨师不穿厨师服、上班时间玩手机、老鼠识别等行为校园食堂明厨亮灶监控分析系统自动识别抓拍告警。Yolo算法&#…...

虚幻引擎结构之AActor
在虚幻引擎中,AActor 是一个核心类,作为游戏世界内所有可交互对象的基础。任何可以在关卡中放置或动态生成的对象,几乎都是从 AActor 类派生而来。这包括但不限于角色、道具、特效、静态和动态物体等。 1. AActor 的基本概念 AActor 作为基类…...

基于JAVA+SpringBoot+Vue的制造装备物联及生产管理ERP系统
基于JAVASpringBootVue的制造装备物联及生产管理ERP系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接&am…...

JAVA HTTP压缩数据
/*** 压缩数据包** param code* param data* param resp* throws IOException*/protected void writeZipResult(int code, Object data, HttpServletResponse resp) throws IOException {resp.setHeader("Content-Encoding", "gzip");// write到客户端resp…...

VSCode 配置远程连接免密登录 插件
自我存档 远程连接免密登录 远程连接 在扩展界面搜remote ssh 安装完成后可以在侧边栏找到远程资源管理器 通过来添加或者点击打开ssh配置文件 点击的话以这种方式, 手动添加则按照相同格式输入即可 格式如下所示, Host后添加IP, User是登录ssh的用户, hostname是显示在…...

VIVO C++开发面试题及参考答案
面向过程与面向对象的区别,面向对象后的好处 面向过程编程主要关注的是程序的流程,它将一个问题分解为一系列的步骤,通过函数来实现这些步骤,数据和操作这些数据的函数是分离的。例如,在一个简单的计算学生成绩平均值的程序中,我们可能会有一些函数来输入成绩、计算总和、…...

Unity3D用正则判断身份证号或邮箱
系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、正则判断邮箱格式👉二、正则判断身份证号👉壁纸分享👉总结👉前言 C#正则表达式(Regex)是一种用来匹配字符串模式的强大工具。在C#中,可以使用System.Text.RegularExpressions命名空间下的Regex类来处…...

【终端工具】FinalShell v4.5.12 官方版
1.下载地址 【终端工具】FinalShell v4.5.12 官方版 2.简介 FinalShell是一款免费的跨平台远程管理工具,专为开发者和运维人员设计。它支持通过 SSH、SFTP 等方式连接到 Linux 和 Windows 服务器,提供类似于终端的操作界面。除了常规的远程登录功能&a…...

【阅读记录-章节6】Build a Large Language Model (From Scratch)
系列文章目录 【阅读记录-章节1】Build a Large Language Model (From Scratch) 【阅读记录-章节2】Build a Large Language Model (From Scratch) 【阅读记录-章节3】Build a Large Language Model (From Scratch) 【阅读记录-章节4】Build a Large Language Model (From Scr…...

面向未来的教育技术:智能成绩管理系统的开发
3.1 可行性研究 成绩管理系统开发实现分析需要从不同的角度来进行分析可行性,比如从时间角度,经济角度,甚至操作角度。从不同的角度分析可行性会让成绩管理系统开发具体化,进而达到辩证开发的正确性。 3.1.1 经济可行性 从经济方面…...

Mac系统下 IDEA配置Maven本地仓库
1.为什么需要配置本地仓库? 在软件开发过程中,使用Maven工具进行依赖管理是常见的做法。Maven通过集中管理各种依赖库,能够帮助开发者在项目中轻松地引入所需的第三方库,并确保项目能够顺利构建和部署。然而,在使用Mav…...

shell脚本定义特殊字符导致执行mysql文件错误的问题
记得有一次版本发布过程中有提供一个sh脚本用于一键执行sql文件,遇到一个shell脚本定义特殊字符的问题,sh脚本的内容类似以下内容: # 数据库ip地址 ip"127.0.0.1" # 数据库密码 cmdbcmdb!#$! smsm!#$!# 执行脚本文件(参…...

【C++ 基础】构造和析构
构造和析构 1.养成一个习惯,只要是变量,定义后要初始化 2.在C当中要完成对象的初始化工作,可以借助构造来完成,如果要完成对象的清理操作,借助析构来完成 3.在C里面对于对象的初始化有4种方式: 1、直接…...

C语言项目 天天酷跑(上篇)
前言 这里讲述这个天天酷跑是怎么实现的,我会在天天酷跑的下篇添加源代码,这里会讲述天天酷跑这个项目是如何实现的每一个思路,都是作者自己学习于别人的代码而创作的项目和思路,这个代码和网上有些许不一样,因为掺杂了…...

Python读取Excel批量写入到PPT生成词卡
一、问题的提出 有网友想把Excel表中的三列数据,分别是:单词、音标和释义分别写入到PPT当中,每一张PPT写一个单词的内容。这种批量操作是python的强项,尤其是在办公领域,它能较好地解放双手,读取Excel表后…...

NS3学习——tcpVegas算法代码详解(1)
目录 一、源码 二、详解 1.定义日志和命名空间 2.注册Typeld类:TcpVegas和GetTypeId方法的实现 3.构造函数和析构函数 4.TcpVegas类中成员函数 (1) Fork函数 (2) PktsAcked函数 (3) EnableVegas函数 (4) DisableVegas函数 一、源码 /* -*- Mode:C; c-file-style:&qu…...

相机雷达外参标定综述“Automatic targetless LiDAR–camera calibration: a survey“
相机雷达外参标定综述--Automatic targetless LiDAR–camera calibration: a survey 前言1 Introduction2 Background3 Automatic targetless LiDAR–camera calibration3.1 Information theory based method(信息论方法)3.1.1 Pairs of point cloud and image attributes(属性…...

【Java基础-27】Java中的访问修饰符:分类、作用及应用场景
在Java编程中,访问修饰符(Access Modifiers)是控制类、方法、变量和构造函数访问权限的关键工具。通过合理使用访问修饰符,可以有效地封装代码,保护数据,并确保代码的安全性和可维护性。本文将详细介绍Java…...

Redis+注解实现限流机制(IP、自定义等)
简介 在项目的使用过程中,限流的场景是很多的,尤其是要提供接口给外部使用的时候,但是自己去封装的话,相对比较耗时。 本方式可以使用默认(方法),ip、自定义参数进行限流,根据时间…...

SAP从入门到放弃系列之委外分包(Subcontracting)-Part1
以前写过一篇委外相关的文章,没有很详细的写。只是一个概念的概述ERP实施-委外业务-委外采购业务 最近看PA教材,遇到了这块内容,就再详细的整理一下SAP关于委外的理论知识。 文章目录 概述分包和物料需求计划 (MRP)委外分包订单分包委外业务…...

nlp新词发现——浅析 TF·IDF
传统nlp任务处理文本及其依赖已有的词表,只有在词表里出现的词才能被识别并加以处理。但这也带来了一些问题: 假设没有词表,如何从文本中发现新词? 随着时间推移,新词会不断出现,固有词表会过时࿰…...

WebGL2示例项目常见问题解决方案
WebGL2示例项目常见问题解决方案 webgl2examples Rendering algorithms implemented in raw WebGL 2. [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/we/webgl2examples 项目基础介绍 WebGL2示例项目(https://github.com/tsherif/webgl2examples.gi…...

鸿蒙元服务从0到上架【第三篇】(第二招有捷径)
第一招:开始发布元服务 AppGallery 上传通过IDE生成的图标,后面按照步骤填写 后台有隐私政策链接生成处,前往填写生成 第二招:用户协议 对于没有服务器或者是需要极速开发的开发者,可通过gitee生成用户协议&…...

Jimureport h2命令执行分析记录
首先找testConnection接口,前面进行了jimureport-spring-boot-starter-1.5.8.jar反编译查找,接口找到发现请求参数是json var1是JmreportDynamicDataSourceVo类型,也就是如上图的dbSource,根据打印的结果可以知道这里是local cac…...

vue 集成 webrtc-streamer 播放视频流 - 解决阿里云内外网访问视频流问题
资料: 史上最详细的webrtc-streamer访问摄像机视频流教程-CSDN博客 webrtc目录 前端集成 html文件夹里的webrtcstreamer.js,集成到前端,可以访问webrtc,转换rtsp为webrtc视频流,在前端video中播放 <videoref&quo…...

进网许可认证、交换路由设备检测项目更新25年1月起
实施时间 2025年1月1日起实施 涉及设备范围 核心路由器、边缘路由器、以太网交换机、三层交换机、宽带网络接入服务器(BNAS) 新增检测依据 GBT41266-2022网络关键设备安全检测方法交换机设备 GBT41267-2022网络关键设备安全技术要求交换机设备 GB/…...

Provides transitive vulnerable dependency maven 提示依赖存在漏洞问题的解决方法
问题描述 如下图所示,对于 java 项目某些依赖,IDEA 提示,引用了含有漏洞的依赖。如果是单个依赖,可以考虑直接升级版本即可。但是对于传递性依赖,比如 flink 项目中,依赖的部分模块,它们自己依…...