乐于分享
好东西不私藏

芯片人看AI:我做了一个月ECO,一个工具让我重新思考了整个流程

芯片人看AI:我做了一个月ECO,一个工具让我重新思考了整个流程

约12000字 · 阅读约22分钟

有一次做ECO,我花了整整一个月。

不是那种改一行代码跑一遍flow的轻松活。是那种bug列表排了一串,三四个bug要合在一起改,改完之后手动做ECO,每一个patch都要反复确认逻辑对不对、等价性能不能过、后端能不能接的苦差事。

而且踩了一堆坑。

版本用错了,改了半天发现基线不对,等于白干。逻辑找错了,定位的module根本不是出bug的地方,改了等于没改。最折腾的一次是等价性检查的SVF文件用错了,工具报了一堆diff,我花了一整天排查,最后发现不是逻辑的问题,是我自己配置文件搞错了。

一个月。三四个bug。改完验证完归档完。

ECO这三个字,做过的人都知道,那是流片前最煎熬的日子。

后来我实在受不了了,开始折腾工具。试了一圈之后,找到一个国产ECO工具,彻底改变了我对ECO这件事的理解。然后我又在这个工具之上搭了一套Agent系统,把整个ECO流程从「人扛」变成了「Agent扛」。

但在聊这些之前,先说说ECO到底是什么,为什么这么痛苦。


▶ TL;DR

  • ECO是芯片流片前最后的修改环节,改一行RTL可能牵一发动全身,是整个流程里最煎熬的阶段
  • 国产ECO工具ezeco(奇捷科技/Easy-Logic)用GTECH flow替代传统RTL对比,从根源上改变了ECO的精度和效率。Stage-based flows覆盖从1-stage到4-stage的设计场景,Learning ECO让手工修改也能自动传递
  • 我基于ezeco搭了一个Design Agent的雏形,Web界面+多参数并行+实时监控,用AI辅助开发把周期压缩了一半
  • 下一步是真正的Agent编排,Master-Agent架构,五个Agent各司其职,不同角色用不同的LLM,三级降级兜底。这不是锦上添花,是生产力的代差

一、ECO到底是什么?为什么这么痛苦?

先给不了解芯片的朋友解释一下。

芯片设计的流程很长。从写RTL代码到最终交付版图给工厂生产,中间要经过综合、DFT插入、布局布线、时序分析、物理验证等十几个步骤。每一步跑完都会产出一堆数据文件,后面的步骤依赖前面的结果。整个链条像一条流水线,任何一环改动,后面都要跟着动。

ECO的全称是Engineering Change Order,工程变更指令。就是在后端已经做到一定程度之后,你需要改前端RTL的逻辑。可能是修bug,可能是改功能,可能是客户临时改了需求。

但问题是,后端已经跑完了。你改了RTL,理论上应该从头重跑一遍整个流程。但时间不允许,流片的deadline就在那卡着。所以你需要做的是,只改必要的地方,让后端的增量修改尽可能小。

ECO就是在已完工的房子上改装修,而不是拆了重盖。

痛苦在哪?三个字,定位、修改、验证。

定位。bug的现象你知道,但出bug的module在哪?光定位这个环节,有时候就要花好几天。复杂的芯片层级很深,信号从顶层传到底层可能经过十几级例化,你要一层一层剥开去找。

修改。找到了怎么改?改多了后端不接,patch太大了布局布线要重跑。改少了bug没修干净。要找到那个「刚刚好」的修改量,非常考验经验。而且你要考虑的不只是逻辑对不对,还要考虑timing能不能收敛、scan chain会不会断、DFT覆盖率会不会掉。

验证。改完了得证明你没改出新的bug。等价性检查,对比修改前后的网表,确认逻辑功能完全一致。这一步出了问题最抓狂,diff报出来的是一堆门级的比较结果,你得一个一个去看。而且这里有一个很tricky的事情,你修改的只是SYN阶段的网表,但后端用的是DFT网表和P&R网表。所以你得把修改从SYN一路传递到DFT再到P&R,每一个阶段都要做等价性检查。

这引出了ECO里一个很核心的概念,stage-based verification。你的芯片设计流程保留了几级网表,ECO就要分几个阶段来做。最简单的是2-stage,SYN网表和P&R网表。复杂一点的是3-stage,SYN、DFT、P&R三级。最复杂的是4-stage,加上Floorplan网表。ECO必须按顺序做,先SYN再到DFT再到P&R,不能跳级。每一级的等价性检查通过了,才能进入下一级。

我那次一个月的ECO,就是定位、修改、验证三个环节反复循环。定位错了重来,修改大了返工,验证报diff排查到半夜发现是SVF文件搞错了。

二、ezeco:一个重新定义ECO的工具

那个月之后我做了一个决定,不能再这么干了。

做ECO的工程师都知道,市面上的ECO工具就那么几个,大厂的有,国产的也有。但实际用下来,各有各的痛点。有的跑时间太长,有的自动化程度不够还需要手工辅助,有的跑出来的patch不理想甚至动到不该动的地方。

后来我接触到了ezeco,奇捷科技(Easy-Logic Technology)的ECO工具。这是一家2014年成立的EDA公司,总部在香港,研发中心在深圳,专门做functional ECO。国产EDA公司不少,但专门深耕ECO这一个点做深做透的,我了解的不多。他们从2018年拿到第一个订单,到现在已经有超过40家客户,包括龙芯、飞腾这些国内头部芯片公司。

