《静态时序分析实用方法》第五章翻译

第 5 章 延迟计算(Delay Calculation)

解释了如何为 pre-layout 和 post-layout后时序验证计算单元延迟和路径延迟。本章扩展了前面章节中描述的概念,介绍了整个设计的时序。

        本章概述了用于 pre-layout 和 post-layout时序验证的基于单元设计的延迟计算。前几章重点介绍了互连和单元库的建模。单元和互连建模技术用于获得设计时序。

5.1概述(Overview)

5.1.1延迟计算基础(Delay Calculation Basics)

        典型的设计包括各种组合单元和时序单元。我们使用图5-1所示的示例的逻辑片段来描述延迟计算的概念。 

 标准单元库通常不为单元输出指定引脚电容。

         每个单元的库描述指定每个输入引脚的引脚电容值。因此,设计中的每个网络都有一个电容负载,它是网络中每个扇形输出的引脚电容负载加上互连的任何贡献的总和。为了简单起见,本节不考虑互连的贡献,这些贡献将在后面的章节中描述。在不考虑互连寄生的情况下,图5-1中的内部网络NET0具有由UAND1和UNOR2单元的输入引脚电容组成的网络电容。输出O1具有UNOR2单元的引脚电容加上逻辑块输出的任何电容负载。输入I1和I2具有对应于UAND1和UINV0单元的引脚电容。通过这种抽象,图5-1中的逻辑设计可以用图5-2中所示的等效表示来描述。

        如第3章所述,单元库包含各种时序弧的NLDM定时模型。非线性模型表示为输入过渡时间和输出电容的二维表格。逻辑单元的输出跃迁时间也被描述为一个二维表,表示输入跃迁和网络总输出电容。因此,如果在逻辑块的输入端指定了输入转换时间(或转换slew),则可以从库单元描述中获得通过UINV0单元和UAND1单元(对于输入I1)的时序弧的输出转换时间和延迟。通过扇出单元扩展相同的方法,则可以获得通过UAND1单元的另一条时序弧(从NET0到O1)以及通过UNOR2单元的过渡时间和延迟。对于多输入单元(如UAND1),不同的输入引脚可以提供不同的输出过渡时间值。扇出网络过渡时间的选择取决于转换合并选项,如第5.4节所述。使用上述方法,可根据输入引脚的过渡时间和输出引脚的电容获得通过任何逻辑单元的延迟。

5.1.2互连延迟计算(Delay Calculation with Interconnect)

预布局时序(Pre-layout Timing)

        如第4章所述,在预布局时序验证期间,使用线性负载模型估算了互连寄生参数。在许多情况下,线性负载模型中的电阻贡献被设置为0。在这种情况下,线性负载贡献纯粹是电容性的,上一节中描述的延迟计算方法适用于获得设计中所有时序弧的延迟。 

        在线性性负载模型包括互连电阻影响的情况下,NLDM模型与单元延迟的总网络电容一起使用。由于互连是电阻式的,因此从驱动单元的输出到扇出单元的输入引脚会有额外的延迟。

布局后时序(Post-layout Timing)

        金属走线的寄生参数映射到驱动单元和目标单元之间的RC网络中。使用图5-1的示例,网络的互连电阻如图5-3所示。内部网络(如图5-1中的NET0)映射到多个子节点,如图5-3所示。因此,逆变单元UINV0的输出负载由RC结构组成。由于NLDM表格是关于输入转换和输出电容的,因此输出引脚处的电阻负载意味着NLDM表格不直接适用。下一节将介绍使用具有电阻互连的NLDM。

5.2使用有效电容的单元延迟(Cell Delay using Effective Capacitance)

         如上所述,当单元输出端的负载包括互连电阻时,NLDM模型不能直接使用。相反,采用“有效”电容法来处理电阻效应。

        有效电容法试图找到可用作等效负载的单个电容,以便原始设计以及具有等效电容负载的设计在单元输出的定时方面表现相似。这种等效单电容被称为有效电容(effective capacitance)

        图5-4(a)所示为扇出端带有RC互连的单元。RC互连由图5-4(b)所示的等效RC PI网络表示。有效电容的概念是获得等效输出电容Ceff(如图5-4(c)所示),其通过电池的延迟与RC负载的原始设计相同。一般来说,RC负载的电池输出波形与单个电容负载的波形非常不同。 

        图5-5显示了总电容、有效电容和实际RC互连的单元输出波形的代表性波形。选择有效电容Ceff时,应确保图5-4(c)中单元输出端的延迟(在过渡中点测量)与图5-4(a)中的延迟相同。如图5-5所示。 

        关于PI等效表示,有效电容可表示为:

        Ceff = C1 + k * C2, 0 <= k <= 1

        其中C1为近端电容,C2为远端电容,如图5-4(b)所示。k值介于0和1之间。在互连电阻可忽略不计的情况下,有效电容几乎等于总电容。这可以通过在图5-4(b)中将R设置为0来直接解释。类似地,如果互连电阻相对较大,则有效电容几乎等于近端电容C1(图5-4(b))。这可以通过将R增加到极限情况来解释,在极限情况下,R变为无穷大(本质上是一个开路)。

        有效电容是以下各项的函数:

  • 驱动单元
  • 从驱动单元看,负载的特性或负载的输入阻抗

        对于给定的互连线,输出驱动较弱的单元将比驱动较强的单元具有更大的有效电容。因此有效电容的值将介于最小值C1(对于较大的互连电阻或者较强的驱动单元)与最大值C1+C2(对于小到可忽略的互连电阻或较弱的驱动单元)之间。注意,目标引脚的转换要晚于驱动单元的输出。近端电容充电速度比远端电容快的现象也被称为互连线的电阻屏蔽效应(resistive shielding effect),因为驱动单元只能看到一部分远端电容。

       与通过在库中直接查找NLDM模型计算延迟不同,延迟计算工具通过迭代程序获得有效电容。在算法方面,第一步是获得实际RC负载的单元输出所看到的驱动点阻抗。使用二阶AWE或Arnoldi算法1等任何方法计算实际RC负载的驱动点阻抗。计算有效电容的下一步是在两种情况下,将转移的电荷等效到过渡的中点。当使用实际RC负载(基于驱动点阻抗)时,电池输出处转移的电荷与使用有效电容作为负载时的电荷传输量相匹配,请注意,电荷转移仅在过渡中点之前匹配。该过程从有效电容的估计开始,然后迭代更新估计值。在大多数实际情况下,有效电容值在少量迭代内收敛。

        因此,有效电容近似是计算单元延迟的良好模型。然而,使用有效电容获得的输出摆幅与电池输出的实际波形不一致。单元输出处的波形,尤其是波形后半部分的波形,不能用有效电容近似表示。请注意,在典型场景中,感兴趣的波形不在单元输出处,而是在互连的目标点处,即扇出单元的输入管脚处。

        有多种方法可以计算互连终点处的延迟和波形。在许多实现中,有效电容程序还计算驱动单元的等效戴维南电压源。戴维南源由一个斜坡源和一个串联电阻Rd组成,如图5-6所示。串联电阻Rd对应于电池输出级的下拉(或上拉)电阻。

         本节介绍了使用有效电容替代RC互连来计算通过驱动单元的延迟。有效电容的计算还提供了等效的戴维宁电压源模型,然后将其用于获取通过RC互连的时序。接下来将具体介绍获取通过RC互连时序信息的过程。

5.3互连延迟(Interconnect Delay)

        如第4章所述,网络的互连寄生通常由RC电路表示。RC互连可以是预布局或后布局。虽然布局后寄生互连可包括与相邻网络的耦合,但基本延迟计算将所有电容(包括耦合电容)视为对地电容。图5-7显示了网络及其驱动单元和扇出单元的寄生示例。 

         采用有效电容法,分别获得了通过驱动单元和通过互连的延迟。有效电容法通过驱动单元以及单元输出端的等效戴维南源提供延迟。然后使用戴维南源分别计算通过互连的延迟。互连部分具有一个输入和与目的地管脚一样多的输出。使用互连输入端的等效戴维南电压源,计算每个目标引脚的延迟。如图5-6所示。

         在布局前进行分析时,RC互连结构由RC树类型决定,而RC互连结构又决定了互连线延迟。4.2节中已详细介绍了三种类型的RC互连树表示形式,所选的RC树类型通常在库中定义。通常,最坏情况(worst-case)的慢速库会选择最坏情况的RC树,因为该类型的树提供了最大的互连线延迟。类似地,最佳情况(best-case)的RC树结构中不包括从源引脚到目标引脚的任何电阻,通常在最佳情况的快速工艺角时被选择。因此,最佳情况RC树的互连延迟等于零。典型(typical)情况RC树和最坏情况RC树的互连延迟的处理方式与布局后RC互连一样。 

 Elmore延迟

        Elmore延迟适用于RC树。什么是RC树?RC树满足以下三个条件:

  • 具有单个输入(源)节点。
  • 没有任何电阻回路。
  • 所有电容都位于节点和接地之间。 

        Elmore延迟可以看作是找到每段的延迟,即R与下游电容的乘积,然后取各延迟之和。 

        到各个中间节点的延迟表示为: 

