Одинаковые tcm с разными событиями выборки

Я написал TCM для некоторых вычислений на интерфейсах AXI. Тело TCM полностью одинаково для каждого интерфейса, но событие выборки отличается.

Можно ли создать один TCM и запускать его несколько раз с разными событиями выборки (тактовыми частотами)?

0
0
52
1

Ответы 1

Каждый запускаемый вами TCM создает свой собственный поток. Вы можете запускать различные события выборки, изменяя событие выборки для каждого экземпляра. Например. у вас есть 2 экземпляра монитора с TCM, запущенным на событии выборки @sample. вы можете изменить событие, используя аспектную ориентацию (здесь используется аспект имени).

<'
type m_name : [mon1, mon2];
unit mon {
  name : m_name;  // using this aspect to distinguish instances
  event sample;
  tcm()@sample is {
    while (TRUE) {
      message(LOW, "TCM running in " , me);
      wait;
    };
  };
  run() is also {
    start tcm();
  };
};

extend sys {
  // create an event running at half sys.any speed
  !flag: bool;
  on sys.any { flag = not flag;}; 
  event clk is true(flag)@sys.any;

  // 2 mon instances with different names
  m1 : mon is instance;
    keep m1.name == mon1;
  m2 : mon is instance;
    keep m2.name == mon2;
};

// change sampling events per instance
extend mon1'name mon {
  event sample is only @sys.any;
};
extend mon2'name mon {
  event sample is only @get_enclosing_unit(sys).clk;
};
'>

Это отличное решение. Есть ли разница между: extend mon1'name mon и extend mon1 mon?

Chris Johnson 16.09.2018 18:18

без разницы, mon1'mon просто более явный, поскольку он называет определяющее поле, по которому нужно различать.

Nils 18.09.2018 07:17

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