用了之后我的感受是,这个工具不只是在做ECO这件事,它重新定义了ECO应该怎么做。下面我详细拆解。

2.1 GTECH Flow:从根源上改变ECO的精度

这是我觉得ezeco最聪明的设计,也是它跟其他ECO工具最大的区别。

传统的ECO工具是怎么找ECO点的?对比修改前后的RTL。但这里有个问题,RTL经过综合工具优化之后,门级网表的结构跟RTL已经面目全非了。综合工具做了大量的优化,寄存器合并、逻辑重定时、资源共享,RTL里的一行代码在网表里可能对应完全不同的结构。所以直接对比RTL来找ECO点,准确度有限。

ezeco换了一个思路。它对比的不是RTL,而是GTECH netlist。

GTECH是RTL综合过程中elaboration之后直接生成的中间网表,未经综合工具任何优化。你可以把它理解为RTL的「直译」版本,结构跟RTL一一对应,没有经过任何变换。Old GTECH和New GTECH对比出来的差异,就是RTL修改在门级最真实的映射。2024年DAC上ezeco专门展示了这个GTECH flow。

这样做的好处是什么?对比出来的ECO点更准确,也更符合手工修改的思维方式。而且GTECH对比不受结构差异的影响,比如不同的clock gating tree、不同的pipeline结构,这些在传统网表对比里会造成大量噪声,但在GTECH层面不存在这个问题。

还有一个实际的好处。传统flow里你需要同时提供old RTL、new RTL、old netlist、new netlist。GTECH flow里你只需要提供old GTECH和new GTECH,输入更简洁,出错的机会更少。

2.2 Stage-Based Flows:覆盖所有设计场景的内置Flow

ezeco提供五种内置的stage-based ECO flow,每种对应一种常见的ASIC设计场景。这个设计思路跟我一直讲的Flow方法论不谋而合,好的flow应该是标准化的、可复用的、降低人为错误的。

1-stage ECO flow。适合小规模数字电路,比如mixed-signal ASIC里的数字模块。这种场景ECO请求频繁但改动范围小,ECO窗口期短,1-stage flow直接在P&R网表上做ECO,快速出结果。

2-stage ECO flow(两种变体)。第一种适合传统前后端分工的模式,前端覆盖RTL到DFT,后端只管P&R。第二种适合需要RTL handoff的场景,设计过程中RTL直接交给实现团队。

3-stage ECO flow。适合大规模数字ASIC,比如手机应用处理器、网络交换芯片。SYN、DFT、P&R三级网表都保留,ECO按顺序做,每一级都做等价性检查,风险最小化。

4-stage ECO flow。适合超大规模ASIC,比如GPU或AI服务器芯片。在3-stage的基础上加了Floorplan网表这一级。因为这种芯片block很多,block之间的距离会影响patch的timing,Floorplan阶段的物理引导可以帮你在P&R之前就调整好patch逻辑的位置。2025年DAC上ezeco推出了stage-based ECO design environment,根据Easy-Logic的数据,这些内置flow把ECO turnaround time减少了50%以上。

2.3 Learning ECO和i-Learning:让手工修改也能自动传递

这个功能解决了一个很实际的问题。

有时候简单的ECO,工程师可以手工改综合网表,改几个gate、调几根线就行了。但问题是你手工改了SYN网表之后,DFT网表和P&R网表怎么办?它们跟SYN网表的结构完全不一样,有scan chain插入、有物理布局信息,你不可能用同样的方式手工改。所以你需要一种方式,把你在SYN阶段的手工修改「传递」到下游stage。

ezeco的Learning ECO就是做这个的。你手工改了SYN网表,ezeco通过对比你的修改版和原始版,自动学习出修改点,然后把这些修改自动应用到DFT和P&R网表上。你不需要重新综合,后续stage的ECO结果跟手工修改几乎一致。

更进一步的i-Learning ECO,在Learning的基础上做迭代优化。每次迭代都用上次的结果作为基准,通过逻辑重构、门级行为识别、patch逆向工程等手段逐步缩小patch电路。每一轮都比上一轮更精炼。你可以指定迭代次数,比如ezeco -3syn config -il 3就是做3轮迭代优化。工具会先跑一轮标准ECO,然后自动跑3轮learning,每一轮都试图在前一轮的基础上把patch缩小。

什么时候需要i-Learning?常规ECO跑出来的patch太大、层级设计导致跨层patch优化失败、RTL和门级混合block导致跨block优化失败,这些情况i-Learning能帮你把patch磨到最小。代价是跑的时间更长。

2.4 Inference Flow(Second ECO):等价性检查失败的救星

还有一个让我觉得很贴心的功能。

ECO做完之后,等价性检查报了non-equivalent points,怎么办?传统做法是回去检查你的ECO约束、检查GTECH对比是否完整、检查层级结构有没有漏掉什么。很痛苦,因为你不知道到底是ECO没做好,还是约束设错了,还是GTECH对比漏了。

ezeco的Inference Flow(早期版本叫Second ECO)直接用等价性检查报出来的non-equivalent points作为输入,再跑一轮ECO。它的base netlist不是原始网表,而是上一轮ECO产出的「有缺陷的」网表。相当于在上一轮结果的基础上做修补,针对性解决那些non-equivalent的点。

这在实际使用中非常好用。很多时候等价性检查差一两个点,用Inference Flow补一轮就过了,不用从头重跑。

2.5 多参数并行与Effort级别

