chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

SV中define宏定義的用法

小杜的芯片驗(yàn)證日記 ? 來(lái)源:數(shù)字芯片驗(yàn)證日記 ? 2024-10-21 14:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Hi,我是小杜。小杜工作中經(jīng)常看到驗(yàn)證環(huán)境中的宏定義,之前僅有一點(diǎn)了解,最近小杜需要用到宏,于是整理了一下宏的使用場(chǎng)景和注意事項(xiàng)。小杜經(jīng)驗(yàn)尚淺,如有錯(cuò)誤,還請(qǐng)批評(píng)指正。

宏定義`define的用法

SV中使用預(yù)處理指令`define來(lái)定義宏,宏可以用來(lái)創(chuàng)建文本替換。根據(jù)場(chǎng)景不同,`define主要用來(lái)定義常量簡(jiǎn)化復(fù)雜的表達(dá)式或代碼段以及提高代碼的可移植性。其基本語(yǔ)法為:

`defineMACRO_NAMEreplaced_text

下面是小杜對(duì)一些使用場(chǎng)景的簡(jiǎn)單舉例:

定義常量

`defineDATA_WIDTH 32

條件編譯

`ifdef USE_SNPS_VIP
...
`endif

簡(jiǎn)化復(fù)雜表達(dá)式

`defineIS_EVEN(x)((x)%2==0)


initial begin
  num = 10;
if(`IS_EVEN(num))
  ...
end

定義宏函數(shù)

如果需要定義帶參數(shù)的宏函數(shù),使用``來(lái)實(shí)現(xiàn)變量的整體替換。

`definePRINT_MAX(a, b) 
if((a)> (b)) 
$display("Maxvalue:%0b",a);
  else  
$display("Max value: %0d", b);

initial begin
x = 10;
y= 20;
`PRINT_MAX(x,y);
end
`defineTEST_PARAM(X)'"test_``x``param`"
$display(`TEST_PARAM(a));
//打印:test_a_param

定義信號(hào)路徑

相較于上面,這是一種常用但并非spec推薦的用法,因?yàn)閌define只是文本替換工具,使用宏來(lái)指代信號(hào)路徑會(huì)導(dǎo)致信號(hào)可讀性降低,在調(diào)試和維護(hù)中容易出錯(cuò)。但工作中真的很有用。

`define INNER_DATA u_submodule2.u_submodule1.inner_data


module submodule1;
    reg [31:0] inner_data;


    initial begin
        inner_data = 32'hDEADBEEF;
    end
endmodule


module submodule2;
    submodule1 u_submodule1();
endmodule


module top;
    submodule2 u_submodule2();


    initial begin
        // 使用 `define 定義的信號(hào)路徑
        $display("Inner Data: %h", `INNER_DATA);
    end
endmodule

`define的作用域

`define定義的宏在SV中是全局有效的,作用域從宏被定義的地方開(kāi)始,一直到文件結(jié)束,或者宏被`undef顯示的取消定義為止。比如經(jīng)常使用宏定義信號(hào)位寬就是全局作用。

如果在被包含的文件中定義了一個(gè)宏,該宏對(duì)包含該文件的主文件以及該文件之后的所有內(nèi)容有效。

//test.sv
`defineTEST_NUM 100


//main.sv
`include "test.sv"


module to;
  initial begin
$display("TEST_NUM:%0d", `TEST_NUM);
//將打印 TEST_NUM: 100
  end
endmodule

使用`undef顯示取消宏定義來(lái)控制宏的作用范圍。

`defineMY_MACRO 32
...
`undefMY_MACRO
//在`undef之后再調(diào)用MY_MACRO就會(huì)報(bào)錯(cuò)

`define的使用注意事項(xiàng)

小杜這里列舉幾個(gè)會(huì)經(jīng)常遇到的注意事項(xiàng):

盡量使用大寫(xiě)字母命名,以便和變量名/函數(shù)名區(qū)分開(kāi),并且一定要避免和其他宏出現(xiàn)命名沖突。盡量保持宏定義簡(jiǎn)單明了,保持代碼的可讀性和可維護(hù)性,必要時(shí)在宏定義旁添加注釋。

如果使用宏定義簡(jiǎn)化表達(dá)式,最好使用括號(hào)來(lái)確保表達(dá)式求值順序的正確,這是因?yàn)楹暾归_(kāi)后會(huì)直接替換文本,可能會(huì)導(dǎo)致變量執(zhí)行順序出錯(cuò)。

最重要的是避免過(guò)度使用宏?。‰m然宏使用起來(lái)非常方便,但對(duì)于較大的驗(yàn)證環(huán)境,這會(huì)導(dǎo)致代碼可讀性變差和維護(hù)難度提升。平時(shí)隨手寫(xiě)個(gè)宏,方便了自己,但很可能會(huì)讓負(fù)責(zé)環(huán)境維護(hù)的同事付出更多的時(shí)間進(jìn)行維護(hù)。

以上就是小杜對(duì)SV中`define宏定義的一些總結(jié),工作中根據(jù)需求使用`define即可。感謝你看到這里。

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

    30

    文章

    4900

    瀏覽量

    70733
  • 宏定義
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    9231
  • define
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    3935

原文標(biāo)題:【SV】宏定義`define的使用場(chǎng)景和注意事項(xiàng)小結(jié)

文章出處:【微信號(hào):小杜的芯片驗(yàn)證日記,微信公眾號(hào):小杜的芯片驗(yàn)證日記】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語(yǔ)言typedef與#define用法和區(qū)別

    在C語(yǔ)言編程,typedef 和 #define是最常用語(yǔ)句,可能很多工作過(guò)幾年的工程師都沒(méi)有去深究過(guò)它們的一些用法和區(qū)別。
    發(fā)表于 10-12 10:39 ?899次閱讀

    C語(yǔ)言中定義的使用技巧

    #define命令是C語(yǔ)言中的一個(gè)定義命令,它用來(lái)將一個(gè)標(biāo)識(shí)符定義為一個(gè)字符串,該標(biāo)識(shí)符被稱(chēng)為名,被
    發(fā)表于 09-05 10:12 ?1666次閱讀
    C語(yǔ)言中<b class='flag-5'>宏</b><b class='flag-5'>定義</b>的使用技巧

    C語(yǔ)言定義#和##的作用

    : helloworld , 就可以通過(guò)這樣的的調(diào)用, printf( str(helloworld) );2. ## : 在定義,將其前后的兩個(gè)變量拼接在一起。eg: #define
    發(fā)表于 08-23 18:22

    請(qǐng)問(wèn)定義的##有什么用途?

    );第一句的osThreadDef是個(gè)定義:#define osThreadDef(name, thread, priority, instances, stacksz)\cons
    發(fā)表于 03-29 07:49

    define定義多條語(yǔ)句的語(yǔ)法規(guī)則有哪些

    在單片機(jī)編程過(guò)程,有時(shí)候需要反復(fù)操作多條同相語(yǔ)句,這時(shí)候運(yùn)用#define定義多條語(yǔ)句可以大大簡(jiǎn)化編程內(nèi)容。語(yǔ)法規(guī)則如下:1.
    發(fā)表于 07-15 08:39

    typedef和define區(qū)別

    typedef是在計(jì)算機(jī)編程語(yǔ)言中用來(lái)為復(fù)雜的聲明定義簡(jiǎn)單的別名,與定義有些差異。它本身是一種存儲(chǔ)類(lèi)的關(guān)鍵字define,無(wú)參
    發(fā)表于 11-09 14:22 ?7111次閱讀
    typedef和<b class='flag-5'>define</b>區(qū)別

    C語(yǔ)言中#define的一些用法介紹概述

    今天整理了一些#define用法,與大家共享!1.簡(jiǎn)單的define定義#define MAXTIME 1
    的頭像 發(fā)表于 04-14 11:29 ?7730次閱讀

    #define的高級(jí)用法簡(jiǎn)介

    #define的高級(jí)用法
    的頭像 發(fā)表于 02-05 11:50 ?4333次閱讀

    C語(yǔ)言基礎(chǔ):定義使用do{}while(0)的好處

    C語(yǔ)言定義使用do{}while(0)的好處1. 概述 經(jīng)常寫(xiě)項(xiàng)目代碼,有時(shí)需要用到定義,而定義
    發(fā)表于 01-13 13:06 ?2次下載
    C語(yǔ)言基礎(chǔ):<b class='flag-5'>宏</b><b class='flag-5'>定義</b>使用do{}while(0)的好處

    C語(yǔ)言中的typedef的用法

    在以前的學(xué)習(xí)對(duì)于C語(yǔ)言中typedef和define的認(rèn)識(shí)是,#define,作用是簡(jiǎn)單的替換,而typedef也是替換,只不過(guò)比define
    發(fā)表于 01-13 13:36 ?0次下載
    C語(yǔ)言中的typedef的<b class='flag-5'>用法</b>

    C語(yǔ)言中的定義

    #define命令是C語(yǔ)言中的一個(gè)定義命令,它用來(lái)將一個(gè)標(biāo)識(shí)符定義為一個(gè)字符串,該標(biāo)識(shí)符被稱(chēng)為名,被
    的頭像 發(fā)表于 09-28 16:05 ?3954次閱讀
    C語(yǔ)言中的<b class='flag-5'>宏</b><b class='flag-5'>定義</b>

    c語(yǔ)言定義用法規(guī)則

    定義會(huì)在編譯的時(shí)候進(jìn)行替換展開(kāi)。最好將的參數(shù)用括號(hào)括起來(lái)。這樣就避免了當(dāng)一個(gè)表達(dá)式同時(shí)含有定義
    發(fā)表于 07-31 09:39 ?1125次閱讀

    c語(yǔ)言帶參數(shù)的定義

    定義 2. 帶參數(shù)的定義 3. 帶可變參數(shù)的定義 本文將重點(diǎn)探討帶參數(shù)的
    的頭像 發(fā)表于 09-04 17:45 ?2926次閱讀

    基于select!的進(jìn)階用法

    ,它可以讓我們同時(shí)監(jiān)聽(tīng)多個(gè)異步事件,一旦其中一個(gè)事件觸發(fā),就可以立即執(zhí)行相應(yīng)的代碼。在本教程,我們將詳細(xì)介紹 select!的進(jìn)階用法,并提供多個(gè)示例來(lái)幫助您更好地理解和掌握這個(gè)
    的頭像 發(fā)表于 09-19 15:35 ?1054次閱讀

    define定義

    ,常量表并沒(méi)有用define定義的常量,系統(tǒng)不為它分配內(nèi)存。define定義的常量,預(yù)處理時(shí)只是直接進(jìn)行了替換,,它用來(lái)將一個(gè)標(biāo)識(shí)符
    的頭像 發(fā)表于 11-24 15:35 ?1392次閱讀