<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

數字前端生存指南—RTL

冬至子 ? 來源:無用技術研究所 ? 作者:無用技術研究所 ? 2023-12-04 10:14 ? 次閱讀

1.為什么是RTL

在數字前端領域,RTL幾乎與“設計代碼”概念相同。RTL的英文全稱為Register Transfer Level,中文一般翻譯為寄存器傳輸級,原本是HDL建模的一種層次。以Verilog HDL為例,其建模層次包括系統級、算法級、RTL級、門級和開關級,其中:

*系統級和算法級:描述層次較高,較多的忽略細節時序,設計精度低,但開發容易,設計難度低
*門級和開關級:描述層次較低,設計難度很大,但設計精細度很高
*RTL級:設計難度和設計精度的trade off,同時也是EDA工具能較好處理的最高層級

這里舉出一個乘加器的RTL例子,代碼如下所示:

reg [7:0] a_reg;
reg [7:0] b_reg;
reg [15:0] mul_reg;
reg [15:0] c_reg;
reg [16:0] result_reg;




always @ (posedge clk)
    mul_reg <= a_reg * b_reg;


always @ (posedge clk)
    result_reg <= c_reg + mul_reg;

這段代碼中涉及5個寄存器,以及寄存器之間的關系,例如mul_reg就等于a_reg和b_reg的乘積,RTL級的描述就是以寄存器為基點(例如a_reg、b_reg、mul_reg),描述寄存器之間的關系(例如mul_reg=a_reg*b_reg)的建模層次。

2.RTL拆解

2.1.R(Reg)

RTL首先為R,即寄存器,在RTL級中的寄存器為一種理想寄存器,其具有以下幾種特征:

*存儲:寄存器具有存儲特性,在不復位和賦值的情況下會一直保持當前的值
*延遲:由于寄存器是邊沿敏感器件,僅能在時鐘上升沿(一般不使用下降沿)可以被賦值,因此輸入的數據延遲一個cycle才能在輸出上體現
*時鐘:寄存器具有時鐘輸入端口,賦值的條件時時鐘邊沿+復位無效+有效信號(若有)
*復位:寄存器可以具有同步或異步復位端口,也可以沒有復位端口,復位是優先級最高的賦值端口,會將寄存器輸出變為復位值,且異步復位是立即有效的

對于Reg,可以分為以下幾種類型:

*存儲:用于保存當前的值供下次調用,使用了寄存器的存儲特性,為了滿足功能要求添加,在更上層的建模中可見
*打拍:用于打斷組合邏輯路徑,為了滿足時序要求添加,刪除后(匹配控制路徑)對功能無影響,在更上層的建模中不可見
*狀態:用于保存狀態,以自身狀態為下一狀態的輸入,常見為狀態機、隱式狀態機和計數器幾種,是一條控制路徑或子控制類路徑的起點

根據Reg處于數據路徑還是控制路徑,常見的形態如下表所示:

1.jpg

可以使用下面的例子展示,這里的例子是一個以累加器結尾的流水線,上方是控制路徑,下方是數據路徑??刂坡窂降钠瘘c是分類為狀態的寄存器,形式為狀態機,后續逐級對狀態信息打拍,這里的目的是為了匹配流水線的延遲,因此分類為打拍,最后將狀態存儲供后續使用,是為了功能添加,因此分類為存儲。數據路徑為流水線,添加流水線的目的是提高運行速率,為了匹配時序目標,因此第一、第二、第三級流水線的分類均為打拍,而最后一級寄存器是累加寄存器,添加的目的是為了保持數據,滿足累加的功能要求,因此分類為存儲:

圖片

最后,根據不同類型的寄存器,設計時需要考慮的問題都相對固定,首先分析寄存器是否有必要存在和基本的形式,分析的角度如下所示:

*狀態寄存器:當前設計是集中式控制還是分布式控制,若為集中式控制,狀態寄存器是否需要移動到控制模塊中;若為分布式控制,狀態寄存器的形態為計數器還是顯式狀態機。
*打拍寄存器:邏輯路徑是否過長,若過長,則添加在哪個點既能合理的分割邏輯路徑,又能使用較少bit的寄存器
*存儲寄存器:存儲的訪問方式,容量需求如何,是否需要靈活同時讀寫,是否可以用memory代替

隨后對于寄存器,有一些基本的設計要素,是每個寄存器都要考慮的,包括:

*工作在哪個時鐘域下,和輸入寄存器之間是否存在跨時鐘域的關系
*是否需要異步和同步復位信號,若需要,位于哪個復位域(和其他哪些寄存器能一起復位)
*是否需要用前清零和用后清零
*什么是否需要對其進行刷新,刷新是否需要有效信號(是否考慮自動門控)

