修改 iCE40 比特流以加载新的块 RAM 内容

scd*_*scd 3 yosys

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

Cli*_*nna 5

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

用法示例:

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

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

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

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

每当您获得新的datafile.hex.


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

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

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

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

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