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

如何修复Verilog编译出现的Illegal range in part select相关报错问题

问题原因
  • Error-[IRIPS] Illegal range in part select错误:Verilog语法要求[a:b]形式的固定范围位选择的上下边界必须是编译期可确定的常量,你代码中使用变量size计算位选边界,不符合语法规则。
  • Warning-[WUIMCM] Unknown in multiconcat multiplier警告:多重拼接语法{N{dataseg}}中的重复次数N同样要求是编译期常量,使用变量num计算重复次数时编译器无法在编译阶段确定数值,因此抛出警告。
修复方案

方案1:参数化定义(适用于size、num值固定的场景)

如果size和num的数值不需要在运行时修改,直接将其定义为parameter常量即可同时解决两个问题,修改后代码如下:

parameter bit[2:0] size = 3'h1;
parameter bit[2:0] num = 3'h1;
bit[59:0] data;

data = 60'h12345;
data = {(num+1){data[(size+1)*10-1:0]}};

方案2:动态位选+循环实现(适用于size、num为运行时变量的场景)

如果size和num需要在运行时动态修改,需要使用SystemVerilog支持的+:动态位选语法,配合循环实现动态拼接:

bit[2:0]  size;
bit[2:0]  num;
bit[59:0] data;
bit[59:0] temp;
int i;

data = 60'h12345;
num = 3'h1;
size = 3'h1;

temp = '0;
// 动态位选语法 [起始位 +: 位宽],支持位宽为变量,等价于 [起始位+位宽-1:起始位]
for(i = 0; i <= num; i++) begin
  temp = (temp << ((size + 1)*10)) | data[0 +: (size + 1)*10];
end
data = temp;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:45:04