對其復位、自動門控和復位的處理如下表所示,其中是否添加異步/同步復位和自動門控優先級主要與位置有關,復位處理主要與分類有關:

1.jpg

2.2.T(Transfer)

Transfer用于描述組合邏輯,即寄存器之間的連接關系,必須依附于寄存器(或端口)存在。Transfer可以用函數表示,描述其依附的Reg的值如何進行更新。以一個累加器為例,其代碼如下所示:

input [7:0] din;
input din_vld;
reg [7:0] dout;
wire dout_transfer;


assign dout_transfer = dout + din;


always @ (posedge clk or negedge rst_b) begin
    if(~rst_b) begin
        dout <= 8'b0;
    end else if(din_vld) begin
        dout <= dout_transfer;
    end
end

其中dout是數據路徑上的存儲寄存器,對應的transfer的函數表達式如下所示:

圖片

Transfer又可以分為兩類,分別是有狀態和無狀態:

*有狀態Transfer:其依附的寄存器的值作為transfor的輸入,如上面的例子就是一個有狀態的Transfor,一般來說,有狀態的Transfor只會依附在狀態寄存器、存儲寄存器(累運算)上
*無狀態Transfor:其依附的寄存器的值和transfor的輸入無關,一般依附在打拍寄存器和一部分存儲寄存器(純存儲)上

這兩種類型的Transfer的例子如下圖所示:

圖片

和Reg不同,Transfer的功能和基本實現模式由設計人員通過RTL代碼描述,而具體而細節的實現方式一般由綜合器確定(也可以由設計人員手工指定),綜合器主要會對Transfer進行優化,Transfer對應的變量可能在綜合后被重命名,按原有名稱在網表中可能無法找到。

2.3.L(Level)

Level就是層級,這里對R和T做一個總結,以R(和Port)為節點,以T為邊,可以構建一個有向、有環、帶自環邊的圖,如下圖所示:

圖片

圖中的節點分為寄存器、端口和常數值(一般忽略),而邊分為控制線和數據線,控制線負責管理刷新時刻,而數據線負責生成刷新值。按另一種說法,如果將一個寄存器的功能用一個或多個不包括分支的函數表示,則函數中的輸入值就都是數據線,其他信號就是控制線,

RTL代碼實質就是描述一張圖的關系,如下一段代碼:

