无需第三方库,在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
相关产品推荐
相关产品推荐

