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的宏中,需要加入反斜杠这样的字符,需要`转义,  `\

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

参数化define的更多相关文章

  1. typedef define typedef可以使程序参数化,提高程序的可移植性。

    小结: 1. typedef并没有创建一个新类型,它只是为某个已存在的类型增加了一个新的名称而已: 2. typedef声明也没有证据新的语义:通过这种方式声明的变量与通过普通方式声明的变量具有完全相 ...

  2. 对SPI进行参数化结构设计

    前言 为了避免每次SPI驱动重写,直接参数化,尽量一劳永逸. SPI master有啥用呢,你发现各种外围芯片的配置一般都是通过SPI配置的,只不过有3线和四线. SPI slave有啥用呢,当外部主 ...

  3. pytest文档42-fixture参数化params

    前言 参数化是自动化测试里面必须掌握的一个知识点,用过 unittest 框架的小伙伴都知道使用 ddt 来实现测试用例的参数化. pytest 测试用例里面对应的参数可以用 parametrize ...

  4. Google单元测试框架gtest之官方sample笔记3--值参数化测试

    1.7 sample7--接口测试 值参数不限定类型,也可以是类的引用,这就可以实现对类接口的测试,一个基类可以有多个继承类,那么可以测试不同的子类功能,但是只需要写一个测试用例,然后使用参数列表实现 ...

  5. Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ...

    Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ... 这个错误是因为有两个相 ...

  6. lr文件下载脚本(文件参数化重命名)

    http://wenku.baidu.com/link?url=6oiIadyF9eFS4VshKbfJDnxrBh2IX919ndi0JO8yoqTRNRNIpavFrZJ9LPVb-FBSfbRY ...

  7. SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...

  8. C#-#define条件编译

    本文导读: C#的预处理器指令从来不会转化为可执行代码的命令,但是会影响编译过程的各个方面,常用的预处理器指令有#define.#undef.#if,#elif,#else和#endif等等,下面介绍 ...

  9. Google C++单元测试框架GoogleTest---值参数化测试

    值参数化测试允许您使用不同的参数测试代码,而无需编写同一测试的多个副本. 假设您为代码编写测试,然后意识到您的代码受到布尔参数的影响. TEST(MyCodeTest, TestFoo) { // A ...

随机推荐

  1. el表达式获取对象属性值 返回值类型

    实现 数字页码时 遇到的一个问题. 后端servlet 在request.setAttribute("page",page); page 为pagebean的实例对象,pagebe ...

  2. No converter found for return value of type

    springMVC请求接口的时候报500  No converter found for return value of type 原因:这是因为springmvc默认是没有对象转换成json的转换器 ...

  3. myeclipse项目导入到eclipse, HttpServletRequest报红现象

    eclipse项目中关于导入的项目里提示HttpServletRequest 不能引用的解决办法 当使用eclipse导入外部的web工程时,有时会提示HttpServletRequest, Serv ...

  4. jquery中$.get()提交和$.post()提交的区别

    相同点:都是异步请求的方式来获取服务器端的数据: 异同点: 1.请求方式不同:$.get()方法使用 GET 方法来进行异步请求的:$.post()方法使用POST方法来进行异步请求的: 2.参数传递 ...

  5. 安装Vue Devtools

    命令行进入vue-devtools\vue-devtools-master执行 cnpm install (貌似npm不太好使,也可能是我网络代理的原因) (淘宝镜像安装 npm install -- ...

  6. ubuntu上编译linux内核

    Linux 编译:1,首先解压缩内核.2,make     ARCH=arm      CROSS_COMPILE=arm-xilinx-linux-gnueabi-       digilent_z ...

  7. java执行字符串数学表达式【记录】

    https://stackoverflow.com/questions/3422673/evaluating-a-math-expression-given-in-string-form 1. goo ...

  8. windows下安装Git安装

    一:Git是什么? Git是一个代码仓库,属于分散型版本管理系统. 二:在windows下安装Git 载msysgit 1. 访问 msysGit 的项目主页,下载 msysGit.http://ms ...

  9. Java设计模式(一)普通工场模式 抽象工场模式

    设计模式 设计模式是前人总结的,为了解决一类问题而总结的代码设计经验. 最初可能为了使用而使用,后面就会发现.非常多没想到的问题由于使用了正确的设计模式已经为你考虑到了.<design patt ...

  10. 萌新接触前端的第二课——CSS

    前端知识——CSS CSS(英文全称:Cascading Style Sheets) 中文名层叠样式表,是一种用来表现HTML或XML等文件样式的计算机语言.CSS不仅可以静态地修饰网页,还可以配合各 ...