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

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

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

3天內不再提示

Verilog中阻塞和非阻塞賦值金規

FPGA之家 ? 來源:FPGA之家 ? 2023-06-01 09:21 ? 次閱讀

對于VerilogHDL語言中,經常在always模塊中,面臨兩種賦值方式:阻塞賦值和非阻塞賦值。對于初學者,往往非常迷惑這兩種賦值方式的用法,本章節主要介紹這兩種文章的用法。其實,有時候概念稍微不清楚,Bug就會找到我們,下面一文掃清阻塞賦值和非阻塞賦值所有的障礙。

基本概念

阻塞賦值(Blocking Assignment)

阻塞賦值的基本描述格式為:

[變量] = [邏輯表達式];

阻塞賦值在執行的時候,右端表達式執行并賦值到左邊變量,不會受任何情況打斷。所以在本次賦值結束之前他“阻塞”了當前其他的賦值任務,阻塞賦值的操作和C語言中的變量賦值非常相似。

1.非阻塞賦值(Nonblocking assignment)

非阻塞賦值的基本描述格式為:

[變量] <= ?[邏輯表達式];

非阻塞賦值行為有些細微之處比較難以理解。我們最好從硬件角度來理解,always模塊可以被認為是純硬件模塊,當always模塊被激活時,非阻塞賦值的右側表達式就開始執行;當always模塊所有表達式執行結束之后,所有執行結果才賦值到左側變量當中。之所以稱為“非阻塞”就是在本條賦值語句執行的過程中,其他賦值語句也可以執行。

1金規

在組合邏輯電路描述中采用阻塞賦值

阻塞賦值和非阻塞賦值雖然都可以用來描述同一電路,以1位比較器舉例來解釋這種差別。

阻塞賦值實現1bit比較器

moduleeq1_block

(

inputwirei0, i1,

outputregeq

);

regp0, p1;

always@(i0,i1) // i0 和i1 在敏感量列表當中

// 語句描述的順序非常關鍵

begin

p0 = ~i0 & ~i1;

p1 = i0 & i1;

eq = p0 | p1;

end

endmodule

分析:程序中,敏感量列表中包含i0和i1,只要這兩個變量有一個發生改變,都會激活always語句,那么p0、p1和eq就會順序賦值,最終eq賦值就會被更新,所以這三條語句的描述順序非常關鍵,假如將最后一條語句提前:

always@(i0,i1)

begin

eq = p0 | p1;

p0 = ~i0 & ~i1;

p1 = i0 & i1;

end

在第一條描述中,由于p0和p1還沒有被賦予新值,所以p0和p1依然保持原來的賦值,這樣得到的最終結果顯然是錯誤的。

非阻塞賦值實現1bit比較器

moduleeq1_non_block

(

inputwirei0, i1,

outputregeq

);

regp0, p1;

always@(i0,i1,p0,p1) // p0, p1依然在敏感量列表中

// 描述順序無關緊要

begin

p0 <= ~i0 & ~i1;

p1 <= i0 & i1; ?

eq <= p0 | p1; ??

end

endmodule

分析:p0和p1包含在敏感量列表當中,當i0 或者 i1有所變化,always模塊被激活,p0和p1在第一個時鐘節拍結束時賦值,由于eq值為基于p0和p1原來保持值的賦值,所以eq不變,當前賦值結束時,always模塊重新被激活,由于p0和p1被改變(這就是p0和p1放在敏感量列表中的原因),eq變量在第二個時鐘節拍賦予了新值。從以上分析,即使將以上語句的順序發生改變,也不會影響最終結果,因為eq的賦值以及always模塊的激活與這些語句的順序并沒關系。

總結:雖然兩種描述方法都可以描述同一電路,但是兩個電路的結果是有區別的,采用非阻塞賦值法描述仿真的時候花的時間更長一些,電路輸出結果在時序上也有微弱差別,鑒于此,我們有這么一條原則“在組合邏輯電路描述中采用阻塞賦值”。

2時序邏輯描述,采用非阻塞賦值方式賦值

就單獨一個寄存器來說,阻塞賦值和非阻塞賦值都可以描述存儲單元,如DFF可以描述為

always@(posedgeclk)

q <= d;

也可以描述為

always@(posedgeclk)

q = d;

但是當設計中存在多個寄存器描述單元的時候,就會有細微的查別,假設有兩個寄存器在每個時鐘的上升沿進行數據交換,采用阻塞賦值描述如下:

always@(posedgeclk)

a = b;

always@(posedgeclk)

b = a;

在時鐘的上升沿,兩個always語句同時被激活并且并行執行,一個時鐘節拍后兩條語句執行結束,按照verilog語法標準,兩個always語句執行結果時間順序上誰都有可能在前面,這樣一來,如果第一個always語句執行在前面,由于阻塞賦值,所以變量a立即得到b的賦值,那么當第二個always塊執行之后,變量b得到a的賦值,由于剛才第一個always執行的時候b值賦予了a,所以現在b的值會維持不變,還是原來的值。

