У меня есть общий вопрос о логических схемах с несколькими конечными автоматами. Подумайте о системе, имеющей несколько конечных автоматов с одним тактовым генератором и триггерами с нарастающим фронтом. Эти машины совместно используют некоторые из своих входных и выходных данных. Таким образом, выходы одних машин могут быть входами других машин.
Мой вопрос заключается в том, что, поскольку все машины используют одни и те же часы и передний фронт, не будет ли путаницы в передних фронтах, где также изменяются входные данные?
Пояснение на рисунках: На этом рисунке ниже показана удобная диаграмма данных и часов (нижний сигнал - часы, верхний сигнал - входные данные). Входной сигнал не меняется на нарастающем фронте часов.
Но здесь входные данные имеют спадающий фронт на нарастающем фронте тактового сигнала. Мне это кажется проблематичным:
И дело в том, что в системе с несколькими конечными автоматами и одними часами каждый переход бита происходит в одно и то же время во всем проекте. Так что для меня, если я не придумаю метод, границы данных и часов всегда перекрываются. Я хочу знать, есть ли способы избежать этого (например, сдвиг фазы часов для каждой машины и т. д.). А может, это вообще не проблема, и я что-то здесь упускаю? Если это так, я также хотел бы узнать, почему я думаю неправильно.
На практике, когда одиночные часы правильно распределены по конструкции, можно считать, что выходные сигналы поступают после часов, которые их создали. Тактовый генератор должен вызвать фактический переход вывода флопа, а затем сигнал должен пройти через несколько уровней логики, прежде чем он достигнет следующего флопа. Эти задержки намного больше, чем небольшие ошибки в синхронизации часов.
Для моделирования на основе циклов мы предполагаем, что перепад тактовых импульсов возникает одновременно во всем проекте. В проектировании ASIC (включая людей, разрабатывающих ПЛИС, которые я использую) много работы уходит на то, чтобы приблизиться к этому идеалу.
Глядя на симуляционные формы сигналов, имейте в виду, что все сигналы, которые выглядят так, как будто они возникают одновременно с изменением часов, на самом деле меняются (по крайней мере) немного позже. По крайней мере, они должны. На самом деле у Verilog есть проблемы с условиями гонки , которые могут вызвать проблемы при моделировании. И у меня были проблемы с симуляцией в VHDL при стробировании часов, извлечении одних часов из других или назначении часов в/из массива или записи.
При синтезе проекта в FPGA или ASIC фронт тактового сигнала не возникает одновременно во всем проекте. Если изменение провода, управляющего триггером, изменяется слишком рано после часов, мы называем это «нарушением времени удержания». Эти нарушения будут обнаружены при статическом анализе времени, который должен быть частью вашего рабочего процесса размещения и трассировки. По моему опыту работы с FPGA, нарушения времени удержания очень редки. Те немногие, которые я видел, произошли из-за ошибок в определении ограничений часов.
Обычно проблема на другом конце. В вашей симуляции кажется, что все триггеры, управляемые вашими часами, изменяются мгновенно, и их результаты мгновенно доступны любой логике, которая в них нуждается. В реальном оборудовании существует некоторая задержка между фронтом тактового сигнала и выходным сигналом триггера (время «тактовый сигнал — Q»), а также существует некоторая задержка между выходным сигналом триггера и следующим входным сигналом триггера из-за задержки в маршрутизации и логических элементах. Когда эти задержки становятся слишком большими, вы увидите в своем отчете о времени «нарушение времени установки». Исправление нарушений настройки и удержания — это процесс, который называется «закрытие по времени».
НержавеющаяСтальКрыса