<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

本文引用地址:http://dyxdggzs.com/article/187349.htm

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

  以下示例代碼的功能是計算傳送過(guò)來(lái)的data中1和0的個(gè)數。

  reg [5:0]count0,count1;

  always @(posedge clk,negedge Rst_n)

  begin

  if(!Rst_n)

  ...

  else

  begin

  count0 = 0; //語(yǔ)句1

  count1 = 0; //語(yǔ)句2

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

  begin

  if(data[i] == 1)

  count1 = count1 + 1; //語(yǔ)句3

  else if(data[i] == 0)

  count0 = count0 - 1; //語(yǔ)句4

  else

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

  end

  end

  end

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

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

  正如阻塞賦值在時(shí)序邏輯中有重要應用一樣,非阻塞賦值在組合邏輯中亦有不可替代的應用。在組合邏輯中用非阻塞賦值可以把組合邏輯改造成流水線(xiàn)??蓤绦腥缦滤炯兘M合邏輯代碼,將生成純組合邏輯,綜合結果如圖2所示。

  

  input a,b,c,clk,sel;

  output out;

  reg out,temp;

  always @(posedge clk)

  begin

  temp = a b; //語(yǔ)句1

  if(sel)

  out = temp | c; //語(yǔ)句2

  else

  out = c; //語(yǔ)句3

  end

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

  

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

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

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

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

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


上一頁(yè) 1 2 下一頁(yè)

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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>