Как стать автором
Обновить

Комментарии 20

Большое спасибо за статью! Хотелось бы больше узнать о подводных камнях в реализации более-менее сложных стейт машин.

Еще такой вопрос: есть некая шина данных и её клок. Насколько я понимаю, клокать данные нужно не синхронно с их изменением, а в середине data eye. Этого можно добиться несколькими вариантами. Например на нечетных тактах выкладывать данные на шину, а на четных дергать клок. Вроде как еще есть вариант с DCM, а именно брать два синхросигнала, смещенных на 90° и по запаздывающему синхронизировать данные.

Хотел бы услышать ваши коментарии по этому поводу. Не совсем понимаю, как надо делать. В чем грабли и т. д.

Спасибо.
Все сильно зависит от временных параметров вашего устройства. Простейший случай (для малых скоростей) — клокать данные не по фронту, а по спаду того же самого клока. Потом перещелкиватьт фронтом. Более сложный случай — смотреть задержки сигналов и двигать фазу клока в оптимальное место.
в синхронных схемах, как правило все всегда делается по фронту.
Если на шине выставляются данные по фронту, то и принимаются по фронту.
Ну насколько я понимаю DDR сейчас вполне себе применяется. И не только для интерфейсов памяти.
Не обязательно. И интерфейс с внешним миром — как раз та область где флюктуации наблюдаются наиболее часто ;) Ну и про ддр уже было сказано.
Да, вариант с синхронизацией по спаду я тоже пробовал, но была какая-то проблема, про которую я уже забыл. То ли не хотело синтезировать, то ли еще что-то.

Игры с фазой сигнала это уже шаманство какое-то. Хоть DCM&PLL позволяют это делать, но я всегда думал что этот функционал используется скорее для подгонки фронтов на входе в устройство, и для устранения clock skew.

Ведь если схема изменится, либо PAR по другому разложит, то придется опять все пересматривать.
представьте себе шину, значение на которой устанавливается по фронту.
Вы хотите надежно зафиксировать это значение в регистре и выбираете момент «посередине периода» (видимо для надежности), например по спаду. Теперь ваш регистр выдает свой сигнал дальше, следующей логике, но он сдвинут по фазе. Следующий регистр, который будет фиксировать уже это значение должен так же принять его по середине? То есть вы думаете для следующего в цепочке регистре нужно опять сдвигать фронт, теперь уже на четверть периода основной частоты?

Нет и нет, только по фронту. Все регистры в простой синхронной схеме работают по фронтам.
Если вы посмотрите спецификацию какого-нибудь SPI-интерфейса (у внешней микросхемы, будь то ЦАП, АЦП или какая-нибудь экзотика), то в 90% случаев вы увидите, что «данные выставляются по фронту, принимаются по спаду» или наоборот. Это то решение, которое малыми усилиями позволяет избежать головной боли.
Нет, конечно. Я так не думал. Когда все происходит в рамках ПЛИС, проблем нет. Просто есть устройства, где явно нарисована временна́я диаграмма с запаздыванием клока относительно установки данных. Почему и спросил, как такое обычно разруливается. Если можно было бы просто выставить значения на шину и тут же дернуть выходной клок, так вообще проблем не было бы.
Да, вот вы сказали про скорости. А что делать в случае высоких требований к скорости? Если чередование в тактах уже недопустимо ввиду снижения пропускной способности в 2 раза.
Не совсем понимаю, что вы имеете ввиду под чередованием в тактах. Вы дублируете пути в тракте данных и создаете multicycle path? Не могли бы нарисовать картинку для пояснения вашей проблемы.
Нет, просто на первом такте выставляются данные, на втором дергается клок, затем опять данные (клок опускается), и т. д. То есть получается, что частота клока шины в 2 раза меньше.
Мне понравилась статья: красивые картинки, описание код-синтез и т.п. Но, честно говоря, таких статей тут не мало. Почему-то все останавливаются на описании счетчика и морганием светодиодом, что по сути одно и то же. Видно же, что Вы по уровню ушли вперед от этого. Конечно, никто не заставляет Вас описывать свои большие проекты. Но смысл FPGA, что они инструмент и у него масса применений. Существует масса направлений развития этой темы. Если вы занимаетесь ЦОС, то расскажите как делаются FIR, IIR, CIC фильтры, как делать децимацию и интерполяцию; если вы занимаетесь обработкой видео, то расскажите о реализации различных алгоритмов в железе; если вы занимаетесь интерфейсами, то расскажите о FSM Мура и Мили, о конвееризации; если ethernet, то формирование udp/tcp пакеты и реализации MAC уровня. Это было бы гораздо интереснее читать, хотя бы мне. Я понимаю, что некоторые темы сложные для объяснения, но всегда можно найти какой-то промежуточный уровень, когда еще писать не много, но и понимать это нужно для дальнейшего. Не страшно, что многие люди не поймут, это узконаправленная тема.
Извините за такое излияние, еще раз скажу, что статья мне понравилась. Бы было полезно добавить, как отличаются "<=" и "=" в testbanch`ах. И про wire, через которые удобно описывать комбинаторику как раз через "=", а reg через "<=".
Спасибо за комментарий.
Изначально я думал написать небольшое введение для своих студентов, но в процессе понял что взялся за слишком широкую тему. И без объяснения множества подводных камней ничего не выйдет. Поэтому буду как раньше плясать у доски и исправлять глупые баги =)

Хорошо, попробуем копнуть глубже. Пока ехал в метро понял что у меня есть материал по нескольким темам. Буду искать время чтобы оформить и выложить.
Это было бы просто шикарно. Очень нехватает именно подобных развернутых вещей. А про триггеры, типы регистров и стейт машины и в книгах пишут.
Вы правы, но есть проблема: Чтобы рассказать «как делаются FIR, IIR, CIC фильтры, как делать децимацию и интерполяцию» надо сперва объяснить, что такое «FIR, IIR… и т.д.» А это в первую очередь «матан», объянять который здесь затруднительно и весьма трудозатратно…
откровенно говоря, не так нужен матан в описании фильтров. Весь ЦОС это умножение с накоплением. Если посмотрите мои созданные темы, то найдете описание ких фильтра без формул вообще. Смысл ких фильтра — перемножить пары чисел и их сложить.
Без матана он никому не нужен, вот в чем беда — не будет понятно для чего всю эту канитель разводить.
вот здесь есть описание нескольких проектов для ПЛИС: http://marsohod.org/index.php/projects

там и USB, и видеоигра, простой процессор и т.д.
За их проектами я слежу, очень многое для себя подчеркнул. Могут, делают!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории