打造IC人才
科技生态圈

数字ic设计/验证需要学什么?入门全流程介绍!

发布时间:2022-09-28

来源:IC修真院

想要入门数字ic设计工程师,对于数字IC设计工程师不了解,不知道如何下手,本文给大家详细介绍数字ic设计全流程,帮助想要入门前端,ic验证的朋友,少走弯路,学习更多有用的技术。

一、前言想起一句话叫“一叶障目不见泰山”,所以要想对一个事物有全面的认识,必须得了解它的整体面貌。学习数字IC验证也是同理,我们要清楚了解数字IC验证在数字IC设计全流程中所处的位置!

本节我们将要学习以下几个方面的内容

1、数字IC设计的「流程」?

2、数字IC设计流程中每个阶段主要「做哪些工作」?

3、数字IC设计流程中每个阶段「使用的主要EDA工具有哪些」?

二、集成电路产业链

399b45e73e8fcbfa89adad568d9a151b

3-1

三、常见的SoC芯片架构图

「注」:上节课有详细介绍:【数字IC验证快速入门】2、通过一个SoC项目实例,了解SoC的架构,初探数字系统设计流程

SoC芯片组成,四大部分:

1、核(CORE)

2、存储(MEM)

3、外设(IO)

4、总线(BUS)

SoC芯片组成

3-2

四、数字IC设计流程

数字ic设计流程

3-2

1、确定项目需求

确定芯片的具体指标:功能、功耗、性能、IO外设等

市场来提出需求,研发来评估需求

2、系统级设计

用系统建模语言对各个模块描述

由系统工程师完成

3、前端设计【逻辑】

RTL设计、RTL仿真(EDA仿真验证)、硬件原型验证(FPGA硬件原型验证)、电路综合(RTL代码映射(MAP)成门级网表(STD CELL))

4、后端设计【物理】

版图设计、物理验证、后仿真等

五、数字IC设计具体指标

1、物理实现

制作工艺(代工厂及工艺尺寸)

裸片面积(DIE大小,DIE由功耗、成本、数字/模拟面积共同影响)

封装(封装越大,散热越好,成本越高)

2、性能指标

速度(时钟频率)

功耗

3、功能指标

功能描述

接口定义

六、基于标准单元(STD CELL)的ASIC设计流程

ASIC设计流程

3-3

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

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

七、Digital IC Design Flow(总结版)

Digital

3-4-1

Digital2

3-4-2

1、Marketing Request:市场人员提出需求,研发人员参与讨论需求的可实现性讨论,毕竟有些东西是矛盾,如:性能与功耗,要求性能高,功耗低,这显然是矛盾的,是需要评估的,是否可以达到预期要求。需求确定好之后,再去改就会比较复杂,所以在这个阶段必须确定好,后续基本不动!

2、Artitecture Spec.:需求确定好之后,会去写架构的文档,包括两个部分:整体架构规格书(Top Artitecture Spec.)和具体功能规格书(Project Function Spec.)。其中,整体架构规格书指的是要有什么模块,诸如:CPU、SRAM、DMA、AMBA等。具体功能规格书指的是具体的指标,诸如:DMA模块有多少个通道、总的时钟频率多少兆、支持的模式有几种等。

该部分通常用架构工程师(Artitecture Engineer)完成,在有一些公司也称之为系统工程师(System Engineer,简称SE)。该类工程师一般是较为资深的工程师。

3、Arch/Algorithm Emulation:设计好架构之后,就可以做架构/算法方面的仿真。该部分通常使用的工具是C/C++/MATLAB。

该部分通常用算法工程师(Algorithm Engineer)完成。

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

5、RTL Coding:在上一部分的设计规格书编写完成之后,就可以进行编程了。通常有VHDL/Verilog/SystemVerilog三种编程语言可供选择!

①、IP Level RTL Coding:先有小的IP,才能有大的SoC。前面做设计是由顶向下,先有架构再有各个模块。但是实现的时候是由底向上的,先有最小的IP级别的代码,才会集成更高层次的代码。

