реклама на сайте
подробности

 
 
> Что это за интерфейс?, или на что он похож....
mSimple
сообщение Jan 29 2009, 19:39
Сообщение #1


Частый гость
**

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



Всем доброго времени суток. Подскажите кто знает.. Необходимо реализовать некий (неизвестный мне) интерфейс передачи данных,
а выглядит он следующим образом:

С внешнего устройства поступают:
- входная последовательность (кодируемая фронтом, т.е. лог 1 = один перепад, лог 0 = нет перепада)
- опорная частота (в 100 и более раз больше частоты переключения последовательности)

причем, в последовательности подряд может идти только от 1 до 4-х логических нулей

На выходе необходимо получить эту же последовательность, но сопровождаемую
собственными синхроимпульсами (т.е. частотой переключения этой последовательности)

В общем на словах не опишешь.. smile.gif по рисунку все сразу будет понятно.

ВОПРОС: На что похож данный интерфейс? И как решаются такие задачи?

Заранее спасибо.. rolleyes.gif

Сообщение отредактировал mSimple - Jan 29 2009, 20:06
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mSimple
сообщение Jan 30 2009, 10:28
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 30 2009, 11:11
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(mSimple @ Jan 30 2009, 13:28) *
Спасибо всем за ответы.
Некоторые уточнения:

Последовательность входная одна - это
меандр с отсутствующими единицами от 1 до 4-х подряд.


Входные данные - не меандр. Длительность бита входных данных - половина периода несущей частоты. Иначе Вам не выделить синхроимпульсы из посылки.
Может там специализированные приемо - передатчики стоят?
Go to the top of the page
 
+Quote Post
mSimple
сообщение Jan 30 2009, 13:29
Сообщение #4


Частый гость
**

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



Цитата(sazh @ Jan 30 2009, 14:11) *
Входные данные - не меандр. Длительность бита входных данных - половина периода несущей частоты. Иначе Вам не выделить синхроимпульсы из посылки.
Может там специализированные приемо - передатчики стоят?


я не знаю, что это за информация, может это и не информация вовсе.. а какой-то побитый CLK.. про передатчики ничего не известно... , есть просто такая задача. laughing.gif
Сказано, что входная последовательность представляет собой меандр, с некоторыми отсутствующими импульсами.

Под несущей частотой вы имеете ввиду опорную или полученную? Длительность бита данных = половина периода выделенной частоты.

Пока пробую тупо подсчитать длительность бита посылки и сдвинуть ее 8 раз (с учетом нулей), а потом сложить по ИЛИ, пока не получилось.
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 30 2009, 14:57
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(mSimple @ Jan 30 2009, 16:29) *
я не знаю, что это за информация, может это и не информация вовсе.. а какой-то побитый CLK.. про передатчики ничего не известно... , есть просто такая задача. laughing.gif
Сказано, что входная последовательность представляет собой меандр, с некоторыми отсутствующими импульсами.

Под несущей частотой вы имеете ввиду опорную или полученную? Длительность бита данных = половина периода выделенной частоты.

Пока пробую тупо подсчитать длительность бита посылки и сдвинуть ее 8 раз (с учетом нулей), а потом сложить по ИЛИ, пока не получилось.


Я про ИЛИ сказал, имея ввиду протокол arinc. Обычно протокол обмена прозрачен и понятен. И затраты поэтому на его реализацию незначительны.
Я бы не стал думать о схемной реализации, не выяснив протокола обмена данными в Вашем случае. Ведь от этого зависит надежность передачи, приема данных.
Go to the top of the page
 
+Quote Post
mSimple
сообщение Jan 30 2009, 17:07
Сообщение #6


Частый гость
**

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



Цитата(sazh @ Jan 30 2009, 17:57) *
Я про ИЛИ сказал, имея ввиду протокол arinc. Обычно протокол обмена прозрачен и понятен. И затраты поэтому на его реализацию незначительны.
Я бы не стал думать о схемной реализации, не выяснив протокола обмена данными в Вашем случае. Ведь от этого зависит надежность передачи, приема данных.


Открою маленький секрет. Эту задачу мне выдали на одном из собеседований при приеме на работу... rolleyes.gif

И следовательно задача надежности приема-передачи данных не стоит. Это какая-то типовая задача в интерфейсах передачи данных. Честно скажу, я с такими не сталкивался. Вот и подумал, может по условию можно будет что-то понять, на что он похож и где решаются такие задачи. Единственно, есть пожелание по возможности избежать сильного джиттера выдаваемых синхроимпульсов, но до этого еще рано.

PS: Фокус с подсчетом длительности положительного уровня последовательности не прошел, т.к. частота опорная не кратна частоте переключения последовательности.. в общем стыдно мне, стыдно! unsure.gif

Сообщение отредактировал mSimple - Jan 30 2009, 17:10
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 30 2009, 18:10
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(mSimple @ Jan 30 2009, 20:07) *
Открою маленький секрет. Эту задачу мне выдали на одном из собеседований при приеме на работу... rolleyes.gif

И следовательно задача надежности приема-передачи данных не стоит. Это какая-то типовая задача в интерфейсах передачи данных. Честно скажу, я с такими не сталкивался. Вот и подумал, может по условию можно будет что-то понять, на что он похож и где решаются такие задачи. Единственно, есть пожелание по возможности избежать сильного джиттера выдаваемых синхроимпульсов, но до этого еще рано.

PS: Фокус с подсчетом длительности положительного уровня последовательности не прошел, т.к. частота опорная не кратна частоте переключения последовательности.. в общем стыдно мне, стыдно! unsure.gif


Похож он на битовую посылку данных, в которой закодированы синхроимпульсы сопровождения. (Ваша повышенная опорная частота это принадлежность приемника. ЕЕ нет надобности тащить.) И про джиттер тоже забудьте. Самим протоколом приема передачи данных это решается.
Чтобы выделить из посылки принимаемых данных синхроимпульсы - идут на ухищрения. Ведь требуется подстройка внутренних синхрочасов (Ваша опорная), чтобы данные не потерять. Подстроиться можно только по перепаду фронта в посылке данных. У манчестера этот перепад в середине бита,
или из 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/
Go to the top of the page
 
+Quote Post
mSimple
сообщение Jan 30 2009, 19:49
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 30 2009, 20:06
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(mSimple @ Jan 30 2009, 22:49) *
Так частота последовательности вроде известна и = 2,048, что не так? А также непонятно что значит подстроить часы по уровню, это как? Множить входную частоту до кратной 2.048?


Простой счетчик с начальной установкой по входным данным. (Когда 1, счетчик в нуле).
Это делитель. Вашей большой опорной, чтобы получить коэффициент пересчета (xtal_clk / 2.048) == x (целое);
Когда единица в линии - счетчик в нуле. Когда появился ноль счет с коэффициентом пересчета. Старший разряд счетчика искомый недостающий кусок синхросмеси. По ИЛИ с посылкой данных.
Хотя это все бредятина.
Go to the top of the page
 
+Quote Post
mSimple
сообщение Jan 30 2009, 20:18
Сообщение #10


Частый гость
**

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



Посмотрел arinc - 429, действительно похоже. только он биполярный, а здесь как-будто вторая полярность просто срезана...

Только в формировании синхросигнала это мало чего мне дало smile.gif Сейчас попробую со счетчиком намудрить...

Сообщение отредактировал mSimple - Jan 30 2009, 20:18
Go to the top of the page
 
+Quote Post
mSimple
сообщение Jan 30 2009, 21:30
Сообщение #11


Частый гость
**

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



В общем сходу не получилось... какой коэффициент пересчета не ставь, за счет не кратности частот, на выходе счетчика получается либо длительность импульса другая.. . либо скважность не равна 50%...

Причем, в принципе, на небольшую разницу в скважности можно было бы наплевать и он бы всеравно четко попадал в бит данных, но только если бы отсутствовало не более 2-импульсов подряд..., а так, никуда это конечно не годиться... чистой воды подгон получается.

Сообщение отредактировал mSimple - Jan 30 2009, 21:31
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 30 2009, 22:02
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Tran
сообщение Jan 31 2009, 00:00
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 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. Ну а мне, скорее всего, придётся сочинять очередное условие "задачи" :-(


--------------------
Настоящее чревато будущим.
Go to the top of the page
 
+Quote Post
mSimple
сообщение Jan 31 2009, 12:07
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 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 за оказанную мне помощь.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.0154 секунд с 7
ELECTRONIX ©2004-2016