justontime 0 October 24, 2016 Posted October 24, 2016 · Report post Есть вот такой чудный узел от старинной схемы: Смысл, надеюсь, понятен - с помощью задержки на инверторе получается так, что при изменении сигнала на входе всегда один из выходов переходит в "1" до того, как второй выход переходит в "0". Собственно говоря, как сделать подобное внутри ПЛИС ? Вообще узел достаточно медленный, но в проекте все равно нет достаточно высокой тактовой частоты, чтобы с ее помощью реализовать нормальную синхронную схему... Можно ли, например, Quartus'у сказать в явном виде, что нужно сделать именно такую схему один к одному (если, конечно, ее в принципе можно построить из имеющихся логических блоков) ? Или, может, кто-то более умное и красивое решение подскажет ? Quote Share this post Link to post Share on other sites More sharing options...
iosifk 3 October 24, 2016 Posted October 24, 2016 · Report post Есть вот такой чудный узел от старинной схемы: Смысл, надеюсь, понятен - с помощью задержки на инверторе получается так, что при изменении сигнала на входе всегда один из выходов переходит в "1" до того, как второй выход переходит в "0". Собственно говоря, как сделать подобное внутри ПЛИС ? Вообще узел достаточно медленный, но в проекте все равно нет достаточно высокой тактовой частоты, чтобы с ее помощью реализовать нормальную синхронную схему... Можно ли, например, Quartus'у сказать в явном виде, что нужно сделать именно такую схему один к одному (если, конечно, ее в принципе можно построить из имеющихся логических блоков) ? Или, может, кто-то более умное и красивое решение подскажет ? Нельзя старую идеологию переносить в ПЛИС. Изучите тему "синхронного проектирования"... Quote Share this post Link to post Share on other sites More sharing options...
justontime 0 October 24, 2016 Posted October 24, 2016 · Report post Нельзя старую идеологию переносить в ПЛИС. Изучите тему "синхронного проектирования"... В общем полностью согласен. Но в данном конкретном случае есть целый ряд объективных (и не очень) причин попробовать сделать "неправильно"... Quote Share this post Link to post Share on other sites More sharing options...
iosifk 3 October 24, 2016 Posted October 24, 2016 · Report post В общем полностью согласен. Но в данном конкретном случае есть целый ряд объективных (и не очень) причин попробовать сделать "неправильно"... На столе 1 шт. заработает... Потом будете трахаться как Маврикиевна с цветным телевизором... Просто подумайте над "ряд объективных (и не очень) причин"... Стоит ли рисковать ради этой ерунды... Quote Share this post Link to post Share on other sites More sharing options...
justontime 0 October 24, 2016 Posted October 24, 2016 · Report post На столе 1 шт. заработает... Одна из причин, по которой нет желания переделывать вообще все под нормальный синхронный проект - достаточно 1 шт на столе :) Quote Share this post Link to post Share on other sites More sharing options...
iosifk 3 October 24, 2016 Posted October 24, 2016 · Report post Одна из причин, по которой нет желания переделывать вообще все под нормальный синхронный проект - достаточно 1 шт на столе :) Ну тогда рисовать цепочки вентилей без "оптимизации", смотреть на результат по месту... Или вывести сигнал наружу, там его задержать дорожкой или на RC и задержанный снова ввести... Есть еще задержки во входных-выходных буферах, но надо смотреть на ПЛИС конкретно... Quote Share this post Link to post Share on other sites More sharing options...
justontime 0 October 24, 2016 Posted October 24, 2016 · Report post Ну тогда рисовать цепочки вентилей без "оптимизации" Не подскажете, как это в Quartus'е делается ? Quote Share this post Link to post Share on other sites More sharing options...
yuravg 0 October 24, 2016 Posted October 24, 2016 · Report post Не подскажете, как это в Quartus'е делается ? Settings/Analysis & Syntesis/More Analysis там галки Removes redundant LCELL и Registers в положение Off Quote Share this post Link to post Share on other sites More sharing options...
justontime 0 October 24, 2016 Posted October 24, 2016 · Report post Settings/Analysis & Syntesis/More Analysis там галки Removes redundant LCELL и Registers в положение Off Прошу прощения - вопрос сформулировал не полностью... Интересует, как отключить эту оптимизацию для конкретного участка кода (а не для всего проекта) ? Quote Share this post Link to post Share on other sites More sharing options...
iosifk 3 October 24, 2016 Posted October 24, 2016 · Report post Одна из причин, по которой нет желания переделывать вообще все под нормальный синхронный проект - достаточно 1 шт на столе :) А если так, то обычно берут несколько стартовых наборов и соединяют их между собой. А уж там обычно все есть, что нужно... Что хоть делаете и зачем понадобилась эта задержка? Просто обычно когда задают такой смешной вопрос, то выясняется, что суть не в этом вопросе, а в разработке ТЗ на этот проект... Quote Share this post Link to post Share on other sites More sharing options...
Maverick_ 17 October 24, 2016 Posted October 24, 2016 · Report post если нужна очень маленький по длительности импульс: 1. можно на PLL поднять тактовую частоту до 400-500 МГц а потом просто сделать одиночный импульс. В крайнем случае можно использовать DDR регистр... 2. Можно попробовать подругому Quote Share this post Link to post Share on other sites More sharing options...
ViKo 0 October 24, 2016 Posted October 24, 2016 · Report post Не подскажете, как это в Quartus'е делается ? lcell lc1(in, out); Quote Share this post Link to post Share on other sites More sharing options...
justontime 0 October 24, 2016 Posted October 24, 2016 · Report post 1. можно на PLL поднять тактовую частоту до 400-500 МГц а потом просто сделать одиночный импульс Если бы у меня была лишняя PLL, я бы так и сделал - даже не спрашивая :) Спасибо всем (пока пойду поизучаю, что такое lcell - хоть слово умное узнал) ! (пока пойду поизучаю, что такое lcell - хоть слово умное узнал) ! Чуть ли не первая ссылка в Google по lcell дает практически мой пример - ViKo отдельное спасибо ! Естественно, сама Altera категорически не рекомендует использовать lcell для задержки из-за непредсказуемости и нестабильности, но в моем случаю я рискну :) Quote Share this post Link to post Share on other sites More sharing options...
justontime 0 October 25, 2016 Posted October 25, 2016 (edited) · 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... Edited October 25, 2016 by justontime Quote Share this post Link to post Share on other sites More sharing options...
dvladim 0 October 25, 2016 Posted October 25, 2016 · Report post Сама Altera такой пример приводит, а оно почему-то все равно Synthesized away... Потому что у вас формируется два сигнала из одного. Добавьте по входу в nand2 и на пин его, а снаружи этот пин на констату. Ну и lcell по выходу каждого элемента, который нужно оставить. А вообще всё сильно зависит от того куда идут выходные сигналы. Quote Share this post Link to post Share on other sites More sharing options...