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