色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

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

FPGA設(shè)計論壇 ? 來源:博客園 ? 作者: elegang ? 2021-12-02 18:24 ? 次閱讀

Verilog中有兩種類型的賦值語句:阻塞賦值語句(“=”)和非阻塞賦值語句(“<=”)。正確地使用這兩種賦值語句對于Verilog的設(shè)計和仿真非常重要。

Verilog語言中講的阻塞賦值與非阻塞賦值,但從字面意思來看,阻塞就是執(zhí)行的時候在某個地方卡住了,等這個操作執(zhí)行完在繼續(xù)執(zhí)行下面的語句,而非阻塞就是不管執(zhí)行完沒有,我不管執(zhí)行的結(jié)果是什么,反正我繼續(xù)下面的事情。而Verilog中的阻塞賦值與非阻塞賦值正好也是這個意思,通過執(zhí)行一個例子,就可以簡單地明白了:
1、阻塞賦值可以理解為語句的順序執(zhí)行,因此語句的執(zhí)行順序很重要
2、非阻塞賦值可以理解為語句的并行執(zhí)行,所以語句的執(zhí)行不考慮順序
3、在assign的結(jié)構(gòu)中,必須使用的是阻塞賦值

也就是說:

阻塞:在本語句中“右式計算”和“左式更新”完全完成之后,才開始執(zhí)行下一條語句;
非阻塞:當(dāng)前語句的執(zhí)行不會阻塞下一語句的執(zhí)行。

下面給出實例來說明:

給出相應(yīng)的案例來幫助理解:

module prj1(in,b,c,d,clk,rst_n);

input in;
input clk;
input rst_n;
output b,c,d;
reg b,c,d;

always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        b <=0;
        c <=0;
        d <=0;
    end
    else begin
        b <=in;
        c <=b;
        d <=c;
        end
    end
endmodule

這個目的是為了展示非阻塞賦值過程中的時序變化,對應(yīng)的RTL電路圖和仿真波形如下圖:

65318f7e-417c-11ec-b939-dac502259ad0.jpg

從仿真圖可以看書,b,c,d是在每個時鐘后依次傳遞的,如果采用阻塞賦值,如果in改變,那么b,c,d立刻改變,這個就在這里不給出仿真。

阻塞賦值和非阻塞賦值的另外一個區(qū)別在于綜合的時候,如果輸出只有d,bc作為中間變量,阻塞賦值在綜合的過程中會自動省略掉中間過程。給出如下仿真,理解更為清楚

module prj1(in,b,c,clk,rst_n);

input in;
input clk;
input rst_n;
output b,c;
reg b,c, e,f, m,n;
/* <= */
always @(posedge clk or negedge rst_n) begin
    if(!rst_n) b <=0;
    else begin
        e <=in;
        f <=e;
        b <=f;
        end
    end
/* = */
always @(posedge clk or negedge rst_n) begin
    if(!rst_n) c=0;
    else begin
        m = in;
        n = m;
        c = n;
        end
    end    
endmodule

綜合后結(jié)果如圖,可以看出,采用阻塞賦值,綜合后的邏輯單元只有一個,中間變量m,n直接省去了。

65b31b3e-417c-11ec-b939-dac502259ad0.jpg

下面我們來看看兩者代碼之間到底是怎么運行的。

(1)對于阻塞賦值的情況:

always @(posedge clk or negedge rst_n) begin
    if(!rst_n) c=0;
    else begin
        m = in;
        n = m;
        c = n;
        end
    end

always語句塊對Clk的上升沿敏感,當(dāng)發(fā)生Clk 0~1的跳變時,執(zhí)行該always語句。

在begin...end語句塊中所有語句是順序執(zhí)行的,而且最關(guān)鍵的是,阻塞賦值是在本語句中“右式計算”和“左式更新”完全完成之后,才開始執(zhí)行下一條語句的。

在本例中,in的值賦給m以后,再執(zhí)行n = m;同樣在n的值更新以后,才執(zhí)行c = n。這樣,最終的計算結(jié)果就是in = c。也就是說時鐘上升沿到來的時候,整個語句塊執(zhí)行完后,in,m,n,c的值都是一樣的,這也就是我們前面說的,in變化之后,m,n,c都跟著變化。所有的語句執(zhí)行完以后,該always語句等待Clk的上升沿,從而再一次觸發(fā)begin...end語句。

總結(jié)

完成阻塞賦值的過程為:首先計算等號右邊表達(dá)式的結(jié)果;接著這個結(jié)果存入仿真系統(tǒng)的內(nèi)部臨時寄存器中,這個寄存器也稱為賦值事件隊列和調(diào)度的臨時寄存器。如果賦值時沒有延遲信息,則這個事件立即被調(diào)度執(zhí)行。

(2)對于非阻塞賦值的情況

always @(posedge clk or negedge rst_n) begin
    if(!rst_n) b <=0;
    else begin
        e <=in;
        f <=e;
        b <=f;
        end
    end

首先執(zhí)行e <= in,產(chǎn)生一個更新事件,將in的當(dāng)前值賦給e,但是這個賦值過程并沒有立刻執(zhí)行,而是在事件隊列中處于等待狀態(tài)。

然后執(zhí)行f <= e,同樣產(chǎn)生一個更新事件,將e的當(dāng)前值(注意上一語句中將in值賦給e的過程并沒有完成,e還是舊值)賦給f,這個賦值事件也將在事件隊列中處于等待狀態(tài)。

再執(zhí)行b <= f,產(chǎn)生一個更新事件,將f的當(dāng)前值賦給b,這個賦值事件也將在事件隊列中等待執(zhí)行。

這時always語句塊執(zhí)行完成,開始對下一個Clk上升沿敏感。也就是說,使用非阻塞賦值方式進(jìn)行賦值時,各個賦值語句同步執(zhí)行;因此,通常在一個時鐘沿對臨時變量進(jìn)行賦值,而在另一個時鐘沿對其進(jìn)行采樣。

那么什么時候才執(zhí)行那3個在事件隊列中等待的事件呢?只有當(dāng)當(dāng)前仿真時間內(nèi)的所有活躍事件和非活躍事件都執(zhí)行完成后,才開始執(zhí)行這些非阻塞賦值的更新事件。這樣就相當(dāng)于將in、e和f的值同時賦給了e、f和b。

注:

*仿真器首先按照仿真時間對事件進(jìn)行排序,然后再在當(dāng)前仿真時間里按照事件的優(yōu)先級順序進(jìn)行排序。

*活躍事件是優(yōu)先級最高的事件。在活躍事件之間,它們的執(zhí)行順序是隨機(jī)的。阻塞賦值(=)、連續(xù)賦值(assign)以及非阻塞賦值的右式計算等都屬于活躍事件。

總結(jié) :

非阻塞語句的執(zhí)行過程為:首先,它會把非阻塞賦值放入調(diào)度隊列中;接著,仿真工具開始執(zhí)行下一條語句而不等待當(dāng)前這條語句執(zhí)行完畢。也就是說,先計算出等號右邊表達(dá)式的結(jié)果,再把這個結(jié)果的賦值操作保存在事件隊列中,等輪到事件被調(diào)度的時候,把這個結(jié)果賦值給等號左邊。如果沒有指定等號右邊的延遲,賦值的操作會發(fā)生在當(dāng)前時間單位的最后時刻。

知道了阻塞賦值和非阻塞賦值的區(qū)別之后,大家肯定就會關(guān)心什么時候該用阻塞賦值什么時候該用非阻塞賦值,下面我簡單的說幾句:

賦值的類型的選擇取決于建模的邏輯類型。一般情況是這樣的(也有特殊情況):
(1)在時序邏輯電路中一般使用非阻塞賦值。
非阻塞賦值在塊結(jié)束后才完成賦值操作,此賦值方式可以避免在仿真出現(xiàn)冒險和競爭現(xiàn)象。
(2)在組合邏輯電路中一般使用阻塞賦值。
使用阻塞方式對一個變量進(jìn)行賦值時,此變量的值在在賦值語句執(zhí)行完后就立即改變。
(3)在assign語句中必須使用阻塞賦值語句


