Я работаю над небольшим проектом в SystemC и получил запас для заполнения sc_lv
(логического вектора) значениями из sc_logic
. Итак:
#include <systemc.h>
#include "fullAdder.h"
SC_MODULE(eightBitAdder)
{
public:
fullAdder *fullAdder_p;
//define I/O
sc_in < bool > clk;
sc_in < sc_lv <8> > A;
sc_in < sc_lv <8> > B;
sc_out < sc_lv <8> > SUM;
sc_out < sc_logic > C_out;
// define internal signals
sc_signal < sc_logic > fa_A, fa_B, fa_SUM, fa_C_out, fa_C_in;
sc_signal < sc_lv <8> > SUM_temp;
SC_CTOR(eightBitAdder)
{
fullAdder_p = new fullAdder("FullAdder");
fullAdder_p -> fa_A(fa_A);
fullAdder_p -> fa_B(fa_B);
fullAdder_p -> fa_C_in(fa_C_in);
fullAdder_p -> fa_SUM(fa_SUM);
fullAdder_p -> fa_C_out(fa_C_out);
SC_CTHREAD(eightBitAdderFunc, clk.pos());
//sensitive << A << B << SUM << C_out;
}
private:
void eightBitAdderFunc()
{
fa_C_in = SC_LOGIC_0;
for (int i = 1; i <= 8; i++)
{
fa_A.write(A.read()[i]);
fa_B.write(B.read()[i]);
wait();
SUM_temp[i] = fa_SUM; //hier is the problem
C_out = fa_C_out;
fa_C_in = fa_C_out;
wait();
}
SUM.write(SUM_temp);
};
};
Сообщение об ошибке:
eightBitAdder.h:55:14: error: no match for ‘operator[]’ in ‘((eightBitAdder*)this)->eightBitAdder::SUM_temp[i]’
Я пробовал несколько способов присвоить fa_SUM
-биты SUM
-векторам и всегда получал одну и ту же ошибку. Например:
SUM_temp[i] = fa_SUM.read();
SUM_temp[i].write(fa_SUM);
SUM_temp[i].write(fa_SUM.read());