zoukankan      html  css  js  c++  java
  • `define marcos usage in system verilog

    Note it is not supported in verilog

    http://en.wikipedia.org/wiki/SystemVerilog
    The preprocessor has improved `define macro-substitution capabilities, specifically substitution within literal-strings (""), as well as concatenation of multiple macro-tokens into a single word.
     

     link from 

    https://verificationacademy.com/forums/systemverilog/define-macros-usage
    http://www.verificationguild.com/modules.php?name=Forums&file=viewtopic&t=2541&view=previous 
    第三章 SystemVerilog文本值和数据类型SystemVerilog增加的类型在本章中包括以下
     
    1 `define xyz(I,R)
    2 assign abc[I].clk = R.du``I``_clk_x;
    `define xyz(I,R)
    assign abc(I).clk = ``R``.du``I``_clk_x;


    in the macro, R by itself is the argument that gets substituted. ``R`` is not needed.

    However, the argument I shows up twice in the body of the macro; first by itself, and then surrounded by ``I``. The `` is a token separator used to build identifiers and strings. Without it, the bare argument I would disappear into an identifier duI_clk_x. You want the macro

    `xyz(1,a)

    to be replaced with

    assign abc(1).clk = a.du1_clk_x;

     

    `define增强SystemVerilog中扩展了`define的功能,代替了宏定义的功能。
    3.2.1
    字符串中的宏变元替换(Macro argument substitution within strings)Verilog 的`define宏定义中可以用( ” ),则引号中的文字变成了文字型字符串。
    这就意味着,Verilog不能建立含有宏变元的字符串。
    如下例所示,不能按原本意愿展开。

    `define print(v)

    $display("variable v = %h", v)

    `print(data);

    该例中,将`print(data);展开,则为,$display(“variable v = %h”, data);。原本的意愿是,将宏定义中所有的‘v’都变成‘data’,但是,包含在双引号里的v并没有发生变化,所以在Verilog语言中不能实现以上的功能。

    SystemVerilog中能够实现宏变元的替换。应用重音符( ` )。

    举例:

    `define print(v)

    $display(`"variable v = %h`", v)

    `print(data);

    $display(“variable data = %h”, data);。

    Verilog中,若要在字符串中加入引号(单引号或双引号),则需在引号前加上字符“”。举例:$display("variable "data" = %h", data);

    当字符串中含宏变元时,只用"是不够的,则需要用`\`"。举例如下:

    `define print(v)

    $display(‘"variable ‘‘"v‘‘" = %h‘", v)

    `print(data);

    则宏展开为:

    $display("variable "data" = %h", data);

    3.2.2
    通过宏建立标识符名(Constructing identifier names from macros)SystemVerilog中可以通过( `` )将两个或更多的名字连接在一起形成新的名字。注意,重音符间无空格。

  • 相关阅读:
    adb 连接 Android 手机的两种方式
    Jmeter GUI及NON GUI下实现分布式
    史上最全最细 App 自动化环境部署
    不懂Java代码,照样把jmeter指定数据写入execl
    Dockerfile 让你轻松创建属于你的镜像 (下)
    Dockerfile 让你轻轻松松创建属于你的镜像 (上)
    Python vs Java (一):史上最全变量类型区别,99.99%的人都收藏了
    浏览器F12调试器定位系统前后端bug
    cookie,session
    App 抓包提示网络异常怎么破?(抓包HTTPS)
  • 原文地址:https://www.cnblogs.com/testset/p/3546073.html
Copyright © 2011-2022 走看看