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

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

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

Verilog中的賦值語(yǔ)句的區(qū)別

電子設(shè)計(jì) ? 來(lái)源:博客園 ? 作者:nanoty ? 2020-11-26 10:04 ? 次閱讀

1. 連續(xù)賦值語(yǔ)句(Continuous Assignments)

連續(xù)賦值語(yǔ)句是Verilog數(shù)據(jù)流建模的基本語(yǔ)句,用于對(duì)線網(wǎng)進(jìn)行賦值,等價(jià)于門(mén)級(jí)描述,是從更高的抽象角度來(lái)對(duì)電路進(jìn)行描述。連續(xù)賦值語(yǔ)句必須以關(guān)鍵詞assign開(kāi)始。

連續(xù)復(fù)制的主要特點(diǎn)是:

連續(xù)賦值語(yǔ)句的左值可以是一下類(lèi)型之一:
①標(biāo)量線網(wǎng)
②向量線網(wǎng)
③矩陣中的一個(gè)元素(該矩陣可以是標(biāo)量線網(wǎng)類(lèi)型的,也可以是向量線網(wǎng)類(lèi)型的)
④向量線網(wǎng)的某一位
⑤向量線網(wǎng)的部分位

以及上述各種類(lèi)型的拼接體

但是,不能是向量或向量寄存器。

連續(xù)賦值語(yǔ)句總是處于激活狀態(tài)。只要任意一個(gè)操作數(shù)發(fā)生變化,表達(dá)式就會(huì)被立即重新計(jì)算,并且將結(jié)果賦給等號(hào)左邊的線網(wǎng)。
操作數(shù)可以是標(biāo)量或向量的線網(wǎng)或寄存器,也可以是函數(shù)的調(diào)用。
賦值延遲用于控制對(duì)線網(wǎng)賦予新值的時(shí)間,根據(jù)仿真時(shí)間單位進(jìn)行說(shuō)明。賦值延遲類(lèi)似于門(mén)延遲,對(duì)于描述實(shí)際電路中的時(shí)序是非常重要的。

2. 過(guò)程賦值語(yǔ)句(Procedural Assignments)

過(guò)程賦值語(yǔ)句的更新對(duì)象是寄存器、整數(shù)、實(shí)數(shù)或時(shí)間變量等。這些類(lèi)型的變量在被賦值后,其值將保持不變,直到被其他過(guò)程賦值語(yǔ)句賦予新值。過(guò)程賦值語(yǔ)句只有在執(zhí)行到的時(shí)候才會(huì)起作用。過(guò)程賦值語(yǔ)句只能在initial或always語(yǔ)句內(nèi)進(jìn)行賦值,只能對(duì)變量數(shù)據(jù)類(lèi)型賦值,同時(shí)initial和always中只能使用過(guò)程賦值語(yǔ)句。

過(guò)程賦值語(yǔ)句的左值可以是以下類(lèi)型之一:

①reg、整形數(shù)、實(shí)型數(shù)、時(shí)間寄存器變量或存儲(chǔ)器單元

②上述各種類(lèi)型的位選(例如:addr[3])

③上述各種類(lèi)型的域選(例如:addr[31:16])

④上面三種類(lèi)型的拼接

過(guò)程性賦值語(yǔ)句包括兩種類(lèi)型的賦值語(yǔ)句:阻塞賦值(=)和非阻塞賦值(<=)(其主要區(qū)別詳見(jiàn)各類(lèi)Verilog參考書(shū),這里不再詳述)。

3. 過(guò)程連續(xù)賦值語(yǔ)句(Procedural Continuous Assignments)

過(guò)程連續(xù)賦值是在過(guò)程塊內(nèi)對(duì)變量或線網(wǎng)型數(shù)據(jù)進(jìn)行連續(xù)賦值,是一種過(guò)程性賦值,換言之,過(guò)程性連續(xù)賦值語(yǔ)句是一種能夠在always或initial語(yǔ)句塊中出現(xiàn)的語(yǔ)句。這種賦值可以改寫(xiě)(Override)所有其他語(yǔ)句對(duì)線網(wǎng)或者變量的賦值。這種賦值允許賦值表達(dá)式被連續(xù)的驅(qū)動(dòng)進(jìn)入到變量或線網(wǎng)中去。

過(guò)程連續(xù)賦值語(yǔ)句有兩種類(lèi)型:

①assign和deassign過(guò)程性語(yǔ)句:對(duì)變量進(jìn)行賦值。

②force和release過(guò)程性語(yǔ)句:主要用于對(duì)線網(wǎng)賦值,也可以用于對(duì)變量賦值。

3.1 assign和deassign語(yǔ)句

assign和deassign語(yǔ)句構(gòu)成了一類(lèi)過(guò)程性連續(xù)賦值語(yǔ)句,只能用于對(duì)寄存器類(lèi)型變量的連續(xù)賦值操作,不能用來(lái)對(duì)線網(wǎng)類(lèi)型數(shù)據(jù)進(jìn)行連續(xù)賦值操作。

①assign語(yǔ)句

語(yǔ)法:assign <寄存器類(lèi)型變量> =<賦值表達(dá)式>;

assign在執(zhí)行時(shí),寄存器類(lèi)型變量將由賦值表達(dá)式進(jìn)行連續(xù)驅(qū)動(dòng),即進(jìn)入連續(xù)賦值狀態(tài)。如果此時(shí)有普通的過(guò)程賦值語(yǔ)句對(duì)該寄存器變量進(jìn)行過(guò)程賦值操作,由于過(guò)程連續(xù)賦值語(yǔ)句assign的優(yōu)先級(jí)高于普通過(guò)程賦值語(yǔ)句,所以出于連續(xù)賦值狀態(tài)的寄存器變量將忽略普通過(guò)程賦值語(yǔ)句對(duì)它的過(guò)程賦值操作,其邏輯狀態(tài)仍然由過(guò)程連續(xù)賦值語(yǔ)句內(nèi)的賦值表達(dá)式所決定。

如果先后有兩條assign語(yǔ)句對(duì)同一寄存器變量進(jìn)行了過(guò)程連續(xù)賦值操作,那么第二條assign的執(zhí)行將覆蓋第一條assign的執(zhí)行效果。

②deassign語(yǔ)句

語(yǔ)法:deassign <寄存器類(lèi)型變量>;

deassign語(yǔ)句是一條撤銷(xiāo)連續(xù)賦值語(yǔ)句,用來(lái)結(jié)束對(duì)變量的連續(xù)賦值操作。當(dāng)deassign語(yǔ)句執(zhí)行后,原來(lái)由assign語(yǔ)句對(duì)該變量進(jìn)行的連續(xù)賦值操作將失效,寄存器變量被連續(xù)賦值的狀態(tài)將得到解除,該變量又可以由普通過(guò)程賦值語(yǔ)句進(jìn)行賦值操作了。這里需要注意一點(diǎn),當(dāng)執(zhí)行該語(yǔ)句撤銷(xiāo)對(duì)某寄存器變量的連續(xù)賦值后,該寄存器變量仍將保持使用該語(yǔ)句之前的原有值。

③示例:

上述語(yǔ)句執(zhí)行過(guò)程如下:

s0:在0時(shí)刻,out被賦值為0,并且保持這個(gè)取值;

s1:在10時(shí)刻,s1開(kāi)始執(zhí)行,實(shí)現(xiàn)了對(duì)變量out的連續(xù)賦值操作,因此從10時(shí)刻開(kāi)始,out將處于連續(xù)賦值狀態(tài);

s2:在20時(shí)刻,s2開(kāi)始執(zhí)行,將覆蓋s1產(chǎn)生的作用,所以從20時(shí)刻開(kāi)始,out將由c & d連續(xù)驅(qū)動(dòng);

s3:s3操作覆蓋掉s2操作;

s4:當(dāng)deassign語(yǔ)句得到執(zhí)行,變量out連續(xù)賦值狀態(tài)被解除,其取值將保持最后一次assign語(yǔ)句賦予的值,即“e & f”;

3.2 force和release語(yǔ)句