input din_vld
reg cnt_en;reg [7:0] cnt;output dout_vld;
always @ (posedge clk or negedge rst_b) begin if(~rst_b) begin cnt_en <= 1'b0; end else if(cnt == 8'd200) begin cnt_en <= 1'b0; // 數據線f(x) = 0 end else if(din_vld) begin cnt_en <= 1'b1; // 數據線f(x) = 1 end
always @ (posedge clk or negedge rst_b) begin if(~rst_b) begin cnt <= 8'b0; end else if(din_vld) begin // 控制線 cnt <= 8'b0; // 數據線f(x) = 0 end else if(cnt_en) begin cnt <= cnt + 1'b1; // 數據線f(x) = cnt + 1 end
assign dout_vld = (cnt > 8'd128); // 數據線f(x) = 0 和 f(x) = 1


這段代碼描述了一個計數器生成控制信號的過程,可以轉換為如下所示的圖。其中紅線為控制線,黑線為數據線,忽略了常數值:

圖片

3.RTL和Reg/Wire的關系

RTL中的Reg和Transfer與Verilog中常用的Reg和Wire的關系是一個老生常談的話題,這里直接給出結論:

*Verilog中的Reg類型可以建模RTL中的Reg(時序邏輯)和Transfer(組合邏輯),但RTL中的Reg只能用Verilog中的Reg類型建模
*Verilog中的Wire類型只能用來建模RTL中的Transfer(組合邏輯),但RTL中的Transfer(組合邏輯)既可以用Verilog中的Wire類型建模,也可以用Verilog中的Reg類型建模

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    30

    文章

    5162

    瀏覽量

    118075
  • EDA工具
    +關注

    關注

    4

    文章

    260

    瀏覽量

    31319
  • RTL
    RTL
    +關注

    關注

    1

    文章

    382

    瀏覽量

    59169
  • 狀態機
    +關注

    關注

    2

    文章

    486

    瀏覽量

    27241
  • 乘加器
    +關注

    關注

    0

    文章

    4

    瀏覽量

    5978
收藏 人收藏

    評論

    相關推薦

    數字前端生存指南—PPA

    PPA是數字IC設計逃不開的概念,分別是P(Performance)、P(Power)和A(Area),分別代表芯片的性能、功耗和面積。
    的頭像 發表于 12-04 10:09 ?1872次閱讀
    <b class='flag-5'>數字前端</b><b class='flag-5'>生存</b><b class='flag-5'>指南</b>—PPA

    棄子爭先”與“田忌賽馬”:中國數字前端EDA如何加速發展

    數字前端EDA如何通過守正創新、實現加速發展進行了分享。 ? ? “以我們自己的進展來看,在芯華章專注的數字前端EDA領域,卡脖子的手還放在這里,但是已經卡不死了?!闭劶皣aEDA發展“卡脖子”問題,已經扎根行業幾十年的傅勇這樣
    發表于 04-18 14:13 ?538次閱讀
    棄子爭先”與“田忌賽馬”:中國<b class='flag-5'>數字前端</b>EDA如何加速發展

    IC數字前端設計實戰案例系列pdf

    ,等等,這都是一個系統的基礎,將來涉及到的工作,不一定都涉及到,但是上述的你必定會碰到其中的一個或幾個,IC前端設計說難不難,但是需要一定知識的積累的,因為數字基本都是面向系統的,一個系統級的思維是必不可少的,IC數字前端設計實
    發表于 12-14 16:18

    尋找數字前端設計的講師

    我這邊想做一個數字前端設計與DC綜合的培訓,又沒喲路哪位有些比較好的講師可以給我推薦一下。
    發表于 06-07 18:20

    [招聘] 新思科技(Synopsys)上海/西安招聘數字前端AC

    大家好! 這邊是Synopsys HR, Maggie, 我們在上海/西安招聘數字前端的AC工程師, 具體職位描述如下,有意向的朋友,歡迎發送簡歷到[url=]limin@synopsys.com
    發表于 03-03 09:49

    基于閉環系統辨識的數字前饋控制

    基于閉環系統辨識的數字前饋控制.ppt
    發表于 10-04 10:57

    小白入門數字前端,求大神指教需要學什么知識以及用哪些軟件

    本帖最后由 無名兵卒 于 2018-3-22 15:24 編輯 事情是這樣的,我目前在念研一,我們組里需要做數字的但又沒有做數字的,所以老師想讓我轉到數字前端,可我是啥都不懂啊,望看到這個帖子
    發表于 03-22 15:21

    JESD204B生存指南

    JESD204B生存指南
    發表于 05-28 12:08

    如何去實現一種數字前端的設計?包括哪些步驟?

    什么是數字前端?數字前端主要包括哪些?什么是數字后端?數字后端主要包括哪些?數字前端設計的一般流程包括哪些步驟?如何對
    發表于 06-18 07:53

    數字IC前端和后端有何區別

    數字IC就是傳遞、加工、處理數字信號的IC,是近年來應用最廣、發展最快的IC品種,可分為通用數字IC和專用數字IC。數字前端以設計架構為起點
    發表于 07-28 08:27

    針對TD-SCDMA標準的數字前端解決方案

    針對TD-SCDMA標準的數字前端解決方案:中國第三代自行開發的時分同步碼分多址(TD-SCDMA)峰窩標準是兩種廣為接受的3GPP時分復用峰窩標準之一,另一種為TD-CDMA。TDSCDMA標準與TD-CDMA的
    發表于 08-22 17:58 ?22次下載

    適合中國3G TD-SCDMA標準的數字前端解決方案

    摘要:本文的重點基于FPGA的成本經濟的TD-SCDMA數字前端(DFE)解決方案。波束成形需要在基站使用多個天線(通常為六至八個天線)。在下行鏈路,一個小區中的每個載波在經過適當的相
    發表于 06-15 17:00 ?497次閱讀

    軟件無線電中的數字前端

    摘要:介紹了軟件無線電和數字前端,論述了數字前端實現的問題。 關鍵詞:軟件無線電;數字前端;射頻;基帶
    發表于 02-28 15:51 ?64次下載
    軟件無線電中的<b class='flag-5'>數字前端</b>

    基于閉環系統辨識的數字前饋控制

    基于閉環系統辨識的數字前饋控制
    發表于 10-26 09:28 ?0次下載

    數字IC前端后端的區別,數字IC設計流程與設計工具

    數字IC就是傳遞、加工、處理數字信號的IC,是近年來應用最廣、發展最快的IC品種,可分為通用數字IC和專用數字IC。數字前端以設計架構為起點
    發表于 11-06 16:51 ?26次下載
    <b class='flag-5'>數字</b>IC<b class='flag-5'>前端</b>后端的區別,<b class='flag-5'>數字</b>IC設計流程與設計工具
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>