如果我理解正确,您想从一个文件中获取输入SC_MODULE
并将其发送到另一个文件SC_MODULE
。您没有给出任何限制,因此假设您只想使用二进制 ASCII 编码发送文本,您可以使用 8 位宽度的 sc_port 无符号整数:sc_uint<8>
逐个字符地发送字符串。
发送模块的程序。
对于正确的硬件传输,您需要一些握手信号:
- 就绪信号:检查接收模块是否准备好接收新数据。
sc_in<bool
> rdy
- 有效信号:向接收模块发出新数据在端口上的信号。
sc_out<bool
> vld
- 和数据端口发送字节。小心使用受保护的字“数据”。
sc_out<sc_int<8>
> datap
现在让我们假设您要发送一个包含 10 个字符的文本文件,我认为 for 循环将是执行此操作的最简单和直观的方法。将此代码放在 SC_THREAD 中,因为它包含您只想执行一次的控制逻辑。假设此设计的时钟周期为 10 ns,您将得到如下结果:
// open file for reading
std::ifstream fp_in;
fp_in.open("data.txt", ios::in | ios::binary);
if (fp_in.is_open())
{
cout << "file opened for reading" << endl;
fp_in.seekg(0, ios::beg ); // put file pointer to beginning of file
}
else {
cout << "Unable to open data.txt for reading";
}
// read data from file and send
const int DATALENGHT = 10;
char buffer;
for(int i=0; i<DATALENGHT; ++i)
{
while(rdy.read() != true) wait(10, SC_NS); // wait untill receiver is ready
fp_in.read(buffer, 1);
datap.write(buffer);
vld.write(true);
wait(10, SC_NS); // wait one clockcycle for the receiver to read it.
vld.write(false);
datap.write(0);
}
fp_in.close();