Цитата(Alexandr @ May 14 2005, 14:59)
Не поверите - дело оказалось вот в чем. В проекте есть несколько процессов, все синхронные, тактируются одним CLK. Однако часть процессов для удобства работают по переднему фронту CLK, часть по заднему. Сделал все процессы по переднему и все заработало

. Видимо это какое-то ограничение ISE или ModelSim, потому как более ничего не менял. Может кто объяснит в чем дело?
На самом деле, при таком построении проекта никакого криминала нет, и ModelSim здесь не виноват (временную модель то генерит ISE). Однако не ясен один момент: устанавливаете ли Вы временные ограничения при трансляции проекта в кристалл или нет. Поскольку Ваш проет работает только одной тактовой частоты, то выполнение этих ограничений (с вероятностью 99%) автоматически даст положительный результат. При трансляции в кристалл анализируется как поведение тактовой частоты, так и поведение логики итриггеров, включая анализ hold/setup. Ниже прилагаю фрагмент ucf-файла для Fт=10МГц.
# --------------------------
# FROM:TO TIME-SPECs
# --------------------------
# FROM:TO стиль временных ограничений может быть использован для определения путей между
# группами. ПРИМЕЧАНИЕ: Ключевые слова: RAMS, FFS, PADS, and LATCHES определены предварительно
# временные группы (TIMEGRP) используются, чтобы определить все элементы каждого типа в проекте.
TIMEGRP RFFS = RISING FFS ("*"); // создает группу триггеров, работающих по фронту RFFS
TIMEGRP FFFS = FALLING FFS ("*"); // создает группу триггеров, работающих по срезу FFFS
TIMESPEC TSF2F = FROM : FFS : TO : FFS : 50 ns; // Триггеры, работающие по одинаковому перепаду
TIMESPEC TSR2F = FROM : RFFS : TO : FFFS : 25 ns; // фронт к срезу
TIMESPEC TSF2R = FROM : FFFS : TO : RFFS : 25 ns; // срез к фронту