芯片设计中的时钟与约束

2023-10-30

1、同步电路与异步电路

  首先来谈谈同步电路与异步电路。那么首先就要知道什么是同步电路、什么是异步电路?

   对于同步时序电路,不同的文章有不同的说法,大致有下面的定义方法:

①对于比较严格的定义:一个电路是同步电路,需要满足一下条件:

  ·每一个电路元件是寄存器或者是组合电路;

  ·至少有一个电路元件是是寄存器;

  ·所有寄存器都接收同一个时钟电路;

  ·若有环路,则环路至少包含一个寄存器。

  在上面的严格定义下,可以得到下面的电路不是同步电路:

        :是组合逻辑,不符合定义;

                              :是组合逻辑和锁存器,不符合定义;

下面的形式肯定是同步电路:

          :寄存器的时钟都是CLK

下面的电路严格上说不算是同步电路:

          :因为右边的时钟经过两个反相器的延时,时钟信号不同了。

 

②对于不算很严格的同步电路定义有:

  ·所有时钟的时钟来自同一个时钟源:比如下面的(分频)电路

             

CLKA、CLKC、CLKD、CLKE都是由300M这个时钟源分频而来,因此这个系统属于同步电路系统。

  ·当不是来自同一个时钟源时,只要CLOCK的周期有倍数关系并且相互之间的相位关系是固定的就可以算是同步电路,比如, 电路中用了10ns, 5ns, 2.5ns 三个时钟,这三个时钟不是由同一个时钟源分频来的,但是这三个时钟的周期有倍数关系并且相位关系固定:10ns是5ns的2倍,是2.5ns的两倍,之间是整数倍关系;相位关系是固定的,因此也算是同步电路。

  CLOCK之间没有倍数关系或者相互之间的相位关系不是固定的,比如电路中用5ns, 3ns 两个CLOCK,这两个时钟不是来自同一个时钟源,两者之间没有周期关系,因此是异步电路。

   关于是不是同步时钟的问题,还要具体情况具体分析,在后面的垮时钟域也会涉及有关同步时钟的问题,这里就不再继续阐述了,以免越解释越麻烦。

  此外也有的资料显示:同步电路是由时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路。同步时序逻辑电路的特点是各触发器的时钟端全部连接在一起,并接在系统时钟端,只有当时钟脉冲到来时,电路的状态才能改变。改变后的状态将一直保持到下一个时钟脉冲的到来,此时无论外部输入 x 有无变化,状态表中的每个状态都是稳定的。

 

2、时钟/时钟树的属性

一般的时钟,我们都指的是全局时钟,全局时钟在芯片中的体现形式是时钟树。

时钟树,是个由许多缓冲单元(buffer cell)平衡搭建的时钟网状结构,如下图所示:

               

 

首先不得不说,实际的时钟除了周期/频率、相位、沿、电平属性外,还有其他的属性,也就是:不是下面这样子规规整整的:

               

 

为什么呢?那是因为时钟有下面的属性(“实际的buff”):

①时钟的偏移(skew:时钟分支信号在到达寄存器的时钟端口过程中,都存在有线网等延时,由于延时,到达寄存器时钟端口的时钟信号存在有相位差,也就是不能保证每一个沿都对齐,这种差异称为时钟偏移(clock skew),也叫时钟偏斜。时钟的偏移如下图所示:

                      

此外,时钟skew与时钟频率并没有直接关系,skew与时钟线的长度及被时钟线驱动的时序单元的负载电容、个数有关。

 

时钟抖动(jitter):相对于理想时钟沿实际时钟存在不随时间积累的、时而超前、时而滞后的偏移称为时钟抖动,简称抖动,如下图所示:

                 

时钟的抖动可以分为随机抖动(Random Jitter,简称Rj)和固有抖动(Deterministic jitter):

  ·随机抖动的来源为热噪声、Shot Noise和Flick Noise,与电子器件和半导体器件的电子和空穴特性有关,比如ECL工艺的PLL比TTL和CMOS工艺的PLL有更小的随机抖动;

  ·固定抖动的来源为:开关电源噪声、串扰、电磁干扰等等,与电路的设计有关,可以通过优化设计来改善,比如选择合适的电源滤波方案、合理的PCB布局和布线。

也就是说:jitter与时钟频率无直接关系

 

时钟的偏移和时钟的抖动都影响着时钟网络分枝的延迟差异(相位差异),在Design  Compiler里面,我们用时钟的不确定性(uncertainty来表示这两种情况的影响。

 

③时钟的转换时间(transition :时钟的上升沿跳变到下降沿或者时钟下降沿跳变到上升沿的时间,这个时间并不是如左下图所示那样完全没有跳变时钟的,而是像右下图那样,时钟沿的跳变时间就是时钟的转换时间(后面约束的时候会有相关的解释)。

理想:            带转换时间的时钟:

 

时钟的转换时间与与单元的延时时间(也就是器件特性)还有电容负载有关。

 

时钟的延时(latency :时钟从时钟源(比如说晶振)出发到达触发器时钟端口的延时,称为时钟的延时,包含时钟源延迟(source latency)和时钟网络的延迟(network latency),如下图所示:

             

  

时钟源延迟(clock source latency),也称为插入延迟(insertion delay),是时钟信号从其实际时钟原点到设计中时钟定义点(时钟的输入引脚)的传输时间,上图是3ns。

时钟网络的延迟( clock network latency)是时钟信号从其定义的点(端口或引脚)到寄存器时钟引脚的传输,经过缓冲器和连线产生的延迟(latency),上图是1ns。

OK,时钟的附加的buff属性差不多就是这样了。

 

 

3、内部时钟

记得我刚刚学习FPGA的时候,在verilog代码中,经常使用内部产生的时钟,也就是用内部的一个信号充当另外一个always块的时钟沿敏感列表,如下图所示:

       

 

  实际上,这种内部时钟不建议使用,一个是因为产生内部时钟的逻辑是有延时的,导致A_clk产生也会延时,Data与A_clk会有延时,就会有亚稳态的稳压;另外一个就是由触发器生成A_clk的驱动能力问题.

 

4、多路复用时钟

在一个系统里面,很有可能会用到多个时钟轮流驱动一些触发器,为了适应不同的数据速率要求,进行时钟切换。有时为了节约功耗,也会把高速时钟切换到低速时钟,或者进行时钟休眠操作,多路时钟如下图所示:

               

  这样的时钟一般情况下也会导致一些问题,比如时钟切换时导致后面驱动的寄存器建立时间不足,当满足一定的条件时,这种多路复用器的时钟也是可以使用的,要满足的要求有:

    ·时钟复用电路一旦上电工作之后,就不要对复用逻辑进行更改,以免更改之后产生不确定错误。

    ·在测试的时候,设计电路绕过时钟多路逻辑来选择普通的时钟,也就是使用普通的时钟进行测试。

    ·在时钟进行切换的时候,寄存器要处于复位的状态,以免在切换之后建立时间不够而进入亚稳态。

    ·在时钟切换的时候,可能会产生一些短暂的错误,但是这些错误对整个系统没有影响。

  对于系统要求非常严格的,比如时钟切换很频繁,有不能够在复位的时候切换,而且也不允许有短暂的错误,那么时钟就不能这样子进行切换了,就要使用其他的时钟切换方案或者进行时钟同步了。至于多时钟切换的方案,以后有时间再学习补充。

 

5、门控时钟

门控时钟可是低功耗设计的宠儿,关于门控时钟的资料也有一大堆,下面就来写写门控时钟吧。

门控时钟也就是在使能信号有效的时候,把时钟打开;使能信号无效的时候,时钟关闭。时钟关闭之后,它所驱动的寄存器就不会反正,因此也就降低了动态功耗。

门控时钟最开始的电路是:

         

 

  这种门控时钟bug多,我们先来看看这种电路的bug波形是怎么样的,也就是知道问题所在,好让我们改进:

           

  从波形图中可以看到,门控使能信号如果在时钟的高电平的时候开启或者关闭,就会导致产生的门控时钟高电平被截断,变成毛刺;门控使能信号对在时钟低电平时跳变对产生的门控时钟没有影响。因此我们的针对点就是高电平时的翻转。

因此我们就可以通过设置一种电路,让门控使能信号在通过这个逻辑电路之后,仅仅在时钟低电平的时候进行翻转,而在时钟高电平的时候,不能翻转也就是保持。从而我们就想到了低电平触发的锁存器,使能信号通过低电平的锁存器之后,如果使能信号在高电平跳变,锁存器的输出信号是不会改变的,电路图如下所示:

           

 

波形如下所示:

           

这里需要注意的是:

  当门控使能信号是高电平有效的时候,也就是高电平打开门控时钟,低电平关闭门控时钟,那么就使用上面的电路,也就是:低电平触发的锁存器+门。

  当门控使能信号是低电平有效的时候,那么就要换成:高电平触发的锁存器+门。

PS:当涉及毛刺的问题的时候,特别是由于使能信号与时钟而产生的毛刺,锁存器起很大的作用。

一般情况,在进行芯片设计的时候,我们不必自己设计门控时钟,大多是ASIC/SoC生产商都有对应的门控时钟单元。

 

6、行波时钟

行波时钟,也就是一个触发器的输出用作另一个触发器的时钟输入,经常用在异步计数器和分频电路设计中,如下图所示:

           

异步计数器/分频时钟虽然原理简单、设计方便,但级连时钟(行波时钟)最容易造成时钟偏差,级数多了,很可能会影响其控制的触发器的建立时间和保持时间,使设计难度加大;转换的方法是采用同步计数器。

 

7、双边沿时钟

双边沿时钟的系统是指在时钟的上升沿和下降沿都进行数据传输:

             

很显然,这样子数据的传输速率就增加一倍了。DDR就是采用双边沿传输数据的技术,传输示意图如下所示:

             

然而一般情况下,我们不建议使用双边沿时钟,这是因为:

    ·由于上下沿都用,要求时钟的质量很高,一般的时钟源很难达到,成本高。

    ·由于时钟的抖动等不确定因素的存在,容易使时钟的占空比发生改变,因此容易引起建立时间和保持时间的违规。

    ·当使用的双沿时钟之后,时钟的约束变得复杂,此外当某处发生违规之后,违规的路径的查找难度比单沿时钟大。

    ·还有一点就是测试难度比较大,双沿电路的测试电路必定有别与单沿的测试电路。进行扫描测试时,上下沿的时钟先都得插入多路复用器进行选择。

 

8、Design Compiler中的时钟约束

对实际的时钟进行建模/约束了,实际上就是对这几个属性进行设置,下面讲解在Design Compiler中怎么进行约束。

在默认的情况下,逻辑综合时,即使一个时钟要驱动很多寄存器,DC也不会在时钟的连线上加时钟缓冲器(clock buffer)以加强驱动能力,时钟输输入端直接连接到所有寄存器的时钟引脚,也就是说,对于高扇出(high fanout)的时钟连线,DC不会对它做设计规则的检查和优化,如下左图所示。在时钟连线上加上时钟缓冲器或作时钟树的综合(clock tree synthesis)一般由后端(back end)工具完成,后端工具根据整个设计的物理布局(placement)数据,进行时钟树的综合。加入时钟缓冲器后,使整个时钟树满足skew, latency和transition的目标。时钟树综合后的电路如右下图所示。

                

 

  左上图的时钟网络是理想的,其延迟(latency)和时钟的偏差(skew)及转变时间(transition)默认值为零。显然,理想时钟网络与实际的情况不同,使用理想时钟网络将产生过于乐观的时间结果。为了能在综合时比较准确地描述时钟树,我们需要为实际的时钟树建模,使逻辑综合的结果能与版图(layout)的结果相匹配。

好吧,上面都不是重点,下面才是内容:

    我们用下面的命令建立时钟那几个属性模型:

create_cloclkset_clock_uncertainty、set_clock_latency、set_clock_transition分别进行时钟的周期、偏移、延时、转换约束:

                

时钟偏差的建模:

set_clock_uncertainty:对时钟的偏移和抖动进行建模,也就是对时钟的偏差进行建模,具体使用为:

 

假设时钟周期为10ns,时钟的建立偏差为0. 5ns,用下面命令来定义进行约束:

create_clock -period 10 [get_ports  CLK]

set_ clock_ uncertainty  -setup  0.5  [get_clocks CLK]

理想的时钟:

             

 

只对建立时间的偏差时钟建模:

             

 

如果对建立时间和保持时间都进行偏差建模,则有:

               

 

在默认的情况下,"set-clock_uncertainty”命令如果不加开关选项“-setup”或“-hold",那么该命令给时钟赋予相同的建立和保持偏差值。

这是一种对偏差建模的方式,也就是对建立时间和保持时间进行建模的方式;除此之外,还可以对时钟的上升沿和下降沿进行偏差建模,比如上升沿的偏差是0.2ns,下降沿的偏差是0.5ns,则有:

                 

 

set_ clock_ uncertainty  -rise  0.2 -fall 0.5  [get_clocks CLK]

一般情况下,我们只约束建立时间,也就是只用第一种方式进行时钟偏差建模。

当对建立时间偏差建模之后,这时,时钟周期、时钟偏差和建立时间的关系如下图所示:

             

  假设时钟周期是10ns,建立时间偏差是0.5ns,触发器的建立时间是0.2ns,这时候从图中就可以看到,留给寄存器间的路径的裕量就减少了,也就是说,对寄存器间的约束就变得更加严格了,寄存器的翻转延时、组合逻辑延时与线网延时等这些延时的和必须小于9.3ns,否则就违反了FF2的建立时间。这一点是要注意的。

  对于保持时间,在未考虑时钟偏移之前,前面说了,组合逻辑的延时要大于触发器的保持时间(具体原因参考前面的描述),当对时钟偏差建模之后,这时,时钟周期、时钟偏差和保持时间的时序关系如下所示:

                

 

 

时钟转换时间的建模:

  由于时钟并不是理想的方波,用set_ clock_ transition来模拟时钟的转换(transition)时间。默认的上升转换时间为从电压的20%上升至80%的时间,下降的转换时间为从电压的80%下降至20%的时间。如果set_clock_transition命令中不加开关选项“-setup”或“-hold" ,那么该命令给时钟赋予相同的上升和下降转换时间。一般情况下,我们只约束最大的转换时间,如最大转换时间是0.2ns,那么就加上-max选项:

set_clock_transition  -max    0.2    [get_clocks  CLK]

时钟延迟的建模

  时钟从时钟源(比如说晶振)出发到达触发器时钟端口的延时,称为时钟的延时,包含时钟源延迟(source latency)和时钟网络的延迟(network latency)。我们使用set_clock_latency进行时钟延时的建模。一般情况下,我们把时钟源延迟(source latency)和时钟网络的延迟(network latency)分开来,因为时钟源延时需要建模,是因为DC是真的不知道这延时是多大,但是对于时钟网络的延迟,DC在布局布线前不知道,但是在布局布线后就可以计算出来时钟网络的延时了,因此在布局布线之后进行综合时,就没有必要对时钟网络进行延时,因此就要把这两个延时分开来进行约束。

先说布局布线之前:时钟周期为10ns,时钟源到芯片的时钟端口时间是3ns,时钟端口都内部触发器的时间是1ns,如下图所示,

             

那么就用下面的命令进行建模:

create_clock  -period  10  [get-ports CLK]

set_clock_latency  -source  3  [get_clocks CLK]

set_clock_latency 1  [get_clocks CLK]

通常情况下,我们约束最大的延时,也就是加上-max的选项,表示最大延时是多少(如set_clock_latency  -source -max  3  [get_clocks CLK] 就是时钟源到芯片时钟端口最大的时间是3ns)。

布局布线之后:就可以计算实际的线网延时,就要使用

set_propagated_clock  [ get_clocks CLK] 这个命令代替上面的

set_clock_latency 1  [get_clocks CLK]这个命令。

基本的时钟建模就OK了,下面进行总结并给出我们这个例子中使用的约束脚本,理想时钟和实际时钟的对比,如下图所示:

                    

因此总结就是,对实际时钟的建模/约束如下所示: 

                         

 

 

 

             补充1:时钟分配策略

  时钟的分频从规划初始就应该考虑,也就是从系统层面上去考虑,而不是等到后端设计时再考虑。时钟分配策略考虑因素有:

  系统的时钟分配计划(主要是时钟树方案、各个模块的时钟频率等);

  时钟的最小延时(主要是根据系统运行的速度来定义最小的延时要求,这个与时钟分配计划应该是有重叠的地方,具体我不是很了解);

  时钟缓冲(这个是考虑负载的问题,往往也是在设计时钟树时应该考虑的问题);

  消除时钟偏移(时钟偏移总是存在的,如何降到最小或使其达到预期的效果,也是要考虑的);

  门控时钟、软硬件协同设计等省电模式的考虑(这个需要具体问题具体分析了,还可以从低功耗设计的角度进行观察)。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

芯片设计中的时钟与约束 的相关文章

  • CPU、MPU、MCU、SOC的概念和区别

    概念 1 cpu cpu central processing unit 是一台计算机的运算核心和控制核心 xff0c CPU由运算器 控制器和寄存器以及实现他们联系的数据 控制总线构成 xff0c cpu典型的三级流水线操作是取值 译码
  • R-Car H3系列SOC芯片与R-Car M3 R8A77961JBP0BA区别

    RENESAS推出的 xff1a R Car H3 系列 SOC 芯片 R8A77951JA00BA xff03 YJ1 xff0c R Car M3 系列 SOC 芯片 R8A77960JA60BG xff03 YJ5 在内核上 xff1
  • IC验证方法基础

    数字IC的设计流程 如下图所示 其中讲到形式验证的时候就懵了 当时老师说 其实我也记不太清了 就从网上找了一下 形式验证 Formal Verification 是一种IC设计的验证方法 它的主要思想是通过使用数学证明的方式来验证一个设计的
  • RISC-V学习笔记【系统设计】

    蜂鸟E200系列处理器简介 特色 开源 免费 高能效比 针对IoT领域设计 支持RV32I E A M C F D等指令子集和机器模式 2级流水线 功耗和性能均优于主流商用的ARM Cortex M处理器 提供完整的配套SoC 包括中断控制
  • 芯片设计中的时钟与约束

    1 同步电路与异步电路 首先来谈谈同步电路与异步电路 那么首先就要知道什么是同步电路 什么是异步电路 对于同步时序电路 不同的文章有不同的说法 大致有下面的定义方法 对于比较严格的定义 一个电路是同步电路 需要满足一下条件 每一个电路元件是
  • Level Shift的影响及使用及位置

    H2L 一般放在Low Voltage 因为H2L LevelShift的supply Voltage是VDDL 如果放在High Voltage就需要将VDDL的power rail route到VDDH domain 如果高低电压差别不
  • QT实现--电子时钟

    QT 电子时钟 文章目录 QT 电子时钟 简介 1 主窗口 menu h文件 menu cpp文件 2 时钟窗口 widget h文件 widget cpp文件 3 运行效果图 简介 使用了绘图事件 定时事件 有两个窗口 一个窗口用于设置时
  • An ASIC Low Power Primer by J. bhaskar

    原文链接 https www academia edu 33242660 An ASIC Low Power Primer by J bhaskar Vlsi Design Power Electronics VLSI VLSI and C
  • ThreadX 内部系统时钟服务

    ThreadX中 有两个函数可以获取和设置内部系统时钟服务 tx time get 获取当前时间 tx time set 设置当前时间 tx time get 获取当前时间 原型 ULONG tx time get VOID 描述 这项服务
  • SoC的开发

    怎么做SoC SoC是干啥的 SoC就是将CPU GPU Uart I2C WiFi Etherne等硬件IP连起来 做到一个芯片上 主要工作有 1 用verilog将这些IP core连起来 在verilog仿真器上进行验证 也要写一些C
  • GAN,IGBT, MOSFET

    作者 集微网 校对 团团 集微网 爱集微APP 各大主流应用商店均可下载 集微网消息 功率半导体是电子电力装置电能转换与电路控制的核心器件 根据Yole数据 中国已经成为全球最大的功率半导体消费市场 预计至2021年 全球功率器件市场规模将
  • Cache的基本原理以及简单操作

    对于没有接触过底层技术的朋友来说 或许从未听说过cache 毕竟cache的存在对程序员来说是透明的 在接触cache之前 先为你准备段code分析 int arr 10 128 for i 0 i lt 10 i for j 0 j lt
  • AMBA总线协议AHB、APB、AXI对比分析

    一 AMBA概述 AMBA Advanced Microcontroller Bus Architecture 高级处理器总线架构 AHB Advanced High performance Bus 高级高性能总线 ASB Advanced
  • 系统滴答定时器(SYSTICK)

    一 SysTick定时器 SysTick定时器被捆绑在NVIC中 用于产生SYSTICK异常 他的作用是为各个不同任务许以不同数目的时间片 确保没有一个任务能霸占系统 或者把每个定时器周期 的某个时间范围赐予特定的任务等 还有操作系统提供的
  • 时钟抖动(Jitter)和时钟偏斜(Skew)

    在进行时序分析时 经常会遇到两个比较容易混淆的概念 那就是时钟抖动 Clock Jitter 和时钟偏斜 Clock Skew 下面就解释下两者的区别 一 Jitter 由于晶振本身稳定性 电源以及温度变化等原因造成了时钟频率的变化 指的是
  • Difference between RTL and Behavioral verilog

    原文链接 https electronics stackexchange com questions 63682 difference between rtl and behavioral verilog Answer 1 ehaviora
  • 数字SOC设计之低功耗设计入门(三)——系统与架构级低功耗设计

    前面讲解了使用EDA工具 主要是power compiler 进行功耗分析的流程 这里我们将介绍在数字IC中进行低功耗设计的方法 同时也结合EDA工具 主要是Design Compiler 如何实现 我们的讲解的低功耗设计主要是自顶向下的设
  • 数字SOC设计之低功耗设计入门(六)——门级电路低功耗设计优化

    三 门级电路低功耗设计优化 1 门级电路的功耗优化综述 门级电路的功耗优化 Gate Level Power Optimization 简称GLPO 是从已经映射的门级网表开始 对设计进行功耗的优化以满足功耗的约束 同时设计保持其性能 即满
  • Linux芯片级移植与底层驱动

    原文地址 http blog csdn net 21cnbao article details 8545088 1 SoC Linux底层驱动的组成和现状 为了让Linux在一个全新的ARM SoC上运行 需要提供大量的底层支撑 如定时器节
  • ARM/neon memcpy 针对*未缓存*内存进行了优化?

    我使用的是基于 Xilinx Zynq 7000 ARM 的 SoC 我正在努力处理 DMA 缓冲区 需要帮助映射 Xilinx ARM SoC Zynq 7000 上的预留 可缓存 DMA 缓冲区 https stackoverflow

随机推荐

  • RabbitMQ内存监控及自动重启的shell脚本

    RabbitMQ内存监控及自动重启 功能简介 Shell脚本 systemd托管 这个脚本是用来监控 RabbitMQ 进程的内存占用情况 如果内存占用超过设定的阈值并且达到设定的检查次数 则自动重启 RabbitMQ 服务 功能简介 脚本
  • SaaS、PaaS、IaaS云服务模式和商业云平台设计与建设方案

    1 云计算的三种服务模式 云计算是一种新的计算资源使用模式 云端本身还是 IT 系统 所以逻辑上同样可以划分为这四层 底三层可以再划分出很多 小块 并出租出去 这有点像立体停车房 按车位大小和停车时间长短收取停车费 因此 云服务提供商出租计
  • TS 错误property does not exist on type Object

    在TypeScript中如果按JS的方式去获取对象属性 有时会提示形如Property value does not exist on type Object 的错误 具体代码如下 var obj Object Object create
  • JAVA代码规则对照表

    JAVA代码规则对照表 Try with resources should be used 应该使用带有资源的Try with resources Creating cookies without the secure flag is se
  • java 实现 AES 加解密

    package com dechnic tfoms util import org apache shiro crypto hash Sha256Hash import org slf4j Logger import org slf4j L
  • 渗透学习 信息收集

    人生在世三万天 有酒有肉小神仙 小白入坑学废集6 基本信息收集 信息收集 域名信息 敏感目录 端口扫描 旁站C段 整站分析 谷歌hacker URL采集 后台查找 CDN绕过方法 就算我不成器 你又是个什么东西 基本信息收集 信息收集 域名
  • 用Python进行数据分析——起步

    一 安装Anaconda与Jupyter notebook 在学习一门编程语言之前 选一个称手的工具至关重要 对于用Python进行数据分析而言 Anaconda与Jupyter notebook目前已成为标准环境 1 咱们知道conda是
  • js中的with()用法

    with语句 作用域名 一个可以按序检索的对象列表 通过它可以进行变量名的解析 with语句用于临时拓展作用域链 语法如下 with object statement method 这条语句将object添加到作用域链的头部 然后执行函数体
  • linux shell 的多行注释

    解决方案之一 强硬的注释 首先介绍方法 我们在C C 中 可以使用 的方式注释掉整块的代码 在Linuxshell脚本中 我们有一个变通的方法 有效的代码段 lt
  • [2018 徐州 网络赛

    题目来源 After Incident a feast is usually held in Hakurei Shrine This time Reimu asked Kokoro to deliver a Nogaku show duri
  • I/O模型

    参考链接 I O多路复用 IO多路复用之select poll epoll详解 epoll讲解 深入Go语言网络库的基础实现 I O模型 I O模型 1 1 阻塞I O模型 最常用的I O模型 默认情况下 所有文件操作都是阻塞的 比如I O
  • 【华为OD机试】玩牌高手(python, java, c++, js)

    玩牌高手 前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nan
  • ⭐算法入门⭐《线性枚举》简单10 —— LeetCode 剑指 Offer 17. 打印从1到最大的n位数

    文章目录 一 题目 1 题目描述 2 基础框架 3 原题链接 二 解题报告 1 思路分析 2 时间复杂度 3 代码详解 三 本题小知识 四 加群须知 一 题目 1 题目描述 输入数字 n n n 按顺序打印出从 1
  • 复制指定文件夹中的文件到另一个文件夹中(简单详细)

    操作系统 ubuntu 语言 python 要求 从文件夹中取出所有索引为 6的文件保存到新的文件夹中 完整代码如下 import os import re import shutil def copyfiles source files
  • 基于Java的仓库管理系统

    博主介绍 22届程序员一枚 源码获取加V qq2056908377 页面样式 仓储管理系统 本设计为一个基本的仓库管理系统 程序功能比较简单 贴近实际 系统用户权限控制采用RBAC0模型 权限 角色 用户 既提升了效率 也有很大的拓展性 业
  • MockMvc 单元测试样例

    前言 老实我以前也没写过单元测试 小公司没要求 都是postman自测OK就提交了 这里第一次写 还废了点时间 做个笔记下次直接抄吧 jar包版本号
  • 2 Swagger3 HelloWorld实现 结合SpringBoot2

    第一步 我们新建一个SpringBoot项目 加一个Spring Web依赖 加下Swagger依赖
  • [管理与领导-85]:IT基层管理者 - 核心技能 - 高效执行力 - 10 - 高效执行力的9个段位

    目录 前言 一段 准确执行 快速反应 坚决执行 态度很重要 二段 结果导向 苦劳过后 有功劳 有结果很重要 三段 有始有终 主动反馈 有始有终 即时汇报 不断改进 持续很重要 四段 结果到位 做事提前量 超越期望 提前和可预期很重要 五段
  • sun m4000 服务器文档,文档2、安装配置sun enterprise m4000主机.doc(13页)-原创力文档...

    青州码头小型机项目实施方案 Solaris 10 U7 Oracle 10g ZFS Sun Cluster 3 2 U2 文档二 安装配置SUN Enterprise M4000 主机 一 配置M4000 主机控制卡 管理控制台 1 使用
  • 芯片设计中的时钟与约束

    1 同步电路与异步电路 首先来谈谈同步电路与异步电路 那么首先就要知道什么是同步电路 什么是异步电路 对于同步时序电路 不同的文章有不同的说法 大致有下面的定义方法 对于比较严格的定义 一个电路是同步电路 需要满足一下条件 每一个电路元件是