完整的芯片反向设计流程原来是这样的!(实例讲解)

2023-11-16

完整的芯片反向设计流程原来是这样的!(实例讲解)

作者:时间:2018-02-23来源:网络收藏

 

 

  现代IC产业的市场竞争十分激烈,所有产品都是日新月异,使得各IC设计公司必须不断研发新产品,维持自身企业的竞争力。IC设计公司常常要根据市场需求进入一个全然陌生的应用和技术领域,这是一件高风险的投资行为。并且及时了解同类竞争对手芯片的成本和技术优势成为必然的工作。

本文引用地址:http://www.eepw.com.cn/article/201802/375971.htm

  什么是芯片反向设计?反向设计其实就是芯片反向设计?,它是通过对芯片内部电路的提取与分析、整理,实现对芯片技术原理、设计思路、工艺制造、结构机制等方面的深入洞悉,可用来验证设计框架或者分析信息流在技术上的问题,也可以助力新的芯片设计或者产品设计方案。

  芯片反向工程的意义:现代IC产业的市场竞争十分激烈,所有产品都是日新月异,使得各IC设计公司必须不断研发新产品,维持自身企业的竞争力。IC设计公司常常要根据市场需求进入一个全然陌生的应用和技术领域,这是一件高风险的投资行为。并且及时了解同类竞争对手芯片的成本和技术优势成为必然的工作。如果让工程师在最短的时间以最有效率的方式设计电路才是最难解决的问题,逆向工程看来是其中一个解决方案。逆向工程能将整颗IC从封装,制成到线路布局,使用将内部结构,尺寸,材料,制成与步骤一一还原,并能通过电路提取将电路布局还原成电路设计。

  目前,国外集成电路设计已经非常成熟,国外最新工艺已经达到10nm,而国内才正处于发展期,最新工艺达到了28nm。有关于集成电路的发展就不说了,网络上有的是资料。对于IC设计师而言,理清楚IC设计的整个流程对于IC设计是非常有帮助的。然而,网络上似乎并没有有关于IC设计整个流程的稍微详细一点的介绍,仅仅只是概略性的说分为设计、制造、测试、封装等四大主要板块,有的资料介绍又显得比较分散,只是单独讲某个细节,有的只是讲某个工具软件的使用却又并不知道该软件用于哪个流程之中,而且每个流程可能使用到的工具软件也不是太清楚(此观点仅为个人经历所得出的结论,并不一定真是这样)。

  芯片正向设计与反向设计。目前国际上的几个大的设计公司都是以正向设计为主,反向设计只是用于检查别家公司是否抄袭。当然,芯片反向工程原本的目的也是为了防止芯片被抄袭的,但后来演变为小公司为了更快更省成本的设计出芯片而采取的一种方案。目前国内逐渐往正向设计转变的公司也越来越多,正逐渐摆脱对反向设计的依赖。当然,正处于发展初期的公司也不少,自然反向设计也是不少的。本文章从芯片反向设计开始进行总结。

  “工欲善其事,必先利其器”。随着集成电路的不断发展,不管是芯片正向设计还是反向设计,它们对于工具的依赖性越来越强,因此,在要开始讲设计流程之前,先来看一看,我们到底会用到哪些主要的工具和辅助性的软件。

  一、主要工具软件。

  说到设计工具,就不能不提到三大EDA厂商——cadence,synopsys,mentor。这三家公司的软件涵盖了芯片设计流程的几乎所有所能用到的工具。首先是cadence公司,这家公司最重要的IC设计工具主要有candence IC系列,包含了IC 5141(目前最新版本是IC617),NC_VERILOG(verilog仿真),SPECTRE(模拟仿真),ENCOUNTER(自动布局布线)等等synopsys公司,最出名的是它的综合工具design complier,时序分析工具prime time,模拟仿真工具hspice等;mentor公司最出名的工具是calibre(版图DRC LVS检查),modelsim(verilog仿真)。

  这些都是IC设计最常用的工具,无论是正向设计还是反向设计。当然,随着软件版本的更新迭代,软件的名字可能有所变更,并不是上述的那些名称。另外,这些工具主要集中在以linux为内核的操作系统上,主要代表有Red Hat。所以有关unix\linux类操作系统的知识还是有必要学的,该类系统与windows系统有很大的不同,要想学会使用这些软件,首先要学习这些操作系统的相关知识,具体资料网上有很多。部分工具有windows版本,例如hspice,Modelsim。

  二、 辅助类工具软件。

  当然,除了这三大EDA厂商的IC设计工具外,Altera 、Xilinx、Keil Software这三家公司的软件quartus ii、ISE、KEIL开发环境等,都是对于IC设计流程中比不可少的工具。它们分别是用于FPGA、单片机&ARM芯片的开发。这类软件在芯片的CP测试和芯片应用方案开发上会有用到。

  版图提取工具,NetEditorLite、ChipAnalyzer,这两个工具主要是针对芯片反向设计而言的。

  算法设计工具,MATLAB,此工具应用范围很广,但对于芯片设计来说,它较为适用于算法原型开发,例如,通信算法。

  PCB版图工具,Altium Designer,Orcad,Allegro。其中,目前Orcad,Allegro是属于cadence电路系统设计套件内的主要软件,而Altium Designer是最常用的软件,它的前身是Protel。

  Labview与数字源表,这一对软硬件主要用于芯片电气参数的半自动化测试,特别是模拟芯片。其目的是芯片设计公司用于分析芯片样品参数用。

  对于这些工具的该如何使用,我会在下面的文章中进行说明。ps:没有具体说明软件使用环境的,一般是在windows环境下使用。

  先从反向设计说起。下面是芯片反向设计的流程图。

    

  一、反向设计总体规划。

  在进行一块新品芯片的开发前期必须要有一个设计总体规划,其中最主要的问题就是,这颗芯片是否能带来收益,毕竟公司要靠产品吃饭。如何评估芯片能否带来收益?这需要多年的经验才能进行准确的评估。一般是看市场上哪几款芯片销量好,并且未来几年的销量看涨,并且评估本公司是否有能力设计并且有渠道销售出去。要考虑的芯片成本有以下几项:

  1,芯片拍片成本;

  2,芯片从立项到交货的时间成本,时间过程导致芯片即使设计出来了,市场已经不需要了;

  3,流片成本;

  4,工具软件的授权使用成本;

  5,测试成本,包括CP测试和成品测试以及搭建测试平台所需要的其它成本;

  6,封装成本。

  将这些成本进行适当预估之后,再来看收益。对于收益这块,这是和市场的需求和销量走向有关,需要涉及到许多其他方面的考虑。在收益问题解决了之后,明确此项目可以获得收益,那么就可以正式开工,前面说的一堆东西其实就是项目可行性分析的一部分。但其实有些公司并不会考虑那么多,因为这些可行性分析本身非常困难。反向哪一家的芯片?选择大公司的芯片进行反向一般来说成功率会更高。选定芯片后就进行拍片了,芯片进行解剖拍片一般周期在1周到1个月之间,这视芯片的大小而定。

 

