行业观察 | 芯片设计产业链:上游至下游

news2024/9/25 1:18:03

本文简单总结、介绍芯片设计产业链全流程。

更新:2023 / 7 / 2


文章目录

  • 集成电路产业链
  • 常见的芯片架构图
  • 数字IC设计
    • 流程
      • 概略版
      • 详解版
      • 前后端
        • 前端:RTL -> Netlist
        • 后端:Netlist -> Layout
      • 示例:基于标准单元(STD CELL)的ASIC设计流程
    • 指标
  • 参考链接


集成电路产业链

在这里插入图片描述


常见的芯片架构图

此处以 SoC 芯片为例,

在这里插入图片描述其组成为:

  1. 核( Core );
  2. 存储( MEM );
  3. 外设( IO );
  4. 总线( BUS );

数字IC设计

数字IC是传递、加工、处理数字信号的 IC,是近年来应用最多、发展最快的 IC 品种。可分为通用数字IC和专用数字IC。1


流程

概略版

确定项目需求
系统级设计
前端设计
后端设计
  • 确定项目需求
    市场进行调研,确定芯片的规格(功能、功耗、性能、IO外设等指标),对研发提出需求;
    研发来评估实现需求的可行性;
  • 系统级设计
    根据对芯片规格的要求,对功能进行算法设计,拿出设计解决方案和具体实现架构,划分模块功能;
  • 前端设计(逻辑)
    前端以设计架构为起点,以生成可以布局布线的网表为终点,目标是设计电路来实现想法。
    主要包括:RTL 编程和仿真( EDA 仿真验证 )、IC 系统设计、验证、逻辑综合、STA、逻辑等值验证( equivalence check )、硬件原型验证( FPGA 原型验证 )。
  • 后端设计(物理)
    后端以布局布线为起点,以生成可以送交 foundary 进行流片的 GDS2 文件为终点,目标是将设计的电路制造出来,在工艺上实现想法。
    主要包括:P & R(比如芯片封装和管脚设计)、floorplan、电源布线和功率验证、线间干扰及其预防和修正、时序收敛、自动布局布线、STADRCLVS 等。要求掌握和熟悉多种 EDA 工具以及 IC 生产厂家的具体要求。

详解版

在这里插入图片描述

  • Marketing Request(市场需求)
    市场进行调研,确定芯片的规格(功能、功耗、性能、IO外设等指标),对研发提出需求;
    研发来评估实现需求的可行性;

  • Architecture Spec(产品结构说明书)
    在需求确定后,开始撰写架构的文档。
    文档包括两个部分:整体架构规格书Top Architecture Spec )和 具体功能规格书Project Function Spec )。
    整体架构规格书 指的是要有什么模块,诸如 CPUSRAMDMAAMBA 等。
    具体功能规格书 指的是具体的指标,诸如 DMA 模块有多少个通道、总的时钟频率多少兆、支持的模式有几种等。
    该部分通常由架构工程师( Architecture Engineer )完成,或被称为系统工程师( System Engineer, SE )。该类工程师一般是较为资深的工程师。

  • Arch / Algorithm Emulation
    在设计好架构后就可以做架构、算法方面的仿真了。
    通常使用的是 CC++ 或者 MATLAB
    该部分通常由算法工程师( Algorithm Engineer )完成。

  • Design Spec
    做设计并不是一开始拿到算法就去写代码,而是要做一个设计规格书。
    类比盖楼,在正式砌砖之前也是先要把图纸规划好,该部分通常包括接口定义( Interface )、时序处理方案( Timing )、关键电路绘制( Circuit )。
    该部分通常由设计工程师( Design Engineer )完成。

  • RTL Coding
    在设计规格书编写完毕后,就可以进行以硬件描述语言分模块以待吗来描述实现了。通常有 VHDLVerilogSystemVerilog 3种编程语言可供选择。
    该部分通常由设计工程师( Design Engineer )完成。
    对于 RTL Coding 部分,又可细分为以下3个部分,关系见下图:

在这里插入图片描述
IP Level RTL Coding
先有小的 IP,才能有大的 SoC
前面做设计是由顶向下,先有架构再有各个模块。
后面具体实现是由底向上,先有最小的 IP 级别的代码,才能集成更高层次的代码。

