那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-12-07 15:31 ? 次閱讀

數字門級電路可分為兩大類:組合邏輯和時序邏輯。鎖存器是組合邏輯和時序邏輯的一個交叉點,在后面會作為單獨的主題處理。

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

SystemVerilog有三種在可綜合RTL級別表示組合邏輯的方法:連續賦值語句、always程序塊和函數。接下來幾篇文章將探討每種編碼風格,并推薦最佳實踐編碼風格。

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

連續賦值語句(布爾表達式)

連續賦值語句將表達式或操作結果驅動到網絡或變量上,顯式連續賦值語句是以assign關鍵字開始的語句。連續賦值語句的一個簡單示例:

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

賦值的左邊,即上面的sum;在上面的例子中,每當右邊的值發生任何變化時,即在上面的例子中a或b發生變化時,sum就會更新。每當右邊發生變化時,左邊的這種持續更新行為就是組合邏輯行為的模型。

連續賦值語句允許在右側發生更改和左側更新之間指定傳播延遲。然而,綜合編譯器預期RTL模型為零延遲,并且會忽略連續賦值語句中的延遲。這可能會導致經過延遲驗證的設計與忽略延遲的綜合實現之間不匹配。本系列文章只展示零延遲示例。

左側類型。連續賦值語句的左側可以是標量(1位)或向量,也可以是變量類型,也可以是用戶定義的類型。左側不能是未壓縮的的結構體或未壓縮的數組。

在連續賦值語句的左側使用網絡或變量之間有一個重要區別:

  • 網絡類型(如wire或tri)可以由多個源驅動,包括多個連續分配、多個模塊或基本實例的輸出或輸入端口連接,或驅動的任意組合。

  • 變量類型(如var或int)只能從單個源分配一個值,可以是:單個輸入端口、單個連續賦值語句或任意數量的過程賦值(多個過程賦值被視為單個源;綜合器要求多個過程賦值在同一個過程中)。

請注意,logic關鍵字推斷出一種數據類型,但其本身不是網絡或變量類型。當logic本身被使用時,一個變量被推斷出來,并附帶單個源賦值限制)。當使用logic關鍵字聲明輸出模塊端口時,也會推斷出一個變量。當使用logic關鍵字聲明輸入或inout模塊端口時,將推斷出具有多個驅動程序功能的wire類型。

最佳實踐指南7-1
在連續賦值的左側使用變量,為防止無意中出現多個驅動,只有打算讓一個信號有多個驅動時,才在左側使用wire或tri。

僅當需要多個驅動時使用網絡類型(如wire或tri),例如共享總線、三態總線或inout雙向模塊端口。

對于RTL建模,語義規則的一個重要優點是變量只能有一個來源。ASICFPGA設備中的大多數信號大多數為單源邏輯,但三態總線和雙向端口除外。變量的單源限制有助于防止無意中的編碼錯誤,如果對具有變量類型的同一信號進行多個連續賦值語句或連接,則多源編碼錯誤將在仿真和綜合中報告為編譯或布線錯誤。

向量寬度不匹配。連續賦值語句的左側可以是與右側的信號或表達式結果不同寬度的向量大小。出現這種情況時,SystemVerilog會自動調整右側的向量寬度,以匹配左側的大小。如果右側的向量寬度大于左側,則右側的最高有效位將被截斷為左側的大小。如果右側是較小的向量寬度大小,則右側值將向左擴展到左側的大小。如果表達式或運算結果是無符號的,則左擴展將用0擴展。如果右側表達式或運算結果是有符號的,則將使用符號擴展。

最佳實踐指南7-2
確保連續賦值語句和程序賦值的兩側向量寬度相同。避免左側向量大小和右側向量大小不匹配 。

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

顯式和隱式推斷的連續賦值語句

連續賦值語句有兩種形式:顯式連續賦值語句和隱式連續賦值語句。顯式連續賦值語句是用assign關鍵字聲明的,如前面的代碼段和示例所示。這種形式的連續賦值語句既可以賦值給網絡類型,也可以賦值給變量類型。隱式連續賦值語句將網絡類型的聲明與連續賦值語句相結合。即使未使用assign關鍵字,這種形式的連續性質也是可以推斷出來的。

推斷網絡聲明賦值示例如下:

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

請注意,推斷網絡聲明賦值語句與變量初始化語句不同,例如:

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

