Verilog:“......不是常数”

tom*_*KPZ 2 verilog

我有这样创建的三根电线:

wire [11:0] magnitude;
wire [3:0] bitsEnd;
wire [3:0] leadingBits;
Run Code Online (Sandbox Code Playgroud)

所有这些都assign使用组合逻辑进行了一些表达式。以下代码工作正常:

assign leadingBits[3] = magnitude[bitsEnd + 3];
assign leadingBits[2] = magnitude[bitsEnd + 2];
assign leadingBits[1] = magnitude[bitsEnd + 1];
assign leadingBits[0] = magnitude[bitsEnd + 0];
Run Code Online (Sandbox Code Playgroud)

但是,以下(看似等效的)代码给出了错误bitsEnd is not a constant

assign leadingBits[3:0] = magnitude[bitsEnd + 3:bitsEnd];
Run Code Online (Sandbox Code Playgroud)

我不能在这个作业中使用速记吗?为什么在第二种情况下会出现这个错误而不是第一种情况?

Qiu*_*Qiu 6

在 Verilog 中,您不能使用变量(即bitsEnd)作为范围的结束。您可以使用+:/-: 运算符来解决您的问题:

assign leadingBits = magnitude[bitsEnd+3 -: 4];
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,您只计算单个索引(它不是一个范围)。这就是编译器没有抱怨它的原因。