Home
探索 Uedu
學生控制台
註冊會員/登入
研究知情同意中心
教師控制台
課程設定
支援與訊息
Uptime 數據

UeduGPTs

--

Jupyters

4

UG26 CISOSE26
臺北 AQI 40 · 臺中 AQI 26 · 臺南 AQI 24 · 高雄 AQI 28

AI 回覆桌面通知

AI 助教回覆完成時顯示桌面通知

聊天訊息通知

同學在討論區發送訊息時通知

聲音通知

每當有新通知時播放提示音

軟體與 EDA
軟體與 EDA

RTL 與邏輯合成

工程師寫的不是電路,而是一種描述電路行為的程式碼。

RTL 與邏輯合成 概念示意插圖
概念示意插圖(AI 生成,僅供輔助理解,非精確技術圖示)
研究所  ·  約 17 分鐘  ·  RTL邏輯合成EDA

工程師寫的不是電路

數位晶片設計裡,工程師不畫電晶體、也不擺閘——他寫的是 RTL(register-transfer level,暫存器傳輸層) 程式碼,一種描述電路行為的硬體描述語言(HDL,主要為 Verilog/SystemVerilog 與 VHDL)。RTL 的抽象核心是:把系統看成一群暫存器(register) 在時脈邊緣之間互相傳遞資料,中間夾著組合邏輯(combinational logic) 做運算。工程師描述「每個時脈週期,哪些暫存器根據哪些輸入更新成什麼」,至於這些運算要用幾個 NAND、怎麼擺,交給工具。

這個抽象是現代晶片設計的基石:它讓人類用近似程式的方式思考百億電晶體系統,而不必陷在電晶體層級。

RTL 的兩種骨架:時序邏輯與組合邏輯

RTL 程式碼本質對應兩種硬體:

  • 時序邏輯(sequential logic):由時脈驅動的暫存器(正反器 flip-flop)。在 Verilog 中以 always @(posedge clk) 描述,代表「時脈上升緣才更新」。它是電路的狀態記憶
  • 組合邏輯(combinational logic):輸出只取決於當前輸入、無記憶,描述為連續賦值或 always @(*)。它是暫存器之間的運算

寫 RTL 有一條鐵律:可合成(synthesizable)子集。HDL 同時是模擬語言與設計語言,許多語法(延遲 #initial、檔案 IO)只能模擬、無法變成硬體。寫設計必須限制在可合成子集內,否則合成器報錯或產生非預期電路。常見失效模式包括意外推出鎖存器(inferred latch)(組合邏輯漏寫分支)、多驅動衝突、以及阻塞/非阻塞賦值(= vs <=)誤用導致模擬與硬體行為不一致。

邏輯合成:從行為到閘的三步精煉

邏輯合成(logic synthesis) 是把 RTL 自動轉成閘級網表(gate-level netlist) 的過程,由合成器(synthesizer)在三個階段完成:

1. 轉譯(elaboration / translation)
   解析 RTL,推斷出暫存器、運算子、控制流,
   建立與技術無關的中間表示(generic boolean network)。

2. 最佳化(optimization)
   對布林網路做與技術無關的化簡:
   常數傳播、共用子運算式、資源共享、邏輯重組。

3. 映射(technology mapping)
   把化簡後的布林邏輯對應到目標製程的標準單元庫,
   在滿足時序約束下選最佳的閘組合。

第三步是合成「接地」的關鍵:它必須讀標準單元庫(.lib / Liberty)——每個單元(INV、NAND2、AOI21、DFF…)都附特徵化好的延遲、輸入電容、功耗模型,合成器據此估算時序並選單元。

QoR 與 PPA:合成的成績單

合成結果的好壞用 QoR(quality of results) 衡量,核心是 PPA 鐵三角

維度 合成的手段 取捨
performance(效能) 選快的大單元、加並行、重定時 換來面積與功耗上升
power(功耗) 時脈閘控、多臨界電壓、降單元尺寸 可能變慢
area(面積) 共享資源、選小單元、邏輯化簡 可能變慢或增功耗

三者無法同時最佳化——這是合成的本質取捨。要快就得用驅動力強的大單元(耗電耗面積),要省電省面積就得收斂單元尺寸(可能拖慢)。合成器在工程師給的約束(SDC) 下,於這個三維空間找一個可接受的解。約束太鬆,工具不努力、PPA 差;約束太緊到物理不可能,工具空轉甚至報無解。

約束與時序:合成怎麼知道「夠快」

合成不是憑空最佳化,而是約束驅動。最關鍵的約束是時脈週期,它定義了一條暫存器到暫存器路徑允許的最大延遲。合成器估算每條路徑的延遲,目標是讓時序餘裕(slack)非負:

$$\text{路徑延遲} \approx \text{起點正反器 clk-to-Q} + \text{組合邏輯延遲} + \text{連線延遲}$$

$$\mathrm{slack} = \text{時脈週期} - \mathrm{setup} - \text{路徑延遲}$$

$\mathrm{slack} < 0$ → 違規,合成器會加速這條路徑(換大單元、拆邏輯)。

合成階段拿不到真實連線延遲(還沒佈局繞線),只能用線負載模型(wire load model) 估算,這造成「合成說過、佈局後卻違規」的落差。現代流程因此走向實體感知合成(physical-aware synthesis),在合成時就粗略佈局以得到較準的連線估計,縮小與後段的差距。

進階技術與驗證

  • 重定時(retiming):在不改功能下,把正反器在組合邏輯間搬移,平衡各級延遲、提升頻率。
  • 高階合成(HLS):再往上一層,從 C/C++/SystemC 自動產生 RTL,讓演算法工程師也能參與硬體設計,常用於 DSP、AI 加速器的快速探索。
  • 形式等價驗證(formal equivalence checking):合成把 RTL 大幅改寫,怎麼確定改完還等價? 用形式工具數學證明「合成前的 RTL」與「合成後的網表」邏輯等價,而非靠模擬抽樣——這是簽核中不可省的一道,避免最佳化引入功能錯誤。

為什麼這一層決定一切

RTL 與合成是整條 RTL→GDSII 流程的源頭。架構與 RTL 寫法決定了 PPA 的天花板——後段佈局繞線只能在合成給定的網表上微調,無法逆轉一個爛架構。一個資料路徑切得好、管線分得對的 RTL,合成出來又快又省;反之,後段工程師再努力也補不回來。這就是為何業界說:「PPA 是在 RTL 就輸贏的,後段只是把它實現出來。」

延伸閱讀:〈從 RTL 到 GDSII:數位設計流程〉、〈佈局與繞線(P&R)〉。

接著問 AI 助教

點一下複製提問,到 ClassroomGPT、優學伴(AIDA)或你的 UeduGPTs 頻道貼上,AI 會引用本專區內容回答。

AI 共讀助教正在陪你讀:RTL 與邏輯合成
嗨!我是這篇文章的共讀助教,只根據〈RTL 與邏輯合成〉的內容回答。可以問我「解釋某段」「舉個例子」「出題考我」,或反白文中段落後點下方「解釋選取段落」。