参数化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的宏中,需要加入反斜杠这样的字符,需要`转义, `\
需要双引号,不需要转义。
参数化define的更多相关文章
- typedef define typedef可以使程序参数化,提高程序的可移植性。
小结: 1. typedef并没有创建一个新类型,它只是为某个已存在的类型增加了一个新的名称而已: 2. typedef声明也没有证据新的语义:通过这种方式声明的变量与通过普通方式声明的变量具有完全相 ...
- 对SPI进行参数化结构设计
前言 为了避免每次SPI驱动重写,直接参数化,尽量一劳永逸. SPI master有啥用呢,你发现各种外围芯片的配置一般都是通过SPI配置的,只不过有3线和四线. SPI slave有啥用呢,当外部主 ...
- pytest文档42-fixture参数化params
前言 参数化是自动化测试里面必须掌握的一个知识点,用过 unittest 框架的小伙伴都知道使用 ddt 来实现测试用例的参数化. pytest 测试用例里面对应的参数可以用 parametrize ...
- Google单元测试框架gtest之官方sample笔记3--值参数化测试
1.7 sample7--接口测试 值参数不限定类型,也可以是类的引用,这就可以实现对类接口的测试,一个基类可以有多个继承类,那么可以测试不同的子类功能,但是只需要写一个测试用例,然后使用参数列表实现 ...
- 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 ... 这个错误是因为有两个相 ...
- lr文件下载脚本(文件参数化重命名)
http://wenku.baidu.com/link?url=6oiIadyF9eFS4VshKbfJDnxrBh2IX919ndi0JO8yoqTRNRNIpavFrZJ9LPVb-FBSfbRY ...
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...
- C#-#define条件编译
本文导读: C#的预处理器指令从来不会转化为可执行代码的命令,但是会影响编译过程的各个方面,常用的预处理器指令有#define.#undef.#if,#elif,#else和#endif等等,下面介绍 ...
- Google C++单元测试框架GoogleTest---值参数化测试
值参数化测试允许您使用不同的参数测试代码,而无需编写同一测试的多个副本. 假设您为代码编写测试,然后意识到您的代码受到布尔参数的影响. TEST(MyCodeTest, TestFoo) { // A ...
随机推荐
- pgadmin4 python
安装安装包 # sudo apt-get install build-essential libssl-dev libffi-dev libgmp3-dev virtualenv python-pip ...
- .2 Git 分支 - 分支的新建与合并
分支的新建与合并 https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0% ...
- LeetCode 476 Number Complement 解题报告
题目要求 Given a positive integer, output its complement number. The complement strategy is to flip the ...
- C# Asp.net使用FormData对象实现ajax提交表单及上传图片
1.html代码: <form id="postForm"> 文件名:<input type="text" name="filena ...
- MVC编程模式
MVC编程模式 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: Model(模型)表示应用程序核心(比如数据库记录列表) ...
- Hibernate的一个小应用
hibernate 第一步,导入hiberante需要用到的jar包,因为使用hibernate时候,有日志信息输出,hibernate本身没有日志输出的jar包,导入其他日志的jar包 不要忘记还有 ...
- 林兴爆料小程序很快可以支持各个 App 直接打开小程序
在微信开放平台基础高级产品经理林兴演讲的当场,他爆料了微信小程序一个轰动性新能力:小程序很快可以支持各个 App 直接打开小程序!没错,你没有听错,简单来说,在不久以后,所有的 App 里面都可以看到 ...
- jmeter之最佳实践
官方文档: http://jmeter.apache.org/usermanual/best-practices.html 翻译: 16.最佳实践 16.1 始终使用最新版本的JMeter JMete ...
- 013-并发编程-java.util.concurrent.locks之-AbstractQueuedSynchronizer-用于构建锁和同步容器的框架、独占锁与共享锁的获取与释放
一.概述 AbstractQueuedSynchronizer (简称AQS),位于java.util.concurrent.locks.AbstractQueuedSynchronizer包下, A ...
- 异常的Error与Exception
一般不可处理:Error:是jvm抛出的严重性问题.已经严重影响程序执行 例如:内存溢出等情况这种问题发生一般不针对处理,直接修改程序. 可处理:Exception: 该体系的特点:子类的后缀名都是 ...