我想定义一个返回大小列表的方法。例如
my_method(): list of my_struct is { ... };
显然会返回一个未知大小的列表。在线文档没有将大小列表作为返回值的语法定义。
我想定义一个返回大小列表的方法。例如
my_method(): list of my_struct is { ... };
显然会返回一个未知大小的列表。在线文档没有将大小列表作为返回值的语法定义。
列表大小指定如下:
my_list : list of int;
keep my_list.size() == 4;
您可以将这样的列表包装在模板结构中,并将结构内的列表限制为如下数字:
<'
struct my_struct {
data : int;
};
template struct FourElemWrpr of ( <first'type> ) {
d : list of <first'type>;
keep d.size() == 4;
};
extend sys {
foo() : FourElemWrpr of int is {
gen result;
print result.d;
};
run() is also {
var wrpr := foo();
print wrpr.d;
};
};
'>
在 Specman 10 上运行时,会产生:
Welcome to Specman Elite
[...]
Generating the test with Pgen using seed 1...
Starting the test ...
Running the test ...
result.d =
0. -208970122
1. -1768025704
2. -65377588
3. -723567746
wrpr.d =
0. -208970122
1. -1768025704
2. -65377588
3. -723567746
No actual running requested.
Checking the test ...
Checking is complete - 0 DUT errors, 0 DUT warnings.
定义列表类型的结构字段时,还可以指定其大小,如下所示:
struct list_wrapper {
my_list[4]: list of int;
};
可以用来代替:
struct list_wrapper {
my_list: list of int;
keep my_list.size() == 4;
};
此语法仅适用于字段。不适用于局部变量、方法返回类型等。
另外,请注意它不是看起来的“固定大小”列表。声明的大小(上例中为 4)仅表示初始大小。创建后,可以像任何其他列表一样添加、删除元素等。
[ size ] 表示法和使用约束之间有一个重要区别。虽然约束仅在生成包含结构时对生成的字段生效,但 [ size ] 表示法也对由new创建的结构的字段或不可生成的字段生效。