0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談RTL設(shè)計風(fēng)格及Verilog編碼規(guī)范

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2021-06-12 17:20 ? 次閱讀

一、同步設(shè)計

1.1 時鐘的同步設(shè)計

關(guān)注問題:

(1)設(shè)計中盡可能使用單時鐘和單時鐘邊沿觸發(fā)

(2)不要使用例如“與”“或”門這些基本單元來生成RS鎖存或者FF

(3)不要在組合邏輯中引入反饋電路

在HDL設(shè)計中使用同步設(shè)計思想以及邏輯綜合工具。使用異步時鐘會讓更加精確的時序約束變得困難,因此,盡可能利用單個時鐘和單邊沿。(使用單個時鐘在多數(shù)設(shè)計中很難實現(xiàn),在設(shè)計中盡量減少時鐘數(shù)量以減輕分析的復(fù)雜度)

盡管可以使用基本門來實現(xiàn)RS或FF,但時序分析工具會把它視作對組合電路的反饋,如果無法避免,則需要使用set_disable_timing設(shè)置來避免時序分析期間反饋環(huán)路的影響。

避免在內(nèi)部電路生成異步時鐘,如果需要生成這樣的時鐘,那么推薦在生成時鐘的FF輸出端使用create_clock來指定時鐘。

避免反饋跨越異步復(fù)位,同樣的,避免使用門控時鐘和門控復(fù)位。

二、 復(fù)位問題

2.1 使用異步復(fù)位作為初始的復(fù)位

關(guān)注問題:

(1)使用同步復(fù)位電路可能會導(dǎo)致綜合器生成無法正確復(fù)位的電路,同時,同步復(fù)位會在數(shù)據(jù)路徑引入復(fù)位信號(延遲讓時序變得困難),在多時鐘系統(tǒng)中可能需要計數(shù)器來保證復(fù)位信號寬度。但同步復(fù)位并不是完全沒有優(yōu)點,比如,保證系統(tǒng)是完全同步的,可以濾除掉復(fù)位信號的一些小毛刺,同步復(fù)位需要更少的觸發(fā)器等等,這些問題整理詳細(xì)文章討論。

(2)使用異步復(fù)位對寄存器進行初始的復(fù)位會更加安全

(3)除了復(fù)位功能外,復(fù)位/置位的引腳不要用作它途

(4)在同一個復(fù)位線路上禁止同時使用同步復(fù)位和異步復(fù)位

(5)一個FF盡量不使用異步復(fù)位和異步置位

異步復(fù)位示例:

always結(jié)構(gòu)僅會由時鐘上升沿以及低有效的復(fù)位信號觸發(fā)

always @(posedge CLK or negedge RST_X) if (!RST_X) Q 《= 1‘b0; else Q 《= DATA;

請注意上面表述的是初始復(fù)位(Initial reset)推薦使用異步復(fù)位。異步復(fù)位的時序分析比較困難,因為時序路徑會被切斷,從而沒有考慮到B的復(fù)位輸入到寄存器B的輸出Q的時序。同時,A的輸出到B異步復(fù)位的的時序也不會被分析。

2.2 復(fù)位問題

注意問題:

(1)不要在復(fù)位路徑引入邏輯電路

例:

reg[4:0] count; wire REN_X,EN_X,count32_x,ctl_x; assign count32_x = ~(& count) | ctl_x; assign REN_X = EN_X | count32_x; always @( posedge CLK or negedge REN_X ) if(REN_X == 1’b0) Q 《= 1‘b0; else Q 《= D;

當(dāng)組合邏輯產(chǎn)生復(fù)位信號時,由于優(yōu)化的原因,使能信號可能會和FF分離,并且不排除危險信號驅(qū)動復(fù)位信號的可能性(FF可能會以意外的時序復(fù)位)。如上圖所示,即使在RTL描述中的FF復(fù)位信號前插入了使能邏輯,也可能會發(fā)生這種情況。并且一旦發(fā)生這種問題,很難排查??偠灾O(shè)計電路不要總依賴綜合工具的優(yōu)化。

2.2.1 噪聲,毛刺

復(fù)位信號不排除會被噪聲干擾,產(chǎn)生一些毛刺,因此,推薦使用濾波,但引入濾波也不是必須的,視情況而定。下圖是高有效復(fù)位的濾波電路

