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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Параллельный интерфейс, возможно ли создать или существует?
Сергей Борщ
сообщение Oct 27 2017, 16:55
Сообщение #16


Гуру
******

Группа: Модераторы
Сообщений: 8 093
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Поищите в сети книгу "Синхронизация в телекоммуникационных системах. Анализ инженерных решений". Насколько помню, там описано множество разных решений подобных задач. Возможно в ней вы найдете то, что вам нужно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
x736C
сообщение Oct 27 2017, 17:51
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 1 165
Регистрация: 3-03-06
Пользователь №: 14 942



Вопрос еще в железе. Если у вас стандартный LPT в старой машине и именно на ней нужно поднять такой интерфейс программным способом, то это один расклад.
Если же в вашем вопросе не содержится ограничений на аппаратную реализацию, то это совсем другой вариант. И тут решений можно придумать множество. Частично их тут предлагали. Скремблирование и какое-то подобие ФАПЧ, старт-стоп последовательности и прочие штучки.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 27 2017, 18:23
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 3 775
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(LII @ Oct 27 2017, 17:22) *
И при этом не использовали, присутствующие в LPT, служебные сигналы, например "Data strobe", а использовали только Data 0-7? Это мазохизм какой-то.

Нет. Использовали все имеющиеся сигналы для передачи данных. Все, а не только D0-D7.

Цитата(k155la3 @ Oct 27 2017, 19:34) *
Если развить и углУбить мысль в этом направлении, то можно попробовать использовать код Грея,
но для передачи байтов все равно нужна избыточность, хотябы 9 линий sm.gif

Если есть 9 линий, то при оптимально построенном алгоритме можно передавать примерно до 8.994 бит данных за одну операцию вывода.
Надо просто подмешать сигнал стробирования в данные. При достаточных вычислительных ресурсах на обеих сторонах (приёма и передачи) можно вплотную приблизиться к пределу == 8.994 бит данных за такт на 9-разрядном параллельном интерфейсе.
Go to the top of the page
 
+Quote Post
x736C
сообщение Oct 27 2017, 18:43
Сообщение #19


Профессионал
*****

Группа: Участник
Сообщений: 1 165
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(jcxz @ Oct 27 2017, 21:23) *
можно вплотную приблизиться к пределу == 8.994 бит данных за такт на 9-разрядном параллельном интерфейсе.

Я так понимаю, что это число в итоге зависит от нестабильности кварцевых генераторов приемника и передатчика.
Если разница между частотами небольшая, то информация о тактовой частоте приемнику нужна реже. В противном случае, чаще.
Предел, равный 8.994 бита, соответствует одному 9-битному слову, отведенному для синхронизации, на 1500 информационных слов.
Почему именно такой предел?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 27 2017, 18:46
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 775
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(x736C @ Oct 27 2017, 21:43) *
Я так понимаю, что это число в итоге зависит от нестабильности кварцевых генераторов приемника и передатчика.
Если разница между частотами небольшая, то информация о тактовой частоте приемнику нужна реже. В противном случае, чаще.
Предел, равный 8.994 бита, соответствует одному 9-битному слову, отведенному для синхронизации, на 1500 информационных слов.

Нет. При чём тут частоты??? Никакие выделенные сигналы тактирования не нужны - сигнал тактирования можно подмешать в данные. Для достижения максимального использования линий.
Ещё раз: ключевой момент - смешивание сигналов тактирования и данных.

