【问题标题】:How to create memory in rocket-chip generator which will map as block ram in FPGA after synthesis?如何在火箭芯片生成器中创建内存,合成后将映射为 FPGA 中的块 ram?
【发布时间】:2020-11-02 13:04:20
【问题描述】:

我尝试使用 Mem(1024,UInt(width=xLen));但是在Xilinx vivado中合成生成的verilog文件后,内存映射为分布式ram。 理解和编辑生成的 RTL 文件真的很难。是否有任何明确的方法来定义可以推断为块 ram 的内存?

感谢和问候,

【问题讨论】:

    标签: riscv chisel rocket-chip


    【解决方案1】:

    看起来凿子正在优化内存。如果您希望将内存作为单个单元DontTouch,请尝试使用 DontTouch 构造。另一种解决方案是在 Mem 周围使用包装器。在 Mem 周围创建一个 Module,然后使用 DontTouch 构造,使其保持为一个单元。你确定要使用 Mem 构造吗? Mem 是 Asynchronous ,如果你想要 Synchronous Memory 使用 SyncReadMem Chisel 构造。还要在合成之前和之后检查您的 Verilog 文件,也许 Chisel 不是这里的罪魁祸首。检查 Xilinx Vivado 是否没有对其进行优化。

    【讨论】:

    • 您好,感谢您的回复,我不知道 Mem 是异步的。我想推断同步内存,但在使用 SyncMem 时出现以下错误: not found: value SyncMem。请帮忙。
    • 是 SyncReadMem 检查这个链接github.com/freechipsproject/chisel3/wiki/Memories
    • 您好,问题已解决。设计有问题。我试图同步读取,但在单个实例中可能会调用两次以上的读/写操作(我可能正在尝试实现三个端口 ram)。从逻辑上讲,Block Ram 不可能实现这种实现。所以在 chisel/Vivado 中没有问题。我改变了整体设计的分辨率。尽管 chisel 是高级语言,但硬件实现与 verilog 相同。
    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    相关资源
    最近更新 更多