附录B:Standard Delay Format(SDF)(下)

news2024/11/24 17:52:41

文章目录

    • B.4 映射实例(Mapping Examples)
      • 传播延迟(Propagation Delay)
      • 输入建立时间(Input Setup Time)
      • 输入保持时间(Input Hold Time)
      • 输入建立和保持时间(Input Setup and Hold Time)
      • 输入恢复时间(Input Recovery Time)
      • 输入撤销时间(Input Removal Time)
      • 周期(Period)
      • 脉宽(Pulse Width)
      • 输入偏斜时间(Input Skew Time)
      • 无变化的建立时间(No-change Setup Time)
      • 无变化的保持时间(No-change Hold Time)
      • 端口延迟(Port Delay)
      • 网络延迟(Net Delay)
      • 互连路径延迟(Interconnect Path Delay)
      • 器件延迟(Device Delay)
    • B.5 完整语法(Complete Syntax)
    • 知乎翻译圣经



B.4 映射实例(Mapping Examples)

以下是将 S D F SDF SDF结构映射到 V H D L VHDL VHDL泛型(generic)和 V e r i l o g   H D L Verilog\ HDL Verilog HDL声明(declaration)的示例。

传播延迟(Propagation Delay)

  • 从输入端口 A A A到输出端口 Y Y Y的传播延迟:上升时间为 0.406 0.406 0.406,下降时间为 0.339 0.339 0.339
// SDF:
(IOPATH A Y (0.406) (0.339))

-- VHDL generic:
tpd_A_Y : VitalDelayType01;

// Verilog HDL specify path:
(A *> Y) = (tplh$A$Y, tphl$A$Y);
  • 从输入端口 O E OE OE到输出端口 Y Y Y的传播延迟:上升时间为 0.441 0.441 0.441,下降时间为 0.409 0.409 0.409。最小、标准和最大延迟是相同的:
// SDF:
(IOPATH OE Y (0.441:0.441:0.441) (0.409:0.409:0.409))

-- VHDL generic:
tpd_OE_Y : VitalDelayType01Z;

// Verilog HDL specify path:
(OE *> Y) = (tplh$OE$Y, tphl$OE$Y);
  • 从输入端口 S 0 S0 S0到输出端口 Y Y Y的条件传播延迟:
// SDF:
(COND A==0 && B==1 && S1==0
	(IOPATH S0 Y (0.062:0.062:0.062) (0.048:0.048:0.048)
	)
)

-- VHDL generic:
tpd_S0_Y_A_EQ_0_AN_B_EQ_1_AN_S1_EQ_0 :
	VitalDelayType01;
	
// Verilog HDL specify path:
if ((A == 1'b0) && (B == 1'b1) && (S1 == 1'b0))
	(S0 *> Y) = (tplh$S0$Y, tphl$S0$Y);
  • 从输入端口 A A A到输出端口 Y Y Y的条件传播延迟:
// SDF:
(COND B == 0
	(IOPATH A Y (0.130) (0.098)
	)
)

-- VHDL generic:
tpd_A_Y_B_EQ_0 : VitalDelayType01;

// Verilog HDL specify path:
if (B == 1'b0)
	(A *> Y) = 0;
  • 从输入端口 C K CK CK到输出端口 Q Q Q的传播延迟:
// SDF:
(IOPATH CK Q (0.100:0.100:0.100) (0.118:0.118:0.118))

-- VHDL generic:
tpd_CK_Q : VitalDelayType01;

// Verilog HDL specify path:
(CK *> Q) = (tplh$CK$Q, tphl$CK$Q);
  • 从输入端口 A A A到输出端口 Y Y Y的条件传播延迟:
// SDF:
(COND B == 1
	(IOPATH A Y (0.062:0.062:0.062) (0.048:0.048:0.048)
	)
)
-- VHDL generic:
tpd_A_Y_B_EQ_1 : VitalDelayType01;

// Verilog HDL specify path:
if (B == 1'b1)
	(A *> Y) = (tplh$A$Y, tphl$A$Y);
  • 从输入端口 C K CK CK到输出端口 E C K ECK ECK的传播延迟:
// SDF:
(IOPATH CK ECK (0.097:0.097:0.097))

-- VHDL generic:
tpd_CK_ECK : VitalDelayType01;

// Verilog HDL specify path:
(CK *> ECK) = (tplh$CK$ECK, tphl$CK$ECK);
  • 从输入端口 C I CI CI到输出端口 S S S的条件传播延迟:
// SDF:
(COND (A == 0 && B == 0) || (A == 1 && B == 1)
	(IOPATH CI S (0.511) (0.389)
	)
)

-- VHDL generic:
tpd_CI_S_OP_A_EQ_0_AN_B_EQ_0_CP_OR_OP_A_EQ_1_AN_B_EQ_1_CP:
	VitalDelayType01;

// Verilog HDL specify path:
if ((A == 1'b0 && B == 1'b0) || (A == 1'b1 && B == 1'b1))
	(CI *> S) = (tplh$CI$S, tphl$CI$S);
  • 从输入端口 C S CS CS到输出端口 S S S的条件传播延迟:
// SDF:
(COND (A == 1 ^ B == 1 ^ CI1 == 1) &&
		!(A == 1 ^ B == 1 ^ CI0 == 1)
	(IOPATH CS S (0.110) (0.120) (0.120)
	(0.110) (0.119) (0.120)
	)
)

-- VHDL generic:
tpd_CS_S_OP_A_EQ_1_XOB_B_EQ_1_XOB_CI1_EQ_1_CP_AN_NT_
OP_A_EQ_1_XOB_B_EQ_1_XOB_CI0_EQ_1_CP:
	VitalDelayType01;
	
// Verilog HDL specify path:
if ((A == 1'b1 ^ B == 1'b1 ^ CI1N == 1'b0) &&
		!(A == 1'b1 ^ B == 1'b1 ^ CI0N == 1'b0))
	(CS *> S) = (tplh$CS$S, tphl$CS$S);
  • 从输入端口 A A A到输出端口 I C O ICO ICO的条件传播延迟:
// SDF:
(COND B == 1 (IOPATH A ICO (0.690)))

-- VHDL generic:
tpd_A_ICO_B_EQ_1 : VitalDelayType01;

// Verilog HDL specify path:
if (B == 1'b1)
	(A *> ICO) = (tplh$A$ICO, tphl$A$ICO);
  • 从输入端口 A A A到输出端口 C O CO CO的条件传播延迟:
// SDF:
(COND (B == 1 ^ C == 1) && (D == 1 ^ ICI == 1)
	(IOPATH A CO (0.263)
	)
)

-- VHDL generic:
tpd_A_CO_OP_B_EQ_1_XOB_C_EQ_1_CP_AN_OP_D_EQ_1_XOB_ICI_E
Q_1_CP: VitalDelayType01;

// Verilog HDL specify path:
if ((B == 1'b1 ^ C == 1'b1) && (D == 1'b1 ^ ICI == 1'b1))
	(A *> CO) = (tplh$A$CO, tphl$A$CO);
  • C K CK CK的上升沿到 Q Q Q的延迟:
// SDF:
(IOPATH (posedge CK) Q (0.410:0.410:0.410)
(0.290:0.290:0.290))

-- VHDL generic:
tpd_CK_Q_posedge_noedge : VitalDelayType01;

// Verilog HDL specify path:
(posedge CK *> Q) = (tplh$CK$Q, tphl$CK$Q);

输入建立时间(Input Setup Time)

  • D D D的上升沿与 C K CK CK的上升沿之间的建立时间:
// SDF:
(SETUP (posedge D) (posedge CK) (0.157:0.157:0.157))

-- VHDL generic:
tsetup_D_CK_posedge_posedge: VitalDelayType;

// Verilog HDL timing check task:
$setup(posedge CK, posedge D, tsetup$D$CK, notifier);
  • D D D的下降沿与 C K CK CK的上升沿之间的建立时间:
// SDF:
(SETUP (negedge D) (posedge CK) (0.240))

-- VHDL generic:
tsetup_D_CK_negedge_posedge: VitalDelayType;

// Verilog HDL timing check task:
$setup(posedge CK, negedge D, tsetup$D$CK, notifier);
  • 输入端口 E E E的上升沿与参考 C K CK CK的上升沿之间的建立时间:
// SDF:
(SETUP (posedge E) (posedge CK) (-0.043:-0.043:-0.043))

-- VHDL generic:
tsetup_E_CK_posedge_posedge : VitalDelayType;

// Verilog HDL timing check task:
$setup(posedge CK, posedge E, tsetup$E$CK, notifier);
  • 输入端口 E E E的下降沿和参考 C K CK CK的上升沿之间的建立时间:
// SDF:
(SETUP (negedge E) (posedge CK) (0.101) (0.098))

-- VHDL generic:
tsetup_E_CK_negedge_posedge : VitalDelayType;

// Verilog HDL timing check task:
$setup(posedge CK, negedge E, tsetup$E$CK, notifier);
  • S E SE SE C K CK CK之间的条件建立时间:
// SDF:
(SETUP (cond E != 1 SE) (posedge CK) (0.155) (0.135))

-- VHDL generic:
tsetup_SE_CK_E_NE_1_noedge_posedge : VitalDelayType;

// Verilog HDL timing check task:
$setup(posedge CK &&& (E != 1'b1), SE, tsetup$SE$CK,
	notifier);

输入保持时间(Input Hold Time)

  • D D D的上升沿与 C K CK CK的上升沿之间的保持时间:
// SDF:
(HOLD (posedge D) (posedge CK) (-0.166:-0.166:-0.166))

-- VHDL generic:
thold_D_CK_posedge_posedge: VitalDelayType;

// Verilog HDL timing check task:
$hold (posedge CK, posedge D, thold$D$CK, notifier);
  • R N RN RN S N SN SN之间的保持时间:
// SDF:
(HOLD (posedge RN) (posedge SN) (-0.261:-0.261:-0.261))

-- VHDL generic:
thold_RN_SN_posedge_posedge: VitalDelayType;

// Verilog HDL timing check task:
$hold (posedge SN, posedge RN, thold$RN$SN, notifier);
  • 输入端口 S I SI SI与参考端口 C K CK CK之间的保持时间:
// SDF:
(HOLD (negedge SI) (posedge CK) (-0.110:-0.110:-0.110))

-- VHDL generic:
thold_SI_CK_negedge_posedge: VitalDelayType;

// Verilog HDL timing check task:
$hold (posedge CK, negedge SI, thold$SI$CK, notifier);
  • E E E C K CK CK上升沿之间的条件保持时间:
// SDF:
(HOLD (COND SE ^ RN == 0 E) (posedge CK))

-- VHDL generic:
thold_E_CK_SE_XOB_RN_EQ_0_noedge_posedge:
	VitalDelayType;

// Verilog HDL timing check task:
$hold (posedge CK &&& (SE ^ RN == 0), posedge E,
thold$E$CK, NOTIFIER);

输入建立和保持时间(Input Setup and Hold Time)

  • D D D C L K CLK CLK之间的建立时间与保持时间检查。这是一个有条件的检查,第一个延迟值是建立时间,第二个延迟值是保持时间:
// SDF:
(SETUPHOLD (COND SE ^ RN == 0 D) (posedge CLK)
	(0.69) (0.32))
	
-- VHDL generic (split up into separate setup and hold):
tsetup_D_CK_SE_XOB_RN_EQ_0_noedge_posedge:
	VitalDelayType;
thold_D_CK_SE_XOB_RN_EQ_0_noedge_posedge:
	VitalDelayType;
	
-- Verilog HDL timing check (it can either be split up or
-- kept as one construct depending on what appears in the
-- Verilog HDL model):
$setuphold(posedge CK &&& (SE ^ RN == 1'b0)), posedge D,
		tsetup$D$CK, thold$D$CK, notifier);
-- Or as:

输入恢复时间(Input Recovery Time)

  • C L K A CLKA CLKA C L K B CLKB CLKB之间的恢复时间:
// SDF:
(RECOVERY (posedge CLKA) (posedge CLKB)
	(1.119:1.119:1.119))
	
-- VHDL generic:
trecovery_CLKA_CLKB_posedge_posedge: VitalDelayType;

// Verilog timing check task:
$recovery (posedge CLKB, posedge CLKA,
		trecovery$CLKB$CLKA, notifier);
  • C L K A CLKA CLKA上升沿与 C L K B CLKB CLKB上升沿之间的条件恢复时间:
// SDF:
(RECOVERY (posedge CLKB)
	(COND ENCLKBCLKArec (posedge CLKA)) (0.55:0.55:0.55)
)

-- VHDL generic:
trecovery_CLKB_CLKA_ENCLKBCLKArec_EQ_1_posedge_
posedge: VitalDelayType;

// Verilog timing check task:
$recovery (posedge CLKA && ENCLKBCLKArec, posedge CLKB,
		trecovery$CLKA$CLKB, notifier);
  • S E SE SE C K CK CK之间的恢复时间:
// SDF:
(RECOVERY SE (posedge CK) (1.901))

-- VHDL generic:
trecovery_SE_CK_noedge_posedge: VitalDelayType;

// Verilog timing check task:
$recovery (posedge CK, SE, trecovery$SE$CK, notifier);
  • R N RN RN C K CK CK之间的恢复时间:
// SDF:
(RECOVERY (COND D == 0 (posedge RN)) (posedge CK) (0.8))

-- VHDL generic:
trecovery_RN_CK_D_EQ_0_posedge_posedge:
	VitalDelayType;
	
// Verilog timing check task:
$recovery (posedge CK && (D == 0), posedge RN,
		trecovery$RN$CK, notifier);

输入撤销时间(Input Removal Time)

  • E E E的上升沿与 C K CK CK的下降沿之间的撤销时间:
// SDF:
(REMOVAL (posedge E) (negedge CK) (0.4:0.4:0.4))

-- VHDL generic:
tremoval_E_CK_posedge_negedge: VitalDelayType;

// Verilog timing check task:
$removal (negedge CK, posedge E, tremoval$E$CK,
		notifier)
  • C K CK CK的上升沿和 S N SN SN之间的条件撤销时间:
// SDF:
(REMOVAL (COND D != 1'b1 SN) (posedge CK) (1.512))

-- VHDL generic:
tremoval_SN_CK_D_NE_1_noedge_posedge : VitalDelayType;

// Verilog timing check task:
$removal (posedge CK &&& (D != 1'b1), SN,
		tremoval$SN$CK, notifier);

周期(Period)

  • 输入 C L K B CLKB CLKB的周期:
// SDF:
(PERIOD CLKB (0.803:0.803:0.803))

-- VHDL generic:
tperiod_CLKB: VitalDelayType;

// Verilog timing check task:
$period (CLKB, tperiod$CLKB);
  • 输入端口 E N EN EN的周期:
// SDF:
(PERIOD EN (1.002:1.002:1.002))

-- VHDL generic:
tperiod_EN : VitalDelayType;

// Verilog timing check task:
$period (EN, tperiod$EN);
  • 输入端口 T C K TCK TCK的周期:
// SDF:
(PERIOD (posedge TCK) (0.220))

-- VHDL generic:
tperiod_TCK_posedge: VitalDelayType;

// Verilog timing check task:
$period (posedge TCK, tperiod$TCK);

脉宽(Pulse Width)

  • C K CK CK上高脉冲的脉冲宽度:
// SDF:
(WIDTH (posedge CK) (0.103:0.103:0.103))

-- VHDL generic:
tpw_CK_posedge: VitalDelayType;

// Verilog timing check task:
$width (posedge CK, tminpwh$CK, 0, notifier);
  • C K CK CK上低脉冲的脉冲宽度:
// SDF:
(WIDTH (negedge CK) (0.113:0.113:0.113)

-- VHDL generic:
tpw_CK_negedge: VitalDelayType;

// Verilog timing check task:
$width (negedge CK, tminpwl$CK, 0, notifier);
  • R N RN RN上高脉冲的脉冲宽度:
// SDF:
(WIDTH (posedge RN) (0.122))

-- VHDL generic:
tpw_RN_posedge: VitalDelayType;

// Verilog timing check task:
$width (posedge RN, tminpwh$RN, 0, notifier);

输入偏斜时间(Input Skew Time)

  • C K CK CK T C K TCK TCK之间的偏斜:
// SDF:
(SKEW (negedge CK) (posedge TCK) (0.121))

-- VHDL generic:
tskew_CK_TCK_negedge_posedge: VitalDelayType;

// Verilog timing check task:
$skew (posedge TCK, negedge CK, tskew$TCK$CK, notifier);
  • S E SE SE C K CK CK下降沿之间的偏斜:
// SDF:
(SKEW SE (negedge CK) (0.386:0.386:0.386))

-- VHDL generic:
tskew_SE_CK_noedge_negedge: VitalDelayType;

// Verilog HDL timing check task:
$skew (negedge CK, SE, tskew$SE$CK, notifier);

无变化的建立时间(No-change Setup Time)

S D F SDF SDF文件中的NOCHANGE结构将同时映射到 V H D L VHDL VHDL中的tncsetuptnchold泛型。

  • D D D C K CK CK下降沿之间无变化的建立时间:
// SDF:
(NOCHANGE D (negedge CK) (0.343:0.343:0.343))

-- VHDL generic:
tncsetup_D_CK_noedge_negedge: VitalDelayType;
tnchold_D_CK_noedge_negedge: VitalDelayType;

// Verilog HDL timing check task:
$nochange (negedge CK, D, tnochange$D$CK, notifier);

无变化的保持时间(No-change Hold Time)

S D F SDF SDF文件中的NOCHANGE结构将同时映射到 V H D L VHDL VHDL中的tncsetuptnchold泛型。

  • E E E C L K A CLKA CLKA之间无变化的条件保持时间:
// SDF:
(NOCHANGE (COND RST == 1'b1 (posedge E)) (posedge CLKA)
(0.312))

-- VHDL generic:
tnchold_E_CLKA_RST_EQ_1_posedge_posedge:
	VitalDelayType;
tncsetup_E_CLKA_RST_EQ_1_posedge_posedge:
	VitalDelayType;

// Verilog HDL timing check task:
$nochange (posedge CLKA &&& (RST == 1'b1), posedge E,
		tnochange$E$CLKA, notifier);

端口延迟(Port Delay)

  • 端口 O E OE OE的延迟:
// SDF:
(PORT OE (0.266))

-- VHDL generic:
tipd_OE: VitalDelayType01;

// Verilog HDL:
No explicit Verilog declaration.
  • 端口 R N RN RN的延迟:
// SDF:
(PORT RN (0.201:0.205:0.209))

-- VHDL generic:
tipd_RN : VitalDelayType01;

// Verilog HDL:
No explicit Verilog declaration.

网络延迟(Net Delay)

  • 连接到端口 C K A CKA CKA的网络延迟:
// SDF:
(NETDELAY CKA (0.134))

-- VHDL generic:
tipd_CKA: VitalDelayType01;

// Verilog HDL:
No explicit Verilog declaration.

互连路径延迟(Interconnect Path Delay)

  • 从端口 Y Y Y到端口 D D D的互连路径延迟:
// SDF:
(INTERCONNECT bcm/credit_manager/U304/Y
	bcm/credit_manager/frame_in/PORT0_DOUT_Q_reg_26_/D
	(0.002:0.002:0.002) (0.002:0.002:0.002))

-- VHDL generic of instance
-- bcm/credit_manager/frame_in/PORT0_DOUT_Q_reg_26_:
tipd_D: VitalDelayType01;
-- The “from” port does not contribute to the timing
-- generic name.

// Verilog HDL:
No explicit Verilog declaration

器件延迟(Device Delay)

  • 实例 u P uP uP的输出 S M SM SM的器件延迟:
// SDF:
(INSTANCE uP) . . . (DEVICE SM . . .

-- VHDL generic:
tdevice_uP_SM

// Verilog specify paths:
// All specify paths to output SM.


B.5 完整语法(Complete Syntax)

以下是使用 B N F BNF BNF格式显示的 S D F SDF SDF的完整语法。终端(terminal)名称是大写的,关键字是粗体的,但是不区分大小写。起始的终端是delay_file

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述



知乎翻译圣经

静态时序分析圣经翻译计划——附录B:SDF (下)

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

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

相关文章

C#自动化物流仓库WMS系统源码

分享一套C#自动化仓库WMS管理系统源码 MF00426 需要源码学习可私信我获取。 WMS作为现代物流系统中的主要组成部分,是一种多层次存放货物的高架仓库系统,由自动控制与管理系统、货架、巷道式堆垛机、出入库输送机等设 备构成,能按指令自动完…

PHP多进程(二)

上篇文章我们说到父进程应该回收子进程结束之后产生的数据,这样才会不浪费系统资源。 一个程序启动之后,变成了一个进程,进程在以下情况会退出 1)运行到最后一行语句 2) 运行时遇到return 时 3) 运行时遇到exit()函数的时候 4) 程序异常的时…

【Dash搭建可视化网站】项目13:销售数据可视化大屏制作步骤详解

销售数据可视化大屏制作步骤详解1 项目效果图2 项目架构3 文件介绍和功能完善3.1 assets文件夹介绍3.2 app.py和index.py文件完善3.3 header.py文件完善3.4 api.py文件和api.ipynb文件完善3.4.1 需求数据获取3.4.2 header.py文件中数据变更3.5 middle.py文件完善3.5.1 中间第一…

24.数组名字取地址变成数组指针,数组名和指针变量的区别

数组名字取地址变成数组指针 1.一维数组名字取地址,变成一维数组指针,加1跳一个一维数组。 int a[10]; a1 跳一个整型元素,是a[1]的地址 a和a1相差一个元素,4个字节 &a 就变成了一个一位数组指针,是int(*p)[10]…

结构体重点知识大盘点

0、结构体基础知识 1、结构体是一些值的集合,这些值被称为成员,它们的类型是可以不同的。(与数组相似,但数组元素的类型都是相同的)。用来描述由基本数据类型组成的复杂类型。 2、结构体也有全局的和局部的。 3、st…

Hello World with VS 17.4.4 DOT NET MAUI Note

Hello World with VS 17.4.4 DOT NET MAUI Note kagula2023-1-12 Prologue If you touched XAML, well here is a concise guide for you running the first MAUI project. Content System Requirement 【1】Microsoft Windows [Version 10.0.19044.2486] Chinese Language …

Ubuntu Centos Linux End Kernel panic-not syncing:Attempted to kill init!

原问题: 当前系统为 Ubuntu 解决问题步骤: 1、重启电脑,在进入选择版本时,选择 系统高级选项, 我选的是【Ubuntu高级选项】 2、进入一个又很多系统版本的界面,每个版本有三个选项:常规启动版…

如何在 ASP.NET Core 2.X 项目中通过EF Core使用MySQL数据库

目录 一、安装MySql.Data.EntityFrameworkCore 二、创建EF Core上下文类以及相关数据模型类 三、配置连接字符串 四、在Starup.cs中注册数据库服务(配置Context类的依赖注入) 五、通过数据迁移命令生成数据库 目前EF Core已经支持了MySQL数据库了。…

从零开始带你实现一套自己的CI/CD(四)Jenkins Pipeline流水线

目录一、简介二、Groovy2.1 HelloWorld2.2 Pipeline script from SCM三、Jenkinsfile3.1 拉取代码3.2 代码质量检测3.3 构建代码3.4 制作镜像并发布镜像仓库3.5 部署到目标服务器3.6 完整的Jenkinsfile3.7 参数配置3.8 通过参数构建四、添加邮件通知4.1 配置Jenkins邮件配置4.2…

开源飞控初探(一):无人机的历史

这章先纠正大疆带给无人机外行小白的认知。定义无人机无人机的正式英文名字是Unmanned Aerial Vehicle,缩写为UAV。有人无人的区分,是看飞机能否一直需要人为操控。最简单的场景是,当飞机飞出视线之外时,人已经很难实时根据环境来…

微服务自动化管理【docker compose】

1.什么是docker-compose Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排 通过编写docker-compose文件可对多个服务同时进行启动/停止/更新(可定义依赖,按顺序启动服务) docker-compose将所管理的容器分为3层结构&#…

Yii2下PHP远程调试PHP5.6/7.2与Xdebug2.5/2.7/3.0 在PHPSTORM下的差异化表现

学习起因:新人学YII2不知道远程调试(远程调试和控制台调试是两件事,同一个原理) 因为yii2框架,设计复杂度非常高,加上php代码的弱类型语言结构,在代码非常复杂的情况下,不采用调试的方式来看源码调用栈&am…

MPLS 虚拟专线 实验

目录 1.拓扑图 2.实验思路 3.主要配置 4.测试 5.实验总结 1.拓扑图 2.实验思路 IGP路由 MPLS Domain 配置MPLS VPN PE之间的MP-BGP邻居关系 CE端与PE端的路由交换 双向重发布,实现路由共享 3.主要配置 R6: *公网环境: [r6]ospf 1 r…

记录robosense RS-LIDAR-16使用过程2

一、安装并使用可视化工具RSView,官网提供了不同版本的安装包,根据个人环境下载解压。本人ubuntu18系统,修改权限:chmod ax run_rsview.sh;然后运行:./run_rsview.sh。该软件每次启动时都要运行./run_rsviewer.sh该软件…

Acwing 1214. 波动数列

题目链接&#xff1a;1214. 波动数列 - AcWing题库 标签&#xff1a;动态规划 &#xff08;字好丑...&#xff09; AC代码&#xff1a; #include<iostream> using namespace std;int f[1005][1005];const int MOD 100000007;//返回正余数 int get_mod(int a,int b) {…

不重复的随机数问题

前言 对于随机数的运用&#xff0c;在开发中经常会用到。有时需要生成不重复的定范围定总量的随机数&#xff0c;比如1~20&#xff0c;需要打乱的1~20中的10个数&#xff0c;那到底怎么做呢? 一、不重复的随机数 我们知道&#xff0c;直接用random会有重复的数字&#xff0…

电商物流云仓的原理是什么?

以云的速度和范围获得胜利  这是一个快速转型时期&#xff0c;封锁、就地避难订单和游览限制扰乱了美国经济的各个范畴&#xff0c;对供给链运营产生了严重影响。在如此动乱的时期&#xff0c;企业正越来越多地转向云优先战略&#xff0c;以使其供给链愈加矫捷和灵敏。  战…

【NI Multisim 14.0原理图文件管理——保存/备份文件及新建电路图页文件】

目录 序言 ⛄1.保存文件 ⛄2.备份文件 ⛄3.新建电路图页文件 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地使用虚拟元器件和仪器、仪表进行电路设计和仿真。 首先启动NI Multisim 14.0&#xff0c;打开如图所示的启动界面&#xff…

CTK Plugin Framework插件框架学习--事件监听

文章目录一、前言二、框架事件三、插件事件四、服务事件五、添加事件监听一、前言 CTK一共有三种事件可以监听&#xff1a; 框架事件插件事件服务事件 但是这些事件只有在变化时才能监听到&#xff0c;如果已经变化过后&#xff0c;进入一个稳定的状态&#xff0c;这时才去监…

归并排序详细说明及实现-python

算法思想&#xff1a; 设初始序列含有n个记录&#xff0c;则可看成n个有序的子序列&#xff0c;每个子序列长度为1 两两合并&#xff0c;得到&#xff08;n//2) 个长度为2&#xff08;n为奇数时&#xff0c;最后一个序列的长度为1&#xff09;的有序子序列 再两两合并&#xff…