ezeco有多种算法并行计算,不同参数的时间复杂度和优化效果各不相同。三档effort,fast用来验证输入是否正确,通常十分钟到半小时,这一档不是为了得到好的结果,是帮你快速确认配置文件没有填错。normal是最常用的模式,一到三个小时。weekend跑更久,几小时到十几小时,但一定能得到工具能力范围内的最优解。工具跑完会在log里打印是否获得了最优解,如果normal模式提示没有获得最优解,你可以切到weekend模式再试。

还有一个不可忽视的因素,作为国产EDA公司,奇捷的技术支持响应很快,遇到问题可以快速对接甚至现场支持。在ECO这种争分夺秒的场景下,技术支持的响应速度有时候比工具本身还重要。

用了ezeco之后,我最大的感受是,ECO这件事从「人扛」变成了「工具扛」。大部分ECO可以自动化完成,不用再人工硬啃。

不是工具帮你省了一点时间,是工具改变了整个ECO的工作方式。

三、ECO Flow实战:从安装到等价性检查

上面讲了ezeco的各种flow设计,可能有些抽象。这一节我用一个3-stage flow的例子,把整个ECO过程从头到尾走一遍,让你看看一个完整的ECO项目到底要经过哪些步骤。

Step 0,安装和准备。

安装license,然后在工作目录下运行ezeco -gen_scripts。这个命令会生成一个压缩包easyeco_scripts.tar.gz,解压之后就是所有需要的脚本模板。如果这个命令能正常生成,说明license安装成功。如果报红字错误,说明license没装好,联系IT或Easy-Logic的AE。

Step 1,准备输入文件。

你需要准备以下文件。

Library文件。Liberty格式的库文件(.lib),不能是.db格式。你可以指定每个lib的路径,也可以给一个lib list文件。

GTECH网表。Old GTECH和New GTECH。这一步很关键,你需要用综合工具分别生成修改前后的GTECH netlist。ezeco的安装包里自带了GTECH DesignWare的Verilog库文件ez_gtech_cell.v。如果你不知道怎么生成GTECH,ezeco的scripts目录下有dc和genus的综合模板可以参考。

各级网表。New SYN网表(修改后RTL重新综合的结果)、Old SYN、Old DFT、Old P&R。注意New DFT和New P&R不需要你提供,ECO就是帮你生成这些。

SVF/JSON文件。综合过程中生成的优化记录文件。DC用SVF,Genus用JSON。这些文件记录了综合工具做了哪些优化操作,等价性检查需要这些信息。

DFT约束。Scan chain相关的pin约束,确保ECO过程中scan chain不被破坏。有三种方式可以设置,直接填pin值、读约束文件、或者直接读formal verification脚本让ezeco自动提取。

Step 2,填写配置文件。

所有信息填到一个文件里,ezeco_input.config。这是唯一需要你手动编辑的文件。Library路径、GTECH路径、网表路径、SVF路径、DFT约束、top module名、输出路径、effort级别,全部在这里设置。文件本身有详细的注释引导你填写。

Step 3,按顺序执行ECO。

3-stage flow的执行顺序是这样的。

先在SYN stage做ECO。

ezeco -3syn ezeco_input.config

这一步用GTECH对比找出ECO点,然后在Old SYN网表上打patch,生成ECOed SYN网表。

然后在DFT stage做ECO。

ezeco -3dft ezeco_input.config

这一步读取SYN ECO产出的ECO points script,在Old DFT网表上做相应的修改。注意ECO points是自动从SYN stage传递过来的,你不需要手动指定。

最后在P&R stage做ECO。如果是pre-mask,用-3prepr。如果是post-mask(metal-only ECO),用-3postpr

Step 4,等价性检查。

这是验证ECO结果正确性的关键步骤,也是整个ECO流程里最考验耐心的环节。

等价性检查用的是formal verification工具,业界主流的两个,一个是Conformal LEC(属于某家大EDA厂),一个是Formality(属于另一家大EDA厂)。两个工具的原理一样,都是通过形式化方法证明两个设计的逻辑功能完全等价,但风格和操作方式有一些差异。

Conformal LEC用的是Golden vs Revised的概念,把修改前的设计定义为Golden(基准),ECO后的设计定义为Revised(修改版),然后做逻辑锥比对。它的优势是对大规模设计的处理能力比较强,支持hierarchical verification。Formality用的是Reference vs Implementation的概念,逻辑类似,但它跟Design Compiler是同一家工具链,SVF文件可以直接读取,不需要额外转换。用DC综合的项目通常用Formality更方便。

不管是哪个工具,做ECO等价性检查都有一些共同的要点。你需要正确设置SVF/JSON文件,这些文件记录了综合工具的优化操作,没有它们formal工具无法理解网表跟RTL之间的映射关系。DFT相关的pin约束要设对,scan enable之类的信号要正确disable,否则scan chain的逻辑差异会报一堆假diff。clock gating建模可能需要额外处理,综合工具插入的clock gating cell在formal工具里需要正确建模。多比特寄存器的声明也很重要,综合工具会把单比特寄存器合并成多比特的,如果formal工具不知道这个映射关系,也会报假diff。

因为改动是从SYN到DFT到P&R逐级传递的,所以等价性检查也是逐级验证。New RTL(或New SYN)vs ECOed SYN,确认SYN stage的ECO正确。然后ECOed SYN vs ECOed DFT,确认DFT stage的传递正确。最后ECOed DFT vs ECOed P&R,确认P&R stage的传递正确。

