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

SystemVerilog, доступ из нескольких экземпляров instance к общей памяти/регистрам

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

Теплится у меня надежда, что может есть простое решение. 

В TOP модуле объявил два экземпляра одного и того же модуля. Нужно для них иметь доступ к некоторым общим статусам и иногда их же менять. Ну как глобальные переменные что ли =)
Может есть какие решения в SV, чтобы не писать всякие арбитры памяти и тд. Наивный конечно, чтобы еще и синтезируемое было. Ну а вдруг.

Заранее спасибо за советы.
 

Добавляю. Что я как сама навность попробовал обратиться к статусам:
 

top.status_1 = ...

Квартус это все закомпилил успешно, я обрадовался. А на деле вышла полная фигня.

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

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


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

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

Простое решение для совместного доступа конечно же есть - но вот устроит ли оно вас?  Ведь самое сложное все же придется вам решать - как именно вы хотите делать арбитраж совместного доступа?  Каков паттерн доступа к переменным? А от этого уж будет зависеть на сколько простое решение можно будет реализовать. 

Удачи! Rob.

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


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

1 minute ago, RobFPGA said:

как именно вы хотите делать арбитраж совместного доступа?  Каков паттерн доступа к переменным?

одновременного доступа из двух модулей точно не будет. Так чтобы одновременно захотят прочитать или записать. 
То есть получается последовательный доступ каждого модуля. Прочитал-подсчитал-записал за 1 такт.

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


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

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

1 minute ago, new123 said:

одновременного доступа из двух модулей точно не будет.

Если так то чем обычная dual_port память вас не устраивает?

Вангую что статусы вы еще где то хотите видеть? Так?  Поэтому в общем  не решить такую задачу - надо бы подробнее описать требуемую структуру системы. 

Удачи! Rob.

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


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

13 minutes ago, RobFPGA said:

Если так то чем обычная dual_port память вас не устраивает?

слово память я наверное не совсем точно написал. Регистры.

Ситуация простая. Два экземпляра должны иметь доступ к разного рода общим счетчикам и при определенных триггерах их инкрементировать например.

dual_port это вариант. Но при триггере, это мне 1 такт прочитать, дождаться,  1 такт инкрементировать и записать. Переделок конечно хватает =(

 

upd

я немного отошел от расстройства. Я так думаю надо арбитром назначить TOP модуль. Подать сигналы со значениями в эти модули, и вывести обратно новые значения в TOP. Если на шинах появятся новые значения, TOP уже пусть сам там все прописывает.

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

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


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

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

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.

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


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

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.

спасибо за пример. Это уже получается арбитр в ТОП модуле. И нужно дополнительно прокидывать всякие сигналы, о чем я и сделал вывод. Спасибо за свою идею, интересный подход

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


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

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

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

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

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

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

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

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

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

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