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

 
 
> RS-232 + FPGA
maksya
сообщение May 18 2006, 20:52
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-08-04
Из: Ленинград
Пользователь №: 562



Доброго времени суток, уважаемые.

Есть задача: между платой и датчиками существует RS-232 канал, точнее 3 канала в направлении от платы к датчикам и 3 - противоположном. Цель - обеспечить работоспособность этой связки.

В качестве ядра системы предполагаю использовать FPGA (естественно не только для целей обмена с датчиками). Если Я правильно понимаю, то придется ставить внешние микросхемы (типа MAX220–MAX249) для преобразования уровней TTL <-> RS-232. Остается дело за малым - реализовать в системе приемопередатчики. С этого момента постараюсь раскрыть проблему более подробно.

С передатчиком более-менее понятно: типичный Serializer с двумя регистрами и одним PLL (старт_бит:байт_данных:контроль:стоп_бит и все это наружу). С приемником сложнее: только deserializer'ом, наверное, обойтись не получится sad.gif

В классическом представлнии (в соответствии с остаточными знаниями, полученными в ВУЗе) приемник должен запустить свой внутренний генератор (работающий с частотой, например, в 16 раз превышающей бодовую) после обнаружения на линии перехода сигнала с 1 в 0, т.е. обнаружения старт-бита. Через 8 импульсов после этого события еще раз проверяем состояние линии, и если там 0, то считаем что пришел старт-бит. Далее входной поток мереем через каждые 16 тактов (т.е. с бодовой скоростью), предположительно попадая на середину бита. Записав биты в регистр, проверяем четность, наличие стоп-бита и все по-новой.

Помимо попытки вычисления значения бита в середине интервала, Я встречал еще в литературе варианты когда в битовом интервале производится 3 выборки и по мажоритарному принципу определяется значение.

Теперь к вопросу реализации:

Вариант 1. Брать внешнюю миросхему с реализованным UART'ом. Вроде Intel 8251 для этих целей используется в качестве внешнего устрйоства процессора. Есть и встроенные в корпус МК UART'ы, но ставить МК на плату только ради этих целей как-то нелепо. Кстати, а существует ли вариант, объединяющий UART с драйвером RS-232?

Вариант 2. Самому делать на FPGA. В этом случае Я вижу несколько проблем:
- как мне осуществить "запуск" генератора приемника при обнаружении старт-бита?
- т.к. мне требуется реализовать 3 передатчика и 3 приемника RS-232, и скорее всего эти каналы будут работать независимо друг от друга, то вроде как получается, чересчур большие затраты по количеству PLL-ресурсов. Как бы не вышло, что придется ставить несколько ПЛИС...

Нашел в закромах VHDL код UART'а (прикладываю в тему). Бегло просмотрев код, выявил для себя одну интересную вещь - там используется CLK в 4 раза быстрее бодовой скорости, производится выборка значения бита 3 раза за интервал. Т.е. если вдвинутое из Rx-линии в трехразрядный регистр значение = 000, то считаем, что пришел старт-бит. Далее - по алгоритму. Насколько такой способ отражает реальные потребности реализации? Влиять на UART на стороне датчиков не представляется возможным. Всвязи с этим непонятно, будет ли всегда данные от датчика адекватно приниматься в FPGA'шный приемник.

И еще - встречал в каких-то статьях, что в FPGA встраиваются блоки SERDES. В hepl'е Quartus'а говорится что вроде как в Stratix'е есть такая возможность. Кто-нибудь работал с ними? И не слишком ли "жирно" будет использовать такие SERDES для 115 Кбит/с?

Быть может Я делаю из РПГ-18 (гранатомет "муха") слона, и задача решается современными средствами намного проще? Вообщем если у кого есть опыт общения с датчиками по RS-232, то просьба поделиться знаниями.

P.S.: Резюмируя вышесказанное, прошу по возможности ответить на следующие вопросы:
1. Применяются ли сейчас отдельные микросхемы UART'ов? Есть ли варианты UART+драйвер RS-232 в одном корпусе?
2. Обязательно ли использовать PLL для этой задачи?
3. Приложенный VHDL код UART'а (или аналогичный ему) может гарантировать правильный обмен информацией?
4. К месту ли применение аппаратных встроенных в ПЛИС блоков SERDES?
5. Есть ли у кого опыт решения похожей задачи?
Прикрепленные файлы
Прикрепленный файл  hUART.zip ( 2.07 килобайт ) Кол-во скачиваний: 303
 


