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

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

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

數(shù)字硬件建模SystemVerilog-結(jié)構(gòu)體

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

數(shù)字硬件建模SystemVerilog-結(jié)構(gòu)體(二)

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

結(jié)構(gòu)體

結(jié)構(gòu)體用于將多個(gè)變量組合在一個(gè)通用名稱下。設(shè)計(jì)通常具有邏輯信號(hào)組,例如總線協(xié)議的控制信號(hào),或狀態(tài)控制器內(nèi)使用的信號(hào)。結(jié)構(gòu)體提供了將這些相關(guān)變量捆綁在一起的方法。結(jié)構(gòu)體中的所有變量都可以單個(gè)賦值,或者每個(gè)變量都可以單獨(dú)賦值。結(jié)構(gòu)體包可以復(fù)制到具有相同定義的另一個(gè)結(jié)構(gòu)體,并通過模塊端口、任務(wù)或函數(shù)進(jìn)出。

結(jié)構(gòu)體復(fù)制

一個(gè)自定義結(jié)構(gòu)體可以復(fù)制到另一個(gè)自定義結(jié)構(gòu)體,只要這兩個(gè)結(jié)構(gòu)體是從同一個(gè)自定義結(jié)構(gòu)體定義聲明的。以下示例使用了上節(jié)中所示的結(jié)構(gòu)體定義和聲明。

匿名結(jié)構(gòu)體不能作為一個(gè)整體復(fù)制,但可以一次復(fù)制一個(gè)成員:

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

壓縮和非壓縮結(jié)構(gòu)體

默認(rèn)情況下,結(jié)構(gòu)體會(huì)被非壓縮的。這意味著結(jié)構(gòu)體的成員被視為獨(dú)立變量或常量,并以一個(gè)共同的名稱分組在一起。SystemVerilog沒有指定軟件工具應(yīng)該如何存儲(chǔ)非壓縮結(jié)構(gòu)體的成員。不同的軟件工具具對于結(jié)構(gòu)體的存儲(chǔ)分布也是不同的。

通過使用關(guān)鍵字packed,將結(jié)構(gòu)體顯式聲明為壓縮結(jié)構(gòu)體。

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

壓縮結(jié)構(gòu)體以與向量相同的形式將結(jié)構(gòu)體的所有成員存儲(chǔ)為連續(xù)位。結(jié)構(gòu)體的第一個(gè)成員是向量最左邊的字段。結(jié)構(gòu)體中最后一個(gè)成員的最右邊的位是向量的最低有效位,編號(hào)為位0。如圖4-2所示。

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

圖4-2:壓縮結(jié)構(gòu)體存儲(chǔ)為向量

壓縮結(jié)構(gòu)體的所有成員都必須是整數(shù)值。整數(shù)值是可以表示為向量的值,例如byte、int和使用bit或logic類型創(chuàng)建的向量。如果結(jié)構(gòu)體的任何成員不能表示為向量,則該結(jié)構(gòu)體不能被壓縮。這意味著壓縮結(jié)構(gòu)體不能包含實(shí)數(shù)或短實(shí)數(shù)變量、非壓縮結(jié)構(gòu)體、非壓縮聯(lián)合體體或非壓縮的數(shù)組。

引用壓縮結(jié)構(gòu)體和結(jié)構(gòu)體成員。壓縮結(jié)構(gòu)體可以復(fù)制,或分配一個(gè)結(jié)構(gòu)體表達(dá)式值列表,方法與非壓縮結(jié)構(gòu)體相同。壓縮結(jié)構(gòu)體的成員可以通過成員名稱引用,方式與非壓縮結(jié)構(gòu)體相同。

壓縮結(jié)構(gòu)體也可以被視為一個(gè)向量。因此,除了結(jié)構(gòu)體分配,向量值還可以分配給壓縮結(jié)構(gòu)體

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

向量賦值是合法的,因?yàn)橘x值左邊的結(jié)構(gòu)體成員已壓縮在一起,形成一組連續(xù)的位,方式與向量相同。因?yàn)閴嚎s結(jié)構(gòu)體存儲(chǔ)為一組連續(xù)的位,所以對壓縮結(jié)構(gòu)體執(zhí)行向量操作也是合法的,包括位選擇和部分選擇。以下兩個(gè)賦值都將分配給data_word的tag成員:

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

