在使用niosii有一些问题以及一些体会,摘录在此:
1、NIOSII IDE写C代码的时候一行末尾斜杠“\”代表一句代码中本行写不完,两行代码或多行代码是一句。
2、如何在NIOSII中操作PIO?
举个例子来说明,运行NIOSII IDE向导,在NIOSII下新建一个hello_led的工程。其中Hello_led.c是这样写IO口的:IOW_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,led);
首先在Altera_pio_regs.h找到定义:
#include <io.h>
#define IOWR_ALTERA_AVALON_PIO_DATA(base,0) IORD(base,0)
#define IOWR_ALTERA_AVALON_PIO_DATA(base,0,data) IOWR(base,0,data)
因此在NIOSII中可以调用#include <io.h>库函数 IOWR/IORD来操作PIO。
接着在system.h有以下内容:
#define LED_PIO_TYPE "altera_avalon_pio"
#define LED_PIO_BASE 0X00004000 //具体的LED的基地址
在sopcBuilder中有关NIOSII的配置就是通过system.h来传递给IDE的。
最后,用IOWR(0X00004000,0led);替代IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,LED)完成PIO操作。
3、最后一步假如要将硬件配置数据也放到flash中,在进行NIOSII Flash Programming的时候,必须首先将硬件配置好。即先将sof文件下载到FPGA,再进行.sop——>.flash转换和下载。
看到站里一篇技术**,里面有讲到利用NIOSII来“在应用”配置FPGA,摘来收藏:
1 系统的硬件设计
系统主要由Cyclone FPGA、EPCS、Flash和串行通信等组成,硬件结构如图1所示。
2.2 编程文件 编程文件为Flash格式的文件,即S—reeorld(简称“SREC”)格式。SREC格式是Motorola公司制定的一种烧写格式标准。SREC格式文件是由一组ASCII码组成,所有的十六进制数据均为大写形式,结构说明如下:
①起始代码。以S作为一个数据行的开始。
②记录类型。1个十进制数字(O~9),定义数据域的类型。
③字节数。1个字节,定义字节数之后除地址字节、校验字节之外其他字节的个数。
④地址。由4(或6、8)个字节组成,定义了第一个数据字节存储的位置。
⑤数据字节。由n个字节组成,数据字节为实际有效的编程信息。
⑥校验字节。1个字节,作校验使用,所有十六进制字节相加后取8位,为0xFF。
3.1 硬件配置的更新
如图3所示,FPGA的配置过程分为:复位、配置和初始化。
(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引脚。 |