|
RS-232 + FPGA |
|
|
|
May 18 2006, 20:52
|
Местный
  
Группа: Свой
Сообщений: 253
Регистрация: 28-08-04
Из: Ленинград
Пользователь №: 562

|
Доброго времени суток, уважаемые. Есть задача: между платой и датчиками существует RS-232 канал, точнее 3 канала в направлении от платы к датчикам и 3 - противоположном. Цель - обеспечить работоспособность этой связки. В качестве ядра системы предполагаю использовать FPGA (естественно не только для целей обмена с датчиками). Если Я правильно понимаю, то придется ставить внешние микросхемы (типа MAX220–MAX249) для преобразования уровней TTL <-> RS-232. Остается дело за малым - реализовать в системе приемопередатчики. С этого момента постараюсь раскрыть проблему более подробно. С передатчиком более-менее понятно: типичный Serializer с двумя регистрами и одним PLL (старт_бит:байт_данных:контроль:стоп_бит и все это наружу). С приемником сложнее: только deserializer'ом, наверное, обойтись не получится В классическом представлнии (в соответствии с остаточными знаниями, полученными в ВУЗе) приемник должен запустить свой внутренний генератор (работающий с частотой, например, в 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
--------------------
Лень - это не врожденное чувство русского человека, а средство борьбы с неуемной, но бестолковой энергией начальника.
|
|
|
|
|
 |
Ответов
|
Jul 6 2006, 08:13
|

Знающий
   
Группа: Свой
Сообщений: 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 раза больше бодовой, а Вам нужно довольно точно защелкивать, чтобы быть увереным, что попали в середину. А определение начала и конца "посылки" в моем методы тоже присутствует - в КА, и не требует такой точности.
--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
|
|
|
|
|
Jul 10 2006, 08:57
|
Местный
  
Группа: Участник
Сообщений: 290
Регистрация: 18-02-06
Пользователь №: 14 469

|
Допустим один проголосовал против -- и что дальше? Правильные голоса появились -- мажоритарность можно реализовать проще -- выборкой 1-го бита в середине битового интервала. Какой смысл пропускать ряд пичков 1010101010 -- не понял. Это как-то повышает надёжность? Ещё не понял, как без стопового бита вы будете засекать появление стартового, ведь последний бит данных может быть нулём, т.е. неразличим от старта. И ещё, когда считаете погрешности рассинхронизации, не забывайте, что передискретизация 16х сама по себе даёт задержку до 6,5% от настоящего старт-фронта. При эхо-тестировании приёмопередатчика длинными потоками у меня случались сбои. Чтобы ошибка не накапливалась, сбрасывать приёмник надо в середине стоп-бита. Никто не сказал ничего вразумительного про метастабильность, но в примере который я брал за основу применялся синхронизатор. Видимо он нужен чтоб предотвратить "непонятки" когда Rx зависает между небом и землёй и вся логика, на нём завязанная, интерпретирует уровень на своё усмотрение, приводя автомат в полный беспорядок. Но вообще идея использовать сдвиг вместо подсчёта бит заслуживает рассмотрения. Парадоксально, но декодер на N адресов в FPGA занимает вдвое больше ресурсов, чем цепочка из N FF-ов.
|
|
|
|
|
Jul 10 2006, 10:20
|

Знающий
   
Группа: Свой
Сообщений: 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) Из непонятного состояния всегда можно выйти по таймауту.
--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
|
|
|
|
|
Jul 10 2006, 11:18
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jul 11 2006, 08:35
|

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