②、IP Level RTL Simulation和IP Level Verification:设计好IP Level代码之后,我们就可以就行仿真验证了,小的IP的话通常是Design Engineer自己做的,但是当IP比较大的时候,就会有专门的验证人员来做!在验证时,我们会用到一些脚本,如Makefile。用到的仿真工具,主要有三大EDA厂商的:Cadence:Incisive;Synopsys:VCS;Mentor: QuestaSim。「其中VCS最为主流」,QuestaSim用在小的FPGA开发上面,因为它的功能不是很强大!验证用到的语言有:C/C++/SystemC/SystemVerilog/UVM几种。在做验证的时候也会做验证的Spec文档,想清楚要验什么哪些点。完毕之后才会搭环境,跑用例!「验证的核心是:验证的完备性」,所以要清楚IP Level这个目标模块的DUT,要测的功能点都有哪些,得分解全。【以后验证工程师也是从事这一块的工作,初级验证工程师一般都是做IP Level Verification】

③、Unit/Chip Level RTL Simulation和Unit/Chip Level Verification:上面IP Level没有问题后,合成大模块Unit/Chip Level,再来做验证!这一部分的验证工程师一般叫:Full Chip Verification Engineer,需要工作个4~5年才会让做!

通常,Design Spec和RTL Coding这两部分工作,都是由Design Engineer一个人完成的!对于RTL Coding部分,又可细分为以下三个部分,关系见下图:【下图中标注砖红色部分是验证工程师所处的位置!】

Design Engineer

3-4-3

6、Logic Synthesis和Gate Level Verification:Coding 设计和验证没有问题后,此时会进行综合,会综合出网表。同时也会对门级网表做验证,称之为Gate Level Verification。这个阶段更主要的是调试我们的验证环境,为后端物理实现之后的网表做准备。当前阶段的网表含有的信息较少,物理参数没有,跑起来会更快,调试会方便一点。网表「逻辑功能正确性的验证是通过FM去保证的」,并不是Gate Level Verification去保证的,这一点要特别注意!关于FM下面也会介绍到。对于综合工具,当前主流的是Synopsys:Design Compiler(DC)。

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

逻辑综合需要基于特定的综合库,不同的库中,门电路基本标准单元(Standard Cell)的面积,「时序参数会不一样」!

7、Formal Verification:逻辑综合和验证之后,会进行「形式验证」,即Formal Verification,简称为FM。形式验证也可称之为等价性检查(Equivalence Check)。遍历所有到“锥底”的点的组合,假如到“锥底”的点有2个,那么组合有4个:00 01 10 11。这时候就会看门级网表“锥底”的结果是4个中哪个,而RTL的结果是4个结果中的哪个,对比是否一样,称之为形式验证!形式验证的工具有:Cadence:Conformal;Synopsys:Formality。

从功能上(STA是时序上)对综合后的网表进行验证。常用的方法是等价性检查方法,以功能验证后的HDL设计为参考,对比综合后的网表功能,他们是否在功能上存在等价性。这样做是为了保证「在逻辑综合过程中没有改变原先HDL描述的电路功能」。

8、STA(Static Timing Analysis):综合的网表除了要做逻辑的等效之外,还需要做静态时序分析!电路的结构是RTL级别的,有组合逻辑(与或非门)和时序逻辑(D触发器)两种。对于时序逻辑有Setup/Hold(建立时间/保持)要求,组合逻辑的延时会影响到这两个参数,有可能造成延时太长,造成违例。通常有几种解决办法:①、把延迟大的组合逻辑的CELL驱动换的大一点,让其延时减小。②、在组合逻辑中插入时序逻辑,即添加流水线的方式!

静态时序分析,这也属于验证范畴,它主要属于验证范畴,它主要是在时序上对电路进行验证,检查电路是否存在建立时间(Setup Time)和保持时间(Hold Time)的违例(Violation)。

STA以及综合通常都会用脚本实现,用的比较多的脚本是TCL!

STA Timing满足,才能得到最终的Netlist。

9、DFT(Design For Test):wafer在制作过程中,因为工艺参数的偏差,造成功能不正确。这个时候会在前端进行一个DFT设计,比如在电路中插入SCAN Chain,这样的话可以通过外部灌激励,把内部所有的时序路径作为一个链串起来!比如:外部灌1010,对比输出序列与预期序列,验证正确性,得出是否有制造缺陷!当然还可以通过MemBist这种内建自测试,验证MEM是否有缺陷,它跟SCAN Chain一样,不需要外部灌激励,相当于在MEM外围建立好了测试电路,它的partner可以通过测试电路自己产生,所以叫内建自测试!DFT一般是在网表基础上去插入的!

10、版图生成,自动布局布线(PR):以上工作没问题后,便可以交给后端团队进行布局布线!如:CELL放在哪个位置,一个chip通常把模拟放在四周,中间放数字逻辑!

