C++ 如何检查sc_缓冲器和sc_信号之间的差异?

C++ 如何检查sc_缓冲器和sc_信号之间的差异?,c++,systemc,gtkwave,C++,Systemc,Gtkwave,我想检查一下使用sc\u缓冲器和sc\u信号之间的区别。我编写了一个模块,将两个随机数相加,然后并行运行两个测试:一个使用sc\u buffer,另一个使用sc\u signal。然而,当我使用gtkwave检查时,我看到两个示例的轨迹相同,因此我认为对于这种情况,应该没有任何区别。如何检查差异?或者这两种不同类型的通道是针对不同的应用而设计的?您可以查看下面的答案,了解sc\u缓冲区和sc\u信号之间的差异 sc\u buffer基本上源于sc\u信号,它重新实现了写入和更新功能,为每次更改

我想检查一下使用
sc\u缓冲器
sc\u信号
之间的区别。我编写了一个模块,将两个随机数相加,然后并行运行两个测试:一个使用
sc\u buffer
,另一个使用
sc\u signal
。然而,当我使用
gtkwave
检查时,我看到两个示例的轨迹相同,因此我认为对于这种情况,应该没有任何区别。如何检查差异?或者这两种不同类型的通道是针对不同的应用而设计的?

您可以查看下面的答案,了解
sc\u缓冲区
sc\u信号
之间的差异

sc\u buffer
基本上源于
sc\u信号
,它重新实现了
写入
更新
功能,为每次更改生成通知。
因此,如果您生成的新数字与写入通道的前一个数字相同,并且在每次事件通知时转储一些输出,您应该会看到一些差异。

sc\u buffer
在抽象级别建模时可能最有用

例如,考虑对串行通信信道进行建模。发射机可以连续两次发送相同的字符。如果使用
sc\u信号
作为通道,则接收器不会检测到第二个字符,但使用
sc\u缓冲区
,它会检测到第二个字符

#包括
#包括
使用名称空间sc_-core;
使用名称空间std;
结构变送器:公共sc_模块{
sc_out;
变送器(sc_模块名称):sc_模块(名称){
SC_线程(传输);
}
无效传输(){
等待(1,秒);
out.写出('x');
等待(1,秒);
out.写出('x');
等待(1,秒);
out.写出('y');
};
SC_有_过程(变送器);
};
结构接收器:公共sc_模块{
理工大学;
接收器(sc_模块名称):sc_模块(名称){
SC_方法(接收);

敏感的谢谢,我已经读过那篇文章,但我仍然不清楚在什么情况下有必要知道某个频道是否被写入。在我提到的例子中,我也尝试过总是添加相同的两个数字,所以每次我都得到相同的结果。然而,当我在
gtkwave
I中检查跟踪时看到相同的结果。我不知道这是否正常,或者在写入缓冲区时,这是否是检查值更改事件的正确位置。可能您看不到波形中的差异,因为缓冲区更改触发器生成相同的值,而您的方法将处理并生成完全相同的输出。=>输入d输出将继续保持不变,即使缓冲器产生了一个触发器,并且将显示为与sc_信号相同的输出,而sc_信号没有产生变化。如果您进行某种显示(cout),当sc_buiffer可以使用时,您应该能够在终端中看到额外的显示。