IP Level RTL SimulationIP Level Verification
设计好 IP 级别代码后就可以进行仿真验证了。小的 IP 的话通常是 Design Engineer 自己做的,但当 IP 较大时会有专门的验证人员来做。
在验证时,我们会用到一些脚本,比如 Makefile,用到的仿真工具主要有3大 EDA 厂商的 CadenceIncisiveSynopsysVCSMentorQuestaSim,其中 VCS 最为主流而 QuestaSim 用在小的 FPGA 开发上面。
在验证时用到的语言有 CC++SystemCSystemVerilog 还有 UVM 这么几种。
在做验证时也会做验证的 Spec 文档,想清楚验哪些点之后才会搭建环境、跑测例。
验证的核心是验证的完备性,所以要清楚 IP 级这个目标模块的 DUT,要测的功能点都有哪些,得分解全。

Unit / Chip Level RTL SimulationUnit / Chip Level Verification
IP 级别没有问题后,合成大模块 Unit / Chip Level,再来进行验证。
该部分通常由全流程验证工程师( Full Chip Verification Engineer )完成。

  • Logic SynthesisGate Level Verification
    RTL Coding 设计和验证没有问题后,此时会进行综合、会综合出网表。同时也会对门级网表做验证,称之为 Gate Level Verification。这个阶段更主要的是调试我们的验证环境,为后端物理实现之后的网表做准备。
    当前阶段的网表含有的信息较少,物理参数没有,跑起来会更快,方便于调试。
    网表的逻辑功能正确性的验证是通过 Formal Verification 去保证的,而不是 Gate Level Verification 去保证的。
    对于综合工具,当前主流的是 SynopsysDesign ComplierDC )。

  • 逻辑综合就是把设计实现的 RTL 代码映射到特定的工艺库,输出门级网表的 Netlist 【根据 LoadDriver 映射工艺库】。

  • 逻辑综合要基于特定的综合库。不同的库中,门电路基本单元( Standard Cell )的面积、时序参数会不一样。

  • Formal Verification
    逻辑综合和验证之后会进行形式验证,即 Formal Verification,简称为 FM。形式验证也可称之为 等价性检查Equivalence Check )。遍历所有到 ”锥底“ 的点的组合,加入到 ”锥底“ 的点有2个,那么组合有4个:00 01 10 11。这时候就会看门级网表 ”锥底“ 的结果是 4 个中的哪个,而 RTL 的结果是 4 个结果中的哪个,对比是否一样,称之为形式验证。
    形式验证的工具有 CadenceConformalSynopsysFormality
    从功能上( STA 是时序上)对综合后的网表进行验证,常用的方法是等价性检查方法。
    以功能验证后的 HDL 设计为参考,对比综合后的网表功能是否在功能上存在等价性。这样做是为了保证在逻辑综合过程中没有改变原先 HDL 描述的电路功能。

  • STAStatic Timing Analysis
    综合的网表除了要做逻辑等效之外,还需要做静态时序分析。
    电路的结构是 RTL 级别的,有 组合逻辑(与或非门)和 时序逻辑(D触发器)两种。
    对于 时序逻辑Setup / Hold(建立时间 / 保持)要求,组合逻辑 的延时会影响到这两个参数,有可能造成延时太长,造成违例。
    通常有几种解决方法:
    ① 把延迟大的 组合逻辑CELL 驱动换的大一点,让其延时减小。
    ② 在 组合逻辑 中插入 时序逻辑,即添加流水线的方式。
    静态时序分析 也属于验证范畴,主要是在时序上对电路进行验证,检查电路是否存在建立时间( Setup Time )和保持时间( Hold Time )的违例( Violation)。
    STA 以及综合通常都会用脚本实现,用的比较多的脚本是 TCL
    STA Timing 满足,才能得到最终的 Netlist(网表)。

  • DFTDesign for Test
    ——为什么需要DFT
    芯片制作是在一个 wafer 上面完成的,这个 wafer 实现逻辑电路通常会通过光刻、腐蚀等一系列流程,把 CMOS 管子在 wafer 上给做出来。在这个过程中,不可避免地会出现一些问题,比如腐蚀剂的量多了一点、光刻深度多了一点,导致 CMOS 功能可能不是按照我们正常的功能在运行,或者有些走线 stuck、短路等故障,所以需要做 DFT 电路。
    ——如何实现 DFT
    DFT 一般在网表基础上去插入的扫描链,将非扫描单元(如寄存器)变为扫描单元。
    ScanChain
    在芯片回片后,通过 DFTATPGAutomatic Test Pattern Generation )自动产生测试 Pattern,然后通过芯片的 IOPattern 灌入,这样就会把整个芯片里面的 D触发器 串成一个链,再把 Pattern 输出。通过对比输入 Pattern 和 输出 Pattern 以验证正确性,得出是否存在制造缺陷。
    那么,D触发器 一方面要实现要求的逻辑功能,一方面要实现测试( ATE ),此时会在 D触发器 的输入接一个 MUX,这个 MUX 有两路功能,MUX 的使能端是 SEScan enable ),测试的输入端 ATESIScan Input )。示意如如下所示,

