首先,RTL是寄存器傳輸層的縮寫,RTL既是一個抽象層級概念,又是一種HDL代碼編寫風格[1]。
RTL是一個抽象層級概念
認識和理解IC集成電路可以從多種不同的角度,其中最好最普遍的一種是:抽象層級,即,將IC做不同程度的抽象,按照抽象程度從高到底,分別爲[2]:
- 系統層
- 算法層
- 寄存器傳輸層
- 邏輯層
- 電路層
而上述的每一抽象層級,均可以用三種不同的方式去描述,分別爲[2]:
- 行爲描述
- 物理描述
- 結構描述
我們常說的綜合其實就是指從高抽象層級轉換到低抽象層級的過程,各層級間綜合過程如下[3]:
- 算法層--(高層次綜合 HLS)-->寄存器傳輸層
- 寄存器傳輸層--(邏輯綜合 LS)-->邏輯層
- 邏輯層--(版圖綜合即佈局佈線Place & Route)-->電路層
2. RTL是一種HDL代碼編寫風格
HDL描述電路,有三種方式:
- 數據流
- 行爲結構
- 門級連接
RTL作爲一種HDL代碼編寫風格是指代碼主要採用數據流和行爲結構相結合的方式編寫[1]。
你所說的RTL文件指的就是用這種風格編寫的Verilog或VHDL代碼文件。
從圖1中可以看出,RTL代碼實際對應的結構描述是衆多算術運算單元(ALU)、多路選擇器(MUX)、寄存器等等,而這些模塊實際上都是由各種邏輯門(與非門,或非門等等)和基本觸發器(D觸發器、JK觸發器等等)搭成的,邏輯綜合的過程,就是要把RTL文件描述的電路進一步展開,轉換成用邏輯門和觸發器搭成的電路,而用來描述這些邏輯門和觸發器的連接關係的文件就是門級網表文件。
因此,邏輯綜合包含兩個主要步驟[1]:
- 選擇工藝庫(標準單元庫)
- 設計約束(時序約束、面積約束和功耗約束)
選擇的工藝庫中就包含了基本的邏輯門和觸發器。
不同的綜合工具生成的網表文件的文件格式也不太一樣,如*.v(Design Compiler, Synopsys)、*.vh(PKS, Cadence)和*.edf(Synplify, Synplicity)。
對於*.v格式的門級網表文件,可以看成代碼風格是採用門級連接方式編寫的Verilog代碼文件。
一個示例[1]:
- 簡單組合邏輯塊的RTL代碼:
module example(
input wire a,
input wire b,
input wire c,
output reg out
);
always @*
out = (a & b) | c;
endmodule
- 選擇工藝庫
選擇某公司名爲abc_100的xx納米的CMOS工藝,該公司提供的工藝庫中包含了以下標準單元:
VNAND//兩輸入與非門
VAND//兩輸入與門
VNOR//兩輸入或非門
VOR//兩輸入或門
VNOT//反相器
VBUF//緩衝器
NDFF//下降沿觸發的DFF
PDFF//上升沿觸發的DFF
- 設計約束
無面積和功耗約束,只要求優化得到最快的時序
- 邏輯綜合得到的門級網表:
module example_after_LS(
input wire a,
input wire b,
input wire c,
output reg out
);
wire net0;
VAND U1 (.in0(a), .in1(b), .out(net0));
VOR U2 (.in0(net0), .in1(c), .out(out));
endmodule
邏輯綜合得到的門級電路
參考文獻
[1] SamirPalnitkar. Verilog HDL數字設計與綜合[M]. 電子工業出版社, 2004。
[2] 金西. 數字集成電路設計 : Digital integrated circuit design[M]. 中國科學技術大學出版社, 2013。
[3] 林敏, 方穎立. VHDL數字系統設計與高層次綜合[M]. 電子工業出版社, 2002