--------------------
Лень - это не врожденное чувство русского человека, а средство борьбы с неуемной, но бестолковой энергией начальника.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kopart
сообщение Jul 6 2006, 08:13
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 1-03-05
Из: Spb
Пользователь №: 2 972



Цитата(Wild @ Jul 3 2006, 19:41) *
Позвольте с вами не согласиться. Стоповый бит необходим для того чтобы устанавливать синхронизацию приемника и передатчика, так как в общем случае два уарта работают на немного разных частотах необходимо более или менее точно определить момент начала передачи байта, чтобы даже после небольшой рассинхронизации можно было быть уверенным, что снимаемое с линии значение последнего бита, действительно соответствует последнему биту а не соседнему сним.

Если в схеме с делением битового интервала на 16 частей и выборке 3х средних значений, к моменту приема последнего бита такая выборка может "уплыть" от центра битового интервала к его краю, то есть на время, приблизительно равное половине битового интервала, то при предложенном NIOSом методе, искажение данных произойдет, если выборка "уплывет" хотя бы на треть.

Макс возможный случай - что к приему стопового бита генератор уплывет на треть длительности БИТА.
Прикинем какое должно быть рассогласование опорных генераторов, чтобы выборка уплыла на треть.
Макс скорость передачи 128000, максимально возможно бит = 1+8+1+2 = 12
Те за 93.75мкс частота должна уйти на 2.604мкс не более 2.7% (это для частоты 128кГц)
В вашем случае (1/2 бита) получается не более 4.1%
Стабильность генератора не хуже 10^-6 те 0.0001%.
А вот точность, сейчас программируемых генераторов, я на вскидку не скажу - это уже другой вопрос, который также актуален при рассогласовании в 1/2 бита.
Те жертвуя 1/2-1/3 ~= 0.16 бита Вы получает удобство по компактности реализации и простоте алгоритма приема.

Цитата(sazh @ Jul 4 2006, 20:56) *
Мне вообще непонятно для чего в приемнике эта мажоритарность. Это же не МК. По большому счету и подход при работе с собственным клоком, позволяющий нащупать середину стартового бита, отрицает необходимость мажоритарности. Если Вы досчитали до середины стартового бита, попали в энегетический центр сигнала, зачем анализировать, что слева или справа. Разве это улучшит надежность приемника. Да только ухудшит, если рассогласования частот приемника и передатчика значимы. У меня подход прост.

Логика проста: Первый МЖФ - простейщий фильтр на входе в ПЛИС (получще будет чем стробирование)
- к минимум задача фильтровать пички.
Второй МЖФ нужен по идее метода - определять значения бодовых битов (+не учитывать, если выборка попадет на перепад сигнала)

Если просто сравнивать с тем, что предлагает Вы - мне не требуется точно определять начала стартового бита, чтобы потом попасть на середину. Я работаю максимально с частотой в 3 раза больше бодовой, а Вам нужно довольно точно защелкивать, чтобы быть увереным, что попали в середину.
А определение начала и конца "посылки" в моем методы тоже присутствует - в КА, и не требует такой точности.


--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
Go to the top of the page
 
+Quote Post
javalenok
сообщение Jul 10 2006, 08:57
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 18-02-06
Пользователь №: 14 469



Допустим один проголосовал против -- и что дальше? Правильные голоса появились -- мажоритарность можно реализовать проще -- выборкой 1-го бита в середине битового интервала. Какой смысл пропускать ряд пичков 1010101010 -- не понял. Это как-то повышает надёжность? Ещё не понял, как без стопового бита вы будете засекать появление стартового, ведь последний бит данных может быть нулём, т.е. неразличим от старта.

И ещё, когда считаете погрешности рассинхронизации, не забывайте, что передискретизация 16х сама по себе даёт задержку до 6,5% от настоящего старт-фронта. При эхо-тестировании приёмопередатчика длинными потоками у меня случались сбои. Чтобы ошибка не накапливалась, сбрасывать приёмник надо в середине стоп-бита.

Никто не сказал ничего вразумительного про метастабильность, но в примере который я брал за основу применялся синхронизатор. Видимо он нужен чтоб предотвратить "непонятки" когда Rx зависает между небом и землёй и вся логика, на нём завязанная, интерпретирует уровень на своё усмотрение, приводя автомат в полный беспорядок.

Но вообще идея использовать сдвиг вместо подсчёта бит заслуживает рассмотрения. Парадоксально, но декодер на N адресов в FPGA занимает вдвое больше ресурсов, чем цепочка из N FF-ов.
Go to the top of the page
 
+Quote Post
Kopart
сообщение Jul 10 2006, 10:20
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 1-03-05
Из: Spb
Пользователь №: 2 972



Цитата(javalenok @ Jul 10 2006, 12:57) *
Вы хоть обозначайте кому пишите! А лучше ставьте цитаты, того на что отвечаете.
Про комментирую то, что покажется обращено ко мне.

Цитата
Допустим один проголосовал против -- и что дальше? Правильные голоса появились -- мажоритарность можно реализовать проще -- выборкой 1-го бита в середине битового интервала. Какой смысл пропускать ряд пичков 1010101010 -- не понял. Это как-то повышает надёжность? Ещё не понял, как без стопового бита вы будете засекать появление стартового, ведь последний бит данных может быть нулём, т.е. неразличим от старта.

Тут вопрос определения "середины битового интервала" (для этого "точно" надо знать начала стартового бита)
А с МЖФ не надо синхронизоватся - сам поймет "опосля" - вот уже стартовый "ноль" - надо бы начать вдвигать. Плюс фильтруются пологие фронты, спады.
Я изначально "вдвиговый" регистр инициализурую всеми "1", и как стартовый добрался до определенной ячейки (последней, предпоследней, i-ой) - понимаю сколько принял, и жду дальше/сравниваю (четность)/сбрасываю приемник(с задержкой) - в паралель (это же ПЛИС)
Цитата
И ещё, когда считаете погрешности рассинхронизации, не забывайте, что передискретизация 16х сама по себе даёт задержку до 6,5% от настоящего старт-фронта.

Поподробнее откуда такие циферки?
В моем способе синхронизация не требуется... (это паралельный процесс)
Цитата
Никто не сказал ничего вразумительного про метастабильность, но в примере который я брал за основу применялся синхронизатор. Видимо он нужен чтоб предотвратить "непонятки" когда Rx зависает между небом и землёй и вся логика, на нём завязанная, интерпретирует уровень на своё усмотрение, приводя автомат в полный беспорядок.
Но вообще идея использовать сдвиг вместо подсчёта бит заслуживает рассмотрения. Парадоксально, но декодер на N адресов в FPGA занимает вдвое больше ресурсов, чем цепочка из N FF-ов.

+ если я правильно понял - то нужен еще счетчик битов([3:0] макс до 12)

Из непонятного состояния всегда можно выйти по таймауту.


--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
Go to the top of the page
 
+Quote Post
javalenok
сообщение Jul 10 2006, 11:18
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 18-02-06
Пользователь №: 14 469



Цитата(NiOS @ Jul 10 2006, 13:20) *
Цитата

Допустим один проголосовал против -- и что дальше? Правильные голоса зазвучали -- мажоритарность можно реализовать проще -- выборкой 1-го бита в середине битового интервала. Какой смысл пропускать ряд пичков 1010101010 -- не понял. Это как-то повышает надёжность? Ещё не понял, как без стопового бита вы будете засекать появление стартового, ведь последний бит данных может быть нулём, т.е. неразличим от старта.

Тут вопрос определения "середины битового интервала" (для этого "точно" надо знать начала стартового бита)
А с МЖФ не надо синхронизоватся - сам поймет "опосля" - вот уже стартовый "ноль" - надо бы начать вдвигать. Плюс фильтруются пологие фронты, спады.
Я изначально "вдвиговый" регистр инициализурую всеми "1", и как стартовый добрался до определенной ячейки (последней, предпоследней, i-ой) - понимаю сколько принял, и жду дальше/сравниваю (четность)/сбрасываю приемник(с задержкой) - в паралель (это же ПЛИС)

В моем способе синхронизация не требуется... (это паралельный процесс)


Да, ну и откуда ты узнаешь, что подступил новый байт? Выбирать надо в серёдке, для этого надо сделать отступ от переднего фронта старт-бита. Далее, как ты определишь, что пора сдвигать, если не по собственным часам? Ведь rs232 -- не манчестер и данные не несут синхроинформации в каждом инфобите. В довершение вы собирались отказаться от стопового. Представим, что стартовый и все данные -- нули. Ну и как без стопа узнать о начале нового кадра?

И в порядке любопытства, вы не ответили чем мажоритарный фильтр, манкирующий временную информацию, лучше обычного гистерезиса низких частот, пропускающего только те образцы, что похожи на соседей? Вам фильтрация нужна, как я догадываюсь, именно для предотвращения ложных срабатываний (сдвигов). Это связанно с вашей оригинальной схемой синхронизации (предполагающей, отсутствие синхронизации? -- извините, не понял до конца всей магии). Делаю вывод, что в схеме с центральной выборкой фильтровать нечего, если конечно вы не собираетесь докладывать пользователю об ошибках/подозрениях.

Цитата(NiOS @ Jul 10 2006, 13:20) *
Цитата

И ещё, когда считаете погрешности рассинхронизации, не забывайте, что передискретизация 16х сама по себе даёт задержку до 6,5% от настоящего старт-фронта.

Поподробнее откуда такие циферки?


1/16 * 100%



Цитата(NiOS @ Jul 10 2006, 13:20) *
Цитата

Никто не сказал ничего вразумительного про метастабильность, но в примере который я брал за основу применялся синхронизатор. Видимо он нужен чтоб предотвратить "непонятки" когда Rx зависает между небом и землёй и вся логика, на нём завязанная, интерпретирует уровень на своё усмотрение, приводя автомат в полный беспорядок.
Но вообще идея использовать сдвиг вместо подсчёта бит заслуживает рассмотрения. Парадоксально, но декодер на N адресов в FPGA занимает вдвое больше ресурсов, чем цепочка из N FF-ов.

+ если я правильно понял - то нужен еще счетчик битов([3:0] макс до 12)

Из непонятного состояния всегда можно выйти по таймауту.


Тут тоже какое-то досадное замешательство. Полагаю от того, что вопрос-ответ приводится в стековой последовательности и надо читать:
[1]
- Никто не сказал про метастабильность, ... автомат в полный беспорядок.
+ Из непонятного состояния всегда можно выйти по таймауту.


[2]
- идея использовать сдвиг вместо подсчёта бит заслуживает рассмотрения. декодер на [i]N адресов в FPGA занимает вдвое больше ресурсов, чем цепочка из N FF-ов.
+ если я правильно понял - то нужен еще счетчик битов([3:0] макс до 12)[/i]

На первое отвечу, что идея использовать противозависательный монитор конечно имеет право на сущетвование, но более правильная позиция, на мой взгляд такая: компьютер не должен сходить с ума при подаче на него асинхронного, но допустимого сигнала. Да и быстрым грязным хаком попахивает. Я считаю, что лечением симптомов промышлют недобросовестные, недобропорядочные люди, это их отличительная черта.

Ну а что до подсчёта бит, разве мыслимо его вести без счётчика?

Сообщение отредактировал javalenok - Jul 10 2006, 11:26
Go to the top of the page
 
+Quote Post
Kopart
сообщение Jul 11 2006, 08:35
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 1-03-05
Из: Spb
Пользователь №: 2 972



Цитата(javalenok @ Jul 10 2006, 15:18) *
Да, ну и откуда ты узнаешь, что подступил новый байт?

Есть "фильтр" на входе сигнала RX в ПЛИС
У меня это сделано с помощью МЖФ (фильтрует лучше), но можно и просто стробировать основной частотой проекта.
На выходе(когда автомат в idle) появился "0" - переходим в прием (STATE_RECEIVE)
Цитата
Выбирать надо в серёдке, для этого надо сделать отступ от переднего фронта старт-бита. Далее, как ты определишь, что пора сдвигать, если не по собственным часам?

ЕЩЕ раз - я не выбираю в середке!!!
У меня ВСЕГДА есть утроенная частота бодовой скорости (Я ее НЕ синхронизую со стартом!!!)
Далее (когда в состоянии STATE_RECEIVE) - считаю эту частоту и по каждому третьему фронту вдигаю в регистр выход МЖФ (его код уже приводил(там есть enable))