为什么要逐级做,而不是直接New RTL vs ECOed P&R?因为P&R网表跟RTL之间的差异太大了,经过综合优化、DFT插入、物理实现,结构已经面目全非。直接对比的话,formal verification几乎不可能通过,你需要写大量的约束和特殊处理。逐级做的好处是,相邻stage之间的差异较小,formal verification更容易通过,写验证脚本的难度也低得多。如果哪一级出了问题,你只需要定位到那个stage,不用从头排查。

在实际操作中,等价性检查最耗时的不是跑工具本身,而是debug diff。工具报了non-equivalent points,你得分析是真diff还是假diff。真diff说明ECO没做好,逻辑确实不等价。假diff通常是约束设置不对,SVF文件遗漏、DFT约束不完整、clock gating建模不准确,都会导致假阳性。区分真假diff需要你对设计本身和formal工具的机制都有足够的理解。这也是为什么后面我要做Verification Agent,把这部分经验沉淀下来。

如果等价性检查报了non-equivalent points怎么办?这时候就用前面提到的Inference Flow,拿那些non-equivalent points做输入再补一轮ECO。不需要从头重跑,只需要在当前stage做一次修补。

整个流程画成图,是这样的。

New GTECH vs Old GTECH → ECO Points
SYN ECO
Old SYN → ECOed SYN
DFT ECO
Old DFT → ECOed DFT
P&R ECO
Old P&R → ECOed P&R
↓ ECO points传递 ↓ ECO points传递 ↓ 输出最终结果
LEC: New RTL vs ECOed SYN
Formality / Conformal LEC
LEC: ECOed SYN vs ECOed DFT
Formality / Conformal LEC
LEC: ECOed DFT vs ECOed P&R
Formality / Conformal LEC
如果LEC报non-eq → Inference Flow修补(不需要从头重跑)

图,3-stage ECO Flow。GTECH对比找ECO点,逐级传递,逐级验证。LEC不过则Inference Flow修补。

ezeco还会自动生成后续操作需要的Tcl命令和增量DEF文件,方便你直接在后续工具里使用ECO结果,不需要手动转换格式。从输入到输出到验证到后续工具对接,一条龙。

四、给好工具加个包装:Design Agent

ezeco好是好,但有一个现实的问题。

它是命令行工具。配置文件有一堆参数要填,library路径、GTECH路径、SVF路径、DFT约束、effort级别、post-mask参数……前端Designer面对这些参数头都大了。而且命令行界面没有实时反馈,出错了不知道哪一步出了问题,只能翻log。根据我之前做的统计,单次配置耗时大约30分钟,错误率高达20%。新人上手的学习周期大约一周。

我在Lint那篇里聊过一个理念,好的flow应该降低使用门槛,让不熟悉工具的人也能正确使用。ezeco本身是个好工具,但用好工具需要包装。

所以我做了一件事,搭了一个Design Agent的雏形,ECO是其中的一个子Agent。这个Design Agent不是什么大工程,但解决了几个很实际的痛点。

Web界面。做了一套Web端的可视化配置界面。可折叠分组,参数按类别组织,library一组、netlist一组、DFT约束一组。每个参数有输入指引和格式提示。原来填配置文件要30分钟还容易出错,现在几分钟搞定。Web的好处是团队成员不用安装任何东西,浏览器打开就能用。新人的学习周期从一周缩短到一天。

多参数并行执行。这是我觉得最有用的一个功能。ezeco有多个可调参数,不同参数组合产生的ECO效果不一样。三档effort各有用途。串行跑多组参数对比太耗时了。Design Agent里我做了并行调度,多组参数同时跑,跑完直接对比结果。这让多方案对比的效率大幅提升。

实时监控。终端输出解析,ANSI彩色终端输出实时刷新到Web界面。以前你不知道ECO跑到哪一步了,只能等。现在界面上一目了然,当前在哪个stage、跑了多久、有没有报错。错误率降低了大约80%。

参数标准化。JSON加Shell脚本实现参数标准化,配置可以保存、加载、分享给团队其他成员。新人不需要从头学,一键加载别人的配置就能开始。还做了自动报告生成和智能推荐功能,根据历史记录推荐effort级别和参数组合。

这个Design Agent的开发过程本身也值得多聊两句,因为它是一个AI辅助开发的真实案例。

我用了DeepSeek、元宝、Qwen这几个大模型,帮我生成了大约75%以上的代码。而且95%的生成代码可以直接使用。Web前端的框架代码、终端颜色解析、多进程管理、折叠动画,这些我本来要写好几天的东西,AI帮我几个小时就搞定了。整个GUI框架的开发周期,从预期的两周缩短到了三天。

AI辅助开发有三个层次。第一层是代码生成,你描述需求,它帮你写框架。第二层是功能实现,遇到终端颜色解析这种专业问题,AI直接给出完整方案。第三层是问题解决,并行执行时输出混乱这种debug难题,描述一下现象,AI十分钟给出解决方案。

这不是AI替我写代码,是AI放大了我的能力。我提供业务逻辑和设计思路,AI负责把思路变成可运行的代码。这跟我一直在讲的Flow理念是一致的,好的工具不是让人变成工具的奴隶,而是让人的想法能快速落地。

五、从Design Agent到真正的Agent

聊到这里,你可能已经看出来了。

Design Agent是我手工搭的一个「半自动化」系统。Web界面、并行调度、实时监控,这些都是在帮人更好地操作工具。但它还是一个被动的工具,你点一下它跑一步。

