衡阳派盒市场营销有限公司

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

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

3天內不再提示

數字硬件建模SystemVerilog-結構體

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-06-30 09:54 ? 次閱讀

數字硬件建模SystemVerilog-結構體(二)

ad48a850-f80c-11ec-ba43-dac502259ad0.png

結構體

結構體用于將多個變量組合在一個通用名稱下。設計通常具有邏輯信號組,例如總線協議的控制信號,或狀態控制器內使用的信號。結構體提供了將這些相關變量捆綁在一起的方法。結構體中的所有變量都可以單個賦值,或者每個變量都可以單獨賦值。結構體包可以復制到具有相同定義的另一個結構體,并通過模塊端口、任務或函數進出。

結構體復制

一個自定義結構體可以復制到另一個自定義結構體,只要這兩個結構體是從同一個自定義結構體定義聲明的。以下示例使用了上節中所示的結構體定義和聲明。

匿名結構體不能作為一個整體復制,但可以一次復制一個成員:

ad5d799c-f80c-11ec-ba43-dac502259ad0.png

壓縮和非壓縮結構體

默認情況下,結構體會被非壓縮的。這意味著結構體的成員被視為獨立變量或常量,并以一個共同的名稱分組在一起。SystemVerilog沒有指定軟件工具應該如何存儲非壓縮結構體的成員。不同的軟件工具具對于結構體的存儲分布也是不同的。

通過使用關鍵字packed,將結構體顯式聲明為壓縮結構體。

ad70cfc4-f80c-11ec-ba43-dac502259ad0.png

壓縮結構體以與向量相同的形式將結構體的所有成員存儲為連續位。結構體的第一個成員是向量最左邊的字段。結構體中最后一個成員的最右邊的位是向量的最低有效位,編號為位0。如圖4-2所示。

ad8710c2-f80c-11ec-ba43-dac502259ad0.png

圖4-2:壓縮結構體存儲為向量

壓縮結構體的所有成員都必須是整數值。整數值是可以表示為向量的值,例如byte、int和使用bit或logic類型創建的向量。如果結構體的任何成員不能表示為向量,則該結構體不能被壓縮。這意味著壓縮結構體不能包含實數或短實數變量、非壓縮結構體、非壓縮聯合體體或非壓縮的數組。

引用壓縮結構體和結構體成員。壓縮結構體可以復制,或分配一個結構體表達式值列表,方法與非壓縮結構體相同。壓縮結構體的成員可以通過成員名稱引用,方式與非壓縮結構體相同。

壓縮結構體也可以被視為一個向量。因此,除了結構體分配,向量值還可以分配給壓縮結構體

ad9eaf84-f80c-11ec-ba43-dac502259ad0.png

向量賦值是合法的,因為賦值左邊的結構體成員已壓縮在一起,形成一組連續的位,方式與向量相同。因為壓縮結構體存儲為一組連續的位,所以對壓縮結構體執行向量操作也是合法的,包括位選擇和部分選擇。以下兩個賦值都將分配給data_word的tag成員:

adb4bff4-f80c-11ec-ba43-dac502259ad0.png

可以在向量上執行的數學運算、邏輯運算和任何其他運算也可以在壓縮結構體上執行。

有符號壓縮結構體。壓縮結構體可以用signed和unsigned關鍵字聲明。當在運算或關系運算中用作向量時,這些修飾符會影響整個結構體的識別方式。它們不會影響結構體成員的識別方式。結構體的每個成員都被視為有符號或無符號,這取決于該成員的類型聲明。壓縮結構體的部分選擇是無符號的,與向量的部分選擇相同。

adcd0686-f80c-11ec-ba43-dac502259ad0.png

通過端口傳遞結構體

自定義結構體可以通過模塊和接口的端口傳遞,結構體必須首先使用 typedef 定義為用戶自定義數據類型,然后才允許將模塊或接口的端口聲明為結構體類型。

ade708c4-f80c-11ec-ba43-dac502259ad0.png

非壓縮的結構體必須是自定義結構體,才能通過端口傳遞該結構體。與端口的連接必須是與端口類型完全相同的結構體。也就是說,端口和端口兩側的連接都必須從相同的typedef定義聲明。此限制僅適用于非壓縮結構體。通過模塊端口的壓縮結構體被視為向量。端口的外部連接可以是相同類型的壓縮結構體,也可以是任何類型的向量。

