Specman方法返回大小的列表

时间:2013-04-30 17:45:48

标签: specman

我想定义一个返回大小列表的方法。 例如。

my_method(): list of my_struct is { ... };

显然会返回未知大小的列表。联机文档没有大小列表的语法定义作为返回值。

2 个答案:

答案 0 :(得分:2)

列表大小指定如下:

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.

答案 1 :(得分:0)

定义列表类型的结构字段时,还可以按如下方式指定其大小:

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 创建的结构字段生效strong>,或用于不可生成的字段。