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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Что это за интерфейс?, или на что он похож....
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
XVR
сообщение Jan 30 2009, 08:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(mSimple @ Jan 29 2009, 22:39) *
Необходимо реализовать некий (неизвестный мне) интерфейс передачи данных,
а выглядит он следующим образом:

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

Цитата
причем, в последовательности подряд может идти только от 1 до 4-х логических нулей
Этого мало, нужна какая то известная синхропоследовательность в начале. Или очень длинная последовательность.
Еще надо знать частоту сигнала данных (хотя бы приблизительно)

Цитата
На выходе необходимо получить эту же последовательность, но сопровождаемую
собственными синхроимпульсами (т.е. частотой переключения этой последовательности)
ФАПЧ вам поможет
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jan 30 2009, 08:57
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(XVR @ Jan 30 2009, 11:22) *
Похоже на Манчестер

в манчестере не бывает длинных нулей или единиц (более одного битового интервала), так что мимо.

Цитата(XVR @ Jan 30 2009, 11:22) *
ФАПЧ вам поможет

++
Можно по фронту инф. сигнала запускать счётчик и считать сдвиг тактового относительно инф. , а по результату корректировать генератор ТИ


Цитата(mSimple @ Jan 29 2009, 22:39) *
лог 1 = один перепад, лог 0 = нет перепада
ВОПРОС: На что похож данный интерфейс? И как решаются такие задачи?

Вообще похоже на кодирование данных на магнитном носителе. Посмотрите схемы дисководов.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
sazh
сообщение Jan 30 2009, 09:16
Сообщение #4


Гуру
******

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



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

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

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

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


Это похоже на ARINC 429. Посмотрите драйвер HI-8588. На выходе у него две логические линии. Одна последовательность (уровень логической единицы в половину периода несущей частоты)- это наличие в линии 1.
Другая последовательность - наличие в линии 0. Тогда и количество синхроимпульсов (количество битов в посылке) - это просто функция ИЛИ этих двух входных последовательностей. У Вас нарисован уже сформированный синхроимпульс, сдвинутый относительно посылке всех единиц (для приема на сдвигающий регистр)
Частоты там фиксированные. 12.5 кГц, 50, 100.
(Без линии, где нули выделяются, синхроимпульс только по выделенным единицам не получить )
Go to the top of the page
 
+Quote Post
mSimple
сообщение Jan 30 2009, 10:28
Сообщение #5


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

Группа: Свой
Сообщений: 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
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #7


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

Группа: Свой
Сообщений: 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
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #9


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

Группа: Свой
Сообщений: 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
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #11


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

Группа: Свой
Сообщений: 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
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #13


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

Группа: Свой
Сообщений: 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
Сообщение #14


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

Группа: Свой
Сообщений: 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
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 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

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

 


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


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