我可以通过sc_port检索时钟周期吗?
以下代码不起作用。我想调用sc_clock中定义的方法“period()”。
sc_in_clk clk;
* clk.get_interface() - >周期();
答案 0 :(得分:1)
您可以使用dynamic_cast<>
将[{1}}返回的sc_interface
转换为get_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
。