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

 
 
> 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
6 страниц V  « < 3 4 5 6 >  
Start new topic
Ответов (60 - 74)
sanek78
сообщение Sep 28 2006, 12:14
Сообщение #61


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 31-08-06
Пользователь №: 19 985



Я диплом пишу, поэтому результат может быть только на уровне прототипа(пока). Но соединить DSP с FPGA(Starter Kit) получилось, данные передаются по SCI на 115к. Соединил двумя проводами на 15см. Интересно правда посмотреть что получится, когда рядом преобразователь частоты начнет долбить. Где-то через месяц напишу, как алгоритм с помехами справляется.
Go to the top of the page
 
+Quote Post
Леха
сообщение Nov 22 2006, 10:58
Сообщение #62


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 18-06-04
Из: Минск
Пользователь №: 55



Товарищи, а если FPGA (ACEX) висит на PCI, то чем лучше тактировать
UART (использовать PCI клок или внешний завести) ?
Go to the top of the page
 
+Quote Post
klop
сообщение Nov 22 2006, 12:17
Сообщение #63


Местный
***

Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788



Цитата(Леха @ Nov 22 2006, 10:58) *
Товарищи, а если FPGA (ACEX) висит на PCI, то чем лучше тактировать
UART (использовать PCI клок или внешний завести) ?

А посчитать влом? А со вторым тактовым - Вы готовы к работе с двумя клоковыми доменами?
Go to the top of the page
 
+Quote Post
Леха
сообщение Nov 22 2006, 12:27
Сообщение #64


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 18-06-04
Из: Минск
Пользователь №: 55



Посчитать не влом. Вопрос про корректность и надёжность работы при использовании PCI клока.
Говорят, что этот клок не шибко стабилен и на некоторых материнках может заметно отличаться
от 33 МГц. Кто-нибудь в серийных изделиях использовал его для UART-ов ?

А двух клоковых доменов боюсь как огня, так как никогда не сталкивался с такой ситуацией.
Но если надо - освоим.
Go to the top of the page
 
+Quote Post
klop
сообщение Nov 22 2006, 13:03
Сообщение #65


Местный
***

Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788



Цитата(Леха @ Nov 22 2006, 12:27) *
Посчитать не влом. Вопрос про корректность и надёжность работы при использовании PCI клока.
Говорят, что этот клок не шибко стабилен и на некоторых материнках может заметно отличаться
от 33 МГц. Кто-нибудь в серийных изделиях использовал его для UART-ов ?

А двух клоковых доменов боюсь как огня, так как никогда не сталкивался с такой ситуацией.
Но если надо - освоим.


Тогда может лучше внешний генератор + ресинхронизатор внутри FPGA.
Go to the top of the page
 
+Quote Post
oval
сообщение Nov 22 2006, 13:09
Сообщение #66


Местный
***

Группа: Свой
Сообщений: 265
Регистрация: 15-03-05
Из: Москва
Пользователь №: 3 367



Цитата(Леха @ Nov 22 2006, 10:58) *
Товарищи, а если FPGA (ACEX) висит на PCI, то чем лучше тактировать
UART (использовать PCI клок или внешний завести) ?


Практика показывает, что в таком случае лучше использовать отдельный генератор.
Насчет нескольких тактовых доменов, ничего страшного там нет, просто нужно внимательно и правильно реализовывать переход между ними.
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 22 2006, 13:23
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Проще Для Вас От PCI клок взять. А вообще все равно, сколько там генераторов на плате. А UART и подавно все равно. Обмен асинхронный (не путать с синхронным проектом).
Go to the top of the page
 
+Quote Post
Леха
сообщение Nov 22 2006, 13:45
Сообщение #68


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 18-06-04
Из: Минск
Пользователь №: 55



to sazh:

Не совсем понял. Например, я рассчитаю свой UART для работы с 33 МГц, а на какой-нить мамке частота
окажется больше или меньше или вовсе прыгать будет. Разве устройство на другом конце провода сможет
корректно принимать мои данные (а моё устройство его данные, соответственно) ?

to oval:

Отдельный клок имеется. Может знаете где почитать про работу с несколькими доменами (ссылки, книги...).
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 22 2006, 14:12
Сообщение #69


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Не совсем понял. Например, я рассчитаю свой UART для работы с 33 МГц, а на какой-нить мамке частота
окажется больше или меньше или вовсе прыгать будет. Разве устройство на другом конце провода сможет
корректно принимать мои данные (а моё устройство его данные, соответственно) ?
///////////////////////////////////////////////////
Если верить Гуку, сравнивают скорость передачи. Рассогласование не более 1%.
Вот и считайте.
Go to the top of the page
 
+Quote Post
oval
сообщение Nov 22 2006, 14:52
Сообщение #70


Местный
***

Группа: Свой
Сообщений: 265
Регистрация: 15-03-05
Из: Москва
Пользователь №: 3 367



Цитата(Леха @ Nov 22 2006, 13:45) *
to oval:

Отдельный клок имеется. Может знаете где почитать про работу с несколькими доменами (ссылки, книги...).


Попробуйте здесь на форуме поискать. Были ссылки, посмотрите здесь, основная информация правда на английском.
Go to the top of the page
 
+Quote Post
Леха
сообщение Nov 22 2006, 15:13
Сообщение #71


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 18-06-04
Из: Минск
Пользователь №: 55



Цитата(sazh @ Nov 22 2006, 15:12) *
Если верить Гуку, сравнивают скорость передачи. Рассогласование не более 1%.
Вот и считайте.


Так ведь при серьёзном изменении PCI клока поплывёт скорость передачи.
Или я не прав ?
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 22 2006, 15:32
Сообщение #72


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Вы правы. всегда найдутся любители журнала Upgrade. Любители разгона. При котором и шину PCI можно задрать до неприличия. У Вас АСЕХ. С градацией 2 у него выше 34 мГц врядли что выйдет.
Решайте сами. Или под Вашу частоту PCI, или под 33 мГц проект подстраивать или внешний генератор.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Nov 22 2006, 16:23
Сообщение #73


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(sazh @ Nov 22 2006, 15:32) *
Вы правы. всегда найдутся любители журнала Upgrade. Любители разгона. При котором и шину PCI можно задрать до неприличия. У Вас АСЕХ. С градацией 2 у него выше 34 мГц врядли что выйдет.
Решайте сами. Или под Вашу частоту PCI, или под 33 мГц проект подстраивать или внешний генератор.


PCI Specification 3.0

Цитата
In general, all PCI components must work with any clock frequency between nominal DC and 33 MHz.


То есть, использовать клок PCI для применений, в которых важен точный тайминг, по спецификации PCI недопустимо.

И, кстати,

Цитата
The clock frequency may be changed at any time during the operation of the system so long as the clock edges remain "clean" (monotonic) and the minimum cycle and high and low times are not violated.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
DeadMoroz
сообщение Nov 23 2006, 02:40
Сообщение #74


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-02-05
Пользователь №: 2 391



я использовал PCI клок для UART в двух проектах, работает. Но нюансов с разгоном не учитывал
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Oct 22 2007, 11:11
Сообщение #75


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



насчёт того, что не должно быть сбросов полностью согласен. Передатчик должен каждый раз полностью сбрасываться по записи в SBUF передаваемого байта, а приёмник как внешнетактируемое устройство должен иметь нециклящийся алгоритм.

И всётаки из всего вышеперечисленного не могу понять как обеспечить приём в том случае , если длина стоп бита равна длине бита данных и идёт непрерывный поток? .
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 01:43
Рейтинг@Mail.ru


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