запрос на «запись» члена в «chol_out_data», который не относится к классу

Мой файл cholesky.cpp:

#include "chol.h"
#include <math.h>

//Main Thread

void chol::chol_main () {
    // Variable declaration
    sc_fixed<16,10, SC_TRN, SC_WRAP> chol_output[3][3];
    sc_fixed<16,10, SC_TRN, SC_WRAP> chol_in[3][3];
    int n=3;

    //Main Thread
    while (true) {
        for (int i=0; i<n; i++){
            for(int j=0; j<=i; j++){
                chol_in[i][j] = chol_in_data[i][j].read();
            }
        }
    }

    for (int i=0; i<n; i++){
        for (int j=0; j<=i; j++){
            sc_fixed<16,10, SC_TRN, SC_WRAP> sum = 0;
            for (int k=0; k<j; k++){
                sum += chol_output[i][k] * chol_output[j][k];
            }

            if (i==j){
                chol_output[i][i] = sqrt(chol_in[i][i] - sum) ;
            }else{
                chol_ouput[i][j] = 1.0 / chol_ouput[j][j] * (chol_in[i][j] - sum);
            }
        }
    }

    chol_out_data.write(chol_output);   
}

Заголовочный файл для этого хол.х:

#ifndef CHOL
#define CHOL
#define SC_INCLUDE_FX
#include "define.h"

SC_MODULE (chol) {
public:
   // Inputs
   sc_in_clk clk;
   sc_in <bool> rst;
   sc_in <sc_fixed<16,10, SC_TRN, SC_WRAP> > chol_in_data[3][3] ;

   // Output
   sc_out <sc_fixed<16,10, SC_TRN, SC_WRAP> > chol_out_data[3][3] ;

   /* F */
   void chol_main ( void );

   // Constructor
   SC_CTOR (chol) {
       SC_CTHREAD (chol_main, clk.pos());
       reset_signal_is(rst, false) ;
       sensitive << clk.pos();
   }

   // Destructor
   ~chol() {}
};

#endif

Выход:

g++  -O1 -I"/home/mahesh/systemc/systemc-2.3.1a/include" -I"." -c cholesky.cpp -o cholesky.o
    cholesky.cpp: In member function ‘void chol::chol_main()’:
    cholesky.cpp:47:5: error: ‘chol_ouput’ was not declared in this scope
         chol_ouput[i][j] = 1.0 / chol_ouput[j][j] * (chol_in[i][j] - sum);
         ^


    cholesky.cpp:54:17: error: request for member ‘write’ in ‘chol_out_data’, which is of non-class type ‘sc_core::sc_out<sc_dt::sc_fixed<16, 10, (sc_dt::sc_q_mode)5u, (sc_dt::sc_o_mode)3u> > [3][3]’
       chol_out_data.write     (chol_output);                                       
                     ^

    Makefile:90: recipe for target 'cholesky.o' failed
    make: *** [cholesky.o] Error 1

Я выполняю матричную декомпозицию и записываю вывод двумерного массива модуля холецкого в сигнальный порт, который подключен к модулю тестового стенда холецкого.

Я объявил переменную chol_output внутри области видимости; тем не менее, я получаю ту же ошибку, что она выходит за рамки. Кроме того, в нем говорится, что «запись» не относится к классу.

Кто-нибудь может помочь?


person mahesh    schedule 26.03.2017    source источник
comment
chol_ouput не chol_output !! и у массива нет метода записи   -  person Jean-François Fabre    schedule 26.03.2017
comment
Тогда как я буду записывать свои значения в выходной порт?   -  person mahesh    schedule 26.03.2017


Ответы (1)


Для первой ошибки вы просто неправильно написали chol_output как chol_ouput.

Вторая ошибка заключается в том, что он говорит: chol_out_data не является объектом класса, поэтому вы не можете использовать . на нем. Это массив массивов объектов класса.

person aschepler    schedule 26.03.2017
comment
Спасибо, что указали на мою первую ошибку. Во-вторых, в systemC для записи в выходной порт мы должны использовать '.' оператор. Я объявил chol_out_data своим выходным портом и пытаюсь записать свои значения в выходной порт. Теперь моя проблема заключается в том, что я не могу записать переменную массива в свой выходной порт, она выдает следующую ошибку: неверное преобразование из 'sc_dt::sc_fixed‹16, 10, (sc_dt::sc_q_mode)5u, (sc_dt::sc_o_mode )3u› (*)[3]' to 'sc_dt::uint64 {aka long long unsigned int}' [-fpermissive] chol_out_data[i][j].write (chol_output); - person mahesh; 26.03.2017