2015-04-23 44 views
1

我有这样创建的三根导线:的Verilog:“...不是一个常数”

wire [11:0] magnitude; 
wire [3:0] bitsEnd; 
wire [3:0] leadingBits; 

所有这些都是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]; 

但是,下面的(貌似等价)代码给出了错误bitsEnd is not a constant

assign leadingBits[3:0] = magnitude[bitsEnd + 3:bitsEnd]; 

我不能用简写这项任务?为什么会在第二种情况下提出这个错误,但不是第一种?

+0

可能是一个编译器问题。在语义上,两者都是相同的,正如你指出的那样。尝试不同的编译器。 – jamihash

回答

4

在Verilog中,您不能使用变量(即bitsEnd)作为范围的终点。您可以使用+:/-:operator解决您的问题:

assign leadingBits = magnitude[bitsEnd+3 -: 4]; 

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