vak: (Улыбка)
[personal profile] vak
Забавляюсь последнее время по работе с СистемСи. Это такая надстройка над Си++, по сути набор классов для симуляции цифровых электронных систем. Пародия на СистемВерилог: работает так же шустро, и не стоит никаких денег. Но код выглядит ужасно.

Цифровые схемы уже несколько приелись, и решил я развлечься чем-нибудь более человеческим. Благо, к СистемСи народ умудрился добавить расширение для работы с аналоговыми вещами.

Зацените: модель материальной точки с одной степенью свободы. Как бы аналоговый элемент с одним входом и двумя выходами. На входе воздействующая сила, на выходе скорость и координата. Внутренний параметр - масса.

SCA_TDF_MODULE(point_mass) {
    sca_in force_in<double>;
    sca_out velocity_out<double>;
    sca_out position_out<double>;

    double mass;
    double position;
    double velocity;
    double time_last;

    SCA_CTOR(point_mass) {
        mass = 1.0; // 1 kg by default
        position = 0;
        velocity = 0;
        time_last = 0;
    }

    void set_attributes() {
        set_timestep(0.001, SC_SEC);
        position_out.set_delay(1);
    }

    void processing() {
        double force = force_in.read();
        double time_now = get_time().to_seconds();
        double delta_t = time_now - time_last;

        velocity += delta_t * force / mass;
        position += velocity * delta_t;
        time_last = time_now;

        velocity_out.write(velocity);
        position_out.write(position);
    }
};


Добавляем второй элемент - пружину, получаем маятник. Результат симуляции выглядит вполне симпатично:

Симуляция в SystemC-AMS

Полные исходники примера можно посмотреть здесь: https://code.google.com/p/vak-opensource/source/browse/#svn%2Ftrunk%2Fhardware%2Fsystemc-ams

Но все это не просто ради забавы. Есть у меня задумка попытаться сделать одноногого прыгающего робота. Типа Pogo Stick, но без привлечения человека.

Я НЕ МЕРЯЛ????

Date: 2014-10-21 18:28 (UTC)
From: [identity profile] panchul.livejournal.com
Я НЕ МЕРЯЛ???? Да я в 1999-2002 намерял более чем достаточно, ибо сначала SystemC конкурировал против моего CycleC, потом я работал в группе VCS, которая тоже была врагом SystemC, но с другой стороны.

Кроме собственных измерений, я внимательно читал измерения, сделанные такими титанами индустрии как Сангвинетти.

Единственный вариант, когда SystemC может быть быстрее - это с повышением уровня абстракции за счет оперирования с более сложными структурами данным untimed алгоритмами.

Re: Я НЕ МЕРЯЛ????

Date: 2014-10-21 18:36 (UTC)
From: [identity profile] panchul.livejournal.com
Я мерял в Synopsys-е в 2002 году. Я не могу вытащить внутренние синопсисовские файлы. Про эти измерения были статьи в EE Times еще в 1999 году.

Далее,

*** the SystemC Verification Library ***

Что-то тут не то. Мне на DVCON'11 сказали из SystemC, что SystemC Verification Library провалилась. Она что, воскресла?

*** It is true that you can also can made similar things using Verilog and PLI but is not so easy and here with simulating Verilog with PLI, the simulation is slower than one only with SystemC ***

Это не может быть "человек с опытом". "Человек с опытом" прекрасно должен знать, что после 2001 года (когда появился DirectC / DPI) любые слова про PLI - это введение читателя в заблуждение. Ибо общеизвестный факт, что PLI принципиально медленнее чем DPI, и говорить про PLI не упоминая DPI - это либо человек устарел лет на 15, либо вводит намеренно читателя в заблуждение. Это как судить о MIPS по MIPS R2000.

Даже SystemC внутри использует DPI для интерфейса с verilog-ом в VCS. Так на хрена делать заведомо некорректное сравнение, вводя в сравнение заведомо тормознутый PLI bottleneck?
Edited Date: 2014-10-21 18:41 (UTC)