Для кого-то в коде понятней smile.gif
Код
if(STATE_RECEIVE & counter==2'h3)
           rx_reg[9:0] <= #T {out(MZHF),rx_reg[9:1]};

Цитата
В довершение вы собирались отказаться от стопового. Представим, что стартовый и все данные -- нули. Ну и как без стопа узнать о начале нового кадра?

ЕЩЕ раз повторяю - я знаю сколько битов в "бодовом байте" - те выбрал глубину сдвигового регистра.
!!!!!!!!!!!!!!!В "idle" я его устанавливаю всеми "1" и вдвигаю ВСЕ биты и СТАРТ!!!!!!!!!!!!!!!!!!!!!!!!
Стартовый ВСЕГДА "0" - на пример вдвигаю с "конца" - добрался "0" до "начала" регистра - значит стоповый уже вдвинулся.
Цитата
И в порядке любопытства, вы не ответили чем мажоритарный фильтр, манкирующий временную информацию, лучше обычного гистерезиса низких частот, пропускающего только те образцы, что похожи на соседей? Вам фильтрация нужна, как я догадываюсь, именно для предотвращения ложных срабатываний (сдвигов).

Я наверное не столь продвинут в фильтрации. Но о Вашем вопросе с умными словами нужно думать вместе с теорией фильтров и спектрами пропушенных сигналов. Да и вопрос зачем? Задача немного другая. Хотя (если сможете) приведите HDL описание "обычного гистерезиса низких частот, пропускающего только те образцы, что похожи на соседей?" - может вы о простых вещах по умному smile.gif

Опять повторяю - фильтрация нужна - чтобы не синхронизоватся и при этом ДВА отсчета будут около центра бита

Цитата
Ну а что до подсчёта бит, разве мыслимо его вести без счётчика?

Ваше сообщение "Парадоксально, но декодер на N адресов в FPGA занимает вдвое больше ресурсов, чем цепочка из N FF-ов."
Декодер на N адрессов можно реализовать и без счетчика smile.gif

Но учитывай, что прийдется дабовлять как минимум один лишний FF в цепочку - для старта smile.gif


--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
Go to the top of the page
 
+Quote Post
javalenok
сообщение Jul 11 2006, 10:26
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 18-02-06
Пользователь №: 14 469



Цитата(NiOS @ Jul 11 2006, 11:35) *
Я наверное не столь продвинут в фильтрации. Но о Вашем вопросе с умными словами нужно думать вместе с теорией фильтров и спектрами пропушенных сигналов. Да и вопрос зачем? Задача немного другая. Хотя (если сможете) приведите HDL описание "обычного гистерезиса низких частот, пропускающего только те образцы, что похожи на соседей?" - может вы о простых вещах по умному smile.gif

Опять повторяю - фильтрация нужна - чтобы не синхронизоватся и при этом ДВА отсчета будут около центра бита


Я сам принцып FIR фильтра представляю лишь отдалённо, но фильтр низких частот (сглаживающий) должен пропускать только стабильный сигнал, убирая переменную составляющюю. Вы говорите, что мажоритарный подавляет случайные пички. Но каким же образом, если он у вас пропустит 10101010 -- сплошные пички? "Пропускать только те образцы, что похожи на соседей" -- это и есть фильтр низких частот, вам уже задвали вопрос о двух одниаковых значениях подряд. В чередующемся ряду 10101010 все соседние значения отличны. Фильтр низких частот должен сгладить ряд и получить среднее значение 0.5 -- где-то по-середине между 0 и 1. Имеет место неопределённость. 0 тянет "вниз", 1 -- "наверх", в среднем движения не происходит. ФНЧ с 2-значной историей решит эту задачу -- будет считать, что значение не меняется. Все пички отфильтруются. Так чем мажоритарный лучше? По-моему, пичков вообще быть не должно, самое точное значение в центре, а не на границе бита.



Цитата(NiOS @ Jul 11 2006, 11:35) *
ЕЩЕ раз - я не выбираю в середке!!! У меня ВСЕГДА есть утроенная частота бодовой скорости (Я ее НЕ синхронизую со стартом!!!) Далее (когда в состоянии STATE_RECEIVE) - считаю эту частоту и по каждому третьему фронту вдигаю в регистр выход МЖФ (его код уже приводил(там есть enable))

1-й и 3-й -- это как раз граничные обрызцы, они могут относится к другому биту. Вы же их цените на равне со средним. Может ну их, эти выборы -- баловство? Просто сдвигать в данные состояние среднего когда счётчик сэмплов переваливает через 2? И вообще от посреднечества сдвигового регистра отказаться, грузить Rx прямо в rx_reg[0]? У меня именно так сделано -- без детских игр в голосование. Так что я думаю вопрос Вильда: "NIOS, решение предложенное вами безусловно имеет право на существование. Кстати интересно, Ваш уарт занимал бы меньше вышеописанного, если бы у него была такая же функциональность?" имеет отницательный ответ. Ваша конструкция -- избыточна, она сложнее аналогов и не имеет права на существование.



И для чего вы выход своего mzf регистра дополнительно регистируете? Конвееризация biggrin.gif ?


Цитата(NiOS @ Jul 11 2006, 11:35) *
ЕЩЕ раз повторяю - я знаю сколько битов в "бодовом байте" - те выбрал глубину сдвигового регистра.
!!!!!!!!!!!!!!!В "idle" я его устанавливаю всеми "1" и вдвигаю ВСЕ биты и СТАРТ!!!!!!!!!!!!!!!!!!!!!!!!
Стартовый ВСЕГДА "0" - на пример вдвигаю с "конца" - добрался "0" до "начала" регистра - значит стоповый уже вдвинулся.

Я тоже знаю сколько бит в кадре (выражение "бодовый байт" слышу впервые, смысл не ясен). Но это не значит, что стоповый бит смысла не имеет. Он необходим для отделения начала нового кадра. Старт можно гарантированно увидеть только на фоне стопа.

Значит у вас вместо 10-битного счётчика принятых бит используется 10-битный сдвиговый регистр иль вы его как-то совмещаете с регистром принимаемых данных? Если первое, что что-то мне подсказывает, что счётчиком счетать биты эффективнее.



Цитата(NiOS @ Jul 11 2006, 11:35) *
Ваше сообщение "Парадоксально, но декодер на N адресов в FPGA занимает вдвое больше ресурсов, чем цепочка из N FF-ов."
Декодер на N адрессов можно реализовать и без счетчика smile.gif

Но учитывай, что прийдется дабовлять как минимум один лишний FF в цепочку - для старта smile.gif


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

Заменить счётчик + декодер на один сдвиговый регистр, пускай длины +1, не получится. Нужно два сдвиговых: первый 8 бит для приёма данных и другой -- круговая лента 10-ти состояний FSM приёмника (приём старт, данных, стопа). Так вот принимать данные мне кажется экономнее в сдвиговый регистр по сравнению с кодированными ячейками, а состояние машины всёж лучше держать в счётчике, благо полного декодирования для управления машиной не требуется, поскольку автомат должен вести себя одинаково для всех бит данных и синтезатор должен это здорово оптимизировать.

Сообщение отредактировал javalenok - Jul 11 2006, 10:44
Go to the top of the page
 
+Quote Post
Kopart
сообщение Jul 12 2006, 07:03
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 1-03-05
Из: Spb
Пользователь №: 2 972



Цитата(javalenok @ Jul 11 2006, 14:26) *
Но каким же образом, если он у вас пропустит 10101010 -- сплошные пички?

Вы знаете что такое простое "стробирование по входу" - так вот МЖФ на входе это просто лучше.
При таком сигнале на входе Вам ни какой фильтр не позволит принять сигнал стандарта RS-232.
Речь шла о статистически случайных одиночных пичках сигнала на паде ПЛИС, которые МЖФ сглаживает лучше, чем стробирование.
Цитата
1-й и 3-й -- это как раз граничные обрызцы, они могут относится к другому биту. Вы же их цените на равне со средним. Может ну их, эти выборы -- баловство?
И вообще от посреднечества сдвигового регистра отказаться, грузить Rx прямо в rx_reg[0]? У меня именно так сделано -- без детских игр в голосование.


Нельзя ориентироватся по среднему - тк я не синхронизую отсчеты с началом бита и этот средний не будет в центре - в центре будет другой средний smile.gif smile.gif smile.gif

Так там Verilog'ом по белому и написано, что "грузится Rx прямо в rx_reg[0] "

Цитата
И для чего вы выход своего mzf регистра дополнительно регистируете? Конвееризация biggrin.gif ?

В каком месте (коде) я это написал????

Цитата
Но это не значит, что стоповый бит смысла не имеет. Он необходим для отделения начала нового кадра. Старт можно гарантированно увидеть только на фоне стопа.

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

Цитата
Значит у вас вместо 10-битного счётчика принятых бит используется 10-битный сдвиговый регистр иль вы его как-то совмещаете с регистром принимаемых данных?

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

Понятие "декодер" - в оригинале это просто демукс, а счетчик это уже другое понятие smile.gif


--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- maksya   RS-232 + FPGA   May 18 2006, 20:52
- - ASN   maksya Я бы поставил простенький МК + драйвер. На ...   May 18 2006, 21:09
- - Chudik   Присоединяюсь к ASN: почему бы не поставить махонь...   May 19 2006, 00:03
- - prototype   Насколько мне известно, в классическом построении ...   May 19 2006, 04:48
- - vladec   Зачем чего то придумывать? У Xilinx-а есть готовые...   May 19 2006, 05:21
- - iosifk   Цитата(maksya @ May 19 2006, 00:52) В кач...   May 19 2006, 05:44
|- - NiOS   Цитата(iosifk @ May 19 2006, 09:44) Цитат...   May 19 2006, 07:42
- - sazh   А хорошо Вам преподавали в Вузе. Налицо подход нас...   May 19 2006, 06:35
- - Motorhead   Цитата(maksya @ May 19 2006, 00:52) P.S.:...   May 19 2006, 09:14
- - Alexandr   Однозначно за ПЛИС. PLL не нужна - у Вас на ПЛИС в...   May 19 2006, 12:04
|- - ASN   Alexandr На МК удобно реализовать протокол обмена ...   May 19 2006, 19:30
|- - Alexandr   Цитата(ASN @ May 19 2006, 23:30) Alexandr...   May 19 2006, 20:01
|- - ASN   Alexandr А вот если адаптировать систему под любой...   May 20 2006, 04:56
|- - maksya   Цитата(Alexandr @ May 20 2006, 00:01) Да,...   May 20 2006, 10:07
|- - NiOS   Цитата(Alexandr @ May 20 2006, 00:01) Да,...   May 20 2006, 19:49
||- - Motorhead   [quote name='NiOS' date='May 20 2006, ...   May 22 2006, 10:59
|||- - Gorby   [quote name='Motorhead' date='May 22 2...   May 22 2006, 12:20
|||- - NiOS   Цитата(Motorhead @ May 22 2006, 14:59) 2 ...   May 22 2006, 12:22
|||- - Motorhead   Цитата(NiOS @ May 22 2006, 16:22) Цитата(...   May 22 2006, 12:43
|||- - NiOS   Цитата(Motorhead @ May 22 2006, 16:43) Вс...   May 22 2006, 12:52
||- - sanek78   Цитата(NiOS @ May 20 2006, 21:49) Для чег...   Sep 26 2006, 09:15
||- - NiOS   Цитата(sanek78 @ Sep 26 2006, 13:15) Спас...   Sep 27 2006, 18:01
|- - Vital_100   Никогда не писал кода для RS, но когда потребовало...   May 27 2006, 04:34
|- - afsh   С метастабильностью полный порядок, ибо генератор ...   May 30 2006, 18:00
- - Iouri   http://www.quicklogic.com/images/appnote20.pdf по...   May 19 2006, 12:27
- - maksya   Прям мозговой штурм какой-то 7.5 : 2.5 в пользу ...   May 19 2006, 19:39
- - rezident   Микроконтроллер нужно выбирать в соответствии с пр...   May 19 2006, 19:39
- - prototype   ЦитатаНасчет мажоритара - если частота выборки зна...   May 20 2006, 04:44
- - DeadMoroz   Если Вам необходим микроконтроллер с 3мя UARTами, ...   May 20 2006, 08:56
- - sazh   To NIOS Хороший подход. Можно пойти еще дальше. От...   May 21 2006, 10:56
|- - NiOS   Цитата(sazh @ May 21 2006, 14:56) To NIOS...   May 22 2006, 10:26
|- - Wild   Цитата(sazh @ May 21 2006, 14:56) To NIOS...   Jul 3 2006, 15:41
- - grigorybold   ЦитатаВариант 2. Самому делать на FPGA. В этом слу...   Jul 3 2006, 10:58
- - sazh   Не надо вырывать эту фразу из контекста обсуждения...   Jul 3 2006, 18:38
|- - Wild   Цитата(sazh @ Jul 3 2006, 22:38) Не надо ...   Jul 4 2006, 10:10
- - vikk   круто! ну вы блин даете! этож можно чело...   Jul 4 2006, 11:27
- - sazh   To Wild. Вы все правильно говорили. А я не шутил. ...   Jul 4 2006, 16:56
|- - Wild   http://www.xilinx.com/xlnx/xweb/xil_tx_dis...hX_ID...   Jul 10 2006, 12:10
|- - javalenok   Цитата(NiOS @ Jul 12 2006, 10:03) Цитата(...   Jul 12 2006, 14:18
- - NiOS   А есть ли смысл разговаривать с человеком, который...   Jul 12 2006, 15:05
|- - javalenok   Цитата(NiOS @ Jul 12 2006, 18:05) 1. Да с...   Jul 13 2006, 00:42
- - sazh   TO NIOS: А не могли бы Вы привести схему Вашего пр...   Jul 12 2006, 18:45
|- - NiOS   Цитата(sazh @ Jul 12 2006, 22:45) TO NIOS...   Jul 13 2006, 08:01
- - NiOS   //Как можно не считая биты узнать, что кадр окончи...   Jul 13 2006, 07:26
- - sazh   Сам текст понятен. А вот идея всегда будет вызыват...   Jul 13 2006, 09:46
|- - NiOS   Цитата(sazh @ Jul 13 2006, 13:46) Сам тек...   Jul 13 2006, 10:02
- - sazh   Reset не обязателен. Система сама должна переходит...   Jul 13 2006, 10:13
|- - javalenok   Теперь понял. Отслеживалка числа принятых битов со...   Jul 13 2006, 12:32
|- - NiOS   Цитата(sazh @ Jul 13 2006, 14:13) Reset н...   Jul 13 2006, 14:48
- - sazh   Этот ресет нужен обязательно при включении питания...   Jul 13 2006, 16:49
|- - NiOS   Цитата(sazh @ Jul 13 2006, 20:49) Этот ре...   Jul 18 2006, 09:08
- - sazh   Что-то вы не сразу догадались про определение не S...   Jul 18 2006, 18:57
|- - NiOS   Цитата(sazh @ Jul 18 2006, 22:57) Что-то ...   Jul 19 2006, 06:52
- - sanek78   Я диплом пишу, поэтому результат может быть только...   Sep 28 2006, 12:14
- - Леха   Товарищи, а если FPGA (ACEX) висит на PCI, то чем ...   Nov 22 2006, 10:58
|- - klop   Цитата(Леха @ Nov 22 2006, 10:58) Товарищ...   Nov 22 2006, 12:17
- - Леха   Посчитать не влом. Вопрос про корректность и надёж...   Nov 22 2006, 12:27
|- - klop   Цитата(Леха @ Nov 22 2006, 12:27) Посчита...   Nov 22 2006, 13:03
- - oval   Цитата(Леха @ Nov 22 2006, 10:58) Товарищ...   Nov 22 2006, 13:09
- - sazh   Проще Для Вас От PCI клок взять. А вообще все равн...   Nov 22 2006, 13:23
- - Леха   to sazh: Не совсем понял. Например, я рассчитаю с...   Nov 22 2006, 13:45
- - sazh   Не совсем понял. Например, я рассчитаю свой UART д...   Nov 22 2006, 14:12
|- - Леха   Цитата(sazh @ Nov 22 2006, 15:12) Если ве...   Nov 22 2006, 15:13
- - oval   Цитата(Леха @ Nov 22 2006, 13:45) to oval...   Nov 22 2006, 14:52
- - sazh   Вы правы. всегда найдутся любители журнала Upgrade...   Nov 22 2006, 15:32
|- - Oldring   Цитата(sazh @ Nov 22 2006, 15:32) Вы прав...   Nov 22 2006, 16:23
- - DeadMoroz   я использовал PCI клок для UART в двух проектах, ...   Nov 23 2006, 02:40
|- - rv3dll(lex)   насчёт того, что не должно быть сбросов полностью ...   Oct 22 2007, 11:11
|- - sazh   Цитата(rv3dll(lex) @ Oct 22 2007, 15...   Oct 22 2007, 13:07
|- - NiOS   Цитата(rv3dll(lex) @ Oct 22 2007, 15...   Oct 22 2007, 13:28
|- - rv3dll(lex)   Цитата(NiOS @ Oct 22 2007, 17:28) Стандар...   Oct 23 2007, 10:17
|- - NiOS   Цитата(rv3dll(lex) @ Oct 23 2007, 14...   Oct 23 2007, 10:38
||- - rv3dll(lex)   Цитата(NiOS @ Oct 23 2007, 14:38) На этом...   Oct 23 2007, 12:40
||- - NiOS   Цитата(rv3dll(lex) @ Oct 23 2007, 16...   Oct 23 2007, 12:51
||- - sazh   Цитата(rv3dll(lex) @ Oct 23 2007, 16...   Oct 23 2007, 14:04
||- - NiOS   Цитата(sazh @ Oct 23 2007, 18:04) А если ...   Oct 23 2007, 14:35
||- - rv3dll(lex)   Цитата(NiOS @ Oct 23 2007, 18:35) К слову...   Oct 24 2007, 06:28
|- - mse   Цитата(rv3dll(lex) @ Oct 23 2007, 14...   Oct 24 2007, 07:38
|- - rv3dll(lex)   Цитата(mse @ Oct 24 2007, 11:38) Это ерун...   Oct 24 2007, 11:09
|- - mse   Цитата(rv3dll(lex) @ Oct 24 2007, 14...   Oct 24 2007, 11:10
- - Stas   To NIOS: 1. Спору нет, вроде схема рабочая но для ...   Feb 16 2008, 06:44
- - NiOS   Цитата(Stas @ Feb 16 2008, 09:44) To NIOS...   Feb 16 2008, 19:39


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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 18:23
Рейтинг@Mail.ru


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