Система C - Чтение в шине данных по одному биту за раз

У меня есть простой блок, написанный на System C, который принимает два массива 10x10 и выполняет умножение матриц на них для получения вывода 10x1. Проблема, с которой я сталкиваюсь, заключается в том, что эти массивы 10x10 фактически хранятся как «двойники», поэтому данные, поступающие в этот блок, очень велики, а использование пространства на плате FPGA, которую я использую, слишком велико для моих целей.

Как мне последовательно читать один бит за такт массивов 10x10, чтобы я не пытался вставить два двойных массива 10x10 за один такт?

Как мне также настроить свой тестовый стенд для отправки этих данных?

В настоящее время в моем модуле у меня есть:

sc_in<double> in_0;
double [10][10] input_0;
void init_0(){
    int i, j;
    for (i=0; i<10; i++){
        for(j=0; j<10; j++){
            input_0[i][j] = in_0.read();

        }
    }
}

    SC_METHOD(init_0);
        sensitive << in_0 << clock.pos();

и мой тестовый стенд работает следующим образом:

    for(i=0; i<10; i++){
        for(j=0; j<10; j++){
            in_0 = j;
            wait();
        }
    }

Эти два фрагмента кода предназначены только для настройки данных перед умножением матриц. Текущий код создает input_0 как матрицу 10x10, содержащую все 9, то есть последнее значение цикла double for в моем тестовом стенде. Мне нужен массив 10x10, где каждая строка равна {0 1 2 3 4 5 6 7 8 9}.

Спасибо.


person user1220086    schedule 10.03.2014    source источник
comment
Это было бы довольно легко сделать в чем-то вроде VHDL или Verilog, но я гораздо менее уверен в том, как управлять этим в SystemC.   -  person Jerry Coffin    schedule 10.03.2014


Ответы (1)


В стандартном C++ нет способа чтения ввода-вывода или памяти побитно.

Большинству процессоров нравится читать «слово» битов за раз. Это может быть 8, 16, 32 или 64 или что-то другое.

Большинство интерфейсов FPGA основаны на 8-, 16- или 32-битных регистрах. Это упрощает проводку и радует тех, кто занимается программным обеспечением.

В противном случае вы вводите количество битов и выполняете некоторые трюки с битовыми манипуляциями, чтобы обработать оставшиеся биты.

Например, можете ли вы сделать массив размером 16x16 бит и проигнорировать оставшиеся биты?

Если вам нужно специальное количество бит, я рекомендую использовать шины SPI или I2C. Они могут синхронизироваться на уровне битов и настраиваются по разрядности данных.

person Thomas Matthews    schedule 10.03.2014