2015-04-23 4 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]; 

В первом случае вы только рассчитать единый индекс (это не диапазон). Вот почему компилятор не жалуется на это.

Смежные вопросы