Skip to Main Content

什麼是暫存器傳輸層級 (RTL) 設計?

在數位電路的設計過程中,暫存器傳輸層級 (RTL) 設計是十分重要的步驟。在指定電路的實體佈局之前,會在抽象層面上定義並優化數位設計的邏輯功能。工程師使用如 VHDLVerilog 等硬體描述語言 (HDL),將所設計的高階期望行為轉換為軟體程式碼。 

第一款可在 RTL 層級建立模型的 HDL 於 1980 年代開發出來,並演變為完整設計的系統,讓工程師能夠為電子電路中的資料流建立模型。 

隨著設計變得越來越龐大、越來越複雜,製造技術也促使邏輯與數學運算的新方法出現,RTL 設計方法也隨之發展。隨著時間演進,RTL 設計成為數位設計流程中的必要步驟,連接系統規格與電路設計步驟。 

RTL 描述的抽象特性允許快速研究和進行設計迭代,以在進入設計流程中更複雜且耗時的階段之前,獲得可接受且優化的設計。

RTL 設計是積體電路設計週期的關鍵部分,讓工程師能夠先在暫存器、運算子和資料流階段做最佳化設計,之後才需要開始擔心實體元件及其連接方式。在本文中,我們將討論一些基本知識,說明 RTL 設計在數位電路的設計中扮演的角色,並解釋 RTL 的設計流程。接著,我們會展示 RTL 設計如何融入現場可程式邏輯閘陣列 (FPGA) 與特定應用積體電路 (ASIC) 晶片設計,並揭示 RTL 設計的未來樣貌。

RTL 設計的基本概念

「暫存器傳輸」一詞,指的是該語言如何描述暫存器之間的資料流,以及如何將邏輯運算和數學運算套用至資料。工程師使用 RTL 設計來描述功能區塊,以便定義用於執行特定功能之獨立元件的行為。每個功能區塊都有對於該區塊中暫存器的描述,稱為時序電路,以及包含該功能區塊邏輯運算的組合電路。他們也會使用 HDL 來說明功能區塊之間如何連接,以定義資料在電路中的流動。

RTL 設計的強大之處,就是在於它如何將複雜的系統分解為由 HDL 程式碼代表的相對簡單區塊。以下是瞭解如何使用 RTL 設計的幾個重要概念。

暫存器

在 RTL 設計中,可儲存一定數量資料的硬體項目稱為暫存器。它們通常以 D 正反器實作。暫存器的值可讀取為邏輯運算的輸入,或設定為運算的輸出。RTL 設計的基本目的是描述暫存器之間的資料流向,以及運算改變資料之方式的特性。

硬體描述語言 (HDL)

RTL 設計最重要的部分,就是描述電路行為的程式碼。HDL 是一種規格語言,看起來與程式語言類似,含有變數、函數呼叫、邏輯敘述 (例如 if-then-else 與 CASE)、布林敘述和數學。然而,HDL 是專門設計用來描述電子電路的行為與結構,通常是積體電路。HDL 和程式語言的不同之處在於,它在語言中納入時間概念,以便能透過電路中的時鐘觸發操作。  

這是透過使用一個變數定義電路中數位時鐘值來實現,例如在這個 VHDL 簡單的變流器範例中,時鐘值 (clk) 從低狀態轉變為高狀態 (上升邊緣) 時,輸出 (Q) 被設定為輸入值 (D):

D <= not Q;

process(clk)
begin
    if rising_edge(clk) then
        Q <= D;
    end if;
end process;

最常使用的 HDL 為高速積體電路硬體描述語言 (VHDL),是一種冗長且強式語言,語法與 C 語言並不相似。HDL 是描述更複雜系統設計的首選。 

另一個常見的 HDL 為 Verilog,或其超集合 SystemVerilog。它比較精簡、脆弱型式、彈性,語法看起來類似 C 語言程式碼。因為它易於學習和建立描述,工程師在入門或是電路沒那麼複雜時,更喜歡使用它。IEEE 將 Verilog 和 VHDL 皆定義為業界標準。 

以下是一個用這兩種語言表示「及」閘的簡單範例。一個「及」閘有兩個輸入和一個輸出。如果輸入均等於 1,則輸出為 1。如果兩者不相等或兩者都被設為 0,則輸出為 0。 

VHDL 描述「及」閘為: 

entity my_and is -- First, you define the entity
  port (
     inp1: in  std_logic; -- The first port
     inp2: in  std_logic; -- The second port
     rst: out std_logic   -- The output port
  );
end my_and;

architecture blk of my_and is -- Next, define the architecture
begin
  process(inp1, inp2) -- With the inputs, do the following
  Begin
    -- Use a simple if-then-else statement
    if((inp1=’1’) and inp1=’1’))then
      rst <= ’1’;
    else
      rst <= ’0’;
    End if;
  end process
end blk;

「及」閘的 Verilog 如下所示:

module my_and(inp1,inp2,rst); // define the module call
input inp1, inp2;             // define inputs and output
output rst;

assign rst = inp1 & inp2;    // use the & (and) operator

endmodule

