Unpacked数组统计1的数量时遇Incompatible complex type错误求解决
SystemVerilog中
$countones赋值类型不匹配问题解决 错误原因
你遇到的Error-[ICTA] Incompatible complex type错误,核心是类型不匹配:
- 目标变量
numOnes是长度为8的int非压缩数组(类型标识int$[0:7]) $countones(mask_unpacked[i])返回的是单个int类型值
直接将单个值赋值给整个数组,就会触发类型不兼容的报错。
修正后的代码
把赋值语句改为给数组的对应索引元素赋值即可解决问题,同时优化打印格式(单个整数用%0d更合适):
module test_rand; bit [7:0] mask_unpacked [0:7]; int numOnes[0:7]; initial begin mask_unpacked[0] = 8'b00001111; mask_unpacked[1] = 8'b00001111; mask_unpacked[2] = 8'b00000000; mask_unpacked[3] = 8'b00000000; mask_unpacked[4] = 8'b00000000; mask_unpacked[5] = 8'b00000000; mask_unpacked[6] = 8'b00000000; mask_unpacked[7] = 8'b00000000; $display("*********************************"); foreach (mask_unpacked[i]) begin $display("mask_unpacked = %p",mask_unpacked[i]); numOnes[i] = $countones(mask_unpacked[i]); // 修正:赋值给数组对应索引的元素 $display("countones = %0d", numOnes[i]); // 用%0d打印单个整数更准确 end $display("*********************************"); end endmodule
额外优化建议
如果不需要保存每个元素的统计结果,可以直接打印$countones的返回值,省去数组定义:
// 移除int numOnes[0:7]定义 foreach (mask_unpacked[i]) begin $display("mask_unpacked = %p",mask_unpacked[i]); $display("countones = %0d", $countones(mask_unpacked[i])); end
内容的提问来源于stack exchange,提问作者Vincci
相关产品推荐
相关产品推荐

