module test( input sys_clk, input rst_n, input [19:0] din, input [5:0] numble ); wire [5:0] aaa; assign aaa = din[19-numble :- numble]; endmodule 报错Error (10734): Verilog HDL error at test.v(11): numble is not a constant
时间: 2024-04-14 07:29:06 浏览: 235
half_clk.zip_half_clk_halfclk
Verilog中,在数组切片的范围中使用变量是不被允许的,只能使用常量。因此,你在代码中使用的变量`numble`导致了错误。
如果你希望通过一个变量来指定切片的范围,可以使用系统函数`generate`来实现条件切片。下面是一个示例代码:
```verilog
module test(
input sys_clk,
input rst_n,
input [19:0] din,
input [5:0] numble
);
generate
genvar i;
for (i = 0; i < 6; i = i + 1) begin : slice_gen
wire [5:0] aaa;
assign aaa = din[19-i : 19-i-numble+1];
end
endgenerate
endmodule
```
这样,通过使用`generate`语句和`for`循环,可以生成多个切片并将其赋值给不同的`aaa`信号。请注意,切片范围应该使用常量进行计算,因此我们使用了`19-i`和`19-i-numble+1`来计算正确的范围。
阅读全文