同樣的道理,如果第二個always模塊先執行了,那么a就會保持自身值不變,從Verilog語法角度來看,兩種結果都是有效的。但是從數字電路的角度來說,明顯引起了競爭。

下面我們將阻塞賦值修改為非阻塞賦值,以上代碼修改為:

always@(posedgeclk)

a <= b;

always@(posedgeclk)

b <= a;

采用非阻塞賦值,由于原始信號在賦值語句中使用,所以a和b都會得到正確的值,而與順序沒有關系。所以在時序邏輯描述中,阻塞賦值往往會引起條件競爭,所以要采用非阻塞賦值方式賦值

總結一下

在組合邏輯電路描述中采用阻塞賦值

時序邏輯描述,采用非阻塞賦值方式賦值

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2767

    瀏覽量

    48713
  • Verilog
    +關注

    關注

    28

    文章

    1362

    瀏覽量

    111281
  • HDL
    HDL
    +關注

    關注

    8

    文章

    330

    瀏覽量

    47684
  • C語言
    +關注

    關注

    180

    文章

    7624

    瀏覽量

    139433
  • 時序邏輯
    +關注

    關注

    0

    文章

    39

    瀏覽量

    9295

原文標題:【干貨分享】Verilog中阻塞和非阻塞賦值金規

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

    賦值何時使用阻塞賦值才能設計出符合要求的電路。 他們也不完全明白在電路結構的設計,即可綜合風格的Verilog模塊的設計
    的頭像 發表于 08-17 16:18 ?6547次閱讀

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

    本文詳細闡述了在一個testbench,應該如何使用阻塞賦值阻塞賦值。首先說結論,建議在t
    的頭像 發表于 04-15 09:34 ?247次閱讀
    在testbench<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><b class='flag-5'>賦值</b>

    Verilog阻塞阻塞原理分析

    Verilog阻塞阻塞原理分析在Verilog語言最難弄明白的結構
    發表于 11-23 12:02

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

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

    Verilog阻塞阻塞賦值

    發表于 04-26 13:59

    Verilog阻塞賦值阻塞賦值的區別是什么

    Verilog阻塞賦值阻塞賦值的區別
    發表于 12-30 06:22

    verilog阻塞賦值阻塞賦值

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

    IEEE Verilog阻塞賦值阻塞賦值的區別

    阻塞賦值對應的電路往往與觸發沿沒有關系,只與輸入電平的變化有關系。阻塞賦值對應的電路結構往往與觸發沿有關系,只有在觸發沿時才有可能發生
    的頭像 發表于 06-17 11:57 ?1.2w次閱讀
    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>的區別

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

    對于VerilogHDL語言中,經常在always模塊,面臨兩種賦值方式:阻塞賦值阻塞
    發表于 11-19 15:48 ?1265次閱讀

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

    阻塞賦值阻塞賦值的可綜合性 Blocking Assignment阻塞
    的頭像 發表于 05-12 09:45 ?2869次閱讀
    簡述<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阻塞語句和阻塞語句的區別

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

    時序邏輯阻塞阻塞

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

    verilog阻塞賦值阻塞賦值的區別

    阻塞賦值操作符用等號(即 = )表示。“阻塞”是指在進程語句(initial和always),當前的賦值語句阻斷了其后的語句,也就是說后面
    發表于 12-19 16:49 ?7884次閱讀

    阻塞賦值阻塞賦值

    ”=“阻塞賦值與”
    的頭像 發表于 09-12 09:06 ?1228次閱讀
    <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同步和異步的區別 verilog阻塞賦值阻塞賦值的區別

    Verilog是一種硬件描述語言,用于設計和模擬數字電路。在Verilog,同步和異步是用來描述數據傳輸和信號處理的兩種不同方式,而阻塞賦值
    的頭像 發表于 02-22 15:33 ?2068次閱讀
    主站蜘蛛池模板: tueb69xxxxxhd日本| 国产午夜在线观看视频播放 | 午夜精品影院 | 欧美日韩亚洲色图 | 亚州人成网在线播放 | 久久精品国波多野结衣 | 国产免费午夜 | 日本口工禁漫画无遮挡全彩 | 天天添 | 久久免费视频网站 | 欧美一区二区视频三区 | 国产福利在线免费 | 五月婷婷六月合 | 亚洲综合香蕉 | 亚洲最新| 美女视频黄的免费视频网页 | 色香色香欲天天天影视综合网 | 夜夜骑天天操 | 欧美操操操操 | 久久久免费精品视频 | 福利毛片 | 女性一级全黄生活片在线播放 | 青草网址| 日韩一级黄色录像 | 牛牛碰在线视频 | 国产小视频在线观看www | 五月婷婷六月丁香 | 欧美高清视频一区 | 欧美日韩一日韩一线不卡 | 四虎国产精品4hu永久 | 丁香六月婷婷精品免费观看 | 狠狠操人人 | 亚洲视频在线免费看 | 爽好舒服快给老师 | 久久久精品免费热线观看 | 色亚洲视频 | 一二三四日本视频社区 | 午夜色视频 | 色香蕉在线观看网站 | 久久天天躁狠狠躁夜夜2020一 | 久久大尺度 |