不知道有沒有人遇到過一種情況,就是把一道菜的食譜寫好了,結果交給別人去買食材,買回來的東西跟你想的完全不一樣?
或者更麻煩的是,食譜寫得太模糊,買食材的人根本不知道你要什麼,只能自己猜。在我的工作經驗裡,IC 設計裡有一個步驟,就是在解決這個問題。
上一篇說到,Verification 是確認設計有沒有做對。
但確認完了之後,這段 Verilog 要怎麼變成真實的電路?
這個步驟,就是叫做 Synthesis,中文翻譯也就是合成。
▋ Synthesis 在做什麼?
我想先用便當工廠的比喻來說明。
廚師把食譜設計好了,接下來要做的事情,是把食譜翻譯成採購清單。
食譜上寫的是「需要一塊嫩豆腐」,採購清單上寫的是「去哪個供應商、買哪個規格、買幾盒」。
Synthesis 做的事情,就是這個翻譯的動作。
RTL 工程師用 Verilog 描述的是「這個電路要做什麼行為」,而 Synthesis 工具會把這個行為,翻譯成「需要哪些實際的電路元件、這些元件要怎麼連接在一起」。
這份翻譯完成的清單,在業界叫做 Netlist。
Netlist 就是已經確認好的採購清單,可以交給下一個人,也就是 APR 工程師,去做後續的工作。
▋ 拆解行為背後的實際來源
這裡有一個地方,在我的認知裡,很多人一開始可能會誤解。
Synthesis 不是把 Verilog 丟進工具,等工具跑完就好。
在我的觀察裡,這個過程有點像是現在大家在用 AI 幫忙寫程式的感覺。
工具會自己做很多優化,但優化的結果,不一定是設計者想要的。
就好比說,你叫 AI 幫你寫一段程式,AI 寫出來的東西功能上沒有問題,但風格、結構、命名方式都跟你的習慣不一樣,甚至有些地方做了你沒有要求的「改進」,反而讓你看不懂。
Synthesis 工具也是這樣。
它會在符合功能需求的前提下,自己決定怎麼用最少的元件、最短的路徑來實現這個電路。
但有時候,它的選擇跟設計者的意圖有一點出入。
在我的經驗裡,要讓工具的輸出更貼近自己想要的結果,是需要一點時間去累積的。
要學會怎麼下指令、怎麼寫 script,才能讓工具往你想要的方向走。
這不是一天就能學會的事,而是在一次一次的實驗和調整裡,慢慢建立起來的。
▋ 為什麼 RTL 寫法會影響 Synthesis 的結果?
說到這裡,我想把這篇跟前面說的 RTL 設計連起來。
在介紹 RTL 設計的那篇裡,說到 RTL 設計有一個「預留電梯空間」的概念,就是在自己的步驟裡,提前考慮到後面的人需要什麼。
Synthesis 就是一個很明顯的例子。
如果 RTL 的寫法考慮到了 Timing,也就是電路需要在規定的時間內完成動作,那 Synthesis 工具在翻譯的時候,就會有更清楚的方向,比較容易做出符合需求的結果。
如果 RTL 的寫法沒有考慮到這些,Synthesis 工具就只能自己猜,猜出來的結果可能沒辦法滿足需求,後面就要花很多時間去修正。
▋ 什麼是 Timing?為什麼電路要在規定的時間內完成動作?
說到 Timing,我想用一個比喻來解釋。
想像一下,有一班公車,一天只有一班,而且只停留幾秒鐘。
如果在那幾秒鐘內沒有上車,就只能等下一天。
在電路的世界裡,每一個時脈(Clock)就像是這班公車。
電路裡的資料,要在這個時脈到來之前,準備好、傳到正確的位置,才能被「帶走」,繼續下一段旅程。
如果資料沒有在時脈到來之前準備好,就會被漏掉,整個電路的行為就會出錯。
這就是 Timing 的核心概念:電路的每一個動作,都要在規定的時間內完成,不能太早,也不能太晚。
在 Synthesis 的階段,工具會根據設計者給的 Timing 要求,去選擇合適的電路元件和連接方式,確保每一段路徑都能在時脈到來之前完成。
如果有某一段路徑太長,資料來不及在時脈到來之前傳到,就會有 Timing 違規,需要想辦法修正。
▋ Synthesis 是一個需要判斷力的步驟
說了這麼多,我想用一句話總結這篇的核心。
在我的觀察裡,Synthesis 不只是把 Verilog 丟進工具跑一跑這麼簡單。
它是一個需要判斷力的步驟,要知道工具在做什麼、工具的輸出是不是符合預期、如果不符合要怎麼調整。
就像是一個有經驗的採購,不只是照著清單買東西,還要判斷哪個供應商的品質比較好、哪個規格更符合需求、什麼情況下要跟廚師確認再下單。
這種判斷力,是需要時間和經驗去累積的。
下一篇,我可能會繼續聊聊 APR,也就是拿到 Netlist 之後,要怎麼把這些電路元件實際排列在晶片上。
但因為又顧慮到畢業季似乎要到了,好像可以寫個關於履歷還有求職的文章 ?
但總之,今天就先到這裡吧。
也歡迎大家給我回饋以及想法。
我是 Joker,咱們下回見。













