我在sc_main中设置了大致以下的时钟方案:
double refclk_period = 8000;
double ck1_ratio = 10;
double ck2_ratio = 5;
double ck3_ratio = 6;
sc_clock refclk("refclk", refclk_period, SC_PS);
sc_clock ck1("ck1", refclk_period/ck1_ratio, SC_PS);
sc_clock ck2("ck2", refclk_period/ck2_ratio, SC_PS);
sc_clock ck3("ck3", refclk_period/ck3_ratio, SC_PS);
然后我SC_THREAD
对每个时钟的pos()
敏感。我已经意识到一个问题,即最终ck3
将完全不同步,因为它不会均匀地划分refclk
周期。例如,在8000 ps时,SC_THREAD
观察ck3
最后一次命中为7998 ps。理想情况下,所有时钟应在8000 ps下发射。
这必须是一个常见的问题。在我移植的SystemVerilog代码中,时钟都是手动驱动的。它的工作原理是因为参考时钟驱动其他3,不像我现在在SystemC中那样。是否有推荐的方法与SystemC同步时钟?谢谢!