Когда я создаю экземпляр, если sc_module
Я даю ему строку в качестве имени модуля (sc_module_name
).
Как я могу получить название модуля, который в данный момент работает?
Чтобы получить имя модуля, который в данный момент работает в systemc:
использование sc_get_current_process_b
чтобы получить текущий исполняемый процесс (SC поток или метод). Тогда используйте get_parent
чтобы получить его родителя, который будет модулем. Тогда используйте basename
или же name
чтобы получить его имя:
const char* name = sc_core::sc_get_current_process_b()->get_parent()->basename();
(опущена обработка ошибок для краткости)
Не используйте встроенный макрос для конструктора. Используйте следующее, предполагая, что имя модуля «counter»:
counter(sc_module_name _name):sc_module(_name)
{
cout << "Creating object " << _name;
}
Вы можете делать разные вещи с _name
после включения <string>
, Ты можешь использовать string()
соединить с +
оператор и т. д.
Этот ответ основан на ответе в этом сообщение.
Вы можете просто использовать метод 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