des00 25 27 июля, 2016 Опубликовано 27 июля, 2016 · Жалоба Осторожно с описаниями вида 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 дня, пытаясь понять почему в симуляторе все соса сола, а при синтезе..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 27 июля, 2016 Опубликовано 27 июля, 2016 · Жалоба рекомендую к прочтению: http://www.lcdm-eng.com/papers/snug06_Veri...has%20Part1.pdf при синтаксическом анализе играет роль, какая переменная используется: 4-state или 2-state. если 2-state, то out-of-bound condition просто теряется, даже ворнингов не выдавая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 27 июля, 2016 Опубликовано 27 июля, 2016 · Жалоба рекомендую к прочтению: при синтаксическом анализе играет роль, какая переменная используется: 4-state или 2-state. если 2-state, то out-of-bound condition просто теряется, даже ворнингов не выдавая. ситуация совершенно другая. В этом коде нет out-of-bound condition и быть не может. В нем просто указатель в массиве может быть меньше нуля, но и сам массив идет с отрицательного индекса. Что допускается стандартом. ЗЫ. и ситуация там разбирается только для моделирования, т.к. при синтезе, будет просто обрезка адресного пространства с возможным маскированием. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 27 июля, 2016 Опубликовано 27 июля, 2016 · Жалоба синтезатор понял, что у вас в указателе unsigned adder т.е. результат rdata_ptr[1] - i является беззнаковым приведенного куска недостаточно для понимания почему он так посчитал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 27 июля, 2016 Опубликовано 27 июля, 2016 · Жалоба синтезатор понял, что у вас в указателе unsigned adder т.е. результат rdata_ptr[1] - i является беззнаковым приведенного куска недостаточно для понимания почему он так посчитал Все так, но тип переменной integer. И результата тоже Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OM-S 0 11 сентября, 2016 Опубликовано 11 сентября, 2016 · Жалоба 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 тоже беззнаковый. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 сентября, 2016 Опубликовано 12 сентября, 2016 · Жалоба 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 тоже беззнаковый. а ничего что это не выбор бита/битов, выбор элемента массива ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OM-S 0 12 сентября, 2016 Опубликовано 12 сентября, 2016 · Жалоба а ничего что это не выбор бита/битов, выбор элемента массива ? Может быть это не выбор бита, а выбор элемента массива и они различаются по своему поведению, но симулятор считает logic signed [3:0] ptr [15:0]; ... ptr_i = ptr; - расценивается как signed а logic signed [15:0] [3:0] ptr; ... ptr_i = ptr; - расценивается как unsigned Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 сентября, 2016 Опубликовано 12 сентября, 2016 · Жалоба Может быть это не выбор бита, а выбор элемента массива и они различаются по своему поведению, но симулятор считает logic signed [3:0] ptr [15:0]; ... ptr_i = ptr; - расценивается как signed а logic signed [15:0] [3:0] ptr; ... ptr_i = ptr; - расценивается как unsigned Не вижу корреляции с текущей темой. Посты до своего набиваете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OM-S 0 12 сентября, 2016 Опубликовано 12 сентября, 2016 · Жалоба Не вижу корреляции с текущей темой. Посты до своего набиваете? Странно. Я Вам привел конкретный пример когда система моделирования воспринимает результат взятия элемента знакового массива как беззнаковый результат. Полностью подходит под Ваш пример (хотя у Вас не указано, как объявлена переменная rdata_ptr). Впрочем, не вижу смысла Вам чего-то доказывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
embddr 0 13 сентября, 2016 Опубликовано 13 сентября, 2016 · Жалоба Все так, но тип переменной integer. И результата тоже Покажите объявление rdata_ptr, а то действительно мало данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 16 сентября, 2016 Опубликовано 16 сентября, 2016 · Жалоба Я Вам привел конкретный пример когда система моделирования воспринимает результат взятия элемента знакового массива как беззнаковый результат. Полностью подходит под Ваш пример (хотя у Вас не указано, как объявлена переменная rdata_ptr). Если бы я не упоминал про то, что моделирование проходит прекрасно, то я бы с вами согласился. Уж кто-кто, а симуляторы следят за подобными эффектами куда как надежнее синтезаторов. Потому, ваше упоминание про стандартную Verilog Gotcha, известную со времен первого стандарта, меня удивило и было отнесено к явному троллингу. Покажите объявление rdata_ptr, а то действительно мало данных. logic signed [cBCNT_W-1 : 0] rdata_ptr [2]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 23 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба синтезатор понял, что у вас в указателе 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 будет знаковым? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться