|
Синхронизер, как сделать? |
|
|
|
Feb 11 2011, 23:21
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Добрый день. Мельком как то упоминал, но решил отдельную тему создать, чтоб была ясность.Такая задача: есть источник данных (АЦП, 16 бит), есть автомат, который их обрабатывает. Частоты АЦП и автомата отличаются на 0,06 Гц (примерно) при частоте 5 МГц. Надо как то данные синхронизировать. Что-то типа фифо на 1 слово, без сигналов "пусто" и "полно". В теме "фифо на 1 слово" посоветовали взять готовое фифо альтеры, но там на 4 слова минимум (в визарде). Может как то просто можно его изобразить, синхронизер этот. Логика такая: если новый отсчет не пришел, то автоматом читается старый. Если новый отсчет пришел, а старый не прочитан - старый пропадает. Т.е. если отсчет пропал или два раза прочитался (все равно такая ситуация случится) - не страшно, лишь бы ошибок в самом отсчете не было, типа половина бит - со старого отсчета, половина - с нового. Пока не представляю даже как это синхронизировать, хоть бы образчик какой...
Сообщение отредактировал alexPec - Feb 11 2011, 23:24
|
|
|
|
|
 |
Ответов
|
Feb 12 2011, 09:39
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Спасибо ВСЕМ за ответы Цитата(des00 @ Feb 12 2011, 10:28)  при таком соотношении тактовых и символьных частот, рекомендую сделать одинаковую частоту работы АЦП и вашего блока, или поставить фифо на 16 слов А нельзя одинаковую. Я бы рад. Я тут тему поднимал, нельзя потому что ацп тактируется DDS-ом, а от этого тактового нельзя синхронизировать pll. У меня 2 ацп на 3 с лишним и на 5 МГц. Максимально близко подстроить частоты можно с точностью установки dds-а, около 0,06 гц (ой блин, щас дошло, можно ведь и точнее, если умножение в ддсе сделать меньше, но не суть, все равно не ровно). Что соотношение частот автомата (в плисе) и АЦП именно такое уверенность есть, т.к. и ДДС и плис тактируются одним стабильным генератором на 16 мгц. Цитата Я бы сделал как в некоторых синхронных АЦП, перекодировал в код Грея, потом поставил пару-тройку регистров с минимальной длиной соединения и перекодировал обратно. А как код грея тут помочь может? Если будут ошибки - так они и в коде грея будут. Цитата Судя по всему, нужен простой регистр на N разрядов. Записывать в него будете по сигналам синхронизации АЦП, а читать - когда захотите Ну да, так и хочу, но это ведь в идеале. В реальности, когда (при таком соотношении частот так все равно будет, и не раз) чтение почти совпадает с записью (ну с разницей в сотни пикосекунд), какие-то биты данных успеют поменяться на новые, а какие-то нет, потому как одинаковое время распространения сигнала для всех 16 бит сделать не реально (или я что-то недопонимаю?), да и у регистров есть setup, hold параметры, измеряемые наносекундами. Если я правильно понимаю, когда не выдерживаем эти параметры, переключение регистра не гарантируется. В итоге при чтении получим половину бит старого отсчета, половину - нового. А этого и боюсь. Цитата Не мучайтесь, ставьте FIFO на 4 слова. Не нужны full и empty - игнорируйте. А я вот и хочу у спецов спросить, а поможет ли? При таком раскладе похоже уже все равно - пусть 4, пусть 16 слов, лишь бы работало надежно. Как там в этом двухклоковом фифо синхронизер сделан? В мемори-блоке что-ли? Где-то можно почитать про это? Если бы знал как он там сделан, было бы понимание, будет оно так работать или нет. Потом искать, откуда эти неправильные отсчеты взялись, гораздо сложнее. Цитата при его тактовых частотах(тактовая == символьной) 4 слова мало, там только цепь ресинхронизации указателей займет 3 такта. 16 в самый раз. И кстати до сих пор грубое, жесткое непонимание, как длина фифы влияет на вероятность отсутствия ошибок? Если уж встали фронты чтения и записи в нехорошее положение, то длина фифы по моему пониманию не поможет. Че-то вот туплю здесь. И еще: правильно ли я понимаю: частота записи в фифу должна быть чуть меньше чтения, чтоб фифа не переполнилась? Хотя наверно фиолетово - полная ли пустая она будет... Может частоты наоборот побольше разнести? Хотя лучше не надо, тогда отсчеты будут чаще пропадать. Цитата Если это не важно, и задача только избавиться от неправильно прочитанного кода из-за перекосов в момент метастабильного состояния, не нужно читать в это время. Создать сигнал, гарантирующий, что код с АЦП установился (всё, кроме времени в окрестности тактов АЦП), и читать, когда этот сигнал разрешает. Так нельзя не читать. Автомат-то молотить должен, там фурье, все завязано на расстояние между частотами, на сигнал с передатчика по эфиру и т.д., нельзя тормозить. Именно прочитать надо, но только строго старый или строго новый отсчет, тогда в результате фурье будут небольшие ошибки (на модели это проверено). А если читаем шум (смесь старого и нового отсчета) - в результате фурье ошибки в несколько раз больше.
Сообщение отредактировал alexPec - Feb 12 2011, 09:53
|
|
|
|
|
Feb 12 2011, 09:53
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(alexPec @ Feb 12 2011, 03:39)  Я тут тему поднимал, нельзя потому что ацп тактируется DDS-ом, а от этого тактового нельзя синхронизировать pll. а если без PLL ? Цитата А я вот и хочу у спецов спросить, а поможет ли? При таком раскладе похоже уже все равно - пусть 4, пусть 16 слов, лишь бы работало надежно. Как там в этом двухклоковом фифо синхронизер сделан? В мемори-блоке что-ли? Где-то можно почитать про это? Если бы знал как он там сделан, было бы понимание, будет оно так работать или нет. Потом искать, откуда эти неправильные отсчеты взялись, гораздо сложнее. почитайте как фифо делаются, правильно сконструированное асинхронное фифо не дернет сигналом empty пока слово не будет лежать в памяти, а поставит этот флаг, когда вы точно прочитаете последнее слово %) ну и ваш автомат этот флаг обязан будет обрабатывать и работать на более высокой частоте. Цитата И кстати до сих пор грубое, жесткое непонимание, как длина фифы влияет на вероятность отсутствия ошибок? длинна фифо здесь определяется не вероятностью, а банальной логикой здравого смысла, с учетом длинны синхронизирующих цепей фифо и условиями вашей задачи %)
--------------------
|
|
|
|
|
Feb 12 2011, 10:17
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата(des00 @ Feb 12 2011, 12:53)  а если без PLL ?  Нельзя, автомат, как Вы написали, на более высокой частоте работает, умножать надо Цитата почитайте как фифо делаются, правильно сконструированное асинхронное фифо не дернет сигналом empty пока слово не будет лежать в памяти, а поставит этот флаг, когда вы точно прочитаете последнее слово %) ну и ваш автомат этот флаг обязан будет обрабатывать и работать на более высокой частоте. А не знаете ли Вы, алтеровская фифа правильно сконструирована? По возможности нужно все-таки время экономить. Вот сказал бы кто (со знанием дела кнечно  ): поставь алтеровскую фифу и не парься, зуб даю, работает! И я бы поверил (пока проблемы не появятся).
|
|
|
|
|
Feb 12 2011, 10:35
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(alexPec @ Feb 12 2011, 04:17)  Нельзя, автомат, как Вы написали, на более высокой частоте работает, умножать надо да на частоте на 0.06 Гц больше  Вам самому то не смешно ? Какая разница где делать асинхронный переход? сразу после АЦП, или после предварительной обработки ? Придумываете себе проблемы на ровном месте. Цитата А не знаете ли Вы, алтеровская фифа правильно сконструирована? если бы не знал, не писал бы про 3 такта синхронизации. Кстати конструкция этого фифо вытаскивается на раз, два, три %) судя вот по этому Цитата Так нельзя не читать. Автомат-то молотить должен, там фурье, все завязано на расстояние между частотами, на сигнал с передатчика по эфиру и т.д., нельзя тормозить. на лицо проблемы с построением системы, что мешает взять double buffer ram (сорцы кста есть на этом форуме) размером с ваше фурье, накопить и по бырому обработать.
--------------------
|
|
|
|
Сообщений в этой теме
alexPec Синхронизер Feb 11 2011, 23:21 Shtirlits Я бы сделал как в некоторых синхронных АЦП, переко... Feb 12 2011, 00:54 Krys Цитата(Shtirlits @ Feb 12 2011, 06:54) Я ... Mar 10 2011, 11:33 Александр77 Цитата(alexPec @ Feb 12 2011, 02:21) Надо... Feb 12 2011, 06:20     alexPec Цитатада на частоте на 0.06 Гц больше Вам само... Feb 12 2011, 10:56      _Anatoliy Цитата(alexPec @ Feb 12 2011, 12:56)
А ч... Feb 12 2011, 11:45       alexPec Цитата(_Anatoliy @ Feb 12 2011, 14:45) А ... Feb 12 2011, 19:42  ViKo Цитата(alexPec @ Feb 12 2011, 11:39) Так ... Feb 12 2011, 10:06  ViKo Цитата(alexPec @ Feb 12 2011, 11:39) Так ... Feb 12 2011, 10:26 dvladim Цитата(alexPec @ Feb 12 2011, 02:21) Т.е.... Feb 12 2011, 07:40 des00 Цитата(dvladim @ Feb 12 2011, 01:40) Не м... Feb 12 2011, 08:16 ViKo Вот не понимаю я подобных задач, уже не впервые по... Feb 12 2011, 09:20 Shtirlits Если дальше Фурье, то делать как я насоветовал нел... Feb 12 2011, 11:17 slawikg Поставте 2 фифо, после заполнения одного, начинае... Feb 13 2011, 12:41
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|