查看: 7039|回复: 12

【接龙】MAX10的配置来一发瞧瞧

  [复制链接]

该用户从未签到

发表于 2015-12-18 14:20:50 | 显示全部楼层 |阅读模式
分享到:
        一、引言
        MAX10 FPGA是ALTERA在2014年新推出的器件,通过内置FLASH使其具有CPLD的非易失特性,又具有一般FPGA的性能。所有FPGA/CPLD设计中首先要考虑的问题就是配置问题,本文准备先大概介绍下MAX10器件的配置特性,然后设计一两个小DEMO进行实际操作一遍,我们可以看到MAX10器件为我们提供了双配置的选择,这是其比较有特色的一个地方,并且内置FLASH使代码安全性有了很大的提高。

        二、配置概述
        MAX10 FPGA支持两种配置方法:
        • JTAG 配置------使用JTAG 接口进行配置。
        • 内部配置------使用内部闪存进行配置。
        在MAX 10 器件中,JTAG 指令优先于内部配置方案,通过JTAG是直接配置到得器件的配置SRAM内的,使用SRAM 目标文件(.sof)格式文件,这一般在调试过程中使用。
        内部配置是使用内部闪存进行配置,好处是配置时间可以非常短,由于配置数据在器件内,这样安全性更高,还可以选择对配置进行AES-128加密。
        内部配置使用为编程器目标(.pof) 格式文件,一般需要先通过JTAG 在线系统编程(ISP)配置到内部闪存,另外一种方法是通过内部电路来更新FLASH。
        除MAX 10M02 器件以外的所有MAX 10 器件的内部配置方案包含以下五种模式:
        • 双压缩映像—双压缩映像在CFM 中被存储为映像0 和映像1。
        • 单压缩映像
        • 存储器初始化的单压缩映像
        • 单未压缩映像
        • 存储器初始化的单未压缩映像
        MAX 10M02 器件的内部配置方案只支持以下两种模式:
        • 单压缩映像
        • 单未压缩映像
        MAX 10 器件中除10M02 以外,所有CFM 包含的三个扇区,CFM0、CFM1 和CFM2。根据您所选的不同的内部配置模式对这些扇区进行了不同的编程。
        10M02 器件仅包含CFM0。当您选择单压缩映像或单未压缩映像时,对10M02 器件中的CFM0 扇区进行了相似的编程。
        配置闪存扇区利用情况如下图示,未使用的CFM1 和CFM2 扇区可用于用户闪存(UFM)。
         MAX10-01.jpg

        MAX 10 器件的FLASH大小情况如下图示:
                         MAX10-02.jpg
        
                        
                                        三、10M08评估套件的配置电路
                                        JTAG电路如下图示:
                                        MAX10-03.jpg
               
                                        双配置选择是通过SW3的第6位来选择,0的话是使用映象0配置,1的话是使用映象1配置,开关位置如下图示:
                                                                         MAX10-04.jpg
                        
                                                        电路连接如下图示:
                                                                                                 MAX10-05.jpg
                                                                        开关SW2用来触发MAX10 FPGA重新配置,电路连接到器件的NCONFIG信号:
                                                                                                                         MAX10-06.jpg
                                                                                       
                                                                                                        四、实验操作
                                                                                                        下面为STEP BY STEP新建工程要验证体验下MAX10 FPGA的双配置功能:
                                                                                                        1.新建工程,选择器件,如下面图示步骤:
                                                                                                         MAX10-07.jpg
                                                                                                                                                                         MAX10-08.jpg
                                                                                                                                                                                                 MAX10-09.jpg
                                                                                                                                                                                                                         MAX10-10.jpg
                                                                                                                                                                                                                                                 MAX10-11.jpg
                                                                                                                                                                                                                                                                         MAX10-12.jpg
                                                                                                                                                                                                                                                                                                 MAX10-13.jpg
                                                                                                
                                                                                                                                                                                                        
                                                                                                                                                                                                                        2.新建一个文件,命名为boot.v, 添加如下的一个简单的测试代码:
                                                                                                                                                                                                                        `timescale 1ns/1ns
                                                                                                                                                                                                                        module boot(clk,rst_n,led);
                                                                                                                                                                                                                        input  clk;
                                                                                                                                                                                                                        input  rst_n;
                                                                                                                                                                                                                        output [4:0]led;
                                                                                                        
                                                                                                                                                                                                                        reg  [25:0] cnt;
                                                                                                                                                                                                                        wire [4:0]led;
                                                                                                        
                                                                                                                                                                                                                        //assign led = {cnt[21],cnt[22],cnt[23],cnt[24],cnt[25]}; //image 0
                                                                                                                                                                                                                        assign led = cnt[25:21];  //image 1
                                                                                                        
                                                                                                                                                                                                                        always @(posedge clk)
                                                                                                                                                                                                                        if(rst_n)
                                                                                                                                                                                                                           cnt <= 26'd0;
                                                                                                                                                                                                                        else
                                                                                                                                                                                                                           cnt <= cnt + 26'd1;
                                                                                                        
                                                                                                                                                                                                                        dual_boot u0 (
                                                                                                                                                                                                                        .clk (clk), // clk.clk
                                                                                                                                                                                                                        .nreset (rst_n) // nreset.reset_n
                                                                                                                                                                                                                        // .avmm_rcv_address (<connected-to-avmm_rcv_address>), // avalon.address
                                                                                                                                                                                                                        // .avmm_rcv_read (<connected-to-avmm_rcv_read>), // .read
                                                                                                                                                                                                                        // .avmm_rcv_writedata (<connected-to-avmm_rcv_writedata>), // .writedata
                                                                                                                                                                                                                        // .avmm_rcv_write (<connected-to-avmm_rcv_write>), // .write
                                                                                                                                                                                                                        // .avmm_rcv_readdata (<connected-to-avmm_rcv_readdata>) // .readdata
                                                                                                                                                                                                                        );
                                                                                                                                                                                                                        endmodule
                                                                                                                                                                                                                        3.增加boot.v文件到工程,并且生成dual_boot IP核增加到工程, 如下面图示步骤:
                                                                                                                                                                                                                         MAX10-14.jpg
                                                                                                                                                                                                                                                                                                                                                 MAX10-15.jpg
                                                                                                                                                                                                                                                                                                                                                                         MAX10-16.jpg
                                                                                                                                                                                                                                                                                                                                                                                                 MAX10-17.jpg
                                                                                                                                
                                                                                                                                                                                                                                                                        上图注意把时钟修改为50Mhz, 以和评估板一致。
                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                         MAX10-18.jpg
                                                                                                                                       
                                                                                                                                                                                                                                                                                        4. 在Quartus II 主界面Assignments菜单内选择Device,进行双配置设置,如下图所示:
                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                 MAX10-19.jpg
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         MAX10-20.jpg
                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5.进行相关PIN脚设置,如下图示:
                                                                                                                                                                                                                                                                                                                                        MAX10-25.JPG
                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6.采用不同的LED赋值语句方别编译image 0的比特下载文件和image 1的比特下载文件,
                                                                                                                                                                                                                                                                                                                                                        即代码中image 0用:
                                                                                                                                                                                                                                                                                                                                                        assign led = {cnt[21],cnt[22],cnt[23],cnt[24],cnt[25]}; //image 0
                                                                                                                                                                                                                                                                                                                                                        //assign led = cnt[25:21];  //image 1
                                                                                                                                                                                                                                                                                                                                                        代码中image 0用:
                                                                                                                                                                                                                                                                                                                                                        //assign led = {cnt[21],cnt[22],cnt[23],cnt[24],cnt[25]}; //image 0
                                                                                                                                                                                                                                                                                                                                                        assign led = cnt[25:21];  //image 1
                                                                                                                                                                                                                                                                                                                                                        实际效果是两种配置LED闪的快慢方向不一样。
                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                        7.在Quartus II 主界面FILE菜单内选择Convert Programming Files,按下面步骤生成POF文件用来烧写到片内FLASH上:
                                                                                                                                                                                                                                                                                                                                                         MAX10-21.jpg
                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                        8.烧写到MAX10内,拨动SW3.6来选择不同配置,然后按SW2触发重配置,可以看到不同配置下LED闪的方向不一样:
                                                                                                                                                               
                                                                                                                                                        
                                                                                                                                                
                                                                                                                                       
                                                                                                                                
                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                         MAX10-22.jpg
                                                                                                                                       
                                                                                                                                                                                                                                                                                        最后我验证了下没有dual_boot IP编译提示下面错误:
                                                                                                                                                                                                                                                                                                                                                                                                                                                 MAX10-23.jpg
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        因为我们在硬脚分配的地方并没有管BOOT_SEL脚,应该是设为dual_boot才会检测一下该引脚,配置成功后可否用作普通IO脚有待验证。

评分

参与人数 1 +5 收起 理由
小菜儿 + 5 赞一个!

查看全部评分

回复

使用道具 举报

该用户从未签到

发表于 2015-12-18 14:25:02 | 显示全部楼层
楼主有心啦,很是详细
回复 支持 反对

使用道具 举报

  • TA的每日心情

    2016-3-1 11:42
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2015-12-18 14:27:36 | 显示全部楼层
    有max10 还是好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-5-27 15:41
  • 签到天数: 868 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-12-18 16:09:44 | 显示全部楼层
    先瞧瞧                      
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-10-11 19:25
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2015-12-19 09:30:52 | 显示全部楼层
    看着很高端的样子
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-10 15:56
  • 签到天数: 2675 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2015-12-20 21:09:15 | 显示全部楼层
    详细的资料,感谢分享。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-12-21 11:10:10 | 显示全部楼层
    谢谢楼主的详细分享,学习啦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-8 15:01
  • 签到天数: 459 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-12-22 15:28:08 | 显示全部楼层
    多谢楼主分享···············
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-11-26 15:06
  • 签到天数: 427 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-12-23 08:44:48 | 显示全部楼层
    很好的楼主    学习学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-6-9 13:54
  • 签到天数: 297 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-12-23 09:45:28 | 显示全部楼层
    看看。。。。。。。。。。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-4-29 04:46 , Processed in 0.223058 second(s), 34 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.