mSimple 0 29 января, 2009 Опубликовано 29 января, 2009 (изменено) · Жалоба Всем доброго времени суток. Подскажите кто знает.. Необходимо реализовать некий (неизвестный мне) интерфейс передачи данных, а выглядит он следующим образом: С внешнего устройства поступают: - входная последовательность (кодируемая фронтом, т.е. лог 1 = один перепад, лог 0 = нет перепада) - опорная частота (в 100 и более раз больше частоты переключения последовательности) причем, в последовательности подряд может идти только от 1 до 4-х логических нулей На выходе необходимо получить эту же последовательность, но сопровождаемую собственными синхроимпульсами (т.е. частотой переключения этой последовательности) В общем на словах не опишешь.. :) по рисунку все сразу будет понятно. ВОПРОС: На что похож данный интерфейс? И как решаются такие задачи? Заранее спасибо.. :rolleyes: Изменено 29 января, 2009 пользователем mSimple Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 30 января, 2009 Опубликовано 30 января, 2009 · Жалоба Необходимо реализовать некий (неизвестный мне) интерфейс передачи данных, а выглядит он следующим образом: С внешнего устройства поступают: - входная последовательность (кодируемая фронтом, т.е. лог 1 = один перепад, лог 0 = нет перепада) Похоже на Манчестер причем, в последовательности подряд может идти только от 1 до 4-х логических нулейЭтого мало, нужна какая то известная синхропоследовательность в начале. Или очень длинная последовательность. Еще надо знать частоту сигнала данных (хотя бы приблизительно) На выходе необходимо получить эту же последовательность, но сопровождаемую собственными синхроимпульсами (т.е. частотой переключения этой последовательности) ФАПЧ вам поможет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 30 января, 2009 Опубликовано 30 января, 2009 · Жалоба Похоже на Манчестер в манчестере не бывает длинных нулей или единиц (более одного битового интервала), так что мимо. ФАПЧ вам поможет ++ Можно по фронту инф. сигнала запускать счётчик и считать сдвиг тактового относительно инф. , а по результату корректировать генератор ТИ лог 1 = один перепад, лог 0 = нет перепада ВОПРОС: На что похож данный интерфейс? И как решаются такие задачи? Вообще похоже на кодирование данных на магнитном носителе. Посмотрите схемы дисководов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 30 января, 2009 Опубликовано 30 января, 2009 · Жалоба Всем доброго времени суток. Подскажите кто знает.. Необходимо реализовать некий (неизвестный мне) интерфейс передачи данных, а выглядит он следующим образом: С внешнего устройства поступают: - входная последовательность (кодируемая фронтом, т.е. лог 1 = один перепад, лог 0 = нет перепада) - опорная частота (в 100 и более раз больше частоты переключения последовательности) причем, в последовательности подряд может идти только от 1 до 4-х логических нулей На выходе необходимо получить эту же последовательность, но сопровождаемую собственными синхроимпульсами (т.е. частотой переключения этой последовательности) Это похоже на ARINC 429. Посмотрите драйвер HI-8588. На выходе у него две логические линии. Одна последовательность (уровень логической единицы в половину периода несущей частоты)- это наличие в линии 1. Другая последовательность - наличие в линии 0. Тогда и количество синхроимпульсов (количество битов в посылке) - это просто функция ИЛИ этих двух входных последовательностей. У Вас нарисован уже сформированный синхроимпульс, сдвинутый относительно посылке всех единиц (для приема на сдвигающий регистр) Частоты там фиксированные. 12.5 кГц, 50, 100. (Без линии, где нули выделяются, синхроимпульс только по выделенным единицам не получить ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mSimple 0 30 января, 2009 Опубликовано 30 января, 2009 (изменено) · Жалоба Похоже на Манчестер Этого мало, нужна какая то известная синхропоследовательность в начале. Или очень длинная последовательность. Еще надо знать частоту сигнала данных (хотя бы приблизительно) ФАПЧ вам поможет Спасибо всем за ответы. Некоторые уточнения: Синхропоследовательности вначале нет (или о ней ничего не известно). Последовательность входная одна - это меандр с отсутствующими единицами от 1 до 4-х подряд. Частота переключения последовательности 2,048, опорная в 50-100 раз выше (может быть разной). А ФАПЧ вы имеете ввиду PLL ПЛИС или внешний? Изменено 30 января, 2009 пользователем mSimple Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 30 января, 2009 Опубликовано 30 января, 2009 · Жалоба Спасибо всем за ответы. Некоторые уточнения: Последовательность входная одна - это меандр с отсутствующими единицами от 1 до 4-х подряд. Входные данные - не меандр. Длительность бита входных данных - половина периода несущей частоты. Иначе Вам не выделить синхроимпульсы из посылки. Может там специализированные приемо - передатчики стоят? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mSimple 0 30 января, 2009 Опубликовано 30 января, 2009 · Жалоба Входные данные - не меандр. Длительность бита входных данных - половина периода несущей частоты. Иначе Вам не выделить синхроимпульсы из посылки. Может там специализированные приемо - передатчики стоят? я не знаю, что это за информация, может это и не информация вовсе.. а какой-то побитый CLK.. про передатчики ничего не известно... , есть просто такая задача. :laughing: Сказано, что входная последовательность представляет собой меандр, с некоторыми отсутствующими импульсами. Под несущей частотой вы имеете ввиду опорную или полученную? Длительность бита данных = половина периода выделенной частоты. Пока пробую тупо подсчитать длительность бита посылки и сдвинуть ее 8 раз (с учетом нулей), а потом сложить по ИЛИ, пока не получилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 30 января, 2009 Опубликовано 30 января, 2009 · Жалоба я не знаю, что это за информация, может это и не информация вовсе.. а какой-то побитый CLK.. про передатчики ничего не известно... , есть просто такая задача. :laughing: Сказано, что входная последовательность представляет собой меандр, с некоторыми отсутствующими импульсами. Под несущей частотой вы имеете ввиду опорную или полученную? Длительность бита данных = половина периода выделенной частоты. Пока пробую тупо подсчитать длительность бита посылки и сдвинуть ее 8 раз (с учетом нулей), а потом сложить по ИЛИ, пока не получилось. Я про ИЛИ сказал, имея ввиду протокол arinc. Обычно протокол обмена прозрачен и понятен. И затраты поэтому на его реализацию незначительны. Я бы не стал думать о схемной реализации, не выяснив протокола обмена данными в Вашем случае. Ведь от этого зависит надежность передачи, приема данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mSimple 0 30 января, 2009 Опубликовано 30 января, 2009 (изменено) · Жалоба Я про ИЛИ сказал, имея ввиду протокол arinc. Обычно протокол обмена прозрачен и понятен. И затраты поэтому на его реализацию незначительны. Я бы не стал думать о схемной реализации, не выяснив протокола обмена данными в Вашем случае. Ведь от этого зависит надежность передачи, приема данных. Открою маленький секрет. Эту задачу мне выдали на одном из собеседований при приеме на работу... :rolleyes: И следовательно задача надежности приема-передачи данных не стоит. Это какая-то типовая задача в интерфейсах передачи данных. Честно скажу, я с такими не сталкивался. Вот и подумал, может по условию можно будет что-то понять, на что он похож и где решаются такие задачи. Единственно, есть пожелание по возможности избежать сильного джиттера выдаваемых синхроимпульсов, но до этого еще рано. PS: Фокус с подсчетом длительности положительного уровня последовательности не прошел, т.к. частота опорная не кратна частоте переключения последовательности.. в общем стыдно мне, стыдно! :unsure: Изменено 30 января, 2009 пользователем mSimple Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 30 января, 2009 Опубликовано 30 января, 2009 · Жалоба Открою маленький секрет. Эту задачу мне выдали на одном из собеседований при приеме на работу... :rolleyes: И следовательно задача надежности приема-передачи данных не стоит. Это какая-то типовая задача в интерфейсах передачи данных. Честно скажу, я с такими не сталкивался. Вот и подумал, может по условию можно будет что-то понять, на что он похож и где решаются такие задачи. Единственно, есть пожелание по возможности избежать сильного джиттера выдаваемых синхроимпульсов, но до этого еще рано. PS: Фокус с подсчетом длительности положительного уровня последовательности не прошел, т.к. частота опорная не кратна частоте переключения последовательности.. в общем стыдно мне, стыдно! :unsure: Похож он на битовую посылку данных, в которой закодированы синхроимпульсы сопровождения. (Ваша повышенная опорная частота это принадлежность приемника. ЕЕ нет надобности тащить.) И про джиттер тоже забудьте. Самим протоколом приема передачи данных это решается. Чтобы выделить из посылки принимаемых данных синхроимпульсы - идут на ухищрения. Ведь требуется подстройка внутренних синхрочасов (Ваша опорная), чтобы данные не потерять. Подстроиться можно только по перепаду фронта в посылке данных. У манчестера этот перепад в середине бита, или из 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/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mSimple 0 30 января, 2009 Опубликовано 30 января, 2009 (изменено) · Жалоба sazh Спасибо Вам за помощь! часть понял, часть нет.. В Вашем только частном случае, когда только такие данные и никакие другие не будут принматься, можно восстановить синхроимпульсы (подстраивая внутренние часы по уровню логической 1 в посылке). Но для этого ВЫ должны уже точно ЗНАТЬ частоту приема данных (2.048) (Не подсчитывать длительность 1 уровня, а операться на точное знание этой длительности) Чтобы вне уровня логической 1 (где нули) самому нарезать на этой частоте недостающие синхроимпульсы. Естественно будет увеличиваться рассоглаование частот передачи и приема, но это не важно. Ведь Вам все равно надо сдвинуть полученные синхроимпульсы из потока данных. Вот и сдвиньте их на примерно середину интервала уровня 1 в посылке данных, это перекроет интервал рассогласования за периоды четырех нулей в ту или иную сторону от середины уровня 1 в посылке. (когда нет возможности подстроить внутренние синхрочасы уровнем 1 в линии) Так частота последовательности вроде известна и = 2,048, что не так? А также непонятно что значит подстроить часы по уровню, это как? Множить входную частоту до кратной 2.048? Изменено 30 января, 2009 пользователем mSimple Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 30 января, 2009 Опубликовано 30 января, 2009 · Жалоба Так частота последовательности вроде известна и = 2,048, что не так? А также непонятно что значит подстроить часы по уровню, это как? Множить входную частоту до кратной 2.048? Простой счетчик с начальной установкой по входным данным. (Когда 1, счетчик в нуле). Это делитель. Вашей большой опорной, чтобы получить коэффициент пересчета (xtal_clk / 2.048) == x (целое); Когда единица в линии - счетчик в нуле. Когда появился ноль счет с коэффициентом пересчета. Старший разряд счетчика искомый недостающий кусок синхросмеси. По ИЛИ с посылкой данных. Хотя это все бредятина. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mSimple 0 30 января, 2009 Опубликовано 30 января, 2009 (изменено) · Жалоба Посмотрел arinc - 429, действительно похоже. только он биполярный, а здесь как-будто вторая полярность просто срезана... Только в формировании синхросигнала это мало чего мне дало :) Сейчас попробую со счетчиком намудрить... Изменено 30 января, 2009 пользователем mSimple Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mSimple 0 30 января, 2009 Опубликовано 30 января, 2009 (изменено) · Жалоба В общем сходу не получилось... какой коэффициент пересчета не ставь, за счет не кратности частот, на выходе счетчика получается либо длительность импульса другая.. . либо скважность не равна 50%... Причем, в принципе, на небольшую разницу в скважности можно было бы наплевать и он бы всеравно четко попадал в бит данных, но только если бы отсутствовало не более 2-импульсов подряд..., а так, никуда это конечно не годиться... чистой воды подгон получается. Изменено 30 января, 2009 пользователем mSimple Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 30 января, 2009 Опубликовано 30 января, 2009 · Жалоба В общем сходу не получилось... какой коэффициент пересчета не ставь, за счет не кратности частот, на выходе счетчика получается либо длительность импульса другая.. . либо скважность не равна 50%... Причем, в принципе, на небольшую разницу в скважности можно было бы наплевать и он бы всеравно четко попадал в бит данных, но только если бы отсутствовало не более 2-импульсов подряд..., а так, никуда это конечно не годиться... чистой воды подгон получается. 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться