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, но без привлечения человека.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org