Flood 13 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба За все время прибивать гвоздями приходилось только сигналы для вывода в отладчик. Иначе уползают неизвестно куда, и ищи их потом. Но я использую hierarchy=rebuild, поэтому считаю такое поведение нормой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба ну так гвозди тогда покажите как обычно keep = true, dont_touch = true Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба как обычно keep = true, dont_touch = true wololo! vivado! keep away from my logical nets! Don't touch 'em! wololo! картинка на доске в рабочей комнате правильная =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба Приветствую! как обычно keep = true, dont_touch = true Если хотите чтобы сохранять имена и чтобы шины не расползались в в vivado лучше использовать (* MARK_DEBUG="true" *) А для сохранения пинов в иерархи модулей (* keep_hierarchy="yes" *) По умолчанию в Vivado стоит hierarchy=rebuild при этом он пытается восстановить иерархию с плоского нетлиста ПОСЛЕ синтеза а не сохранить ее ПРИ синтезе. Отсюда и проблемны с "расползанием" логики по другим модулям. Что же касается некорректного синтеза то пока на такое не нарывался (может мне в жизни жутко везет ? :) Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Inanity 1 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба Что там с warning-ами? За логи warning-ов не расстреливают) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба Вот я низачто не поверю, что в подобном коде (то место где он из 80 бит сделал 67) есть логическое обоснование его поведению dat_buffer <= oreq ? idat : (dat_buffer >> 8); // вот тут опачки и часть шины данных потерялась если idat не выходит за 67 бит - то вы dat_buffer можете хоть 256 бит обозвать - xilinx соптимизирует! тут все много интереснее. Для затравки выложу код, который глючит при сборке, на предмет проблем с coding style serv_val_line <= '0; serv_val_line <= ival ? 4'b1111 : (serv_val_line >> 1); serv_dat_line <= ival ? idat : (serv_dat_line >> 2); Проблемные видны невооруженным глазом: 1 Какой разрядности 0 писать? 2 Использование >> Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Inanity 1 9 августа, 2016 Опубликовано 9 августа, 2016 (изменено) · Жалоба 1 Какой разрядности 0 писать? Тут как раз всё ок. В VHDL была такая классная штука как others => '1' или '0'. Вне зависимости от размера регистра данное присвоение все биты взводило либо в 1, либо в 0. В veriloge такой удобной фичи нет, а вот в System Verilog есть. Присвоение reg <= '0 все биты обнуляет. Изменено 9 августа, 2016 пользователем Inanity Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Wic 0 10 августа, 2016 Опубликовано 10 августа, 2016 · Жалоба des00, а проект после "оптимизации" в симуляторе рассыпается? А то может хилые втихаря -O4 запили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 20 октября, 2016 Опубликовано 20 октября, 2016 · Жалоба Если бы такие простые вещи, как a <= b не работали в вивадо, ей было бы совершенно невозможно пользоваться. А это не так. Подниму тему. Я тоже думал что такого не может быть, пока сам не столкнулся в Vivado 2016.2 Убирает сигналы самым наглым образом и именно в местах a <= b. Причем 2 из 3 однотипных записи могут работать, а у последней цепи потерялись. Пришлось прибивать. И кстати, я на VHDL пишу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
elzaro 0 20 октября, 2016 Опубликовано 20 октября, 2016 · Жалоба Могу предположить, что некорректно воспринимается вложенная конструкция if else if.... Можно попробовать либо расставить у каждого if и else операторные скобки begin-end, либо заменить конструкцию на case Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 11 21 октября, 2016 Опубликовано 21 октября, 2016 · Жалоба Получается, Vivado надо в связке с Synplify использовать :-( Особенно, если подсел на SystemVerilog. Да-а-а... Квартус имеет, конечно, свои болячки, но так злобно не поступает. Кстати, а в ISE что-то подобное этим тихим оптимизациям наблюдалось? Когда мне доводилось немного с ним работать, что-то не припомню таких проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 13 21 октября, 2016 Опубликовано 21 октября, 2016 · Жалоба Я пока с таким поведением не сталкивался, но понимаю, раз жалуется уже не один человек - значит, оно возможно. Что синтезирует хуже XST по таймингам - да, бывало. Агрументом в пользу относительной адекватности Вивадо является то, что Xilinx давно перетащил на него всю свою базу IP-ядер и активно развивает новые. А это огромный объем HDL-кода, втч кривого "индийского". Было бы разумно вычленить некорректно синтезируемое место и отправить код в техподдержку или как минимум на форум Xilinx - пусть разбираются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 24 октября, 2016 Опубликовано 24 октября, 2016 · Жалоба Тут как раз всё ок. В VHDL была такая классная штука как others => '1' или '0'. Вне зависимости от размера регистра данное присвоение все биты взводило либо в 1, либо в 0. В veriloge такой удобной фичи нет, а вот в System Verilog есть. Присвоение reg <= '0 все биты обнуляет. Не пойму, а какие проблемы в верилоге просто написать: regname <= 0; ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alxkon 0 24 октября, 2016 Опубликовано 24 октября, 2016 · Жалоба Подниму тему. Я тоже думал что такого не может быть, пока сам не столкнулся в Vivado 2016.2 Убирает сигналы самым наглым образом и именно в местах a <= b. Причем 2 из 3 однотипных записи могут работать, а у последней цепи потерялись. Пришлось прибивать. И кстати, я на VHDL пишу. Подтверждаю, есть некоторые косяки под VHDL, тестировал в 2015.2, 2016.1-2016.3. У меня сложилось впечатление что некоторые стили описания Вивада просто не распознает и выдает странную чепуху. При этом ISE или Quartus таких фокусов не показывали. В общем заметил эти интересные свойства в описании сдвиговых регистров и памяти. Никакие директивы не помогают, только угодный Виваде стиль описания. Ну и еще заметил, что даже для быстрого "функционального" прототипирования нужно выпилить все варнинги и постоянно проверять скематик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Inanity 1 24 октября, 2016 Опубликовано 24 октября, 2016 (изменено) · Жалоба Не пойму, а какие проблемы в верилоге просто написать: regname <= 0; ??? C нулём все ок. А все биты в единицы как будете присваивать? Если так же, то у меня для вас плохая новость. Изменено 24 октября, 2016 пользователем Inanity Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться