安装设计文件
在继续之前,您必须安装 Quartus II 软件和 Nios II 嵌入式设计套件。
分析系统要求
本部分介绍的教程示例设计的系统要求。设计的目标如下:
有关这些和其他组件,完整详细信息请参阅___<<NIOS II 外围设备>>。
启动 Quartus II 软件并新建设计项目
在设计之前,应该建立工作目录。每个设计都是一项工程,一般都单独建一个工作目录。
在此设置的工作目录为E:\sopc_project\led
1.启动 Quartus II 软件。
在 Windows 计算机上,单击<开始>,指向<程序>,Altera,Quartus II 9.0,然后单击 Quartus II 9.0。
2.启动New Project Wizard
选择File→New Project Wizard,弹出如图1所示对话框。单击该对话框最上一栏右侧的按钮“…”,设置当前工作目录。在第二栏设置当前工程名字,一般将顶层文件的名字作为工程名,例如工程名为sopc_led。第三栏是顶层文件的实体名。
3.把设计文件添加到工程中
单击Next按钮,弹出Add File对话框,如图2所示。在此可将有关的文件加入到工程中,选择默认即可。
4.选择目标器件
单击Next按钮,出现选择目标器件对话框,如图3所示。在Family选项中选择Cyclone II器件系列,并在Target device中选择第二项
在可选的设备列表中指定目标器件。可以通过右边的Filters“过滤”选择。在此选择EP2C35F484C8器件。用户可以根据自己开发板的情况进行不同的设置。
5.选择综合器和仿真器
单击Next按钮,则弹出选择仿真器和综合器的对话框EDA Tool Settings,如图4所示。如果选择默认的None,则表示选择Quartus II自带的仿真器和综合器。也可以选择其他第三方综合器和仿真器等专业EDA工具。
(5)、结束设置
单击Next按钮,出现工程设置信息显示画面,如图5所示,对前面设置情况进行了汇总。点击Finish按钮,即完成了当前工程的创建。在工程管理窗口中出现当前工程的层次结构显示,如图6所示。
创建一个新的 SOPC Builder系统
您可以使用 SOPC Builder来生成 Nios II 处理器的系统,添加所需的组件,并配置它们如何连接在一起。请执行以下步骤来创建一个新的 SOPC Builder系统:
1.在 Quartus II 软件中的工具菜单上单击 SOPC Builder。
SOPC Builder将启动并显示创建新的系统对话框。
2.键入 std_2c35 作为该系统的名称。
3.选择 Verilog 或 VHDL 作为目标硬件描述语言。以后当您生成的系统,SOPC Builder将输出中您选择的语言的设计文件。
4.单击确定。SOPC Builder GUI 将出现,显示系统目录选项卡。
如下图:SOPC Builder图形用户界面
使用SOPC Builder创建Nios II系统模块
可以使用 SOPC Builder来定义硬件特性的 Nios II 系统,例如,哪些 Nios II 核心要使用,以及哪些组件,包括在系统中。SOPC Builder并不定义软件行为,如在内存中存储的指令或发送 stderr 字符流的位置在哪里。
在本节中,您将执行以下步骤:
1.指定目标 FPGA 和时钟设置。
2.添加 Nios II CPU、 内存和其他组件。
3.指定基址和中断请求 (IRQ) 的优先事项。
4.生成 SOPC Builder系统。
SOPC Builder设计过程不需要是线性的。在本教程中的设计步骤为新用户了解的最简单的顺序显示。但是,您可以按不同的顺序来执行 SOPC Builder设计步骤。
指定目标 FPGA 和时钟设置
系统内容选项卡的目标和时钟设置部分指定系统中的 SOPC Builder系统关系到其他设备。请执行以下步骤:
1.选择匹配您的目标的 Altera FPGA 的设备系列。
在这里选择器件系列Device Family是cyclone II。
2. 系统的工作的外部时钟频率改为100 Mhz(双击它即可修改)。
添加Nios II CPU Core
选择SOPC Builder组件选择栏中的Component Library→Nios II Processor,双击或者单击下面的“ADD”,打开添加Nios II Processor对话框,如图10所示。
这里给我们提供了三种类型:
Nios II/e占用资源最少600-800LEs,功能也最简单,速度最慢。
Nios II/s占资源比前者多一些,功能也多了,速度也要快一些。
Nios II/f占资源最多,功能也最多,速度最快。
选择的时候要根据你的需求和你的芯片资源来决定。在这里,我选择Nios II/f,功能和速度都可以得到满足。
下面的:
Reset Vector是复位后启动时的Memory类型和偏移量,
Exception Vector是异常情况时的Memory类型和偏移量。
现在还不能配置,需要SDRAM和FLASH设置好以后才能修改这里,这两个地方很重要。
点击Next,如下11所示,将Data master→Data Cache处选择为None,也就是关闭Data Cache。
接下来连续点击Next,一直到如图12为止。
这是设置JTAG Debug Module,即JTAG调试时所用到的功能模块。功能越多,需要的资源越多。这里我们选择Level 1即可,不需要过多其他的功能。点击Finish,结束Nios II Processor的建立后,如图13所示。
添加SDRAM模块
选择SOPC Builder组件选择栏中的system content→memories and memory controllers→SDRAM→SDRAM controller,双击或者单击下面的“ADD”,打开SDRAM controller的对话框。如图14所示。
在Presets中选择第一项Custom。
在data width中选择16.在Architecture中的chip select: 2 ,bank : 4。
在Address widths中的row: 13,column:9。
如图15所示。
点击Next,点击Finish,完成SDRAM控制器的设置。在这里我们用的SDRAM是两片HY57V561620。
添加EPCS控制器
选择SOPC Builder组件选择栏中的system content→memories and memory controllers→Flash→EPCS serial Flash。双击或者单击下面的“ADD”,打开EPCS serial flash controller的对话框。如图16所示。
直接点击Finish完成添加。
添加JTAG UART
选择SOPC Builder组件选择栏中的system content→Interface protocols→serial→JTAG UART。双击或者单击下面的“ADD”,打开JTAG UART的对话框。如图18所示。
直接点击Next→Finish完成。
添加systen ID模块
选择SOPC Builder组件选择栏中的system content→peripherals→Debug and performance system ID peripheral。双击或者单击下面的“ADD”,打开system ID peripheral的对话框。如图17所示。
点击Finish,完成System ID的建立。
添加PIO模块
选择SOPC Builder组件选择栏中的system content→peripherals→microcontroller peripherals→PIO。双击或者单击下面的“ADD”,打开PIO的对话框,配置成4位输出。如图19所示。
点击Next→Finish完成。
到此为止,基本的NIOS系统模块就建立完成了,如图20所示。
如上图所示,我们可以把各个模块的名称的后面的_0去掉,单击要修改的名字ctrl+r或右键选Rename,输入新名字即可。如21图所示.
指定基址和中断请求 (IRQ) 的优先事项。
我们需要对FLASH地址进行锁定,复位重启的地址我们锁定为0x00000000,双击cfi_flash_controller的base地址修改,修改完成后再点击它前面的小锁,使其锁住。表示地址已锁定,如图23所示。
接下来是地址自动分配操作,点击SYSTEM->Auto-assign Basic Addresses,如图24所示。
接下来是中断的自动分配,和地址自动分配一样,SYSTEM-> Auto-assign IRQs,如图25所示。也可以手动分配。
接下来我们需要对cpu进行设置,双击cpu,Reset Vector处的Memeory选择cfi_flash_controller,Exceptioni Vector选择sdram,其他不变,如图22所示.
点击Finish,完成cpu设置。
生成 SOPC Builder系统
生成Nios II系统,单击system Generation标签,在options下进行如图26所示的设置。
点击Generate。开始生成Nios II系统。需要等待一会儿。知道出现info:system generation was successful,如图27所示。表示已经编译好,点击Exit,回到了Quartus界面。
集成Nios II系统到Quartus II 项目
在本节中,您执行以下步骤来完成的硬件设计:
■实例中,Quartus II SOPC Builder系统模块化项目。
■分配 FPGA 针脚。
■编译 Quartus II 项目。
■验证时间。
配置工程
我们要对工程配置一下了,在左侧边框栏右键点击,如图47所示。
点击setting后,如图48所示,点击Device and Pin Options。
点击后如图49所示,点击Configuration。
点击后,将use configuration device改为EPCS16,如图50所示。
实例化 SOPC Builder系统模块 Quartus II 项目中
首先创建一个顶层文件,在Quartus II 窗口中选择File→New,打开如图28所示的窗口,选择block Diagram/schematic File,即建立原理图文件。
点击File→save As…保存为sopc_led.bdf,如图29所示。
在sopc_led.bdf中的空白处双击,即可弹出symbol窗口。选择project→std_2c35,如图30所示。点击OK,将系统模块添加到了顶层模块中。如图31所示。
建立锁相环PLL模块。
接下来的工作我们需要建立一个锁相环,对时钟进行倍频,我们板子上是50MHz的有源晶振,我们要将其倍频到100MHz满足我们前面所设定的NOIS软核的时钟,还需要为SDRAM提供100MHz的时钟。下面我们就开始锁相环PLL模块。在sopc_led.bdf的空白处双击鼠标,点击megawizard plug-in manager…如图32所示。
出现如图33 点击Next
选中IO下的ALTPLL,将锁相环命名为PLL,如图34所示。
点击下一步,将General 的速度设置为8,输入时钟为50Mhz,如图35所示。
设置好以后,点击Next,将下图中选中的地方去掉后。如图36所示。
连续点击Next,直到出现C0输出频率的设置,将倍频设置为2,输出100Mhz时钟,如图37所示。
设置好以后点击Next,选中USE this clock,使用这部分给SDRAM提供时钟,时钟频率为100Mhz,偏移量为-75deg。如图38所示。
设置好以后,连续点击Next,中间没有需要修改的,最后点击Finish,完成PLL的建立,然后点击OK,回到Quartus界面,将我们建好的PLL放到空白处。
接下来的工作就是将PLL连接到NIOS软核上。如图39所示。
分配 FPGA 的针脚
PLL和std_3c25上点击右键后点击Generate Pins for symbol ports,这一步作用就是生成管脚,通过命名以后分配真实的引脚。如图40所示。
生成引脚后,如图41所示。
修改引脚的名称,使其具有意义,与脚本文件中的引脚命名相对应,修改完成后如图42所示。
脚本文件分配管脚
先将脚本文件复制到工程文件下面如图43所示。
我们将会提供给大家写好的TCL文件,到时候大家根据我给大家的TCL文件,将相应的管脚命名即可。修改好以后,按图44所示操作。
点击以后,出现45图,我们选择第一个EP2C35F484C8.tcl。点击RUN。
出现如图46图,说明脚本文件运行成功了。
编译 Quartus II 项目
点击Start Compilation如图52所示的按钮,开始编译。接下来就开始了又一个漫长的编译过程了,大家又可以休息一会了。
经过了漫长的编译过程,如果没有问题,编译成功后将出现如图52所示的对话框。
点击确定,编译过程全部结束。我们可以通过编译报告来看看我们用了多少资源,如图53所示。
下载到目标 FPGA 的硬件设计
1. 打开编程窗口和配置文件
在Quartus II 中直接点击Programmer或选择主菜单Tools—>Programmer,打开编程窗口,如下图所示,在Mode下拉列表框中有4种编程模式可以选择:JTAG、Active Serial 、Passive Serial和In-Socket。为了直接对FPGA进行配置,选择JTAG模式,并选中下载文件右侧的第一个小方框Program/Configure,注意核对下载文件的路径与文件名。如果此文件没有出现或者有错,可以单击左侧Add File 按钮,手动配置所需下载的文件是sopc_led.sof。
2. 设置编程器
在配置好下载文件sopc_led.sof后,要进行编程器设置。如果是首次使用Programmer进行连接下载,则须将试验系统与USB通信电缆连接好并打开电源。这时,系统提示用户安装USB-Blaster的驱动程序,用户须指定驱动程序存放的路径,然后进行安装。安装成功后,在编程窗口中Hardware Setup按钮的右边显示出USB-Blaster编程方式。以后再打开编程窗口时,只要USB电缆连接好,电源打开,系统就会自动设置成USB-Blaster编程方式。
3. 下载配置文件
单击编程窗口左侧的Start按钮,编程器开始把配置数据下载到FPGA中。这时,在下载进度条Progress段会显示下载数据的百分比,如下图。当下载完成时,会在信息窗口出现下载成功的消息。
使用 Nios II IDE 的软件开发
创建新的 Nios II C/c + + 应用程序项目
1.启动 IDE Nios II。在 Windows 计算机上,单击开始,指向程序,Altera、 Nios II EDS 9.0,然后单击 Nios II IDE 9.0。
2.在Nios II IDE中,选择FileàNewàProject,开启新项目对话框,选择Altera Nios IIàC/C++ Application,如下图:
3.单击Next按钮,进行新项目的设定。在这个步骤中提示用户指定新项目名、项目工作路径、目标硬件及新项目模板。在此选择项目模板为Hello World,设定项目名为Hello_led,设定工作路径为D:\sopc_project\led\software,单击SOPC Builder System右边的Browse按钮,选择前面生成的ptf文件,因为Nios II IDE需要从这个文件中获取该系统的相关信息。如下图所示:
4.然后单击Next按钮,进入下一步,为项目创建系统库。系统库是设备驱动程序集,提供对目标硬件的访问,如下图所示:
5.这样,整个新项目创建完成了,单击Finish按钮,出现下图:
修改源程序文件
修改程序的文件名。如下图所示,选中Hello_World,右键选择Rename。键入hello_led.c。
修改程序,双击helllo_led.c。编辑它,如图所示:
编译项目
1.右键单击 hello_led,然后单击System Library Properties。如下图:
2.单击System Library。
3.更改以下设置以减少编译的可执行文件的大小。如下图:
a.开启程序从不退出。
b.关闭支持 c + +。
c.关闭清洁退出 (刷新缓冲区)。
d.打开小 C 库。
4.单击确定以关闭属性对话框并返回到 IDE工作台。
5.单击ProjectàBuild All或按ctrl+B键,对项目进行编译。如下图:
编译进度:
编译完成:
运行程序
在项目编译调试之后,就可以运行程序了。运行方式有:Nios II Hardware、Nios II Instruction Set Simulator,分别是目标板运行、指令集仿真器运行。
运行程序的方法可以有如下几种:
选择RunàRun As,这种方式比较简单、快捷。
选择RunàRun…,此运行方式可进行一些具体的设置。
在此,选择RunàRun…,出现如下图所示的窗口。
根据需求选择采用的目标连接,在此选择Nios II Hardware,然后右键单击New按钮,添加要运行的项目,如下图所示。
如上图所示的右侧包含5个标签,可以根据要求进行相关的设定。其中Main标签显示运行工程的名称,最下方复选框Validate Nios II system ID before software download 为选择在软件下载前是否验证Nios II系统ID,默认情况为选中,即验证系统ID;Target Connection标签用于建立目标连接,选择JTAG电缆、JTAG设备及Nios II 终端通信设备;Debugger标签用于调试配置。
设置完成后,单击Run按钮,则在控制台上显示运行结果“Hello_LED!”,如下图所示,同时在开发板上显示跑马灯,运行成功。
当然,如果用户没有开发板,则可以采用指令集仿真运行。使用指令集仿真运行,可以选择RunàRun AsàNios II ISS运行工程,同样出现“Hello_LED”运行结果如下图所示。