我目前的iCE40 FPGA项目包括一个连接到4Kx8 RAM的8位(软IP)微处理器,该RAM由8个2Kx2 Block RAM组成。能够将新程序(用于8位微控制器)加载到4kx8 RAM中而无需重新编译或重新路由,这将非常有用。建议的流程需要a)分析FPGA网表,以确定如何排列和命名8个2Kx2块RAM(组成4Kx8 RAM)。 b)将包含新程序(针对8位微)的Intel hex文件拆分为8个部分。 c)找到比特流中的8个块RAM数据部分中的每一个,并用新的节目内容替换每个部分的当前内容。任何来自暴风雪或yosys项目的人都可以评论这个提议的流程是否可行(或者如果解决方案已经存在)。
答案 0 :(得分:4)
编辑:IceStorm现在有一个工具可以执行此操作:icebram
使用示例:
生成随机hex文件以进行综合。假设我们有一个8位宽x 512字深的存储器:icebram -g 8 512 > datafile_syn.hex
运行合成(Yosys)并放置和路径(arachne-pnr)。在Verilog代码中使用$readmemh("datafile_syn.hex", memory);
来初始化内存。
替换生成的IceStorm .asc文件中的内存内容:icebram datafile_syn.hex datafile.hex < synout.asc > final.asc
使用icepack
将最终的IceStorm .asc文件打包成二进制位流。
只要您有新的datafile.hex
。
理论上这当然是可能的,但它还没有实现。 Afaics需要进行以下更改:
1)Yosys&#39; memory_bram
传递需要以某种方式存储信息如何将原始设计中的内存分解为单个SB_RAM40_4K单元格,最好是将此信息存储在单元格中的属性中。
2)Arachne-pnr已经可以创建一个名单。这应该扩展为编写一个文件,其中包含1)中属性的信息以及相关的放置信息。
3)必须编写一个工具,使用此信息修补IceStorm .asc文件的内存内容。
我可以做1)但如果其他人会做2)和3)会很好。