在这里插入图片描述

MemBist
做逻辑的话我们会遇到大量的逻辑存储单元( Memory ),数字电路的逻辑单元有两种方式可以实现,一是通过 D触发器 来搭建,但是面积会比较大,二是通过定制 Memory 但是是模拟的 IP。通常对于 D触发器 我们可以进行 ScanChain 这样一个测试,那么对于 Memory 这个模拟 IP,我们会进行 MbistMemory Burn-In Scan Test )测试,Burn-In 表示天生的,即整个 PatternMemory 自己外面包了一层可以自己产生向量的电路,它会对 Memory 所有空间进行一个遍历性测试。它跟 D触发器ScanChain 不一样,ScanChain 是接到芯片的 IO 的,需要通过外面的测试机台来灌激励完成这个测试,但是 Memory 是不需要外部基台灌激励的,它是内部的电路自己产生的测试 Pattern,只需要给它一个使能信号,让它自己测就可以了。

通过 MemBist 这种内建自测试来验证 MEM 是否有缺陷。它跟 SCAN Chain 一样,不需要外部灌激励,相当于在 MEM 外围建立好了测试电路,它的 partner 可以通过测试电路自己产生,所以叫内建自测试。

  • 版图生成自动布局布线PR
    在以上工作没问题后,便可以交给后端团队进行布局布线。比如,一个 chip 通常把模拟放在四周,中间放数字逻辑。

  • 时钟树插入
    STA 是理想时钟网路,到每一个 D触发器clk 是同时的,但实际上是有 Wire Delay 的,甚至有时距离远还会插入 buffer,所以不同的位置 D触发器 的相位是有差异的。
    但是分析时如果想要不同的 D触发器Delay 尽可能地一致,就需要插入时钟树(插入 buffer )。
    由于时钟信号在数字芯片的全局指挥作用,它的分布应该是对称式的连到各个寄存器单元,从而使时钟从同一个时钟源到达各个寄存器时,时钟延迟差异最小。这也是为什么时钟信号需要单独布线的原因。

  • DRC / LVSDesign Route Check
    上述完成只会进行一个 DRC 检查,而 LVS 是跟网表的一个对比。

  • Post_Layout STA
    这个时候时序的信息就是真实的。

  • 生成最终的 GDSII

  • Tape-Out 流片


前后端

在这里插入图片描述
工艺库 中的器件我们都称之为 Standard CELL,是由流片厂商( Fab )提供的。
逻辑库 体现的是逻辑功能的信息。
物理库 体现的是 CELL 的物理特性和电气特性信息,包含了 逻辑库 的逻辑信息。2

在前端阶段,我们使用的是一个逻辑库,CELL 能体现的是某个逻辑功能(与或非)。
在后端阶段,CELL 更多的是体现它的物理特性和电气特性,比如 CELL 的工作电压、负载、电容容抗 CAP、功耗等特性。


前端:RTL -> Netlist

