zoukankan      html  css  js  c++  java
  • 参数化define

    SV中的define,可以是对var类型,也可以是对function类型的,或者其他任何可以直接替换的字符。

    `define  wordsize   8

      应用 logic [1 :·wordsize] data;

    `define  var_nand(dly)   nand #dly

      应用`var_nand(2)   g121  (q21,  n10,  n11);

    `define  D(x,y)   initial  $display("start", x, y, "end");

      应用`D("msg1",  "msg2")  等价于 initial  $display("start",  "msg1",  "msg2",  "end");

    这三种都是没有默认参数赋值的,所以参数的个数必须是与定义相同的。

    含默认参数的define:

    `define  Macros(a=5, b="B",  c)  $display(a, b , c);

      应用`Macros ( ,2,3)  等同于 $display(5, 2, 3);

    这样a, b都可以被省略,但是c的函数传递是不能被省略的。

    define定义中,可以在递归调用自己;

      `define  TOP(a, b)   a+b

      `TOP (`TOP(b, 1), `TOP(42, a))

      等同于b+1 + 42+a

    define中的参数如果替代发生在""之中,是不能直接被替代的。

      `define H(x)  "Hello, X"

      应用$display(`H(world));  打印出Hello, X

      其中的参数X并不会被替代为world

    define宏中的几个特殊字符;

      在双引号内部有宏引用的时候,双引号需要加`转义,这样define的参数可以直接替换

      `define  msg(x,y)  `"x: y`"   

      应用$display (`msg(left_side, right_side));   打印出 $display("left_side",  righ_side)

      如果define的参数,需要和其他的字符还进行拼接,则必须加``,如果需要前后都需要加。

        如果不是参数的拼接,直接宏正常替换之后的操作,只加一个`

      `define   append(f)   f``_master   省略了之前的``,因为之前没有字符

      应用`append(clock)   等价于clock_master

      ·define   f   clock

      `define   append(f)  `"`f_master`"   等价于clock_master

        内部包含其他define,所以双引号转义,内部f是一个完整宏的替换,所以加一个`

      如果define的宏中,需要加入反斜杠这样的字符,需要`转义,  `

                需要双引号,不需要转义。

  • 相关阅读:
    简单两行,实现无线WiFi共享上网,手机抓包再也不用愁了
    Windows下Python 3.6 安装BeautifulSoup库
    RSA加密算法破解及原理
    干货,Wireshark使用技巧-过滤规则
    干货:Wireshark使用技巧-显示规则
    干货!链家二手房数据抓取及内容解析要点
    Wireshark分析实战:某达速递登录帐号密码提取
    协议分析中的TCP/IP网络协议
    Wireshark使用教程:不同报文颜色的含义
    VMware kali虚拟机环境配置
  • 原文地址:https://www.cnblogs.com/-9-8/p/7909612.html
Copyright © 2011-2022 走看看