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

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

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

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

SystemVerilog的結(jié)構(gòu)體-1

汽車電子技術(shù) ? 來源:OpenFPGA ? 作者: 碎碎思 ? 2023-02-09 15:26 ? 次閱讀

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

poYBAGPkn2GALZ3EAAThsbJ2QM4493.png

pYYBAGPkn26AfnHsAAG4PgudtCo769.png

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

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

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

結(jié)構(gòu)體是使用struct關(guān)鍵字聲明的,類似于C語言。struct關(guān)鍵字后面跟著一個開始的大括號( { )變量聲明列表,結(jié)束的大括號(}),然后是結(jié)構(gòu)體的名稱。

poYBAGPkn3qAP5SDAADbXLheCUk319.png

一個結(jié)構(gòu)體可以將任意數(shù)量的變量數(shù)據(jù)類型捆綁在一起,用戶自定義類型、Parameter和localparam常量也可以包含在一個結(jié)構(gòu)體中,結(jié)構(gòu)體中的Parameter不能像模塊中的Parameter那樣重新定義,結(jié)構(gòu)體中的參數(shù)被視為localparam。

結(jié)構(gòu)體成員賦值

結(jié)構(gòu)體中的變量稱為結(jié)構(gòu)體成員。每個成員都有一個名稱,可用于從結(jié)構(gòu)體中選擇該成員。使用結(jié)構(gòu)體的名稱引用結(jié)構(gòu)體成員,后跟句點(.)然后是成員的名字。這與C中的語法相同。例如,要為前面結(jié)構(gòu)體的address成員賦值,引用為:

pYYBAGPkn4WAXfXxAABYbLMYmVk544.png

結(jié)構(gòu)體不同于數(shù)組,因為數(shù)組是所有類型和大小相同的元素的集合,而結(jié)構(gòu)體是不同類型和大小的變量和常量的集合。另一個區(qū)別是,數(shù)組的元素是通過在數(shù)組中使用索引來引用的;結(jié)構(gòu)體的成員是通過使用成員名稱來引用的。

整個結(jié)構(gòu)體賦值

可以為整個結(jié)構(gòu)體指定一個結(jié)構(gòu)體表達(dá)式。結(jié)構(gòu)體表達(dá)式是使用逗號分隔的值列表形成的,這些值包含在標(biāo)記’{}之間,這與將一組值分配給數(shù)組的方式相同,大括號必須包含結(jié)構(gòu)體中每個成員的值。例如:

poYBAGPkn4-AU3dEAAC3H_R3VVc987.png

結(jié)構(gòu)體表達(dá)式中的值必須按照在結(jié)構(gòu)體中定義的順序列出,如前一示例所示。或者,結(jié)構(gòu)體表達(dá)式可以指定要為其賦值的結(jié)構(gòu)體成員的名稱,其中成員名稱和值用冒號(:)分隔。結(jié)構(gòu)體表達(dá)式中的成員名稱稱為tags。指定成員名稱后,表達(dá)式列表可以是任意順序。

pYYBAGPkn5iAJ6Z_AAA5CM4b_sI096.png

在同一個結(jié)構(gòu)體表達(dá)式中混合按名稱和按順序賦值是非法的。

結(jié)構(gòu)體表達(dá)式中的默認(rèn)值。結(jié)構(gòu)體表達(dá)式可以通過指定默認(rèn)值為一個結(jié)構(gòu)體的多個成員指定值,默認(rèn)值是使用default關(guān)鍵字指定的。

poYBAGPkn6SAVwPZAAAwNpLtlmA137.png

結(jié)構(gòu)體表達(dá)式還可以包含對特定結(jié)構(gòu)體成員的混合賦值,以及對所有其他成員指定默認(rèn)值。

pYYBAGPkn7eALnUUAAAleJsWGV0098.png

結(jié)構(gòu)體中的枚舉數(shù)據(jù)類型。前兩個帶有默認(rèn)值的示例存在語義錯誤,分配給結(jié)構(gòu)體成員的默認(rèn)值必須與成員的數(shù)據(jù)類型兼容。由于大多數(shù)SystemVerilog變量都是弱類型的,因此幾乎所有默認(rèn)值都是兼容的。然而,枚舉數(shù)據(jù)類型變量的類型更強。對枚舉數(shù)據(jù)類型變量的賦值必須是其枚舉列表中的標(biāo)簽,或者是同一枚舉數(shù)據(jù)類型定義的另一個枚舉變量。