真正的Agent应该是什么样?

之前我做过一个AI驱动的芯片流程自动化Agent系统。那个项目让我想清楚了很多事。下面我把整个设计思路完整地展开。

5.1 为什么要用Master-Agent架构?

最直觉的做法是用一个Agent干所有事,把所有能力写在一个超长的Prompt里。这个方案我试过,不行。Prompt太长了LLM容易混乱,把诊断逻辑和执行逻辑混在一起,一个地方出错整个系统崩溃。而且所有能力耦合在一起,想优化某个环节,改了Prompt可能影响其他功能。

Master-Agent架构的核心思想是,一个Master Agent做路由,多个Sub-Agent各做各的专业事。每个Agent只做一件事,Prompt更精准,专注于特定领域的任务处理。诊断不准,只改Diagnostic Agent,不影响其他模块。加新功能,加个新Agent就行。

这个架构在之前的Agent系统里已经验证过了。从验证流程到Lint流程,Master做路由的思路是可复用的。

5.2 NLP任务解析:让用户用自然语言就能操作

Agent系统的入口是一个NLP解析器。用户说「帮我做个ECO」「跑一下normal effort」「ECO失败了帮我看看log」,系统要能理解这些自然语言,转换成可执行的操作。

我对比过三种方案。规则引擎准确快速,但覆盖不了所有情况。Fine-tune模型最准确,但需要大量标注数据,不现实。最后选了Prompt工程,用结构化输出加置信度机制来做。意图识别准确率能做到92%,平均响应时间2到3秒。

关键是,NLP解析不是独立运行的,它跟Master Agent是配合的。NLP先做一轮粗解析,把自然语言变成结构化的意图加参数,然后Master Agent根据解析结果做路由,决定分发给哪个Sub-Agent。这个设计保证了NLP解析的容错性,即使解析不够准确,Master Agent还能根据上下文做二次判断。

5.3 ECO Agent的五个角色

ECO作为整个Design Agent系统的一个子Agent,内部又是一个完整的Master-Agent架构。五个角色,各有分工。

▶ Master Agent(主控)——理解用户意图,做路由。用户说「帮我做个ECO」,Master理解这是ECO任务,把它分发给ECO Sub-Agent。Master负责所有Agent的调度和协调,它本身不做专业的事,只做路由。这一层我用一个通用能力强的大模型,比如DeepSeek或者GPT-4级别的模型。它的核心能力是理解上下文和做出正确的分发决策。

▶ Diagnostic Agent(诊断Agent)——这是整个ECO Agent里最智能的部分。它的工作是分析ECO失败的log,定位问题出在哪。是版本搞错了?SVF配置不对?ECO点没找对?patch太大?是GTECH对比阶段就出了问题,还是ECO执行阶段才失败的?它需要读log、分析error message、理解工具的输出格式、给出诊断建议。这一层我用推理能力最强的模型,比如Claude Opus或者Gemini级别的。我踩过的那些坑,版本用错、逻辑找错、SVF配错,如果Diagnostic Agent在,它能直接告诉你「你的SVF文件版本不对,请检查第5行的路径」。这个能力不是锦上添花,是能省掉一整天排查时间的生产力工具。

▶ Execution Agent(执行Agent)——调用ezeco跑ECO。根据用户意图自动组装命令,选择stage和effort级别,提交到集群执行,收集结果。多参数并行调度也在这一层。这一层基本是脚本和工具调用,不需要多强的LLM,甚至可以用一个轻量模型来组装命令就行。重要的是执行逻辑的可靠性,不是LLM的推理能力。

▶ Verification Agent(验证Agent)——跑等价性检查,分析diff。如果报了diff,它要区分是真diff还是配置diff。所谓真diff,是逻辑真的不等价,说明ECO没做好。配置diff,是SVF或约束设置差异导致的假阳性,逻辑其实是对的。这一步如果做好,至少能省掉一整天的排查时间。这一层需要一个擅长代码和逻辑分析的模型。

▶ Knowledge Agent(知识Agent)——维护ECO知识库,记录每次ECO的过程和结果。哪个module改了什么、用了什么effort、跑了多久、哪些参数组合效果最好、遇到过什么坑、怎么解决的。下次遇到类似的bug,直接检索历史经验。Knowledge Agent还有一个重要的职责,就是为新项目推荐ECO策略。根据历史数据,告诉你「这个类型的修改,上一次normal effort就搞定了,不需要跑weekend」。这一层用一个擅长总结和检索的模型就够了。

画成架构图。

Master Agent 理解意图 · 路由分发 · 协调全局
Diagnostic Agent
分析log · 定位问题 · 区分错误类型
Execution Agent
调用ezeco · 多参数并行 · 集群调度
Verification Agent
等价性检查 · diff分析 · 真假diff区分
诊断失败自动降级 → 失败则重试 → 不过关则反馈 ↑
Knowledge Agent 记录经验 · 检索历史 · 推荐策略(贯穿全程)

图,ECO Sub-Agent的Master-Agent架构。Master路由,三个专业Agent各司其职,Knowledge Agent贯穿全程。

5.4 不同角色用不同的LLM

这是整个架构里最关键的技术决策。