變量初始化只執行一次,而推斷網絡聲明賦值是一個過程,每當右側表達式上的值發生變化時,就會更新左側網絡。推斷網絡聲明賦值語句是可綜合的。

多次連續賦值語句

一個模塊可以包含任意數量的連續賦值語句。每個連續賦值語句都是一個單獨的過程,與其他連續賦值語句并行運行。所有連續賦值語句從仿真時間零點開始計算右側運算,并運行到仿真結束。

一個模塊中的多個過程分配可用于表示數據流行為,其中功能是用布爾方程建模的,布爾方程使用SystemVerilog操作符產生輸出,而不是使用過程編程語句。在RTL模型中,數據流賦值表示數據在寄存器之間流動的組合邏輯。

下面的示例使用連續賦值語句來仿真通過加法器、乘法器和減法器的數據流。該數據流的結果在時鐘每個正邊緣被存儲在寄存器中:

示例7-1:帶寄存器輸出的加、乘、減數據流處理
//`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

因為模塊中的多個連續賦值語句并行運行,所以RTL源代碼中賦值的順序沒有區別。這可以通過比較示例7-1中連續賦值語句的順序和圖7-1所示的綜合結果中的數據流順序看出來。RTL代碼按加法、減法、乘法的順序列出賦值語句,但操作的數據流是加法、乘法、減法。

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

同時使用連續賦值語句和always程序

一個模塊可以包含連續賦值語句和always程序的組合。

下面的簡單示例演示了一個帶有雙向數據總線的靜態RAM。當從RAM讀取數據時,數據總線作為輸出端口被驅動——當不被讀取時,數據總線被分配高阻態,以便其他設備可以驅動該總線,連續賦值語句用于仿真輸出功能,以及always程序用于仿真輸入功能(方便在時鐘上升沿觸發)。

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

數據總線是一個雙向inout端口,必須是網絡類型,如wire或tri,才能有多個驅動源。當數據總線是RAM的輸出時,它可以由RAM驅動,當數據總線是RAM的輸入時,它可以由其他模塊驅動。只有連續賦值語句才能分配給網絡數據類型。

每個連續賦值語句和每個always程序都是一個單獨的并行過程,從仿真時間零點開始,在整個仿真過程中運行。模塊中連續賦值語句和always程序的順序并不重要,因為這些程序是并行運行的。

審核編輯 :李倩



聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鎖存器
    +關注

    關注

    8

    文章

    908

    瀏覽量

    41645
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62977
  • 數據總線
    +關注

    關注

    2

    文章

    59

    瀏覽量

    17626

原文標題:數字硬件建模SystemVerilog-組合邏輯建模(1)連續賦值語句

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    VIRTUALLAB FUSION中具有復雜擴展區域的光波導器件建模

    導 這個用例展示了一個具有所謂“蝴蝶”瞳孔擴展的光波導系統,該系統基于微軟的專利US9791703B1。 二維(菱形)光柵光波導 在本用例中,我們根據Wave Optics LTD.專利WO2018/178626的方法,對使用二維周期光柵結構(菱形)的光波導系統進行建模
    發表于 01-24 08:45

    VirtualLab:系統建模分析器

    ,系統建模分析器。本文檔介紹該工具的使用方法。 系統建模分析器 如何運行建模分析器 系統建模分析器 例1:光束清理濾波器 示例 – 光
    發表于 01-14 09:45

    全內反射棱鏡(TIR)的建模

    摘要 在這個例子中,我們演示了在全內反射(TIR)棱鏡上的干涉和漸暈效應的建模,其中這些效應特別是在光透射部分出現。所討論的棱鏡通常由兩部分組成,兩部分用折射率略有不同的材料粘在一起。根據入射光
    發表于 01-04 08:57

    VirtualLab:系統建模分析器

    ,系統建模分析器。本文檔介紹該工具的使用方法。 系統建模分析器 如何運行建模分析器 系統建模分析器 例1:光束清理濾波器 示例 – 光
    發表于 12-19 12:36

    VirtualLab Fusion應用:Herriott池的建模與仿真

    。Herriott單元是這種系統的一個例子,其特點是使用兩個球面反射鏡,在其中一個球面反射鏡上鉆一個離軸孔,以允許光束進出。鏡子的曲率改變了光束的方向并控制了它的發散。在此用例中,我們用光學建模和設計軟件
    發表于 12-09 13:14

    如何通過建模與仿真提升電力電子組件的設計與性能?

    電力電子組件建模與仿真的基礎知識,以及建模與仿真工作中的優缺點。圖1建模與仿真的概述建模與仿真概念涉及使用模型作為仿真的基礎,以開發用于決策
    的頭像 發表于 11-25 11:35 ?354次閱讀
    如何通過<b class='flag-5'>建模</b>與仿真提升電力電子組件的設計與性能?

    【「數字IC設計入門」閱讀體驗】+目錄和前2章

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

    知識分享 | 輕松實現優質建模

    知識分享在知識分享欄目中,我們會定期與讀者分享來自MES模賽思的基于模型的軟件開發相關Know-How干貨,關注公眾號,隨時掌握基于模型的軟件設計的技術知識。輕松實現優質建模前言在基于模型的開發
    的頭像 發表于 09-12 08:08 ?458次閱讀
    知識分享 | 輕松實現優質<b class='flag-5'>建模</b>

    通向數字創新之路:25個組合電路核心主題概念

    組合電路是數字系統的基礎構建模塊。深入理解以下25個主題,將有助于全面掌握組合電路的原理和應用:01.布爾代數布爾代數是數字
    的頭像 發表于 08-15 18:28 ?684次閱讀
    通向<b class='flag-5'>數字</b>創新之路:25個<b class='flag-5'>組合</b>電路核心主題概念

    Python建模算法與應用

    Python作為一種功能強大、免費、開源且面向對象的編程語言,在科學計算、數學建模、數據分析等領域展現出了卓越的性能。其簡潔的語法、對動態輸入的支持以及解釋性語言的本質,使得Python在多個平臺
    的頭像 發表于 07-24 10:41 ?659次閱讀

    3d場景建模可視化,場景1:1還原

    在當今數字化時代,3D場景建模可視化技術成為重要工具,為各行業提供了強大的展示和交互手段。從電影特效到建筑設計,從游戲開發到虛擬現實,3D場景建模可視化已經深入到我們生活的各個領域。本文將深入探討
    的頭像 發表于 07-12 14:49 ?347次閱讀

    cad如何進行三維建模

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

    隧道BIM如何設計和建模

    、協作工作、優化設計,并最大程度地提高項目效率和質量。下面是關于如何設計和建模隧道BIM的詳細內容: 1.數據采集與建模需求確定:在設計之初,需要收集并整合地形、地質、氣象等方面的數據,并確定設計需求和目標。這些數據將為后續BI
    的頭像 發表于 06-04 15:54 ?448次閱讀

    gis建模與空間分析的區別

    進行比較和解析。 首先,GIS建模是指將現實世界的地理實體和現象通過計算機技術和方法表達出來,用數字化的方式模擬、描述和分析。GIS建模可以分為兩個方面,即地理數據模型和地理過程模型。地理數據模型是指通過特定的數據結構和模型來
    的頭像 發表于 02-25 14:57 ?1031次閱讀

    assign語句和always語句的用法

    Assign語句和Always語句是在硬件描述語言(HDL)中常用的兩種語句,用于對數字電路建模
    的頭像 發表于 02-22 16:24 ?2784次閱讀
    网上百家乐娱乐网| 德州扑克的玩法| 真钱博彩网| 百家乐官网赌博娱乐城大全| 网络百家乐模拟投注| 大发888开户即送58| 百家乐官网电脑赌博| 哪个百家乐平台信誉好| 易发| 新梦想百家乐官网的玩法技巧和规则 | 巴比伦百家乐官网的玩法技巧和规则| 怎样赢百家乐的玩法技巧和规则| 天峻县| 百家乐赢家球讯网| 六合彩报| 百家乐官网发牌| 百家乐蔬菜配送公司| 百家乐官网网站排行| 百家乐陷阱| 太阳城百家乐官网坡解| 百家乐最新投注方法| 百家乐官网网站开户| 百家乐对子计算方法| 治县。| 百家乐平台在线| 澳门百家乐官网鸿福厅| 蓝盾百家乐娱乐场开户注册| 百家乐官网二代皇冠博彩| 破战百家乐的玩法技巧和规则 | 24山的丑方位| 永发国际娱乐城| 海立方百家乐海立方| 百家乐官网下载游戏| 百家乐路技巧| ea百家乐官网打水| 大发888信誉888娱乐城| 鑫鑫百家乐官网的玩法技巧和规则| 大发888 dafa888uk.com| 金博士百家乐官网的玩法技巧和规则 | 百家乐官网tt娱乐场开户注册| 澳门顶级赌场手机版|