新聞中心

        EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > Verilog HDL阻塞屬性探究及其應(yīng)用

        Verilog HDL阻塞屬性探究及其應(yīng)用

        作者: 時(shí)間:2011-09-02 來源:網(wǎng)絡(luò) 收藏
        2 應(yīng)用及分析

        本文引用地址:http://www.104case.com/article/187349.htm

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

          以下示例代碼的功能是計(jì)算傳送過來的data中1和0的個(gè)數(shù)。

          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的值必須在每次計(jì)數(shù)之前被清零,count0、count1必須實(shí)時(shí)更新。顯然,只有阻塞賦值能滿足要求。非阻塞賦值分兩步完成,所有的更新事件在單位仿真周期末同時(shí)執(zhí)行,只有最后一個(gè)值有效,所以非阻塞賦值無法完成計(jì)數(shù)任務(wù)。阻塞賦值卻能很好地勝任,因?yàn)樽枞x值估值和更新一次性完成。

          事件上,在時(shí)序邏輯中經(jīng)常碰到上述實(shí)時(shí)更新問題,非阻塞賦值往往無法實(shí)現(xiàn),如用阻塞賦值則可很好地解決問題。

          正如阻塞賦值在時(shí)序邏輯中有重要應(yīng)用一樣,非阻塞賦值在組合邏輯中亦有不可替代的應(yīng)用。在組合邏輯中用非阻塞賦值可以把組合邏輯改造成流水線??蓤?zhí)行如下所示純組合邏輯代碼,將生成純組合邏輯,綜合結(jié)果如圖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阻塞賦值( = )改為非阻塞賦值( = ),則綜合結(jié)果如圖3所示。

          

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

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

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

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

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


        上一頁 1 2 下一頁

        關(guān)鍵詞: Verilog HDL 阻塞屬性

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 隆尧县| 天水市| 突泉县| 岐山县| 剑阁县| 儋州市| 鹤山市| 揭阳市| 罗山县| 海盐县| 丽水市| 库伦旗| 鄂温| 广德县| 汪清县| 民和| 基隆市| 乐昌市| 信宜市| 灯塔市| 华蓥市| 阿巴嘎旗| 清镇市| 临猗县| 昌江| 南宁市| 商河县| 乡城县| 兴海县| 漾濞| 丹阳市| 思茅市| 赫章县| 龙泉市| 滨海县| 阳信县| 清远市| 北海市| 开封市| 罗定市| 桓台县|