Koluchiy 0 14 мая, 2012 Опубликовано 14 мая, 2012 · Жалоба Здравствуйте, уважаемые гуру. Не могу понять, чего за варнинг дает Квартус к следующему куску кода: 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. Всем заранее спасибо за ответы :). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 14 мая, 2012 Опубликовано 14 мая, 2012 · Жалоба Что это может быть? NumPosition1 = 1; NumPosition1 < 8; 0 не используется Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 14 мая, 2012 Опубликовано 14 мая, 2012 · Жалоба Да, не используется, т.к. сравнение начинается с 1-го элемента (который сравнивается с 0-вым). Кроме того, варнинг на Position_ChangeSums[CurrentBitPosition], а не на Position_ChangeSums[NumPosition1]... Что ему не нравится-то? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 6 14 мая, 2012 Опубликовано 14 мая, 2012 · Жалоба Я не пишу на верилоге, но сдается мне, что квартус понимает [7:0] не как 8 элементов, а как восьмиразрядный адрес, о чем и ругается, что Вы адресуете массив с 8 линиями адреса от 3-х разрядного регистра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 15 мая, 2012 Опубликовано 15 мая, 2012 · Жалоба [7:0] - это всё-таки 8 элементов :). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 15 мая, 2012 Опубликовано 15 мая, 2012 (изменено) · Жалоба А что скажет 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 Изменено 15 мая, 2012 пользователем Torpeda Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 18 16 мая, 2012 Опубликовано 16 мая, 2012 · Жалоба проблема тут: 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-х битный. квартус много мяса съест. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба CurrentBitPositionх = NumPosition1[2:0]; Не помогает. Собственно, на такое несоответствие он выдает другой варнинг: truncated value... to match ... . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба Не помогает. Собственно, на такое несоответствие он выдает другой варнинг: truncated value... to match ... . А так - помогает: reg [3:0] CurrentBitPosition; reg [3:0] NumPosition1; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба Не помогает. Собственно, на такое несоответствие он выдает другой варнинг: truncated value... to match ... . Position_ChangeSums[NumPosition1[2 : 0]], а лучше всего перейдите на инты Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба А так - помогает: reg [3:0] CurrentBitPosition; reg [3:0] NumPosition1; Не помогает. Position_ChangeSums[NumPosition1[2 : 0]], Не помогает. а лучше всего перейдите на инты Не хочу на инты... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 18 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба Не помогает. Собственно, на такое несоответствие он выдает другой варнинг: truncated value... to match ... . А полный варнинг? Вообще, встать мышкой на варнинг и нажать Ф1. Выскочит подробное описание варнинга и предположение по решению проблемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба Не помогает. Не помогает. Не хочу на инты... Вы описание с предупреждением в отдельный законченный модуль положите. В сухую никто напрягаться не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться