我如何检查sc_buffer和sc_signal之间的差异
How can I check the difference between sc_buffer and sc_signal?
我想检查使用sc_buffer
和sc_signal
之间的差异。我已经编码了一个模块,它添加了两个随机数,然后我并行运行两个测试:一个使用sc_buffer
,另一个使用sc_signal
。然而,当我检查gtkwave
时,我看到两个例子都有相同的痕迹,所以我认为在这种情况下应该没有任何区别。我如何查看差额呢?还是这两种不同类型的通道用于不同的应用?
sc_buffer
可能在抽象级别建模时最有用。
sc_signal
作为通道,则接收器不会检测到第二个字符,但使用sc_buffer
,则可以。
#include <systemc>
#include <iostream>
using namespace sc_core;
using namespace std;
struct Transmitter : public sc_module {
sc_out<char> out;
Transmitter(sc_module_name name) : sc_module(name) {
SC_THREAD(transmit);
}
void transmit() {
wait(1, SC_NS);
out.write('x');
wait(1, SC_NS);
out.write('x');
wait(1, SC_NS);
out.write('y');
};
SC_HAS_PROCESS(Transmitter);
};
struct Receiver : public sc_module {
sc_in<char> in;
Receiver(sc_module_name name) : sc_module(name) {
SC_METHOD(receive);
sensitive << in;
dont_initialize();
}
void receive() {
cout << sc_time_stamp() << ": " << name() << " received "
<< in.read() << endl;
}
SC_HAS_PROCESS(Receiver);
};
int sc_main(int argc, char* argv[])
{
sc_signal<char> signal;
sc_buffer<char> buffer;
Transmitter signal_transmitter("signal_transmitter");
Receiver signal_receiver("signal_receiver");
Transmitter buffer_transmitter("buffer_transmitter");
Receiver buffer_receiver("buffer_receiver");
signal_transmitter.out(signal);
signal_receiver.in(signal);
buffer_transmitter.out(buffer);
buffer_receiver.in(buffer);
sc_start();
return 0;
}
上面的示例产生如下输出:
1 ns: signal_receiver received x
1 ns: buffer_receiver received x
2 ns: buffer_receiver received x
3 ns: signal_receiver received y
3 ns: buffer_receiver received y
注意signal_receiver
没有检测到在2ns发送的字符。
在VCD跟踪中不会看到任何差异,因为存储在sc_buffer
和sc_signal
通道中的值是相同的。区别在于何时触发接收器
您可以查看下面的答案,了解sc_buffer
和sc_signal
之间的区别。
在SystemC中,sc_signal_in/out类型端口可以绑定到主通道sc_buffer吗?
sc_buffer
基本上是从sc_signal
派生出来的,它重新实现了write
和update
函数,为每次更改生成通知。因此,如果您生成的新数字与写入通道的前一个数字相同,并且您在每个事件通知中转储一些输出,您应该会看到一些差异。
相关文章:
- 调用 raise(signal) 会终止 c++ 程序
- 未调用 signal() 指定的处理程序
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- 将成员函数传递给 std::signal
- 在 C++11 中,signal.h 标头没有 kill 函数
- QTableWidget dataChanged SIGNAL
- connect(QObject*, SIGNAL(signal()), functor) 在 qt5 中未连接
- "Static polymorphism with Qt signal/slot: What is wrong?"
- 为什么此程序以"unknown signal"终止?
- llvm 异常 - 提高异常 "?:Unknown signal"
- 为什么我可以通过自定义对话框获得"QMetaObject::connectSlotsByName: No matching signal"?
- Signal ReadyRead()不执行插槽
- Qt UDPsocket readyread() SIGNAL 发出两次
- QObject::connect not connecting signal to slot
- 对qt中的signal和slots使用另一个类对象
- QAbstractSpinBox - indexChanged signal
- SIGSEGV(signal 11) 'segmentation fault' in FCTRL2 codechef
- 如何将变量从main传递到signal和slot宏
- Android, CMDTool, stdout redirect, "Fatal signal 11 (SIGSEGV)"
- 如何从QListView的SIGNAL/SLOT传递/检索参数