Индексация массива экземпляров и интерфейсов

У меня есть набор интерфейсов. Я знаю, что массив экземпляров и интерфейсов не похож на обычные массивы, которые можно индексировать с помощью переменной, здесь мы должны индексировать с помощью константы (или с помощью блока генерации), и именно в этом проблема.

Я использую блок генерации для хранения идентификатора подчиненного устройства назначения, которому мастер отправляет пакеты в соответствии с предоставленным адресом. Здесь m_ahb — это массив интерфейсов мастера. Я также сохранил идентификатор подчиненного устройства назначения, т. Е. Для мастера 0 идентификатор назначения находится в dest_slave [0], для мастера 1 он находится в dest_slave [1] и так далее.

Пока здесь все хорошо.

Затем, скажем, для мастера 0 я использую значение dest_slave[0] для индексации массива подчиненных интерфейсов (s_ahb) и выбора соответствующего подчиненного интерфейса назначения для проверки сигнала и использования его в утверждении. Но теперь я получаю сообщение об ошибке «непостоянный индекс массива в массиве экземпляров».

Любая помощь/совет по этому поводу будет принята с благодарностью. Спасибо.

int dest_slave[NUM_MASTERS];
generate
  for (genvar i = 0; i < NUM_MASTERS; i++) begin
    always_ff @(posedge clk, negedge resetn) begin
      if (m_ahb[i].haddr >= 'h0000_0000 && m_ahb[i].haddr <= 'h0000_ffff) dest_slave[i] = 0;
      if (m_ahb[i].haddr >= 'h1000_0000 && m_ahb[i].haddr <= 'h1000_ffff) dest_slave[i] = 1;
      if (m_ahb[i].haddr >= 'h4000_0000 && m_ahb[i].haddr <= 'h4000_ffff) dest_slave[i] = 2;
    end
  end
endgenerate
generate
  for (genvar i = 0; i < NUM_MASTERS; i++) begin
    assert property my_proprty(m_ahb[i].hburst,s_ahb[dest_slave[i]]].hburst); //this line creates error it is not liking s_ahb[dest_slave[i]]
  end
endgenerate

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
234
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что s_ahb — это экземпляр модуля или не виртуальный интерфейс. К этим типам массивов путей нельзя получить динамический доступ. Вы можете создать логику для разделения зондирования и сопоставления.

int dest_slave[NUM_MASTERS];
int slave_hburst_val[NUM_MASTERS]; // <- change data type as needed
generate
  for (genvar i = 0; i < NUM_MASTERS; i++) begin
    always_ff @(posedge clk, negedge resetn) begin
      if (m_ahb[i].haddr >= 'h0000_0000 && m_ahb[i].haddr <= 'h0000_ffff) dest_slave[i] = 0;
      if (m_ahb[i].haddr >= 'h1000_0000 && m_ahb[i].haddr <= 'h1000_ffff) dest_slave[i] = 1;
      if (m_ahb[i].haddr >= 'h4000_0000 && m_ahb[i].haddr <= 'h4000_ffff) dest_slave[i] = 2;
    end

    assign slave_hburst_val[i] = s_ahb[i].hburst; // intermediate assignment

    assert property my_proprty( m_ahb[i].hburst, slave_hburst_val[ dest_slave[i] ] );
  end
endgenerate

К вашему сведению: в вашем исходном коде есть лишний ]. s_ahb[dest_slave[i]]].hburst

Другие вопросы по теме