(1)复位FPGA
上电复位:在用户模式下,当nCONFIG引脚持续低电平40μs时,FPGA将进入复位状态。复位时,FP—GA采样MSEL引脚的电平值,以确定采用的配置方式;同时,nSTATUS和CONF_DONE引脚由FPGA置为低电平,所有I/0引脚为三态且FPGA内部配置寄存器被清空。
FPGA复位的2种方法:
①外加RC复位电路或者复位芯片,自动产生上电复位脉冲。
②参考芯片手册。如果芯片提供了上电复位脉冲(一般是全局复位信号),则使用它作为复位信号;若没有提供,则查找芯片是否给出了寄存单元上电默认值(一般是O),利用该特性复位或者产生复位脉冲。
(2)配置FPGA
复位后,nCONFIG被外部上拉电阻拉高,进入配置阶段。此时,nSTATUS被FPGA释放并由外部上拉电阻拉为高电平后进入配置状态。Cyclone芯片通过将nCSO输出的信号置低来使能串行配置芯片,nCS0引脚连接配置芯片的片选段(nCS),用串行时钟(DCLK)和串行数据输出(ASDO)引脚来发送操作指令,及/或将地址信号读到串行配置芯片中。接着配置芯片将数据送到串行数据输出(DATA)引脚,DATA引脚连接Cyclone芯片的DATA0输入脚。配置数据在DCLK时钟的上升沿载入FPGA。当接收完所有的配置位后(CRC校验无误),Cyclone芯片悬空CONF_DONE引脚,该引脚由外部10 kΩ电阻拉高;同时,停止驱动DCLK信号。只有当CONF_DONE到达一定的逻辑高电平后,初始化才开始。
(3)初始化阶段
在Cyclone芯片中,初始时钟源是Cyclone芯片的lOMHz(典型的)内部晶振,或者是可供选择的CLKUSR引脚。内部晶振是默认的初始化时钟源。如果用了内部时钟,则Cyclone芯片为正确的初始化提供足够的时钟。使用内部时钟的好处在于,初始化时不需要从外部发送其他的时钟到CLKUSR引脚,而且可以把CLKUSR引脚当作I/O引脚。
(4)用户模式
初始化结束后,FPGA进入用户模式。在用户模式下,用户I/O引脚不再有弱上拉电阻,而是执行设计中分配的功能。Cyclone芯片可以通过将nCONFIG拉低而开始重新配置。nCONFIG低信号应该至少持续40μs。当nCONFIG被拉低时,Cyclone芯片被复位并进入复位阶段。Cyclone芯片也会把nSTATUS和CONF_DONE拉低,所有的I/O引脚处于三态。一旦nCONFIG回到逻辑高电平,Cyclone芯片将释放nSTATUS,重新开始配置。
(5)配置时出现的错误
如果在配置时出现错误,则Cyclone芯片将nSTA—TUS信号置低来表明一个数据帧错误,CONF_DONE信号为低。如果在Quartus软件的Device&Pin Options窗口的General项中,选中Auto—restart configuration aftererror选项,则Cyclone芯片通过激活nCSO来实现复位,在复位失效时间(40μs)后释放nSTATUS,并再次尝试配置。如果该选项未被选中,则外部系统必须监视nSTA—TUS信号以防出错,然后将nCONFIG信号拉低并持续至少40μs来重新配置。
计算机与目标板上的Nios程序建立连接,通过通信接口将Flash文件传输给FPGA;Nios程序判断出传输文件的针对目标后,将编程数据存放在EPCS或Flash中。接收到的数据首先暂存入SDRAM,而不是直接对EPCS和Flash进行操作。这样做的好处是,一旦传输失败或中止,不会破坏原有EPCS和Flash中的数据。
通过sof2Flash命令来生成Flash文件时,可以通过SOPC Builder打开NioslI command shell,使用“sof2 Flash—epcs-input=<输入文件名.sof>一output=<输出文件名.Flash>”命令,生成的Flash文件存在于工程目录下。也可以将sof文件复制到“〈quartus安装目录〉\kits\nios2_60\examples”下,直接打开NiosII command shell,使用“sof2Flash-epcs—input=<输入文件名.sof>一output=<输出文件名.Flash>”,生成的Flash文件存在于“〈quartus安装目录〉\kits\nios2_60\examples”下。
3.2 软件程序的更新
如前所述,软件程序既可以存放在Flash中,也可以存放在EPCS中。生成软件Flash文件的最简单的方式是,在NiosII IDE环境下对系统进行编译,生成的Flash文件存在于“<目标工程>\software\debug\<软件工程>\Debug\obj\”目录下。
Nios程序可以存放在Flash中,在SDRAM或On—chip RAM(以下统称“RAM”)中运行。这种情况需要有一个专门的Bootloader,该文件存在于“ quartus安装目录>\kits\nios2_60\components\altera_nios2”目录下,名称为“boot_loader_cfi.srec”。它把存放在Flash中的各个程序段搬到程序执行时各个段真正的位置。
如图4所示,Bootloader代码位于Flash的低地址处,NiosII就被逻辑中的复位电路复位,从reset地址处开始执行代码。如果reset地址设置在Flash中,那么复位后首先运行Flash前面的Bootloader代码,由Bootloader代码将后面的用户程序引导到指定位置。执行elf2Flash应用程序在elf文件前会插入一个引导复制(Boot—copier)程序,前提是,elf将被链接到RAM中运行。