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_clocksc_interface 的子类。

如果dynamic_cast<>成功,则返回一个有效的sc_clock指针。如果失败,返回 NULL