18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

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

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

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

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

汽車玩家 ? 來源:FPGA技術(shù)聯(lián)盟 ? 作者:Jarvis ? 2020-01-30 17:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

基本概念

阻塞賦值(Blocking Assignment)

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

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

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

非阻塞賦值(Nonblocking assignment)

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

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

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

金規(guī)

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

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

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

module eq1_block

input wire i0, i1,

output reg eq

);

reg p0, p1;

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

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

begin

p0 = ~i0 & ~i1;

p1 = i0 & i1;

eq = p0 | p1;

end

endmodule

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

always @(i0,i1)

begin

eq = p0 | p1;

p0 = ~i0 & ~i1;

p1 = i0 & i1;

end

在第一條描述中,由于p0和p1還沒有被賦予新值,所以p0和p1依然保持原來的賦值,這樣得到的最終結(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依然在敏感量列表中

// 描述順序無關(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原來保持值的賦值,所以eq不變,當(dāng)前賦值結(jié)束時(shí),always模塊重新被激活,由于p0和p1被改變(這就是p0和p1放在敏感量列表中的原因),eq變量在第二個(gè)時(shí)鐘節(jié)拍賦予了新值。從以上分析,即使將以上語句的順序發(fā)生改變,也不會影響最終結(jié)果,因?yàn)閑q的賦值以及always模塊的激活與這些語句的順序并沒關(guān)系。

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

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

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

always@(posedge clk)

q 《= d;

也可以描述為

always@(posedge clk)

q = d;

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

always@(posedge clk)

a = b;

always@(posedge clk)

b = a;

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

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

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

always@(posedge clk)

a 《= b;

always@(posedge clk)

b 《= a;

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

總結(jié)一下

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

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

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

    關(guān)注

    0

    文章

    10

    瀏覽量

    9313
  • VerilogHDL
    +關(guān)注

    關(guān)注

    2

    文章

    39

    瀏覽量

    19736
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    CH32V307 串口發(fā)送阻塞的原因?怎么解決?

    */ modbus_set_rx_mode(master); modbus發(fā)送,不知為何阻塞在rt_device_write,初始化 find open 正常
    發(fā)表于 09-18 06:06

    【HZ-RK3568開發(fā)板免費(fèi)體驗(yàn)】基于 Select Poll的TCP發(fā)服務(wù)器

    般分為網(wǎng)絡(luò)IO(本質(zhì)就是socket讀寫)和磁盤IO。 IO模型大致可以分為:同步阻塞、同步阻塞、異步、信號驅(qū)動(dòng)。 可細(xì)分為5種I/O模型: 1)
    發(fā)表于 08-19 22:01

    matlab appdesigner 表格組件賦值問題,求助

    如上圖所示,我在用matlab2021Ra APP模塊進(jìn)行編程的時(shí)候,想在表格中調(diào)入自己編寫的結(jié)構(gòu)數(shù)組,我從網(wǎng)上AI了個(gè)程序語句,看著沒問題,但是就是給表格賦值不了,還請各位大神幫忙看下這個(gè)是怎么回事,我是初學(xué)者,請各位幫
    發(fā)表于 07-12 11:45

    CH32V307串口發(fā)送阻塞的原因?如何解決?

    */ modbus_set_rx_mode(master); modbus發(fā)送,不知為何阻塞在rt_device_write,初始化 find open 正常
    發(fā)表于 06-11 08:05

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

    本文詳細(xì)闡述了在個(gè)testbench中,應(yīng)該如何使用阻塞賦值阻塞賦值。首先說結(jié)論,建議在t
    的頭像 發(fā)表于 04-15 09:34 ?891次閱讀
    在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>

    在S32DS上使用JLINK調(diào)試S32K341,被阻塞了,怎么處理?

    我正在嘗試使用 S32K341 在新板上刷寫程序,但在 S32K3X4EVB 上運(yùn)行并為 S32K341配置的相同代碼出現(xiàn)錯(cuò)誤。具體來說,當(dāng)我使用 S32DS 的 J-Link 探針運(yùn)行調(diào)試時(shí),它在此地址被阻塞,并且不會將其閃存到內(nèi)存中。有人遇到同樣的問題或可以幫助我嗎?
    發(fā)表于 04-03 08:13

    FreeRTOS進(jìn)階使用之流緩沖區(qū):高效處理字節(jié)流的秘密武器

    開銷 基于連續(xù)內(nèi)存存儲,相比隊(duì)列(每個(gè)數(shù)據(jù)項(xiàng)獨(dú)立存儲)更節(jié)省RAM。 觸發(fā)通知機(jī)制 當(dāng)緩沖區(qū)數(shù)據(jù)量達(dá)到預(yù)設(shè)的觸發(fā)閾值**時(shí),自動(dòng)喚醒等待的任務(wù),避免輪詢開銷。 阻塞阻塞模式 阻塞
    發(fā)表于 03-24 11:37

    給uint32_t數(shù)組填充整型值,除使用循環(huán)賦值外有沒有c庫函數(shù)可以實(shí)現(xiàn)?

    給uint32_t數(shù)組填充整型值,除使用循環(huán)賦值外有沒有c庫函數(shù)可以實(shí)現(xiàn)
    發(fā)表于 03-07 17:05

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

    很久才會發(fā)出來,下子出來很多數(shù)據(jù)”。經(jīng)過幫客戶檢查應(yīng)用程序源碼,發(fā)現(xiàn)應(yīng)用程序在串口阻塞方面沒有做正確的處理,修改后解決。阻塞打開串口open("/dev/tty
    的頭像 發(fā)表于 02-13 11:42 ?1087次閱讀
    “串口<b class='flag-5'>阻塞</b>”你真的會用嗎?

    使用TLV5625在主函數(shù)里面的FOR循環(huán)中對兩通道賦值,個(gè)通道不能更新數(shù)據(jù)是怎么回事?

    問題:我在使用TLV5625時(shí)出現(xiàn)如下問題,在主函數(shù)里面的FOR循環(huán)中對兩通道賦值,2通道DA可以正常更新輸出,但是同樣的語句放到定時(shí)器中斷中,只有個(gè)通道正常,另個(gè)通道不能更新數(shù)據(jù),請指教
    發(fā)表于 01-08 08:23

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

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

    文解讀Linux 5種IO模型

    Linux里有五種IO模型:阻塞IO、阻塞IO、多路復(fù)用IO、信號驅(qū)動(dòng)式IO和異步IO,我發(fā)現(xiàn)這五種IO模型,其實(shí)能和吃飯這件事關(guān)聯(lián)起來。 阻塞IO(Blocking I/O)
    的頭像 發(fā)表于 11-09 11:12 ?1190次閱讀
    <b class='flag-5'>一</b>文解讀Linux 5種IO模型

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

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

    如何優(yōu)化socket連接性能

    :根據(jù)應(yīng)用需求選擇合適的協(xié)議。TCP提供可靠的數(shù)據(jù)傳輸,而UDP則適用于對延遲敏感的應(yīng)用。 使用阻塞Socket :阻塞Socket可以避免單個(gè)操作
    的頭像 發(fā)表于 11-04 09:16 ?1393次閱讀

    socket編程中的阻塞阻塞

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