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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Nios II + VGA проблема
Копейкин
сообщение Aug 7 2009, 07:39
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134



Уважаемые всезнающие господа, помогите советом пожалуйста.
У меня в системе 2 модуля FIFO.
В один из них аппаратно, из потока, пишутся данные очень редко.
Из другого аппаратно извлекаются данные и встраиваются в поток. Тоже не быстро.
Оба модуля 8 битные, глубиной 16 байт.
Подскажите, как их (модули) правильно подключить на Авалон ММ чтобы NIOSII мог из одного модуля читать, а в другой записывать побайтно.
Модули созданы МегаВизардом на основе dcfifo и уже вставлены в систему.
Клоки чтения и записи разные.
Ширина шины входа/выхода - 8/8бит.
На стороне ФИФО, подключаемой к NIOS надо подавать тот же клок, что подается на модуль процессора?
Go to the top of the page
 
+Quote Post
torik
сообщение Aug 7 2009, 11:52
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Для записи надо напрямую подключить данные шины авалон на вход FIFO, а в качестве сигнала записи - datavalid. В шину выдать сигнал готовности при необходимости (переполнение фифо).
Для чтения по аналогии.


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
Sergey'F
сообщение Aug 7 2009, 12:08
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660



Цитата(Копейкин @ Aug 7 2009, 11:39) *
Уважаемые всезнающие господа, помогите советом пожалуйста.
У меня в системе 2 модуля FIFO.
В один из них аппаратно, из потока, пишутся данные очень редко.
Из другого аппаратно извлекаются данные и встраиваются в поток. Тоже не быстро.
Оба модуля 8 битные, глубиной 16 байт.
Подскажите, как их (модули) правильно подключить на Авалон ММ чтобы NIOSII мог из одного модуля читать, а в другой записывать побайтно.
Модули созданы МегаВизардом на основе dcfifo и уже вставлены в систему.
Клоки чтения и записи разные.
Ширина шины входа/выхода - 8/8бит.
На стороне ФИФО, подключаемой к NIOS надо подавать тот же клок, что подается на модуль процессора?

1. Периферийный модуль может тактироваться любым клоком, просто Quartus автоматом вставит логику перехода между доменами, довольно медленную. Если нужно более высокое быстродействие обмена между доменами, смотрите Avalon-MM Clock Crossing Bridge.
2. В Вашем случае стоит посмотреть в сторону Avalon-ST и компонент типа Avalon-ST Dual Clock FIFO. Avalon-ST, условно говоря, не шинный интерфейс Avalon-MM, а интерфейс типа точка-точка, заточенный под потоковые передачи.
3. Если лень разбираться с Avalon-ST, то можно посмотреть примеры и сделать периферийный модуль на Avalon и в нем обратиться к FIFO. Там внутри и с разрядностью разберетесь как надо.
Go to the top of the page
 
+Quote Post
Копейкин
сообщение Aug 7 2009, 13:32
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134



Я разобрался с чтением из FIFO, подключенным к Авалон ММ:
В редакторе нового компонента создал компонент с сигналами:
clk
readdata[7..0]
read
address[1..0] - вывел, но не использовал.
Файлы описания не подключал и SOPC билдер вывел эти сигналы наружу из процессора.
Еще указал в свойствах интерфейса:
Все времена задержек = 0
и в Deprecated параметрах указал тип адресации NATIVE а не DYNAMIC.
Если этого не сделать то при 8-битной шине будут проводится 4 чтения подряд.!!!
Сам интерфейс чтения у FIFO должен быть: Show-ahead sinchronouse FIFO mode.
Тактовая частота та же, что и для процессора.
Таким образом заработало.
Теперь добиваю запись в FIFO...
-------------------------
Подскажите еще:
Если тип адресации DYNAMIC, то как при 8-битной шине данных избежать 4-х кратного чтения.
Для записи вроде сигнал byteenable[] должен помочь.
Или выводить шину address[1..0] и строить дешифратор для доступа к младшему байту.
Или я вообще ни разу не прав?????
Всем откликнувшимся громадное спасибо!!!