通過將任務或函數參數聲明為結構體類型,自定義結構體也可以作為參數傳遞給任務或函數。

adfc7dbc-f80c-11ec-ba43-dac502259ad0.png

當調用一個任務或函數時,如果該任務或函數有一個非壓縮的結構體作為正式參數菜單,則必須將一個完全相同類型的結構體傳遞給該任務或函數。壓縮結構體形式參數被視為向量,可以傳遞給任何類型的向量。

傳統的Verilog與結構體

最初的Verilog語言沒有一種方便的機制來將常見信號收集到一個組中。在傳統的Verilog樣式的模型中,工程師必須使用特殊的分組方法,例如命名約定,其中一組中的每個信號都以一組公共字符開始或結束。最初的Verilog語言也無法通過模塊端口或任務和函數傳遞信號集合,每個信號都必須通過單獨的端口或參數傳遞。

在原始Verilog語言中添加結構體是一種強大的RTL建模構造,反之亦然。它提供了一種更簡潔、更直觀、更可重用的復雜模型功能建模方法。包中定義的自定義結構體可以在多個模塊中重復使用,也可以在用于驗證RTL模型的驗證測試臺中重復使用。

綜合指導

非壓縮結構體和壓縮結構體都是可綜合的。綜合工具支持結構體通過模塊端口傳遞 , 也支持作為輸入或輸出傳遞給任務和函數 , 也支持使用成員名和值的列表對結構體進行賦值。

綜合編譯器可能比壓縮結構體更好地優化非壓縮結構體。非壓縮結構體允許軟件工具確定存儲或實現每個結構體成員的最佳方式,而壓縮結構體則決定如何組織每個成員。

ae189c40-f80c-11ec-ba43-dac502259ad0.jpg

審核編輯 :李倩

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

    關注

    0

    文章

    613

    瀏覽量

    28466
  • 控制信號
    +關注

    關注

    0

    文章

    168

    瀏覽量

    12043
  • 結構體
    +關注

    關注

    1

    文章

    130

    瀏覽量

    10872

原文標題:SystemVerilog-結構體(二)

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

