在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

通過Verilog事件處理機制實現(xiàn)阻塞與非阻塞賦值的區(qū)分

電子設計 ? 來源:郭婷 ? 作者:電子設計 ? 2019-01-07 09:16 ? 次閱讀

Verilog HDL中,有兩種過程賦值方式,即阻塞賦值(blocking)和非阻塞賦值(nonblocking)。阻塞賦值執(zhí)行時,RHS(right hand statement)估值與更新LHS(left hand statement)值一次執(zhí)行完成,計算完畢,立即更新。在執(zhí)行時阻塞同塊中的其他語句的執(zhí)行。阻塞式(blocking)的操作符為 “ = ”。它的執(zhí)行很像傳統(tǒng)程序設計語言。非阻塞賦值RHS估值與更新LHS值分兩步執(zhí)行。在單位仿真周期開始時RHS估值,在同一單位仿真周期末更新LHS值,不阻塞同塊中其他語句的執(zhí)行。非阻塞式(non-blocking)的操作符為 “ <= ”,它的執(zhí)行更像并行電路,使描述電路更自然。阻塞賦值與非阻塞賦值是Verilog HDL程序設計的難點,它們既有共同點,也有差異,深入剖析其異同,對于硬件程序的開發(fā)具有重大意義。

1 Verilog 事件處理機制

層積事件列(The Stratified Event Queue)是一個事件管理概念模型,而非硬件邏輯。模型內(nèi)事件的具體實現(xiàn)與EDA軟件生產(chǎn)商的算法策略有關(guān)。在IEEE-2001中,Verilog把事件分為5個不同部分,按照時間順序如圖1所示。

通過Verilog事件處理機制實現(xiàn)阻塞與非阻塞賦值的區(qū)分

觸發(fā)的任何事件可以加入到這5個事件列中的任何事件列中,但只能從活躍事件列中移出。即上面的5個事件列中的事件最后都將被激活而放入活躍事件列中。層積事件列是層次模型,層積事件列的執(zhí)行順序是按優(yōu)先級排列的。任何EDA軟件都只能執(zhí)行活躍事件。其他事件列都按優(yōu)先級級別依次激活本列事件以供執(zhí)行。

1.1 活躍事件列

由圖1可見,大部分事件都被放入活躍事件列。活躍事件列里包括非阻塞賦值RHS估值。但是,非阻塞賦值的更新不是在活躍事件列,它被列成獨立的非阻塞更新事件列。活躍事件列是仿真的執(zhí)行源,從一開始執(zhí)行活躍事件列到活躍事件列執(zhí)行完畢稱為一個仿真周期。活躍事件列中的事件可以觸發(fā)活躍或非活躍等其他事件。當活躍事件列中的所有事件執(zhí)行完后,EDA軟件會按優(yōu)先級依次觸發(fā)其余事件列以供仿真執(zhí)行。但在當前活躍事件列中的事件執(zhí)行順序是不確定的。

1.2 非活躍事件列

發(fā)生在當前仿真時間里并且在活躍事件列執(zhí)行完后執(zhí)行的事件列,即非活躍事件列執(zhí)行優(yōu)先級僅次于活躍事件列。如帶PLI例程的回調(diào)過程(tf_synchronize()、vpi_register_cb(cb_readwrite))。非活躍事件列中的事件亦可以觸發(fā)其他事件。如果觸發(fā)了優(yōu)先級更高的活躍事件,非活躍事件列中的其余事件執(zhí)行后移。

1.3 非阻塞賦值更新事件列

活躍事件列中的每個非阻塞賦值RHS估值,都會觸發(fā)一個與之對應的非阻塞賦值更新事件,這些事件被放在非阻塞賦值更新事件列中,執(zhí)行優(yōu)先級次于活躍與非活躍事件列。非阻塞賦值更新事件亦可以觸發(fā)其他事件。若在非阻塞賦值更新事件列中,存在多個對同一變量的先后賦值,只有最后一個有效,其余值將被覆蓋。

1.4 監(jiān)控事件列

監(jiān)控事件列被放在非阻塞賦值更新事件列后。由此可見,用監(jiān)控事件列中的監(jiān)控命令監(jiān)控得到的值都是賦值后的值,活躍事件列$display系統(tǒng)命令則可以查看非阻塞更新前的值。

1.5 未來事件列

在執(zhí)行事件時,如果事件含有延時,為不阻礙仿真的繼續(xù)執(zhí)行,該事件將被掛起而放入未來事件列。未來事件包含未來非活躍事件和未來非阻塞賦值更新事件。

理解阻塞與非阻塞賦值就需要深入理解層積事件列,層積事件列反應了Verilog事件處理機制。

2 應用及分析

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

以下示例代碼的功能是計算傳送過來的data中1和0的個數(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的值必須在每次計數(shù)之前被清零,count0、count1必須實時更新。顯然,只有阻塞賦值能滿足要求。非阻塞賦值分兩步完成,所有的更新事件在單位仿真周期末同時執(zhí)行,只有最后一個值有效,所以非阻塞賦值無法完成計數(shù)任務。阻塞賦值卻能很好地勝任,因為阻塞賦值估值和更新一次性完成。

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

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

通過Verilog事件處理機制實現(xiàn)阻塞與非阻塞賦值的區(qū)分

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所示。

通過Verilog事件處理機制實現(xiàn)阻塞與非阻塞賦值的區(qū)分

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

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

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

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

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


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

    關(guān)注

    1631

    文章

    21806

    瀏覽量

    606612
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    5034

    瀏覽量

    88176
  • eda
    eda
    +關(guān)注

    關(guān)注

    71

    文章

    2792

    瀏覽量

    174041
收藏 人收藏

    評論

    相關(guān)推薦

    Verilog語言中阻塞阻塞賦值的不同

    賦值何時使用阻塞賦值才能設計出符合要求的電路。 他們也不完全明白在電路結(jié)構(gòu)的設計中,即可綜合風格的Verilog模塊的設計中,究竟為什么還要用
    的頭像 發(fā)表于 08-17 16:18 ?6459次閱讀

    Verilog阻塞賦值阻塞賦值的正確使用

    [table][tr][td] Verilog中有兩種為變量賦值的方法。一種叫做連續(xù)賦值,另一種叫做過程賦值。過程賦值又分為
    發(fā)表于 07-03 03:06

    Verilog阻塞賦值阻塞賦值的區(qū)別是什么

    Verilog阻塞賦值阻塞賦值的區(qū)別
    發(fā)表于 12-30 06:22

    阻塞阻塞賦值的區(qū)別是什么?

    本文通過Verilog事件處理機制,詳細討論了阻塞阻塞
    發(fā)表于 05-10 06:59

    verilog阻塞賦值阻塞賦值

    阻塞阻塞語句作為verilog HDL語言的最大難點之一,一直困擾著FPGA設計者,即使是一個頗富經(jīng)驗的設計工程師,也很容易在這個點上犯下一些不必要的錯誤。
    發(fā)表于 03-15 10:57 ?7019次閱讀

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

    本文通過Verilog事件處理機制,詳細討論了阻塞阻塞
    發(fā)表于 08-28 17:59 ?709次閱讀
    <b class='flag-5'>Verilog</b> HDL<b class='flag-5'>阻塞</b>屬性探究及其應用

    IEEE Verilog阻塞賦值阻塞賦值的區(qū)別

    阻塞賦值對應的電路往往與觸發(fā)沿沒有關(guān)系,只與輸入電平的變化有關(guān)系。阻塞賦值對應的電路結(jié)構(gòu)往往與觸發(fā)沿有關(guān)系,只有在觸發(fā)沿時才有可能發(fā)生
    的頭像 發(fā)表于 06-17 11:57 ?1.1w次閱讀
    IEEE <b class='flag-5'>Verilog</b><b class='flag-5'>阻塞</b><b class='flag-5'>賦值</b>和<b class='flag-5'>非</b><b class='flag-5'>阻塞</b><b class='flag-5'>賦值</b>的區(qū)別

    VerilogHDL語言:清阻塞賦值阻塞賦值

    對于VerilogHDL語言中,經(jīng)常在always模塊中,面臨兩種賦值方式:阻塞賦值阻塞賦值
    發(fā)表于 11-19 15:48 ?1203次閱讀

    簡述阻塞賦值阻塞賦值的可綜合性

    阻塞賦值阻塞賦值的可綜合性 Blocking Assignment阻塞
    的頭像 發(fā)表于 05-12 09:45 ?2798次閱讀
    簡述<b class='flag-5'>阻塞</b><b class='flag-5'>賦值</b>和<b class='flag-5'>非</b><b class='flag-5'>阻塞</b><b class='flag-5'>賦值</b>的可綜合性

    簡述Verilog HDL中阻塞語句和阻塞語句的區(qū)別

    阻塞賦值,但從字面意思來看,阻塞就是執(zhí)行的時候在某個地方卡住了,等這個操作執(zhí)行完在繼續(xù)執(zhí)行下面的語句,而非阻塞就是不管執(zhí)行完沒有,我不管執(zhí)行的結(jié)果是什么,反正我繼續(xù)下面的事情。而
    的頭像 發(fā)表于 12-02 18:24 ?6340次閱讀
    簡述<b class='flag-5'>Verilog</b> HDL中<b class='flag-5'>阻塞</b>語句和<b class='flag-5'>非</b><b class='flag-5'>阻塞</b>語句的區(qū)別

    時序邏輯中的阻塞阻塞

    Verilog HDL的賦值語句分為阻塞賦值阻塞賦值
    的頭像 發(fā)表于 03-15 13:53 ?3148次閱讀

    Verilog阻塞阻塞賦值金規(guī)

    對于VerilogHDL語言中,經(jīng)常在always模塊中,面臨兩種賦值方式:阻塞賦值阻塞賦值
    的頭像 發(fā)表于 06-01 09:21 ?1434次閱讀

    一文了解阻塞賦值阻塞賦值

    今天給大家普及一下阻塞賦值阻塞賦值的相關(guān)知識
    的頭像 發(fā)表于 07-07 14:15 ?2291次閱讀
    一文了解<b class='flag-5'>阻塞</b><b class='flag-5'>賦值</b>與<b class='flag-5'>非</b><b class='flag-5'>阻塞</b><b class='flag-5'>賦值</b>

    阻塞賦值阻塞賦值

    ”=“阻塞賦值與”
    的頭像 發(fā)表于 09-12 09:06 ?1127次閱讀
    <b class='flag-5'>阻塞</b><b class='flag-5'>賦值</b>與<b class='flag-5'>非</b><b class='flag-5'>阻塞</b><b class='flag-5'>賦值</b>

    verilog同步和異步的區(qū)別 verilog阻塞賦值阻塞賦值的區(qū)別

    Verilog是一種硬件描述語言,用于設計和模擬數(shù)字電路。在Verilog中,同步和異步是用來描述數(shù)據(jù)傳輸和信號處理的兩種不同方式,而阻塞賦值
    的頭像 發(fā)表于 02-22 15:33 ?1860次閱讀
    主站蜘蛛池模板: 亚洲欧美日韩综合一区 | 黄色网址中文字幕 | 久久综合一| 国内黄色精品 | 亚洲免费在线观看 | 日本最色网站 | 亚洲综合一区二区三区 | 二十年等一人小说在线观看 | 韩国三级理论在线观看视频 | 午夜大片男女免费观看爽爽爽尤物 | 亚洲一区毛片 | 天天干天操 | 五月天婷婷网亚洲综合在线 | 在线黄色免费观看 | 夜夜爱夜夜爽 | 97人操| 日本不卡免费高清一级视频 | 午夜在线免费观看 | 日本黄色免费电影 | 欧美精品国产第一区二区 | 四虎国产一区二区三区 | 午夜激情福利 | 49pao强力在线高清基地 | 白丝丝袜高跟国产在线视频 | 午夜影院免费观看 | 欧美地区一二三区 | 国产综合视频 | 久久性妇女精品免费 | 国产资源视频在线观看 | 久久综合九色综合欧美狠狠 | 九九热精品在线观看 | 亚洲婷婷在线视频 | 欧美黑人粗暴另类多交 | 欧美性猛交xxxx乱大交 | 黄黄视频免费看 | 性欧美日本 | 午夜影院免费观看视频 | 中文字幕自拍 | 91中文在线观看 | 亚洲人成电影综合网站色 | 酒色成人 |