2

我有一个用于定义端口的宏:

-- Create simple port
define <p_def'struct_member> "p_def <name'name> <type'type>" as {
    <name'name> : inout simple_port of <type'type> is instance;
    keep bind(<name'name>,empty);
};

我想扩展宏以支持端口列表。我想为它使用一个[<len'name>]定义列表大小的可选标签,如下所示:

-- Create simple port OR list of simple ports
define <p_def'struct_member> "p_def <name'name> [\[<len'name>\] ] <type'type>" as {

   if len does not exist { // How to implement it?
        <name'name> : inout simple_port of <type'type> is instance;
        keep bind(<name'name>,empty);

   } else { // len exists

        <name'name>[<len'name>] : list of inout simple_port of <type'type> is instance;
        keep for each in <name'name> {
            bind(it,empty);
        };
   };
};

** 例如,定义大小为 10 的端口列表将如下所示:

p_def my_list_of_ports[10] bit;

我在 Specman e Language Reference 中找不到如何知道optional tag( [<len'name>]) 是否已定义。您知道如何在宏中实现“if len 不存在”语句吗?谢谢您的帮助

4

1 回答 1

2

如果有人感兴趣,答案是什么:

define <p_def'struct_member> "p_def <name'name>[\[<len'name>\]] <type'type>" as computed {
   if <len'name> == NULL {
      result = appendf("%s : inout simple_port of %s is instance; \n keep bind(%s,empty);", <name'name>, <type'type>, <name'name>);
   } else { // list
      result = appendf("%s[%s] : list of inout simple_port of %s is instance; keep for each in %s { bind(it,empty); };", <name'name>, <len'name>, <type'type>, <name'name>);
   };
};
于 2015-12-24T15:46:16.117 回答