Цитата(v1vas @ Mar 30 2015, 21:58)

Virtex 6
Есть два частотных домена, 50 MHz и 200 MHz
Клоки идут с Xilinx'го ClockWizard, утверждается, что они на 100% совпадают по фазе. Я так понимаю это не гарантированная фигня и из-за роутинга мы в некоторых местах плисины можем получить небольшое различие по времени прихода фронта волны ?
Соответственно логика моих рассуждений, раз во фронт медленного клока попадают два фронта быстрого, то во втором фронте быстрого мы можем сэмплить данные с медленного.
Сиё творчество в симуляторе работает нормально.
Насколько вообще правилен такой подход ?
Интуитивно он мне не нравится, чувствую, что тут надо как-то по другому и все законстрейнить, но пока не могу понять как.
Ткните меня пожалуйста, как это нормально сделать ?
В вашем коде неправильно то, что main_clk_cnt не засинхронизирован с медленным клоком, от сброса к сбросу устройство может работать по-разному. Следует перевести медленный клок в логику(например, с помощью двух FF и xor), защёлкнуть его на FF быстрым клоком, выделить фронт, и привязать к этому фронту фазу чтения data_mainclk.
Достаточно, чтобы были правильно оконстрейнены клоки, и не была запрещена проверка путей между data_clock и clock, другие констрейны не нужны.
То, что советует
Maverick, тоже в принципе правильно, но для случая синхронных клоков избыточно.
Это я предполагаю, что клоки выходят с одного PLL. Расхождение по фазе между ними тогда невелико, и его допустимость будет проверена при STA.