收藏 人收藏

    評論

    相關推薦

    VirtualLab Fusion應用:用于抑制高衍射級次的角濾波光柵

    ,以抑制不需要的高衍射階數。為此,首先分析了光柵的角度靈敏度。 最后,通過使用 VirtualLab Fusion 進行仿真,顯示了對不期望的高衍射級次的抑制效果。 建模任務 volume
    發表于 12-09 12:51

    結構成員的順序會影響結構的大小嗎

    相同的結構成員,如果把順序調整一下,會不會影響結構的大小? 答案是會的,這主要跟字節對齊有關。 比如這樣的結構
    的頭像 發表于 11-25 16:24 ?268次閱讀

    C語言和C++中結構的區別

    同樣是結構,看看在C語言和C++中有什么區別?
    的頭像 發表于 10-30 15:11 ?356次閱讀

    使用C2000 MCU對用于數字控制的雙向降壓/升壓轉換器進行建模

    電子發燒友網站提供《使用C2000 MCU對用于數字控制的雙向降壓/升壓轉換器進行建模.pdf》資料免費下載
    發表于 10-12 11:48 ?0次下載
    使用C2000 MCU對用于<b class='flag-5'>數字</b>控制的雙向降壓/升壓轉換器進行<b class='flag-5'>建模</b>

    ota升級的庫中,結構upgrade_server_info中pespconn的作用是什么?

    check_cb; struct espconn *pespconn; }; 這個結構中已經有ip,port,pespconn這個結構
    發表于 07-12 06:33

    隧道BIM如何設計和建模

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

    你是否真的了解結構占用了多少字節?

    結構成員所占內存空間大小一般情況下,如果想知道結構成員的內存占用情況需要:1、先用結構在內
    的頭像 發表于 06-04 08:04 ?570次閱讀
    你是否真的了解<b class='flag-5'>結構</b><b class='flag-5'>體</b>占用了多少字節?

    硬件特殊功能寄存器編程思路和RAM使用的問題求解?

    看了一下STM32的庫,對于其中的關于硬件的特殊功能寄存器的設置都是通過:1、定義一個和實際硬件地址相鏡像的全局結構變量。 2、設置結構
    發表于 05-17 12:24

    泰來三維|三維掃描服務_三維激光掃描儀測量山體滑坡點云建模

    點云建模是將測量得到的點云數據進行擬合、優化與處理,生成真實的三維模型的過程。它能夠全面、準確地顯示被掃描的外形與內部結構,從而在山體滑坡地質災害的防治中發揮著重要作用。 在山體滑坡地質災害防治
    的頭像 發表于 05-15 16:32 ?327次閱讀
    泰來三維|三維掃描服務_三維激光掃描儀測量山體滑坡點云<b class='flag-5'>建模</b>

    數字源表的基本原理與結構組成

    在電子測試與測量領域,數字源表(Digital SourceMeter)作為一種集電源、測量和分析功能于一的精密儀器,發揮著至關重要的作用。其高精度、高穩定性和可編程性等特點,使得數字源表在半導體
    的頭像 發表于 05-15 15:48 ?1251次閱讀

    嵌入式中C語言結構基本實現

    C語言中的數組只能允許程序員定義存儲相同類型數據。但是結構是C語言編程中允許您存儲不同數據類型的數據。 結構的定義 ????要想定義結構,必須用到 struct 關鍵字,struct
    的頭像 發表于 05-11 08:49 ?1129次閱讀
    嵌入式中C語言<b class='flag-5'>結構</b><b class='flag-5'>體</b>基本實現

    智慧城市電網的新選擇:訊維數字孿生可視化系統優化電力網絡

    可視化系統利用先進的三維掃描和建模技術,可以實現對城市電網的高精度數字建模。這種模型不僅包含了電網的物理結構,還集成了電網的運行數據、設備狀態等信息,形成了電網的
    的頭像 發表于 05-07 16:46 ?434次閱讀

    C語言結構史上最詳細的講解【軟件干貨】

    struct結構數據類型 前言 我們知道,在C語言中有一些基本的數據類型,如?char?int?float?long?double?string(c99) 等等數據類型,他們可以表示一些事物
    的頭像 發表于 03-28 17:52 ?853次閱讀

    在Vivado Synthesis中怎么使用SystemVerilog接口連接邏輯呢?

    SystemVerilog 接口的開發旨在讓設計中層級之間的連接變得更加輕松容易。 您可以把這類接口看作是多個模塊共有的引腳集合。
    的頭像 發表于 03-04 15:25 ?1028次閱讀
    在Vivado Synthesis中怎么使用<b class='flag-5'>SystemVerilog</b>接口連接邏輯呢?

    gis建模與空間分析的區別

    進行比較和解析。 首先,GIS建模是指將現實世界的地理實體和現象通過計算機技術和方法表達出來,用數字化的方式模擬、描述和分析。GIS建模可以分為兩個方面,即地理數據模型和地理過程模型。地理數據模型是指通過特定的數據
    的頭像 發表于 02-25 14:57 ?1028次閱讀
    百家乐娱乐真钱游戏| 大发888分析| 最好的棋牌游戏大厅| sp全讯网新2| 百家乐官网公试打法| 最好百家乐官网的玩法技巧和规则| 百家乐有人玩吗| 肇庆市| 凯斯百家乐官网的玩法技巧和规则| 百家乐投注平台| 百家乐的出千手法| 会泽县| 百家乐官网扑克牌手机壳| 大发888wofacai官网| 百家乐官网明灯| 百家乐软件代理| 百家乐官网连闲几率| 网上百家乐分析软件| 博彩通排名| 百家乐官网乐赌| 大发888 娱乐场| 香港百家乐官网玩| 威尼斯人娱乐网站安全吗| 百家乐官网翻天粤| 百家乐透视牌靴哪里有| 网上百家乐官网合法吗| 百家乐赌博讨论群| 百家乐官网出千原理| 百家乐官网线路图分析| 大富豪棋牌游戏中心| 墨尔本百家乐官网的玩法技巧和规则 | 九乐棋牌官网| 济州岛百家乐官网的玩法技巧和规则 | 博发百家乐的玩法技巧和规则| 百家乐官网路单| 网络百家乐的玩法技巧和规则| 百家乐官网真人游戏网上投注 | 开花财国际| 百家乐走势图研究| 石楼县| 利博百家乐的玩法技巧和规则|