Systemc - округление sc_time до ближайшего десятого SC_NS - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь округлить sc_time с точностью до 10 наносекунд. / перегружен, поэтому можно разделить два sc_time. * также перегружен значениями sc_time и double. Для этого кода я получаю 6, а не 10.

#include <iostream>
#include "systemc.h"

SC_MODULE(X)
{
    SC_CTOR(X)
    {
        SC_THREAD(a);

    }
    void a()
    {   
    sc_time t(6, SC_NS);
    sc_time t1(10, SC_NS);
    double v = (t / t1) *10;
    std::cout << "sc_time update:/ " << v << "\n";


    }
};

int sc_main( int , char* [] )
{
    sc_clock clock;
    X x("x");

    sc_start(1000, SC_NS);

    cout << "Program completed" << endl;
    return 0;
} 

1 Ответ

0 голосов
/ 05 июля 2018

Быстрый просмотр заголовка sc_time https://github.com/systemc/systemc-2.3/blob/master/src/sysc/kernel/sc_time.h показывает, что он выполняет математические операции, используя удвоения, поэтому неудивительно, что 6/10*10==6 вам необходимо добавить явный раунд:

double v = round(t / t1) *10;
...