specman中'define as'与'define as calculated'有什么区别?

时间:2014-06-19 18:43:28

标签: specman

Cadence文档中两者的区别并不明显。 有人可以详细说明两者之间的区别吗?

2 个答案:

答案 0 :(得分:1)

define as宏只是一个普通的旧宏,您可能从其他编程语言中了解到这一点。它只是意味着在宏代码中的某些选定位置,您可以替换自己的代码。

define as computed宏允许您通过使用控制流语句(if,for等)以编程方式构造输出代码。它有点像一个返回字符串的函数,返回值是由预处理器插入其代码的代码。

答案 1 :(得分:1)

使用定义为定义为计算宏,您可以定义给定语法类别的新语法结构(例如,<statement>或{{1并且,您实现了替换代码,该替换代码替换了与宏匹配表达式(或模式)匹配的构造。 在这两种情况下,宏匹配表达式都可以具有在替换代码中使用的语法参数,并用匹配代码中使用的实际代码字符串替换。

不同之处在于,使用定义为宏,替换代码只是写在宏体中。 使用定义为计算宏,您可以编写一个过程代码,计算所需的替换代码文本并将其作为字符串返回。它实际上是一种返回字符串的方法,您甚至可以使用结果关键字来分配结果字符串,就像在任何 e 方法中一样。 当替换代码未修复时,定义为计算宏非常有用,并且可以根据确切的宏参数值甚至语义上下文而有所不同(例如,在某些情况下,可以使用反射查询决定确切的替换代码)。 (但重要的是要记住,即使定义为计算宏在编译期间而不是在运行时执行,因此它们无法查询字段或变量的实际运行时值以决定生成的替换代码)。

以下是两种宏类型之间的一些重要差异。

  • 定义为宏更易读,通常更容易编写。您只需记下要创建的代码。
  • 定义为计算宏更强。使用定义为可以实现的所有内容也可以使用定义为计算来实现,但反之亦然。如果未修复替换代码,定义为是不够的。
  • 定义为宏可在定义后立即使用。如果它引入的构造在宏之后的语句中使用,它将已经匹配。 定义为计算宏只能在下一个文件中使用,并且不能在定义宏的同一文件中使用。