Я пытаюсь отладить более крупную программу, которую я написал, и я извлек один из потоков, который в основном записывает массив из 24 значений в fifo, а другой конец - это еще один поток, который должен читать данные только после того, как все они было написано.
Передача.ч
#include "stdafx.h"
#include <iostream>
SC_MODULE(Transmit){
sc_inout <bool> ServerTx;
sc_fifo_out<int> PacketTx;
void Tx();
SC_CTOR(Transmit){
sc_fifo<int> PacketTx(24);
SC_THREAD(Tx){}
}
};
Transmit.cpp
#include "stdafx.h"
#include "Transmit.h"
void Transmit::Tx(){
int imageInfo[24] = { 1, 3, 2, 4, 1, 200, 600, 400, 800, 2, 400, 200, 600, 400, 3, 600, 400, 800, 600, 4, 800, 600, 1000, 800 };
while (1){
if (ServerTx == 0){
cout << "ServerTx Before Write: " << ServerTx << endl;
for (int i = 0; i < 24; i++){
cout << "Transmit Value: " << imageInfo[i] << endl;
PacketTx.write(imageInfo[i]);
}
ServerTx = 1;
cout << "ServerTx After Write: " << ServerTx << endl;
}
else{
cout << "Done Transmitting Packet." << endl;
}
}
}
Main.cpp
#include "stdafx.h"
#include "Transmit.h"
int _tmain(int argc, _TCHAR* argv[])
{
sc_signal <bool> ServerTx;
sc_fifo<int> Packet(24);
Transmit t1("Transmit");
t1.PacketTx(Packet);
t1.ServerTx(ServerTx);
ServerTx = 0;
sc_start();
return 0;
}
Что я вижу, так это то, что независимо от типа, который я объявляю своим сигналом ServerTx
, он никогда не обновляет свое значение. Я не знаю, есть ли какая-то задержка в systemC с обновлением значений сигнала или нет, но я понятия не имею, что делать дальше. Я расширяю это простое рукопожатие в большую программу, которую я написал, и если это не сработает, мне, возможно, придется отказаться от всего этого.
Вот отладочная распечатка того, что я вижу. Я ожидал, что ServerTx
будет равно 1, так как я только что установил его значение, но оно остается равным 0. Не знаю, что происходит, или я что-то неправильно понимаю в SystemC.
Обновление:
Добавление wait(SC_ZERO_TIME);
после цикла while работало при изменении значения ServerTx
, но теперь, когда я добавляю его в свой код получения, я получаю следующую ошибку:
Вот мой код получения:
#include "stdafx.h"
#include "Receive.h"
void Receive::Rx(){
while (1){
if (ServerTx == 1){
cout << "ServerTx before Read: " << ServerTx << endl;
for (int i = 0; i < 24; i++){
imageInfo[i] = PacketRx.read();
cout << "Receive Value: " << imageInfo[i] << endl;
}
ServerTx = 0; //Done reading server packet data
cout << "ServerTx after Read: " << ServerTx << endl;
}
else{
wait(10, SC_NS);
}
wait(SC_ZERO_TIME);
}
}
и я изменил Main.cpp на следующее:
#include "stdafx.h"
#include "Receive.h"
#include "Transmit.h"
int _tmain(int argc, _TCHAR* argv[])
{
sc_signal <bool> ServerTx;
sc_fifo<int> Packet(24);
Receive r1("Receive");
r1.PacketRx(Packet);
r1.ServerTx(ServerTx);
Transmit t1("Transmit");
t1.PacketTx(Packet);
t1.ServerTx(ServerTx);
ServerTx = 0;
sc_start();
return 0;
}