11、时钟树插入:STA是理想时钟网路,到每一个D触发器的clk是同时的,但实际上是有Wire Delay的,甚至有时距离远还会插入buffer,所以不同的位置D触发器的相位是有差异的!但是分析的时候,不同D触发器,想让Delay尽可能的一致,这时候就需要插入时钟树(插入buffer)。

12、DRC/LVS(Design Route Check):上述完成只有会进行一个DRC检查,而LVS是跟网表的一个对比。

13、Post_Layout STA:这个时候时序的信息就是真实的,时钟、CELL等等的时序信息是真实的,最终的STA,最终的timing分析!

14、生成最终的GDSII

15、Tap-Out流片

八、数字IC设计全流程总览图

数字IC设计全流程总览图

3-4

九、前端设计深入(RTL -> Netlist)

RTL -> Netlist:RTL代码到网表

RTL代码到网表

3-5

Design Spec.:写设计文档

RTL Coding:写代码

RTL(Register Transfer Level)设计利用硬件描述语言,如VHDL/Verilog/SystemVerilog,对电路以寄存器之间的传输为基础进行描述

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

功能仿真(「迭代的过程」):使用诸如VCS/QuestaSim等EDA工具,编写测试用例,去验证代码是否满足预期「功能」。该功能验证是前端中的验证,不同于后期芯片回来之后的「制造验证」(DFT验证)。有BUG(可能是DUT的bug,也可能是验证环境TB的bug),在迭代修改!

逻辑综合:仿真基本功能没有问题后,进行逻辑综合,将RTL的描述映射成门级网表。

将RTL级设计中所得的程序代码翻译成实际电路的各种元器件以及他们之间的连接关系,可以用一张表来表示,称为门级网表(Netlist)

形式验证(FM):综合后的网表和RTL功能是否等价,

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

STA(Staic Timing Analysis,静态时序分析):套用特定的时序模型(Timing Model),针对特定电路分析及其是否违反设计者给定的时序限制(Timing Constraint)。

在时序上对电路进行验证,检查电路是否存在建立时间(Setup Time)和保持时间(Hold Time)的违例(Violation)。

整个ASIC设计流程都是一个「迭代」的过程,在任何一步不能满足要求,都需要重复之前的步骤,甚至重新设计RTL代码。模拟电路设计的迭代次数甚至更多!

十、后端设计深入(Netlist -> Layout)

Netlist -> Layout:网表到版图

网表到版图

在这里插入图片描述

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

Extrat RC和STA:前面综合去STA的话,用的是一个理想的时序模型(Timing Model)去做的,这个实际上并没有实际的时序信息,实际CELL摆在哪里,两个CELL之间的走线延时等信息都是没有的,因为这个时候还没有布局布线,两个的位置都是不确定的,自然没有这些信息。当位置确定之后,才会真正的去提取这些延时信息(Extrat RC) ,然后再做布局布线之后的STA,此时的STA相较于综合时的STA,拿到的延时信息就是更真实的!包括时钟,也是插了时钟树之后真正的时钟走线,时钟路径的延时也是更真实的。如果布局布线之后还有不满足时序的地方,也会退回去前面的阶段进行修改。

时序成功之后,这时候才是最真实的,前面综合的话相当于是一个负载模型,相当于认为线之间是有一个负载的,同时时钟也会做一个“过约(正常要跑100M,但是综合以120M等更高的频率进行约束)”,因为这个时候线负载是按照一个理想模型的,到了后端之后,则会按照真实的100M去跑了,线负载跟真实之间有一点差异的的话,那么还有20M的余量来消除gap。

DRC:时序timing满足之后,接下来会做设计规则检查(Design Rule Check,简称DRC),这个也是工具自动完成的!

LVS:DRC没有问题之后,会做一个版图电路图一致性检查(Layout Versus Schematic,简称LVS),相当于整个版图布完之后与Netlist的一个对比,类似跟RTL对比用了一个FM一样,这里就是进行一个:「后端要交付的版图与前面进来的网表进行逻辑性功能对比」。

后仿真:这里更多的是「仿功耗」,看「电源的完整性」,PR会把电源网络加入进去,看电源网络诸如「IR DROP」是否过大,某处std cell某处的密度过大,导致散热不均匀,时间长了会把芯片烧毁,对器件寿命有影响。