邏輯會取得兩個輸入埠的值,如果兩個埠都是 1,則會將輸出設定為 1。這是一個簡單的範例,但是這種類型的程式碼可以代表系統中的每個實體,然後可以結合起來定義整個數位電路。典型的基本建置組塊包括:加法器、乘法器、計數器,記憶體和狀態機。設計工程師定義系統後,程式碼就會被傳送到編譯器。如果編譯沒有錯誤,工程師可以使用結果來測試系統。

邏輯運算

RTL 設計中有兩種類型的運算。第一種是邏輯運算,對儲存在暫存器中的資料進行按位元評估和修改。邏輯運算如,「及」、「或」、「反」、「互斥或」以及移位,是由定義 HDL 中的邏輯行為所建立。上述範例說明如何在 VHDL 和 Verilog 中呈現「及」運算。邏輯運算代表硬體中的邏輯閘。 

算術運算

RTL 設計中的第二種運算類型是算術運算。它們會將資料記錄在暫存器中,然後進行加、減、乘、除。在 HDL 中會以標準數學運算子表示。舉例來說,在 VHDL 將兩個數字相加會使用這行:

rst <= inp1 + inp2;

— 其中,inp1 和 inp2 是兩個輸入暫存器,而 rst 則是指派給輸出暫存器。RTL 中的算術運算代表專屬的實體元件,例如加法器、減法器、乘法器和除法器。 

同步與非同步動作

RTL 設計可以同步或非同步方式呈現資料的流程。對於同步,例行工作是由系統時鐘輸入到函式來執行或觸發。對於非同步,在一或多個輸入埠的值以特定方式變更時,就會執行例行工作。執行方式是透過檢查時鐘輸入或非時鐘輸入的輸入值,查看是否有使用若敘述變更。 

RTL 在積體電路設計中的角色

現代積體電路 (IC) 的設計流程涉及裝置所需功能的規格,並將其轉化為封裝的半導體晶片。RTL 設計的抽象層級能讓工程師專注於系統的更高階的功能,而不需要考慮實際執行設計的細節。 

ic-design-process-rtl.jpg

積體電路的設計程序。RTL 設計是連接系統規格與電路設計步驟的橋樑。

IC 設計流程的第一步是定義系統規格與架構設計。此資訊會轉換為 HDL 程式碼。接著工程師會使用該程式碼來定義功能與邏輯設計。完成後,設計就會轉換成網路表,然後用來建立電路設計,接著是其餘的設計程序。 

使用 RTL 設計的抽象表現應盡早在設計程序完成 — 在花費時間與金錢於實體設計、實體設計驗證,或實際製造硬體之前。若要將 RTL 設計步驟納入程序中,就需要在一開始妥善整合系統規格與強大工具,以便在 RTL 設計完成時,將暫存器、運算與資料流轉換為實際電路。 

RTL 設計流程

RTL 設計流程的目標是定義和優化積體電路的功能,通常是 FPGA 或 ASIC 裝置。設計工程師使用 RTL 設計流程,先定義裝置的邏輯與流程以測試及優化系統,然後將 RTL 定義轉換為網路表。以下五個步驟定義典型的 RTL 設計方法。

1.高階合成 

流程中的第一個工作是將裝置的規格轉換為 HDL 程式碼,並盡可能減少編輯。在大多數情況下,工程師會使用像 C 或 C++ 等標準程式語言來表示裝置的期望行為。然後,軟體工具會將軟體模型中的演算法細分為所選的特定語言。此步驟可在較簡單的設計中略過,但對於較複雜的設計則可節省大量的工作。 

2.RTL 編碼

工程師接著編寫或優化程式碼。設計師能深入瞭解特定暫存器的細節、所需要的運算,以及資料流動的方式。此步驟的一個重要部分是使用模組來描述系統的一般運算和特定部分。建立模組後,即可在適用的情況下重複使用,大幅簡化整體設計的複雜度。 

3.性能、功率及面積 (PPA) 的最佳化

編碼完成後,最佳化過程隨即開始。此步驟的目標是改善性能、耗電量最小化,以及減少設計的實體大小。 

時序與邏輯模擬

模擬工具可用於在整個系統中進行時序分析並追蹤暫存器值。在暫存器傳輸層級檢查設計,以確保整個電路沒有時序問題,且運算可以產生預期的輸出。這時設計團隊會在設計程序的初期階段盡力除錯任何問題,包括電源故障。 

功率估計

系統中的每個裝置都會消耗一些電力,設計工程師必須知道自己的設計消耗多少電力,並反覆測試,以瞭解電力分配並將耗電量降至最低。許多知名半導體設計公司均使用 Ansys PowerArtist™ 軟體來進行分析、剖析並降低暫存器傳輸層級的耗電量。它提供快速的處理能力,使設計團隊能夠分析電源使用情況,識別電源效率低的RTL代碼,並標記設計中每個浪費的觸發操作。 

面積最小化

積體電路中的每個元件都會佔用實體空間,這些元件之間的配線也是。雖然 RTL 的設計程序不考慮元件的實體大小,但確實能夠擷取元件數量,以及兩者之間的連線複雜度。

4.驗證

設計經過最佳化後,必須加以驗證,以確保符合所有規格。這是設計程序的關鍵部分,必須先檢查所有設計需求,才能讓設計向前邁進。這可以透過 RTL 模擬或形式驗證完成。 

RTL 模擬:用來動態驗證設計的各種軟體。套用輸入向量,並將產生的輸出向量與預期結果進行比較。輸入和輸出通常以波形表示,如此一來設計工程師就可以目視檢查系統行為。 

形式驗證:這是一種靜態驗證程序,使用自動化將一組行為期望值轉換為數學演算法,以探索系統的整個運算空間。然後,會以數學方式評估結果以確認其正確性。 

5.RTL 合成

系統設計經過完整驗證後,便可使用 RTL 合成功能,將 RTL 設計的 HDL 程式碼表示轉換為閘級的網表。這是工具的前端,可將產生的示意圖轉換為電子設計自動化 (EDA) 工具的實體佈局。Synopsys 等公司在 EDA 平台內建立各式各樣的合成工具。 

在 FPGA 和 ASIC 設計流程中使用 RTL 設計

積體電路可分為兩類。特定應用積體電路 (ASIC) 是專為特定應用程式或工作所設計。建立後,就無法變更晶片中的邏輯。ASIC 晶片的範例包括記憶體模組、數位錄音機、最佳化的訊號處理器、微處理器、中央處理器 (CPU),甚至像包含 I/O、CPU、記憶體等元件的系統晶片一樣複雜的東西。 

現場可程式邏輯閘陣列 (FPGA) 晶片是可以在製造後重新程式化的半導體晶片。FPGA 的邏輯不是內建在晶片中的幾何結構中,而是在由連線網格連接的邏輯區塊陣列中,這些邏輯區塊也可以進行編程。 

在這兩種設計流程的第一部分中,RTL 設計扮演相同的角色。等到 RTL 合成完成後,ASIC 設計流程要求工程師規劃並佈局實體電路稱為佈局規劃。在 FPGA 設計中,RTL 程式碼會直接轉換為知道可用邏輯區塊的網路表,並在「放置」與「路徑」步驟中設定這些區塊。 

RTL 設計的未來

使用硬體描述語言來表示數位系統的期望行為始於 1970 年代和 1980 年代。隨著超大型積體電路 (VLSI) 的日益普及而廣受青睞,且因 IC 設計的進一步發展而隨之發展。隨著積體電路的特徵尺寸持續縮小,時鐘速度持續提高,而且更多功能被整合到單一晶片中,設計工程師面臨的挑戰隨之增加。 

設計複雜度並未減緩,RTL 工具繼續克服這些挑戰。開發設計工具套件的公司將專注於幾個關鍵領域,以改善 RTL 設計流程的易用性、能力和功能性,讓設計人員用來定義新一代積體電路。部分重要領域包括:

  • 降低功率

    電源管理仍是整個積體電路設計程序中最大的挑戰之一,而 RTL 優化仍是瞭解和管理消耗系統電力之電壓降的最佳途徑。如 PowerArtist 軟體等工具的增強功能可提供更多選項、更高的能見度和更快的速度,幫助團隊因應這項挑戰。

  • 工具間的無縫整合

    隨著可用於設計、模擬、驗證和簽核的工具數量增加,現有工具的功能也會隨之增加。提供這些工具的公司和像是 IEEE 這樣的產業組織,需要持續更新並改善標準,並提供能使應用程式之間的流程盡可能順暢無礙的工具。

  • 在「設計流程」中納入 AI

    許多在積體電路設計程序中使用的工具都已採用機器學習 (ML) 和專家系統來加速程序步驟,特別是實體電路的佈局。隨著改良的 ML 演算法以及運用衍生人工智慧 (AI) 工具,這種情況將持續下去,並針對問題建議最可能的後續步驟或解決方案。

  • 提升高階合成的能力

    RTL 領域的供應商正努力提升工程師的能力,將高階系統規格轉換為速度更快的高階硬體語言,以及更接近最佳配置的設計。

  • 更聰明的 RTL 合成

    在 RTL 合成步驟中,若能將 RTL 描述中的閘轉換為實際電晶體,便有大幅提升生產力與最佳化的空間。當實體幾何進入設計階段時,有機會能夠做出明智的決策,簡化電路佈局的下游程序。

相關資源

SiFive 以 RISC V 核心發揮最大的運算密度

在 Ansys 的聯合演講中,SiFive 將說明如何透過其 RISC-V 處理器核心產品組合實現最大運算密度 - 每平方毫米的運算能力和 毫瓦的計算能力,這是 SiFive 產品的核心目標。

在 RTL 階段解碼突波功率:早期的突波功率估計和最佳化

在此白皮書中,瞭解 Ansys PowerArtist 軟體和 PowerArtist-SC 平台如何讓設計師在設計流程初期就能掌握突波功率的豐富資訊。

使用早期的 RTL 功耗設計方法,優化處理器功耗與性能比

瞭解 AMD 如何透過在多個頻寬情境下對功耗進行嚴格跟蹤,找出大量浪費電力的區域,並透過高影響力的 RTL 更改加以處理。