SystemC - 我可以从 sc_in_clk 端口检索时钟周期吗?

标签 systemc

我可以通过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_clocksc_interface 的子类.

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

关于SystemC - 我可以从 sc_in_clk 端口检索时钟周期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32274254/

相关文章:

c++ - 错误 : No match to call the 'module'

systemc - SystemC中的增量循环和增量通知是什么?

c++ - Doxygen 如何记录 SC_MODULE 中定义的类?

c++ - 如何初始化一个数组的 systemc 端口名称?

c++ - 参数化 sc_lv 时报告错误(表达式必须具有常量值)

SystemC 构造函数、类

systemc - systemc 中的事件生成

c - 硬件建模的正确语言

c++ - 将 System C 安装到 Cygwin

c++ - 在另一个对象构造函数中初始化不可复制的不可移动对象数组