Dm.uk wrote:ok, ok,
думаю что "головоломки про клоки" можно разделить на две группы.
1-я, простая.
Внутри IC (любого), частоты 1 и 2 фиксиованы, ответы +/- озвучены. В зависимости от соотношения частот выбирается то или иное решение.
Варианты неплохо расписаны вот тут :
http://www.cadence.com/whitepapers/cdc_wp.pdf
KP580BE51, не торопитесь, прочтите "от корки до корки"
Прочитал. Кое что применял, кое что - нет.
что бы не быть "абстрактным", дубовый пример : у Вас есть FPGA, вы делаете конвертор (с буферизацией и прочими прибамбасами) из одного интерфейса в другой (что бы отойти от 8b/10b, например, PCI -> I2C или что-то в етом роде).
I2C - 400кгц максимум. PCI - 33мгц минимум. Тоесть I2C вообще проблем нету. Можно как угодно делать.
2-я, "динамическая", сформулирована flip-flopом
Или описана на fig11. ИМХО сигнал с 200мгц нужно стараться обрабатывать до кокого-то логического конца оставаясь в домене 200мгц, а 166 - в домене 166 мгц. И синхронизировать их уже на более высоком уровне "пришел пакет из 166, послали пакет в 200. Все ИМХО.
PS мне надо пару дней подумать, не в ушерб проекту , над тем что сказал kosmo. Согласен про соотношения частот (см. link), но почему дубовый handshake "нестабилен", хммм ...
Распределенный FSM с возможными невалидными состояниями - ненадежная конструкция.
Это? Можно "попасть" на фиг3. И если системма с клоком А будет ждать ответа от сигнала Б, а системма Б. будет ждать запроса, котороый она пропустила по причине небольшого рассогласования клоков (а то и просто, помехи) то все это будет висеть до ресета. Проблемма тайм-аутами решаема. И вообще, ее лучше на уровне софта решать.
У меня ощущение блуждания в 3 соснах.