Расскажите в теме программистов про «бэйсик для начинающих». Только тут еще хуже — бэйсик поддерживается микрософтом до сих пор, а AHDL не рекомендуется альтерой для новых дизайнов (уже лет 10 как). А больше и вовсе никем не поддерживается.
Работа триггера Шмидта асинхронна к вашему внутреннему тактовому сигналу и потому совершенно не спасает от метастабильности. Момент переключения входного сигнала может попасть непосредственно на фронт тактового сигнала, что приведет к печальным последствиям — значения со входов используются непосредственно в управляющей логике из-за чего проблемам будет подвержен весь проект.
Для учебного проекта, который должен отработать один раз, вероятность наступления такого события невилика (но все равно можно облажаться на зачете), для промышленного — недопустимо.
Для начала можно почитать например
Откуда асинхронность, если значение с триггера принимается в расчёт только по приходу фронта сигнала синхронизации? Насколько я понимаю, фронт — моментное состояние, и одновременно с ним существует одно конкретное значение сигнала RESET. А так как кнопку нажимает человек, при частоте 50MHz (её при желании можно поднять до 60) хотя бы на один фронт CLK с большой вероятностью попадёт «чистое» значение с триггера, а не его фронт/спад.
Почитайте по ссылке выше, чтобы ознакомится с понятием «метастабильность триггера». Достаточно одного неудачного попадания, чтобы вывести ваш проект из строя на несколько минут-секунд, а то и вплоть до выключения питания.
Ну, мгновенных событий не бывает, и изменение сигнала на выходе триггера может совпасть с изменением сигнала clock, что и повлечёт за собой все радости мультивибрирования.
Действительно, что-то я поторопился с выводами.
Вариант решения: благодаря долгому (относительно большой частоты) нажатию кнопки сравнивать предыдущее и текущее значения триггера, и при их совпадении считать значение установившимся со всеми вытекающими. Контролировать срабатывание легко по изменению индикаторов LED.
Да я в курсе. Но, в этой же как раз (отличной, надо сказать) статье сказано, что фига с два Вы поборете метастабильность совсем, можно лишь уменьшать её вероятность. В данной задаче… Ну… Всё сильно зависит, конечно, от свойств данного конкретного триггера…
Но вообще да, убедили… Всяко может быть и надо предохраняться.
Несколько вопросов-замечаний.
1.Список чувствительности для дешифратора покажите пожалуйста.
2. Список чувствительноести в процессе «модели поведения интерпретатора» Process (clk,RESET) неверный. RESET там абсолютно лишний потому что выполняется синхронно под изменением сигнала clk.
Ага. код для дешифратора из приложенных файлов строго говоря тоже не совсем хорош. Выбранный вариант реализации без процесса породит адову конструкцию логических функций. Лучше бы с процессом — Quartus упаковал бы это более компактно, учитывая доступные аппаратные особенности Циклона.
Ну и чисто побрюзжать. Плату вы не разводили. Все что вы сделали это назначили пины проекта на ножки микросхемы. В design flow Альтеры этот этап так и называется — «назначение пинов» (Pin assignement).
насчет последнего — было бы интересно увидеть пояснения, как правильно переносить проект с девборды на свою борду, или хотя бы вот на такую. я думаю там есть достаточно аспектов для освещения.
Совершенно неважно, описывать конструкцию с явно заданным процессом или без — логика будет одна и та же. Если писать синхронный процесс, то у квартуса появится шанс упаковать логику в память, но для столь малого объема функции это неэффективно.
VHDL для начинающих. Brainfuck