Я новичок в FPGA. Я делал несколько простых тестов, и я нашел проблему, которую я не совсем понимаю.VHDL целочисленный диапазон включительно? Разница в FPGA против моделирования
У меня есть источник тактовой частоты 50 МГц.
У меня сигнал определяется как:
SIGNAL ledCounter : integer range 0 to 25000000 := 0;
Когда ledCounter достигает 25000000 Я переключение светодиода и сброс счетчика. Это отлично работает непосредственно на FPGA.
IF (rising_edge(CLK)) THEN
ledCounter <= ledCounter + 1;
IF (ledCounter = 25000000) THEN
ledCounter <= 0;
toggle <= not toggle;
LED(0) <= toggle;
END IF;
END IF;
При работе внутри ModelSim я получаю ошибку, когда счетчик достигает 25000000. Для того, чтобы запустить в симуляторе я должен определить диапазон, как:
SIGNAL ledCounter : integer range 0 to 25000001 := 0;
Кто-нибудь есть какие-либо понять, почему это происходит? Код работает на FPGA колодец, но не будет работать в симуляторе без указанной выше модификации.
EDIT: Ошибка модели не описана: не может продолжаться из-за фатальной ошибки. Последовательность вызовов HDL. Остановлен на C: /Users/robert/Documents/fpga/testsim/test.vhd 20 Технологическая линия__17
Возможно, вы пытаетесь увеличить счетчик за пределами 25000000 в моделировании? Это, вероятно, приведет к ошибке за пределами границ в симуляции, но может привести к разному поведению (например, обертыванию) в аппаратном обеспечении. – Josh
Если вы разместите точную ошибку, которую вы получите от ModelSim, это поможет людям более эффективно ответить на ваш вопрос. (Скорее всего, вы каким-то образом увеличиваете счетчик вне пределов, но это просто предположение, основанное на личном опыте, не видя сообщение об ошибке.) – wjl
Я обновил код, чтобы включить приращение. Это очень простая программа. Я не думаю, что я увеличиваю предел. Кроме того, на FPGA светодиод успешно переключается, когда ledCounter = 25000000, поэтому я уверен, что нет никаких обворовов или чего-либо еще. @Josh – RobC