Td1= C1* R1;
Td2= C1* R1+ C2* (R1+ R2);
. . .
Tdn= S(i=1,N) Ci(S(j=1,i) Rj); # Elmore delay equation

         Elmore延迟在数学上考虑的是脉冲响应的第一时刻。 现在,我们将Elmore延迟模型进行如下简化表示:互连线的寄生电阻与电容分别为Rwire和Cwire,互连线远端的引脚电容由负载电容Cload来建模。等效的RC网络可以简化为π模型或T模型,分别如前面章节四中图4-4和图4-3所示。两种模型都具有如下走线延迟(基于Elmore延迟方程):

         Rwire* (Cwire/ 2 + Cload)

         这是因为Cload在其充电路径中看到整个导线电阻,而Cwire电容在T表示中看到Rwire/2,在PI表示中Cwire/2在其充电路径中看到Rwire。上述方法也可以扩展到更复杂的互连结构。

        下面给出了使用带平衡RC树(以及最坏情况RC树)的线负载模型计算网络Elmore延迟的示例。 

        使用平衡RC树模型时,网络的电阻和电容在网络的各个分支之间平均分配(假设扇出为N)。对于具有引脚负载Cpin的分支,使用平衡RC树的延迟为:

net delay = (Rwire/ N) * (Cwire/ (2 * N) + Cpin)

        使用最坏情况RC树模型时,网络的每个分支终点都考虑了网络的电阻和整个电容。此时的延迟值如下所示,这里的Cpins是所有扇出的总引脚负载: 

Net delay = Rwire* (Cwire/ 2 + Cpins)

        图5-9显示了一个设计示例。 

        如果我们使用最坏情况RC树模型来计算网络N1的延迟,我们将得到: 

Net delay = Rwire* (Cwire/2 + Cpins)
          = 0.3 * (0.5 + 2.3) = 0.84

         如果我们使用平衡树模型,我们得到网络N1的两个分支的以下延迟:

Net delay to NOR2 input pin = (0.3/2) * (0.5/2 + 1.3)
                            = 0.2325

Net delay to BUF input pin= (0.3/2) * (0.5/2 + 1.0)
                            = 0.1875

高阶互连延迟估计(Higher Order Interconnect Delay Estimation)

         如上所述,Elmore延迟是脉冲响应的第一个时刻。AWE(Asymptotic Waveform Evaluation渐近波形评估)、Arnoldi或其他方法匹配高阶响应矩。通过考虑高阶估计,可以获得更高的互连延迟计算精度。

全芯片延迟计算(Full Chip Delay Calculation)

         到目前为止,本章描述了单元延迟的计算以及单元输出端的互连。因此,给定单元输入端的过渡时间,可以计算通过单元的延迟和单元输出端的互连线的延迟。互连远端(目的地或汇点)的过渡时间是下一级的输入,整个设计过程中都会重复此过程,这样就计算出了设计中每个时序弧的延迟。