为什么不同的Agent要用不同的LLM?因为每个角色对LLM的要求不一样。Diagnostic Agent需要分析ECO失败的log、定位问题,这需要更强的代码理解和逻辑推理能力,用强推理模型。Execution Agent调用工具跑ezeco,这一步甚至不需要LLM,脚本就能干。Verification Agent需要分析diff和诊断问题,这需要擅长代码分析的模型。Knowledge Agent需要做知识检索和归纳,这需要擅长总结的模型。Master Agent需要理解自然语言和路由决策,用一个通用能力强的大模型就够。

如果用一个模型干所有事,Prompt会非常长,LLM容易混乱,一个地方出错整个系统崩溃。这是实际项目中踩过的坑。

学术界也在验证这个方向。2025年ACL上一篇叫MasRouter的论文,专门研究了Multi-Agent System里的LLM路由问题。它提出了一个级联控制器网络,先决定协作模式,再分配角色,最后给每个Agent选最合适的LLM。实验显示在HumanEval上比SOTA方法节省52%的开销。另外一篇叫xRouter的论文,用强化学习训练了一个路由器,根据任务难度动态选择不同档位的模型。还有一篇叫Pick and Spin的论文,在四个不同规模的模型上做了实验,发现智能路由加动态编排比静态部署的准确率高21.7%,延迟低33%,成本低25%。

这些数据很能说明问题。不同的Agent用不同的LLM,不是省钱的问题,是每个模型有自己的擅长度,让每个Agent用最适合它的模型做最合适的事,整体效果最好。

5.5 三级降级策略

AI最大的问题是不稳定。今天准确明天可能出错。所以每个环节都要有降级方案。

我设计的是三级降级。第一级是AI模式,所有Agent正常运行,NLP解析+Master路由+Sub-Agent执行。第二级是规则模式,AI不可用的时候,退回到基于规则的命令匹配。你说「做ECO」,系统用正则匹配识别意图,直接调脚本执行。第三级是传统模式,连规则都覆盖不了的情况,退回到手动执行。命令行操作,跟没有Agent系统一样。

保证系统永远可用,AI挂了流程还能跑。降级策略保证的是,即使AI不可用,你的工程流程不会中断。这是系统可靠性,不是AI价值的否定。

没有AI你能干活,有AI你的效率是另一个量级。降级是兜底,不是退路。

六、Agent在芯片落地的深度思考

上面讲了架构设计。这一节我想跳出具体的ECO场景,聊聊Agent在芯片设计落地这件事本身。这是我过去两年一直在思考的问题。

6.1 Agent落地的三个层次

从我自己的实践来看,Agent在芯片设计中的落地可以分三个层次。

第一层,工具包装层。就是把现有的命令行工具包一层友好的界面,加上智能配置、实时监控这些。Design Agent做的就是这一层。它的核心价值是降低使用门槛、减少人为错误。这一层的技术难度不高,但实际效果最直接。新人上手快了、配置错误少了、多方案对比效率高了。

第二层,智能诊断层。在第一层的基础上加上AI的理解能力。工具跑失败了,Agent能自动分析log、定位问题、给出建议。Designer不需要自己去翻几百行的log找error。这层的核心挑战是诊断的准确率。芯片EDA工具的log格式非常复杂,不同工具的输出风格完全不同,而且很多时候真正的错误原因藏在warning里面,不是error里面。

第三层,自主决策层。Agent不只是诊断问题,还能自主做出决策。ECO跑完了patch太大,Agent自己决定切到i-Learning模式。等价性检查报了diff,Agent自己判断是真diff还是假阳性,如果是假阳性就自动调Inference Flow修补。这一层目前还在探索中,因为芯片的容错率太低了,自主决策的风险很大。

6.2 不只是ECO,是一套通用的Agent方法论

我在之前的Agent系统项目里验证过,Master-Agent架构从验证流程到Lint流程到ECO流程,是可复用的。Master做路由,Sub-Agent做专业事,三级降级保证永远可用。

不只是ECO,芯片设计的很多环节都可以用同样的思路来做Agent化。寄存器规范检查,Designer用自然语言描述需求,Agent自动检查配置是否符合规范。Memory选型,根据设计需求自动推荐,综合考虑面积、功耗、timing。波形调试,上传波形文件,用自然语言描述你要查什么信号,Agent直接返回结果。综合约束生成,根据设计特点和timing目标自动生成约束文件。这些场景有一个共同特点,它们背后都有成熟的工具和结构化的数据,AI做的是让这些能力变得「可对话」。

这也引出了一个通用的Agent落地原则。不是什么都要从头搭,而是在已有的工具和数据之上加一层AI的理解和交互能力。你的寄存器数据库已经有了,你的memory选型工具已经有了,你的波形解析器已经有了。Agent不需要替代这些,它做的是连接和理解。把用户意图翻译成工具能执行的指令,把工具的输出翻译成人能理解的结论。

这也是我一直强调的判断标准。把AI去掉之后,你的工具还是能跑,只是没那么方便、没那么智能。AI不是产品本身,而是产品的能力放大器。这个标准很重要,它能帮你区分什么是真正的Agent化,什么是包装成AI的传统工具。

6.3 我的规划:下一步做什么

说说我接下来的规划。

短期,完善ECO Agent的闭环。当前Design Agent还停留在第一层(工具包装层)。下一步是把Diagnostic Agent和Verification Agent真正跑起来。特别是Verification Agent的真假diff区分能力,这是实际需求最强烈的。每次等价性检查报diff,都要花大量时间人工分析。如果Agent能自动区分哪些是真diff需要关注、哪些是假阳性可以忽略,效率提升是立竿见影的。

