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

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

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

數(shù)字硬件建模SystemVerilog-組合邏輯建模(1)連續(xù)賦值語(yǔ)句

OpenFPGA ? 來(lái)源:OpenFPGA ? 作者:OpenFPGA ? 2022-12-07 15:31 ? 次閱讀

數(shù)字門(mén)級(jí)電路可分為兩大類(lèi):組合邏輯和時(shí)序邏輯。鎖存器是組合邏輯和時(shí)序邏輯的一個(gè)交叉點(diǎn),在后面會(huì)作為單獨(dú)的主題處理。

組合邏輯描述了門(mén)級(jí)電路,其中邏輯塊的輸出直接反映到該塊的輸入值的組合,例如,雙輸入AND門(mén)的輸出是兩個(gè)輸入的邏輯與。如果輸入值發(fā)生變化,輸出值將反映這一變化,組合邏輯的RTL模型需要反映這種門(mén)級(jí)行為,這意味著邏輯塊的輸出必須始終反映該邏輯塊當(dāng)前輸入值的組合。

SystemVerilog有三種在可綜合RTL級(jí)別表示組合邏輯的方法:連續(xù)賦值語(yǔ)句、always程序塊和函數(shù)。接下來(lái)幾篇文章將探討每種編碼風(fēng)格,并推薦最佳實(shí)踐編碼風(fēng)格。

0aaaae96-7600-11ed-8abf-dac502259ad0.png

連續(xù)賦值語(yǔ)句(布爾表達(dá)式)

連續(xù)賦值語(yǔ)句將表達(dá)式或操作結(jié)果驅(qū)動(dòng)到網(wǎng)絡(luò)或變量上,顯式連續(xù)賦值語(yǔ)句是以assign關(guān)鍵字開(kāi)始的語(yǔ)句。連續(xù)賦值語(yǔ)句的一個(gè)簡(jiǎn)單示例:

0ade14b6-7600-11ed-8abf-dac502259ad0.png

賦值的左邊,即上面的sum;在上面的例子中,每當(dāng)右邊的值發(fā)生任何變化時(shí),即在上面的例子中a或b發(fā)生變化時(shí),sum就會(huì)更新。每當(dāng)右邊發(fā)生變化時(shí),左邊的這種持續(xù)更新行為就是組合邏輯行為的模型。

連續(xù)賦值語(yǔ)句允許在右側(cè)發(fā)生更改和左側(cè)更新之間指定傳播延遲。然而,綜合編譯器預(yù)期RTL模型為零延遲,并且會(huì)忽略連續(xù)賦值語(yǔ)句中的延遲。這可能會(huì)導(dǎo)致經(jīng)過(guò)延遲驗(yàn)證的設(shè)計(jì)與忽略延遲的綜合實(shí)現(xiàn)之間不匹配。本系列文章只展示零延遲示例。

左側(cè)類(lèi)型。連續(xù)賦值語(yǔ)句的左側(cè)可以是標(biāo)量(1位)或向量,也可以是變量類(lèi)型,也可以是用戶(hù)定義的類(lèi)型。左側(cè)不能是未壓縮的的結(jié)構(gòu)體或未壓縮的數(shù)組。

在連續(xù)賦值語(yǔ)句的左側(cè)使用網(wǎng)絡(luò)或變量之間有一個(gè)重要區(qū)別:

  • 網(wǎng)絡(luò)類(lèi)型(如wire或tri)可以由多個(gè)源驅(qū)動(dòng),包括多個(gè)連續(xù)分配、多個(gè)模塊或基本實(shí)例的輸出或輸入端口連接,或驅(qū)動(dòng)的任意組合。

  • 變量類(lèi)型(如var或int)只能從單個(gè)源分配一個(gè)值,可以是:?jiǎn)蝹€(gè)輸入端口、單個(gè)連續(xù)賦值語(yǔ)句或任意數(shù)量的過(guò)程賦值(多個(gè)過(guò)程賦值被視為單個(gè)源;綜合器要求多個(gè)過(guò)程賦值在同一個(gè)過(guò)程中)。

請(qǐng)注意,logic關(guān)鍵字推斷出一種數(shù)據(jù)類(lèi)型,但其本身不是網(wǎng)絡(luò)或變量類(lèi)型。當(dāng)logic本身被使用時(shí),一個(gè)變量被推斷出來(lái),并附帶單個(gè)源賦值限制)。當(dāng)使用logic關(guān)鍵字聲明輸出模塊端口時(shí),也會(huì)推斷出一個(gè)變量。當(dāng)使用logic關(guān)鍵字聲明輸入或inout模塊端口時(shí),將推斷出具有多個(gè)驅(qū)動(dòng)程序功能的wire類(lèi)型。

