You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Specman中生成无连续重复元素的限定范围列表?

在Specman中生成无连续重复元素的限定范围列表

问题分析

你的核心需求是生成满足两个条件的列表:

  • 每个元素取值在[0, mylist_limit)范围内
  • 列表中没有连续两个元素值相同(允许非连续的重复元素,如示例中的[1,0,1,0])

你之前的尝试存在两个关键问题:

  1. 使用unique()约束完全偏离需求:该约束要求列表所有元素唯一,但你的需求仅禁止连续重复,这个约束会错误过滤掉合法案例。
  2. 连续元素比较的索引逻辑错误:你在循环中用mylist[index] != mylist[index+1],一方面最后一个元素的index+1会触发越界;另一方面逻辑上应该是当前元素和前一个元素不同,而非和下一个元素比较。

正确的约束实现

结合你的范围约束,正确的Specman约束代码如下:

mylist_len : uint; // 列表长度,可提前约束或赋值
mylist_limit : uint; // 元素取值上限,可提前约束或赋值
mylist[mylist_len] : list of uint;

// 约束1:每个元素在限定范围内
keep for each (elem) in mylist {
    elem < mylist_limit;
};

// 约束2:无连续重复元素
keep for each (elem) in mylist {
    if index > 0 {
        elem != mylist[index-1];
    };
};

代码说明

  • 范围约束保留你原有的逻辑,确保元素取值符合要求
  • 连续元素约束部分:遍历每个元素时,仅当当前元素不是第一个(index>0),才要求它与前一个元素(mylist[index-1])值不同,既匹配需求又避免了索引越界问题。

内容的提问来源于stack exchange,提问作者Carcophan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:51:02