|
Что это за интерфейс?, или на что он похож.... |
|
|
|
Jan 29 2009, 19:39
|

Частый гость
 
Группа: Свой
Сообщений: 98
Регистрация: 21-02-08
Из: г. Москва
Пользователь №: 35 268

|
Всем доброго времени суток. Подскажите кто знает.. Необходимо реализовать некий (неизвестный мне) интерфейс передачи данных, а выглядит он следующим образом: С внешнего устройства поступают: - входная последовательность (кодируемая фронтом, т.е. лог 1 = один перепад, лог 0 = нет перепада) - опорная частота (в 100 и более раз больше частоты переключения последовательности) причем, в последовательности подряд может идти только от 1 до 4-х логических нулей На выходе необходимо получить эту же последовательность, но сопровождаемую собственными синхроимпульсами (т.е. частотой переключения этой последовательности) В общем на словах не опишешь..  по рисунку все сразу будет понятно. ВОПРОС: На что похож данный интерфейс? И как решаются такие задачи? Заранее спасибо..
Сообщение отредактировал mSimple - Jan 29 2009, 20:06
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Jan 30 2009, 10:28
|

Частый гость
 
Группа: Свой
Сообщений: 98
Регистрация: 21-02-08
Из: г. Москва
Пользователь №: 35 268

|
Цитата(XVR @ Jan 30 2009, 11:22)  Похоже на Манчестер
Этого мало, нужна какая то известная синхропоследовательность в начале. Или очень длинная последовательность. Еще надо знать частоту сигнала данных (хотя бы приблизительно)
ФАПЧ вам поможет Спасибо всем за ответы. Некоторые уточнения: Синхропоследовательности вначале нет (или о ней ничего не известно). Последовательность входная одна - это меандр с отсутствующими единицами от 1 до 4-х подряд. Частота переключения последовательности 2,048, опорная в 50-100 раз выше (может быть разной). А ФАПЧ вы имеете ввиду PLL ПЛИС или внешний?
Сообщение отредактировал mSimple - Jan 30 2009, 10:31
|
|
|
|
|
Jan 30 2009, 13:29
|

Частый гость
 
Группа: Свой
Сообщений: 98
Регистрация: 21-02-08
Из: г. Москва
Пользователь №: 35 268

|
Цитата(sazh @ Jan 30 2009, 14:11)  Входные данные - не меандр. Длительность бита входных данных - половина периода несущей частоты. Иначе Вам не выделить синхроимпульсы из посылки. Может там специализированные приемо - передатчики стоят? я не знаю, что это за информация, может это и не информация вовсе.. а какой-то побитый CLK.. про передатчики ничего не известно... , есть просто такая задача. Сказано, что входная последовательность представляет собой меандр, с некоторыми отсутствующими импульсами. Под несущей частотой вы имеете ввиду опорную или полученную? Длительность бита данных = половина периода выделенной частоты. Пока пробую тупо подсчитать длительность бита посылки и сдвинуть ее 8 раз (с учетом нулей), а потом сложить по ИЛИ, пока не получилось.
|
|
|
|
|
Jan 30 2009, 14:57
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(mSimple @ Jan 30 2009, 16:29)  я не знаю, что это за информация, может это и не информация вовсе.. а какой-то побитый CLK.. про передатчики ничего не известно... , есть просто такая задача. Сказано, что входная последовательность представляет собой меандр, с некоторыми отсутствующими импульсами. Под несущей частотой вы имеете ввиду опорную или полученную? Длительность бита данных = половина периода выделенной частоты. Пока пробую тупо подсчитать длительность бита посылки и сдвинуть ее 8 раз (с учетом нулей), а потом сложить по ИЛИ, пока не получилось. Я про ИЛИ сказал, имея ввиду протокол arinc. Обычно протокол обмена прозрачен и понятен. И затраты поэтому на его реализацию незначительны. Я бы не стал думать о схемной реализации, не выяснив протокола обмена данными в Вашем случае. Ведь от этого зависит надежность передачи, приема данных.
|
|
|
|
|
Jan 30 2009, 17:07
|

