色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

SV中define宏定義的用法

小杜的芯片驗證日記 ? 來源:數字芯片驗證日記 ? 2024-10-21 14:22 ? 次閱讀

Hi,我是小杜。小杜工作中經常看到驗證環境中的宏定義,之前僅有一點了解,最近小杜需要用到宏,于是整理了一下宏的使用場景和注意事項。小杜經驗尚淺,如有錯誤,還請批評指正。

宏定義`define的用法

SV中使用預處理指令`define來定義宏,宏可以用來創建文本替換。根據場景不同,`define主要用來定義常量簡化復雜的表達式或代碼段以及提高代碼的可移植性。其基本語法為:

`defineMACRO_NAMEreplaced_text

下面是小杜對一些使用場景的簡單舉例:

定義常量

`defineDATA_WIDTH 32

條件編譯

`ifdef USE_SNPS_VIP
...
`endif

簡化復雜表達式

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


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

定義宏函數

如果需要定義帶參數的宏函數,使用``來實現變量的整體替換。

`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

定義信號路徑

相較于上面,這是一種常用但并非spec推薦的用法,因為`define只是文本替換工具,使用宏來指代信號路徑會導致信號可讀性降低,在調試和維護中容易出錯。但工作中真的很有用。

`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 定義的信號路徑
        $display("Inner Data: %h", `INNER_DATA);
    end
endmodule

`define的作用域

`define定義的宏在SV中是全局有效的,作用域從宏被定義的地方開始,一直到文件結束,或者宏被`undef顯示的取消定義為止。比如經常使用宏定義信號位寬就是全局作用。

如果在被包含的文件中定義了一個宏,該宏對包含該文件的主文件以及該文件之后的所有內容有效。

//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顯示取消宏定義來控制宏的作用范圍。

`defineMY_MACRO 32
...
`undefMY_MACRO
//在`undef之后再調用MY_MACRO就會報錯

`define的使用注意事項

小杜這里列舉幾個會經常遇到的注意事項:

盡量使用大寫字母命名,以便和變量名/函數名區分開,并且一定要避免和其他宏出現命名沖突。盡量保持宏定義簡單明了,保持代碼的可讀性和可維護性,必要時在宏定義旁添加注釋。

如果使用宏定義簡化表達式,最好使用括號來確保表達式求值順序的正確,這是因為宏展開后會直接替換文本,可能會導致變量執行順序出錯。

最重要的是避免過度使用宏!!雖然宏使用起來非常方便,但對于較大的驗證環境,這會導致代碼可讀性變差和維護難度提升。平時隨手寫個宏,方便了自己,但很可能會讓負責環境維護的同事付出更多的時間進行維護。

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

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

    關注

    30

    文章

    4821

    瀏覽量

    68890
  • 宏定義
    +關注

    關注

    0

    文章

    51

    瀏覽量

    9043
  • define
    +關注

    關注

    0

    文章

    16

    瀏覽量

    3759

原文標題:【SV】宏定義`define的使用場景和注意事項小結

文章出處:【微信號:小杜的芯片驗證日記,微信公眾號:小杜的芯片驗證日記】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言typedef與#define用法和區別

    在C語言編程,typedef 和 #define是最常用語句,可能很多工作過幾年的工程師都沒有去深究過它們的一些用法和區別。
    發表于 10-12 10:39 ?699次閱讀

    C語言中定義的使用技巧

    #define命令是C語言中的一個定義命令,它用來將一個標識符定義為一個字符串,該標識符被稱為名,被
    發表于 09-05 10:12 ?1290次閱讀
    C語言中<b class='flag-5'>宏</b><b class='flag-5'>定義</b>的使用技巧

    C語言定義#和##的作用

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

    請問定義的##有什么用途?

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

    define定義多條語句的語法規則有哪些

    在單片機編程過程,有時候需要反復操作多條同相語句,這時候運用#define定義多條語句可以大大簡化編程內容。語法規則如下:1.
    發表于 07-15 08:39

    typedef和define區別

    typedef是在計算機編程語言中用來為復雜的聲明定義簡單的別名,與定義有些差異。它本身是一種存儲類的關鍵字define,無參
    發表于 11-09 14:22 ?6936次閱讀
    typedef和<b class='flag-5'>define</b>區別

    C語言中#define的一些用法介紹概述

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

    #define的高級用法簡介

    #define的高級用法
    的頭像 發表于 02-05 11:50 ?3993次閱讀

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

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

    C語言中的定義

    #define命令是C語言中的一個定義命令,它用來將一個標識符定義為一個字符串,該標識符被稱為名,被
    的頭像 發表于 09-28 16:05 ?3493次閱讀
    C語言中的<b class='flag-5'>宏</b><b class='flag-5'>定義</b>

    c語言定義用法規則

    定義會在編譯的時候進行替換展開。最好將的參數用括號括起來。這樣就避免了當一個表達式同時含有定義
    發表于 07-31 09:39 ?900次閱讀

    c語言帶參數的定義

    定義 2. 帶參數的定義 3. 帶可變參數的定義 本文將重點探討帶參數的
    的頭像 發表于 09-04 17:45 ?2477次閱讀

    基于select!的進階用法

    ,它可以讓我們同時監聽多個異步事件,一旦其中一個事件觸發,就可以立即執行相應的代碼。在本教程,我們將詳細介紹 select!的進階用法,并提供多個示例來幫助您更好地理解和掌握這個
    的頭像 發表于 09-19 15:35 ?718次閱讀

    define定義

    ,常量表并沒有用define定義的常量,系統不為它分配內存。define定義的常量,預處理時只是直接進行了替換,,它用來將一個標識符
    的頭像 發表于 11-24 15:35 ?930次閱讀

    定義后面能不能加分號

    define定義,最后需不需要加分號?
    的頭像 發表于 01-06 16:35 ?161次閱讀
    主站蜘蛛池模板: 亚洲欧美免费无码专区| 亚洲色欲色欲综合网站| 永久免费看bbb| 国内精品久久| 亚洲欧美中文日韩视频| 国产精品永久AV无码视频| 午夜亚洲WWW湿好大| 国产婷婷午夜精品无码A片| 午夜向日葵高清在线观看| 国产成人免费| 香蕉视频国产精品| 国产自产第一区c国产| 亚洲高清免费在线观看| 挤奶门事件完整照片| 在线观看中文字幕国产| 美女挑战50厘米长的黑人| 99RE6国产精品视频播放| 欧美乱妇日本无乱码特黄大片| yellow免费观看在线| 十分钟视频影院免费| 国产欧洲野花A级| 亚洲色图在线观看视频| 久久精品亚洲AV无码三区观看| 最新 国产 精品 精品 视频| 欧美成人一区二免费视频| 变形金刚7免费观看完整| 四虎免费影院| 久久99视热频国只有精品| 97免费人妻在线观看| 色欲人妻无码AV精品一区二区| 国产精品国产三级国产AV麻豆| 亚洲欧洲久久| 欧美MV日韩MV国产网站| 国产国拍亚洲精品av麻豆| 一级做a爰片久久毛片苍井优| 免费毛片试看| 各种场合肉H校园1V1| 亚洲无吗在线视频| 女人精69xxxxx舒心| 国产乱辈通伦影片在线播放亚洲| 一二三四视频免费社区5|