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

Реализация mutex на SV

Форумчане, добрый вечер.

Два модуля делят между собой ресурс - память через Avalon-MM. Никак я не ожидал, что они (два модуля) могут одновременно такт в такт начать писать в память. Может есть на SV какая готовая реализация мьютекса как это на c++, чтобы самому ничего не придумывать, который сам разрулит барьер при совместном доступе.
Заранее спасибо.

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

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


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

Round Robin arbiter. Написать, минут 10 времени. Штатный есть, но он не синтезируется

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


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

Приветствую!

15 hours ago, new123 said:

Форумчане, добрый вечер.

Два модуля делят между собой ресурс - память через Avalon-MM. Никак я не ожидал, что они (два модуля) могут одновременно такт в такт начать писать в память. Может есть на SV какая готовая реализация мьютекса как это на c++, чтобы самому ничего не придумывать, который сам разрулит барьер при совместном доступе.

Что вы имеете в виду под понятием мьютекса?  Вернее как вы хотите контролировать доступ?  На уровне ячеек памяти  или транзакций по шине к блоку памяти? Хотите ли вы контролировать атомарность  изменения содержимого памяти?  

 

Любая шина уже содержит в себе механизмы арбитража доступа со стороны нескольких master к одному slave. Так что тут у вас что-то другое.   

 

Удачи! Rob.

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


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

1 hour ago, RobFPGA said:

Любая шина уже содержит в себе механизмы арбитража доступа со стороны нескольких master к одному slave.

ага, обчитался на тему round robin и понял что avalon-mm уже содержит арбитраж, судя по документации.

1) у меня есть qsys дизайн, там на шине avalonn-mm кучу всего сидит, мне нужно на этот авалон поцепиться извне (например из главного модуля). Я в qsys подцепил avalon pipeline bridge и уже в главном модуле цепляюсь к нему. 

2) есть свой instance который умеет писать в avalon-mm. Во время записи занимает шину в среднем от 15-20 тактов. Таких instance (не могу подобрать правильный перевод), у меня их два, то есть они вдвоем спорят за запись в pipeline bridge. Все отлично работает, когда один пишет, а второй ждет, когда занято. Плохо когда они такт в такт начинают писать, здесь они не могут поделить доступ, приоритет уходит одному из них.  Получаю потерю данных. Думал есть может какой готовый семафор, ничего не нашел, вот сейчас леплю самодел разделителя ресурсов с "двухфакторной идентификацией". То есть с двойным подтверждением, что шину точно занял.

1 hour ago, RobFPGA said:

Что вы имеете в виду под понятием мьютекса? 

барьер памяти от совместного доступа

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


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

59 минут назад, new123 сказал:

Я в qsys подцепил avalon pipeline bridge и уже в главном модуле цепляюсь к нему.

Так а если подцепить на авалон два бриджа (каждому instance свой бридж)?

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


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

Приветствую!

1 hour ago, new123 said:

барьер памяти от совместного доступа

Опять немного неоднозначно. Вангую что вы хотите механизм по котором один модуль берет контроль на ресурсом. Выполняет несколько транзакций на шине Avalon и затем в конце освобождает ресурс. Второй модуль при этом  ждет освобождения. Ну и наоборот. Так простейший арбитр на FSM в три состояния  такое делает на раз. Только сигналы запроса и подтверждения доступа будут отдельны от сигналов шины  Avalon. 

 

Удачи! Rob.

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


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

33 minutes ago, StewartLittle said:

Так а если подцепить на авалон два бриджа (каждому instance свой бридж)?

после утреннего чтива еще раз про avalon и арбитра, я сразу об этом подумал. в Qsys мне зараза не дал к одному слейву подцепить два мастера бриджа. То есть цеплять дает, но говорит мне - разделяй диапазоны адресов для обращения, одинаковые нельязи. А коннект там простой, бридж цепляется к on-chip memory, одному из портов для записи

25 minutes ago, RobFPGA said:

Вангую что вы хотите механизм по котором один модуль берет контроль на ресурсом. Выполняет несколько транзакций на шине Avalon и затем в конце освобождает ресурс. Второй модуль при этом  ждет освобождения.

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

25 minutes ago, RobFPGA said:

Ну так простейший арбитр на FSM в три состояния  такое делает на раз. Только сигналы запроса и подтверждения доступа будут отдельны от сигналов шины  Avalon

ну вот леплю нечто похожее. Так хотелось что нибудь элегантного готового =)) в qsys или перед ним зацепил и погнали =)

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

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


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

Приветствую!

3 minutes ago, new123 said:

ну вот леплю нечто похожее. Так хотелось что нибудь элегантного готового =)) в qsys зацепил и погнали =)

Этот арбитраж к Avalon шине ничего общего не имеет. Так как вам надо формировать отдельные событие взятия и освобождения ресурса. 

Вы конечно можете эмулировать такое  через стандартный программный протокол mutex сделанного на ячейке памяти. Не знаю как QSYS а в Vivvado были такие модули для MicroBlaze (аппаратные mutex). Но  зачем? - Если ваши модули не содержат MCU будет значительно проще сделать этот "mutex" на паре триггеров.

Удачи! Rob.

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


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

12 hours ago, new123 said:

ну вот леплю нечто похожее. Так хотелось что нибудь элегантного готового =)) в qsys или перед ним зацепил и погнали =)

Как я понял, у вас там все внутри вашего модуля. Простейший RR арбитр, в конце темы, в сорцах есть 

 

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


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

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

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

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

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

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

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

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

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

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