Ich versuche, in SystemC einen Block zu simulieren, der die rote Komponente von zwei Pixeln P1
und P2
hinzufügt und immer die grünen und blauen Komponenten von Pixel P1
behält. Ich habe das Pixel als ein struct und dessen Überlastfunktion in der folgenden Art und Weise erklärt:Wie kann ich eine Struktur als Signaltyp in SystemC verwenden?
struct pixel {
sc_uint<8> r;
sc_uint<8> g;
sc_uint<8> b;
pixel(sc_uint<8> _r = 0, sc_uint<8> _g = 0, sc_uint<8> _b = 0): r(_r), g(_g), b(_b) { }
bool operator == (const pixel &other) {
return (r == other.r) && (g == other.g) && (b == other.b);
}
// Displaying
friend ostream& operator << (ostream& o, const pixel& P) {
o << "{" << P.r << "," << P.g << "," << P.b << "}" ;
return o;
}
};
//Overload function
void sc_trace(sc_trace_file* _f, const pixel& _foo, const std::string& _s) {
sc_trace(_f, _foo.r, _s + "_r");
sc_trace(_f, _foo.g, _s + "_g");
sc_trace(_f, _foo.b, _s + "_b");
}
Dann ich das Addiermodul kodiert haben unter Berücksichtigung, dass die Signale sc_in
sind vom Typ pixel
, wie folgt:
SC_MODULE(adder){
sc_in<pixel> pin1;
sc_in<pixel> pin2;
sc_out<pixel> pout;
SC_CTOR(adder){
SC_METHOD(addpixel);
sensitive << pin1 << pin2;
}
void addpixel(){
sc_uint<8> ir;
sc_uint<8> ig;
sc_uint<8> ib;
ir = pin1.r + pin2.r;
ig = pin1.g;
ib = pin1.b;
pout = pixels(ir,ig,ib);
cout << " P1 = " << pin1 << endl;
cout << " P2 = " << pin2 << endl;
}
};
erhalte ich folgende Kompilierung Fehler:
test.cpp:46:13: error: ‘class sc_core::sc_in<pixel>’ has no member named ‘r’
ir = pin1.r + pin2.r;
^
test.cpp:46:22: error: ‘class sc_core::sc_in<pixel>’ has no member named ‘r’
ir = pin1.r + pin2.r;
^
test.cpp:47:13: error: ‘class sc_core::sc_in<pixel>’ has no member named ‘g’
ig = pin1.g;
^
test.cpp:48:13: error: ‘class sc_core::sc_in<pixel>’ has no member named ‘b’
ib = pin1.b;
^
<builtin>: recipe for target 'test' failed
ich mag würde wissen, wie könnte das Verfahren addpixel
Zugang zu jeder Komponente RGB der Pixel und machen die Operation. Wenn ich die Fehlerzeilen lösche, komme ich an, um im Terminal die Werte der Pixel P1
und P2
anzuzeigen.