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

如何通过约束让SystemVerilog队列仅取另一队列中的值?

基于SystemVerilog约束实现从随机队列选元素填充目标队列的方案

可以直接通过约束机制实现需求,无需在随机化完成后手动处理。

约束写法说明

修改chosen_c约束,利用SystemVerilog的inside操作符确保chosen的每个元素都来自choices队列,同时可按需添加元素唯一性约束:

class some_class;
  
  rand bit [7:0] choices [$];
  rand bit [7:0] chosen [$];
  
  int num_choices = 20;
  int num_chosen = 5;
  
  function new();
  endfunction
  
  constraint choices_size_c { choices.size() == num_choices; }
  
  constraint chosen_c {
    chosen.size() == num_chosen;
    // 强制每个chosen元素都存在于choices队列中
    foreach (chosen[i]) {
      chosen[i] inside {choices};
    }
    // 可选约束:确保chosen内元素不重复
    unique {chosen};
  }
  
endclass

关键逻辑解释

  • inside操作符是SystemVerilog约束的原生语法,能直接限定元素的取值范围为目标队列的所有元素,随机器会自动生成符合要求的chosen队列。
  • 若允许chosen内存在重复元素,只需去掉unique {chosen}约束即可。
  • 随机器会优先满足choices的长度约束(生成20个元素),再基于生成的choices构造符合要求的chosen队列,整个流程完全由约束驱动,无需额外手动操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:35:20