|
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 13 2006, 10:02
|

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

|
Цитата(sazh @ Jul 13 2006, 13:46)  Сам текст понятен. А вот идея всегда будет вызывать споры. Да и кто, когда будет reset нажимать. reset должен быть, потомучто нету такого блока (для не SRAM ПЛИС проект) Я для этого и опубликовал, предполагая, что со стороны Вы (в полной мере) сможет обозначить узкие моменты самого алгоритма тк я прикинул много сложных вариантов и всегда находил из них выход в моем алгоритме. Мне он кажется проще - избавились от некоторых критичных элементов (хотя бы точность определения старта) Кста на AHDL я (как и Вы) тоже прием кадра разворачивл временой диаграмой по счетчикам - мне тоже нравится так. Но на Verilog'e решил попробовать по-другому - идейку подкинули про МЖФ -> и получилось
--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
|
|
|
|
Сообщений в этой теме
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 NiOS Цитата(Wild @ Jul 3 2006, 19:41) Позвольт... Jul 6 2006, 08:13 javalenok Допустим один проголосовал против -- и что дальше?... Jul 10 2006, 08:57  NiOS Цитата(javalenok @ Jul 10 2006, 12:57) Вы... Jul 10 2006, 10:20   javalenok Цитата(NiOS @ Jul 10 2006, 13:20) Цитата
... Jul 10 2006, 11:18    Wild http://www.xilinx.com/xlnx/xweb/xil_tx_dis...hX_ID... Jul 10 2006, 12:10    NiOS Цитата(javalenok @ Jul 10 2006, 15:18) Да... Jul 11 2006, 08:35     javalenok Цитата(NiOS @ Jul 11 2006, 11:35) Я навер... Jul 11 2006, 10:26      NiOS Цитата(javalenok @ Jul 11 2006, 14:26) Но... Jul 12 2006, 07:03       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 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
|
|
|