5.4转换合并(Slew Merging)

        当多个转换(slew)到达一个公共点时会发生什么情况,例如在多输入单元或多驱动网络的情况下?这种公共点称为转换合并点(slew merge point)。选择哪个slew在slew merge point向前传播?考虑图5-10所示的2输入单元。

        由于引脚 A 上的信号变化,引脚 Z 处的转换提前到达但上升缓慢(缓慢s转换)。由于引脚 B 上的信号变化,引脚 Z 处的转换延迟到达,但上升很快(快速转换)。在转换合并点,例如 pin Z应该选择哪个slew进行进一步传播?  

        根据如下所述执行的时序分析的类型(最大或最小),这些转换值中的任何一个都可能是正确的。      

         执行最大路径分析时有两种可能性:

  • 最差转换传播(Worst slew propagation):此模式选择合并点的最差转换进行传播。这将是图5-10(A)中的slew。对于通过管脚A->Z的时序路径,此选择是精确的,但对于通过管脚B->Z的任何时序路径则是悲观的。
  • 最差到达传播(Worst arrival propagation):此模式选择合并点的最差到达时间进行传播。这与图5-10(b)中的摆动相对应。在这种情况下选择的摆幅对于通过管脚B->Z的时序路径是精确的,但是对于通过管脚A->Z的时序路径是乐观的。        

         同样,执行最小路径分析时有两种可能性:

  • 最佳转换传播(Best slew propagation):此模式选择要传播的合并点处的最佳转换。这将是图5-10(b)中的回转。对于通过管脚B->Z的定时路径,该选择是精确的,但是对于通过管脚A->Z的任何时序路径,该选择较小。对于通过A->Z的路径,路径延迟小于实际值,因此对于最小路径分析是悲观的。
  • 最佳到达传播(Best arrival propagation):此模式选择合并点的最佳到达时间进行传播。这与图5-10(A)中的转换slew相对应。这种情况下选择的slew对于通过管脚A->Z的时序路径是精确的,但是选择的值大于通过管脚B->Z的定时路径的实际值。对于通过B->Z的路径,路径延迟大于实际值,因此对于最小路径分析是乐观的。

        设计者可以在静态时序分析环境之外执行延迟计算以生成SDF。在这种情况下,延迟计算工具通常使用最差的转换传播(worst slew propagation)。所得到的SDF对于最大路径分析是足够的,但是对于最小路径分析可能是乐观的。 

        大多数静态时序分析工具使用最差和最好的转换传播作为它们的默认设置,因为它以保守的方式限制了分析。但是,在分析特定路径时,可以使用精确的转换传播。准确的转换传播可能需要在时序分析工具中启用一个选项。因此,重要的是要了解静态时序分析工具中默认使用的转换传播模式,并了解其可能过于悲观的情况。

5.5不同的转换阈值(Different Slew Thresholds)

        通常,库指定单元角色化过程中使用的转换(转换时间)【slew (transition time)】阈值。问题是,当具有一组转换阈值的单元驱动具有不同组转换阈值设置的其他单元时,会发生什么情况?考虑图5-11所示的情况,其中特征为20-80转换阈值的单元驱动两个扇出单元;一个转换阈值为10-90,另一个转换阈值为30-70,转换降低率为0.5。

        单元格U1的转换设置在单元库中定义如下:

slew_lower_threshold_pct_rise : 20.00
slew_upper_threshold_pct_rise : 80.00

slew_derate_from_library : 1.00
input_threshold_pct_fall : 50.00
output_threshold_pct_fall : 50.00
input_threshold_pct_rise : 50.00
output_threshold_pct_rise : 50.00
slew_lower_threshold_pct_fall : 20.00
slew_upper_threshold_pct_fall : 80.00

        来自另一个库的单元格U2可以具有如下定义的转换设置: 

slew_lower_threshold_pct_rise : 10.00
slew_upper_threshold_pct_rise : 90.00

slew_derate_from_library : 1.00
slew_lower_threshold_pct_fall : 10.00
slew_upper_threshold_pct_fall : 90.00

         来自另一个库的单元格U3可以具有如下定义的转换设置:

slew_lower_threshold_pct_rise : 30.00
slew_upper_threshold_pct_rise : 70.00

slew_derate_from_library : 0.5
slew_lower_threshold_pct_fall : 30.00
slew_upper_threshold_pct_fall : 70.00

        上面只显示了U2和U3的转换相关设置;输入和输出阈值的延迟相关设置为50%,上面没有显示。延迟计算工具根据连接网络的单元的转换阈值计算转换时间。图5-11显示了U1/Z处的转换如何与该引脚上的开关波形相对应。利用U1/Z的等效戴维南源获得扇出单元输入端的开关波形。根据U2/A和U3/A的波形及其转换阈值,延迟计算工具计算U2/A和U3/A的转换。请注意,U2/A的转换基于10-90设置,而用于U3/A的转换基于30-70设置,然后根据库中指定的slew_derate 0.5递减。此示例说明如何根据扇出单元的切换波形和转换阈值设置计算扇出单元输入端的转换时间。 

         在可能不考虑互连电阻的预布局(pre-layout)设计阶段时,可以按以下方式计算具有不同阈值的网络处的转换时间。例如,10%-90%转换阈值和20%-80%转换阈值之间的关系为:

