Забавляюсь последнее время по работе с СистемСи. Это такая надстройка над Си++, по сути набор классов для симуляции цифровых электронных систем. Пародия на СистемВерилог: работает так же шустро, и не стоит никаких денег. Но код выглядит ужасно.
Цифровые схемы уже несколько приелись, и решил я развлечься чем-нибудь более человеческим. Благо, к СистемСи народ умудрился добавить расширение для работы с аналоговыми вещами.
Зацените: модель материальной точки с одной степенью свободы. Как бы аналоговый элемент с одним входом и двумя выходами. На входе воздействующая сила, на выходе скорость и координата. Внутренний параметр - масса.
Добавляем второй элемент - пружину, получаем маятник. Результат симуляции выглядит вполне симпатично:

Полные исходники примера можно посмотреть здесь: https://code.google.com/p/vak-opensource/source/browse/#svn%2Ftrunk%2Fhardware%2Fsystemc-ams
Но все это не просто ради забавы. Есть у меня задумка попытаться сделать одноногого прыгающего робота. Типа Pogo Stick, но без привлечения человека.
Цифровые схемы уже несколько приелись, и решил я развлечься чем-нибудь более человеческим. Благо, к СистемСи народ умудрился добавить расширение для работы с аналоговыми вещами.
Зацените: модель материальной точки с одной степенью свободы. Как бы аналоговый элемент с одним входом и двумя выходами. На входе воздействующая сила, на выходе скорость и координата. Внутренний параметр - масса.
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);
}
};Добавляем второй элемент - пружину, получаем маятник. Результат симуляции выглядит вполне симпатично:

Полные исходники примера можно посмотреть здесь: https://code.google.com/p/vak-opensource/source/browse/#svn%2Ftrunk%2Fhardware%2Fsystemc-ams
Но все это не просто ради забавы. Есть у меня задумка попытаться сделать одноногого прыгающего робота. Типа Pogo Stick, но без привлечения человека.

no subject
Date: 2014-10-21 13:39 (UTC)Нет, в большинстве реальных цифровых случаев SystemC медленнее симулируется, чем SystemVerilog на VCS.Так было еще в 2000 году, а скорость VCS после этого повысилась, а SystemC не повысилась.
no subject
Date: 2014-10-21 18:21 (UTC)Вообще я не думаю, что их можно сравнить в лоб. Это как про слона и кита: кто кого сборет?
Но вот цитата от людей с опытом:
"You are rigth, our measures also indicates that the simulation in SystemC and in Verilog run at almost the same speed. SystemC creators said that one of the advantages of SystemC is the speed, obviously is not true, maybe Cadence NCSystemC is faster, I dont know, but the GPL implementation of SystemC not.
But the main advantage I think is not the simulation speed. I think the main advantage of SystemC is the verification environment, the SystemC Verification Library and the easy way to integrate C code that allows to create a very powerfull verification environment. 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."
http://www.thecodingforums.com/threads/why-systemc.22835/
Я НЕ МЕРЯЛ????
Date: 2014-10-21 18:28 (UTC)Кроме собственных измерений, я внимательно читал измерения, сделанные такими титанами индустрии как Сангвинетти.
Единственный вариант, когда SystemC может быть быстрее - это с повышением уровня абстракции за счет оперирования с более сложными структурами данным untimed алгоритмами.
Re: Я НЕ МЕРЯЛ????
Date: 2014-10-21 18:31 (UTC)Re: Я НЕ МЕРЯЛ????
Date: 2014-10-21 18:36 (UTC)Далее,
*** 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?