0

我有一个用 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,即我的测试台中双 for 循环的最后一个值。我想要一个 10x10 数组,其中每一行是 {0 1 2 3 4 5 6 7 8 9}。

谢谢。

4

1 回答 1

0

在标准 C++ 中,没有一种方法可以一次读取一位 I/O 或内存。

大多数处理器喜欢一次读取一个“字”位。这可以是 8、16、32 或 64 或其他。

大多数 FPGA 接口基于 8、16 或 32 位宽的寄存器。这使接线更容易,并使 S/W 人高兴。

否则,您已经输入了一定数量的位并执行了一些位操作技巧来处理剩余的位。

例如,您可以将数组设为 16x16 位并忽略其余位吗?

如果您想要特殊数量的位,我建议使用 SPI 或 I2C 总线。它们可以在位级别上计时,并且可以调整数据位宽。

于 2014-03-10T22:09:04.103 回答