Частый гость
 
Группа: Свой
Сообщений: 98
Регистрация: 21-02-08
Из: г. Москва
Пользователь №: 35 268

|
Цитата(sazh @ Jan 30 2009, 17:57)  Я про ИЛИ сказал, имея ввиду протокол arinc. Обычно протокол обмена прозрачен и понятен. И затраты поэтому на его реализацию незначительны. Я бы не стал думать о схемной реализации, не выяснив протокола обмена данными в Вашем случае. Ведь от этого зависит надежность передачи, приема данных. Открою маленький секрет. Эту задачу мне выдали на одном из собеседований при приеме на работу... И следовательно задача надежности приема-передачи данных не стоит. Это какая-то типовая задача в интерфейсах передачи данных. Честно скажу, я с такими не сталкивался. Вот и подумал, может по условию можно будет что-то понять, на что он похож и где решаются такие задачи. Единственно, есть пожелание по возможности избежать сильного джиттера выдаваемых синхроимпульсов, но до этого еще рано. PS: Фокус с подсчетом длительности положительного уровня последовательности не прошел, т.к. частота опорная не кратна частоте переключения последовательности.. в общем стыдно мне, стыдно!
Сообщение отредактировал mSimple - Jan 30 2009, 17:10
|
|
|
|
|
Jan 30 2009, 18:10
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(mSimple @ Jan 30 2009, 20:07)  Открою маленький секрет. Эту задачу мне выдали на одном из собеседований при приеме на работу... И следовательно задача надежности приема-передачи данных не стоит. Это какая-то типовая задача в интерфейсах передачи данных. Честно скажу, я с такими не сталкивался. Вот и подумал, может по условию можно будет что-то понять, на что он похож и где решаются такие задачи. Единственно, есть пожелание по возможности избежать сильного джиттера выдаваемых синхроимпульсов, но до этого еще рано. PS: Фокус с подсчетом длительности положительного уровня последовательности не прошел, т.к. частота опорная не кратна частоте переключения последовательности.. в общем стыдно мне, стыдно!  Похож он на битовую посылку данных, в которой закодированы синхроимпульсы сопровождения. (Ваша повышенная опорная частота это принадлежность приемника. ЕЕ нет надобности тащить.) И про джиттер тоже забудьте. Самим протоколом приема передачи данных это решается. Чтобы выделить из посылки принимаемых данных синхроимпульсы - идут на ухищрения. Ведь требуется подстройка внутренних синхрочасов (Ваша опорная), чтобы данные не потерять. Подстроиться можно только по перепаду фронта в посылке данных. У манчестера этот перепад в середине бита, или из 0 в 1 или из 1 в 0. У arinc - 429 (летайте самолетами аэрофлота) детектируется 1, если уровень в канале выше 3В и детектируется 0 - если уровень напряжения в канале меньше минус 3 вольт. Поэтому на выходе драйвера два цифровых выхода. На первом единица, если в линии была1, на другом единица, если в линии был 0. Вне на обоих линиях - это логический 0. Чтобы выделить из посылки данных синхроимпульс, эти даные передаются в интервале половины периода клока. Т. Е. детектированные поочередно в линии 1 и 0 логические единицы, собранные по ИЛИ и есть этот синхроклок. Остается его сдвинуть и принять посылку по линии 1. Ваши синхроимпульсы очень похожи на протокол arinc -429 (Но выдернутые из середины преобразования посылки данных. От Вас скрыли детектирование нулей в потоке данных)) Вам поставили задачу не корректно. Потому что мало выделить из потока данных синхроимпульс. Нужна пауза в посылке данных, чтобы правильно идентифицировать начало пакета. (У манчестера это синхроимпульс (искаженный манчестер) В Вашем только частном случае, когда только такие данные и никакие другие не будут принматься, можно восстановить синхроимпульсы (подстраивая внутренние часы по уровню логической 1 в посылке). Но для этого ВЫ должны уже точно ЗНАТЬ частоту приема данных (2.048) (Не подсчитывать длительность 1 уровня, а операться на точное знание этой длительности) Чтобы вне уровня логической 1 (где нули) самому нарезать на этой частоте недостающие синхроимпульсы. Естественно будет увеличиваться рассоглаование частот передачи и приема, но это не важно. Ведь Вам все равно надо сдвинуть полученные синхроимпульсы из потока данных. Вот и сдвиньте их на примерно середину интервала уровня 1 в посылке данных, это перекроет интервал рассогласования за периоды четырех нулей в ту или иную сторону от середины уровня 1 в посылке. (когда нет возможности подстроить внутренние синхрочасы уровнем 1 в линии) http://www.holtic.com/
|
|
|
|
|
Jan 30 2009, 19:49
|

Частый гость
 
Группа: Свой
Сообщений: 98
Регистрация: 21-02-08
Из: г. Москва
Пользователь №: 35 268

|
sazh Спасибо Вам за помощь! часть понял, часть нет.. Цитата(sazh @ Jan 30 2009, 21:10)  В Вашем только частном случае, когда только такие данные и никакие другие не будут принматься, можно восстановить синхроимпульсы (подстраивая внутренние часы по уровню логической 1 в посылке). Но для этого ВЫ должны уже точно ЗНАТЬ частоту приема данных (2.048) (Не подсчитывать длительность 1 уровня, а операться на точное знание этой длительности) Чтобы вне уровня логической 1 (где нули) самому нарезать на этой частоте недостающие синхроимпульсы. Естественно будет увеличиваться рассоглаование частот передачи и приема, но это не важно. Ведь Вам все равно надо сдвинуть полученные синхроимпульсы из потока данных. Вот и сдвиньте их на примерно середину интервала уровня 1 в посылке данных, это перекроет интервал рассогласования за периоды четырех нулей в ту или иную сторону от середины уровня 1 в посылке. (когда нет возможности подстроить внутренние синхрочасы уровнем 1 в линии) Так частота последовательности вроде известна и = 2,048, что не так? А также непонятно что значит подстроить часы по уровню, это как? Множить входную частоту до кратной 2.048?
Сообщение отредактировал mSimple - Jan 30 2009, 19:52
|
|
|
|
|
Jan 30 2009, 20:06
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(mSimple @ Jan 30 2009, 22:49)  Так частота последовательности вроде известна и = 2,048, что не так? А также непонятно что значит подстроить часы по уровню, это как? Множить входную частоту до кратной 2.048? Простой счетчик с начальной установкой по входным данным. (Когда 1, счетчик в нуле). Это делитель. Вашей большой опорной, чтобы получить коэффициент пересчета (xtal_clk / 2.048) == x (целое); Когда единица в линии - счетчик в нуле. Когда появился ноль счет с коэффициентом пересчета. Старший разряд счетчика искомый недостающий кусок синхросмеси. По ИЛИ с посылкой данных. Хотя это все бредятина.
|
|
|
|
|
Jan 30 2009, 20:18
|

Частый гость
 
Группа: Свой
Сообщений: 98
Регистрация: 21-02-08
Из: г. Москва
Пользователь №: 35 268

|
Посмотрел arinc - 429, действительно похоже. только он биполярный, а здесь как-будто вторая полярность просто срезана... Только в формировании синхросигнала это мало чего мне дало  Сейчас попробую со счетчиком намудрить...
Сообщение отредактировал mSimple - Jan 30 2009, 20:18
|
|
|
|
|
Jan 30 2009, 22:02
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(mSimple @ Jan 31 2009, 00:30)  В общем сходу не получилось... какой коэффициент пересчета не ставь, за счет не кратности частот, на выходе счетчика получается либо длительность импульса другая.. . либо скважность не равна 50%...
Причем, в принципе, на небольшую разницу в скважности можно было бы наплевать и он бы всеравно четко попадал в бит данных, но только если бы отсутствовало не более 2-импульсов подряд..., а так, никуда это конечно не годиться... чистой воды подгон получается. CODE module arinc_bad ( input clk, // 2_048_00 // несущая 2_048, делитель на 50 и на 2 input in_data, output reg out_data, output clk_data );
reg [1:0] in_data_rg; reg [5:0] ct; reg div_2; reg [24:0] shift_clk_data;
assign clk_data = shift_clk_data[24];
always @(posedge clk) begin in_data_rg[0] <= in_data; in_data_rg[1] <= in_data_rg[0];
if (in_data_rg[1]) ct <= 6'd0; else if (ct == 6'd49) ct <= 6'd0; else ct <= ct + 1'b1;
if (in_data_rg[1]) div_2 <= 1'b0; else if (ct == 6'd49) div_2 <= ~div_2;
out_data <= in_data_rg[1]; shift_clk_data <= {shift_clk_data[23:0], (in_data_rg[1] || div_2)}; end
endmodule
|
|
|
|
|
Jan 31 2009, 00:00
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 21-06-04
Пользователь №: 70

|
Уважаемый sazh предложил, в принципе правильное, но, на мой взгляд, несколько избыточное решение. "Заказчег" хотел увидеть примерно следующее (немного изменю код ув. sazh ): CODE module tst_InClk( input clk, // 100 MHz input in_data, // а-ля 2.048 M
output out_data, output reg out_clk );
reg [3:0] inD; reg [5:0] cnt;
assign out_data = inD[3];
always @(posedge clk) begin
inD[3:0] <= {inD[2:0], in_data}; // типа защита от матастабильности if(inD[3:2] == 2'b01) cnt <= 6'd0; else cnt <= (cnt < 6'd48) ? cnt + 6'd1 : 6'd0; out_clk <= (cnt > 6'd12)&&(cnt < 6'd37); end
endmodule
В некотором приближении, подобный модуль можно пользовать, как составную часть ФАПЧа потока Е1. Собственно это и пытались изложить в описании "задачи". P.S. Если вдруг, у уважаемого sazh, возникнет желание сменить постоянную работу, то мы с удовольствием попробуем предложить варианты, т.к. "собеседование" Вы, можно сказать, прошли :-) P.P.S. Уважаемый mSimple, мне кажется, что Вам не стоит пока ориентироваться на предлагаемую работу. P.P.P.S. Ну а мне, скорее всего, придётся сочинять очередное условие "задачи" :-(
--------------------
Настоящее чревато будущим.
|
|
|
|
|
Jan 31 2009, 12:07
|

Частый гость
 
Группа: Свой
Сообщений: 98
Регистрация: 21-02-08
Из: г. Москва
Пользователь №: 35 268

|
Цитата(Tran @ Jan 31 2009, 03:00)  P.P.S. Уважаемый mSimple, мне кажется, что Вам не стоит пока ориентироваться на предлагаемую работу.
P.P.P.S. Ну а мне, скорее всего, придётся сочинять очередное условие "задачи" :-( Уважаемый Tran, в первую очередь я хотел бы Вас поблагодарить за данную мне задачу, поскольку это дало мне оценить собственные силы. На форум я обратился за советом и ни в коем случае не за готовым ответом. Он для того и создан, что бы делиться опытом и помогать друг-другу, и я не вижу в этом ничего зазорного. Я готов УЧИТЬСЯ и не претендую на звание профессионала! И если Вам требуются сотрудники разного уровня, я с удовольствием рассмотрел бы другое условие задачи. Можно в личку, можно по почте lexx2@lianet.ru PS: премного благодарен sazh за оказанную мне помощь.
|
|
|
|
Сообщений в этой теме
mSimple Что это за интерфейс? Jan 29 2009, 19:39 XVR Цитата(mSimple @ Jan 29 2009, 22:39) Необ... Jan 30 2009, 08:22 MrYuran Цитата(XVR @ Jan 30 2009, 11:22) Похоже н... Jan 30 2009, 08:57 sazh Цитата(mSimple @ Jan 29 2009, 22:39) Всем... Jan 30 2009, 09:16             sazh Цитата(mSimple @ Jan 31 2009, 15:07) На ф... Jan 31 2009, 17:33 rezident Сообщение модератора.
1. Излишнее цитирование (нео... Jan 31 2009, 00:22
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|