User Tag List

Показано с 1 по 10 из 1910

Тема: ПЛИС и всё что с ними связано

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    24.03.2008
    Адрес
    г. Рыбинск
    Сообщений
    123
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как у вас все сложно. Я делаю вот так:



    //трех битный буфер
    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. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    HardWareMan
    Гость

    По умолчанию

    Цитата Сообщение от UA3MQJ Посмотреть сообщение
    зы. ПЛИС вообще лучше программировать в синхронные схемы. В принципе, то же самое можно сделать и схемой. Вход кнопки подаете на вход, какого-нибудь D триггера. На клок - системный клок. С его выхода на еще один такой же триггер. Этого достаточно. Далее логика: если получилось 10 (в первом 1, во втором 0), значит нажали. Получится строб. А подавать кнопки в асинхронные схемы, как и вообще всё асинхронное - не рекомендуется, как бы. Плохо влияет на качество синтеза, плохо анализируется синтезатором, работает в железе не стабильно.
    ИЧСХ, сам же предлагаешь комбинаторику мешать с выходом. Да и не даст надежности именно твой пример. Правильное решение для перекидной кнопки (а так же для 2х кнопок ВКЛ-ВЫКЛ) будет немного другим. Сначала перевод в тактовый домен (можно сказать семплирование) посредством все того же, например, трехбитного регистра сдвига. А затем переключение выходного триггера по состоянию (внутри синхронного always блока):
    if (gate_buff[2:0] == 3'h0) ClkReg <= 1'b1; else if (gate_buff[2:0] == 3'h7) ClkReg <= 1'b0;
    Схема будет похожа на те, что я приводил в разделе про Денди на FPGA.

  4. #3

    Регистрация
    20.06.2014
    Адрес
    г. Орск, Оренбургская обл.
    Сообщений
    813
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    60 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    UA3MQJ, твой код прекрасно ловит и пропускает в систему дребезг контактов, но не устраняет!
    "Игра" с длиной сдвигового регистра и частотой сэмплирования не поможет, а наоборот, может привести к тому, что будет пропускаться событие нажатия/отпускания...

    Цитата Сообщение от UA3MQJ Посмотреть сообщение
    зы. ПЛИС вообще лучше программировать в синхронные схемы.
    Дык, я уже который раз подчеркиваю, что я всеми конечностями за это. И стараюсь делать именно синхронные схемы. Но в данном случае нужно перекидной кнопкой (переключателем) инкрементировать счетчик (или, допустим, делать шаг чего-то), и, IMHO, только асинхронный RS-триггер в таком включении позволяет гарантированно задавить дребезг...
    Я не всезнайка, может я ошибаюсь, может кто-то и подскажет другое решение, гарантирующее подавление дребезга.
    А может все же кто-нибудь подскажет, как в схематике назначать аттрибуты...
    Последний раз редактировалось LeoN65816; 10.04.2017 в 14:55.
    Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

  5. #4
    HardWareMan
    Гость

    По умолчанию

    LeoN65816, встроенным примитивам, вроде, нельзя. Но ты всегда можешь создать свой примитив на верилоге или VHDL и кактус тебе услужливо создаст к нему схемный символ. С нужными атрибутами и прочим блекджеком.

  6. #5

    Регистрация
    24.03.2008
    Адрес
    г. Рыбинск
    Сообщений
    123
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ах, у вас перекидная кнопка, вот этот момент я упустил.

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    ИЧСХ, сам же предлагаешь комбинаторику мешать с выходом. Да и не даст надежности именно твой пример.
    А вот не согласен. Выход комбинаторики не обязан быть везде снабжен буфером на выходе. Если только он у вас не является окончательным выходом, не идет наружу.
    Входы этой комбинаторики получат информацию синхронно на оба входа, выход этой комбинаторики будет задержан во времени на какой-то t, который однозначно меньше периода клока. Если вдруг не так, то timequest это покажет.
    Так что, к следующему такту, в момент считывания результата, данные там уже будут стабильными.
    О дальнейшем использовании этого сигнала, я подразумеваю, что он будет использоваться внутри блока always по тому же системному клоку, а не как участник списка чувствительности, проблем не будет. Потому что дальнейшая логика, которую я обычно строю, возьмет этот сигнал, и сигналы от других источников, и по клоку, зайнесет в регистр. Может получиться некий конвеер.
    Данное решение я не сам придумал, а нашел, думаю на fpga4fun.com

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    if (gate_buff[2:0] == 3'h0) ClkReg <= 1'b1; else if (gate_buff[2:0] == 3'h7) ClkReg <= 1'b0;
    Я об этом и говорю. Но неизвестно, что дальше будет с этим выходом. Если выход будет использоваться дальше, для входа на последующие стадии логики, которая свой результат так же задвинет в регистр, то регистр ClrReg сможет оказаться выпиленным синтезатором.

    Со счетчиками вот есть варианты.
    http://www.fpga4fun.com/Debouncer.html
    Тут, похоже, как раз мое предложение с двумя d-триггерами, плюс счетчик.
    https://eewiki.net/pages/viewpage.action?pageId=4980758

    Суть вопроса на самом деле в этом:
    Цитата Сообщение от LeoN65816 Посмотреть сообщение
    А может все же кто-нибудь подскажет, как в схематике назначать аттрибуты...
    Потому что синтезатор одинаково выкидывает ненужное из синтеза, как из написанного на Verilog, так и нарисованного схематически. Так что я, пожалуй, пректащу тут умничать.
    ps. Но я к чему встрял. Если проектировать в соответствии с требованиями синтеза, то не будет варнингов и практически не будет потребности в том, чтобы задавать параметры синтеза.
    Последний раз редактировалось UA3MQJ; 10.04.2017 в 17:29.

  7. #6

    Регистрация
    20.06.2014
    Адрес
    г. Орск, Оренбургская обл.
    Сообщений
    813
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    60 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    IMHO, искусственно созданные (Альтерой) "грабли" и "костыли"...

    Цитата Сообщение от UA3MQJ Посмотреть сообщение
    Ах, у вас перекидная кнопка, вот этот момент я упустил.
    Дык, какая разница, перекидная кнопка или две разных?... Важно, что RS-триггер. В MAX7000S есть RS-, а в циклоне только R-... Банальнейшая вещь... Примитив! Ан нет, все через пи-пи-пи....

    Цитата Сообщение от UA3MQJ Посмотреть сообщение
    Со счетчиками вот есть варианты.
    http://www.fpga4fun.com/Debouncer.html
    Тут, похоже, как раз мое предложение с двумя d-триггерами, плюс счетчик.
    https://eewiki.net/pages/viewpage.action?pageId=4980758
    Прежде чем сюда постить, первым делом у дядюшки Яндекса спросил, и эти ссылки были у него первыми в "ответах"... И они все же не решают проблему, кнопки то разные (по "качеству" дребезга) бывают...
    Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

  8. #7
    HardWareMan
    Гость

    По умолчанию

    Цитата Сообщение от LeoN65816 Посмотреть сообщение
    Важно, что RS-триггер. В MAX7000S есть RS-, а в циклоне только R-... Банальнейшая вещь... Примитив! Ан нет, все через пи-пи-пи....
    Это банальная дань моде. MAX7000 и MAX3000 где использовали? Правильно, вперемежку с обычной логикой. Их степень интеграции относительно низка вот и можно запихать обычный RS. А Cyclone, тем более еще и новомодный IV, это уже синхронный дизайн, тут только обычные D триггеры и куча синхронных контролов в LABе. Так что да, дебонс (т.е. подавитель дребезга) делать либо внешним, либо синхронным, как это уже тут приводилось (в том числе и по ссылкам).

  9. #8

    Регистрация
    13.02.2016
    Адрес
    г. Королёв
    Сообщений
    493
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от UA3MQJ Посмотреть сообщение
    Потратится 3 ячейки на кнопку.
    "Переплатили"...
    Стандартный способ - 2 триггера.

    Цитата Сообщение от LeoN65816 Посмотреть сообщение
    я всеми конечностями за это.
    Неужели?
    А где синхронизация всех входов с глобал клоком?

    Любимая метастабильность.
    На хоботе есть подробно.
    Если в двух словах, то хотя бы здесь.

  10. #9
    HardWareMan
    Гость

    По умолчанию

    omercury, это называется "перевод в рабочий тактовый домен". Для исключения метастабильности все входящие сигналы модуля должны быть синхронизированы с тактовой частотой этого модуля. Впрочем, на хабре ответ более развернутый.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. ДВК (и всё, что с ними связано)
    от Grand в разделе ДВК, УКНЦ
    Ответов: 4575
    Последнее: 17.11.2025, 11:38
  2. PAL/GAL и все что с ними связано.
    от Mick в разделе Клоны на ПЛИС, МК и БМК
    Ответов: 489
    Последнее: 19.09.2025, 18:39
  3. SMUC на дискретах и ПЛИС
    от spensor в разделе Scorpion
    Ответов: 846
    Последнее: 02.05.2025, 08:36
  4. Ответов: 1215
    Последнее: 10.02.2025, 19:04
  5. Вопрос по ПЛИС
    от Zloy в разделе Несортированное железо
    Ответов: 23
    Последнее: 17.10.2015, 17:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •