Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: "расширенный" UART в NIOS
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
juvf
Как бы организовать умный уарт для ниоса? нужен уарт, который бы принимал данные и по ДМА складывал бы их в определённое место в озу. как только после последнего принятого байта пройдет определённое время, уарт должен генерировать прерывание. А при передаче хотелось бы загрузить пакет в озу и "дернуть старт". данные из озу по дма сами ми бы переправлялись в уарт. после передачи всего пакета уарт (или дма) генерировал бы прерывание или снимал бы флаг бизи. Ну до кучи можно аппаратно управлять внешним драйвером ~RE/TE.

Есть мысли написать свой модуль уарт и посадить его на шину авалон. Только с чего начинать? как свои подобные модули делать? в QSys нужно добавить какойто контроллер авалон и на него цеплять свой модуль? Или сразу свой модуль писать с авалон-слейвом?
barabek
Цитата(juvf @ Oct 11 2012, 02:47) *
Как бы организовать умный уарт для ниоса? нужен уарт, который бы принимал данные и по ДМА складывал бы их в определённое место в озу. как только после последнего принятого байта пройдет определённое время, уарт должен генерировать прерывание. А при передаче хотелось бы загрузить пакет в озу и "дернуть старт". данные из озу по дма сами ми бы переправлялись в уарт. после передачи всего пакета уарт (или дма) генерировал бы прерывание или снимал бы флаг бизи. Ну до кучи можно аппаратно управлять внешним драйвером ~RE/TE.

Есть мысли написать свой модуль уарт и посадить его на шину авалон. Только с чего начинать? как свои подобные модули делать? в QSys нужно добавить какойто контроллер авалон и на него цеплять свой модуль? Или сразу свой модуль писать с авалон-слейвом?

Я так и делал. Во вложении для примера мой UART. Только я делал его под свои нужды. У него прерывания на прием (и на передачу) выставляются по определенному терминирующему байту, а не по паузе между байтами. На передачу ДМА нет. И управление CTS (на передачу. Я что-то подзабыл, с названиями могу попутать, но функционал этих хэндшейков правильно пишу) автоматическое, а RTS (на прием) только программное. Но на приеме ДМА организован как кольцевой буфер. Для меня это было важно. Да и безопасно.
В общем, не совсем то что ищете, но в качестве примера. Тестбенч, как всегда, лоховской sm.gif, доки тоже нет. Описание всех регистров в инкулуд-файле. Там, вобщем-то вся логика из описания регистров будет понятна. Оберточных файла два. С ДМА и без. Не понял как делать один общий с параметрами если меняется количество интерфейсов. Скорее всего никак. Ну и за английский не пинайте sm.gif
juvf
Цитата
Только я делал его под свои нужды.
у меня валяется какаято корка fifoed_avalon_uart "FIFOed UART (RS-232 serial port)9.3" v9.3, с опенкорс качал. Вроде все ваши нужды покрывает.

Посмотрел вашу реализацию.... Не совсем понятно как это иинтегрируется в SOPC? Как этот уарт внедрить в NIOS?

Начал свою реализачию делать через *_hw.tcl. Вопрос возник. У вас 2 шины, у меня 1. Сделал шину Avalon-MM slave. Её подключил к ядру ниоса и её же подключил к DMA. Воде авалон позволяет двух мастеров на шине иметь и колизии автоматом разруливаются. Будет так работать или обязятельно для кантроля нужна одна шина, а для DMA отдельная?
barabek
Цитата(juvf @ Oct 14 2012, 18:42) *
Посмотрел вашу реализацию.... Не совсем понятно как это иинтегрируется в SOPC? Как этот уарт внедрить в NIOS?

Как обычно это и делается. В SOPC выполняете команду "new component" (ЕМНИП). Выбираете головной файл, у меня это один из обертоных файлов. Ну а далее можно догадаться по пунктам, ну и мануал по созданию своего компонета в помощь. Или не в этом вопрос?
Цитата
Начал свою реализачию делать через *_hw.tcl. Вопрос возник. У вас 2 шины, у меня 1. Сделал шину Avalon-MM slave. Её подключил к ядру ниоса и её же подключил к DMA. Воде авалон позволяет двух мастеров на шине иметь и колизии автоматом разруливаются. Будет так работать или обязятельно для кантроля нужна одна шина, а для DMA отдельная?

Будет работать и так. Там арбитраж реализован.
А то что у меня две шины - так у меня же DMA внутри. Соответственно он обязан иметь мастера. Если Вы используете внешний DMA, то получите тоже самое, почти.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.