3

我当前的 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 项目中的任何人都可以评论这个提议的流程是否可行(或者如果解决方案已经存在)。

4

1 回答 1

5

编辑:现在 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. 将最终的 IceStorm .asc 文件打包成带有icepack.

每当您获得新的datafile.hex.


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

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

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

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

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

于 2016-04-26T07:46:20.777 回答