force和release語(yǔ)句與assign和deassign語(yǔ)句類(lèi)似,也是一種過(guò)程連續(xù)賦值語(yǔ)句。這組賦值語(yǔ)句不僅能對(duì)寄存器類(lèi)型變量產(chǎn)生作用,還能對(duì)線網(wǎng)類(lèi)型數(shù)據(jù)進(jìn)行連續(xù)賦值操作。

①force語(yǔ)句

語(yǔ)法:force <寄存器變量或者線網(wǎng)數(shù)據(jù)> = <賦值表達(dá)式>>;

force語(yǔ)句應(yīng)用于寄存器類(lèi)型變量時(shí),則在force語(yǔ)句執(zhí)行后,該寄存器變量將強(qiáng)制由進(jìn)行連續(xù)驅(qū)動(dòng),進(jìn)入被連續(xù)賦值的狀態(tài),此時(shí)將忽略其他較低優(yōu)先級(jí)的賦值語(yǔ)句對(duì)該寄存器變量的賦值操作,直到執(zhí)行一條release語(yǔ)句來(lái)釋放對(duì)該寄存器變量的連續(xù)賦值為止。

force語(yǔ)句應(yīng)用于線網(wǎng)數(shù)據(jù)時(shí),則force語(yǔ)句執(zhí)行后,對(duì)應(yīng)的線網(wǎng)數(shù)據(jù)將得到的連續(xù)驅(qū)動(dòng),此時(shí)將忽略該線網(wǎng)數(shù)據(jù)上較低優(yōu)先級(jí)的驅(qū)動(dòng),直到有一條release語(yǔ)句執(zhí)行為止。

②release語(yǔ)句

語(yǔ)法:release <寄存器變量或者線網(wǎng)數(shù)據(jù)>;

release語(yǔ)句執(zhí)行后,原先由force語(yǔ)句對(duì)變量或者線網(wǎng)施加的過(guò)程連續(xù)賦值將失效,變量將解除被被連續(xù)賦值的狀態(tài),較低優(yōu)先級(jí)的賦值語(yǔ)句的賦值操作將有效。

③示例:

s0:實(shí)現(xiàn)對(duì)變量var_reg1的過(guò)程賦值操作,即var_reg1被賦值為3'b000;

s1:執(zhí)行assign過(guò)程連續(xù)賦值語(yǔ)句,用來(lái)實(shí)現(xiàn)對(duì)變量var_reg2的連續(xù)賦值,從而var_reg2將被連續(xù)賦值為3'b001;

s2:在執(zhí)行本條語(yǔ)句時(shí),var_reg1未被assign語(yǔ)句進(jìn)行過(guò)連續(xù)賦值操作,因此var_reg1被force連續(xù)賦值為3'b100;

s3:執(zhí)行本條語(yǔ)句后,var_reg2被force連續(xù)賦值為3'b100;

s4:執(zhí)行本條語(yǔ)句時(shí),因?yàn)樽兞縱ar_reg1將退出連續(xù)賦值的狀態(tài),因?yàn)関ar_reg1未曾被assign語(yǔ)句進(jìn)行過(guò)連續(xù)賦值操作,故var_reg1取值保持不變,即保持force狀態(tài)時(shí)的值3'b100;

s5:執(zhí)行本語(yǔ)句時(shí),因?yàn)関ar_reg2在執(zhí)行s3之前已經(jīng)由s1實(shí)現(xiàn)了連續(xù)賦值,所以在本條語(yǔ)句s5執(zhí)行后,變量var_reg2將恢復(fù)到由assign語(yǔ)句s1確定的連續(xù)賦值狀態(tài),即3'b001;

4. 賦值語(yǔ)句的區(qū)別

4.1 連續(xù)賦值語(yǔ)句和過(guò)程賦值語(yǔ)句之間的區(qū)別

