NIosII软处理器快速入门

www.wiqitech.com

Nios简单介绍:

Nios II是一个用户可配置的通用RISC嵌入式处理器。在这儿,我引用了Altera公司关于NiosII的官方介绍:

Altera推出的Nios? II系列嵌入式处理器扩展了目前世界上最流行的软核嵌入式处理器的性能,
把Nios II嵌入到Altera的所有FPGA中,例如StratixII、Stratix、CycloneII,Cyclone、APEX,ACEX和HardCopy系列器件中,用户可以获得超过200 DMIPS的性能,用户可以从三种处理器以及超过60个的IP核中选择所需要的,Nios II系统为用户提供了最基本的多功能性,设计师可以以此来创建一个最适合他们需求的嵌入式系统。
Nios II处理器的优点和特性

使用Nios II处理器的用户可以根据他们的需要来调整嵌入式系统的特性、性能以及成本,快速使得产品推向市场,扩展产品的生命周期,并且避免处理器的更新换代。

提高系统性能

* 一系列的处理器核可供选择,其中包括了超过200 DMIPS性能的核
* 实现任何数量的处理器或将不同的处理器核组和在一起
* 增加了已有的处理器,在FPGA中添加一个或更多的Nios II软核处理器

更低的系统成本

* 通过将处理器、外设、存储器和I/O接口集成到一个单一的FPGA中,从而降低了系统成本、复杂性和功耗
* 通过将Nios II处理器嵌入到低成本的FPGA中只需花费35美分或者更低(编者:对大多数用户而言,NiosII所占逻辑资源的成本大约是10-20元人民币,具体取决于所选FPGA的类型和NiosII的配置)

应对产品的生命周期

* 提供易用的设计工具从而快速将产品推向市场。
* 提供永久的,免费的许可从而使基于Nios II处理器的产品避免了处理器的更新换代而带来的损失。

功能强大、易用的开发工具

* 通过使用Nios II集成开发环境(IDE),从而加速了软件的开发
* 利用Altera的强大的SOPC Builder系统开发工具和Quartus II设计软件可以在几分钟内设计一个系统

使用完全功能的开发包

* 使用易用的Nios II 开发包开始一个设计
* 使用易用的Nios II开发包开始设计
* 可以选择具有低成本特性的Cyclone FPGA开发套件,或高性能的Stratix FPGA开发套件

 

稍微了解一下NiosII后,我们就来开始设计、应用它吧!

下面我们就设计一个最简单的NiosII系统,使用NiosII去控制一个LED灯,通过这个例子我们可以了解整个介绍NiosII的设计流程

第一节:EDA软件的安装。

许多朋友在配置EDA环境的时候,就遇到了更多问题,我现在总结一下:

1。安装QuartusII4.2

2。安装NiosII IDE 用于软件开发

3。安装ModelSim6.0。 用于系统仿真

如下是ModelSim下的安装说明:

1.Install, Select Full product instllation. When asked for security key, select no. When you
see License Wizard dialog, select close because license wizard dont know our license's format.
2.Use our keygen to generate license.dat, copy it to c:\flexlm directory.
3.set enviroment string: LM_LICENSE_FILE = c:\flexlm\license.dat
4.Start Modelsim and have fun.

仍有许多人表示搞不定,通常是因为第三步有问题,可以如下设置:

在W2K下,在开始 -〉系统 -〉设置 -〉 系统 -〉 高级 -〉 环境变量 -〉系统变量中设置
变量名为 LM_LICENSE_FILE ,值为 你的存放license.dat的路径 + 文件名,比如 c:\flexlm\license.dat,
(在unix/linux下,在.bashrc中export LM_LICENSE_FILE=/thePathOfLicenseFile/yourLicenseFileName就可以了!)

 

第二节:建立niosII系统。

1:建立项目。

建立一个目录,比如H:\DB2005\project\niosDK\Example\NiosSmall

启动QuartusII4.2软件。

选择File -> New Project Wizard

在Diectory,Name,Top-Level Entity中如下填写,在你自己的项目中,你可以类比着填写:

 

 

 

在Add Files中如下填写,在你自己的项目中,你可以类比着填写:

 

 

在EDA Tools Setting中如下填写,在你自己的项目中,你可以类比着填写:

 

 

最后,选择Finish,就OK了!

 

 

在H:\DB2005\project\niosDK\Example\NiosSmall下建立一个name为Setup.tcl的file,其内容如下:

#Setup.tcl
# Setup pin setting
set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS OUTPUT DRIVING GROUND"
set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF
set_location_assignment PIN_16 -to clk
set_location_assignment PIN_37 -to led\[0\]
set_location_assignment PIN_39 -to led\[1\]
set_location_assignment PIN_1 -to led\[2\]
set_location_assignment PIN_41 -to led\[3\]
set_location_assignment PIN_42 -to led\[4\]
set_location_assignment PIN_49 -to led\[5\]
set_location_assignment PIN_50 -to led\[6\]
set_location_assignment PIN_51 -to led\[7\]

 

很浅显的Script,你可以根据需要修改。

然后打开Tools -> Tcl Scripts,选中刚才编辑的Script文件:Setup,并点击Run

2:生成一个可调试的nios 最小系统

 

选择 Tools -> SopcBuilder,启动Altera SOPC Builder

