創 小黑(hēi)同(tóng)学 明(míng)德揚FPGA科教 今天(tiān)
關(guān)于(yú)阻塞賦值和(hé)非(fēi)阻塞賦值的(de)問(wèn)題(tí),明(míng)德揚的(de)学員提(tí)得比較多(duō),今天(tiān)小黑(hēi)老(lǎo)师(shī)專門(mén)給(gěi)大家(jiā)普及(jí)一(yī)下(xià)阻塞賦值和(hé)非(fēi)阻塞賦值的(de)相關(guān)知識。
一(yī)、概述
1、阻塞賦值对(duì)應(yìng)的(de)電(diàn)路(lù)往往與(yǔ)觸發(fà)沿沒(méi)有(yǒu)關(guān)系(xì),只(zhī)與(yǔ)電(diàn)平的(de)變(biàn)化(huà)有(yǒu)關(guān)系(xì)。
阻塞賦值符号(hào)“=”。
2、非(fēi)阻塞賦值对(duì)應(yìng)的(de)電(diàn)路(lù)結構往往與(yǔ)邊(biān)沿觸發(fà)有(yǒu)關(guān)系(xì),只(zhī)有(yǒu)在(zài)觸發(fà)沿时(shí)才有(yǒu)可(kě)能(néng)發(fà)生(shēng)賦值的(de)情(qíng)況。
非(fēi)阻塞賦值符号(hào)“<=”。
二(èr)、賦值方(fāng)式
1、阻塞賦值
阻塞賦值操作符用(yòng)等号(hào)(即 = )表(biǎo)示。阻塞賦值时(shí)先(xiān)計(jì)算等号(hào)右(yòu)手(shǒu)方(fāng)向(xiàng)(RHS)部(bù)分(fēn)的(de)值,这(zhè)时(shí)賦值語(yǔ)句(jù)不(bù)允许任何别的(de)語(yǔ)句(jù)的(de)干(gàn)擾,直(zhí)到(dào)現(xiàn)行的(de)賦值完成(chéng)时(shí)刻,即把RHS賦值給(gěi) LHS的(de)时(shí)刻,它(tā)才允许别的(de)賦值語(yǔ)句(jù)的(de)執行。一(yī)般可(kě)綜合的(de)阻塞賦值操作在(zài)RHS不(bù)能(néng)設定(dìng)有(yǒu)延遲,(即使是(shì)零(líng)延遲也(yě)不(bù)允许)。若在(zài)RHS 加上(shàng)延遲,則在(zài)延遲期(qī)間(jiān)会(huì)阻止賦值語(yǔ)句(jù)的(de)執行, 延遲後(hòu)才執行賦值,这(zhè)種(zhǒng)賦值語(yǔ)句(jù)是(shì)不(bù)可(kě)綜合的(de),在(zài)需要(yào)綜合的(de)模块(kuài)設計(jì)中(zhōng)不(bù)可(kě)使用(yòng)这(zhè)種(zhǒng)风格的(de)代(dài)碼。
阻塞賦值的(de)執行可(kě)以(yǐ)認为(wèi)是(shì)只(zhī)有(yǒu)一(yī)个(gè)步驟的(de)操作:
所(suǒ)謂阻塞的(de)概念是(shì)指在(zài)同(tóng)一(yī)个(gè)always块(kuài)中(zhōng),其後(hòu)面(miàn)的(de)賦值語(yǔ)句(jù)從概念上(shàng)(即使不(bù)設定(dìng)延遲)是(shì)在(zài)前(qián)一(yī)句(jù)賦值語(yǔ)句(jù)結束(shù)後(hòu)再開(kāi)始賦值的(de)。
如(rú)果(guǒ)在(zài)一(yī)个(gè)过(guò)程块(kuài)中(zhōng)阻塞賦值的(de)RHS變(biàn)量(liàng)正(zhèng)好(hǎo)是(shì)另(lìng)一(yī)个(gè)过(guò)程块(kuài)中(zhōng)阻塞賦值的(de)LHS變(biàn)量(liàng),这(zhè)两(liǎng)个(gè)过(guò)程块(kuài)又用(yòng)同(tóng)一(yī)个(gè)时(shí)鐘(zhōng)沿觸發(fà),这(zhè)时(shí)阻塞賦值操作会(huì)出(chū)現(xiàn)問(wèn)題(tí),即如(rú)果(guǒ)阻塞賦值的(de)次(cì)序安(ān)排不(bù)好(hǎo),就(jiù)会(huì)出(chū)現(xiàn)競争。若这(zhè)两(liǎng)个(gè)阻塞賦值操作用(yòng)同(tóng)一(yī)个(gè)时(shí)鐘(zhōng)沿觸發(fà),則執行的(de)次(cì)序是(shì)无法确定(dìng)的(de)。
2、非(fēi)阻塞賦值
非(fēi)阻塞賦值操作符用(yòng)小于(yú)等于(yú)号(hào) (即 <= )表(biǎo)示。在(zài)賦值操作时(shí)刻開(kāi)始时(shí)計(jì)算非(fēi)阻塞賦值符的(de)RHS表(biǎo)达(dá)式,賦值操作时(shí)刻結束(shù)时(shí)更(gèng)新LHS。在(zài)計(jì)算非(fēi)阻塞賦值的(de)RHS表(biǎo)达(dá)式和(hé)更(gèng)新LHS期(qī)間(jiān),其他(tā)的(de)Verilog語(yǔ)句(jù),包(bāo)括其他(tā)的(de)Verilog非(fēi)阻塞賦值語(yǔ)句(jù)都能(néng)同(tóng)时(shí)計(jì)算RHS表(biǎo)达(dá)式和(hé)更(gèng)新LHS。非(fēi)阻塞賦值允许其他(tā)的(de)Verilog語(yǔ)句(jù)同(tóng)时(shí)進(jìn)行操作。
非(fēi)阻塞賦值的(de)操作可(kě)以(yǐ)看(kàn)作为(wèi)两(liǎng)个(gè)步驟的(de)过(guò)程:
1)在(zài)賦值时(shí)刻開(kāi)始时(shí),計(jì)算非(fēi)阻塞賦值RHS表(biǎo)达(dá)式。
2)在(zài)賦值时(shí)刻結束(shù)时(shí),更(gèng)新非(fēi)阻塞賦值LHS表(biǎo)达(dá)式。
非(fēi)阻塞賦值操作只(zhī)能(néng)用(yòng)于(yú)对(duì)寄存器類(lèi)型變(biàn)量(liàng)進(jìn)行賦值,因(yīn)此(cǐ)只(zhī)能(néng)用(yòng)在(zài)“initial”块(kuài)和(hé)“always”块(kuài)等过(guò)程块(kuài)中(zhōng)。非(fēi)阻塞賦值不(bù)允许用(yòng)于(yú)連(lián)續賦值。
三(sān)、舉例
1、阻塞賦值
|
項目 |
例 1 |
例 2 |
|
描述 |
wire ck;
begin |
wire ck;
c = b; |
|
運算結果(guǒ) |
a = 2; c = 3; |
a = 2; c = 3; |
2、非(fēi)阻塞賦值
|
項目 |
例 1 |
例 2 |
|
描述 |
wire ck; |
wire ck;
c 〈= b; |
|
運算結果(guǒ) |
a = 2; c = 3; |
a = 2; c = 3; |
四(sì)、總(zǒng)結
綜上(shàng)所(suǒ)述,明(míng)德揚至(zhì)簡設計(jì)法提(tí)出(chū)这(zhè)樣(yàng)的(de)規則:
时(shí)序邏輯用(yòng)非(fēi)阻塞賦值
組合邏輯用(yòng)阻塞賦值。