? 連續(xù)賦值語(yǔ)句由assign來(lái)標(biāo)示,而過(guò)程賦值語(yǔ)句不能包含這個(gè)關(guān)鍵詞;
? 連續(xù)賦值語(yǔ)句中左側(cè)的數(shù)據(jù)類(lèi)型必須是線網(wǎng)數(shù)據(jù)類(lèi)型,而過(guò)程賦值語(yǔ)句中的被賦值數(shù)據(jù)類(lèi)型則必須是寄存器類(lèi)型的變量;
? 連續(xù)賦值語(yǔ)句不能出現(xiàn)在過(guò)程塊(initial或always)中,而過(guò)程賦值語(yǔ)句可以;
? 連續(xù)賦值語(yǔ)句主要用來(lái)對(duì)組合邏輯電路進(jìn)行建模以及對(duì)線網(wǎng)數(shù)據(jù)間的連接進(jìn)行描述,而過(guò)程賦值語(yǔ)句主要用來(lái)對(duì)時(shí)序邏輯電路進(jìn)行行為描述;
? 連續(xù)賦值語(yǔ)句對(duì)被賦值線網(wǎng)型數(shù)據(jù)的賦值是“連續(xù)”的(即賦值表達(dá)式的任何變化都會(huì)在立刻反應(yīng)在線網(wǎng)數(shù)據(jù)的取值上),而過(guò)程性賦值語(yǔ)句,只有在過(guò)程賦值語(yǔ)句被執(zhí)行時(shí)才執(zhí)行賦值操作,語(yǔ)句執(zhí)行完后被賦值變量的取值不再受到賦值表達(dá)式的影響(注意這里的一次是指:在initial塊中,過(guò)程性賦值只順序執(zhí)行一次,而在always塊中,每一次滿(mǎn)足always的條件時(shí),都要順序執(zhí)行一次該always塊中的語(yǔ)句。)。
? 連續(xù)賦值與過(guò)程賦值的區(qū)別:

4.2 過(guò)程連續(xù)賦值語(yǔ)句和連續(xù)賦值語(yǔ)句之間的區(qū)別

? 過(guò)程連續(xù)賦值語(yǔ)句只能用在過(guò)程塊(initial過(guò)程快或always過(guò)程塊)內(nèi),而連續(xù)賦值語(yǔ)句不能出現(xiàn)在過(guò)程塊中。
? 過(guò)程連續(xù)賦值語(yǔ)句可以對(duì)寄存器類(lèi)型變量進(jìn)行連續(xù)賦值(其中force-release語(yǔ)句還可以對(duì)線網(wǎng)進(jìn)行連續(xù)賦值),但是其賦值目標(biāo)不能是變量或線網(wǎng)的某一位或某幾位,而連續(xù)賦值語(yǔ)句只能對(duì)線網(wǎng)數(shù)據(jù)進(jìn)行賦值,賦值目標(biāo)可以是線網(wǎng)型數(shù)據(jù)的某一位或某幾位。