二、工艺选择。

本文引用地址:http://www.eepw.com.cn/article/201802/375971.htm

  这个要依据拍片回来的芯片版图来决定,通过对芯片版图的识别,判断待反向的芯片版图使用的工艺是什么,再根据公司自己拥有的工艺文件(这些工艺文件都由国内或者国外的芯片制造厂提供,前提是公司得与它们合作才能得到工艺文件),两者进行比对,选择一个适合的工艺进行后续的仿真、版图绘制和流片。工艺选择的问题,需要对公司所拥有的工艺非常熟悉,并且对版图也要熟悉的工程师来解决,他要能够通过版图明确的识别所用的工艺。当然,工艺有时候会在设计过程中反复的更换,因为会有许多参数、流片成功率等各种复杂因素的考量。这一步其实也就叫工艺可行性分析,其实也应该归于项目可行性分析的一部分,但是由于必须要拍片才能进行,所以只能单独说明。

    

  三、版图提取。

  在上一步工艺可行性分析完之后,确认有工艺可以和该版图匹配,那么就可以进行版图提取工作。这部分的工作其实主要是识别版图中的管子并用符号表示出来。所用到工具有

  A、NetEditorLite或者ChipAnalyzer,这是版图提取工具,在不同的公司进行芯片拍片,会用到不同的版图提取工具。该类软件的作用就是一个图片查看器,拍摄的版图就是数据就是照片。

  B、cadence IC5141 里的virtuoso schematic软件,这是电路图绘制软件。

  整个工作的流程是用NetEditorLite或者ChipAnalyzer打开拍片的芯片版图数据,人工肉眼识别里面的管子(二极管、三极管、MOS管之类),再使用virtuoso schematic将管子用符号表示出来,并把管子之间的连接关系连接上。

  版图提取所要注意的问题:

  1,初次进行版图提图,可能会不认识管子,需要有经验的人来帮助识别,熟悉之后就容易了;

  2,不同工艺的版图管子的形状是不一样的,所以碰到不认识的管子,要么靠别人帮忙,要么就只能自己去推理;

  3,要有良好的管子命名习惯,这个每个公司都应该有规定的,这对于后续的工作会有很大帮助;

  4,尽量按照版图的布局来放置管子的布局(在virtuoso schematic上的电路图布局),这样可以加快以后对比电路图和版图时找管子的速度;

  5,在整理提取出的电路时一定要新建一个电路图来放置整理的电路,不要在刚提取的电路图上整理,方便整理时和版图数据对比。

    

  四、电路整理。

  在版图提取完毕之后,下一个步骤就是电路整理。提取完的电路图是混乱的,没有层次关系。那么如何将其整理成具有层次关系,让人一看就懂呢?

  1、这就涉及到有关芯片的一些常识了。芯片分为数字芯片和模拟芯片,但是数字芯片必定会包含模拟电路,而模拟芯片却可以不包含数字电路。它们有如下一般特征:

  A、数字芯片,必有时钟振荡电路、复位电路这些模拟电路。必有寄存器,而且整个数字部分最耗面积的部分往往都是寄存器。寄存器的使用量是很大的,因此,在版图上呈现的就是有大数量的图像一模一样的电路,这种电路往往都是寄存器。

  B、模拟芯片,有带隙基准电路。

  2、说完了芯片版图常识,另外一个重要的有助于理解所提取的电路的工具就是待反向的芯片的数据手册!这是最重要的,我们所有有关于芯片的信息都是从数据手册上得来的。所以一定要善用DATASHEET!在芯片数据手册上,一般会对芯片的功能进行说明,对芯片如何运行进行说明,这些说明将有助于我们对于电路的整理。

 

