我正在努力在FPGA上实现通道解码器。本质上,问题可以归结为:
1)我有一个矩阵。我对行进行一些计算。然后,我对列进行一些计算。
解码器基本上会拾取矩阵的每一行,执行一些操作,然后移至下一行。它与列相同。
但是,解码器在1023 * 1023矩阵上运行,即我有1023行和1023列。
有效的小型测试用例: 我首先创建了reg [1022:0] product_code [0:1],即2行1023列。输出是预期的。但是,LUT的利用率约为9%。然后,我将大小增加到10行1023列(reg [1022:0] product_code [0:9]),这也可以按预期工作。但是资源利用率已上升到27%。
现在我的目标是要获得1023行和1023列。我什至不综合。有没有更好的方法在FPGA上存储这种矩阵?
我非常感谢您的反馈!!!
答案 0 :(得分:2)
您可以从制造商数据表中找到FPGA的存储量。但是,这些存储器是高度可配置的。
因此,可以将36位宽的存储器用作36x1或18x2或4x9单元。另外,您可以读取例如36位,但自己将数据拆分为8位4位。分别处理每个半字节,然后重新写完整。
请确保您正在使用同步内存,因为所有FPGA中的所有大内存块都是同步的。如果您开始使用异步存储器,则必须从LUTS构建存储器,并且很快就会用完。
还请注意,行和列的处理必须考虑数据的存储方式。您可以例如按行存储数据。以半字节为例:当您读取一个36个内存条目时,将为您提供8个半字节的行。但是在列模式下,一次读取将为您提供8个相邻列的前8个条目。因此,理想情况下,您应该同时并行处理8列。