在这里插入图片描述
从设计角度来讲,前端设计的目的是得到芯片的门级网表电路。

  • Design Spec
    设计芯片规格书。
    在设计规格书阶段,需要关注速度(时钟频率能跑多高)和功耗(是否可以达到要求)。速度和功耗也是一对需要平衡的指标,速度高则功耗肯定就较大,因此需要设计来做一个平衡折中( tradeoff )。

  • RTL Coding
    RTLRegister Transfer Level),设计利用硬件描述语言,如 VHDLVerilogSystemVerilog,对电路以寄存器之间的传输为基础进行描述。
    RTL 阶段会做一些低功耗设计,此时更多的是做一个门控( Clock Gating )时钟的工作,主要是通过代码的风格来保证。

  • 语法检查
    除了语法检查,还有代码风格检查。要确保语法没有问题,才进行下一步仿真。
    常用的工具有 NlintSpyglass

  • 功能仿真
    从芯片架构书出来后就可以开始进行功能仿真了。会去写参考模型、测试规划( Test Plan )和分解各个测试点,同时根据架构书的功能点,梳理出要验证哪些功能点,然后根据这些功能点搭建环境。环境搭建完毕后,还需要调试环境。
    功能仿真是为了保证我们的 RTL 代码的设计与芯片规格书保持一致,所以有时候功能仿真也会回头对比,设计出许多验证的边界(这些边界在最开始书写设计规格书期间是体现不出来的),甚至更改设计规格书。此时,会针对设计本身的边界去构造一些用例和测试点。
    RTL 代码出来之后,才会把 RTL 代码( DUT )集成到验证环境下,进行功能验证。先进行模块级仿真( IP Level ),再放在一起进行片级仿真( chip level)。
    当功能验证通过之后,才会正式的去做逻辑综合。在实际工程操作时,会给一些初步的代码给综合工程师。但是仅仅是为了调试环境,并不是正式交付。
    设计和仿真验证都是反复迭代的过程,直到验证结果显示完全符合规格标准。该部分称为前仿真。

  • 逻辑综合
    逻辑综合 指将 HDL 代码映射成描述实际电路的各种元器件以及他们之间的联系关系的门级网表( Netlist )。
    这一阶段中,需要设定时序约束和低功耗约束( Universial Power FOrmat,简称 UPF ),即原本时钟跑的是 100M,但是做逻辑综合时可能按照更高的频率 120M 去约束,留个 20M 的余量。因为逻辑综合这个阶段的时序是一个负载模型,即 CELL 的位置、CELL 的距离、走线延时等信息都不是真实的,而是用一个假的模型来代替,因此会做一些 过约束 以留下一些余量。低功耗约束是描述整个的 power 划分,通过划分在进行综合的时候,也是对综合结果的一个约束。
    逻辑综合完毕后,在上述的两个约束条件下,生成综合时序报告和功耗分析报告,再根据报告来迭代修改约束甚至代码。
    逻辑综合 需要基于特定的综合库,不同的库中门电路基本单元( Standard Cell )的面积、时序参数是不一样的,所以综合库不一样综合出来的电路在时序、面积上是有差异的。

  • 形式验证( Formality
    STA 从时序上对逻辑综合后的网表进行验证。Formality 则是从功能上对其进行验证,进一步保证综合后的网表( Netlist )和 RTL 之间的逻辑一致性。
    常用的是等价性检查方法,以功能验证后的 HDL 设计为参考,对比综合后的网表功能,查看是否在功能上存在等价性,以确保逻辑综合过程中没有改变原先 HDL 描述的电路功能。

  • 逻辑综合后仿真
    简称后仿。这一步并不是验证网表的逻辑功能,这一步更多地是进行调试验证环境,为后端阶段的后仿作准备。
    后端后仿主要是仿一些功耗数据,此时的功耗数据才是更真实的。当然,也会顺便看一下网表是否有一些基础问题。
    通常这个后仿跑的是比较简单的系统级别( System Level )的用例,不是 IP Level 的,是层级比较高的用例。后仿有问题,也会返回修改脚本(约束某条路径,让工具优化的更好些)或者代码(组合逻辑时延修改,让其满足我们的要求。)

  • STAStatic Timing Analysis,静态时序分析)
    套用特定的时序模型( Timing Model ),针对特定电路分析,检查电路是否存在建立时间( Setup Time)和保持时间( Hold Time )的违例,是否违反设计者给定的时序限制( Timing Constraint )。
    如果一个寄存器出现建立时间和保持时间的违例时,是无法正确采样数据和输出数据的,那么芯片的功能肯定会出现问题。

  • DFT 验证
    DFT 验证与上面的功能仿真验证是类似的,但是没有其做的复杂,因为它的电路结构一般比较固定,所以一般直接集成先前项目的 DFT 验证环境直接跑就可以,并且它的功能也没有 RTL 那么复杂。