Предположим: для передачи можно использовать например 9 линий некоего параллельного интерфейса (D0...D8). Как наиболее оптимально их использовать с максимальной пропускной способностью при ограниченной полосе частот по этому интерфейсу?
Например так:
Имеем на входе поток байт. Преобразуем его в поток бит. Нарезаем этот поток на 9-битные символы. Их значения будут в диапазоне: 0...511.
Сигналом строба новых данных для приёмника будет изменение состояния линий D0...D8. Это значит, что для передачи слова символа X нужно проXORить его с текущим состоянием линий D0...D8.
Приёмник увидев изменение состояния D0...D8 воспринимает это изменение как сигнал строба и считывает данные, после чего делает XOR с предыдущим состоянием D0...D8 - получает
отправленный символ.
Но конечно так можно передать символы 1...511, а вот символ '0' так передать не удастся. А значит его надо экранировать из потока 9-битовых символов.
Также желательно иметь какой-то символ границы кадра. Например это символ '1'. Таким образом нужно преобразовать поток символов так, чтобы он содержал только символы 2...511.
Самый простой способ экранировать символы '0' и '1' из исходного потока - это типа как в протоколе SLIP для последовательных линий. Но конечно он имеет недостатки - может создавать избыточность передаваемых данных.
Можно придумать более сложные способы экранирования. И более эффективные.
Например:
Если реализовать многоразрядные операции умножения/деления, то можно очень эффективно преобразовать поток 0...511 в поток 2...511. А вот как раз диапазон 2...511 содержит 510 возможных значений, а это равно log(510)/log(2) = 8.994 бит.
Вобщем - если имеем умножитель на N разрядов (скажем 128, а может больше), то преобразуем 9-битовые символы в битовый поток, нарезаем его на сегменты разрядностью (N-9) бит, а далее: последовательно умножаем полученный сегмент на 511, после каждого умножения получая в старших 9 разрядах умножителя значения в диапазоне 0...510, прибавляем к ним 2 и передаём на XOR и в канал.
На приёмной стороне выполняем обратную операцию.
Чем больше разрядность N, тем эффективнее работает алгоритм (тем ближе он к пределу == log(510)/log(2)).
Ну и между кадрами вставляем символы границ кадра == '1' для кадровой синхронизации.
Go to the top of the page
 
+Quote Post
x736C
сообщение Oct 27 2017, 19:09
Сообщение #21


Профессионал
*****

Группа: Участник
Сообщений: 1 165
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(jcxz @ Oct 27 2017, 21:46) *
Нет. При чём тут частоты? Никакие выделенные сигналы тактирования не нужны - сигнал тактирования можно подмешать в данные. Для достижения максимального использования линий.

Видимо, вы меня не поняли. В конечном итоге все сводится все равно к разнице частот передатчика и приемника без ФАПЧ.
Для максимального использования линии для передачи информации необходимо свести к минимуму отношение служебной информации к полезным данным. А это напрямую зависит от нестабильности генераторов. Вы обозначили это отношение, как 1/1500.
Стало интересно, что за алгоритм. Почему именно такое отношение. На мой взгляд, очень неплохая цифра.

UPD. Написал ответ до того, как вы дополнили верхний пост.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 28 2017, 01:50
Сообщение #22


Гуру
******

Группа: Участник
Сообщений: 3 765
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(jcxz @ Oct 27 2017, 19:46) *
Ну и между кадрами вставляем символы границ кадра == '1' для кадровой синхронизации.

и при потере одного бита будет вылетать целый кадр ? или в среднем половина
а что будет, если происходит задержка одного или нескольких бит относительно других, как такое принять ?
что мешает "неэффективно" использовать девятый (восьмой) бит для простой и надёжной синхронизации ?
можно по обоим фронтам на половинной частоте, чтобы полосу не расширять
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 28 2017, 06:29
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 3 775
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Огурцов @ Oct 28 2017, 04:50) *
и при потере одного бита будет вылетать целый кадр ? или в среднем половина

Здесь интерфейс параллельный, а не последовательный - передаются слова.

Цитата(Огурцов @ Oct 28 2017, 04:50) *
а что будет, если происходит задержка одного или нескольких бит относительно других, как такое принять ?

Точно так же как при наличии отдельной линии стробирования.

Цитата(Огурцов @ Oct 28 2017, 04:50) *
что мешает "неэффективно" использовать девятый (восьмой) бит для простой и надёжной синхронизации ?

Мешает Ваше неумение читать исходные сообщения авторов тем.

Цитата(Огурцов @ Oct 28 2017, 04:50) *
можно по обоим фронтам на половинной частоте, чтобы полосу не расширять

Хоть по одному хоть по двум - всё равно используя все 9 бит для данных можно передавать быстрее.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 28 2017, 10:32
Сообщение #24


Гуру
******

Группа: Участник
Сообщений: 3 765
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(jcxz @ Oct 28 2017, 07:29) *
Здесь интерфейс параллельный, а не последовательный - передаются слова.

а как же это ?:
Цитата
преобразуем 9-битовые символы в битовый поток

любой сбой и весь поток накрылся

Цитата(jcxz @ Oct 28 2017, 07:29) *
Точно так же как при наличии отдельной линии стробирования.

нет, линия стробирования стробирует уже устоявшиеся данные
тогда как неустоявшиеся данные сами себя стробировать никак не могут - стробов будет 8 штук, по одному на каждую линию

Цитата(jcxz @ Oct 28 2017, 07:29) *
Мешает Ваше неумение читать исходные сообщения авторов тем.

