Перейти к содержанию
    

Непонятный варнинг

Здравствуйте, уважаемые гуру.

 

Не могу понять, чего за варнинг дает Квартус к следующему куску кода:

reg [5:0] Position_ChangeSums [7:0];
...
reg [2:0] CurrentBitPosition;
...
reg    [3:0]    NumPosition1;

always @(posedge Clk)
begin
...
CurrentBitPosition = 0;
        
for (NumPosition1 = 1; NumPosition1 < 8; NumPosition1 = NumPosition1 + 1)
  begin
     if (Position_ChangeSums[NumPosition1] > Position_ChangeSums[CurrentBitPosition])
       CurrentBitPosition = NumPosition1;
  end
...
end

По сути, это определение номера элемента массива Position_ChangeSums , содержащего число с максимальным значением.

 

Ругается варнингом на выражение "Position_ChangeSums[CurrentBitPosition]" внутри цикла.

 

Варнинг такой:

Verilog HDL or VHDL warning at the <location>: index expression is not wide enough to address all of the elements in the array

 

Что это может быть?

Я адресую массив, состоящий из 8ми элементов, регистром, состоящим из 3-х триггеров.

Должно хватать.

В Моделсиме всё работает.

 

Но наличие непонятного варнинга не радует, хотелось бы разобраться.

 

Quartus 10.1, Win7 64bit.

 

Всем заранее спасибо за ответы :).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что это может быть?

NumPosition1 = 1; NumPosition1 < 8;

0 не используется

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, не используется, т.к. сравнение начинается с 1-го элемента (который сравнивается с 0-вым).

 

Кроме того, варнинг на Position_ChangeSums[CurrentBitPosition], а не на Position_ChangeSums[NumPosition1]...

 

Что ему не нравится-то?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не пишу на верилоге, но сдается мне, что квартус понимает [7:0] не как 8 элементов, а как восьмиразрядный адрес, о чем и ругается, что Вы адресуете массив с 8 линиями адреса от 3-х разрядного регистра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что скажет quartus если задать:

1)

reg [3:0] CurrentBitPosition;

reg [3:0] NumPosition1;

 

2) или проще:

integer NumPosition1, CurrentBitPosition;

 

-------------

Мне кажется проблема тут: CurrentBitPositionх[2:0] = NumPosition1[3:0];

NumPosition1[3:0] превращается в NumPosition1[2:0] и не может дойти до 8

Изменено пользователем Torpeda

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

проблема тут: CurrentBitPositionх[2:0] = NumPosition1[3:0];
+1

пиши или

reg [3:0] CurrentBitPosition;

или

CurrentBitPositionх = NumPosition1[2:0]; // или вообще CurrentBitPositionх = {NumPosition1[3], NumPosition1[0], NumPosition1[1]} или ещё какой изврат

смотря какой алгоритм.

 

2) или проще:

integer NumPosition1, CurrentBitPosition;

-1

для модулсима проще, а для квартуса хуже. вместо 4-х битного будет использован ..... 32-х битный. квартус много мяса съест.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CurrentBitPositionх = NumPosition1[2:0];

Не помогает.

Собственно, на такое несоответствие он выдает другой варнинг: truncated value... to match ... .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не помогает.

Собственно, на такое несоответствие он выдает другой варнинг: truncated value... to match ... .

А так - помогает:

reg [3:0] CurrentBitPosition;

reg [3:0] NumPosition1;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не помогает.

Собственно, на такое несоответствие он выдает другой варнинг: truncated value... to match ... .

Position_ChangeSums[NumPosition1[2 : 0]], а лучше всего перейдите на инты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А так - помогает:

reg [3:0] CurrentBitPosition;

reg [3:0] NumPosition1;

Не помогает.

 

Position_ChangeSums[NumPosition1[2 : 0]],

Не помогает.

 

а лучше всего перейдите на инты

Не хочу на инты...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не помогает.

Собственно, на такое несоответствие он выдает другой варнинг: truncated value... to match ... .

А полный варнинг? Вообще, встать мышкой на варнинг и нажать Ф1. Выскочит подробное описание варнинга и предположение по решению проблемы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не помогает.

Не помогает.

Не хочу на инты...

 

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

В сухую никто напрягаться не будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...