欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

阻塞賦值和非阻塞賦值的用法一篇文章就夠了

汽車玩家 ? 來(lái)源:FPGA技術(shù)聯(lián)盟 ? 作者:Jarvis ? 2020-01-30 17:41 ? 次閱讀

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

基本概念

阻塞賦值(Blocking Assignment)

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

[變量] = [邏輯表達(dá)式];

阻塞賦值在執(zhí)行的時(shí)候,右端表達(dá)式執(zhí)行并賦值到左邊變量,不會(huì)受任何情況打斷。所以在本次賦值結(jié)束之前他“阻塞”了當(dāng)前其他的賦值任務(wù),阻塞賦值的操作和C語(yǔ)言中的變量賦值非常相似。

非阻塞賦值(Nonblocking assignment)

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

[變量] 《= [邏輯表達(dá)式];

非阻塞賦值行為有些細(xì)微之處比較難以理解。我們最好從硬件角度來(lái)理解,always模塊可以被認(rèn)為是純硬件模塊,當(dāng)always模塊被激活時(shí),非阻塞賦值的右側(cè)表達(dá)式就開(kāi)始執(zhí)行;當(dāng)always模塊所有表達(dá)式執(zhí)行結(jié)束之后,所有執(zhí)行結(jié)果才賦值到左側(cè)變量當(dāng)中。之所以稱為“非阻塞”就是在本條賦值語(yǔ)句執(zhí)行的過(guò)程中,其他賦值語(yǔ)句也可以執(zhí)行。

金規(guī)

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

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

阻塞賦值實(shí)現(xiàn)1bit比較器

module eq1_block

input wire i0, i1,

output reg eq

);

reg p0, p1;

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

// 語(yǔ)句描述的順序非常關(guān)鍵

begin

p0 = ~i0 & ~i1;

p1 = i0 & i1;

eq = p0 | p1;

end

endmodule

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

always @(i0,i1)

begin

eq = p0 | p1;

p0 = ~i0 & ~i1;

p1 = i0 & i1;

end

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

非阻塞賦值實(shí)現(xiàn)1bit比較器

module eq1_non_block

input wire i0, i1,

output reg eq

);

reg p0, p1;

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

// 描述順序無(wú)關(guān)緊要

begin

p0 《= ~i0 & ~i1;

p1 《= i0 & i1;

eq 《= p0 | p1;

end

endmodule

分析:p0和p1包含在敏感量列表當(dāng)中,當(dāng)i0 或者 i1有所變化,always模塊被激活,p0和p1在第一個(gè)時(shí)鐘節(jié)拍結(jié)束時(shí)賦值,由于eq值為基于p0和p1原來(lái)保持值的賦值,所以eq不變,當(dāng)前賦值結(jié)束時(shí),always模塊重新被激活,由于p0和p1被改變(這就是p0和p1放在敏感量列表中的原因),eq變量在第二個(gè)時(shí)鐘節(jié)拍賦予了新值。從以上分析,即使將以上語(yǔ)句的順序發(fā)生改變,也不會(huì)影響最終結(jié)果,因?yàn)閑q的賦值以及always模塊的激活與這些語(yǔ)句的順序并沒(méi)關(guān)系。

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

2. 時(shí)序邏輯描述,采用非阻塞賦值方式賦值

就單獨(dú)一個(gè)寄存器來(lái)說(shuō),阻塞賦值和非阻塞賦值都可以描述存儲(chǔ)單元,如DFF可以描述為

always@(posedge clk)

q 《= d;

也可以描述為

always@(posedge clk)

q = d;

但是當(dāng)設(shè)計(jì)中存在多個(gè)寄存器描述單元的時(shí)候,就會(huì)有細(xì)微的查別,假設(shè)有兩個(gè)寄存器在每個(gè)時(shí)鐘的上升沿進(jìn)行數(shù)據(jù)交換,采用阻塞賦值描述如下:

always@(posedge clk)

a = b;

always@(posedge clk)

b = a;

在時(shí)鐘的上升沿,兩個(gè)always語(yǔ)句同時(shí)被激活并且并行執(zhí)行,一個(gè)時(shí)鐘節(jié)拍后兩條語(yǔ)句執(zhí)行結(jié)束,按照verilog語(yǔ)法標(biāo)準(zhǔn),兩個(gè)always語(yǔ)句執(zhí)行結(jié)果時(shí)間順序上誰(shuí)都有可能在前面,這樣一來(lái),如果第一個(gè)always語(yǔ)句執(zhí)行在前面,由于阻塞賦值,所以變量a立即得到b的賦值,那么當(dāng)?shù)诙€(gè)always塊執(zhí)行之后,變量b得到a的賦值,由于剛才第一個(gè)always執(zhí)行的時(shí)候b值賦予了a,所以現(xiàn)在b的值會(huì)維持不變,還是原來(lái)的值。

同樣的道理,如果第二個(gè)always模塊先執(zhí)行了,那么a就會(huì)保持自身值不變,從Verilog語(yǔ)法角度來(lái)看,兩種結(jié)果都是有效的。但是從數(shù)字電路的角度來(lái)說(shuō),明顯引起了競(jìng)爭(zhēng)。

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

always@(posedge clk)

a 《= b;

always@(posedge clk)

b 《= a;

采用非阻塞賦值,由于原始信號(hào)在賦值語(yǔ)句中使用,所以a和b都會(huì)得到正確的值,而與順序沒(méi)有關(guān)系。所以在時(shí)序邏輯描述中,阻塞賦值往往會(huì)引起條件競(jìng)爭(zhēng),所以要采用非阻塞賦值方式賦值。

總結(jié)一下

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

② 時(shí)序邏輯描述,采用非阻塞賦值方式賦值

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

    關(guān)注

    0

    文章

    9

    瀏覽量

    9170
  • VerilogHDL
    +關(guān)注

    關(guān)注

    2

    文章

    39

    瀏覽量

    19138
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)組名之間可以直接賦值

    數(shù)組之間的賦值能不能直接使用等于號(hào)?比如這樣的代碼。 int main(){ int a[5] = {1, 2, 3, 4, 5}; int b[5] = {0}; b = a
    的頭像 發(fā)表于 11-26 11:23 ?219次閱讀

    socket編程中的阻塞阻塞

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

    Verilog HDL的基礎(chǔ)知識(shí)

    本文繼續(xù)介紹Verilog HDL基礎(chǔ)知識(shí),重點(diǎn)介紹賦值語(yǔ)句、阻塞阻塞、循環(huán)語(yǔ)句、同步與異步、函數(shù)與任務(wù)語(yǔ)法知識(shí)。
    的頭像 發(fā)表于 10-24 15:00 ?608次閱讀
    Verilog HDL的基礎(chǔ)知識(shí)

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

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

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

    主線程)調(diào)用該函數(shù)時(shí),CyU3PUsbHostEpWaitForCompletion 函數(shù)經(jīng)常阻塞,雖然指定了超時(shí)值,但從未返回。 我想應(yīng)該在主程序線程中調(diào)用該函數(shù),以避免出現(xiàn)阻塞問(wèn)題。 如何正確使用該功能而不造成
    發(fā)表于 07-23 07:57

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

    :task...endtask 11、循環(huán)語(yǔ)句:for 12、賦值符號(hào):=和<=(阻塞阻塞賦值) 硬件設(shè)計(jì)的精髓,力求用最簡(jiǎn)單的語(yǔ)
    發(fā)表于 06-23 14:58

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

    請(qǐng)問(wèn)使用lwip創(chuàng)建socket,該如何做到阻塞的接收發(fā)送數(shù)據(jù)?
    發(fā)表于 06-19 06:02

    關(guān)于Verilog的些基本語(yǔ)法

    、always@(邊沿觸發(fā)):阻塞賦值語(yǔ)句,對(duì)應(yīng)時(shí)序邏輯電路。G、always@(電平觸發(fā)):阻塞賦值語(yǔ)句,對(duì)應(yīng)組合邏輯電路。 注意:
    發(fā)表于 05-31 18:31

    為什么指針之間不要隨意賦值呢?

    指針之間也不能隨意賦值。
    的頭像 發(fā)表于 03-28 17:13 ?766次閱讀
    為什么指針之間不要隨意<b class='flag-5'>賦值</b>呢?

    什么是阻塞阻塞

    什么是阻塞阻塞?我們就用管道的讀寫(xiě)來(lái)舉例子。
    的頭像 發(fā)表于 03-25 10:04 ?563次閱讀

    如何在8051單片機(jī)上編程個(gè)阻塞延遲函數(shù)?

    術(shù)語(yǔ)阻塞意味著微控制器的主代碼在整個(gè)延遲期間被阻塞(什么都不做)。對(duì)于小的延遲和簡(jiǎn)單的問(wèn)題,這通常是可以接受的,但可能導(dǎo)致不可接受的操作。
    發(fā)表于 02-29 11:48 ?869次閱讀

    mapgis如何給區(qū)屬性賦值

    MapGIS是款功能強(qiáng)大的地理信息系統(tǒng)軟件,它提供了豐富的功能和工具,使用戶能夠?qū)Φ乩頂?shù)據(jù)進(jìn)行快速、高效的管理和分析。其中個(gè)重要的功能就是給區(qū)屬性賦值,即對(duì)地圖中的區(qū)域進(jìn)行分類和標(biāo)記,以便更好
    的頭像 發(fā)表于 02-23 17:49 ?2414次閱讀

    proteus屬性賦值工具怎么用

    Proteus是種電路設(shè)計(jì)和仿真軟件,在進(jìn)行電路設(shè)計(jì)和仿真時(shí),屬性賦值是非常重要的步驟。屬性賦值工具可以幫助用戶快速有效地配置電路元件的屬性,從而實(shí)現(xiàn)電路的準(zhǔn)確仿真。下面是關(guān)于Proteus屬性
    的頭像 發(fā)表于 02-23 17:19 ?4854次閱讀

    assign語(yǔ)句和always語(yǔ)句的用法

    用法和功能。 、Assign語(yǔ)句 Assign語(yǔ)句的定義和語(yǔ)法 Assign語(yǔ)句用于在HDL中連續(xù)賦值,它允許在設(shè)計(jì)中為信號(hào)或變量分配個(gè)值。Assign語(yǔ)句的語(yǔ)法如下: assi
    的頭像 發(fā)表于 02-22 16:24 ?2813次閱讀

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

    Verilog是種硬件描述語(yǔ)言,用于設(shè)計(jì)和模擬數(shù)字電路。在Verilog中,同步和異步是用來(lái)描述數(shù)據(jù)傳輸和信號(hào)處理的兩種不同方式,而阻塞賦值
    的頭像 發(fā)表于 02-22 15:33 ?1850次閱讀