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

整條流程裡,「從 Spec 到 RTL」是最靠前、也最危險的一段。它是使用者的意圖第一次被翻譯成機器要照單全收的東西——一份人腦裡的規格,變成一段下游工具會逐字當真的 RTL。這一步只要錯了,後面每一站都會忠實地繼承這個錯:合成、PnR、時序、DRC,全部一絲不苟地把「錯的晶片」做出來。所以前端這一段不能只是「偶爾對」,必須「穩定地對」。
問題是,「穩定地對」怎麼量?靠感覺不行,靠 AI 自己說「看起來沒問題」更不行。我採用的辦法,是拿公開的 benchmark(題庫)當放大鏡:
對我來說,benchmark 不是拿來炫耀分數的計分板,而是一台照妖鏡:每一道沒過的題,都精準指向前端的一個真實缺口。分數只是副產品;真正的產出,是「這一類題為什麼會掛」的清單。這條清單,就是接下來三條原則要一條條收乾淨的東西。
第一條原則講的是紀律:不斷優化前端,直到分數逼近上限。不是「差不多就好」,而是每一個 fail 都是一條待辦。
但也不是盲目追求 100%。有一小撮 fail 是誠實的 floor(地板)——題庫本身某題有瑕疵、prompt 真的沒把規格講清楚、或是一個真實存在的工具限制。這種我不會硬把它塗綠,而是老實標記、講清楚原因,然後放過。剩下的,全部都得收斂到 pass。
收斂的方法很關鍵:遇到一題掛掉,我不是去補丁那「一題」,而是往上追它代表的那一整類問題,把類別層級的根因修掉,再盲跑重測一次確認。修一題、rerun 一題是自欺欺人;修一類、再一次全跑,才是真的往前。
還有一個容易被忽略、但我很堅持的細節:我們優化的是「這條流程自己」的通過率,不是某個手調過的答案。分數必須反映流程從規格出發、不偷看答案、獨立能做到什麼——衡量的是 runner,不是被人牽著手的 LLM。這一點看似小,卻決定了整個數字有沒有意義。
第二條原則,是整個前端的骨架:program-first + AI-backup,dual-track convergence(雙軌收斂)。拆開來講:
而這套雙軌最漂亮的地方,在於它的終點:一次好的 AI 補救,最後應該收斂成一支程式、或一道 program-gate。換句話說,AI 救回一題的最好結局,是這題下次不再需要 AI——它已經變成流程自己會跑的一條確定性規則。能程式化的就程式化,這是雙軌不斷往「程式那一側」沉澱的過程。
第三條原則,回答一個更長期的問題:這些一次次被救回、被對帳、被收斂的東西,要沉澱到哪裡去?答案是一個固定的萃取(capture)流程,把每一次的收穫分流歸位:
.py 或一道合規閘,直接進到 program-first 那一側。這位 IC-expert-agent 背後,是兩批會不斷增長的知識:expert-DB(ic_expert_db.json,依 ic_class 分類的設計 craft)與 per-layer lessons(ic_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 級時,我為什麼決定親手把開源那一段補完。