聲明:本文內(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)投訴
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7507

    瀏覽量

    163955
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110141
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    FPGA Verilog HDL有什么奇技巧?

    reg 變量,因?yàn)?initial 塊是不可綜合的,只能在仿真環(huán)境中使用,用于初始化寄存器、內(nèi)存或執(zhí)行仿真期間的其他任務(wù)。 但在 FPGA 設(shè)計(jì),可以使用默認(rèn)賦值或者使用有條件的賦值語(yǔ)句
    發(fā)表于 09-12 19:10

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

    一、了解不同的變量類(lèi)型 ①、wire和reg的區(qū)別 verilog的變量類(lèi)型有wire類(lèi)型和reg類(lèi)型。在實(shí)際的電路wire類(lèi)型對(duì)應(yīng)的就是一根導(dǎo)線,只存在傳輸?shù)淖饔谩6鴕eg類(lèi)型在
    發(fā)表于 05-31 18:31

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

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

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

    地進(jìn)行數(shù)據(jù)分析和可視化。 在MapGIS給區(qū)屬性賦值有多種方法,下面將詳細(xì)介紹其中的幾種常用方法。 1.手動(dòng)賦值 手動(dòng)賦值是最直接和簡(jiǎn)單的方法。首先,在MapGIS
    的頭像 發(fā)表于 02-23 17:49 ?2323次閱讀

    veriloginput和output作用

    Verilog,input和output用于定義模塊的輸入和輸出端口。它們是用于通信的關(guān)鍵元素,定義了模塊與其它模塊之間的數(shù)據(jù)傳輸接口。通過(guò)input和output端口,模塊之間可以互相傳遞數(shù)據(jù)
    的頭像 發(fā)表于 02-23 10:29 ?3255次閱讀

    verilog調(diào)用模塊端口對(duì)應(yīng)方式

    Verilog的模塊端口對(duì)應(yīng)方式,并提供示例代碼和詳細(xì)解釋?zhuān)詭椭x者更好地理解和應(yīng)用。 首先,我們來(lái)了解一下Verilog的模塊和模塊端口。一個(gè)
    的頭像 發(fā)表于 02-23 10:20 ?1820次閱讀

    verilogrepeat必須用begin和end嗎

    Verilog,repeat語(yǔ)句不需要使用begin和end塊。repeat語(yǔ)句是一種循環(huán)控制語(yǔ)句,允許重復(fù)執(zhí)行一個(gè)代碼塊指定的次數(shù)。它
    的頭像 發(fā)表于 02-23 10:14 ?1257次閱讀

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

    的用法和功能。 一、Assign語(yǔ)句 Assign語(yǔ)句的定義和語(yǔ)法 Assign語(yǔ)句用于在HDL連續(xù)賦值,它允許在設(shè)計(jì)
    的頭像 發(fā)表于 02-22 16:24 ?2636次閱讀

    veriloginitial和always的區(qū)別

    Verilog是一種硬件描述語(yǔ)言(HDL),用于設(shè)計(jì)和模擬數(shù)字電路。在Verilog,關(guān)鍵字initial和always都是用于描述電路行為的特殊語(yǔ)句。它們被用來(lái)生成仿真模型,并控制
    的頭像 發(fā)表于 02-22 16:09 ?2988次閱讀

    verilogfor循環(huán)是串行執(zhí)行還是并行執(zhí)行

    的for循環(huán)也是并行執(zhí)行的。 Verilog的for循環(huán)可以用來(lái)實(shí)現(xiàn)重復(fù)的操作,例如在一個(gè)時(shí)鐘周期中對(duì)多個(gè)電路進(jìn)行操作。在循環(huán)內(nèi)部,多個(gè)語(yǔ)句可以同時(shí)執(zhí)行,而不受循環(huán)次數(shù)的限制。這種并行執(zhí)行的機(jī)制使得
    的頭像 發(fā)表于 02-22 16:06 ?2969次閱讀

    verilog task和function區(qū)別

    verilog的task和function都是用于實(shí)現(xiàn)模塊的可重復(fù)的功能,并且可以接收參數(shù)和返回結(jié)果。但是它們?cè)诰帉?xiě)和使用上有一些區(qū)別。下面將詳細(xì)介紹task和function的
    的頭像 發(fā)表于 02-22 15:53 ?1126次閱讀

    verilogfunction和task的區(qū)別

    Verilog,F(xiàn)unction和Task是用于模塊化設(shè)計(jì)和重用代碼的兩種重要元素。它們?cè)试S開(kāi)發(fā)人員將復(fù)雜的操作分解為更小的功能單元,并在需要時(shí)調(diào)用它們。雖然Function和Task在某些方面
    的頭像 發(fā)表于 02-22 15:40 ?1928次閱讀

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

    Verilog同步和異步的區(qū)別,以及阻塞賦值和非阻塞賦值區(qū)別。 一、
    的頭像 發(fā)表于 02-22 15:33 ?1760次閱讀

    為什么TC397對(duì)外設(shè)賦值這么慢?

    現(xiàn)在遇到了一個(gè)問(wèn)題,再給GTM.ATOMX.CHX的SR0或SR1賦值時(shí)一句賦值語(yǔ)句的周期要130ns左右,相當(dāng)于幾十個(gè)指令周期;而TI的DSP芯片對(duì)相應(yīng)PWM寄存器賦值一條
    發(fā)表于 02-05 09:05