启动Altera SOPC Builder后,SOPC Builder会立刻弹出对话框

填入System Name,比如niosII_e;HDL Language ,比如选择verilog,如下图:

 

 

选择Board Target ,比如,我选择Unspecified Board;

选择Target Device Family,比如,我选择Cyclone;

填入Clock,比如,我 填入22.1184

如下图:

 

 

添加Nios II到项目中:

双击 Nios II Processor -Altera Corporation,会弹出Altera niosII 对话框,

 

在NiosII core配置选项中,点击Nios II/e区域,选择Nios II/e,如下图。然后Next,进入下一步。

 

 

在JTAG Debug Module配置选项中,选择Level 1,如下图。然后Next,进入下一步。

 

 

在Custom Instructions配置选项中,我由于无需增加任何定制指令,所以为空,如下图:

 

 

 

最后选择Finish,你的项目中会增加一个niosII 处理器,名字为cpu_0,为了简便起见,我没有将它改名。你可以依照你自己的喜好,为该处理器取个名字。如下图:

 

 

 

 

然后双击On-Chip Memory(RAM or ROM),(在Avalon Modules -> Memory -> 下),为系统添加RAM.

Memory Type选择RAM;Data Width选择32bits,Total Memory Size 可以选择2K bytes,然后选择Finish确认。

 

 

 

如下图,系统中会添加name 为onchip_memory_0的ram,为了简便起见,我没有将它改名。你可以依照你自己的喜好,为其取个名字。

 

 

 

 

之后,双击PIO(在Parallel I/O)(在Avalon Modules -> Other 下),为系统添加输出接口。

Width 选择8 bits,然后点击 Finish

如下图

 

 

 

如下图,系统中会添加name 为pio_0的PIO,为了简便起见,我没有将它改名。你可以依照你自己的喜好,为其取个名字。

 

 

 

然后,选择System ->Auto-Assign Base Addresses,让系统自动分配基地址。如下图:

 

 

 

然后,选择Sysetm->Auto-Assign IRQs,让系统自动分配中断。如下图:

 

 

 

 

点击Nios II More "cpu_0" settings选项卡,进行处理器设定。

在该例中,无需做任何更改;Reset Address、Exceptiong Address、Break Location默认值如下图所示。

 

 

 

点击System Generation选项卡,进行最后的设定并生成系统。

选中HDL.Generate system module logic in Verilog,

如果需要仿真,也请选中Simulation.Create ModelSim(tm) project files

然后点击Generate,进行系统生成的任务。如下图:

 

 

 

 

然后,就是漫长的等待,你可以悠闲得喝一杯咖啡(因为等待的时间还是蛮长的,比如我,要等近10分钟)。一般没有问题的话,可以看到系统提示:SUCCESS: SYSTEM GENERATION COMPLETED.如果看到此信息,恭喜恭喜,系统被正确生成了。如果失败,请返回并检查、修改!

如下图:

 

3:在QuartusII中使用上述niosII系统

 

在 SOPC Builder正确运行完毕后,可以在QuartusII中,打开SOPC Builder生成的niosII_e.bsf,检查一下引脚,看看跟你的设想是否有误,如下图,niosII_e有两个input:clk,reset_n,一组output:out_port_from_the_piop[7:0]

如下图:

 

 

 

你可以使用上述的niosII_e,来构造你自己的系统。如下图,我简单得创建了nisoSmall.bdf,来使用该niosII_e。

nios clk to clk

niso reset_n to VCC

out_port_from_the_pio_0[7:0] to LED[7:0]

 

 

 

第三节:编写程序。

在Alter SOPC Builder中,点击Run Nios II IDE,启动Nios II IDE,如下图:

 

 

 

在Nios II IDE中,选择File -> New -> Project,开启New Project 对话框

选择 C/C++ Application,如下图。然后选择Next,进入下一步。

 

 

 

填写你自己的Project Name,比如我填写hello_led_1;在Select Project Template中,我选择Hello LED(因为存放程序的sram只有2kbytes,所以许多Template不可用),如下图。然后选择Next,进入下一步。

 

 

选择Create a new system library named:,最后点击Finish,创建项目。如下图:

 

 

 

打开项目中的文件:hello_led.c,进行适当的修改。

比如,我将PIO的基地址修改为PIO_0_BASE;while(i<200000)修改为while(i<20000).你可以依照你的需求修改!

 

 

 

 

然后选择Project->Build All(Ctrl+B),编译整个项目。

如果无误,可以看到以下信息:Build completed.如果看到了该条提示,恭喜恭喜,距离成功只有一步之遥了!

 

 

 

第四节:编译整个项目。

然后,在QuartusII中,选择Processing -> Star Compilation,开始编译整个项目。

你又可以坐下来喝杯咖啡了,反正我是等了又十来分钟。

成功后,可以看到如下信息:如果到了这一步,赫赫,基本上大功告成了!

 

 

 

第五节:下载与测试。

最后,选择Tools ->Programmer,下载整个配置到FPGA中,如下图。

 

 

下载成功后,可以看到LED的有规律的变化。(物理硬件中,我只用了一个LED,观察到LED是常亮,有规律得熄灭,因为我的LED是低电平才发光,与设计完全吻合!)

OK,做到这一步,就大功告成了!