最佳實(shí)踐指南7-1
在連續(xù)賦值的左側(cè)使用變量,為防止無(wú)意中出現(xiàn)多個(gè)驅(qū)動(dòng),只有打算讓一個(gè)信號(hào)有多個(gè)驅(qū)動(dòng)時(shí),才在左側(cè)使用wire或tri。

僅當(dāng)需要多個(gè)驅(qū)動(dòng)時(shí)使用網(wǎng)絡(luò)類(lèi)型(如wire或tri),例如共享總線、三態(tài)總線或inout雙向模塊端口。

對(duì)于RTL建模,語(yǔ)義規(guī)則的一個(gè)重要優(yōu)點(diǎn)是變量只能有一個(gè)來(lái)源。ASICFPGA設(shè)備中的大多數(shù)信號(hào)大多數(shù)為單源邏輯,但三態(tài)總線和雙向端口除外。變量的單源限制有助于防止無(wú)意中的編碼錯(cuò)誤,如果對(duì)具有變量類(lèi)型的同一信號(hào)進(jìn)行多個(gè)連續(xù)賦值語(yǔ)句或連接,則多源編碼錯(cuò)誤將在仿真和綜合中報(bào)告為編譯或布線錯(cuò)誤。

向量寬度不匹配。連續(xù)賦值語(yǔ)句的左側(cè)可以是與右側(cè)的信號(hào)或表達(dá)式結(jié)果不同寬度的向量大小。出現(xiàn)這種情況時(shí),SystemVerilog會(huì)自動(dòng)調(diào)整右側(cè)的向量寬度,以匹配左側(cè)的大小。如果右側(cè)的向量寬度大于左側(cè),則右側(cè)的最高有效位將被截?cái)酁樽髠?cè)的大小。如果右側(cè)是較小的向量寬度大小,則右側(cè)值將向左擴(kuò)展到左側(cè)的大小。如果表達(dá)式或運(yùn)算結(jié)果是無(wú)符號(hào)的,則左擴(kuò)展將用0擴(kuò)展。如果右側(cè)表達(dá)式或運(yùn)算結(jié)果是有符號(hào)的,則將使用符號(hào)擴(kuò)展。

最佳實(shí)踐指南7-2
確保連續(xù)賦值語(yǔ)句和程序賦值的兩側(cè)向量寬度相同。避免左側(cè)向量大小和右側(cè)向量大小不匹配 。

在一些特例的情況下,賦值的右側(cè)和左側(cè)有不同大小的向量。這方面的一個(gè)例子是變量旋轉(zhuǎn)操作(variable rotate operation)前面有介紹過(guò),可以查看之前的文章。

顯式和隱式推斷的連續(xù)賦值語(yǔ)句

連續(xù)賦值語(yǔ)句有兩種形式:顯式連續(xù)賦值語(yǔ)句和隱式連續(xù)賦值語(yǔ)句。顯式連續(xù)賦值語(yǔ)句是用assign關(guān)鍵字聲明的,如前面的代碼段和示例所示。這種形式的連續(xù)賦值語(yǔ)句既可以賦值給網(wǎng)絡(luò)類(lèi)型,也可以賦值給變量類(lèi)型。隱式連續(xù)賦值語(yǔ)句將網(wǎng)絡(luò)類(lèi)型的聲明與連續(xù)賦值語(yǔ)句相結(jié)合。即使未使用assign關(guān)鍵字,這種形式的連續(xù)性質(zhì)也是可以推斷出來(lái)的。

推斷網(wǎng)絡(luò)聲明賦值示例如下:

0af413c4-7600-11ed-8abf-dac502259ad0.png

請(qǐng)注意,推斷網(wǎng)絡(luò)聲明賦值語(yǔ)句與變量初始化語(yǔ)句不同,例如:

0b1041ca-7600-11ed-8abf-dac502259ad0.png

變量初始化只執(zhí)行一次,而推斷網(wǎng)絡(luò)聲明賦值是一個(gè)過(guò)程,每當(dāng)右側(cè)表達(dá)式上的值發(fā)生變化時(shí),就會(huì)更新左側(cè)網(wǎng)絡(luò)。推斷網(wǎng)絡(luò)聲明賦值語(yǔ)句是可綜合的。

多次連續(xù)賦值語(yǔ)句

一個(gè)模塊可以包含任意數(shù)量的連續(xù)賦值語(yǔ)句。每個(gè)連續(xù)賦值語(yǔ)句都是一個(gè)單獨(dú)的過(guò)程,與其他連續(xù)賦值語(yǔ)句并行運(yùn)行。所有連續(xù)賦值語(yǔ)句從仿真時(shí)間零點(diǎn)開(kāi)始計(jì)算右側(cè)運(yùn)算,并運(yùn)行到仿真結(jié)束。

一個(gè)模塊中的多個(gè)過(guò)程分配可用于表示數(shù)據(jù)流行為,其中功能是用布爾方程建模的,布爾方程使用SystemVerilog操作符產(chǎn)生輸出,而不是使用過(guò)程編程語(yǔ)句。在RTL模型中,數(shù)據(jù)流賦值表示數(shù)據(jù)在寄存器之間流動(dòng)的組合邏輯。

下面的示例使用連續(xù)賦值語(yǔ)句來(lái)仿真通過(guò)加法器、乘法器和減法器的數(shù)據(jù)流。該數(shù)據(jù)流的結(jié)果在時(shí)鐘每個(gè)正邊緣被存儲(chǔ)在寄存器中:

示例7-1:帶寄存器輸出的加、乘、減數(shù)據(jù)流處理
//`begin_keywords"1800-2012"//useSystemVerilog-2012keywords
moduledataflow
#(parameterN=4)//bussize
(inputlogicclk,//scalarinput
inputlogic[N-1:0]a,b,c,//scalableinputsize
inputlogic[1:0]factor,//fixedinputsize
outputlogic[N-1:0]out//scalableoutputsize
);
timeunit1ns;timeprecision1ns;

logic[N-1:0]sum,diff,prod;

assignsum=a+b;
assigndiff=prod-c;
assignprod=sum*factor;

always@(posedgeclk)
out<=?diff;

endmodule:?dataflow
//`end_keywords

因?yàn)槟K中的多個(gè)連續(xù)賦值語(yǔ)句并行運(yùn)行,所以RTL源代碼中賦值的順序沒(méi)有區(qū)別。這可以通過(guò)比較示例7-1中連續(xù)賦值語(yǔ)句的順序和圖7-1所示的綜合結(jié)果中的數(shù)據(jù)流順序看出來(lái)。RTL代碼按加法、減法、乘法的順序列出賦值語(yǔ)句,但操作的數(shù)據(jù)流是加法、乘法、減法。

0b1f3be4-7600-11ed-8abf-dac502259ad0.png
圖7-1:示例7-1的綜合結(jié)果

同時(shí)使用連續(xù)賦值語(yǔ)句和always程序

一個(gè)模塊可以包含連續(xù)賦值語(yǔ)句和always程序的組合。

下面的簡(jiǎn)單示例演示了一個(gè)帶有雙向數(shù)據(jù)總線的靜態(tài)RAM。當(dāng)從RAM讀取數(shù)據(jù)時(shí),數(shù)據(jù)總線作為輸出端口被驅(qū)動(dòng)——當(dāng)不被讀取時(shí),數(shù)據(jù)總線被分配高阻態(tài),以便其他設(shè)備可以驅(qū)動(dòng)該總線,連續(xù)賦值語(yǔ)句用于仿真輸出功能,以及always程序用于仿真輸入功能(方便在時(shí)鐘上升沿觸發(fā))。

0b5a5b48-7600-11ed-8abf-dac502259ad0.png

數(shù)據(jù)總線是一個(gè)雙向inout端口,必須是網(wǎng)絡(luò)類(lèi)型,如wire或tri,才能有多個(gè)驅(qū)動(dòng)源。當(dāng)數(shù)據(jù)總線是RAM的輸出時(shí),它可以由RAM驅(qū)動(dòng),當(dāng)數(shù)據(jù)總線是RAM的輸入時(shí),它可以由其他模塊驅(qū)動(dòng)。只有連續(xù)賦值語(yǔ)句才能分配給網(wǎng)絡(luò)數(shù)據(jù)類(lèi)型。

每個(gè)連續(xù)賦值語(yǔ)句和每個(gè)always程序都是一個(gè)單獨(dú)的并行過(guò)程,從仿真時(shí)間零點(diǎn)開(kāi)始,在整個(gè)仿真過(guò)程中運(yùn)行。模塊中連續(xù)賦值語(yǔ)句和always程序的順序并不重要,因?yàn)檫@些程序是并行運(yùn)行的。

審核編輯 :李倩



聲明:本文內(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)注

    8

    文章

    904

    瀏覽量

    41394
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4262

    瀏覽量

    62243
  • 數(shù)據(jù)總線
    +關(guān)注

    關(guān)注

    2

    文章

    56

    瀏覽量

    17525