可以在向量上執(zhí)行的數(shù)學(xué)運(yùn)算、邏輯運(yùn)算和任何其他運(yùn)算也可以在壓縮結(jié)構(gòu)體上執(zhí)行。

有符號(hào)壓縮結(jié)構(gòu)體。壓縮結(jié)構(gòu)體可以用signed和unsigned關(guān)鍵字聲明。當(dāng)在運(yùn)算或關(guān)系運(yùn)算中用作向量時(shí),這些修飾符會(huì)影響整個(gè)結(jié)構(gòu)體的識(shí)別方式。它們不會(huì)影響結(jié)構(gòu)體成員的識(shí)別方式。結(jié)構(gòu)體的每個(gè)成員都被視為有符號(hào)或無符號(hào),這取決于該成員的類型聲明。壓縮結(jié)構(gòu)體的部分選擇是無符號(hào)的,與向量的部分選擇相同。

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

通過端口傳遞結(jié)構(gòu)體

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

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

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

通過將任務(wù)或函數(shù)參數(shù)聲明為結(jié)構(gòu)體類型,自定義結(jié)構(gòu)體也可以作為參數(shù)傳遞給任務(wù)或函數(shù)。

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

當(dāng)調(diào)用一個(gè)任務(wù)或函數(shù)時(shí),如果該任務(wù)或函數(shù)有一個(gè)非壓縮的結(jié)構(gòu)體作為正式參數(shù)菜單,則必須將一個(gè)完全相同類型的結(jié)構(gòu)體傳遞給該任務(wù)或函數(shù)。壓縮結(jié)構(gòu)體形式參數(shù)被視為向量,可以傳遞給任何類型的向量。

傳統(tǒng)的Verilog與結(jié)構(gòu)體

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

在原始Verilog語言中添加結(jié)構(gòu)體是一種強(qiáng)大的RTL建模構(gòu)造,反之亦然。它提供了一種更簡潔、更直觀、更可重用的復(fù)雜模型功能建模方法。包中定義的自定義結(jié)構(gòu)體可以在多個(gè)模塊中重復(fù)使用,也可以在用于驗(yàn)證RTL模型的驗(yàn)證測試臺(tái)中重復(fù)使用。

綜合指導(dǎo)

非壓縮結(jié)構(gòu)體和壓縮結(jié)構(gòu)體都是可綜合的。綜合工具支持結(jié)構(gòu)體通過模塊端口傳遞 , 也支持作為輸入或輸出傳遞給任務(wù)和函數(shù) , 也支持使用成員名和值的列表對結(jié)構(gòu)體進(jìn)行賦值。

綜合編譯器可能比壓縮結(jié)構(gòu)體更好地優(yōu)化非壓縮結(jié)構(gòu)體。非壓縮結(jié)構(gòu)體允許軟件工具確定存儲(chǔ)或?qū)崿F(xiàn)每個(gè)結(jié)構(gòu)體成員的最佳方式,而壓縮結(jié)構(gòu)體則決定如何組織每個(gè)成員。

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

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    609

    瀏覽量

    28288
  • 控制信號(hào)
    +關(guān)注

    關(guān)注

    0

    文章

    160

    瀏覽量

    11936
  • 結(jié)構(gòu)體
    +關(guān)注

    關(guān)注

    1

    文章

    127

    瀏覽量

    10812

原文標(biāo)題:SystemVerilog-結(jié)構(gòu)體(二)

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