slew2080 / (0.8 - 0.2) = slew1090 /(0.9 - 0.1)

        因此,具有 10-90 个测量点的 500ps 转换对应于具有 20-80 个测量点的 (500ps * 0.6) / 0.8 = 375ps 转换。类似地,具有 20-80 个测量点的 600ps 转换对应于具有 10-90 个测量点的 (600ps * 0.8) / 0.6 = 800ps 转换。  

5.6个同的电压域(Different Voltage Domains)

        典型的设计可能对芯片的不同部分使用不同的电源电平。在这种情况下,电平转换单元用于不同电源域之间的接口。电平转换单元在一个电源域接受输入并在另一个电源域提供输出。例如,标准单元输入可以是 1.2V,其输出可以是降低的电源,可能是 0.9V。图 5-12 显示了一个示例

        请注意,延迟是根据 50% 阈值点计算的。对于接口单元的不同引脚,这些点处于不同的电压。 

5.7路径延迟计算(Path Delay Calculation)

        一旦每个时序弧的所有延迟都可用,设计中单元的时序就可以表示为时序图。通过组合单元的时序可以表示为从输入到输出的时序弧。类似地,互连由从源到每个目的地(或汇)点的相应弧表示为单独的时序弧。一旦整个设计由相应的弧线注释,计算路径延迟涉及将沿路径的所有网络和单元时序弧线相加。

5.7.1组合路径延迟(Combinational Path Delay)

        考虑串联的三个逆变器,如图 5-13 所示。在考虑从网络 N0 到网络 N3 的路径时,我们同时考虑上升沿和下降沿路径。假设在网络 N0 处有一个上升沿。

        可以指定第一个逆变器输入端的 transition time (or slew);如果没有这样的规范,则假定过渡时间为 0(对应于理想步长)。输入 UINVa/A 的转换时间是通过使用上一节中指定的互连延迟模型来确定的。相同的延迟模型也用于确定网络 N0 的延迟 Tn0。 

         基于在UINVa的输出处的负载的RC获得在输出UINVa / Z的有效电容。然后在输入UINVa / A,并在输出UINVa / Z等效有效负荷的转换时间是用于获得单元输出下降延迟。

         引脚 UINVa/Z 处的等效戴维南源模型用于通过使用互连模型确定引脚 UINVb/A 处的转换时间。互连模型还用于确定网络 N1 上的延迟 Tn1。

        一旦知道输入 UINVb/A 处的转换时间,就可以类似地使用通过 UINVb 计算延迟的过程。 UINVb/Z 处的 RC 互连和 UINVc/A 引脚的引脚电容用于确定 N2 处的有效负载。 UINVb/A 的转换时间用于确定通过反相器 UINVb 的上升延迟,依此类推。

        最后阶段的负载由提供的任何明确的负载规范确定,或者在没有规范的情况下仅使用网络 N3 的线负载。

        上述分析假设在网络 N0 处有一个上升沿。对于网络 N0 上的下降沿的情况,可以进行类似的分析。因此,在这个简单的示例中,有两条时序路径具有以下延迟:

Tfall= Tn0rise+ Tafall+ Tn1fall+ Tbrise+ Tn2rise+ Tcfall+ Tn3fall
Trise= Tn0fall+ Tarise+ Tn1rise+ Tbfall+ Tn2fall+ Tcrise+ Tn3rise

         通常,由于驱动单元输出端的戴维南源模型不同,通过互连的上升和下降延迟可能不同。

5.7.2触发器的路径(Path to a Flip-flop)

输入到触发器路径(Input to Flip-flop Path)

        考虑如图5-14从输入SDT到触发器UFF1的路径的时序。

        我们需要同时考虑上升沿和下降沿路径。对于输入 SDT 上升沿的情况,数据路径延迟为: 

        Tn1rise+ Tafall+ Tn2fall+ Tbuf1fall+ Tn3fall+ Tbrise+ Tn4rise

         同样,对于输入 SDT 的下降沿,数据路径延迟为: 

        Tn1fall+ Tarise+ Tn2rise+ Tbuf1rise+ Tn3rise+ Tbfall+ Tn4fall

        输入 MCLK 上升沿的捕获时钟路径延迟为:  

        Tn5rise+ Tbuf2rise+ Tn6rise 

触发器到触发器路径(Flip-flop to Flip-flop Path)

        图 5-15 显示了两个触发器和相应时钟路径之间的数据路径示例。 

        UFF0/Q 上升沿的数据路径延迟为: 

        Tck2qrise+ Tn1rise+ Tafall+ Tn2fall+ Tbfall+ Tn3fall

         输入 PCLK 上升沿的启动时钟路径延迟为:

         Tn4rise+ T5rise+ Tn5arise

         输入 PCLK 上升沿的捕获时钟路径延迟为:

        Tn4rise+ T5rise+ Tn5brise+ T6rise+ Tn6rise 

        请注意,需要考虑单元的完整性,因为边缘方向在通过单元时可能会发生变化。 

5.7.3多路径(Multiple Paths)

        在任意两点之间,可以有许多路径。最长的路径是花费时间最长的路径;这也称为最坏路径、延迟路径或最大路径。最短的路径是需要最短时间的路径;这也称为最佳路径、早期路径或最小路径。

        通过图 5-16 中的时序弧查看逻辑和延迟。两个触发器之间最长的路径是通过单元 UBUF1、UNOR2 和 UNAND3。两个触发器之间的最短路径是通过单元 UNAND3。

5.8裕量计算(Slack Calculation)

         裕量(Slack)是信号需要到达时间(Required Time)与实际到达时间(Arrival Time)之差。在图5-17中,要求数据在7ns时保持稳定才能满足建立时间(setup)要求。但是,数据在1ns时就已稳定。因此,裕量为6ns(= 7ns-1ns)。

        假设所需的数据时间是从捕获触发器的设置时间获得的, 

Slack = Required_time - Arrival_time
Required_time = Tperiod - Tsetup(capture_flip_flop)
= 10 - 3 = 7ns
Arrival_time = 1ns
Slack = 7 - 1 = 6ns

需要到达时间Required_Time = Tperiod - Tsetup = 10 - 3 = 7ns

实际到达时间Arrival_Time = 1ns

裕量Slack = Required_Time - Arrival_Time = 7 - 1 = 6ns

         同样,如果两个信号之间的偏斜(skew)要求为100ps,并且测得的偏斜为60ps,则偏斜的裕量为40ps(= 100ps-60ps)。 

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA中的静态时序分析和动态时序分析是两种不同的时序分析方法,用于评估设计的时序性能和稳定性。 静态时序分析是一种在设计编译阶段进行的分析方法。它基于设计元数据和时序约束,通过计算信号路径的传播延迟和时序约束之间的差异来评估设计的时序性能。静态时序分析可以提前检测到潜在的时序问题,如setup和hold错误,并提供相关的报告和警告信息。它通常用于优化设计,通过调整布局布线、逻辑重划等方式来改善时序性能。 动态时序分析是一种在设计完成后、在实际运行或仿真过程中进行的分析方法。它通过模拟或测试电路的实际运行情况,考虑信号传播延迟、时钟抖动、噪声等因素,评估设计在实际环境中的时序性能。动态时序分析可以更准确地模拟设计的实际行为,并检测到一些静态时序分析无法捕捉到的问题。 区别总结如下: 1. 时间点:静态时序分析在设计编译阶段进行,动态时序分析在设计完成后进行。 2. 分析对象:静态时序分析基于设计元数据和时序约束,动态时序分析基于实际运行或仿真过程中的电路行为。 3. 检测能力:静态时序分析可以提前检测到潜在的时序问题,如setup和hold错误,动态时序分析可以检测到静态分析无法捕捉到的问题。 4. 优化方法静态时序分析通过调整布局布线、逻辑重划等方式来改善时序性能,动态时序分析可以帮助验证设计在实际环境中的可靠性和稳定性。 综上所述,静态时序分析和动态时序分析是两种不同的时序分析方法,用于评估设计的时序性能和稳定性,各有其优缺点和应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值