比如说,芯片手册上说道用了I2C,那么电路中肯定有一大块电路是属于I2C的。一般来说,版图的布局都是将同属于一种功能的管子会集中放置在一起。I2C电路的特征,从I2C协议的原理上可以知道,它就两根信号线,一根时钟,另一根数据线。数据在芯片内部一般是并行传输比较方便,所以,I2C电路一定会有串并转换电路,而串并转换电路一般是寄存器,而且一般是8位。根据这个推断结果,就在提取的电路中去寻找8个在一起的寄存器,它们其中一组就是I2C电路的一部分,再根据芯片版图的I2C PAD位去寻找,看连接到了那一组寄存器上,那么整个I2C的电路就被识别出来了。因此,

本文引用地址:http://www.eepw.com.cn/article/201802/375971.htm

  a、靠着芯片手册对芯片功能的说明,

  b、加上芯片的一些常识性知识,

  c、加个人的这种对电路原理的推理,就可以相对较快的将电路分层次的整理出来。逐步的理解整个芯片的原理。当然,由于芯片电路的庞大的关系,有时候电路并不是需要完全理清楚,对于不那么重要的电路可以不理会。只要保证连接关系没连接错就行。这阶段,只会用到cadence ic5141的virtuoso schematic软件。

    

  五、 电路仿真及修改。

  电路整理好了,下一步就是进行电路的仿真及修改了,根据工艺选择步骤选择的工艺来进行。先说明一下这阶段所使用的工具:

  1、cadence spectre,一般集成在cadence ic5141里面,是模拟电路仿真工具(ps:最原始的版本是集成在IC5141内部,但功能不全,所以需要单独安装新版本,软件名为MMSIM61,随着版本的升级,它的名字也在修改),当然,数字电路也可以进行仿真,数字电路的本质还是模拟电路;

  2、synopsys公司的 Hspice,与spectre一样的仿真工具,另有些差别。

  3、Mentor公司的 Modelsim,主要在windows上使用,用于verilog网表的仿真。

  模拟电路仿真工作流程:在cadence中搭建好仿真环境,设置好仿真参数,选用spectre或者hspice,然后就可以进行仿真的。另外,也可以将电路导出成CDL网表,拷贝到Windows上,用Windows版本的Hspice进行仿真,这样做的优点是Windows易于操作。另外说明一下spectre和hspice的一项区别。spectre仿真的时候会保存所有电路节点的数据,这样做优点是方便查看各个节点的数据,缺点是仿真消耗的时间太长,保存的数据文件太大,这一点在遇到大型电路的时候会很耗时(不知道最新版本改进这一点没有,鄙人没有用过最新版的spectre)。hspice仿真之前可以自己选定所要查看的节点,这样做就可以减少仿真时间和减小数据文件的大小。

  数字电路仿真工作流程:在virtuoso schematic中将整理好的电路路中数字电路部分导出成网表文件,再拷贝到windows系统上进行仿真。windows系统上数字电路网表的仿真采用Modelsim。(这么做的原因是linux系统不太方便)使用Modelsim仿真,最重要的是写好testbench(貌似这句是废话)。

  关于电路的修改,这部分其实不好总结,因为每一款芯片都有不同的参数,所要修改的地方都不太一样,我所知道的是,必定要考虑修改的地方往往都是有关模拟电路的,例如,时钟振荡、复位电路、开漏输出管、带隙等,修改的目的是为了与当前所选用的工艺适配,以满足芯片datasheet的参数要求。另外,数字部分的电路其实一般来说是不需要修改的,但有时为了节省版图面积,会缩小寄存器管子的尺寸,毕竟缩小一个,就等于缩小了几十个。这一阶段其实是一个不断的迭代过程,它要和版图绘制结合起来,这样才能够保证芯片功能和性能的完整。

    

