На моей плате проект нормально заводится от сигнала sdram_clk_n, формируемого контроллером SDRAM.
это распространенная методика, которая должна была применена изначально или исправление "на быструю руку", которое у кого-то (с какими-то другими "личными" характеристиками микросхем) может опять не заработать?
Подход к формированию клока с возможностью регулировки фазы дает дополнительную степень свободы и в некоторых случаях позволяет убрать аппаратные огрехи или огрехи дизайна.
Существует ли какое-то четкое правило, когда надо двигать фазы?
Или все дело в том, что это отдельный чип удаленный от ПЛИС? Почему тогда у меня так стабильно работает?
Синхронный проект или несинхронный относится к реализации правильного функционирования логики проекта внутри ПЛИС, однако синхронный проект обеспечивает синфазность сигналов до выводов ПЛИС, и все это заканчивается когда решается задача взаимодействия ПЛИС с внешним миром.
Большинство внешних девайсов включая микросхему SDRAM требует, чтобы все управляющие сигналы, адреса, данные были выставлены на выводы ИС до прихода тактируемого сигнала.
Обеспечивается это в том числе и топологией платы, качеством изготовления платы, качеством примененных компонентов Все эти факторы в большей мере начинают влиять на высоких частотах внешних сигналов.Так что задача решается в комлексе.
70 MHz кратно 14 - может просто clk1 сдвинуть относительно clk0?
не надо, посмотрите про разные клоковые домены
marsohod.org/11-blog/192-buscdc
Внутри контроллера sdram_clk_n получается инверсией clk, что вроде как правильно для синхронного дизайна.
Это не совсем так. Cигнал sdram_clk_n асинхронен к остальным сигналам контроллера SDRAM.
Да и задержка относительно выводов ПЛИС на одном инверторе меньше чем суммарные задержки на остальных сигналах контроллера (хотя не факт, может получиться и больше)
Имхо это и есть "узкое место" контроллера