收藏 人收藏

    評論

    相關(guān)推薦

    隧道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ù)BIM建模
    的頭像 發(fā)表于 06-04 15:54 ?314次閱讀

    你是否真的了解結(jié)構(gòu)占用了多少字節(jié)?

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

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

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

    求助,請問一個(gè)結(jié)構(gòu)如何全部定義到 __attribute__ 區(qū)域?

    請問一個(gè)結(jié)構(gòu)如何全部定義到 __attribute__ 區(qū)域? 例如我這里涉及到一些高速計(jì)算的緩存,計(jì)劃將緩存數(shù)據(jù)存儲(chǔ)到 __attribute__ 區(qū)域。 三個(gè)結(jié)構(gòu) ,每個(gè)
    發(fā)表于 01-16 07:29

    經(jīng)典 C 語言編程,結(jié)構(gòu)和聯(lián)合體如何共用?

    結(jié)構(gòu) 結(jié)構(gòu)占用的內(nèi)存大小,首先和編譯器的系統(tǒng)位數(shù)有關(guān)系,類似于CPU是 64 bits 還是 32 bits 的情形;其次,結(jié)構(gòu)
    的頭像 發(fā)表于 01-11 18:24 ?1161次閱讀
    經(jīng)典 C 語言編程,<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>和聯(lián)合體如何共用?

    結(jié)構(gòu)與指針的關(guān)系

    在C語言中,結(jié)構(gòu)(Struct)是一種用戶自定義的數(shù)據(jù)類型,它允許您將不同類型的數(shù)據(jù)項(xiàng)組合在一起,以便形成一個(gè)更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)可以
    的頭像 發(fā)表于 01-11 08:00 ?868次閱讀
    <b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>與指針的關(guān)系

    golang結(jié)構(gòu)如何定義?如何使用呢?

    結(jié)構(gòu)是go語言最重要的數(shù)據(jù)結(jié)構(gòu)之一,go和其它編程語言不一樣,它沒有類的概念,類比過來struct就相當(dāng)于其它語言中的類,因此十分重要。
    的頭像 發(fā)表于 11-28 10:36 ?374次閱讀

    golang結(jié)構(gòu)實(shí)例代碼

    結(jié)構(gòu)是go語言最重要的數(shù)據(jù)結(jié)構(gòu)之一,go和其它編程語言不一樣,它沒有類的概念,類比過來struct就相當(dāng)于其它語言中的類,因此十分重要。
    的頭像 發(fā)表于 11-28 10:35 ?395次閱讀

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的頭像 發(fā)表于 11-22 09:17 ?632次閱讀
    分享一些<b class='flag-5'>SystemVerilog</b>的coding  guideline

    安全存儲(chǔ)功能中使用的重要結(jié)構(gòu)

    安全存儲(chǔ)功能中使用的重要結(jié)構(gòu) 在整個(gè)安全存儲(chǔ)功能的操作過程中,存在一些很重要的結(jié)構(gòu),這些結(jié)構(gòu)體用于記錄或保存所有安全文件和dirf.db
    的頭像 發(fā)表于 11-21 14:36 ?435次閱讀
    安全存儲(chǔ)功能中使用的重要<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>

    為什么我定義的結(jié)構(gòu)不能用--&gt;來調(diào)用結(jié)構(gòu)的元素?

    結(jié)構(gòu)代碼部分 typedef unsigned int uint_32t; typedef unsigned short uint_16t; typedef struct { uint_32t
    發(fā)表于 11-11 19:06

    數(shù)字IC前端設(shè)計(jì)+后端設(shè)計(jì)流程實(shí)現(xiàn)

    RTL 設(shè)計(jì)** :芯片功能設(shè)計(jì)。硬件描述語言如 Verilog、VHDL、SystemVerilog。
    的頭像 發(fā)表于 11-08 15:03 ?3836次閱讀
    <b class='flag-5'>數(shù)字</b>IC前端設(shè)計(jì)+后端設(shè)計(jì)流程實(shí)現(xiàn)

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

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

    求助,結(jié)構(gòu)變量定義引用問題求解

    |= mask; } 如以上語句,GPIO_Type是個(gè)結(jié)構(gòu)定義,定義了一個(gè)*base變量,在引用其中的成員時(shí),是base->IMR的方式。這怎么理解; 如果是
    發(fā)表于 10-27 06:06

    SystemVerilog相比于Verilog的優(yōu)勢

    我們再從對可綜合代碼的支持角度看看SystemVerilog相比于Verilog的優(yōu)勢。針對硬件設(shè)計(jì),SystemVerilog引入了三種進(jìn)程always_ff,always_comb
    的頭像 發(fā)表于 10-26 10:05 ?818次閱讀
    <b class='flag-5'>SystemVerilog</b>相比于Verilog的優(yōu)勢