六、版图绘制。

本文引用地址:http://www.eepw.com.cn/article/201802/375971.htm

  这部分在电路整理完之后就可以开始进行了,并配合电路仿真与修改,逐步晚上版图的绘制。该阶段所使用的主要工具有 1、cadence ic5141的版图绘制软件;2、cadence Dracula Diva或者Calibre,这两个用于版图DRC(设计规则检查)、LVS(版图一致性检查);一般而言,calibre会更加常用一些,毕竟这可是Mentor公司的招牌软件之一。在版图绘制好并进行各种检查无误之后,就可以tapeout,准备流片了。

  七、测试规范。

  IC设计师在芯片tapeout之后就要准备制定CP测试规范了,这是接下来CP测试流程的总纲,非常重要。测试规范的测试项主要来源于芯片datasheet,将重要的参数设置为测试项,并规定参数的合理分布范围以及每一个测试项的测试方法(流程)。这些测试参数以及测试方法将决定CP测试开发时所用到的测试环境ATE(auto test environment)。

  八、CP测试开发。

  根据测试规范,可以选定所需要的测试工具以进行整个测试环境的搭建工作。我所知道到用于芯片测试的测试仪有JUNO DTS-1000,ASL1000,V777,STS8200等。每一种测试仪适用于不同种类的芯片测试,测试仪主要分为数字测试,模拟测试,数模混合测试这三大类。CP测试开发所需要做的工作有:1,测试仪的选择(ps:这个阶段还要考虑一个重要的因素就是一次测试多少颗裸芯,也就是CP测试常说的多少个site,这关系到后续测试程序的编写,以及DUT板的制作,非常重要);2,根据测试仪开发测试程序;3,制作测试裸芯片用DUT板,扎PAD位的针由测试厂制作并焊接在DUT上(ps:DUT板有时候也叫针卡);4,自制测试仪(可选),当测试仪并不能完成某些特殊测试项的要求时,还得自己制作测试仪。例如,红外接收芯片测试所需要用到的扫频仪,若采用非自制扫频仪,测试时间将非常长,必须自己制作。5,测试数据的分析。对测试数据的分析有助于对测试方法的改进和对芯片设计的改进。CP测试在整个芯片反向设计中占据着重要位置,所花费的人力、物力是非常多的,还需要频繁和测试厂交流,所以CP测试显得非常复杂。在CP测试开发完之后,会进行COB测试,之后才进行CP测试的调试阶段,以及正式批量测试阶段。

  九、COB测试。

  所谓COB测试,其实就是Chip On Board(将裸芯打线在PCB板上或者将封装好的芯片焊接在PCB上,并将引脚引出),它是在CP测试进行之前进行的一项测试(也在成品测试之后进行),用于初步判断芯片的功能和性能,如果这批次随机采样的几颗芯片功能和性能都很烂就暂时不必进行CP测试了。另外,COB测试相比于CP测试具有更多的灵活性,可以测试更多的测试项,获取有关芯片更为全面的信息。当然,COB测试也是需要开发一套相应的测试环境的。开发的工作根据芯片的不同,工作量会有很大的不同,例如,如果有I2C通信引脚的芯片,需要用到USB转I2C芯片,例如FT232。通过在电脑上编程,通过控制USB转I2C芯片来控制待测芯片。这样的话,搭建整个测试环境就会比较复杂。如果是模拟芯片,例如电源管理类芯片,需要使用LabView编程来控制数字源表进行自动化参数测量。总之,COB测试也是芯片设计中一个比较重要的流程,这部分的工作内容,比较难以叙述,简单的,就用数字源表测试几项参数就行了,复杂的都会基于软件控制的形式进行半自动的测试。具体说来,1、开发在PC端开发测试的程序,例如LabView;2、设计测试芯片的电路板,并留下与PC通信的接口,通常采用单片机做主控芯片;3、搭建测试所需要的环境,比如说遮光要求。过程叙述得很简单,但实际开发并不容易,难度视待测芯片而异。

  十、成测开发。

  在CP测试完了之后,裸芯就可以送到成测厂进行划片和封装了,在这期间,IC设计师所要做的工作就是依据制定成品测试的规范并进行成品测试的开发。这部分的工作其实和CP测试的工作是类似的,只不过,相对于CP测试而言,成品测试的测试项会少很多。许多CP测试用到的测试项,比如,烧调之类的,成品测试就不会进行了,其余步骤均与CP测试一致。

  十一、可靠性测试。

  当芯片封装好,并通过了成品测试之后,并不意味着芯片的测试就结束了,还有芯片可靠性测试。在成测结束,并把样品返回设计师手中之后,设计师还需进行COB测试,并在这时预留几颗芯片不参与接下来的可靠性测试,这几颗芯片将在可靠性测试之后作为对比之用。

  芯片可靠性测试,是衡量芯片的质量和寿命的一项测试。它具体包括环境测试、EMC测试、其它测试等三大项。细分项有高温低温测试、高温高湿测试,抗静电测试等等,全部的测试项可参考IC可靠性测试项目。每一款芯片都有与其对应的可靠性测试项,并不是所有测试项目都要测。我们只要关注与该芯片适配的测试项就行。具体如何决定测试项,这需要与芯片的用途有关,每一种用途,它的测试要求都是不一样的。可靠性测试实验比较简单,但是,芯片的可靠性却是由此来衡量的。可靠性测试需要的测试工具都比较昂贵,当然工具的重复使用性也是比较好的。每一个测试项都对应这一套测试设备。

  十二、成品开发。

  设计出的芯片必须配置相应的使用方案,才能将芯片推广出去,客户才能够更好的使用芯片。不同用途的芯片,它的使用方案不一样,差别也是非常巨大的。像单片机、ARM、FPGA类芯片,配置的可不是简单的使用方案,而是一整套使用它的系统。电源管理芯片,需要配置一个电源管理芯片的一套应用方案,并且需要具有一定的竞争力,这才能够将芯片卖出去。所以成品开发是芯片能否卖出去的关键。我所接触到的成品开发,基本是以单片机为主控芯片的开发方案。具体开发过程将在后续有更为详细的说明。

  有制造就对应着拆解,下面看一个具体案例:

  那么,这些微型芯片的逆向工程(reverse engineering)是怎么操作和实现的? 现在,我就来为大家讲解,今天先跟大家讲个大概,接着我们会连续就这个芯片的反向技术分篇细说,欢迎关注我们研究室头条号,谢谢! 好,废话少说,直接来干货!拆解首先把要拆解的芯片放置在装了浓硫酸的容器里,容器需要盖住,但不能严实,这样里面的气体才能漫溢出来。把容器里的浓硫酸加热到沸腾(大约 300 摄氏度),在瓶底的周围铺上苏打粉——用来预防意外飞溅出来的硫酸液和冒出来的硫酸气体:

  大约 30 到 40 分钟以后,芯片外层的保护胶塑料层就会「碳化」:

    

  待酸液冷却以后,可以把里面哪些已经足够「碳化」的部分挑出来,其它继续进行硫酸浴,外层较厚的芯片可能需要两到三轮硫酸浴:

    

  如果芯片外层那些焦炭不能机械地去除,那么就把它们投进浓硝酸液里面加热到沸腾(温度大约是 110 到 120 度):

  这就是最后的样子:  

  照相   

  在显微图像自动采集平台上逐层对芯片样品进行显微图像采集。与测量三维实体或曲面的逆向设计不同,测量集成电路芯片纯属表面文章:放好芯片位置、对对焦、选好放大倍数,使芯片表面在镜头中和显示器上清晰可见后,按下拍照按钮便可完成一幅显微图像的采集。取决于电路的规模和放大倍数,一层电路可能需要在拍摄多幅图像后进行拼凑,多层电路需要在拼凑后对准,有显微图像自动拼凑软件用于进行拼凑和对准操作。 随便估算一下:该显微图像自动采集平台的放大倍数为1000倍,可将0.1um线条的放大至0.1mm的宽度。这意味着它已足以对付目前采用最先进工艺制作的0.09um集成电路芯片。

  提图:  

  集成电路由多层组成,每层用光刻工艺由光掩膜加以确定。制造集成电路时用的掩膜上的几何图形就是版图,版图是集成电路对应的物理层。 现在提图工作已经可以由电脑全部完成了。主流的电路原理图分析系统已经具有多层显微图像浏览、电路单元符号设计、电路原理图自动和交互式分析提取以及电路原理图编辑等强大功能,版图分析系统则可完成多层版图轮廓自动提取、全功能版图编辑、嵌入软件代码自动识别、提取、校验以及设计规则的统计和提取。 提取、整理电路 数字电路需要归并同类图形,例如与非门、或非门、触发器等,同样的图形不要分析多次。

  提出的电路用电路绘制软件绘出(ViewWork、Laker、Cadence等),按照易于理解的电路布置,使其他人员也能看出你提取电路的功能,提取电路的速度完全由提图人员经验水平确定。注意,软件是按照版图的位置把各组件连接起来,如果不整理电路是看不出各模块的连接及功能的,所以完全靠软件是不能完成电路功能块划分和分析。 分析电路 提取出的电路整理成电路图,并输入几何参数(MOS为宽长比)。通过你的分析,电路功能明确,电路连接无误。 仿真验证,电路调整 对电路进行功能仿真验证。模拟电路一般采用Hspice、Cadence等工具,小规模数字电路采用Cadence,Hsim等工具。根据新的工艺调整电路,-调整后进行验证。 版图绘制验证及后仿真 对输入的电路原理图进行浏览、查询、编辑、调试与仿真。分析电路原理,调节电路参数,并在一定的激励输入下观测输出波形,以验证设计的逻辑正确性。要对提取的网表作仿真验证,并与前仿结果对比,-版图导出GDS文件,Tape out(将设计数据转交给制造方)。

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

