|
一、引言
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)。
MAX 10 器件的FLASH大小情况如下图示:
三、10M08评估套件的配置电路
JTAG电路如下图示:
双配置选择是通过SW3的第6位来选择,0的话是使用映象0配置,1的话是使用映象1配置,开关位置如下图示:
电路连接如下图示:
开关SW2用来触发MAX10 FPGA重新配置,电路连接到器件的NCONFIG信号:
四、实验操作
下面为STEP BY STEP新建工程要验证体验下MAX10 FPGA的双配置功能:
1.新建工程,选择器件,如下面图示步骤:
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核增加到工程, 如下面图示步骤:
上图注意把时钟修改为50Mhz, 以和评估板一致。
4. 在Quartus II 主界面Assignments菜单内选择Device,进行双配置设置,如下图所示:
5.进行相关PIN脚设置,如下图示:
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上:
8.烧写到MAX10内,拨动SW3.6来选择不同配置,然后按SW2触发重配置,可以看到不同配置下LED闪的方向不一样:
最后我验证了下没有dual_boot IP编译提示下面错误:
因为我们在硬脚分配的地方并没有管BOOT_SEL脚,应该是设为dual_boot才会检测一下该引脚,配置成功后可否用作普通IO脚有待验证。
|
评分
-
查看全部评分
|