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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> QSYS, память DDR и два мастера
Styv
сообщение Mar 1 2013, 09:31
Сообщение #1


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

Группа: Свой
Сообщений: 133
Регистрация: 16-08-04
Пользователь №: 504



Привет Всем!

Собираю систему в qsys, состоящую из контроллера памяти DDR и двух моих модулей, которые являются мастерами Аvalon-ММ, которые должны независимо друг от друга обращаться к ДДР.

Если по отдельности каждый модуль работает с ДДР нормально, то при сподключении к ДДР двух модуляй, оба или перестают работать или работают с ошибками.

Как подключать к одному слейву несколько мастеров?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 1 2013, 09:59
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



ваши модули должны поддерживать арбитраж, чтобы не было конфликтов
Go to the top of the page
 
+Quote Post
Styv
сообщение Mar 1 2013, 10:37
Сообщение #3


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

Группа: Свой
Сообщений: 133
Регистрация: 16-08-04
Пользователь №: 504



Цитата(vadimuzzz @ Mar 1 2013, 13:59) *
ваши модули должны поддерживать арбитраж, чтобы не было конфликтов


Как это сделать? Где почитать?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 1 2013, 11:22
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(Styv @ Mar 1 2013, 17:37) *
Как это сделать? Где почитать?

спеки на шину:
http://www.altera.com/literature/manual/mnl_avalon_spec.pdf
см. в сторону waitrequest, коллизии через него разруливаются. контроль валидности адресов тоже за вашими модулями.
Go to the top of the page
 
+Quote Post
wpost
сообщение Mar 1 2013, 14:22
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-04-10
Из: СПб
Пользователь №: 56 354



Цитата(vadimuzzz @ Mar 1 2013, 15:22) *
спеки на шину:
http://www.altera.com/literature/manual/mnl_avalon_spec.pdf
см. в сторону waitrequest, коллизии через него разруливаются. контроль валидности адресов тоже за вашими модулями.


Можно использовать Mutex.
По сути это флаг занятость общего ресурса. каждый мастер смотрит по нему свободность ресурса и если ресурс свободен то лезет в него предварительно выставив флаг на занято. Второй мастер наткнувшись на занято должен ждать пока ресурс не освободится. Не смотрите на то, что эта фича для ниоса. Её можно использовать с тем же успехом и без ниоса.

Сообщение отредактировал wpost - Mar 1 2013, 14:23
Go to the top of the page
 
+Quote Post
torik
сообщение Mar 7 2013, 11:31
Сообщение #6


Гуру
******

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



интересно конечно. Но из даташита непонятно как пользоваться этим mutex. Есть опыт?

Цитата
Если по отдельности каждый модуль работает с ДДР нормально, то при сподключении к ДДР двух модуляй, оба или перестают работать или работают с ошибками.

а что за ошибки такие? Вообще, если чтение/запись бурстами, то арбитраж самому делать не надо, надо только учесть waitrequest.


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
ISK
сообщение Mar 7 2013, 11:58
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 59
Регистрация: 9-06-05
Из: Киев
Пользователь №: 5 857



Ещё есть такая штука как "multi-port front end"

http://www.altera.com/literature/an/an637....front%20end%20(
Go to the top of the page
 
+Quote Post
wpost
сообщение Mar 9 2013, 06:13
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-04-10
Из: СПб
Пользователь №: 56 354



Цитата(torik @ Mar 7 2013, 15:31) *
интересно конечно. Но из даташита непонятно как пользоваться этим mutex. Есть опыт?


да, опыт есть. там все просто.
Если из ниоса, то вообще все просто...
Код
#include <altera_avalon_mutex.h>
/* get the mutex device handle */
alt_mutex_dev* mutex = altera_avalon_mutex_open( ”/dev/mutex” );
/* acquire the mutex, setting the value to one */
altera_avalon_mutex_lock( mutex, 1 );
/*
* Access a shared resource here.
* Здесь защищенный код. можно пользоваться общим ресурсом.
*/
/* release the lock */
altera_avalon_mutex_unlock( mutex );

Естественно, любое обращение любого мастера к общему ресурсу нужно заключать между altera_avalon_mutex_lock и altera_avalon_mutex_unlock( mutex ). Значение 1 взято просто для примера.

Если без ниоса, то примерно так:

захват шины происходит путем записи в регистр mutex двух идентификаторов: OWNER - номер процессора (CPU ID), и VALUE - идентификатор процесса, который хочет занять устройство (любое число не 0)
после чего проверяется факт удачного захвата (вдруг нас опередили)

Код
static int alt_mutex_trylock( alt_mutex_dev* dev, alt_u32 value )
{
  alt_u32 id, data, check;
  int ret_code = -1;

  NIOS2_READ_CPUID(id);

  /* the data we want the mutex to hold */
  data = (id << ALTERA_AVALON_MUTEX_MUTEX_OWNER_OFST) | value;

  /* attempt to write to the mutex */
  IOWR_ALTERA_AVALON_MUTEX_MUTEX(dev->mutex_base, data);
  
  check = IORD_ALTERA_AVALON_MUTEX_MUTEX(dev->mutex_base);

  if ( check == data)
  {
    ret_code = 0;
  }

  return ret_code;
}


Проверка что устройство свободно заключается в прочтении регистра mutex. Если VALUE = 0 то путь свободен, можно лезть.

чтобы освободить устройство нужно записать 1 в регистр reset.

в первом приближении это все. подробнее посмотрите в папке "с:\altera\11.0\ip\altera\sopc_builder_ip\altera_avalon_mutex\HAL\src"

Сообщение отредактировал wpost - Mar 9 2013, 06:22
Go to the top of the page
 
+Quote Post
torik
сообщение Mar 11 2013, 06:06
Сообщение #9


Гуру
******

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



Цитата
Ещё есть такая штука как "multi-port front end"


Да, интересная штуковина.
Но все-таки вопрос - разве шина авалон не занимается арбитражом самостоятельно, когда к ней бурстами обращаешься?
Все ведь нормально работает без всяких дополнительных компонентов.


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
wpost
сообщение Mar 11 2013, 14:11
Сообщение #10


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-04-10
Из: СПб
Пользователь №: 56 354



Цитата(torik @ Mar 11 2013, 10:06) *
Да, интересная штуковина.
Но все-таки вопрос - разве шина авалон не занимается арбитражом самостоятельно, когда к ней бурстами обращаешься?
Все ведь нормально работает без всяких дополнительных компонентов.


Да, стандартных средств хватает до тех пор пока адресные пространства не начинают пересекаться. я делал псевдодвухпортовую память. один мастер только писал , другой только читал. Дак вот, без мютекса система отказалась работать. никакие таймауты между операциями не давали результата. обмена не было вообще, даже неправильного. Поставил Mutex и наступило сразу же счастье. никаких сбоев, все работает как часы.
Go to the top of the page
 
+Quote Post
krux
сообщение Mar 12 2013, 17:50
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



сделайте нормальный тестбенч с BFM, тогда и вылезут все баги, из-за которых multi-master автоматом не получается.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
torik
сообщение Mar 13 2013, 05:25
Сообщение #12


Гуру
******

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



Цитата
сделайте нормальный тестбенч с BFM, тогда и вылезут все баги, из-за которых multi-master автоматом не получается.

Это надо пробовать. А где есть примеры?

Вернемся к mutex:
- допустим, есть три мастера (один пишет видео и два читают)
- у mutex только один слейв, все три мастера на него подключать? У mutex даже нет сигнала waitrequest, что получится когда одновременно два или три мастера инициируют запись в него (или чтение)
- нужно в каждом мастере делать автомат состояния, который при необходимости совершить транзакцию будет постоянно пытаться писать/читать mutex? Тогда представим что хотя бы два мастера пытаются это делать одновременно, где гарантия что не будет ситуации когда только один мастер (самый большой поток) будет все время захватывать mutex, не давая остальным шину?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
wpost
сообщение Mar 13 2013, 14:22
Сообщение #13


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-04-10
Из: СПб
Пользователь №: 56 354



Цитата(torik @ Mar 13 2013, 09:25) *
Это надо пробовать. А где есть примеры?

Вернемся к mutex:
- допустим, есть три мастера (один пишет видео и два читают)
- у mutex только один слейв, все три мастера на него подключать? У mutex даже нет сигнала waitrequest, что получится когда одновременно два или три мастера инициируют запись в него (или чтение)
- нужно в каждом мастере делать автомат состояния, который при необходимости совершить транзакцию будет постоянно пытаться писать/читать mutex? Тогда представим что хотя бы два мастера пытаются это делать одновременно, где гарантия что не будет ситуации когда только один мастер (самый большой поток) будет все время захватывать mutex, не давая остальным шину?


у регистра mutex правило "кто первый, тот и папа". При захвате шины мастер должен проверить, что именно его данные записались в регистр mutex. все остальные - неудачники =)
Если интервалы между обращениями правильные, то каждый мастер успеет слазить с память. А если все трое лопатят постоянно не оставляя времени на работу других, то никаким образом не удастся наладить обмен.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 13 2013, 14:40
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Цитата(torik @ Mar 13 2013, 08:25) *
..А где есть примеры?

AlteraWiki: Simulating Designs with Lower-Level Qsys Systems
AN351: Simulating Nios II Embedded Processor Designs
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 13 2013, 14:48
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



(Ошибка 504)
Go to the top of the page
 
+Quote Post

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

 


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


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