sazh 0 Posted October 25, 2016 · Report post Хм, вроде казалось все просто, но выскочила глупая проблема... Документация вроде говорит, что явно указанная lcell не должна автоматически убираться Quartus'ом. Соответственно, я добавил в код (VHDL) нужный мне lcell, однако при компиляции было сказано, что он Synthesized away... Ладно, решил просто отключить такую оптимизацию для всего проекта в целом. Для начала, очередной раз обнаружил, что 16-ый Quartus изменился в отношении интерфейса - соответствующие настройки нашлись не в Settings/Analysis & Syntesis, а в Settings/Compiler settings. Но это ладно - главное, что там уже стоит Removes redundant logic cells - Off ! Что дальше с этим делать - ума не приложу :( [update] - реально какая-то фигня... Попробовал слегка по другому - сделал просто сигнал и добавил к нему атрибуты: attribute keep : boolean; attribute keep of Delay12 : signal is true; Сама Altera такой пример приводит, а оно почему-то все равно Synthesized away... По схеме у Вас RS триггер нарисован. И используется явно в противоречии с таблицей истинности. Примитив dff еще никто не отменял. Поставьте 9 Квартус. Его будет достаточно под такое творчество. Если нужно реализовать на задержках из строба короткий импульс, окунуться так сказать в прошлое, такое вот предлагали. lcell_xor.v Quote Ответить с цитированием Share this post Link to post Share on other sites
justontime 0 Posted October 26, 2016 · Report post Потому что у вас формируется два сигнала из одного. Да вроде делаю в точности так, как увидел во многих практически идентичных примерах... Поставьте 9 Квартус. В чем именно поведение старого Quartus'а в данном отношении будет отличаться ? Я специально смотрел документацию именно к новому, и там вроде ничего не изменилось... В любом случае, нужная мне серия FPGA поддерживается только в относительно новых версиях. А вообще сейчас уже даже интересно не просто решение конкретной задачи (можно извернуться и другими способами), а хочется понять, почему оно работает не так, как написано ??? Quote Ответить с цитированием Share this post Link to post Share on other sites
ViKo 0 Posted October 26, 2016 · Report post Я 16-й (Prime) Quartus поставил, потыкался в него. Не понравилось, удалил. Вернулся к 13.1-му. Как по мне, самый удобный и красивый, несмотря на номер. :rolleyes: Quote Ответить с цитированием Share this post Link to post Share on other sites
Flip-fl0p 0 Posted October 26, 2016 · Report post Я 16-й (Prime) Quartus поставил, потыкался в него. Не понравилось, удалил. Вернулся к 13.1-му. Как по мне, самый удобный и красивый, несмотря на номер. :rolleyes: RTL просмотрщик там ужас. То-ли я не разобрался где эта хитрая галочка, то ли её действительно нет. Но когда он один файл описания раскидывает на несколько страниц, да ещё и все регистры раскидывает по одному, а не группирует, отпадает всякое желание его включать (RTL просмоторщик). А иногда полезно глянуть что там насинтезировал Quartus..... Вот в 15 Quartus'е всё нормально с этим А вот так показывает 13 Quartus..... Все описание разбил на страницы: Да ещё и элементы, которые образуют единую группу он "разбил". В итоге получаются огромные RTL модели которые сложно просматривать: Quote Ответить с цитированием Share this post Link to post Share on other sites
dvladim 0 Posted October 26, 2016 · Report post Да вроде делаю в точности так, как увидел во многих практически идентичных примерах... Смысл в том, чтобы добавить ненужный сигнал, который не позволит Квартусу упростить схему. Quote Ответить с цитированием Share this post Link to post Share on other sites
justontime 0 Posted October 27, 2016 · Report post Смысл в том, чтобы добавить ненужный сигнал, который не позволит Квартусу упростить схему. Я понимаю, что вопрос к Altera, а не к Вам :), но ведь у них написано: An LCELL buffer always consumes one logic cell. It is not removed from a project during logic synthesis. Так какого фига она убирается ??? Quote Ответить с цитированием Share this post Link to post Share on other sites
ViKo 0 Posted October 27, 2016 · Report post Убирается, если никак не участвует в выходных сигналах с ПЛИС. Если ничего выдавать не надо, то и делать незачем. Quote Ответить с цитированием Share this post Link to post Share on other sites
justontime 0 Posted October 27, 2016 · Report post Убирается, если никак не участвует в выходных сигналах с ПЛИС. Если ничего выдавать не надо, то и делать незачем. Что-то не понимаю... Напрямую, естественно, не выдает, но в конце концов сигнал, в котором, в т.ч., принимала участие задержка на этой lcell, выходит наружу. Похоже, я не понимаю тут что-то совсем принципиальное :( Quote Ответить с цитированием Share this post Link to post Share on other sites
maksimp 0 Posted October 28, 2016 · Report post Settings/Analysis & Syntesis/More Analysis там галки Removes redundant LCELL и Registers в положение Off Подозреваю что это не то. Нужно поставить Ignore LCELL Buffers в положение off, наверное это в том же меню. Quote Ответить с цитированием Share this post Link to post Share on other sites
justontime 0 Posted October 28, 2016 · Report post Подозреваю что это не то. Нужно поставить Ignore LCELL Buffers в положение off, наверное это в том же меню. Эта опция по умолчанию в OFF, и у меня она так и оставлена... Итак, посыпаю голову пеплом и прошу прощения у всех за то, что компасировал мозги... При внимательном изучении относящегося к проблеме куска дизайна был обнаружен утерянный not (довольно далеко от непосредственно ячейки задержки), который действительно приводил к тому, что кусочек схемы, где используется задержка, все время генерил 0 !!! Как назло, этот 0 не приводил к полной остановке остальных частей схемы, поэтому Quartus больше никаких подозрительных сообщений не выводил (типа того, что пин застрял в одном положении). Блин - не нужно было программировать в 12 ночи после бокала вина :) После исправления lcell остается на месте, все вроде выглядит так, как и требовалось... Еще раз спасибо всем откликнувшимся ! Quote Ответить с цитированием Share this post Link to post Share on other sites
dvladim 0 Posted October 30, 2016 · Report post Я понимаю, что вопрос к Altera, а не к Вам :), но ведь у них написано: An LCELL buffer always consumes one logic cell. It is not removed from a project during logic synthesis. Так какого фига она убирается ??? Да кто ж его знает. Вот у меня был случай: делаешь кольцевой генератор (несколько lcell и инвертор) - выбрасывает. Но если вместо инвертора поставить nand2 - то все в порядке. Я пришел к выводу что схема должна иметь смысл - т.е. таблицу истинности с разными значениями, иначе всё это выбрасывается. Quote Ответить с цитированием Share this post Link to post Share on other sites
DuHast 0 Posted October 30, 2016 · Report post Если бы у меня была лишняя PLL, я бы так и сделал - даже не спрашивая :) У Вас их вообще нет, или нет лишних? Сомневаюсь, что Вы задействуете все выходы во всех PLL. Quote Ответить с цитированием Share this post Link to post Share on other sites
justontime 0 Posted November 3, 2016 · Report post Да кто ж его знает. Собственно говоря, я уже раньше написал, в чем у меня была ошибка. А вообще костыль даже работает :) Quote Ответить с цитированием Share this post Link to post Share on other sites