Jump to content

    

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

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

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

Edited by new123

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
3 hours ago, des00 said:

ound Robin arbiter. Написать, минут 10 времени

спасибо, сейчас погуглю

Share this post


Link to post
Share on other sites

Так вроде в авалоне арбитр уже должен быть (если через Qsys соединять).

Share this post


Link to post
Share on other sites

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

15 hours ago, new123 said:

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

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

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

 

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

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
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:

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

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

Share this post


Link to post
Share on other sites
59 минут назад, new123 сказал:

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

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

Share this post


Link to post
Share on other sites

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

1 hour ago, new123 said:

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

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

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
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 или перед ним зацепил и погнали =)

Edited by new123

Share this post


Link to post
Share on other sites

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

3 minutes ago, new123 said:

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

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

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

Удачи! Rob.

Share this post


Link to post
Share on other sites
12 hours ago, new123 said:

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

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

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this