后端大部分工作由工具自动完成,前端的RTL Code以及功能仿真环境用例,都需要人去分析需求规格,去写测试点,写测试策略测试方案,后端来讲主要是一个Netlist,是一个比较死的东西,大部分工作都是由工具完成!

十一、VLSI设计流程(再次总结)

VLSI设计流程(再次总结)

在这里插入图片描述

首先再来详细介绍下「前端设计中的DFT实现」:DFT实现是在网表中插入,主要做两件事情:①、插ScanChain ②、插MBist。为芯片流片之后的「制造测试」做准备,芯片制作是在一个wafer上面完成的,这个wafer实现逻辑电路通常会通过光刻、腐蚀等一系列流程,把CMOS管子在wafer上给做出来。这个过程不可避免的出现一些问题,比如腐蚀的剂量多了一点、光刻深度多了一点,导致CMOS功能就可能不是按照我们正常的功能在运行了,或者有些走线stuck,短路等故障,所以需要做DFT电路。

①、 ScanChain :在芯片回来之后,通过DFT的ATPG(Automatic Test Pattern Generation)自动产生测试Pattern ,然后通过芯片的IO,把 Pattern 灌进去,这样也就会把整个芯片里面的D触发器串成一个链,然后再把Pattern 输出。那么D触发器一方面要实现要求的逻辑功能,一方面要实现测试(ATE),此时会在D触发器的输入会接一个MUX,这个MUX有两路这两路功能。MUX的使能端是SE(Scan Enable),测试的输入端ATE是SI(Scan Input)。

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

VLSI设计流程图

从上述的《VLSI设计流程图》中我们可以看出,整个ASIC设计与实现的「每个阶段都是需要做相应的验证工作」的!甚至包括设计规格书书写完毕后也要进行一个Review环节进行验证。整个设计流程是先有市场需求,这也是最主要的,芯片能不能两场,能不能卖的好,没有市场需求评估,芯片做的再好也无济于事。接下来是编写芯片架构规格书,紧接着从以下三个方面并行开展工作:I、功能验证;II、ASIC设计与实现;III、性能指标

I、功能验证

在「功能」上确保每一步设计与实现的流程转换时,能够保证它的逻辑不要变形,所以在《II、ASIC设计与实现》各个阶段都对应有不同的验证手段和工作。

本专栏主要学习的验证是图中的「功能仿真」部分,但是这个功能仿真并不是等代码出来才进行,而是从架构书出来就有了,会去「写参考模型、测试规划(Test Plan)和分解各个测试点」,同时根据架构书的功能点,梳理出要去验证哪些功能点,然后根据这些功能点搭建环境,搭建完毕之后,还需要把环境给调试好。这个时候,RTL代码出来之后,才会把RTL代码(DUT)集成到验证环境下,进行功能验证,「当功能验证通过之后,才会正式的去做逻辑综合」。但是在实际工程操作的时候,会给一些初步的代码给综合工程师,但是那个综合仅仅是为了调试环境,并不是正式交付。

「功能仿真」是保证我们的RTL Code与规格的Spec保持一致,所以有时功能仿真也会回头对比甚至更改设计规格书.,因为此时会设计出很多验证的边界,这些边界是在最开始书写设计规格书期间是体现不出来的,此时会针对设计本身的边界去构造一些用例和测试点。

「形式验证」是进一步保证综合后的Netlist与RTL之间的逻辑一致性,所以每一步转换都要做一些验证性的工作,保证每一步转换的逻辑是等效的,以防出现问题,影响后续环节!

另外逻辑综合后也会做一些「门级仿真」,但是这个门级仿真只是跑少量的用例,不会通过它来保证整个的逻辑功能,因为综合网表跑起来很慢,网标级的描述即门级描述,基于门级的话,DUT信息就很多了!要EDA工具去跑的话,会非常慢!

接下来是「DFT验证」,确保DFT本身的电路是没有问题的,DFT验证与上面的功能仿真验证时类似的,当然DFT的验证没有功能验证做的那么复杂,因为它的电路结构一般比较固定,所以一般直接集成先前项目的DFT验证环境直接跑就可以,并且他的功能也没有RTL那么复杂。

接下来当进行自动布局布线后,也会去做「形式验证」。此时是为了确保布局布线之后的网表与综合的网表逻辑是一致的,而综合的网表逻辑要求与RTL逻辑功能一致,这样就能确保布局布线之后的版图逻辑功能与RTL一致。

