将位向量存储在触发器而不是内存中 - Chisel

Store a bitvector in flipflops instead of memory - Chisel

我想知道 RegMem 在 Chisel 中的用法区别,以及在常见情况下我如何决定选择哪一个。我认为 Mem 是存储大量数据时的最佳选择,因为它会将数据存储到 SRAM 而不是使用 FPGA 片内的触发器,对吗?

如果我想实现一个大的寄存器文件(通常大小的 10 倍),最好使用 Mem 而不是 Reg 吗?

有几点不同。关于使用 SRAM 与触发器的一点是表面差异。事实上,大多数 FPGA 供应商都支持将内存实现为块内存或触发器的想法。从功能上讲,它们是相同的。

由于大多数 FPGA 供应商实现其技术的方式,如果您使用单个 Block RAM 的一小部分,您基本上会使用所有该单个 Block RAM。假设您的设备中有 10 个十块 RAM。你实现了 10 个微小的内存,每个只有一个字节宽可以说......你将使用所有 10 个块 RAM!这不好。如果您拥有的内存表很小,请将它们实现为触发器并将块 RAM 留给大东西。对于你自己的问题,你建议 mem 更适合大数据,这就是为什么这是真的。

下一个问题是时机。事实证明,FPGA 存储器的时序有时会比 Flops 慢。换句话说,如果您有一个在内存中实现的缓冲区,并且发现您无法在 300Mhz 下将设计达到 运行,您可以更改缓冲区以使用触发器,并且可能会挤出额外的速度你需要让你达到 300Mhz。

路由也有差异。根据您的设计,您可能会发现芯片的一个象限中的所有内存都已被利用,因此现在设计正试图进入另一个象限以获得更多块 RAM,从而导致您的逻辑分散。这也可能表现为时机不佳。如果您允许一些内存实例化为触发器,那么您可能会看到您的设计迅速恢复到象限中的形状,因为它不需要扩展以获得额外的资源。

这些是我在为内存选择 RAM 而不是 Flops 时考虑的一些事情。