一个 SC_CTHREAD 和另一个 SC_CTHREAD 之间的通信延迟一个时钟周期
One clock cycle delay in communication between one SC_CTHREAD and another SC_CTHREAD
我正在尝试使用 sc_cthread
的主内存模块和也是 SC_CTHREAD
的主内存状态机对简单的直接映射缓存进行建模。我观察到从我的主内存模块写入一个信号并在状态机上接收它的一个时钟周期延迟。
如何在一个时钟周期内完成?
使用 SC_CTHREAD 时,您无法避免线程之间的延迟。当从一个 CTHREAD 写入 sc_signal 时,值更改将仅在下一个时钟边沿对另一个 CTHREAD 可见。
如果您必须使用 CTHREAD(即使用高级综合),那么避免跨线程延迟的唯一方法是将两种功能都放在一个 CTHREAD 中。
如果你只需要一个行为模型来模拟,那么你可以使用SC_THREADs和sc_events。一个线程可以生成一个 sc_event,第二个线程正在等待它。当第二个线程唤醒该事件时,它可以观察到第一个线程所做的 sc_signal 更改,然后生成输出(如果需要,与时钟边沿对齐)。使用 sc_events 可以采样和更新信号 "between" 时钟边沿。
我正在尝试使用 sc_cthread
的主内存模块和也是 SC_CTHREAD
的主内存状态机对简单的直接映射缓存进行建模。我观察到从我的主内存模块写入一个信号并在状态机上接收它的一个时钟周期延迟。
如何在一个时钟周期内完成?
使用 SC_CTHREAD 时,您无法避免线程之间的延迟。当从一个 CTHREAD 写入 sc_signal 时,值更改将仅在下一个时钟边沿对另一个 CTHREAD 可见。
如果您必须使用 CTHREAD(即使用高级综合),那么避免跨线程延迟的唯一方法是将两种功能都放在一个 CTHREAD 中。
如果你只需要一个行为模型来模拟,那么你可以使用SC_THREADs和sc_events。一个线程可以生成一个 sc_event,第二个线程正在等待它。当第二个线程唤醒该事件时,它可以观察到第一个线程所做的 sc_signal 更改,然后生成输出(如果需要,与时钟边沿对齐)。使用 sc_events 可以采样和更新信号 "between" 时钟边沿。