目录
一、读写控制器的配置
二、生成flash的配置文件
三、关于三种配置文件的大小
四、其他
一、读写控制器的配置
Altera ASMI Parallel(下文简称ASMI)这个IP就仅仅是个Flash读写控制器,可以自由的设计数据来源。
关于这个IP的使用,可以参考IP的文档。需要进行相关信号控制来控制IP的行为。这里对这个IP的使用不进行详细的描述。
这个方案的一个问题是,IP默认只支持Intel(Alterad)的Flash,所以如果Flash是其它型号,则不能保证百分之百兼容。建议查看IP文档,使用比较基础的读写控制命令(通常性能差一些但兼容性好的命令);同时在更换Flash之后,进行测试看看是否兼容。
ASMI IP配置中,有一个配置参数:
勾选这两个参数,可以让两个方案同时存在与一个FPGA设计中。这样,可以更自由地选择使用那个方案来进行更新。由于Flash只有一个配置接口,所以两个方案肯定是无法同时使用的。
二、生成flash的配置文件
Quartus中没有直接提供这个格式的文件,不过Quartus下用于Nios2开发的套件(nios2eda)中,有一个小工具:sof2flash在Nios2 Shell中启动这个工具,可以将sof文件转为.flash文件。查看这个.flash工具,就能发现这个文件的语法结构和MCS文件一样。
那么后面的事情就很容量了,用脚本语言(Python)写一个转换工具,生成一个文件,后缀名可以随意取(本人使用.bin这个后缀)。将这个文件以二进制形式读取,直接传给ASMI IP写入Flash,从实际效果看,没有任何问题,FPGA顺利从Flash启动。
这个方法算是另辟路径,用不是很正式的方法将sof文件转为了一个标准的Flash内容描述格式。本人使用的是这种格式。
另外可以通过Quartus提供的文件转换工具,可以将sof转为pof文件。这一步上文已经做了分析,pof并不是直接写入Flash中的文件。
再一次使用文件转换工具,利用pof文件,转为rpd文件。这个rpd文件,就是需要使用的文件。
三、关于三种配置文件的大小
jic、pof和rpd文件,这三个文件是针对Flash的,所以这三个文件的大小是依据Flash而变化的。使用中可以发现这三个文件其实比sof/bin文件大很多。但这三个文件几乎是一样大小的。
用一个例子来说明,假设sof文件是20MB,Flash是128MB。那么bin文件代表sof文件中有效内容,可能是16MB,而由于Flash固定是128MB,则jic/pof/rpd三个文件都几乎是128MB大小,其中只有开头的16MB是有效内容,后面的数据基本为填充的无效数据(或者在生成时添加了其他数据源的数据)
这里有一个例子,rpd文件,二进制用文本展开,32bit一组用8位16进制数表示,一共33554432组,其中ffffffff占了22578142,可以看到几乎大部分都是无效的flash初始数据。
33554432*32bit / 1024/1024 / 8 = 128MB
这个128MB的Flash,大概三分之二都是无用的Flash数据。
这可以侧面验证,jic/pof/rpd文件虽然很大,但其中有效数据并没有很多。
四、其他
亲测使用rbf文件可行,不过要quartus直接输出的那个rbf,不要用转换的那个