整个设计流程都是一个迭代的过程,在任何一步中若无法满足要求,都需要重复之前的步骤,甚至重新设计 RTL 代码。


后端:Netlist -> Layout

在这里插入图片描述
后端大部分工作由工具自动完成,前端的 RTL Code 以及功能仿真环境用例,都需要人去分析需求规格,去写测试点,写测试策略测试方案。

  • Auto Place and RouteAPR
    由工具自动化完成自动布局布线。
    尤其在当前大规模集成电路、集成度上亿门级别的背景下,手动来搞肯定是费力不讨好的。工具会自动把 Standard Cell 根据我们限定的范围区域放置好,手动摆一些 Hard 单元在同一个 Die 上(大型芯片),几个硬核一起做,形成多个 sub-chip。如果 chip 规模太大,工具是有点吃不消的,所以会做成小的 hard 单元,把这些小的 hard 单元集成在一起。对于一个 hard 单元,会手动摆一些 MEM、模拟 IP,并将其放置到边上。数字部分用工具自动地布局布线放在周围。
    当然,虽然是自动布局布线,如果设计考虑不周到,也会出现走线拥塞 Congestion。这个时候有可能会去考虑修改 RTL,工具布线布不够,可能会是设计的组合逻辑的密度太大,也可能是设计的电路结构上有一些交叉结构 cross,绕来绕去,导致工具绕不开。
    在自动布局布线后,也会做 形式验证。此时是为了保证布局布线之后的网表与综合的网表逻辑是一致的,而综合的网表逻辑要求与 RTL 逻辑功能一致,这样就能确保布局布线之后的版图逻辑功能与 RTL 一致。

  • Extract RCSTA
    前端的 STA 使用的是理想的时序模型( Timing Model ),即认为线之间是有负载的,同时时钟也会做一个过约束(正常是跑100M,但是在前端中国呢会以120M等更高的频率进行约束),实际上并没有实际的时序信息。实际 Cell 摆在哪里,两个 Cell 之间的走线延时等信息都是没有的,因为这个时候还没有布局布线,两个的位置都是不确定的,自然就没有这些信息。
    当位置确定后,进入后端后再做 STA 时才会真正的去提取这些延时信息( Extract RC )。由于导线本身存在的电阻,相邻导线之间的互感、耦合电容在芯片内部会产生信号噪声、串扰和反射。这些效应会产生信号完整性问题,导致信号电压波动和变化。如果严重,会导致信号失真错误。
    然后再做布局布线之后的 STA,此时时钟的时序路径就是更真实的。包括时钟,也是插了时钟树之后真正的时钟走线,时钟路径的延时也是更真实的。
    如果布局布线之后还有不满足时序的地方,也会退回去前面的阶段进行修改。例如,作 CELL 的替换后看看某些路径或者 CELL 的时序余量( Margin ),如果余量很大,那么就会替换成 CELL 比较小的,比如从 x4 换成 x2。驱动越小,CELL 的延时就会越大,越难满足 SetupHold
    该阶段的低功耗分析主要是替换 CELL 的类型,将时序比较好的 CELL 替换成功耗比较低的 CELL,但是这个阶段的系统角度上的功耗收益一般不大,也就 5% 左右,因此,低功耗设计主要还是依靠最初的设计架构和工艺选项。

  • DRC
    时序 timing 满足之后,接下来会做设计规则检查( Design Rule Check,简称 DRC ),检查连线间距、连线宽度是否满足工艺要求。

  • LVSLayout Versus Schematic
    DRC 没有问题之后,会做一个版图和电路图一致性检查( Layout Versus Schematic,简称 LVS ),相当于整个版图布完之后与 Netlist 的一个对比,类似跟 RTL 对比用了一个 Formality 一样,这里就是进行一个后端要交付的版图与前面进来的网表进行逻辑性功能对比。
    也会再做时序收敛( Timing Signoff ),检查短路和开路等电器规则违例。只要有任何一个点的 Timing 不满足,那么前面的逻辑功能做的再好,最后芯片也还是会有缺陷。功能上需要保证逻辑性( Logic ),性能傻姑娘的 Timing 确保物理实现( Timing 是对 D触发器CELL 的要求,即对物理器件的要求。)

  • 后仿真
    后仿真更多的是 仿功耗,看电源的完整性。PR 会把电源网络加入进去,看电源网络,诸如 IR Drop 是否过大,某处 Standard Cell 某处的密度过大,导致散热不均,时间长了会把芯片烧毁,对器件寿命有影响,加速器件老化。


