не совсем так. Я наблюдал типичные проблемы асинхронности при тактировании в двух always блоках от одного клока, но от разных фронтов. Это происходило для клока 100 МГц. Я не знаю точной причины почему это происходит, но подозреваю из-за того, что любой клок имеет джиттер и время между posedge и negedge плавает. Поэтому собственно говоря клок нужно на PLL генерировать, чтобы как можно точнее выдерживать 50% duty cycle, иначе из-за плавающего фронта может не хватить времени для переключения каких-то частей схемы. А за счет задержек клока от одной части кристалла до другой, вполне можно получить плавающие race conditions, несмотря на то, что оба always тактируются от одного клока, но от разных фронтов.
Если клок генерировать не на PLL, а каким-то счетчиком, как это делалось в наших ZX Spectrum клонах, то у такого клока будет заметный джиттер и это очень быстро приводит к проблемам, особенно если от клока тактируется большая схема занимающая почти весь кристалл FPGA.
Проявляются такие проблемы с клоком неприятно - всё может прекрасно работать до поры до времени, но в какой-то момент при внесении малейшего изменения (вплоть до изменения значения кода в табличке для FSM) приводящего к переразводке схемы, схема начинает сбоить.
И кстати, я большинство этих проблем наблюдал именно в ситуации использования двух always блоков от одного клока но по разным фронтам.
В FPGA есть еще проблема с тем, что если клок не сгенерирован на PLL блоке, то такой клок разводится как обычные сигналы, а для них в FPGA не предусмотрены меры по минимизации задержек. Clock сигналы имеют имеют отдельную шину, которая позволяет доставить клок в любую часть кристалла с минимальной задержкой или даже задать нужную задержку. Для минимизации задержек PLL блоки расположены с 4 сторон кристалла, что позволяет сократить путь clock сигнала от PLL к любой точке кристалла. Обычный сигнал превратить в клок невозможно, по крайней мере на Altera/Intel.
Использовать обычный сигнал в качестве клока технически можно, но это выливается в массу проблем - невозможно использовтаь такой клок для тактирования блоков предназначенных для клока, например таким клоком невозможно тактировать PLL блок. Это связано с тем, что клоки и обычные сигналы разводятся на разных шинах и у них нет прямой связи между собой. Ну и масса проблем с нестабильностью схемы будет вылазить.





Ответить с цитированием