完整的芯片反向设计流程原来是这样的!(实例讲解) 的相关文章

  • 图片<img>、链接<a>等去除referer标记

    1 img 标签 img src src
  • 2011年北京大学计算机研究生机试真题(题解)

    九度OJ题目传送门 2011年北京大学计算机研究生机试真题 鸡兔同笼 题目描述 一个笼子里面关了鸡和兔子 鸡有2只脚 兔子有4只脚 没有例外 已经知道了笼子里面脚的总数a 问笼子里面至少有多少只动物 至多有多少只动物 输入 第1行是测试数据
  • 存储路径_存储多路径

    今天的话题是存储多路径 三国开篇 天下大势 合久必分 分久必合 我觉得用来形容多路径也非常贴切 它可以将多条路径整合成一条 也可以在单条路径出现问题时迅速切换 先简单介绍下多路径 IT存储系统在构建的时候 为了最大化保证安全 通常会采用冗余
  • C++实现——LCS-最大公共子串长度

    求两个字符串的最长公共子串的长度 子串不一定是原串中的连续子串组成 LCS 使用动态规划 include
  • Python基础知识及概念

    Python基础知识及概念 1 注释 单行注释 这是一个单行注释 在程序开发时 同样可以使用 在代码的后面 旁边 增加说明性的文字 但是 需要注意的是 为了保证代码的可读性 注释和代码之间 至少要有 两个空格 示例代码如下 print he
  • Vue-Quill-Editor 设置编辑器中文字的默认字体大小

    Vue Quill Editor 默认字体看起来有些小 如下 设置默认字体大小 ql container 设置默认字号 font size 16px 设置之后
  • 利用jsqlparser解析SQL语句

    时常会遇到很多情况 我们需要对SQL语句进行替换或者拼接 以往我们可能会用StringBuild来进行拼接 StringBuilder sql new StringBuilder sql append select from sql app
  • 开发框架Furion之Winform+SqlSugar

    目录 1 开发环境 2 项目搭建 2 1 创建WinFrom主项目 2 2 创建子项目 2 3 实体类库基础类信息配置 2 3 1 Nuget包及项目引用 2 3 2 实体基类创建 2 4 仓储业务类库基础配置 2 4 1 Nuget包及项
  • pytorch 人脸识别

    import torch import os import numpy as np import torch nn as nn import matplotlib pyplot as plt import time import torch
  • nim游戏 C++

    如果堆中石头的数量 nn 不能被 44 整除 那么你总是可以赢得 Nim 游戏的胜利 class Solution public bool canWinNim int n if n lt 0 return 0 else return n 4
  • 头插法和尾插法的详细区别

    浅析线性表 链表 的头插法和尾插法的区别及优缺点 线性表作为数据结构中比较重要的一种 具有操作效率高 内存利用率高 结构简单 使用方便等特点 今天我们一起交流一下单向线性表的头插法和尾插法的区别及优缺点 线性表因为每个元素都包含一个指向下一
  • IDE0006 加载项目时遇到了错误,已禁用了某些项目功能,例如用于失败项目和依赖于失败项目的其他项目的完整解决方案分析。

    重新打开vs2017就好了 原因猜测 vs来大姨妈了 现象是catch ex 后面是e message 单纯少个x vs没检测出来 辛辛苦苦搜个半天 可能太依赖vs了 懒人专属编辑器
  • npm私有化docker方式部署及使用说明

    一 部署nexus 本文采用docker方式部署nexus 安装docker yum install y docker 拉取nexus镜像 docker pull sonatype nexus3 准备本地映射目录 以便本地化持续存储数据 目
  • python No module named numpy. distutils._msvccompiler in numpy. distutils; trying from distutils

    在cmd 中输入 python setup py install 报错 No module named numpy distutils msvccompiler in numpy distutils trying from distutil
  • Android 报错 : FATAL EXCEPTION:main 解决方法

    今天安卓开发课上碰到的新问题 前景提示 老师让我们自己试一下那个两个页面跳转的效果 于是我就开始写了 然后报错 解决方法 逐一排查 首先要看你mainfest xml里面有没有增加Activity 当然我是加了 但是他还报错 具体代码界面
  • Ubuntu18.04 windows10双系统安装解决grub引导问题

    最近给服务器的电脑升级了ubuntu18 直接用u盘安装 老是说grub引导问题 网上有很多教程真的坑人 说的含含糊糊的 不知道在卖弄什么关子 我参照这两个教程解决了安装问题 十分钟就装好了 感谢你们 https blog csdn net
  • vue Tesseract的 ocr 文字识别

    npm结果页 https www npmjs com package tesseract js tesseract官网地址 https tesseract projectnaptha com npm结果页 npm结果页 tesseract官
  • 如何优雅的统计代码耗时

    点击上方 小强的进阶之路 选择 星标 公众号 优质文章 及时送达 预计阅读时间 16分钟 作者 Jitwxs 原文链接 底部链接可直达 https jitwxs cn 5aa91d10 html 一 前言 代码耗时统计在日常开发中算是一个十
  • R语言—列表

    文章目录 列表 定义 创建列表 List 列表 List 元素的引用 列表 List 元素的修改 访问列表元素和值 去列表化 在列表上使用apply系列函数 递归型列表 列表 R语言的6种模式 向量 矩阵 数组 数据框 列表 因子 向量 矩