示例:基于标准单元(STD CELL)的ASIC设计流程

在这里插入图片描述

  • 网表( Netlist
    在电子线路设计中,网表是用来描述电路元件相互之间连接关系的。一般来说它是遵循某种比较简单的标记语法的文本文件。

  • GDSII 流格式:
    GDSII 是一个数据库文件格式。它用于集成电路版图的数据转换,并成为事实上的工业标准。
    GDSII 是一个二进制文件,其中含有集成电路版图中的平面几何形状、文本或标签,以及其他有关信息可以由层次结构组成。
    GDSII 数据可用于重建所有或部分的版图信息,可以用来制作光刻掩模版。



指标

以下的一些指标可以指示当前的设计是否足够好:

指标说明
物理实现1. 制作工艺(代工厂及工艺尺寸)
2. 裸片面积( DIE 大小,DIE 由功耗、成本、数字/模拟面积共同影响 )
3. 封装(封装越大、散热越好、成本越高)
性能指标1. 速度(时钟频率)
2. 功耗
功能指标1. 功能描述;
2. 接口定义;

参考链接


  1. 数字IC前端后端的区别,数字IC设计流程与设计工具 ↩︎

  2. 数字IC设计流程 ↩︎

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

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

相关文章

通过串口控制LED-单片机

1.输入数据控制LED灯状态00-ff。同时会接收输入的数据。 中断和定时器配置 void UART_Init() //4800bps11.0592MHz { SCON0X50;//sm00,sm11,ren1 PCON & 0x7F; //波特率不倍速 TMOD & 0x0F; //设置定时器模式 T1 TMOD | 0x20; …

【人工智能与机器学习】决策树ID3及其python实现

文章目录 1 决策树算法1.1 特征选择1.2 熵(entropy)1.3 信息增益 2 ID3算法的python实现总结 1 决策树算法 决策树(Decision Tree)是一类常见的机器学习方法,是一种非常常用的分类方法,它是一种监督学习。常见的决策树…

ModaHub魔搭社区:向量数据库MIlvus服务端配置(一)

目录 服务端配置 配置概述 Milvus 文件结构 配置修改 编辑配置文件 运行时修改 server_config.yaml 参数说明 cluster 区域 general 区域 network 区域 服务端配置 配置概述 以下配置说明可同时应用于单机或者分布式场景。 Milvus 文件结构 成功启动 Milvus 服务后…

加速优化WooCommerce跨境电商网站的15种简单方法

Neil Patel和 Google所做的研究表明,如果加载时间超过三秒,将近一半的用户会离开网站。页面加载时间每增加一秒(最多5秒),您的收入可能就会减少。在本教程中,我们将学习如何优化加速WooCommerce商店。 目录…

【20220605】文献翻译:高维数据动态可视化研究综述

A Review of the State-of-the-Art on Tours for Dynamic Visualization of High-dimensional Data Visualization of High-dimensional Data) Lee, Stuart, et al. “A Review of the State-of-the-Art on Tours for Dynamic Visualization of High-dimensional Data.” arXiv…

【书评】一本Android系统性能优化的新书

Android性能优化,是一个合格的Android程序员必备的技能,现如今几乎所有的Android面试内容都会或多或少涉及性能优化方面的话题。 学习Android性能优化可以让我们在简历上展示自己的专业技能和项目经验,证明自己具备高效开发和优化Android应用…

java jwt生成token并在网关设置全局过滤器进行token的校验

1、首先引入jjwt的依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>2、编写生成token的工具类 package com.jjw.result.util;import com.jjw.res…

【UnityDOTS 三】Component的理解

Component的理解 文章目录 Component的理解前言一、托管Component与非托管Component1.非托管Component2.托管Component 二、各功能的Component三、在Editor中的Component的区分总结 前言 Component作为ECS中承载数据的结构&#xff0c;了解他相关内容是非常必要的&#xff0c;…

基于Jsp+Servlet+Mysql学生信息管理系统

基于JspServletMysql学生信息管理系统 一、系统介绍二、功能展示1. 系统的部署2.导入数据库3. 系统介绍 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型&#xff1a;Java web项目/Java EE项目/ 项目名称&#xff1a;基于sevelet的学生信息管理系统 当前版本&…

用Python制作一个简单时间、日期显示工具

Python是一款强大的编程软件&#xff0c;可以轻松实现我们的多种开发需求。今天我们拿Python中自带的tkinter来开发一个时钟显示器。如下图所示&#xff1a; 时间显示器 一、编程要求 用tkinter写一个漂亮、五彩的时间显示器&#xff0c;要求显示时、分、秒&#xff0c;即时变…

【JAVA】十分钟带你了解java的前世今生

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【初始JAVA】 文章目录 前言JAVA介绍诞生&#x1f52c;名字与图标&#x1f916;发展&#x1f6e9;️未来&#x1fa84; 前言 玩过我的世界的朋友想必对JAVA以及它的图标都很熟悉&#xff0c;在游戏开始画面…

Java程序所在机器性能监控

Java程序所在机器性能监控 背景 问题单&#xff1a;程序故障&#xff08;OOM、网络不通、操作卡顿&#xff09;问题单&#xff1a;服务连接不上需求 1、监控本地机器性能 告警日志UI2、监控服务接口服务 告警日志UI方案 固定间隔获取机器网络CPU内存数据设置阈值&#xff0c;告…

自定义starter实现接口或方法限流功能

本文的思路是利用AOP技术自定义注解实现对特定的方法或接口进行限流。目前通过查阅相关资料&#xff0c;整理出三种类型限流方法&#xff0c;分别为基于guava限流实现、基于sentinel限流实现、基于Semaphore的实现。 一、限流常用的算法 1.1令牌桶算法 令牌桶算法是目前应用…

OpenCV(视频加载与摄像头使用)

目录 1、VideoCapture类 2、视频属性get() 3、视屏文件保存 1、VideoCapture类 2、视频属性get() 3、视屏文件保存 //视频的读取保存 int test3() {VideoCapture video;//video.open("F:/testMap/lolTFT.mp4");//读取视频video.open(0);//读取摄像头if (!video.i…

linux docker安装

一、Linux安装docker 1.1 前提 要求Linux内核&#xff08;kernel&#xff09; 版本大于等于3.8。&#xff08;kernel version >3.8&#xff09;。 查看当前系统内核版本 uname -a | awk {split($3,arr,"-");print arr[1]} 1.2 linux 安装docker Centos安装doc…

【数据结构与算法】7、队列(Queue)的实现【用栈实现队列】

目录 一、队列介绍二、使用 LinkedList 实现队列三、LeetCode&#xff1a;用【栈】实现队列(1) 老师讲之前我自己的实现&#xff08;Correct&#xff09;(2) 实现思路(3) 代码实现 四、jdk 的 Queue五、双端队列&#xff08;Deque&#xff09;六、循环队列(1) 分析(2) 入队(3) …

Linux--运行指令的本质

本质&#xff1a; ①找到它 which的作用就是找到它 ②运行它 示例&#xff1a; ①告诉系统要运行的指令&#xff0c;然后系统去查找它的路径并运行它 ②自己告诉系统自己要运行的路径&#xff0c;然后系统运行它 注意&#xff1a;a.out不能运行&#xff0c;而./a.out能运行…

MES是如何帮助企业提高生产效率的

大多数提高制造生产效率的系统都是从详细分析公司的制造流程和运营开始的。这样做的目的是是为了消除浪费的不增值的流程&#xff0c;将有价值的流程系统化&#xff0c;实现生产自动化并增强增值操作。 在自动化流程方面&#xff0c;实施制造执行系统&#xff08;MES&#xff…

HTML5 游戏开发实战 | 俄罗斯方块

俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏&#xff0c;它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏看似简单但却变化无穷&#xff0c;游戏过程仅需要玩家将不断下落的各种形状的方块移动、翻转&#xff0c;如果某一行被方块充满了&…

发送邮箱验证码【spring boot】

⭐前言⭐ ※※※大家好&#xff01;我是同学〖森〗&#xff0c;一名计算机爱好者&#xff0c;今天让我们进入学习模式。若有错误&#xff0c;请多多指教。更多有趣的代码请移步Gitee &#x1f44d; 点赞 ⭐ 收藏 &#x1f4dd;留言 都是我创作的最大的动力&#xff01; 1. 思维…