new123 0 21 мая, 2019 Опубликовано 21 мая, 2019 (изменено) · Жалоба Форумчане, добрый вечер. Два модуля делят между собой ресурс - память через Avalon-MM. Никак я не ожидал, что они (два модуля) могут одновременно такт в такт начать писать в память. Может есть на SV какая готовая реализация мьютекса как это на c++, чтобы самому ничего не придумывать, который сам разрулит барьер при совместном доступе. Заранее спасибо. Изменено 21 мая, 2019 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба Round Robin arbiter. Написать, минут 10 времени. Штатный есть, но он не синтезируется Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба 3 hours ago, des00 said: ound Robin arbiter. Написать, минут 10 времени спасибо, сейчас погуглю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба Так вроде в авалоне арбитр уже должен быть (если через Qsys соединять). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба Приветствую! 15 hours ago, new123 said: Форумчане, добрый вечер. Два модуля делят между собой ресурс - память через Avalon-MM. Никак я не ожидал, что они (два модуля) могут одновременно такт в такт начать писать в память. Может есть на SV какая готовая реализация мьютекса как это на c++, чтобы самому ничего не придумывать, который сам разрулит барьер при совместном доступе. Что вы имеете в виду под понятием мьютекса? Вернее как вы хотите контролировать доступ? На уровне ячеек памяти или транзакций по шине к блоку памяти? Хотите ли вы контролировать атомарность изменения содержимого памяти? Любая шина уже содержит в себе механизмы арбитража доступа со стороны нескольких master к одному slave. Так что тут у вас что-то другое. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба 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: Что вы имеете в виду под понятием мьютекса? барьер памяти от совместного доступа Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 40 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба 59 минут назад, new123 сказал: Я в qsys подцепил avalon pipeline bridge и уже в главном модуле цепляюсь к нему. Так а если подцепить на авалон два бриджа (каждому instance свой бридж)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба Приветствую! 1 hour ago, new123 said: барьер памяти от совместного доступа Опять немного неоднозначно. Вангую что вы хотите механизм по котором один модуль берет контроль на ресурсом. Выполняет несколько транзакций на шине Avalon и затем в конце освобождает ресурс. Второй модуль при этом ждет освобождения. Ну и наоборот. Так простейший арбитр на FSM в три состояния такое делает на раз. Только сигналы запроса и подтверждения доступа будут отдельны от сигналов шины Avalon. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 22 мая, 2019 Опубликовано 22 мая, 2019 (изменено) · Жалоба 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 или перед ним зацепил и погнали =) Изменено 22 мая, 2019 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба Приветствую! 3 minutes ago, new123 said: ну вот леплю нечто похожее. Так хотелось что нибудь элегантного готового =)) в qsys зацепил и погнали =) Этот арбитраж к Avalon шине ничего общего не имеет. Так как вам надо формировать отдельные событие взятия и освобождения ресурса. Вы конечно можете эмулировать такое через стандартный программный протокол mutex сделанного на ячейке памяти. Не знаю как QSYS а в Vivvado были такие модули для MicroBlaze (аппаратные mutex). Но зачем? - Если ваши модули не содержат MCU будет значительно проще сделать этот "mutex" на паре триггеров. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 23 мая, 2019 Опубликовано 23 мая, 2019 · Жалоба 12 hours ago, new123 said: ну вот леплю нечто похожее. Так хотелось что нибудь элегантного готового =)) в qsys или перед ним зацепил и погнали =) Как я понял, у вас там все внутри вашего модуля. Простейший RR арбитр, в конце темы, в сорцах есть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться