微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于Altera FPGA采用MAX器件实现动态加载的问题

关于Altera FPGA采用MAX器件实现动态加载的问题

时间:10-02 整理:3721RD 点击:
最近在做一个小课题,实现Altera FPGA的动态加载问题,在一块子板上有Stratix IV核以及MAX II核,将fpga中编译后的sof文件转换成rbf格式的文件,并通过外部显控写入板上flash中。系统上电后,通过cpld读取flash中的程序,采用fpp的加载方式加载到fpga中。
根据《stratix4_handbook》手册中page342起关于fpp加载方式的描述,有压缩/非压缩两种格式,相应的加载的时序图也不一样,前者每4个dclk输出一字节数据,后者每1个dclk输出一字节数据,详情可参考手册。可以通过项目设置生成压缩/非压缩的文件,也可以直接导出rbf文件或者通过Quartus自带的文件转换功能将sof转换成rbf文件的格式。不知这样的方式是否有问题?另外一点,我发现,不论是压缩/非压缩方式,最后生成的sof和rbf文件都差不多大小啊,没有明显区别。

本课题采用非压缩格式,时序相对简单,由于flash不是连续读取的,每次读取16位数据,因此dclk时钟并非一直都有,存在停止的时候,根据手册所说:只有在“two clock cycles after the last data byte was latched into the Stratix IV device when you do not use the Stratix IV decompression and/or design security features”情况下可以停止时钟。因此,我每读取16位数据并转换成2字节数据依次发送之后,额外再发送两个时钟,不知这样是否正确?

目前调试的时候采用cpld中读取数据,转接到fpga中去观察,采用vio手动控制的方式给出fpga_nstatus信号以及fpga_conf_done信号,signaltap采样的波形看似没问题,当我将cpld中fpga_dclk信号、fpga_data信号、fpga_nconfig信号管脚分配之后,当我开始加载后,原来的fpga中的在线配置的程序确实是掉了,但是新的flash中的程序一直加载不上。愁死我了。

不知道论坛里有没有朋友做过类似的工作,能否给小弟一点点建议一点点思路。万分感谢,抱拳!

自己顶啊。总感觉自己代码没问题,就是加载不上啊!求助!

感觉不需要转成rbf,直接转成pof加再进flash中就可以了,也不要设置压缩之类的,可以配置成功的。



   感谢回复。请问是直接把pof文件通过显控写入flash,非压缩,然后通过自己写接口时序程序读flash去加载呢还是可以直接用ALTERA的核( Parallel Flash Loader)呢?



   还有一个问题是,pof文件相对于sof以及rbf而言,大太多了,写入flash花费时间久啊。

在配置的时候,fpga_nconfig信号正常,发送一个低脉冲后拉高,但是fpga_nstatus信号在低脉冲拉高以后再次给拉低了,根据手册所说,应该是出现error了,正在尝试解决。

配置时钟暂停的时候,到底需不需要额外再多给两个(非压缩)或三个(压缩)周期的时钟呢?求助啊!

必须是rbf文件。把你写进flash的值想办法读出来,和原始文件比较,如果有错,就查看写flash时序。



   谢谢你的回答!我每次从flash中读取16位数据,分两个字节发送配置,用两个dclk,然后再过一段时间继续读取16位数据。手册上提到压缩/非压缩时,涉及时钟暂停的要额外给几个时钟,不知道我这种情况算是时钟暂停的吗?fpga_nstatus信号总是在拉高后又拉低。

fpga_nstatus信号会在什么情况下拉低呢?哪些情况会导致配置错误而拉低该信号呢?

无奈的小编只能自己暖暖帖。

SIVGT 那个最贵的板子 有现成的程序 官网都有相似的代码下载



   多谢老哥提醒,我去找找看啊。


我之前只是单纯的验证fpp是否ok,用的是pfl的ipcore,pof烧写进去flash大约半小时时间吧,配置fpga是pfl的自动配置,配置过程中n_status会有一个拉低过程,配置成功后config_done会拉高,表示加载ok。不明白小编为什么还要自己控制加载过程,pfl的ip不能满足你的要求吗?



   之前也是用这种方式来做的,但是现在需要实现程序动态更新,因此flash上半部分存着用于更新程序的程序,上电时,先加载这个程序,再将需要更新的程序写入flash下半部分,然后加载下半部分的新程序,自己写的加载的时序,用的是rbf文件的格式,文件大小相对pof的小很多,而pof加载的方式会把整个flash都占满啊。

目前遇到的问题是,程序有时能加载起来,有时不能加载起来。在相同的软件、工程版本条件下,将程序写人两块板子flash,一块板子不能加载,一块板子可以加载。通过Quartus programmer工具,将flash中的内容全部回读回来对比,得到pof文件,发现这两块板子的flash内容确实不一致。是否说明了写flash过程的不稳定呢?

另外一个问题是,想请教下,在Quartus programmer工具中回读flash程序需要什么操作呢?感觉自己的操作未必正确啊。请教下各位大佬!自顶!

用FPL IP即可



   谢谢你的回答。用IP核的话,得首先把程序(pof)固话到flash去吧?我看的手册,cpld加fpga方式加载,fpp模式支持rbf/hex/ttf格式好像,没提到pof格式。另外,pof格式相对rbf而言,大太多了。因为不确定,通过powerpc经rapidio写入fpga flash中的rbf格式的程序是否可以用ip核来加载,因此选择用自己写加载时序来实现。明天去试试,用这个核能不能加载起来。

现在碰到的问题是,经过多次的测试,发现写入flash中的程序,前128k字节的数据,存在部分无法擦除的情况。因此,程序写入flash的时候,由于这种情况,导致有时候程序无法加载。通过回读整个flash的内容,也验证了这个问题,与正常能够加载的程序相比,异常的数据在前128k字节。很难理解这个问题,为何就那么一部分存在无法擦除的情况。还请各位大大指导一下!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top