【问题标题】:modify iCE40 bitstream to load new block RAM content修改 iCE40 比特流以加载新的 Block RAM 内容
【发布时间】:2016-04-25 23:23:38
【问题描述】:

我当前的 iCE40 FPGA 项目包括一个 8 位(软 IP)微处理器,该微处理器连接到一个 4Kx8 RAM,该 RAM 由 8 个 2Kx2 块 RAM 组成。能够将新程序(对于 8 位微控制器)加载到 4kx8 RAM 中而不需要重新编译或重新路由 FPGA 将会很有用。建议的流程需要 a) 分析 FPGA 网表,以确定 8 个 2Kx2 块 RAM(构成 4Kx8 RAM)的排列和命名方式。 b) 将包含新程序(对于 8 位微)的 Intel hex 文件分成 8 个部分。 c) 在比特流中找到 8 个 Block RAM 数据段中的每一个,并将每个段的当前内容替换为新的程序内容。 icestorm 或 yosys 项目中的任何人都可以评论一下这个提议的流程是否可行(或者如果解决方案已经存在)。

【问题讨论】:

    标签: yosys


    【解决方案1】:

    编辑:IceStorm 现在有一个工具可以做到这一点:icebram

    示例用法:

    1. 生成一个随机的 hex 文件进行综合。假设我们有一个 8 位宽 x 512 字深的内存:icebram -g 8 512 > datafile_syn.hex

    2. 运行综合 (Yosys) 和布局布线 (arachne-pnr)。在您的 Verilog 代码中使用 $readmemh("datafile_syn.hex", memory); 来初始化内存。

    3. 替换生成的 IceStorm .asc 文件中的内存内容:icebram datafile_syn.hex datafile.hex < synout.asc > final.asc

    4. 使用icepack将最终的 IceStorm .asc 文件打包成二进制比特流。

    只要您有新的datafile.hex,只需重复步骤 3 和 4。


    理论上这当然是可能的,但还没有实现。 Afaics 需要进行以下更改:

    1) Yosys 的memory_bram pass 需要以某种方式存储原始设计中的内存如何分解为单个 SB_RAM40_4K 单元的信息,最好将此信息存储在单元的属性中。

    2) Arachne-pnr 已经可以创建一个地点列表。这应该扩展为还编写一个文件,其中包含来自 1) 中属性的信息以及相关的放置信息。

    3) 必须编写使用此信息修补 IceStorm .asc 文件的内存内容的工具。

    我可以做 1),但如果其他人愿意做 2) 和 3),那就太好了。

    【讨论】:

    • 嗨,克利福德,感谢您的回复。出于我的目的,我认为另一种解决方案会起作用。我认为有可能仅使用分析/修改比特流的工具(通过一些人工干预)找到解决方案。
    • 既然我们知道原始比特流的 RAM 的初始内容,应该可以确定块 RAM 的排列方式(通过一些人为干预)并且一旦我们知道块 RAM 的排列方式,我们可以拆分新的所需 RAM 内容并相应地重写比特流内容。我想我可能会根据您已经编写的比特流分析工具编写一个工具流来做我想做的事情,但我可能需要一些提示和一些指导。
    • @scd 通过电子邮件与我联系,邮箱为cliford@clifford.at 或cliffordvienna@gmail.com,我们可以讨论如何为您提供支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2017-06-06
    • 2019-09-02
    • 1970-01-01
    相关资源
    最近更新 更多