new123 0 5 февраля, 2020 Опубликовано 5 февраля, 2020 (изменено) · Жалоба Форумчане, добрый вечер. Теплится у меня надежда, что может есть простое решение. В TOP модуле объявил два экземпляра одного и того же модуля. Нужно для них иметь доступ к некоторым общим статусам и иногда их же менять. Ну как глобальные переменные что ли =) Может есть какие решения в SV, чтобы не писать всякие арбитры памяти и тд. Наивный конечно, чтобы еще и синтезируемое было. Ну а вдруг. Заранее спасибо за советы. Добавляю. Что я как сама навность попробовал обратиться к статусам: top.status_1 = ... Квартус это все закомпилил успешно, я обрадовался. А на деле вышла полная фигня. Изменено 5 февраля, 2020 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 5 февраля, 2020 Опубликовано 5 февраля, 2020 · Жалоба Приветствую! Простое решение для совместного доступа конечно же есть - но вот устроит ли оно вас? Ведь самое сложное все же придется вам решать - как именно вы хотите делать арбитраж совместного доступа? Каков паттерн доступа к переменным? А от этого уж будет зависеть на сколько простое решение можно будет реализовать. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 5 февраля, 2020 Опубликовано 5 февраля, 2020 · Жалоба 1 minute ago, RobFPGA said: как именно вы хотите делать арбитраж совместного доступа? Каков паттерн доступа к переменным? одновременного доступа из двух модулей точно не будет. Так чтобы одновременно захотят прочитать или записать. То есть получается последовательный доступ каждого модуля. Прочитал-подсчитал-записал за 1 такт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 5 февраля, 2020 Опубликовано 5 февраля, 2020 · Жалоба Приветствую! 1 minute ago, new123 said: одновременного доступа из двух модулей точно не будет. Если так то чем обычная dual_port память вас не устраивает? Вангую что статусы вы еще где то хотите видеть? Так? Поэтому в общем не решить такую задачу - надо бы подробнее описать требуемую структуру системы. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 5 февраля, 2020 Опубликовано 5 февраля, 2020 (изменено) · Жалоба 13 minutes ago, RobFPGA said: Если так то чем обычная dual_port память вас не устраивает? слово память я наверное не совсем точно написал. Регистры. Ситуация простая. Два экземпляра должны иметь доступ к разного рода общим счетчикам и при определенных триггерах их инкрементировать например. dual_port это вариант. Но при триггере, это мне 1 такт прочитать, дождаться, 1 такт инкрементировать и записать. Переделок конечно хватает =( upd я немного отошел от расстройства. Я так думаю надо арбитром назначить TOP модуль. Подать сигналы со значениями в эти модули, и вывести обратно новые значения в TOP. Если на шинах появятся новые значения, TOP уже пусть сам там все прописывает. Изменено 5 февраля, 2020 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 5 февраля, 2020 Опубликовано 5 февраля, 2020 · Жалоба Приветствую! 25 minutes ago, new123 said: Ситуация простая. Два экземпляра должны иметь доступ к разного рода общим счетчикам и при определенных триггерах их инкрементировать например. Не зря я спрашивал о паттернах доступа - для отдельных счетчиков возможно одновременный доступ как на чтение так и на запись с двух и более портов! При условии конечно что в одном клоковом домене все. Делаете что то типа ALU always_ff @(posedge clk) begin if (wr_2 || wr_1) begin case {wr_2, inc_2, wr_1, inc_1} 4'b00_10: count <= count-val_1; 4'b10_10: count <= count-val_1-val_2; 4'b00_11: count <= count+val_1; ... default :count <= count; // 4'b0x_0x endcase end end Вот вам и одновременный доступ Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 5 февраля, 2020 Опубликовано 5 февраля, 2020 · Жалоба 10 minutes ago, RobFPGA said: Приветствую! Не зря я спрашивал о паттернах доступа - для отдельных счетчиков возможно одновременный доступ как на чтение так и на запись с двух и более портов! При условии конечно что в одном клоковом домене все. Делаете что то типа ALU always_ff @(posedge clk) begin if (wr_2 || wr_1) begin case {wr_2, inc_2, wr_1, inc_1} 4'b00_10: count <= count-val_1; 4'b10_10: count <= count-val_1-val_2; 4'b00_11: count <= count+val_1; ... default :count <= count; // 4'b0x_0x endcase end end Вот вам и одновременный доступ Удачи! Rob. спасибо за пример. Это уже получается арбитр в ТОП модуле. И нужно дополнительно прокидывать всякие сигналы, о чем я и сделал вывод. Спасибо за свою идею, интересный подход Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться