我有一个用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}。
感谢。
答案 0 :(得分:0)
在标准C ++中,没有方法可以一次读取一位I / O或内存。
大多数处理器喜欢一次读取位的“字”。这可以是8,16,32或64或者可能是其他。
大多数FPGA接口基于8,16或32位宽的寄存器。这使得布线更容易,并且喜欢S / W人员。
否则,您输入了一些位并执行一些位操作技巧来处理剩余的位。
例如,您可以将数组设为16x16位并忽略其余位吗?
如果需要特殊位数,建议使用SPI或I2C总线。它们可以在位级别进行计时,并且可以调整数据位宽。