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