希望大家在懂得了阻塞和非阻塞語句的區(qū)別之后,能夠很好的在自己的項目中靈活地運用,這也是大家面試的時候,必須會面對的一個問題,希望大家能夠掌握

編輯:jq


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

    關(guān)注

    29

    文章

    1366

    瀏覽量

    111904
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    330

    瀏覽量

    47843
  • 阻塞
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    8251

原文標(biāo)題:Verilog HDL中阻塞語句和非阻塞語句的區(qū)別

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 0人收藏

    評論

    相關(guān)推薦
    熱點推薦

    詳解TIA Portal SCL編程語言中的IF語句

    IF 語句是編程中最基本和最重要的控制結(jié)構(gòu)之一,它的主要作用是根據(jù)條件決定程序的執(zhí)行路徑,IF 語句是編程實現(xiàn)邏輯判斷和決策的基礎(chǔ)。
    的頭像 發(fā)表于 05-24 15:01 ?397次閱讀
    詳解TIA Portal SCL編程語言中的IF<b class='flag-5'>語句</b>

    在testbench如何使用阻塞賦值和阻塞賦值

    本文詳細(xì)闡述了在一個testbench,應(yīng)該如何使用阻塞賦值與阻塞賦值。首先說結(jié)論,建議在testbench,對時鐘信號(包括分頻時鐘
    的頭像 發(fā)表于 04-15 09:34 ?559次閱讀
    在testbench<b class='flag-5'>中</b>如何使用<b class='flag-5'>阻塞</b>賦值和<b class='flag-5'>非</b><b class='flag-5'>阻塞</b>賦值

    FPGA Verilog HDL語法之編譯預(yù)處理

    語句)。Verilog HDL編譯系統(tǒng)通常先對這些特殊的命令進(jìn)行“預(yù)處理”,然后將預(yù)處理的結(jié)果和源程序一起在進(jìn)行通常的編譯處理。
    的頭像 發(fā)表于 03-27 13:30 ?483次閱讀
    FPGA <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>語法之編譯預(yù)處理

    一文詳解Verilog HDL

    Verilog HDL(Hardware Description Language)是一種硬件描述語言,用于從算法級、門級到開關(guān)級的多種抽象設(shè)計層次的數(shù)字系統(tǒng)建模。現(xiàn)實生活多用于專用集成電路
    的頭像 發(fā)表于 03-17 15:17 ?2016次閱讀
    一文詳解<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>

    “串口阻塞”你真的會用嗎?

    導(dǎo)讀在串口通信開發(fā),數(shù)據(jù)錯亂是常見問題。本文將快速介紹串口標(biāo)志位的作用及配置方法,幫助解決數(shù)據(jù)傳輸錯誤。這是一個真實案例,用戶反饋“串口向另外的設(shè)備發(fā)送數(shù)據(jù),發(fā)現(xiàn)運行一段時間后,發(fā)送的消息會阻塞
    的頭像 發(fā)表于 02-13 11:42 ?686次閱讀
    “串口<b class='flag-5'>阻塞</b>”你真的會用嗎?

    TPA3004功放,開機(jī)保護(hù),聲音阻塞,為什么?

    TPA3004功放,開機(jī)保護(hù),聲音阻塞。過一段時間,芯片發(fā)熱后正常。詢求問題解決方法
    發(fā)表于 11-08 08:30

    socket編程阻塞阻塞

    在網(wǎng)絡(luò)編程, socket 是一個非常重要的概念,它提供了一個抽象層,使得開發(fā)者可以不必關(guān)心底層的網(wǎng)絡(luò)通信細(xì)節(jié)。 socket 編程阻塞
    的頭像 發(fā)表于 11-01 16:13 ?663次閱讀

    Verilog HDL的基礎(chǔ)知識

    本文繼續(xù)介紹Verilog HDL基礎(chǔ)知識,重點介紹賦值語句阻塞阻塞、循環(huán)
    的頭像 發(fā)表于 10-24 15:00 ?1074次閱讀
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>的基礎(chǔ)知識

    FPGA Verilog HDL有什么奇技巧?

    今天給大俠帶來在FPAG技術(shù)交流群里平時討論的問題答疑合集(九),以后還會多推出本系列,話不多說,上貨。 交流問題(一) Q:Verilog 有什么奇技淫巧? A:在 Verilog ,以下這些
    發(fā)表于 09-12 19:10

    socket阻塞阻塞區(qū)別是什么

    在計算機(jī)編程,socket 是一種通信端點,用于在網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)傳輸。Socket 可以是阻塞的或阻塞的,這兩種模式在處理數(shù)據(jù)傳輸時有不同的行為。
    的頭像 發(fā)表于 08-16 11:13 ?1159次閱讀

    求助,關(guān)于CyU3PUsbHostEpWaitForCompletion函數(shù)阻塞問題求解

    主線程)調(diào)用該函數(shù)時,CyU3PUsbHostEpWaitForCompletion 函數(shù)經(jīng)常阻塞,雖然指定了超時值,但從未返回。 我想應(yīng)該在主程序線程調(diào)用該函數(shù),以避免出現(xiàn)阻塞
    發(fā)表于 07-23 07:57

    如何在espconn_gethostbyname上創(chuàng)建阻塞線程?

    在 espconn_gethostbyname 上創(chuàng)建阻塞線程
    發(fā)表于 07-10 07:45

    是否可以使用Aurix的CCU6模塊,以阻塞方式在檢測到GPIO下降沿時觸發(fā)中斷?

    我想知道,是否可以使用 Aurix 的 CCU6 模塊,以阻塞方式在檢測到 GPIO 下降沿時觸發(fā)中斷? TC397 的示例代碼僅將其用于 PWM 生成和時鐘定時,但我很好奇如何將其用于 GPIO 邊沿檢測。
    發(fā)表于 07-04 07:00

    FPGA學(xué)習(xí)筆記---基本語法

    :task...endtask 11、循環(huán)語句:for 12、賦值符號:=和<=(阻塞阻塞賦值) 硬件設(shè)計的精髓,力求用最簡單的語言描述最復(fù)雜的硬件,這也是硬件描述語言的本質(zhì)
    發(fā)表于 06-23 14:58

    請問使用lwip創(chuàng)建socket,該如何做到阻塞的接收發(fā)送數(shù)據(jù)?

    請問使用lwip創(chuàng)建socket,該如何做到阻塞的接收發(fā)送數(shù)據(jù)?
    發(fā)表于 06-19 06:02
    主站蜘蛛池模板: 97免费视频观看 | 伊人久在线 | 国产在线精彩亚洲 | 国产精品无码亚洲区艳妇 | 男人大臿蕉香蕉大视频 | 99久久99 | 久久精品无码人妻无码AV蜜臀 | 久久嫩草影院网站 | 亚洲免费人成 久久 | 久就热视频精品免费99 | 世界上第一个得抑郁症的人是谁 | 4480YY无码午夜私人影院 | seyeye在清在线 | 97超在线视频| 国产久久亚洲美女久久 | 脔到她哭H粗话HWWW男男动漫 | 国产亚洲精品久久久久5区 国产亚洲精品久久久久 | 肉色欧美久久久久久久蜜桃 | 亚洲精品中文字幕制 | 99久久久免费精品国产 | 亚欧成人毛片一区二区三区四区 | 一个人HD在线观看免费高清视频 | 99re6热这里在线精品视频 | 久久香蕉国产线看观看首页 | YELLOW日本动漫高清免费 | 美女挑战50厘米长的黑人 | 色爱区综合激情五月综合激情 | 啊…嗯啊好深男男高h文总受 | 国产在线精彩视频 | 亚洲AV无码久久流水呻蜜桃久色 | 强姧伦久久久久久久久 | 高清bblxx手机在线观看 | 国产午夜电影在线观看不卡 | 2018三级网站免费观看 | 色久悠悠无码偷拍自怕 | 理论片在线观看片免费 | 99久免费精品视频在线观看2 | 草柳最新地址 | 久久最新地址获取 | 久久有码中文字幕 | 3D内射动漫同人资源在线观看 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品