|
Цитата(javalenok @ Jul 10 2006, 15:18)  Да, ну и откуда ты узнаешь, что подступил новый байт? Есть "фильтр" на входе сигнала RX в ПЛИС У меня это сделано с помощью МЖФ (фильтрует лучше), но можно и просто стробировать основной частотой проекта. На выходе(когда автомат в idle) появился "0" - переходим в прием (STATE_RECEIVE) Цитата Выбирать надо в серёдке, для этого надо сделать отступ от переднего фронта старт-бита. Далее, как ты определишь, что пора сдвигать, если не по собственным часам? ЕЩЕ раз - я не выбираю в середке!!! У меня ВСЕГДА есть утроенная частота бодовой скорости (Я ее НЕ синхронизую со стартом!!!) Далее (когда в состоянии STATE_RECEIVE) - считаю эту частоту и по каждому третьему фронту вдигаю в регистр выход МЖФ (его код уже приводил(там есть enable)) Для кого-то в коде понятней Код if(STATE_RECEIVE & counter==2'h3) rx_reg[9:0] <= #T {out(MZHF),rx_reg[9:1]}; Цитата В довершение вы собирались отказаться от стопового. Представим, что стартовый и все данные -- нули. Ну и как без стопа узнать о начале нового кадра? ЕЩЕ раз повторяю - я знаю сколько битов в "бодовом байте" - те выбрал глубину сдвигового регистра. !!!!!!!!!!!!!!!В "idle" я его устанавливаю всеми "1" и вдвигаю ВСЕ биты и СТАРТ!!!!!!!!!!!!!!!!!!!!!!!! Стартовый ВСЕГДА "0" - на пример вдвигаю с "конца" - добрался "0" до "начала" регистра - значит стоповый уже вдвинулся. Цитата И в порядке любопытства, вы не ответили чем мажоритарный фильтр, манкирующий временную информацию, лучше обычного гистерезиса низких частот, пропускающего только те образцы, что похожи на соседей? Вам фильтрация нужна, как я догадываюсь, именно для предотвращения ложных срабатываний (сдвигов). Я наверное не столь продвинут в фильтрации. Но о Вашем вопросе с умными словами нужно думать вместе с теорией фильтров и спектрами пропушенных сигналов. Да и вопрос зачем? Задача немного другая. Хотя (если сможете) приведите HDL описание "обычного гистерезиса низких частот, пропускающего только те образцы, что похожи на соседей?" - может вы о простых вещах по умному Опять повторяю - фильтрация нужна - чтобы не синхронизоватся и при этом ДВА отсчета будут около центра бита Цитата Ну а что до подсчёта бит, разве мыслимо его вести без счётчика? Ваше сообщение "Парадоксально, но декодер на N адресов в FPGA занимает вдвое больше ресурсов, чем цепочка из N FF-ов." Декодер на N адрессов можно реализовать и без счетчика Но учитывай, что прийдется дабовлять как минимум один лишний FF в цепочку - для старта
--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
|
|
|
|
|
Jul 11 2006, 10:26
|
Местный
  
Группа: Участник
Сообщений: 290
Регистрация: 18-02-06
Пользователь №: 14 469

|
Цитата(NiOS @ Jul 11 2006, 11:35)  Я наверное не столь продвинут в фильтрации. Но о Вашем вопросе с умными словами нужно думать вместе с теорией фильтров и спектрами пропушенных сигналов. Да и вопрос зачем? Задача немного другая. Хотя (если сможете) приведите HDL описание "обычного гистерезиса низких частот, пропускающего только те образцы, что похожи на соседей?" - может вы о простых вещах по умному Опять повторяю - фильтрация нужна - чтобы не синхронизоватся и при этом ДВА отсчета будут около центра бита Я сам принцып 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 регистра дополнительно регистируете? Конвееризация  ? Цитата(NiOS @ Jul 11 2006, 11:35)  ЕЩЕ раз повторяю - я знаю сколько битов в "бодовом байте" - те выбрал глубину сдвигового регистра. !!!!!!!!!!!!!!!В "idle" я его устанавливаю всеми "1" и вдвигаю ВСЕ биты и СТАРТ!!!!!!!!!!!!!!!!!!!!!!!! Стартовый ВСЕГДА "0" - на пример вдвигаю с "конца" - добрался "0" до "начала" регистра - значит стоповый уже вдвинулся. Я тоже знаю сколько бит в кадре (выражение "бодовый байт" слышу впервые, смысл не ясен). Но это не значит, что стоповый бит смысла не имеет. Он необходим для отделения начала нового кадра. Старт можно гарантированно увидеть только на фоне стопа. Значит у вас вместо 10-битного счётчика принятых бит используется 10-битный сдвиговый регистр иль вы его как-то совмещаете с регистром принимаемых данных? Если первое, что что-то мне подсказывает, что счётчиком счетать биты эффективнее. Цитата(NiOS @ Jul 11 2006, 11:35)  Ваше сообщение "Парадоксально, но декодер на N адресов в FPGA занимает вдвое больше ресурсов, чем цепочка из N FF-ов." Декодер на N адрессов можно реализовать и без счетчика Но учитывай, что прийдется дабовлять как минимум один лишний FF в цепочку - для старта  Ну декодер -- часть демукса, выбирает ячейку, которая будет грузится в следующий момент. Код ячейки увеличивается с приёмом каждого нового бита. Код генерируется счётчиком. Декодер не имеет смысла без счётчика. Заменить счётчик + декодер на один сдвиговый регистр, пускай длины +1, не получится. Нужно два сдвиговых: первый 8 бит для приёма данных и другой -- круговая лента 10-ти состояний FSM приёмника (приём старт, данных, стопа). Так вот принимать данные мне кажется экономнее в сдвиговый регистр по сравнению с кодированными ячейками, а состояние машины всёж лучше держать в счётчике, благо полного декодирования для управления машиной не требуется, поскольку автомат должен вести себя одинаково для всех бит данных и синтезатор должен это здорово оптимизировать.
Сообщение отредактировал javalenok - Jul 11 2006, 10:44
|
|
|
|
|
Jul 12 2006, 07:03
|

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

|
Цитата(javalenok @ Jul 11 2006, 14:26)  Но каким же образом, если он у вас пропустит 10101010 -- сплошные пички? Вы знаете что такое простое "стробирование по входу" - так вот МЖФ на входе это просто лучше. При таком сигнале на входе Вам ни какой фильтр не позволит принять сигнал стандарта RS-232. Речь шла о статистически случайных одиночных пичках сигнала на паде ПЛИС, которые МЖФ сглаживает лучше, чем стробирование. Цитата 1-й и 3-й -- это как раз граничные обрызцы, они могут относится к другому биту. Вы же их цените на равне со средним. Может ну их, эти выборы -- баловство? И вообще от посреднечества сдвигового регистра отказаться, грузить Rx прямо в rx_reg[0]? У меня именно так сделано -- без детских игр в голосование. Нельзя ориентироватся по среднему - тк я не синхронизую отсчеты с началом бита и этот средний не будет в центре - в центре будет другой средний Так там Verilog'ом по белому и написано, что "грузится Rx прямо в rx_reg[0] " Цитата И для чего вы выход своего mzf регистра дополнительно регистируете? Конвееризация  ? В каком месте (коде) я это написал???? Цитата Но это не значит, что стоповый бит смысла не имеет. Он необходим для отделения начала нового кадра. Старт можно гарантированно увидеть только на фоне стопа. Для асинхронных одиночных кадров совсем не обязателен стоповый бит, а вот для нескольких последовательных кадров - стоповый, скорее, нужен, чтобы на длином промежутке значительной не была рассинхронизация приемника и передатчика. Цитата Значит у вас вместо 10-битного счётчика принятых бит используется 10-битный сдвиговый регистр иль вы его как-то совмещаете с регистром принимаемых данных? У меня есть регистр, в который я сдвигаю данные, и откуда можо забирать информационый байт. И помимо этого я его же использую при передаче - только в обратную сторону. И вобщето сдвиговый регистр хранит то, что в него вдвинули. Цитата Ну декодер -- часть демукса, выбирает ячейку, которая будет грузится в следующий момент. Понятие "декодер" - в оригинале это просто демукс, а счетчик это уже другое понятие
--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|