Я не Verilogger, но похоже, что вы просите код вызывать края двух разных сигналов. Это не в моем опыте синтеза, но синтезатор, возможно, попытался сделать что-то и предупредил вас (среди множества других предупреждений) о том, что он сделал что-то другое, чем вы действительно имели в виду.
EDIT: Следующий не применяется к плате упоминается как это дребезг оборудования на борту (благодаря NathanFarrington для указывая, что из), но я оставляю его здесь, в случае это полезным для других читателей:
Даже если синтезатор удался, край запуска на входе коммутатора является ужасной идеей: the switch will bounce several times когда вы нажимаете, и FPGA легко достаточно быстро, чтобы увидеть все эти края.
Что вам нужно - это процесс, синхронизированный с хорошим источником часов (без сомнения, кристалл на борту), который контролирует оба ваших сигнала переключения на каждом событии часов.
Держите счетчик для каждого сигнала, увеличивайте его каждый раз, когда сигнал 1
, уменьшайте его каждый раз, когда сигнал 0
. Закрепите эти счетчики на 0
и некоторое максимальное время, которое позволяет достаточно времени для переключения коммутатора (вероятно, будет достаточно нескольких миллисекунд).
Как только счетчик достиг любого конца «путешествия», только , то вы предпринимаете какое-либо действие (например, смещение LEDGValue
). Не забудьте дождаться, когда коммутатор будет выпущен после этого (ожидая, когда счетчик перейдет к другому концу).
Код был очень полезным; он исправил проблему.Спасибо. – Andrew
То, что вы пытались сделать, называется асинхронной логикой, потому что нет часов. Оказывается, FPGA спроектированы с предположением, что вся логика будет синхронной и будет использовать часы. На FPGA можно реализовать асинхронную логику, но сейчас это тяжелая битва и лучше всего для экспертов. –