Как получить sc_module_name текущего работающего модуля

Когда я создаю экземпляр, если sc_module Я даю ему строку в качестве имени модуля (sc_module_name).

Как я могу получить название модуля, который в данный момент работает?

5

Решение

Чтобы получить имя модуля, который в данный момент работает в systemc:

использование sc_get_current_process_b чтобы получить текущий исполняемый процесс (SC поток или метод). Тогда используйте get_parent чтобы получить его родителя, который будет модулем. Тогда используйте basename или же name чтобы получить его имя:

const char* name = sc_core::sc_get_current_process_b()->get_parent()->basename();

(опущена обработка ошибок для краткости)

4

Другие решения

Не используйте встроенный макрос для конструктора. Используйте следующее, предполагая, что имя модуля «counter»:

counter(sc_module_name _name):sc_module(_name)
{
cout << "Creating object " << _name;
}

Вы можете делать разные вещи с _name после включения <string>, Ты можешь использовать string()соединить с + оператор и т. д.

0

Этот ответ основан на ответе в этом сообщение.

Вы можете просто использовать метод name() предоставлено sc_object (базовый класс всех sc_module), чтобы получить иерархическое имя этого модуля.

Например, у меня есть тестовый стенд tb_adder который содержит Adder как подмодуль. Тогда в sc_main() функция (или в любом месте вы можете получить доступ к модулю), я могу использовать name() метод, чтобы получить имя каждого модуля.

Исходный код:

#include <systemc>
#include <iostream>SC_MODULE(Adder) {
sc_core::sc_in<bool>             clock;
// more ports definition here

void do_work() {
/*do some work here */
}

SC_CTOR(Adder) {
SC_CTHREAD(do_work, clock.pos());
}
};

SC_MODULE(tb_adder) {
sc_core::sc_in<bool> clock;

Adder *dut;

SC_CTOR(tb_adder) {
dut = new Adder("adder");
dut->clock(clock);
}
};

int sc_main(int argc, char* argv[]) {

sc_core::sc_clock clock ("my_clock", 1, 0.5);

tb_adder tb("tb_adder");
tb.clock(clock);

std::cout << "The name of the tb is: " << tb.name() << std::endl;
std::cout << "The name of the adder is: " << tb.dut->name() << std::endl;

return 0;
}

Выход:

The name of the tb is: cool_tb_adder
The name of the adder is: cool_tb_adder.fun_adder
0
По вопросам рекламы [email protected]