SystemC - 我可以从 sc_in_clk 端口检索时钟周期吗?
SystemC - Can I retrieve clock period from sc_in_clk port?
我可以通过sc_port
获取时钟周期吗?
以下代码无效。我想调用 sc_clock
中定义的方法 period()
。
sc_in_clk clk;
*clk.get_interface()->period();
您可以使用 dynamic_cast<>
将 get_interface()
返回的 sc_interface
转换为 sc_clock
:
#include <iostream>
#include <systemc>
using namespace std;
using namespace sc_core;
SC_MODULE(A) {
sc_in_clk clk;
SC_CTOR(A) {}
void start_of_simulation() {
sc_clock *channel = dynamic_cast<sc_clock *>(clk.get_interface());
cout << name() << ": period is "
<< (channel ? channel->period() : SC_ZERO_TIME) << endl;
}
};
int sc_main(int argc, char *argv[]) {
A a1("a1");
A a2("a2");
sc_clock clk("clk", 3.0, SC_NS);
sc_signal<bool> fake_clk("fake_clk");
a1.clk(clk);
a2.clk(fake_clk);
sc_start(10, SC_NS);
return EXIT_SUCCESS;
}
之所以可行,是因为 sc_clock
是 sc_interface
的子类。
如果dynamic_cast<>
成功,则返回一个有效的sc_clock
指针。如果失败,返回 NULL
。
我可以通过sc_port
获取时钟周期吗?
以下代码无效。我想调用 sc_clock
中定义的方法 period()
。
sc_in_clk clk;
*clk.get_interface()->period();
您可以使用 dynamic_cast<>
将 get_interface()
返回的 sc_interface
转换为 sc_clock
:
#include <iostream>
#include <systemc>
using namespace std;
using namespace sc_core;
SC_MODULE(A) {
sc_in_clk clk;
SC_CTOR(A) {}
void start_of_simulation() {
sc_clock *channel = dynamic_cast<sc_clock *>(clk.get_interface());
cout << name() << ": period is "
<< (channel ? channel->period() : SC_ZERO_TIME) << endl;
}
};
int sc_main(int argc, char *argv[]) {
A a1("a1");
A a2("a2");
sc_clock clk("clk", 3.0, SC_NS);
sc_signal<bool> fake_clk("fake_clk");
a1.clk(clk);
a2.clk(fake_clk);
sc_start(10, SC_NS);
return EXIT_SUCCESS;
}
之所以可行,是因为 sc_clock
是 sc_interface
的子类。
如果dynamic_cast<>
成功,则返回一个有效的sc_clock
指针。如果失败,返回 NULL
。