查看: 4603|回复: 0

【MAX10初体验】片内User Flash的使用

[复制链接]
  • TA的每日心情
    奋斗
    2015-1-31 21:47
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2015-2-2 08:49:34 | 显示全部楼层 |阅读模式
    分享到:
    一、Altera MAX10 FPGA片内Flash介绍
           MAX 10 FPGA 采用 TSMC 的 55 nm 嵌入式 NOR 闪存技术制造,并提供双配置CFM(Configration Flash Memery )和UFM(User Flash Memery)。配置灵活支持双配置,也支持CFM与UFM相互共享。不同型号的片子对应最大的UFM容量从Quartus软件里面即可找到:
          
           与基于FLASH结构的FPGA如Actel的ProASIC3系列不同的是MAX10依然是SRAM结构,只是片内集成了Flash,因此加速了配置启动速度,减少了外设,从而简化了设计。既然是nor flash,那么也遵守普通nor的特点,写入慢,读取快。比eeprom多一步擦除过程。
           你用或不用,它就在那。各位屌丝脑洞大开的时候到了,快想想读取快的Flash可以干些什么。我们要充分压榨max10的每一滴油水,就一定要搞定UFM。

    二、MAX10 初体验——片内User Flash的使用
            1.在IP Catalog里面搜索flash,双击打开Altera On-Chip Flash,又打开了Qsys。看来Altera真是死磕nios了。不过不用担心,Avalon MM比起AXI简单的要命,下面简单的例子介绍后,看一下时序,想必很快就可以上手。
            
           本例为了体验片内Flash的并行速度,时钟频率设为100MHz,选择了并行数据接口,burst方式为递增,突发模式设置为最大128字节。FPGA配置方式选择单个非压缩镜像,这样做可以多释放一块Flash供我们使用。我们这次不玩IAP,且为了保护FPGA配置镜像不被意外损坏,将CFM设置为隐藏。初始化使用hex或mif文件,怎样创建都行。(逻辑本来就很简单,也懒得去仿真了,所以dat文件也就没有做。初始化文件本例用了个部分递增序列,用以检验代码的正确性)
           2.在生成HDL之前,我们还是先看一下IP核的接口,在右上侧点击block symbol,了解一下信号功能位宽及方向。
            
            其中data为Avalon MM的用户读写接口,crs为Avalon MM的控制接口。(我们只需要关注data接口即可完成正常读写工作)
           3.生成HDL
            生成HDL后,将生成的synthesis目录里面的qip文件添加到工程中。qip文件为索引文件,quartus将根据索引路径获取综合仿真所需的文件。
           4.程序源码:

    module ufm_test(input wire i_clk,input wire i_rst_n,output wire [31:0]readdata,output wire rdatavalid);wire clk50;wire rst;   wire locked;   reg [14:0]flash_raddr;wire waitrequest;                pll u_pll (  .areset   (~i_rst_n),  .inclk0   (i_clk),  .c0       (clk100),  .locked   (locked));assign rst = ~(i_rst_n & locked);//gen read addressalways@(posedge clk100 or posedge rst)if(rst)  flash_raddr <= 15'd0;else if(waitrequest)  flash_raddr <= flash_raddr;else if(flash_raddr == 15'd29184 - 15'd8)  flash_raddr <= 15'd0;else  flash_raddr <= flash_raddr + 15'd8;userflash u0 (  .clock                   (clk100     ),// clk.clk  .reset_n                 (~rst       ),// nreset.reset_n   //crs  .avmm_csr_addr           (1'b0       ),// csr.address  .avmm_csr_read           (1'b0       ),// .read  .avmm_csr_writedata      (32'd0      ),// .writedata  .avmm_csr_write          (1'b0       ),// .write  .avmm_csr_readdata       (           ),// .readdata  //data  .avmm_data_addr          (flash_raddr),// data.address 15bit  .avmm_data_read          (1'b1       ),//.read always enable  .avmm_data_writedata     (32'd0      ),//.writedata 32bit  .avmm_data_write         (1'b0       ),//.write  .avmm_data_readdata      (readdata   ),//.readdata 32bit  .avmm_data_waitrequest   (waitrequest),//.waitrequest  .avmm_data_readdatavalid (rdatavalid ),//.readdatavalid  .avmm_data_burstcount    (8'd8       ) //.burstcount);endmodule        5.下载pof
           由于sof文件包含的内容为sram结构的配置信息,不包含flash的内容,所以UFM初始化文件不会通过sof下载写入flash,所以需要将ufm信息包含到pof文件,并下载。
           综合完毕后,打开Convert Programming File,将sof转换为pof。
            
             选择pof格式,Mode选择Internal Configuration,添加已经生成的sof文件。先不要着急Generate,现在还添加UFM初始化文件。
            
           点击Options/Boot info按钮,UFM source选择Load memory file并添加自己定义的UFM的初始化文件。
            添加UFM初始化后再生成pof文件。此时的pof包含了用户逻辑与UFM的初始化信息,文件个头会稍微大一些。
           6.sinaltap抓数
           本例的工程将avalon的读取data相关的信号进行了抓取:
            
            上图触发时刻后为四组突发长度为8的读取模式,下图为其中一段的放大:

            从图中可以看出 当valid为高时,输出的读取数据按字节递增,说明读取过程正确无误。
           当前clk为100MHz,发起一个长度为8的突发读取需要22个clk,共读出了32个字节。由此可以算出当前的flash读取速率为每clk 1.45个字节,不得不说并行读取速率就是快。这么快的速率完全可以跟上程序的处理速度,用Max10不好好利用UFM,简直暴殄天物。
    三、个人感受
           1.鉴于Altera On-Chip Memery是基于Qsys的IP核,可以看得出Altera在推广Avalon和Nios上的一贯作风。
           2.非集成Flash的FPGA,如cyclone4系列只能串行读写EPCS,来当做UFM使用,且总线速率不超过25MHz。MAX10的体验确实出乎意料,并行总线读取flash,那叫一个快。

           3.本文没有尝试写入,是因为nor flash的写入过程确实太慢,手册说擦除一个扇区就需要350ms。如果只是存一个用户参数,再写入之前先进行读取备份,然后再执行擦除操作,再执行写入操作。过程繁琐,且在寄存器中备份需要占用大量LE,也不划算。
           4.IAP过程也需要程序写入到相应的Flash,但是一个配置文件就将近1MBytes(本文的sof就有700多KB,pof有800多KB)。由于写入过程很慢,最好需要通过nios系统并外挂一个片外的RAM来缓存要写入的配置文件。尽管MAX10支持DDR3跑400M,但是需要消耗大量的逻辑来支持DDR,如果单独为了IAP而添加外部的RAM,有些得不偿失。建议IAP最好还是在不额外增加bom的时候使用。其他时候安心的用单个配置flash吧,其他的都划作UFM,想怎么用,就怎么用。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 00:46 , Processed in 0.119688 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.