欢迎您访问Altera代理商网站

公司简介 联系我们 网站地图

欢迎来电咨询

4000-969-680

新闻资讯

全国服务热线

4000-969-680

技术过硬,据实报价

新闻动态

当前位置: 主页 > 新闻资讯 > 新闻动态

Altera平台远程更新中FPGA读写Flash设计的讨论

2022-10-28 11:17 已有人浏览 小编

Flash读写控制方案

与Xilinx相比,Intel(Altera)提供了读写控制器方案。而且,同时提供了两个方案。

首先,Altera似乎没有开放配置Flash的Pin的控制。如果没有找到办法直接控制这些Pin,也就没有办法自行设计Flash读写控制器。

自行设计Flash读写控制器的优点在于可控性很高,缺点在于需要花费时间设计并进行稳定性测试。相应的,使用提供的Flash读写控制器IP,优点是免去设计和测试的成本,但缺点在于兼容性。

由于提供的IP可选项很少,可以使用的操作命令也有限,所以很难保证这个IP能兼容哪些Flash。即使能兼容,也可能只能使用基础的操作命令,而部分高级操作比如快速擦写等,不保证能兼容。


方案一:JTAG烧录Flash

在专栏文章《FPGA远程更新设计的需求分析》中,分析了EDA工具通过JTAG烧录Flash的操作。

1.上位机主动发起配置,FPGA被动接收数据进行重配置,此时的配置模式是上文提到的基于JTAG的被动配置。此操作的结果是将FPGA配置为一个Flash的读写器。
2.配置完成后,上位机开始发送/接收Flash的数据,数据通道为JTAG。FPGA通过JTAG接收到数据之后,根据需求发起对Flash的读写操作,将需要更新的数据写入Flash,完成更新。此过程是更新Flash的过程,烧录过程中Flash只收到FPGA的控制。
3.Flash更新完毕后,在合适的时候让FPGA进行重新配置(例如重新上下电),FPGA会开始主动配置过程,从Flash中读取配置数据完成加载。

配置过程是将原厂提供的JTAG-Flash读写控制器加载到FPGA中,在通过JTAG和这个内部的FPGA控制器烧录Flash。这个JTAG-Flash读写控制器本身也是一个设计。Xilinx并没有将这个设计独立提供出来给用户,不过Altera将这个设计以IP的方式提供给用户使用。

上图是串口Flash的读写控制器,在IP Catalog中还能找到Altera Parallel Flash Loader这个IP。这里仅以Altera Serial Flash Loader(下文简称ASFL)为例做简单介绍。关于IP的具体细节,请参考IP的手册。

将这个IP集成到FPGA工程中就可以直接使用。烧录工具为Quartus Programmer,烧录文件为.jic文件。

在烧录的时候,点选jic文件,上一行会自动勾选上,第一行也会变为Factory default SFL image。此时即为下载内置的镜像,将FPGA配置为Flash读写控制器。如果将第一行勾选去掉,则工具会自动尝试在FPGA当前设计中寻找ASFL IP。如果找不到,则直接提示错误,不会做任何变化;如果找到ASFL IP,则利用JTAG进行Flash的烧录工作。这里重点提示,使用这个方法的时候务必取消第一行自动勾选上的Factory default SFL image。

这种用法的最大限制在于需要使用Quartus Programmer工具和JTAG。如果有条件,在环境中拥有Quartus支持的OS系统和JTAG Cable的硬件连接,则可以使用这个方案。由于有OS的存在,镜像Jic文件可以通过OS来管理文件的传输,再通过远程访问OS,启动Quartus Programmer,烧录Jic文件。

但是,对于某些环境,OS和JTAG是无法获取的。所以还需要另一个方案来适配更多的应用场景。

方案二:Flash读写控制器

方案一的IP结合了JTAG和FLASH读写控制器,数据通路固定是JTAG。而Altera ASMI Parallel(下文简称ASMI)这个IP就仅仅是个Flash读写控制器,可以自由的设计数据来源。

关于这个IP的使用,可以参考IP的文档。需要进行相关信号控制来控制IP的行为。这里对这个IP的使用不进行详细的描述。

这个方案的一个问题是,IP默认只支持Intel(Alterad)的Flash,所以如果Flash是其它型号,则不能保证百分之百兼容。建议查看IP文档,使用比较基础的读写控制命令(通常性能差一些但兼容性好的命令);同时在更换Flash之后,进行测试看看是否兼容。

方案一的截图中,有一个配置参数:

