У меня есть порт анализа, подключенный к 3 табло. Когда запись выполняется в порт анализа, подписчики (табло) вызываются в определенном порядке. Но я хочу, чтобы они вызывались в другом порядке.
Пример практического использования явного упорядочивания следующий. Одно табло ведет только журнал, поэтому оно должно вызываться первым. Другое табло выполняет очень простые проверки более низкого уровня, поэтому его следует называть вторым. Третье табло выполняет очень сложные проверки более высокого уровня, поэтому его следует называть последним.
Фрагмент SV:
sb1 = scoreboard_1::type_id::create("sb1", null);
sb2 = scoreboard_2::type_id::create("sb2", null);
sb3 = scoreboard_3::type_id::create("sb3", null);
// Connect analysis port to scoreboard
m_ap = new("ap", null);
m_ap.connect(sb2.m_imp);
m_ap.connect(sb3.m_imp);
m_ap.connect(sb1.m_imp);
m_ap.resolve_bindings();
// Write
m_ap.write(10);
Токовый выход:
# UVM_INFO design.sv(15) @ 0: sb1 [write] scoreboard_1
# UVM_INFO design.sv(32) @ 0: sb2 [write] scoreboard_2
# UVM_INFO design.sv(49) @ 0: sb3 [write] scoreboard_3
Как контролировать порядок вызова абонентов? Я хочу, чтобы они были в таком порядке:
- табло_3
- табло_2
- табло_1
Пример кода на EDA Playground: http://www.edaplayground.com/x/2zQ