Цитата(kaktus @ Jun 7 2011, 20:03)

Код
BUFGMUX_inst : BUFGMUX
port map (
O => CLK155_int, -- Clock MUX output
I0 => CLK155W_ibuf, -- Clock0 input
I1 => CLK155P_ibuf, -- Clock1 input
S => Protect -- Clock select input
);
Protect <= '1' when ((ALARM_SW_P & ALARM_SW_W) = "01") else '0'; -- '0' is Failure
Нарушая все правила хорошего тона подключаю чипскоп ко всем сигналам, включая тактовые.
При Protect = 0 все работает. При Protect = 1 на CLK155P_ibuf есть частота, на CLK155_int висит 1.
Проблема возникла видимо после одной из перекомпиляций проекта, т.к. раньше работало.
В UCF обоим сигналам прописан CLOCK_DEDICATED_ROUTE = false, т.к. оба сигнала прходят диф. парами на
тактовые входы, расположенные рядом и в железе действительно нет места обоим.
ISE 11.5
Spartan - 3, XC3S2000-4FG456
Для успешного переключения обе частоты должны пристствовать. Иначе антиглитчевая логика этой переключалки (BUFGMUX) просто не срабатывает. В последних версиях ISE в примитве BUFGMUX появился GENERIC, позволяющий обойти это ограничение. Не помню точно, как называется. Что-то типа ASYNC = TRUE. Не уверен что это сработает для Спартана3, уж больно древнее семейство, но для Спартана3А это точно работает.
З Ы Не поленился - полазил по хелпам, атрибут называется CLK_SEL_TYPE. Принимает значения SYNC(default) и ASYNC. В версии 11 ISE точно поддерживается. В версии 12.3 почему-то уже нет упоминания о нём, только для 6 спартана. В ообщем, зайдите на сайт Xilinx, сделайте поиск по слову CLK_SEL_TYPE - и будет вам много новой и неожиданной информации.
З З Ы Симуляторы, кстати, в курсе этой чудесной особенности элемента BUFGMUX.