Перейти к содержанию
    

Помогите студенту с UART=(

Дело в том, что я только начал осваивать Verilog и уже писал простейшие программы на нем, а тут науч. рук. дал для самостоятельного разбора UART протокол, вот отсюда и начинаются мои проблемы...

 

Вобщем нашел я уже написанный УАРТ (см файл), но вот в чем проблема: не могу разобраться в программе. Нет, все что там написано я понимаю, я не понимаю принцип работы, а именно: не могу понять зачем такое количество портов и для чего каждый из них (некоторые понятно для чего, но зачем остальные - не знаю). Вобщем помогите кто может.

 

 

PS: Просьба: если ничем помочь не можете, то не стоит писать что-то вроде: "да тут все проще пареной репы", все мы когда-то начинали и много чего не понимали....

 

PPS: Касательно самого КОМ-порта... Облазил 2 книжки. Всё напиано хзамечательно, есть только одна проблема: НИГДЕ нету никакого примера, такого чтобы хоть раз все было объяснено на пальцах, а не в теории. В теории и я все прекрасно понимаю, но вот как дошло дело до более или менее серьезной практики тут я и просел...

 

 

PPPS: Заранее спасибо.

uart.rar

Изменено пользователем Otshelnik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дело в том, что я только начал осваивать Verilog и уже писал простейшие программы на нем, а тут науч. рук. дал для самостоятельного разбора UART протокол, вот отсюда и начинаются мои проблемы...

 

Вобщем нашел я уже написанный УАРТ (см файл), но вот в чем проблема: не могу разобраться в программе. Нет, все что там написано я понимаю, я не понимаю принцип работы, а именно: не могу понять зачем такое количество портов и для чего каждый из них (некоторые понятно для чего, но зачем остальные - не знаю). Вобщем помогите кто может.

 

 

PS: Просьба: если ничем помочь не можете, то не стоит писать что-то вроде: "да тут все проще пареной репы", все мы когда-то начинали и много чего не понимали....

 

PPS: Касательно самого КОМ-порта... Облазил 2 книжки. Всё напиано хзамечательно, есть только одна проблема: НИГДЕ нету никакого примера, такого чтобы хоть раз все было объяснено на пальцах, а не в теории. В теории и я все прекрасно понимаю, но вот как дошло дело до более или менее серьезной практики тут я и просел...

 

 

PPPS: Заранее спасибо.

 

 

ну могу на пальцах про РС232

 

есть 2 главных провода! RX и TX по ним идут данные туда и обратно.

Есть земля. И есть управляющие сигналы, их 4.

Я готов читать, я имею что записать, и соответственно 2 сигнала принимающие эти заявки.

 

Управляющие сигналы нужны для того чтобы не перегрузить приемный буфер устройства, и сообщать что есть данные для передачи, но в большинстве случаев их уже не используют.

 

Основная идея РС232 да и уарта в принципе это как передать сигнал по одному проводу. Если есть 2 провода, то задача проста, ставим на одном данные, дергаем другим, ставим следующий бит, и так далее... но тут провод 1. Остается только договориться что мы каждый бит начиная с 1 и до 8 выставляем на определенное время. А чтобы начало отсчета было у всех устройств одинаковое ввели стартовый бит. ТО есть провод по умолчанию находиться в 1, и как только он падает в ноль значит началась посылка, дальше читаем или пишем с равными интервалами на этот провод биты, и готово. Для облегчения приемной стороны, которая после сбора данных должна настроиться на новый прием, ввели стоповые биты 1, 1.5 или 2. ТО есть после того как были переданы все биты данных, сигнал будет гарантированно в 1 стоять время равное длине 1, 1.5, или 2 битов. Ну и соответственно для повышения надежности после битов данных и перед стоповым битом иногда добавляют бит четности.

Бит четности следит за четностью суммы единичек в данных. то есть если вы послали 11001000 то сумма единичек не четная, и бит четности выставиться в 1 (если проверка на четность), а если послали 11001100, то бит четности останется нулем. и приемная сторона может всегда проверить четность сообщения включая бит четности, и таким образом гарантированно отловить ошибку при передаче нечетного числа битов.

 

ну и теперь на практике.

 

как сделать приемник...

 

делаем схему с клоком допустим 100 МГц., решаем что передаем на скорости 9600, то есть на бит приходиться по 100000000/9600 = 10417 тактов.

Теперь нам надо сделать счетчик который считает по 10417 тактов, и генерит сигнал что пришел бит.

а лучше 2 счетчика, один на 10417, а другой на половину этой величины, чтобы считывать символ в середине его длины.

 

так теперь нам нужен еще сдвиговый регистр на 8 бит, в который мы будем задвигать данные пришедшие.

 

ждем фронта с 1 в 0 на RX, после этого запускаем счетчик на 10417, как он досчитает запускаем второй счетчик , и как он досчитает, мы находимся в середине 1 бита, (первый счетчик просчитал стартовый бит) данные на RX, задвигаем в наш сдвиговый регистр. Повторив данную конструкцию, но только уже с одним первым счетчиком (а то будете биты терять) нужное число раз мы получим все сообщение.

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

 

ну вот и все про РС 232 на пальцах. надеюсь поможет, задавайте вопросы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще-то заданные вопросы и полученные ответы довольно странные.

Тем не менее решил дать свой совет.

Возьмите два ваших юарта и соедините их выходом (tx) одного

ко входу (rx) другого. Напишите простейший тестбенч для того из них,

который делает tx, пусть даже он сначала будет неправильный,

и запустите все это в симуляторе.

Дальше - методом проб, ошибок, анализа и

сравнения с "теорией" получитe понятную временную диаграмму

процесса передачи данных, а затем уже можно приступить к исследованию

процесса приема данных в приемнике (тот что rx).

Не забудьте только в тестбенче дать необходимые стимулы и приемнику с тем

чтобы обеспечить его работоспособность и готовность к приему байтов

информации с передатчика (tx).

При таком подходе теория сразу же соединится с практикой

и можно будет успешно двигаться дальше.

Удачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дело в том, что я только начал осваивать Verilog и уже писал простейшие программы на нем

 

На сколько простейшие?

 

После ответа на этот вопрос, можно понять какие "блоки" по-сложней Вам нужно научится писать.

Тогда - зная алгоритм работы UART - Вы напишите свой контроллер UART.

Думаю это практичнее при изучении языка, чем разбиратся в готовом...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...