方案二的ASMI IP配置中,有一个配置参数:

勾选这两个参数,可以让两个方案同时存在与一个FPGA设计中。这样,可以更自由地选择使用那个方案来进行更新。由于Flash只有一个配置接口,所以两个方案肯定是无法同时使用的。

ltera配置文件分析

方案一已经是个完备的方案,无奈对使用环境有着较高的要求。所以方案二才是更通用的方法。不过相对方案一直接使用jic文件,方案二只是一个Flash读写控制器,并没有说明将什么数据写入Flash。所以需要找到写入文件的数据。

Altera常见的几个配置文件:sof/pof/jic/rbf

sof文件是最基本的文件,用这个文件作为基础可以直接用Quartus Programmer进行JTAG下载。同时也可以通过这个sof文件生成其它文件。

pof是针对altera Flash的配置文件器。需要用Quartus Programmer软件,通过JTAG烧录Flash。由于这个文件需要使用JTAG连接Flash,所以在很多环境下并不使用这个文件进行配置。

jic是间接配置Flash的文件,具体使用已经介绍过了。

rbf文件,从名称看是二进制文件,可能最接近写入Flash的文件。

由于并没有在Intel(Altera)网站上找到几种配置文件的具体数据内容和格式,所以需要手动分析文件内容。实际上这几种格式没有一种可以直接写入Flash

这里已经得到最终的数据文件,暂时称之为bin文件,下面直接给出各个文件无法使用的原因。文件基于Altera A10系列FPGA。

1.sof

对比最终写入Flash的数据,几乎看不到正常的数据,怀疑是存在一些Quartus工具才能识别的命令。

2.pof文件

pof文件是针对Flash的,所以里面内容和rbf文件有大部分都是相同的。

不过差别在于pof文件前面有大量的不明数据,不清楚具体作用,所以

左边为rbf文件,右边为pof文件

和正确的bin文件相比,pof前面的开头部分确实也是多余的。所以rbf也比pof文件更接近于最终的bin文件。

3.rbf文件

rbf文件确实几乎非常接近最终的文件。

左边为bin文件,右边为rbf文件

从文件格式中可以看到,数据可以对应上,只是位序有点不同。

不过比较大的问题是,rbf文件的开头相比bin文件,少了一些内容。

左边为bin文件开头,右边为rbf文件开头

调整位序对FPGA开发来说,几乎没有难度。不过开头这些数据的作用,就不太清楚了。如果有条件可以尝试写入rbf文件,试试FPGA能否从Flash中加载成功。本人尝试过两次,失败后直接尝试bin文件。对于rbf无法成功的原因,并没有深究。所以失败也有可能是操作失误导致的,而rbf文件是可以这样使用的。

4.jic

对比发现jic和pof文件的格式位序一样,但开头依然多出部分数据。多出来的部分长度几乎和pof文件一样,但数据内容由不完全相同,所以怀疑开头部分包括了一些Quartus工具的操作命令,如果直接写入Flash,可能会导致无法加载成功。

从上述分析可以看到,Quartus提供的四种配置文件,并没有保证直接对应Flash中的数据,对比后也发现多少都有点出入。由于没有找到对各自文件详细的内容说明,所以也不便于直接修改。

所以这就是使用ASMI方案的最大问题,如何获取最终的写入Flash的数据。

从这一点说,Xilinx的方案其实更直接,直接使用原始的二进制数(bit、bin)文件,或者标准文件——MCS

Flash标准内容文件

Xilinx的MCS文件,后缀mcs是Xilinx独有的,但是其内容是标准格式。

MCS为文本文件,查看内容,可以看到两种内容。第一种是相对较短的一行,第二种是相对较长的一行。

真实数据是保存在较长的一行。分析后可以看到较长行的长度都是一样的。具体内容是,前端若干位是控制符(包含地址),然后是具体数据,之后是校验码。找到规律后,就可以直接提取其中内容了。

Quartus中没有直接提供这个格式的文件,不过Quartus下用于Nios2开发的套件(nios2eda)中,有一个小工具:sof2flash

在Nios2 Shell中启动这个工具,可以将sof文件转为.flash文件。查看这个.flash工具,就能发现这个文件的语法结构和MCS文件一样。

那么后面的事情就很容量了,用脚本语言(Python)写一个转换工具,生成一个文件,后缀名可以随意取(本人使用.bin这个后缀)。将这个文件以二进制形式读取,直接传给ASMI IP写入Flash,从实际效果看,没有任何问题,FPGA顺利从Flash启动。

TAG: