Для начала:
У вас нет сброса. Как и многие дизайнеры, вы полагаетесь на включение FPGA, чтобы все регистры были на нуле. Это заставляет меня сильно подозревать, что вы не смоделировали схему. В симуляции все ваши счетчики были бы Х все время.
Во-вторых:
Глядя на ваш код, я замечаю, что ваш delayCounter
всегда увеличивается. Это никогда не очищается. Это может занять некоторое время, поскольку его длина составляет 33 бита, но в конечном итоге он перевернется, а затем counterSig2
на короткое время остановится.
Если вы хотите иметь начальную задержку, убедитесь, что ваш счетчик задержки останавливается после истечения времени задержки.
Обратите внимание, что без сброса ваш счетчик задержки будет работать только один раз при включении питания.
В-третьих:
Если задержка всегда меньше половины такта, вы можете опустить counterSig2
и delayCounter
. Просто используйте что-то вроде:
if (counterSig1==(FREQUENCY - (FREQUENCY/4))
LED2 <= LED1;
Последнее:
Пожалуйста, используйте ваши имена и формулы тщательно. То, что вы называете ЧАСТОТОЙ, используется для счетчика и, следовательно, представляет собой задержку, период . Вы также неверно рассчитываете. если тактовая частота равна CLOCK_FREQUENCY
, а выходная частота равна signalFrequency
, то задержка должна составлять (CLOCK_FREQUENCY/signalFrequency)/2
.