Как остановить симуляцию SystemC из CTHREAD и завершить симуляцию определенным кодом выхода? - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть тестовый стенд SystemC (для VHDL DUT, но это сейчас не имеет значения).Мне бы хотелось, чтобы тест завершался с определенным кодом выхода изнутри SC_CTHREAD.Я довольно новичок в SystemC (я в основном парень verilog / sv).

Я попытался просто включить "exit (error_code)", но пока это завершает симуляцию, окончательный код выхода приходит из моегооператор возврата sc_main.Я думаю, это имеет смысл, так как «выход», вероятно, завершает отдельный поток с этим кодом выхода, но не потоком sc_main.

Я пытался вызвать sc_stop перед этим выходом, и обычно получаю ошибку о вызовечисто виртуальный метод (я считаю, что это end_of_simulation, который я не определил .... но это не обязательно, верно?).

Единственный способ повлиять на код выхода процесса - это изменитьоператор возврата sc_main, но он не совсем работает, когда все мои действия происходят в SC_THREAD, созданном где-то конструктором объекта (если это не очевидно, я действительно не понимаю, как SystemC работает очень хорошо, возможно, потому что естьмножество скрытых действий с секретными классами, которые мы не видим, в отличие от verilog, где упорядочение симуляции - все, что есть, при условии, что вы понимаете блокирование / неблокирование).

Есть ли способ для SC_THREADпередать некоторую информацию об ошибках в sc_main?

Примечание: я работаю синструмент коммерческого моделирования, а не чистый C ++.Возможно, там есть ошибка реализации.Я пытаюсь запустить нашу чистую компиляцию C ++, но она, похоже, давно сломалась (я не отвечаю за модель SystemC).

1 Ответ

0 голосов
/ 22 апреля 2019

Ответ, конечно же, заключается в том, чтобы sc_main получал возвращаемое значение, обращаясь непосредственно к модулю, который он создает для получения переменной члена:

return(test_module.exit_code);

Мне нужно помнить, что мывсе еще работает C ++ и применяются основные правила C ++, так что это возможно.В своем дизайне аппаратного обеспечения я раскручивал модули и потоки, которые не имели связи с классами, которыми они на самом деле являются.

...