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

无需第三方库,在SystemVerilog中筛选关联数组指定关键字元素

SystemVerilog关联数组筛选:提取键含"door"的元素

我已经把arrayA和arrayB合并到了关联数组arrayC里,现在需要从arrayC中筛选出键包含"door"字符串的元素,存入arrayD。但SystemVerilog里没有strtok()方法,之前写的代码跑不起来,得重新实现这个筛选逻辑,最终要让arrayD只包含原arrayB里那些键带"door"的元素。

现有初始化与合并代码

bit [31:0] arrayA[string];
bit [31:0] arrayB[string];
bit [31:0] arrayC[string];
bit [31:0] arrayD[string];

// Initialize the arrays
arrayA["key1"] = 100;
arrayA["key2"] = 200;
arrayB["door2"] = 300;
arrayB["door3"] = 400;

// Merge the arrays into arrayC
foreach (arrayA[key]) begin
  arrayC[key] = arrayA[key];
end

foreach (arrayB[key]) begin
  arrayC[key] = arrayB[key];
end

原错误尝试代码

// Separate the merged array by keyword
foreach (arrayC[key]) begin
  string keyword;
  keyword = strtok(key, "door");  // strtok does not work.

  foreach (arrayC(key)) begin
     if (arrayC.exists(keyword)) 
        arrayD[key] = arrayC[key];
  end

end

正确实现方案

SystemVerilog的string类型提供了index()方法,可以用来检查子串是否存在:如果子串在目标字符串中,返回子串的起始索引;如果不存在,返回-1。我们可以利用这个方法遍历arrayC的所有键,判断键中是否包含"door",如果是就把对应元素存入arrayD。

正确代码

// 筛选键包含"door"的元素到arrayD
foreach (arrayC[key]) begin
  // 检查key中是否包含"door"子串
  if (key.index("door") != -1) begin
    arrayD[key] = arrayC[key];
  end
end

执行这段代码后,arrayD就会包含以下元素:

arrayD["door2"] = 300;
arrayD["door3"] = 400;

内容的提问来源于stack exchange,提问作者bu-ral

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:45:07