Я перехожу с C ++ на SystemC, встретил следующие основные вопросы. (Я искал в Google, но получил только примеры в одном файле .cpp). Заранее спасибо.
Я знаю следующие работы «hello.cpp»:
//hello.cpp
#include "systemc.h"
SC_MODULE (hello_world) {
SC_CTOR (hello_world) {
}
void say_hello() {
cout << "Hello World.\n";
}
};
int sc_main(int argc, char* argv[]) {
hello_world hello("HELLO");
hello.say_hello();
return(0);
}
Вопрос 1: Как я могу разделить его на hello.h и hello.cpp? Следующий код на C ++, я не знаю, как создать эквивалентный код SystemC.
//hello.h
class hello_world
{
public:
hello_world();
void say_hello();
};
//hello.cpp
hello_world::hello_world()
{
}
hello_world::say_hello()
{
cout << "Hello World.\n";
}
Вопрос 2: Как создать вложенный класс в SystemC? Например. каков эквивалентный код SystemC в соответствии со следующим C ++?
class foo
{
public:
int fooAttr1;
class bar
{
public:
int barAttr1;
};
};
Вопрос 3: Где лучше всего указать область действия атрибута / операции? (Открытый / защищенный / частный).
При отделении реализации от объявлений в SystemC вы можете сделать это обычным способом, как это делается в C ++.
Но когда вам нужен конструктор с более чем одним аргументом (кроме одного по умолчанию, т.е. SC_CTOR
принимает имя модуля) вам придется определить свой собственный конструктор.
И если модуль имеет процессы SystemC (SC_THREAD
, SC_METHOD
, SC_CTHREAD
) тогда вам придется использовать SC_HAS_PROCESS
макрос, чтобы указать, что ваш модуль имеет процесс / ы.
А в отношении вложенного класса это то же самое, что и в C ++.
Я не уверен, что вы подразумеваете под 3-м вопросом.
относительно вашего третьего вопроса: вы можете сделать то же самое, что обычно делаете в программе на C ++. Наилучшим местом для определения области действия атрибута / операции является часть объявления SC_MODULE, независимо от того, помещаете ли вы ее в файл cpp или header.
В проекте SystemC обычно только порты и конструктор / деструктор должны быть определены как открытые, чтобы позволить другим модулям соединяться с ним, если у вас нет веских причин и вы хотите нарушить модульность проекта systemc для явного доступа к функциям-членам модуль.