<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術 > 設計應用 > Verilog HDL阻塞屬性探究及其應用

          Verilog HDL阻塞屬性探究及其應用

          作者: 時間:2011-09-02 來源:網絡 收藏
          2 應用及分析

          本文引用地址:http://www.ex-cimer.com/article/187349.htm

            通常非阻塞賦值產生寄存器等存儲元件,對應的物理器件是帶存貯功能的元件,如寄存器、觸發(fā)器等。阻塞賦值則對應網線(wire)類型,通常與物理連線對應。這是兩種賦值方式的最明顯的差異,也是時序邏輯用非阻塞、組合邏輯用阻塞的重要原因。但這并不是絕對的,事實上阻塞賦值對應網線(wire)型,亦可對應寄存器(reg)型;阻塞賦值也能生成存貯元件,因此不能片面理解。在組合邏輯里,鎖存器可能引發(fā)測試問題,帶來隱患。說明在建模時,首先要從硬件出發(fā)來考慮問題,應先在頭腦中形成電路結構,由于賦值方式的不同,綜合結果差異甚大,運用不當很可能會導致建模失敗。阻塞賦值在時序邏輯中亦有著重要應用,在需要實時更新的組合邏輯中只有阻塞賦值能滿足要求。

            以下示例代碼的功能是計算傳送過來的data中1和0的個數。

            reg [5:0]count0,count1;

            always @(posedge clk,negedge Rst_n)

            begin

            if(!Rst_n)

            ...

            else

            begin

            count0 = 0; //語句1

            count1 = 0; //語句2

            for(i = 0;i = 11;i = i+1)

            begin

            if(data[i] == 1)

            count1 = count1 + 1; //語句3

            else if(data[i] == 0)

            count0 = count0 - 1; //語句4

            else

            count0 = count0 + 0; //防止生成鎖存器

            end

            end

            end

            在這段代碼里,count0、count1的值必須在每次計數之前被清零,count0、count1必須實時更新。顯然,只有阻塞賦值能滿足要求。非阻塞賦值分兩步完成,所有的更新事件在單位仿真周期末同時執(zhí)行,只有最后一個值有效,所以非阻塞賦值無法完成計數任務。阻塞賦值卻能很好地勝任,因為阻塞賦值估值和更新一次性完成。

            事件上,在時序邏輯中經常碰到上述實時更新問題,非阻塞賦值往往無法實現,如用阻塞賦值則可很好地解決問題。

            正如阻塞賦值在時序邏輯中有重要應用一樣,非阻塞賦值在組合邏輯中亦有不可替代的應用。在組合邏輯中用非阻塞賦值可以把組合邏輯改造成流水線??蓤?zhí)行如下所示純組合邏輯代碼,將生成純組合邏輯,綜合結果如圖2所示。

            

            input a,b,c,clk,sel;

            output out;

            reg out,temp;

            always @(posedge clk)

            begin

            temp = a b; //語句1

            if(sel)

            out = temp | c; //語句2

            else

            out = c; //語句3

            end

            若把上面代碼中語句1、語句2、語句3阻塞賦值( = )改為非阻塞賦值( = ),則綜合結果如圖3所示。

            

            流水線設計方法在高性能、需經常進行大規(guī)模運算的組合邏輯中可以到廣泛運用。

            在組合邏輯中,如在begin、end塊中同時有許多非阻塞賦值,則它們的賦值順序是并發(fā)的。實際上它們賦予的都是上一個時鐘送入寄存器的值。這與使用同一時鐘沿觸發(fā)的許多在同一個使能控制信號下賦值完全一致,并且這種賦值因為數據保存在寄存器中,當時鐘沿到來時都已穩(wěn)定,所以存入的數值是可靠的。用這種方法可以避免由組合邏輯產生的競爭冒險[2]。

            在相關應用中,非阻塞賦值能較好地解決零時刻競爭冒險問題。因為非阻塞賦值分兩步完成,非阻塞賦值更新事件是在所有活躍與非活躍事件執(zhí)行完之后執(zhí)行,能確保所有敏感變量值在零時刻都被觸發(fā)[3]。

            在同一always塊混合使用阻塞賦值與非阻塞賦值,利弊共存,混合使用的結果可能事半功倍,亦可能功虧一簣。只有了解其處理機制,深刻理解阻塞與非阻塞賦值底層實現的異同,方可靈活運用。

            本文通過事件處理機制,詳細討論了阻塞與非阻塞賦值的區(qū)別、聯系及其應用示例。由本文可知,阻塞與非阻塞賦值靈活多變,底層實現也差異甚大。因而在數字電路設計時,依據預期功能,從硬件實現出發(fā),斟酌差異,仔細選用阻塞與非阻塞賦值才能有效避免出錯,縮短開發(fā)周期。


          上一頁 1 2 下一頁

          關鍵詞: Verilog HDL 阻塞屬性

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();