Part 2 — 前端收斂:用 benchmark 把 Spec→RTL 磨到全過(Program-First / AI-Backup / IC-expert 萃取)

這是三段式架構的第二段。上一篇把流程的骨架搭了起來;這一篇要回答一個更尖銳的問題:你怎麼知道「從 Spec 到 RTL」這段前端轉換是對的?答案是 benchmark——把流程丟去跑公開的 IC 設計題庫,一路磨到幾乎全過。而撐住這件事的,是三條原則。

前端到底在收斂什麼:從 Spec 到 RTL

整條流程裡,「從 Spec 到 RTL」是最靠前、也最危險的一段。它是使用者的意圖第一次被翻譯成機器要照單全收的東西——一份人腦裡的規格,變成一段下游工具會逐字當真的 RTL。這一步只要錯了,後面每一站都會忠實地繼承這個錯:合成、PnR、時序、DRC,全部一絲不苟地把「錯的晶片」做出來。所以前端這一段不能只是「偶爾對」,必須「穩定地對」。

問題是,「穩定地對」怎麼量?靠感覺不行,靠 AI 自己說「看起來沒問題」更不行。我採用的辦法,是拿公開的 benchmark(題庫)當放大鏡:

對我來說,benchmark 不是拿來炫耀分數的計分板,而是一台照妖鏡:每一道沒過的題,都精準指向前端的一個真實缺口。分數只是副產品;真正的產出,是「這一類題為什麼會掛」的清單。這條清單,就是接下來三條原則要一條條收乾淨的東西。

原則一:跑分優化——除了少數確定的 floor,其餘全過

第一條原則講的是紀律:不斷優化前端,直到分數逼近上限。不是「差不多就好」,而是每一個 fail 都是一條待辦

但也不是盲目追求 100%。有一小撮 fail 是誠實的 floor(地板)——題庫本身某題有瑕疵、prompt 真的沒把規格講清楚、或是一個真實存在的工具限制。這種我不會硬把它塗綠,而是老實標記、講清楚原因,然後放過。剩下的,全部都得收斂到 pass。

收斂的方法很關鍵:遇到一題掛掉,我不是去補丁那「一題」,而是往上追它代表的那一整類問題,把類別層級的根因修掉,再盲跑重測一次確認。修一題、rerun 一題是自欺欺人;修一類、再一次全跑,才是真的往前。

還有一個容易被忽略、但我很堅持的細節:我們優化的是「這條流程自己」的通過率,不是某個手調過的答案。分數必須反映流程從規格出發、不偷看答案、獨立能做到什麼——衡量的是 runner,不是被人牽著手的 LLM。這一點看似小,卻決定了整個數字有沒有意義。

原則二:Program-First,AI-Backup——兩條軌道對得上才算數

第二條原則,是整個前端的骨架:program-first + AI-backup,dual-track convergence(雙軌收斂)。拆開來講:

  1. program-first(程式優先)——能用確定性程式解決的,一律先用程式。剖析規格、檢查位寬、比對多項式、驗證 FSM 完整性,這些都能寫成可重跑、結果一致、不靠心情的程式。程式能給的答案,永遠比 AI 的自由發揮更值得信任。
  2. AI-backup(AI 補位)——只有當程式明確 WAIVE(例如某個 IC class 還沒有對應的 RTL 產生器)時,IC-expert-agent 才接手,帶著它累積的知識去補這一段,然後把產物丟回程式的流程,讓後面一道道 gate 照樣檢查它。AI 是補洞的人,不是繞過流程的人。
  3. dual-track convergence(雙軌收斂)——同一個問題,讓確定性程式與獨立的 AI 各自解一遍,再逐一對帳。兩條軌道的答案對得上,才採用;只要一條亮綠、另一條卻不同意,就不准放行,得先把分歧收斂掉。我不接受「只有一條軌道亮綠燈」就過關。

而這套雙軌最漂亮的地方,在於它的終點:一次好的 AI 補救,最後應該收斂成一支程式、或一道 program-gate。換句話說,AI 救回一題的最好結局,是這題下次不再需要 AI——它已經變成流程自己會跑的一條確定性規則。能程式化的就程式化,這是雙軌不斷往「程式那一側」沉澱的過程。

原則三:把經驗萃取進 IC-expert-agent 的 DB / Skill

第三條原則,回答一個更長期的問題:這些一次次被救回、被對帳、被收斂的東西,要沉澱到哪裡去?答案是一個固定的萃取(capture)流程,把每一次的收穫分流歸位:

這位 IC-expert-agent 背後,是兩批會不斷增長的知識:expert-DBic_expert_db.json,依 ic_class 分類的設計 craft)與 per-layer lessonsic_expert_L1..L9,每一設計層逐條累積的教訓)。expert-DB 依「設計類別」分類,意思是同一類晶片的門道被結構化地存下來,之後每次都自動調用;lessons 依「設計層」分類,意思是每一層最容易出的錯被逐條寫下,下次同一層先照規則檢查。

關鍵字始終是累積。每一次踩坑、每一次被救回,都透過這個 capture 流程回寫進去——這一次學到的,下一次、下一個人、下一顆晶片都用得上。 這正是它跟人腦最大的差別:人的經驗會退休、會離職、會忘記;這個 agent 的經驗只會單向增加。所以我一直把它形容成一個永不退休、還會越變越強的資深工程師——你可以把整個前端的成長史,看成這位資深工程師持續在職進修的紀錄。

收斂之後:一個會自己變強的前端

把三條原則放在一起看,它們其實咬合成一個會複利的迴圈:benchmark 照出一個缺口 → 萃取流程分流它 → 變成一支程式、一道 gate、或一條 lesson → 下一輪一開始就更強。我要的從來不是一個「這次很聰明」的一次性前端,而是一個會 ratchet(棘輪,只進不退)的前端——每往前一格,就卡住、不會再滑回去。

到這裡,前端的工作就是把一段規格穩定地變成正確的 RTL。但 RTL 只是半路——它還得走完合成、PnR、CTS、DRC、LVS、STA,一路被 EDA 工具帶到矽晶片上。那一段,就是下一篇 Part 3 要談的中後端收斂


下一篇(Part 3),我想聊 RTL 之後的世界:那些細瑣而陌生的中後端步驟怎麼一步步跑得過、驗得過,以及當現有的開源 EDA 工具在某些地方還沒補到 production 級時,我為什麼決定親手把開源那一段補完。