系统C - 一次一位地读取数据总线

时间:2014-03-10 19:00:10

标签: fpga systemc

我有一个用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();

我的testbench运行如下:

    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}。

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

大多数FPGA接口基于8,16或32位宽的寄存器。这使得布线更容易,并且喜欢S / W人员。

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

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

如果需要特殊位数,建议使用SPI或I2C总线。它们可以在位级别进行计时,并且可以调整数据位宽。