вот пусть и он и ответит, дурацкие желания желательно как-то обосновывать

Цитата(jcxz @ Oct 28 2017, 07:29) *
Хоть по одному хоть по двум - всё равно используя все 9 бит для данных можно передавать быстрее.

в теории да, когда канал идеальный
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 28 2017, 13:27
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 3 775
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Огурцов @ Oct 28 2017, 13:32) *
а как же это ?:
любой сбой и весь поток накрылся

Читайте внимательнее: "это" - описание алгоритма работы ПО.

Цитата(Огурцов @ Oct 28 2017, 13:32) *
нет, линия стробирования стробирует уже устоявшиеся данные
тогда как неустоявшиеся данные сами себя стробировать никак не могут - стробов будет 8 штук, по одному на каждую линию

Почитайте ниже и подумайте "как":
for (;...; recentValue = newValue) {
while (ReadPort() == recentValue);
newValue = ReadPort();
...
}
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 28 2017, 14:48
Сообщение #26


Гуру
******

Группа: Участник
Сообщений: 3 765
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(jcxz @ Oct 28 2017, 13:27) *
Читайте внимательнее: "это" - описание алгоритма работы ПО.

алгоритм он или работает, или не работает, а уж в по он или в железе - не суть важно
вы берёте длинное число и последовательно его делите, любой сбой в любом бите приведёт к тому, что все последующие за сбоем данные будут не верны

Цитата(jcxz @ Oct 28 2017, 13:27) *
Почитайте ниже и подумайте "как":

да никак, я уже вижу

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

Сообщение отредактировал Огурцов - Oct 28 2017, 14:49
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 28 2017, 22:34
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 3 775
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Огурцов @ Oct 28 2017, 17:48) *
вы берёте длинное число и последовательно его делите, любой сбой в любом бите приведёт к тому, что все последующие за сбоем данные будут не верны

Когда включаете комп, не удивляетесь как это он работает? Ведь там миллиарды битов! А если в каком-то из этих битов случится сбой - ведь всё же сразу потеряется и все буковки перепутаются! Ужас!! smile3046.gif

Цитата(Огурцов @ Oct 28 2017, 17:48) *
слово гонки слышали когда-нибудь ?
хотя да, у вас же по, в по гонок не бывает

да уж... no comments... тот случай когда "слышал звон да не знаю где он" laughing.gif
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 29 2017, 01:29
Сообщение #28


Гуру
******

Группа: Участник
Сообщений: 3 765
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(jcxz @ Oct 28 2017, 22:34) *
Когда включаете комп, не удивляетесь как это он работает? Ведь там миллиарды битов! А если в каком-то из этих битов случится сбой - ведь всё же сразу потеряется и все буковки перепутаются! Ужас!!

там везде стробирование, вот ничего и не путается

Цитата(jcxz @ Oct 28 2017, 22:34) *
да уж... no comments... тот случай когда "слышал звон да не знаю где он"

вы не поверите, и там - тоже



Go to the top of the page
 
+Quote Post
kolobok0
сообщение Oct 29 2017, 12:33
Сообщение #29


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 103
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(IJAR @ Oct 27 2017, 11:57) *
Возможно ли создать или существует ...будут только шины передачи данных (например 8) ...


странный вопрос, от опытного товарища и с большим опытом в данной области.
собственно ответ прозвучал - на стандартном centronics-е делали в своё время и свои, на какой нить 8255 (PPI) - сразу 24 пина (8+8+2*4) и дистанционно сливали-форматировали винты,
до эпохи сетевых карт, при ремонте писюков...по разному было..

Если чиссо по теме - ближе помнится мне, решение связи по стандартному LPT с передачей по полубайту в одну сторону. С полной шинкой(8бит) получается полный дуплекс(по 4) постоянно. При этом
по скорости лучше подходит стробирование делать на аппаратном уровне(+1 бит в каждую сторону, в данном примере), а подтверждение достоверности - софтово.

как то так
(круглый)
ЗЫ
Параллельным имхо, обзываем возможность засунуть одинаковые по типу сигналы на физ. уровне за один строб(как физический так и логический - пофигу) передачи.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 29 2017, 13:57
Сообщение #30


Гуру
******

Группа: Участник
Сообщений: 3 765
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



с некоторого весьма далёкого времени lpt имел двунаправленный режим и стробирование на аппаратном уровне
так что передавать половинки вместо целого байта было бы весьма криво, медленно и вообще неправильно
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st November 2017 - 19:14
Рейтинг@Mail.ru


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