同时自动布局布线后,也会去做「后仿」。但是此时最主要的并不是为了看我们的功能,而是看我们的「功耗和电源分布」,是否有过热的点,IR DROP是否可以满足等。

最后还有一个「版图验证(LVS)」,保证最终要流片的东西,与布局布线的网表功能是一致的。

III、性能指标

更多的是从「性能」的维度,来看看我们在《II、ASIC设计与实现》的每个阶段,需要去做哪些事情。

在设计规格书阶段,需要去关注速度(时钟频率能跑多高)和功耗(是否可以达到预期要求),当然了,速度和功耗也是一对tradeoff(性价比)的东西,速度高,功耗肯定就比较大。这就需要设计来做一个平衡折中(tradeoff)。

在RTL Coding阶段,会去做一些低功耗设计,当然在设计规格书阶段也会把(低)功耗的策略考虑进去,此时更多的是做一个门控时钟的工作(Clock Gating),主要是通过「代码的风格」来保证!

在逻辑综合阶段,就会涉及到时序约束和低功耗约束(Universal Power Format,简称UPF),即本来时钟是跑的100M,但是综合的时候可能会按照更高的频率120M去约束,会留个20M的余量,因为综合这个阶段的时序是一个负载模型,即CELL的位置、CELL的距离、走线延时等信息都不是真实的,这个时候是用的一个假的模型来代替的,很简单的模型。所以会做一些「过约束」,留下一些余量。

低功耗约束(UPF)是描述整个的power划分,通过划分在进行综合的时候,也是对综合结果的一个约束。

综合完毕后,在上述两个约束条件下, 生成综合时序报告和功耗分析报告。根据报告再去迭代修改约束甚至代码。

对于后端自动布线的阶段也会做静态时序分析,主要是针对不同的阶段。一个时序分析是在Pre-Layout,即Layout之前;一个时序分析是在插了时钟树(Clock Tree,简称CTS)之后,此时时钟的时序路径就更真实了;最后一个时序分析是在Post-Layout,即版图固定好了。同时也会进行一个低功耗的分析,在后端做低功耗更多的是一个CELL的替换,看看某些路径或CELL的时序余量(Margin),如果余量(margin)很大,那么会替换成cell比较小的,如:从“x4”换成“x2”。驱动越小,CELL的延时会越大,对于setup hold的满足就会越困难。通过timing分析发现它的时序是有余量的,我们将其降成“x2”也可以满足的话,我们就换替换cell。即该阶段的低功耗分析主要是替换cell的类型,将时序路径比较好的cell替换成功耗比较低的cell。但是这个阶段的功耗收益一般不大,能有5%。所以低功耗设计的最主要的还是最初的设计架构,工艺选型,Power Format的划分,需求的优化控制,这些对功耗影响很大。对于后端阶段,虽然也会去做低功耗,但是从系统角度来讲,优化的收益比例不是那么大。

对于版图的话,会再去做最后的时序收敛(Timing Signoff),所以Timing这个东西其实很关键,因为只要有任何一个点Timing不满足,那么前面逻辑功能做的再好,最后芯片还是有缺陷。所以除了功能要OK,性能上的Timing也要OK。功能上保证了逻辑性(Loigc),Timing保证了物理实现。【Timing是D触发的CELL的要求,即物理期间的要求】

最后也会看功耗/IR Drop的分析,主要看IR Drop,即不能有过热的点,IR Drop过大,会导致整个散热不均匀,器件长期运行会烧毁或缩短寿命,加速它的老化等。

最后再来看一下《VLSI设计流程图》最右侧的工艺库

工艺库中的器件,我们都称之为std cell,这个工艺库是流片厂商(Fab)提供的!

在前端阶段我们使用的是一个逻辑库,CELL能体现的是某个「逻辑」功能(与或非)。

在后端阶段,CELL更多体现的是它的「物理」特性和电气特性,如CELL的工作电压、负载、电容容抗cap、功耗等特性。当然这里物理库是包含了逻辑库的逻辑信息的!

十二、复习回顾

1、详细介绍数字集成电路设计的流程?

本节讲述了一个简单流程、一个复杂流程、以及前端和后端的详细展开、最后还有一张总结的图。

2、详细介绍数字设计流程中每个阶段主要做哪些工作?

3、详细介绍数字设计流程中每个阶段使用的主要EDA工具有哪些?

4、画出数字IC电路设计流程以及使用的相关EDA工具?

5、画出SoC芯片架构图,熟悉该芯片的应用场景和数据流?


推荐阅读

换一换