原文標(biāo)題:數(shù)字硬件建模SystemVerilog-組合邏輯建模(1)連續(xù)賦值語(yǔ)句

文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用C2000 MCU對(duì)用于數(shù)字控制的雙向降壓/升壓轉(zhuǎn)換器進(jìn)行建模

    電子發(fā)燒友網(wǎng)站提供《使用C2000 MCU對(duì)用于數(shù)字控制的雙向降壓/升壓轉(zhuǎn)換器進(jìn)行建模.pdf》資料免費(fèi)下載
    發(fā)表于 10-12 11:48 ?0次下載
    使用C2000 MCU對(duì)用于<b class='flag-5'>數(shù)字</b>控制的雙向降壓/升壓轉(zhuǎn)換器進(jìn)行<b class='flag-5'>建模</b>

    【「數(shù)字IC設(shè)計(jì)入門(mén)」閱讀體驗(yàn)】+目錄和前2章

    UDP50 6.3.3邊沿觸發(fā)的時(shí)序電路UDP51 6.3.4邊沿觸發(fā)和電平觸發(fā)的混合行為51 6.4另一實(shí)例52 6.5表項(xiàng)匯總52 第7章數(shù)據(jù)流模型化54 7.1連續(xù)賦值語(yǔ)句54 7.2舉例55 7.3
    發(fā)表于 10-10 17:12

    知識(shí)分享 | 輕松實(shí)現(xiàn)優(yōu)質(zhì)建模

    知識(shí)分享在知識(shí)分享欄目中,我們會(huì)定期與讀者分享來(lái)自MES模賽思的基于模型的軟件開(kāi)發(fā)相關(guān)Know-How干貨,關(guān)注公眾號(hào),隨時(shí)掌握基于模型的軟件設(shè)計(jì)的技術(shù)知識(shí)。輕松實(shí)現(xiàn)優(yōu)質(zhì)建模前言在基于模型的開(kāi)發(fā)
    的頭像 發(fā)表于 09-12 08:08 ?275次閱讀
    知識(shí)分享 | 輕松實(shí)現(xiàn)優(yōu)質(zhì)<b class='flag-5'>建模</b>

    通向數(shù)字創(chuàng)新之路:25個(gè)組合電路核心主題概念

    組合電路是數(shù)字系統(tǒng)的基礎(chǔ)構(gòu)建模塊。深入理解以下25個(gè)主題,將有助于全面掌握組合電路的原理和應(yīng)用:01.布爾代數(shù)布爾代數(shù)是數(shù)字
    的頭像 發(fā)表于 08-15 18:28 ?472次閱讀
    通向<b class='flag-5'>數(shù)字</b>創(chuàng)新之路:25個(gè)<b class='flag-5'>組合</b>電路核心主題概念

    Python建模算法與應(yīng)用

    Python作為一種功能強(qiáng)大、免費(fèi)、開(kāi)源且面向?qū)ο蟮木幊陶Z(yǔ)言,在科學(xué)計(jì)算、數(shù)學(xué)建模、數(shù)據(jù)分析等領(lǐng)域展現(xiàn)出了卓越的性能。其簡(jiǎn)潔的語(yǔ)法、對(duì)動(dòng)態(tài)輸入的支持以及解釋性語(yǔ)言的本質(zhì),使得Python在多個(gè)平臺(tái)
    的頭像 發(fā)表于 07-24 10:41 ?373次閱讀

    3d場(chǎng)景建模可視化,場(chǎng)景1:1還原

    在當(dāng)今數(shù)字化時(shí)代,3D場(chǎng)景建模可視化技術(shù)成為重要工具,為各行業(yè)提供了強(qiáng)大的展示和交互手段。從電影特效到建筑設(shè)計(jì),從游戲開(kāi)發(fā)到虛擬現(xiàn)實(shí),3D場(chǎng)景建模可視化已經(jīng)深入到我們生活的各個(gè)領(lǐng)域。本文將深入探討
    的頭像 發(fā)表于 07-12 14:49 ?182次閱讀

    cad如何進(jìn)行三維建模

    三維建模是計(jì)算機(jī)輔助設(shè)計(jì)(CAD)中的一項(xiàng)重要技術(shù),它可以幫助設(shè)計(jì)師在計(jì)算機(jī)上創(chuàng)建和編輯三維模型。本文將介紹如何使用CAD軟件進(jìn)行三維建模,包括建模的基本步驟、建模技巧和注意事項(xiàng)等。
    的頭像 發(fā)表于 07-09 10:23 ?585次閱讀

    隧道BIM如何設(shè)計(jì)和建模

    、協(xié)作工作、優(yōu)化設(shè)計(jì),并最大程度地提高項(xiàng)目效率和質(zhì)量。下面是關(guān)于如何設(shè)計(jì)和建模隧道BIM的詳細(xì)內(nèi)容: 1.數(shù)據(jù)采集與建模需求確定:在設(shè)計(jì)之初,需要收集并整合地形、地質(zhì)、氣象等方面的數(shù)據(jù),并確定設(shè)計(jì)需求和目標(biāo)。這些數(shù)據(jù)將為后續(xù)BI
    的頭像 發(fā)表于 06-04 15:54 ?315次閱讀

    gis建模與空間分析的區(qū)別

    進(jìn)行比較和解析。 首先,GIS建模是指將現(xiàn)實(shí)世界的地理實(shí)體和現(xiàn)象通過(guò)計(jì)算機(jī)技術(shù)和方法表達(dá)出來(lái),用數(shù)字化的方式模擬、描述和分析。GIS建模可以分為兩個(gè)方面,即地理數(shù)據(jù)模型和地理過(guò)程模型。地理數(shù)據(jù)模型是指通過(guò)特定的數(shù)據(jù)結(jié)構(gòu)和模型來(lái)
    的頭像 發(fā)表于 02-25 14:57 ?811次閱讀

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

    Assign語(yǔ)句和Always語(yǔ)句是在硬件描述語(yǔ)言(HDL)中常用的兩種語(yǔ)句,用于對(duì)數(shù)字電路建模
    的頭像 發(fā)表于 02-22 16:24 ?1951次閱讀

    SaberRD狀態(tài)機(jī)建模工具介紹(一)什么是狀態(tài)機(jī)建模

    狀態(tài)機(jī)建模是使用狀態(tài)圖和方程式的手段,創(chuàng)建基于混合信號(hào)的有限狀態(tài)機(jī)模型的一種建模工具。
    的頭像 發(fā)表于 12-05 09:51 ?1454次閱讀
    SaberRD狀態(tài)機(jī)<b class='flag-5'>建模</b>工具介紹(一)什么是狀態(tài)機(jī)<b class='flag-5'>建模</b>

    剛性機(jī)械臂的動(dòng)力學(xué)建模

    剛性機(jī)械臂 機(jī)械臂建模是機(jī)械臂控制的基礎(chǔ),控制效果的好壞很大程度上決定于所建立的動(dòng)力學(xué)模型的準(zhǔn)確性。 目前對(duì)剛性機(jī)械臂的動(dòng)力學(xué)建模方法較多,理論較為成熟。而對(duì)于柔性空間機(jī)械臂的精確建模尚處在研究階段
    的頭像 發(fā)表于 11-17 17:03 ?736次閱讀

    ESL事務(wù)級(jí)建模語(yǔ)言簡(jiǎn)介

    任何系統(tǒng)級(jí)建模語(yǔ)言,都需要具備在較高層次的抽象能力和對(duì)不同來(lái)源的IP的集成能力。建模方法的選擇通常基于語(yǔ)言熟悉程度、建模支持、模型可用性和簡(jiǎn)單性。 在各種軟硬件描述語(yǔ)言中,Verilo
    的頭像 發(fā)表于 11-02 15:10 ?627次閱讀

    ESL設(shè)計(jì)中事務(wù)級(jí)建模的一般理論

    在更詳細(xì)地描述事務(wù)級(jí)建模之前,首先介紹在事務(wù)級(jí)建模中用到的一些術(shù)語(yǔ)。首先事務(wù)表示數(shù)據(jù)和事件的交換過(guò)程。各個(gè)連續(xù)的事務(wù)可以是不同大小的數(shù)據(jù)傳輸,也可以是在系統(tǒng)同步時(shí)用來(lái)調(diào)整或管理模塊之間行為
    的頭像 發(fā)表于 11-02 14:48 ?532次閱讀

    ESL設(shè)計(jì)的核心——事務(wù)級(jí)建模介紹

    設(shè)計(jì)、軟硬件劃分、軟硬件協(xié)同設(shè)計(jì)和驗(yàn)證,都離不開(kāi)事務(wù)級(jí)建模。 在系統(tǒng)級(jí)的設(shè)計(jì)中,首先要解決的問(wèn)題是如何描述系統(tǒng)也就是所謂系統(tǒng)建模。在當(dāng)前的集成電路設(shè)計(jì)中,算法層次上建立的功能模型(AL
    的頭像 發(fā)表于 11-02 14:38 ?1196次閱讀