如果是低有效復(fù)位?

濾波波形原理:

2.2.2 亞穩(wěn)態(tài)問題

以低有效異步復(fù)位為例,如果復(fù)位信號在時鐘沿釋放(或附近),不滿足Recovery Time以及Removal Time,會出現(xiàn)亞穩(wěn)態(tài),所謂復(fù)位恢復(fù)時間就是,復(fù)位釋放的時間距離時鐘沿(上升沿)的時間,復(fù)位移除時間就是,復(fù)位釋放的時間距離時鐘沿(上升沿)的時間。和數(shù)據(jù)建立時間保持時間一樣,都要滿足一定的時序要求。這是需要關(guān)注的問題。

2.2.3 同步器/異步復(fù)位同步釋放

module async_resetFFstyle2 ( output reg rst_n, input clk, asyncrst_n); reg rff1; always @(posedge clk or negedge asyncrst_n) if (!asyncrst_n) {rst_n,rff1} 《= 2’b0; else {rst_n,rff1} 《= {rff1,1‘b1}; endmodule

外部的復(fù)位信號進入推薦使用異步復(fù)位同步釋放,下面是代碼綜合出的電路圖,這種設(shè)計有它的優(yōu)勢。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RS
    RS
    +關(guān)注

    關(guān)注

    3

    文章

    138

    瀏覽量

    109754
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67778
  • 同步器
    +關(guān)注

    關(guān)注

    1

    文章

    91

    瀏覽量

    14571
  • 綜合器
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    6422

原文標(biāo)題:RTL設(shè)計風(fēng)格及Verilog編碼規(guī)范(一)

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    FPGA Verilog HDL有什么奇技巧?

    的話,仿真波形是z,雖然出結(jié)果時不影響,有沒有必要一開始的時候直接reg賦初值?在rtl文件里能不能使用initial賦初值,這樣的rtl代碼能否綜合? A:在 Verilog 中,是否有必要為所有
    發(fā)表于 09-12 19:10

    C語言編碼規(guī)范,這才是最理想的!

    編碼規(guī)范,沒有最好,只有最合適,有但不執(zhí)行不如沒有。一、編碼原則01可讀性清晰第一清晰性是易于維護程序必須具備的特征。維護期變更代碼的成本遠(yuǎn)遠(yuǎn)大于開發(fā)期,編寫程序應(yīng)該以人為本,計算機第二。一般情況下
    的頭像 發(fā)表于 07-06 08:11 ?234次閱讀
    C語言<b class='flag-5'>編碼</b><b class='flag-5'>規(guī)范</b>,這才是最理想的!

    基于樹莓派5的RTL仿真體驗

    :~/workspace/13_rtl_sim/heart_rtl$ iverilog -V Icarus Verilog version 11.0 (stable) () Copyright 1998-2020
    發(fā)表于 04-30 17:35

    8b10b編碼verilog實現(xiàn)

    8b/10b編碼是一種用于減少數(shù)據(jù)線上的低效能時鐘信號傳輸?shù)募夹g(shù),通過在數(shù)據(jù)流中插入特殊的控制字符,來同步數(shù)據(jù)和時鐘。在Verilog中實現(xiàn)8b/10b編碼器可以通過以下步驟完成: 定義8b/10b
    發(fā)表于 03-26 07:55

    verilog function函數(shù)的用法

    Verilog 是一種硬件描述語言 (HDL),主要用于描述數(shù)字電子電路的行為和結(jié)構(gòu)。在 Verilog 中,函數(shù) (Function) 是一種用于執(zhí)行特定任務(wù)并返回一個值的可重用代碼塊。函數(shù)在
    的頭像 發(fā)表于 02-22 15:49 ?3958次閱讀

    淺談NFC射頻信號編碼和調(diào)制

    NFC在射頻信號上采用兩種不同的編碼系統(tǒng)來傳輸數(shù)據(jù)。在大多數(shù)情況下,使用10%的調(diào)制電平,采用曼徹斯特編碼格式。但是,對于以 106 kbps 傳輸數(shù)據(jù)的有源器件,使用改進的米勒編碼方案,100% 調(diào)制。
    發(fā)表于 01-12 11:46 ?1580次閱讀
    <b class='flag-5'>淺談</b>NFC射頻信號<b class='flag-5'>編碼</b>和調(diào)制

    數(shù)字前端生存指南—RTL

    在數(shù)字前端領(lǐng)域,RTL幾乎與“設(shè)計代碼”概念相同。
    的頭像 發(fā)表于 12-04 10:14 ?7808次閱讀
    數(shù)字前端生存指南—<b class='flag-5'>RTL</b>

    淺談Verilog HDL代碼編寫風(fēng)格

    深層次的問題,對于這個行業(yè)來說可能我才是一直腳踩在門外面。所以這篇文章是寫給一些剛開始學(xué)習(xí)FPGA、Verilog HDL的同學(xué),我看過一些大神寫的代碼,然后盡量模仿大神寫法,經(jīng)過好幾個大神的影響和自己
    的頭像 發(fā)表于 11-20 10:04 ?594次閱讀
    <b class='flag-5'>淺談</b><b class='flag-5'>Verilog</b> HDL代碼編寫<b class='flag-5'>風(fēng)格</b>

    淺談PCle 6.0規(guī)范

    PCle 6.0中引入的新編碼是通過避免不必要的編碼來減少損失的最大例子。以前,實例在以8.0GT/s或更高速度運行時使用128b/130b編碼。這意味著每128位數(shù)據(jù)需要2個額外位才能被另一方正確解碼。這導(dǎo)致串行鏈路效率低下,
    發(fā)表于 11-19 15:15 ?643次閱讀

    Verilog代碼風(fēng)格規(guī)范

    發(fā)表于 11-07 10:14

    嵌入式編碼規(guī)范解讀

    作為程序開發(fā)者,避免不了閱讀別人代碼,那么就會涉及到到一門語言的編程規(guī)范規(guī)范雖然不是語言本身的硬性要求,但是已經(jīng)是每一個語言使用者約定俗成的一個規(guī)范。
    發(fā)表于 10-27 10:08 ?484次閱讀
    嵌入式<b class='flag-5'>編碼</b><b class='flag-5'>規(guī)范</b>解讀

    JK觸發(fā)器與T觸發(fā)器的Verilog代碼實現(xiàn)和RTL電路實現(xiàn)

    JK 觸發(fā)器的 Verilog 代碼實現(xiàn)和 RTL 電路實現(xiàn)
    的頭像 發(fā)表于 10-09 17:29 ?3754次閱讀
    JK觸發(fā)器與T觸發(fā)器的<b class='flag-5'>Verilog</b>代碼實現(xiàn)和<b class='flag-5'>RTL</b>電路實現(xiàn)

    基于Verilog的經(jīng)典數(shù)字電路設(shè)計(4)編碼

    在近代戰(zhàn)爭中,軍事信息傳遞,例如通過發(fā)電報的方式,電報信息難免被敵方截獲,而我們又不得不通過發(fā)電報傳輸信息(喲,都近代了,就別飛鴿傳書了),所以發(fā)送方需要對信息進行加密,也就是編碼,然后以一種雙方
    的頭像 發(fā)表于 10-09 16:49 ?1500次閱讀
    基于<b class='flag-5'>Verilog</b>的經(jīng)典數(shù)字電路設(shè)計(4)<b class='flag-5'>編碼</b>器

    怎么樣規(guī)范自己的代碼

    每個人都有自己的編碼風(fēng)格,但如果要和別人協(xié)同開發(fā)軟件,最好是采用一樣的風(fēng)格,可是強行要求他人更改編碼風(fēng)格可能會比較難,那么有沒有更好的解決方
    的頭像 發(fā)表于 10-07 14:51 ?441次閱讀
    怎么樣<b class='flag-5'>規(guī)范</b>自己的代碼

    單片機程序設(shè)計編程規(guī)范分享

    規(guī)范適用于松翰科技 8-bit MCU 部門匯編程序編寫準(zhǔn)則,同樣適用于代理商及重要客戶工程師編程規(guī)范參考。本規(guī)范的目的為統(tǒng)一編程風(fēng)格,保證程序編寫質(zhì)量,提高程序的可移植性和維護性。
    發(fā)表于 09-25 08:06