上述instruction_word 的兩個賦值語句試圖將opcode的默認(rèn)值賦值為0。這是opcode的非法值,它是一個opcode_t枚舉數(shù)據(jù)類型變量(opcode_t的typedef定義是之前枚舉變量章節(jié))。當(dāng)結(jié)構(gòu)體的成員是枚舉數(shù)據(jù)類型變量時,結(jié)構(gòu)體表達(dá)式必須為該成員指定合法的顯式值??梢詾樗衅渌蓡T指定默認(rèn)值。例如:

pYYBAGPkn8WAWKOQAABcJUyV-5w537.png

自定義和匿名結(jié)構(gòu)體

用戶自定義類型可以使用typedef關(guān)鍵字從結(jié)構(gòu)體中創(chuàng)建。將結(jié)構(gòu)體聲明為用戶自定義類型不會分配任何存儲空間。在使用該結(jié)構(gòu)體之前,必須聲明該用戶自定義類型的網(wǎng)絡(luò)或變量。

pYYBAGPkn9CAP72vAADS_DFarQA142.png

不使用typedef的結(jié)構(gòu)體被定義為匿名結(jié)構(gòu)體。使用typedef聲明的結(jié)構(gòu)體被視為自定義結(jié)構(gòu)體。匿名結(jié)構(gòu)體和自定義結(jié)構(gòu)體都可以在模塊中定義,但這些本地(局部)定義只能在該模塊中使用。自定義結(jié)構(gòu)體也可以在包中定義,并導(dǎo)入到需要結(jié)構(gòu)體定義的設(shè)計塊中。包中定義的自定義結(jié)構(gòu)體可用于多個模塊和驗證測試臺。

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

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

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

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

    關(guān)注

    0

    文章

    117

    瀏覽量

    14899
  • 控制信號
    +關(guān)注

    關(guān)注

    0

    文章

    168

    瀏覽量

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

    關(guān)注

    1

    文章

    130

    瀏覽量

    10872