Цитата(Sergey'F @ Aug 7 2009, 16:08) *
1. Периферийный модуль может тактироваться любым клоком...
2. В Вашем случае стоит посмотреть в сторону Avalon-ST и компонент типа Avalon-ST Dual Clock FIFO.
3. Если лень разбираться с Avalon-ST, то можно посмотреть примеры и сделать периферийный модуль на Avalon и в нем обратиться к FIFO. Там внутри и с разрядностью разберетесь как надо.

1. Этого не требуется
2. К сожалению переход между Avalon-ST и Avalon-MM остался выше моего понимания.
Я так понял, нужно ставить Scatter-Gather DMA и все равно делать свой компонент для вывода сигналов Avalon-ST наружу из процессора.
Это мне кажется слишком сложно для обработки изредка приходящих команд управления.
3. Avalon-ST Dual Clock FIFO все равно никак не подключается к шине Avalon MM.
А мне надо, чтобы NIOSII получал эти байты команд...
Спасибо за советы laughing.gif


Цитата(torik @ Aug 7 2009, 15:52) *
Для записи надо напрямую подключить данные шины авалон на вход FIFO, а в качестве сигнала записи - datavalid. В шину выдать сигнал готовности при необходимости (переполнение фифо).
Для чтения по аналогии.

А как быть с таймингами?
Для dcfifo запись/чтение производится по положительным перепадам clk.
rdreq/wrreq являются только сигналами разрешения.
Пока они активны с каждым перепадом будет запись/чтение.
А для чтения FIFO отдельная заморочка с выдачей данных...
Go to the top of the page
 
+Quote Post
Sergey'F
сообщение Aug 7 2009, 14:14
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660



Цитата(Копейкин @ Aug 7 2009, 17:32) *
3. Avalon-ST Dual Clock FIFO все равно никак не подключается к шине Avalon MM.

Я не про компонент ST FIFO, я про обычный пользовательский модуль со slave портом на avalon-mm. И в нем внутри осуществляется обращение к Вашему FIFO, которое Вы уже создали. Можно как пример вставить в проект модуль PIO и посмотреть после генерации его исходники. Там понятно, как разбираться с адресом, чипселектом и т.д..

Но Вы уже все равно сделали, так что это ни к чему.

dynamic alignment:
Если master пишет в slave большей разрядности, шина выставляет byteenable на нужные байты (естественно, slave их должен корректно обработать).
Если master читает из slave большей разрядности, читается слово целиком и выбираются данные из нужных байт.
Если master пишет в slave меньшей разрядности, шина формирует n записей по последовательным адресам (и пока не закончит, master ждет).
Если master читает из slave меньшей разрядности, шина формирует n чтений по последовательным адресам (и пока не закончит, master ждет).

Ели такое поведение не нужно - проще всего не использовать deprecated параметры, тем более про включение native alignment в документации написано очень размыто, а, например, объявить 32-х разрядный порт, а в устройстве использовать только младшие 8 бит (читать младшие 8 при записи от шины и выставлять младшие 8, а остальные нули при чтении от шины).

Сообщение отредактировал Sergey'F - Aug 7 2009, 14:33
Go to the top of the page
 
+Quote Post
torik
сообщение Aug 10 2009, 05:07
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Цитата
А как быть с таймингами?
Для dcfifo запись/чтение производится по положительным перепадам clk.

Ну и что, у вас разве что-то работает по отрицательным перепадам?


Цитата
rdreq/wrreq являются только сигналами разрешения.
Пока они активны с каждым перепадом будет запись/чтение.
А для чтения FIFO отдельная заморочка с выдачей данных...


Конечно, необходимо добавить немного логики, которая контролирует заполненность FIFO.


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post

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

 


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


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