随机推荐

  • SQLite如何删除,修改、重命名列

    今天在SQLite数据库中添加了一列 后来发现列名写错了 于是使用SQL语句来修改列名 可是根本不管用 首先 请放弃alter吧 sqlite官方说明如下 SQLite supports a limited subset of ALTER
  • 【JS】JavaScript时间与时间戳相互转换

    时间与时间戳相互转换 1 2 时间 JS常用时间类型 1 2 1 GMT 格林尼治标准时 1 2 2 UTC 协调世界时 1 2 3 中国标准时间 1 2 4 ISO8601标准时间格式 1 2 5 时间戳 timestamp 1 时间戳转
  • spring boot项目自动加载引入外部bean

    前言 spring boot项目简化了对外部项目的引入 使我们能够狠方便的构建一个web项目 我们通常在开发的过程中会开发出一些公用的模块组件 这样在项目找那个引入后能够直接使用 减少了轮子的重复构造 同时服务引入的模块化操作 能够更多的节
  • CV学习:OpenCv快速入门(python版)

    本文代码全部可运行 笔者运行环境 python3 7 pycharm opencv4 6 此文是学习记录 记录opencv的入门知识 对各知识点并不做深入探究 文章的目的是让阅读者在极短的时间达到入门水平 在学习过程中 我们应养成 查询op
  • pygame用blit()实现动画效果

    pygame的的实现动画的方法有很多 但是都是围绕着表面进行的 也就是说实现动画的方式不同 但是本质其实都是对表面的不同处理方式而已 原理其实很简单 有点像我们做地铁的时候隧道里的广告一样 我们设置一个窗口 然后让窗口在一个画着很多帧图像的
  • 约束综合中的逻辑互斥时钟(Logically Exclusive Clocks)

    注 本文翻译自Constraining Logically Exclusive Clocks in Synthesis 逻辑互斥时钟的定义 逻辑互斥时钟是指设计中活跃 activate 但不彼此影响的时钟 常见的情况是 两个时钟作为一个多路
  • IDEA从安装到使用--相关配置详解

    IDEA从安装到使用 相关配置详解 作为一个技术小白 刚开始学习使用Intellij IDEA 入门时踩了很多的坑 这里写下我的第一篇博客 分享相关IDEA的配置方法 希望能为各位提供一点帮助 IDEA2018安装及破解 作者 志哥的成长笔
  • 大数(四则运算)

    四则运算 大数加法 高精度加法 大数减法 大数乘法 大数乘法 幂运算 大数乘法 高精度幂运算 大数除法 大数加法 思路 从后往前算 即由低位向高位运算 计算的结果依次添加到结果中去 最后将结果字符串反转 输入的时候两个数都是以字符串的形式输
  • 网站架构演变

    网站架构演变 大型网站介绍 与传统企业应用系统相比 大型互联网网站系统具有以下特点 1 大流量 高并发 这一点往往是传统企业应用系统根本就不会遇到的问题 比如Goole每日访问量都是几十亿 如果服务器端处理不好早就被压的宕机了 2 高可用
  • 环形缓冲区(1)

    声明 参考韦东山视频教程 如若侵权请告知 马上删帖致歉 个人总结 如有不对 欢迎指正 环形缓冲区 环形缓冲区的几个基本操作 申请内存空间 写操作 读操作 环形缓冲区小结 判断缓冲区是否为空 判断缓冲区是否写满 构建环形缓冲区 在 h文件中声
  • 【Augmentation Zoo】RetinaNet + VOC + KITTI的数据预处理-pytorch版

    整合前段时间看的数据增强方法 并测试其在VOC和KITTI数据上的效果 我的工作是完成了对VOC和KITTI数据的预处理 RetinaNet的模型代码来自pytorch retinanet 该项目github仓库在 https github
  • 中标麒麟+达梦数据库 无效的列名[AAAAAAAAAAAAAFS]

    目录 前言 解决办法 中标麒麟 解决办法 windows 前言 今天我将项目部署到中标麒麟服务器 发现原本好使的功能 只要一做添加操作就报如下错误 虽然报错 但数据还是添加了进去 这让我十分费解 解决办法 中标麒麟 问题出现在返回新增结果时
  • Next.js中使用antd修改其组件的默认样式

    在项目中使用了next js搭配了antd 其中需要自定义antd样式 在next js中如果想定义css 我用到的有两种方式 一种是直接使用行内式 div test div 另一种就是写一个css文件后引入 定义一个test module
  • SpringBoot(5)-SpringBoot整合其他项目

    SpringBoot 5 SpringBoot整合其他项目 1 整合Druid数据库连接池 1 1学习地址 1 2application yml 1 3访问一下 1 4随便执行一下新增 2 整合Redis 2 1添加redis pom依赖
  • mimikatz

    https blog gentilkiwi com mimikatz https github com ParrotSec mimikatz
  • C++day1(笔记整理)

    一 Xmind整理 二 上课笔记整理 1 第一个c 程序 hello world include
  • docker 四种网络模型

    一 docker网络基础知识 Docker在创建容器时有四种网络模式 bridge为默认不需要用 net去指定 其他三种模式需要在创建容器时使用 net去指定 bridge模式 使用 net bridge指定 默认设置 none模式 使用
  • java各类型String,int,char,long,StringBuilder,StringBuffer,Integer之间的转换总结

    String和char类型之间的转换 1 String char 因为String是字符串 而char是单个字符 只能把String 转化为char数组 方法为 char ch str toCharArray 2 char String 方
  • cmake命令之target_include_directories

    一 介绍 命令格式 target include directories
  • 完整的芯片反向设计流程原来是这样的!(实例讲解)

    完整的芯片反向设计流程原来是这样的 实例讲解 作者 时间 2018 02 23来源 网络收藏 现代IC产业的市场竞争十分激烈 所有产品都是日新月异 使得各IC设计公司必须不断研发新产品 维持自身企业的竞争力 IC设计公司常常要根据市场需求进