收藏 人收藏

    評論

    相關(guān)推薦

    漫談C語言結(jié)構(gòu)

    我放在下面。  在此,我會圍繞以下2個問題來分析和應(yīng)用C語言結(jié)構(gòu):  1. C語言中的結(jié)構(gòu)有何作用  2.
    發(fā)表于 11-15 15:59

    GPIO結(jié)構(gòu)定義

    #include "stm32f4xx.h"#include "usart.h"void My_USART1_Init(void){//GPIO結(jié)構(gòu)定義 GPIO_InitTypeDefGPIO_InitStructure;/
    發(fā)表于 08-04 07:47

    使用結(jié)構(gòu)的主要作用

    結(jié)構(gòu)作用(STM32)來源:正點原子MDK 中很多地方使用結(jié)構(gòu)以及結(jié)構(gòu)指針,下面總結(jié)一下其
    發(fā)表于 08-24 07:54

    結(jié)構(gòu)變量的定義與使用變量訪問結(jié)構(gòu)成員

    知識點回顧關(guān)于找最大公共子串的兩種解題方法結(jié)構(gòu)的定義(3種)結(jié)構(gòu)變量的定義與使用變量訪問結(jié)構(gòu)
    發(fā)表于 12-17 07:10

    消息隊列傳遞結(jié)構(gòu)指針和結(jié)構(gòu)異同

    FreeRTOS消息隊列 傳遞結(jié)構(gòu)指針和結(jié)構(gòu)異同1 消息隊列傳遞結(jié)構(gòu)
    發(fā)表于 02-11 07:02

    SystemVerilog Assertion Handbo

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發(fā)表于 07-22 14:08 ?188次下載

    SystemVerilog的斷言手冊

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發(fā)表于 07-22 14:12 ?20次下載

    基于事件結(jié)構(gòu)SystemVerilog指稱語義

    本文利用形式化的方法對SystemVerilog的指稱語義進行研究,采用EBES(extendedbundle event structure)作為抽象模型,以便更好的描述SystemVerilog真并發(fā)的特點。我們的主要工作是:首先,
    發(fā)表于 12-22 14:01 ?12次下載

    共用結(jié)構(gòu)的區(qū)別

    在c++中,結(jié)構(gòu)(struct)和共用(union)是兩種很相似的復(fù)合數(shù)據(jù)類型,都可以用來存儲多種數(shù)據(jù)類型,但是兩者還有很大的區(qū)別。 結(jié)構(gòu)
    發(fā)表于 11-19 17:46 ?3.7w次閱讀

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

    默認(rèn)情況下,結(jié)構(gòu)體會被非壓縮的。這意味著結(jié)構(gòu)的成員被視為獨立變量或常量,并以一個共同的名稱分組在一起。SystemVerilog沒有指定軟件工具應(yīng)該如何存儲非壓縮
    的頭像 發(fā)表于 06-30 09:54 ?1486次閱讀

    SystemVerilog中可以嵌套的數(shù)據(jù)結(jié)構(gòu)

    SystemVerilog中除了數(shù)組、隊列和關(guān)聯(lián)數(shù)組等數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)還可以嵌套。
    的頭像 發(fā)表于 11-03 09:59 ?1667次閱讀

    FPGA學(xué)習(xí)-SystemVerilog語言簡介

    SystemVerilog是一種硬件描述和驗證語言(HDVL),它基于IEEE1364-2001 Verilog硬件描述語言(HDL),并對其進行了擴展,包括擴充了 C語言 數(shù)據(jù)類型、結(jié)構(gòu)、壓縮和非
    的頭像 發(fā)表于 12-08 10:35 ?2242次閱讀

    SystemVerilog中至關(guān)重要的結(jié)構(gòu)和自定義類型

    在上一篇文章《SystemVerilog中至關(guān)重要的的數(shù)據(jù)類型》中,介紹了枚舉類型的本質(zhì)和使用語法。本文接著介紹SV中同樣不可忽略的結(jié)構(gòu)(structure)和自定義類型(typedef),最后也
    的頭像 發(fā)表于 01-21 17:18 ?2364次閱讀
    <b class='flag-5'>SystemVerilog</b>中至關(guān)重要的<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>和自定義類型

    SystemVerilog結(jié)構(gòu)-2

    結(jié)構(gòu)體用于將多個變量組合在一個通用名稱下。設(shè)計通常具有邏輯信號組,例如總線協(xié)議的控制信號,或狀態(tài)控制器內(nèi)使用的信號。結(jié)構(gòu)提供了將這些相關(guān)變量捆綁在一起的方法。結(jié)構(gòu)
    的頭像 發(fā)表于 02-09 15:32 ?884次閱讀
    <b class='flag-5'>SystemVerilog</b>的<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>-2

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

    指針則是指向結(jié)構(gòu)類型的指針,用于操作和訪問結(jié)構(gòu)的成員。下面我們將分別詳細(xì)解釋結(jié)構(gòu)
    的頭像 發(fā)表于 01-11 08:00 ?1069次閱讀
    <b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>與指針的關(guān)系
    娱乐城开户送真钱200| 百家乐官网打劫法| 真人百家乐导航| 澳门威尼斯人| 圣保罗百家乐官网的玩法技巧和规则 | 石林| 大亨百家乐游戏| 皇冠赔率| 百家乐最低下注| 豪门国际娱乐| 网上百家乐娱乐场| 365在线投注| 百家乐娱乐城怎么样| 昭通市| 新澳门百家乐软件下载| 百家乐官网美女视频| 视频百家乐破解| 大石桥市| 百家乐赌场娱乐| 百家乐倍投工具| 菲律宾百家乐排行| 百家乐在线投注系统| TT国际娱乐城| 大赢家娱乐场| 网络棋牌室| 永利高娱乐场| 豪享博百家乐的玩法技巧和规则 | 免费百家乐官网缩水软件| 百家乐官网龙虎玩| 百家乐官网怎么玩最保险| 百家乐官网技论坛| 澳门百家乐官网才能| 上海玩百家乐官网算不算违法 | 澳门赌博| 百家乐真人游戏网| 健康| 威尼斯人娱乐城代理加盟| 百家乐官网五湖四海娱乐| 宝龙线上娱乐城| 澳门百家乐娱乐场开户注册| 新锦江百家乐官网娱乐平台|