我想知道ChiselReg
和Mem
Chisel 在用法上的区别,以及如何决定在常见场景中选择哪一个。我认为Mem
在存储大量数据时这是最好的主意,因为它将数据存储到 SRAM 而不是使用 FPGA 片内的触发器,对吗?
如果我想实现一个大的寄存器文件(通常大小的 10 倍),最好使用Mem
then 而不是Reg
?
我想知道ChiselReg
和Mem
Chisel 在用法上的区别,以及如何决定在常见场景中选择哪一个。我认为Mem
在存储大量数据时这是最好的主意,因为它将数据存储到 SRAM 而不是使用 FPGA 片内的触发器,对吗?
如果我想实现一个大的寄存器文件(通常大小的 10 倍),最好使用Mem
then 而不是Reg
?
有几个不同之处。关于使用 SRAM 与触发器的一点是表面差异。事实上,大多数 FPGA 供应商都支持将内存实现为块内存或触发器的想法。从功能上讲,它们是相同的。
由于大多数 FPGA 供应商实现其技术的方式,如果您使用单个 Block RAM 的一小部分,您基本上会使用所有单个 Block RAM。假设您的设备中有 10 个十块 RAM。你实现了 10 个微小的内存,每个内存只有一个字节宽,可以说……你将使用所有 10 个块 RAM!这不好。如果您拥有的内存表很小,请将它们实现为触发器并为大的东西保存块 RAM。对于您自己的问题,您建议 mem 更适合大数据,这就是为什么这是真的。
下一个问题,是时机。事实证明,FPGA 存储器的时序有时会比触发器慢。换句话说,如果你有一个在内存中实现的缓冲区,并且发现你无法让设计以 300Mhz 运行,你可以将缓冲区更改为使用触发器,你可能会挤出你需要获得的额外速度你到300Mhz。
也有路由差异。根据您的设计,您可能会发现芯片的一个象限中的所有内存都已被利用,因此现在该设计正试图进入另一个象限以获取更多的块 RAM,从而导致您的逻辑分散。这也可能表现为时机不佳。如果您允许某些内存作为触发器实例化,那么您可能会看到您的设计在一个象限中迅速恢复原状,因为它不需要为额外的资源进行拉伸。
这些是我在选择 RAM 而不是 Flops 作为内存时考虑的一些事情。