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

Осторожно Квартус 15.1

Осторожно с описаниями вида

logic signed [pW-1 : 0] data_buffer [pSIZE][-pNUM : pNUM-1];
....
for (int n = 0; n < pSIZE; n++) begin
  for (int i = 0; i < pBIT; i++) begin
    odata[n][i] <= data_buffer[n][rdata_ptr[1] - i];
  end 
end

часть регистров [-pNUM : -1] будет выкинута даже без варнинга. Не понимает это чудо что rdata_ptr[1]-i < 0 указывает на валидные данные и тоже является мультиплексором. Потерял 1,5 дня, пытаясь понять почему в симуляторе все соса сола, а при синтезе.....

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


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

рекомендую к прочтению:

http://www.lcdm-eng.com/papers/snug06_Veri...has%20Part1.pdf

 

при синтаксическом анализе играет роль, какая переменная используется: 4-state или 2-state.

если 2-state, то out-of-bound condition просто теряется, даже ворнингов не выдавая.

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


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

рекомендую к прочтению:

 

при синтаксическом анализе играет роль, какая переменная используется: 4-state или 2-state.

если 2-state, то out-of-bound condition просто теряется, даже ворнингов не выдавая.

ситуация совершенно другая. В этом коде нет out-of-bound condition и быть не может. В нем просто указатель в массиве может быть меньше нуля, но и сам массив идет с отрицательного индекса. Что допускается стандартом.

 

ЗЫ. и ситуация там разбирается только для моделирования, т.к. при синтезе, будет просто обрезка адресного пространства с возможным маскированием.

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


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

синтезатор понял, что у вас в указателе unsigned adder

т.е. результат

rdata_ptr[1] - i

является беззнаковым

приведенного куска недостаточно для понимания почему он так посчитал

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


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

синтезатор понял, что у вас в указателе unsigned adder

т.е. результат

rdata_ptr[1] - i

является беззнаковым

приведенного куска недостаточно для понимания почему он так посчитал

Все так, но тип переменной integer. И результата тоже

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


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

rdata_ptr[1] - является беззнаковым вне зависимости от типа rdata_ptr

смотри 5.5.1 Rules for expression types (из IEEE.1364-2005 на Verilog)

 

"— Bit-select results are unsigned, regardless of the operands.

— Part-select results are unsigned, regardless of the operands even if the part-select specifies the entire

vector.

reg [15:0] a;

reg signed [7:0] b;

initial

a = b[7:0]; // b[7:0] is unsigned and therefore zero-extended

"

соответственно индекс rdata_ptr[1] - i тоже беззнаковый.

 

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


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

rdata_ptr[1] - является беззнаковым вне зависимости от типа rdata_ptr

смотри 5.5.1 Rules for expression types (из IEEE.1364-2005 на Verilog)

 

"— Bit-select results are unsigned, regardless of the operands.

— Part-select results are unsigned, regardless of the operands even if the part-select specifies the entire

vector.

reg [15:0] a;

reg signed [7:0] b;

initial

a = b[7:0]; // b[7:0] is unsigned and therefore zero-extended

"

соответственно индекс rdata_ptr[1] - i тоже беззнаковый.

а ничего что это не выбор бита/битов, выбор элемента массива ?

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


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

а ничего что это не выбор бита/битов, выбор элемента массива ?

 

Может быть это не выбор бита, а выбор элемента массива и они различаются по своему поведению, но

симулятор считает

logic signed [3:0] ptr [15:0];

...

ptr_i = ptr; - расценивается как signed

а

logic signed [15:0] [3:0] ptr;

...

ptr_i = ptr; - расценивается как unsigned

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


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

Может быть это не выбор бита, а выбор элемента массива и они различаются по своему поведению, но

симулятор считает

logic signed [3:0] ptr [15:0];

...

ptr_i = ptr; - расценивается как signed

а

logic signed [15:0] [3:0] ptr;

...

ptr_i = ptr; - расценивается как unsigned

Не вижу корреляции с текущей темой. Посты до своего набиваете?

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


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

Не вижу корреляции с текущей темой. Посты до своего набиваете?

Странно.

Я Вам привел конкретный пример когда система моделирования воспринимает результат взятия элемента знакового массива как беззнаковый результат.

Полностью подходит под Ваш пример (хотя у Вас не указано, как объявлена переменная rdata_ptr).

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

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


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

Все так, но тип переменной integer. И результата тоже

 

Покажите объявление rdata_ptr, а то действительно мало данных.

 

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


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

Я Вам привел конкретный пример когда система моделирования воспринимает результат взятия элемента знакового массива как беззнаковый результат.

Полностью подходит под Ваш пример (хотя у Вас не указано, как объявлена переменная rdata_ptr).

Если бы я не упоминал про то, что моделирование проходит прекрасно, то я бы с вами согласился. Уж кто-кто, а симуляторы следят за подобными эффектами куда как надежнее синтезаторов. Потому, ваше упоминание про стандартную Verilog Gotcha, известную со времен первого стандарта, меня удивило и было отнесено к явному троллингу.

 

Покажите объявление rdata_ptr, а то действительно мало данных.

  logic signed [cBCNT_W-1 : 0] rdata_ptr [2];

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


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

синтезатор понял, что у вас в указателе unsigned adder

rdata_ptr[1] - является беззнаковым вне зависимости от типа rdata_ptr смотри 5.5.1 Rules for expression types (из IEEE.1364-2005 на Verilog

 

А если написать:

 

wire signed rdata_ptr_1;

...

assign rdata_ptr_1=rdata_ptr[1];

....

то результат rdata_ptr_1 - i будет знаковым?

 

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


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

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

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

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

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

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

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

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

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

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