中期,知识库的积累与复用。Knowledge Agent不只是记录历史,更重要的是把经验结构化。每次ECO的输入特征(什么类型的修改、涉及哪些module、修改量多大)和输出结果(用了什么effort、patch多大、等价性检查是否一次通过)都记录下来。积累足够数据之后,Agent可以根据当前ECO的特征自动推荐策略,「根据历史经验,这种类型的修改建议直接用normal effort,不需要先跑fast验证」。

长期,探索Agent的自主决策边界。这是最前沿也是最困难的部分。让Agent在哪些环节可以自主做决策,哪些环节必须人来确认,这条线怎么划。我目前的想法是,诊断和建议可以让Agent自主做,但最终的执行确认必须人来签字。芯片流片的成本太大了,完全自主的Agent目前不现实。但随着Agent一次一次正确地做出决策,信任是会逐步建立的。今天你检查它的每一步输出,明天你只检查最终结果,后天你可能只看一个summary就够了。信任的积累是一个渐进的过程。

6.4 Agent落地的几个现实挑战

规划归规划,现实里有几个绕不过去的挑战。

第一个是知识库的质量。Agent的智能程度取决于你喂给它什么。如果历史记录都是垃圾,Agent推荐出来的策略也是垃圾。所以知识库的结构设计、数据质量控制、更新维护机制,这些「脏活」比AI模型本身更重要。

第二个是多Agent之间的协作效率。Master-Agent架构理论上很优雅,但实际运行中,Agent之间的通信开销、上下文传递、错误传播,这些都是工程问题。Diagnostic Agent分析完log之后,怎么把结论高效地传递给Execution Agent?格式不对就要人工干预,反而增加了负担。

第三个是安全性和权限控制。Agent能调用ezeco跑ECO,那它能直接修改P&R网表吗?能直接提交到版本管理吗?权限怎么控制?芯片设计流程中的每一步都有严格的签核流程,Agent的操作需要纳入这个流程,而不是绕过它。Tool-in-the-Loop的思想在这里就特别重要,工具在循环里,Agent在工具之上,人随时准备接手但不需要一直盯着。

第四个是跨公司、跨项目的可迁移性。我在这家公司搭的Agent系统,换一家公司能用吗?不同公司的flow不一样、工具链不一样、网表格式有差异、DFT策略不同。Agent需要足够灵活,能适配不同的设计环境。这也是为什么ezeco的stage-based flow设计思路值得借鉴,它把设计流程的差异性封装成了不同的flow variant,Agent系统也应该有类似的适配层。

七、这不是我一个人的想法

聊到这,你可能会想,这套东西是不是就我在自嗨?

不是。2025到2026年,Agentic EDA这个领域发生了质变。

2025年底,一篇发表在arXiv上的综述论文「The Dawn of Agentic EDA」系统性地梳理了这个领域的演进。论文里有一句话我觉得特别到位,「传统AI优化的是扳手(工具),Agentic AI要自动化的是使用扳手的工程师。」这跟我一直说的AI-Native思想是一致的,不是给旧流程加AI,而是为AI重新设计流程。

论文里还提到了一个有意思的框架叫ChatEDA,用层级控制器的方式让Agent自主编排RTL-to-GDSII流程。它微调了一个LLaMA-2模型来做任务规划,成功率达到了98.3%。另一个框架叫REvolution,用进化计算的方式让Agent维护一组设计变体,迭代优化,最终实现了24.5%的功耗降低和24.0%的通过率提升。

2026年3月,Siemens发布了Fuse EDA AI Agent,号称业界首个能跨完整EDA流程进行自主编排的Agent系统。从设计构思到制造签核,全覆盖。Samsung已经在用。同一年6月,Cadence宣布ChipStack AI Super Agent达到L5级别自主度,能独立执行芯片设计和验证流程。NVIDIA的工程师用这个系统跑数百个仿真,声称RTL验证速度提升40倍以上,把验证周期从几周压缩到一天以内。

还有一个让我印象深刻的项目叫Design Conductor 2.0。2026年4月发布的版本,80小时内自主完成了一个LLM推理加速器的设计,从概念到FPGA验证到物理实现,全程无人干预。80小时。传统流程这个工作量可能需要几个人月。

还有一个跟ECO直接相关的进展。2026年3月,一篇叫FluxEDA的论文提出了一个有状态的Agent-EDA基础设施层。传统的Agent调用EDA工具都是脚本级别的,每次调用都是独立的。FluxEDA做了一个统一的执行网关,让Agent可以在持久的工具上下文中进行多步优化。论文里直接验证了两个场景,一个是自动化post-route timing ECO,一个是标准单元子库优化。

Agent对EDA的改变不是增量,是数量级的跃迁。ECO只是其中一个缩影。

八、现实的边界

聊了这么多,我必须踩一脚刹车。

ECO这件事,不管用什么工具,有些边界目前是绕不过去的。

常量变化的ECO。如果RTL里有信号从正常值变成了constant value(tie 0或tie 1),目前所有ECO工具都不如手工修改。因为综合工具会优化掉constant信号,导致ECO工具很难准确定位修改点。这不是ezeco的问题,是所有ECO工具共同的困难。

Flatten all的block。如果block是flatten all的情况,各种ECO工具的效果都不理想。ezeco提供了Learning ECO模式来缓解这个问题,但仍然需要手工修改SYN阶段的网表。

改动特别复杂的情况。如果修改涉及面非常广,不管用什么工具,给出的ECO patch都会很大。patch太大了后端不一定能满足timing,可能需要重新做部分物理设计。

