Как использовать заголовочный файл в программе SystemC Hello World?

Я перехожу с 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: Где лучше всего указать область действия атрибута / операции? (Открытый / защищенный / частный).

0

Решение

При отделении реализации от объявлений в SystemC вы можете сделать это обычным способом, как это делается в C ++.

Но когда вам нужен конструктор с более чем одним аргументом (кроме одного по умолчанию, т.е. SC_CTOR принимает имя модуля) вам придется определить свой собственный конструктор.
И если модуль имеет процессы SystemC (SC_THREAD, SC_METHOD, SC_CTHREAD) тогда вам придется использовать SC_HAS_PROCESS макрос, чтобы указать, что ваш модуль имеет процесс / ы.

А в отношении вложенного класса это то же самое, что и в C ++.

Я не уверен, что вы подразумеваете под 3-м вопросом.

1

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

относительно вашего третьего вопроса: вы можете сделать то же самое, что обычно делаете в программе на C ++. Наилучшим местом для определения области действия атрибута / операции является часть объявления SC_MODULE, независимо от того, помещаете ли вы ее в файл cpp или header.
В проекте SystemC обычно только порты и конструктор / деструктор должны быть определены как открытые, чтобы позволить другим модулям соединяться с ним, если у вас нет веских причин и вы хотите нарушить модульность проекта systemc для явного доступа к функциям-членам модуль.

1

По вопросам рекламы [email protected]