SystemC简化仿真引擎简介

本文详述了SystemC仿真内核的运作流程,包括模块构建、仿真参数设定、进程初始化与执行、事件处理及仿真终止条件。重点介绍了进程在就绪池与等待池间的转换,以及仿真内核如何通过评估进程状态推进仿真时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 以下简化的流程图说明了SystemC仿真内核的操作流程。

首先,如前面“modules”中所讨论的那样进行详细说明。 在elab过程中,构建SystemC模块并建立各种仿真参数。 这个elab阶段之后是对sc_start()的调用,它调用仿真内核。 此调用开始初始化阶段。 需要启动在elab期间定义的进程(例如,SC_THREAD进程)。 在初始化阶段,所有进程最初都放在就绪池中。 定义:只要可以执行,进程就会准备就绪。

我们有时会说进程被放入准备执行的进程池中。 下图描绘了进程和事件池。

然后,仿真进入评估阶段。通过将它们指定为运行和调用,从就绪池中随机地取出一个个进程。每个进程程一直执行,直到它完成(例如,通过return)或暂停(例如,调用wait())。
在执行期间,进程可以调用立即事件通知(即,event.notify())并且可能使一个或多个等待进程处于就绪状态。如上图中的E1-E4所示,还可以生成延迟或定时事件通知。已完成的进程将被丢弃。暂停的进程被放入等待池中。仿真继续进行,直到没有更多进程准备好运行。

此时,执行将退出上图底部的评估气泡,其中包含三种可能性之一:等待进程或零延迟时间,非零时间延迟或两者都不存在的事件。

首先,可能存在等待SC_ZERO_TIME延迟(.notify(0))的进程或事件(稍后将讨论)。这种延迟称为deltacycle延迟。在这种情况下,具有零时间延迟的等待池进程被放回到就绪池中。源自延迟通知的零时间事件可能导致等待这些事件的进程也被放入就绪池中。如果已将任何进程移入就绪池,则会进行另一轮评估。

其次,可能存在稍后安排的等待非零时间延迟发生的进程或事件。在这种情况下,时间提前到指示的最近时间。等待该特定延迟的进程将被放入就绪池中。如果在此新时间发生事件,则等待该事件的进程将放入就绪池中。如果已将任何进程移入就绪池,则会进行另一轮评估。
第三,可能没有延迟的过程或事件。由于就绪池中没有进程,因此模拟只需返回sc_main并完成清理即可结束。无法在SystemC的当前定义中成功重新输入sc_start。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值