信任。这是最微妙的一点。芯片流片的成本是几百万到几千万美元级别的。不管ezeco跑出来的结果多好,不管Agent编排多自动化,最终的patch你得亲自看、亲自确认、亲自签字。信任是靠一次一次成功积累出来的,没法速成。

但这些边界在缩小。Design Conductor 2.0已经证明了Agent可以自主完成从概念到物理实现的完整流程。Cadence的ChipStack达到了L5自主度。FluxEDA验证了有状态的Agent-ECO闭环。这些进展正在一点一点把「需要人来做」的边界往外推。

九、ECO之外

写到这里,我想跳出ECO聊几句。

这一篇的叙事线索是这样的,手工做ECO被虐了一个月,到找到ezeco这个工具,到基于ezeco做Design Agent,到用Master-Agent架构设计真正的ECO Agent,再到Agent在芯片落地的三个层次和现实挑战。这不是一个工具推荐的故事,是一个工程方法论的演进。

手工ECO是最原始的方式,靠人的经验和耐力硬啃。ezeco是工具辅助的阶段,人还是主导,但工具帮你做了最苦最累的活。Design Agent是流程标准化的阶段,好工具被包装成人人能用的平台。Agent编排是下一阶段,平台变成自主运行的系统,人从操作者变成监督者。

这条线跟我第一篇文章讲的AI-Native思想是完全一致的。不是给旧流程加AI,而是为AI重新设计流程。ECO流程在ezeco阶段已经被重塑了一次,GTECH flow替代了传统RTL对比。在Design Agent阶段又被标准化了一次,Web界面替代了命令行。到了Agent编排阶段,整个流程会变成自主闭环的。

而贯穿这些阶段的,是Tool-in-the-Loop的思想。ezeco本身就是Tool-in-the-Loop的最佳实践,它把等价性检查、patch优化这些工具嵌入到了ECO执行循环内部。Design Agent把并行调度、实时监控这些能力加了进来。Agent编排会在这些工具之上加一层自主决策,而且不同角色用不同的LLM,让每个环节都用最合适的模型做最合适的事。

芯片是我的视角,但AI做工程这件事,不限于芯片。

任何「定位难、修改难、验证难」的工程任务,都是同一个方法论可以适用的场景。有没有AI,效率是不同量级的。


写在最后

这一篇聊了一个非常具体的话题,ECO。但我想说的不只是ECO。

从一个真实的一个月ECO经历出发,到找到ezeco这个改变局面的工具,到理解GTECH flow为什么从根本上改变了ECO的精度,到基于ezeco搭建Design Agent,再到用Master-Agent架构设计真正的Agent系统。不同角色用不同的LLM,三级降级保证可用,NLP让用户用自然语言就能操作。这是一条完整的工程演进路线,不是想象,是我亲历的。

而Agentic EDA领域的进展告诉我,这个方向不只是我在做。Siemens的Fuse Agent、Cadence的ChipStack L5、Design Conductor 2.0、FluxEDA,都在验证同一件事,Agent对EDA的改变是数量级的。ECO只是其中一个缩影。

降级策略是我们的系统思维,保证AI挂了流程不中断。但主叙事不是降级,是AI带来的生产力代差。没有AI你能干活,有AI你的效率是另一个量级。

Tool-in-the-Loop。工具在循环里,Agent在工具之上,人随时准备接手但不需要一直盯着。

下一篇见。


△ 本文属于「芯片架构师看AI」系列

五维定位:AI+芯片 / AI工具 / AI思想 / AI伦理 / AI与人

△ 已发布:

  第一篇:丰田防了50年的呆,谁来防AI的?
  第二篇:你的Agent,可能只是个Copilot
  第三篇:Agent的脑子从哪来?
  第四篇:五个角色,能不能管住一个Agent?
  第五篇:我做了一个月ECO,一个工具让我重新思考了整个流程(本文)

△ 系列预告:

  第六篇:当AI接管验证,Sanity Check的终局
  第七篇:AI犯错的方式跟人不一样
  第八篇:Flow工程师会不会失业?
  第九篇:给AI设计防呆,一个未完成的探索
  第十篇:芯片是我的视角,AI才是目的地

关注「北冥有鱼在思考」(搜索关键词:芯片看AI),用芯片架构师的视角,看懂AI时代。

△ 关于作者

做了多年芯片,现在在摸索AI。芯片是我的视角,AI才是目的地。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-06 07:53:25 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/717673.html
  2. 运行时间 : 0.196420s [ 吞吐率:5.09req/s ] 内存消耗:4,844.24kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1290515b88159f3de12a80b9f35c678d
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001007s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001594s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000745s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000678s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001327s ]
  6. SELECT * FROM `set` [ RunTime:0.000629s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001530s ]
  8. SELECT * FROM `article` WHERE `id` = 717673 LIMIT 1 [ RunTime:0.001098s ]
  9. UPDATE `article` SET `lasttime` = 1780703605 WHERE `id` = 717673 [ RunTime:0.007280s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000650s ]
  11. SELECT * FROM `article` WHERE `id` < 717673 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001003s ]
  12. SELECT * FROM `article` WHERE `id` > 717673 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001032s ]
  13. SELECT * FROM `article` WHERE `id` < 717673 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001686s ]
  14. SELECT * FROM `article` WHERE `id` < 717673 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004728s ]
  15. SELECT * FROM `article` WHERE `id` < 717673 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001845s ]
0.198171s