我可以通过sc_port
检索时钟周期吗?
以下代码不起作用。我想调用 sc_clock
中定义的方法 period()
。
sc_in_clk clk;
*clk.get_interface()->period();
最佳答案
您可以使用dynamic_cast<>
转换 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
指针被返回。如果失败,NULL
已返回。
关于SystemC - 我可以从 sc_in_clk 端口检索时钟周期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32274254/