Заборол я квартуса с этим синхронным ROM - http://zx-pk.ru/threads/26944-mechta...l=1#post906882
Заборол я квартуса с этим синхронным ROM - http://zx-pk.ru/threads/26944-mechta...l=1#post906882
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
А как в схемном вводе назначить аттрибуты примитивам и сигналам?
Квартус требует D-триггеру и сигналам, идущим на его асинхронные установку и сброс назначить аттрибут KEEP... (банальная защита от дребезга - и вдруг споткнулся на ровном месте...)
Последний раз редактировалось LeoN65816; 08.04.2017 в 21:36.
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
Да, тоже не смог разобраться, как это сделать через диаграммы. В verilog я бы просто поставил /* synthesis keep */ или /* synthesis preserve */ или /* synthesis noprune */ по необходимости.
Последний раз редактировалось UA3MQJ; 09.04.2017 в 22:27.
LeoN65816, мне что-то такое ругательство не встречалось. Чаще всего всплывает "...in clock paths which may be acting as ripple and/or gated clocks..." что из другой оперы. Вы не могли бы показать скриншот или скопировать текст?
Столкнулся с этим в своих тестах/демах, повторил в отдельном проекте - https://yadi.sk/i/OEIF1g833Gp2Ny.
Классическая схема устранения дребезга контактов. На входах кнопок nPB1 и nPB2 и сброса nRST (все с замыканием на землю, у nRST внешние кондер с пуллапом) включены внутренние пуллапы, триггер формирует положительный фронт для мегафункции 4-разрядный синхронный счетчик.
Репорт говорит, что занято 4, а не 5 регистров - https://yadi.sk/i/xTwpoz1W3Gp2zc. Там же ворнинг, что этот триггер преобразован в эквивалентную схему-защелку.
Хэлп по этому ворнингу - https://yadi.sk/i/UykelaMT3Gp3QY. Вот здесь об этом и говорит.
И что интересно - кнопки работают, фантомный триггер создает положительный фронт (и глитчи иногда проскакивают). И тикает только младший разряд счетчика! Остальные молчат... (на выходе 4 светика для индикации)
Последний раз редактировалось LeoN65816; 10.04.2017 в 11:55.
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
Собрал твою схему:
Тоже преобразовано:
Что сказал RTL:
Счетчик:
Ячейка триггера:
Ячейка счетчика (один из 4х битов):
Все верно, в RS цепочке регистр не используется, только LUT (или LAB). поэтому 4 регистра. Что касается антидребезга, то наверное действительно лучше собирать RS триггер на элементах и стробировать его вторым по тактовой частоте. Тогда ячейка будет использовать не только LUT, но и сам триггер.
Как у вас все сложно. Я делаю вот так:
//трех битный буфер
reg [2:0] gate_buff;
always @ (posedge clk50M)
gate_buff <= {gate_buff[1:0],~key0};
//буфферизированное значение
assign GATE_D = (gate_buff == 3'b111);
//положительный фронт
assign GATE_POSEDGE = (gate_buff == 3'b011);
//отрицательный фронт
assign GATE_NEGEDGE = (gate_buff == 3'b110);
Потратится 3 ячейки на кнопку.
зы. ПЛИС вообще лучше программировать в синхронные схемы. В принципе, то же самое можно сделать и схемой. Вход кнопки подаете на вход, какого-нибудь D триггера. На клок - системный клок. С его выхода на еще один такой же триггер. Этого достаточно. Далее логика: если получилось 10 (в первом 1, во втором 0), значит нажали. Получится строб. А подавать кнопки в асинхронные схемы, как и вообще всё асинхронное - не рекомендуется, как бы. Плохо влияет на качество синтеза, плохо анализируется синтезатором, работает в железе не стабильно.
Последний раз редактировалось UA3MQJ; 10.04.2017 в 13:50.
ИЧСХ, сам же предлагаешь комбинаторику мешать с выходом. Да и не даст надежности именно твой пример. Правильное решение для перекидной кнопки (а так же для 2х кнопок ВКЛ-ВЫКЛ) будет немного другим. Сначала перевод в тактовый домен (можно сказать семплирование) посредством все того же, например, трехбитного регистра сдвига. А затем переключение выходного триггера по состоянию (внутри синхронного always блока):
if (gate_buff[2:0] == 3'h0) ClkReg <= 1'b1; else if (gate_buff[2:0] == 3'h7) ClkReg <= 1'b0;
Схема будет похожа на те, что я приводил в разделе про Денди на FPGA.
UA3MQJ, твой код прекрасно ловит и пропускает в систему дребезг контактов, но не устраняет!
"Игра" с длиной сдвигового регистра и частотой сэмплирования не поможет, а наоборот, может привести к тому, что будет пропускаться событие нажатия/отпускания...
Дык, я уже который раз подчеркиваю, что я всеми конечностями за это. И стараюсь делать именно синхронные схемы. Но в данном случае нужно перекидной кнопкой (переключателем) инкрементировать счетчик (или, допустим, делать шаг чего-то), и, IMHO, только асинхронный RS-триггер в таком включении позволяет гарантированно задавить дребезг...
Я не всезнайка, может я ошибаюсь, может кто-то и подскажет другое решение, гарантирующее подавление дребезга.
А может все же кто-нибудь подскажет, как в схематике назначать аттрибуты...
Последний раз редактировалось LeoN65816; 10.04.2017 в 14:55.
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
LeoN65816, встроенным примитивам, вроде, нельзя. Но ты всегда можешь создать свой примитив на верилоге или VHDL и кактус тебе услужливо создаст к нему схемный символ. С нужными атрибутами и прочим блекджеком.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)