ChiselのReg
とMem
の使用法の違いを知りたいのですが、共通シナリオでどちらを選択するかはどのように決定できますか。私はMem
は、大量のデータを保存するときに、FPGaスライス内のフリップフロップを使用するのではなく、SRAMにデータを保存することを想定していると思いますか?メモリの代わりにflipflopsにビットベクトルを格納Chiesel
大きなレジスタファイル(通常の10倍のサイズ)を実装したい場合は、Mem
とReg
のisteadを使用するのが最善でしょうか?
ChiselのReg
とMem
の使用法の違いを知りたいのですが、共通シナリオでどちらを選択するかはどのように決定できますか。私はMem
は、大量のデータを保存するときに、FPGaスライス内のフリップフロップを使用するのではなく、SRAMにデータを保存することを想定していると思いますか?メモリの代わりにflipflopsにビットベクトルを格納Chiesel
大きなレジスタファイル(通常の10倍のサイズ)を実装したい場合は、Mem
とReg
のisteadを使用するのが最善でしょうか?
いくつかの違いがあります。 SRAMとフロップを使用することについての1つの点は、表面の違いのようなものです。実際、ほとんどのFPGAベンダーは、メモリをブロックメモリまたはフロップとして実装するという考え方をサポートしています。機能的には、それらは同じであろう。
ほとんどのFPGAベンダーがテクノロジを実装する方法のため、単一のブロックRAMをわずかに使用すると、基本的にそのすべての単一ブロックRAMが使用されます。あなたのデバイスに10個のブロックRAMがあるとします。あなたは10の小さなメモリを実装しています。それぞれのバイトは1バイトだけです。あなたは10個のブロックRAMをすべて使用します!それは良いことではありません。あなたが持っているメモリテーブルが小さい場合、それらをフロップとして実装し、大きなもののためにブロックRAMを保存してください。あなた自身の質問に、大規模なデータの方がmemが優れているとお考えの方は、これが正しい理由です。
次の問題はタイミングです。 Flopsに比べて、FPGAメモリへのタイミングが遅くなることがあります。言い換えれば、あなたがメモリに実装したバッファを持っていて、300Mhzで実行するデザインが得られなかったことが分かっていれば、バッファをフロップを使用するように変更して、必要な余分なスピードを絞り出すことができますあなたは300Mhzに。
ルーティングの違いもあります。設計によっては、チップの1つの象限にあるすべてのメモリが利用されているので、デザインが別の象限に到達しようとしているため、ブロックRAMが増え、ロジックが広がります。これはまた、タイミングが悪いことを示す可能性もあります。いくつかのメモリをフロップとしてインスタンス化することができれば、余分なリソースのために伸ばす必要がないため、デザインが四分円の形に戻ってきてしまうことがあります。
これは、メモリ上でフロップを超えてRAMを選択するときに考えることのいくつかです。