您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页一、基于FPGA内部RAM的简单Nios II系统

一、基于FPGA内部RAM的简单Nios II系统

来源:叨叨游戏网
第1章 SOPC硬件系统基础实验

本章的目的是让读者熟悉SOPC硬件系统的构建流程及SOPC Builder和Nios II IDE的基本操作。这是SOPC系统开发的基础,读者务必熟练掌握。

JTAG口 SDRAM 支持FPGA工作及 FPGA 芯片 配置的外围电路 FLASH EPCS口 EPCS 图1.1 一般核心板构造

图1.1展示的是一般核心板的组成。JTAG口用于配置和调试用,EPCS口用于AS配置模式。EPCS是一种串行配置芯片,实际上是一种串行Flash,存储完配置文件后的剩余空间可用于存储程序。目前市面上的很多核心都只配一个容量稍为大一些的EPCS而不使用并行Flash,这样可以节省大约40个I/O口。图中的FLASH和SDRAM并不是核心本身所必需的,只是为了方便开发Nios II系统而增加的,因为FPGA内部的RAM比较小,不适合开发大的程序。

1.1 基于FPGA内部RAM的简单Nios II系统

1.实验目的

(1)熟悉Nios II系统的构成及开发流程;

(2)熟悉SOPC Builder和Nios II IDE的使用; (3)本节内容是后面内容的基础,在后面的实验里对本节的一些基本操作将不再详细阐述,读者若有疑问可返回本节查阅。

2.实验现象

两个LED灯交替闪烁。

3.实验原理

控制两个LED灯交替闪烁的程序代码比较小,因此可以将其固化在内部ROM内,系统复位时把其读入内部RAM运行。说到这,读者是否有似曾相识的感觉呢?其实我们天天用的计算机也是这么操作的。ROM相当于硬盘,RAM相当于内存,之后的实验将用到的FLASH和SDRAM也一样,FLASH相当于硬盘,SDRAM相当于内存。各自的作用大家也应该很熟悉了吧,FLASH属于非易失性的存储器,可以存储程序及其他一些数据文件等,但访问比较慢;SDRAM属于易失性存储器,但访问的速度比较快,系统复位时会把程序复制到SDRAM可以提高程序的运行速度(需要说明一点,系统复位时从哪复制程序取决于在定制Nios II处理器时复位地址设置为在哪,复制到哪取决于把程序代码空间设置为在哪,在后面的实验将详细说明)。

原理图如图1.1.1所示

Altera FPGA Nios II System Nios II Processor PIO LED Avalon Bus JTAG Interface Jtag Debug Module OnChip ROM Clock System ID OnChip RAM Other Logic Module

图1.1.1

由图1.1.1我们可以得到如表1.1.1所示的外设一览表:

表1.1.1 外设名称 cpu sysid OnChip_ROM OnChip_RAM led_pio 描述 Nios II/e Debug Module=Level1 系统ID 片内ROM 片内RAM 2位只输出 备注 系统的唯一标识 8KB 8KB 控制LED 4.实验内容

(1)在Quartus II中建立一个工程;

(2)使用SOPC Builder建立生成一个一个具有表1.1.1所示元件的硬件系统;

(3)在Quartus II工程中建立基于Nios II的硬件系统并编译生成配置文件*.sof; (4)在Nios II IDE中建立对应硬件系统的Nios II C/C++ Application,编写程序实现LED闪烁,在Nios II IDE中编译程序生成执行文件*.elf;

(5)将配置文件*.sof和可执行文件*.elf都下载到FPGA进行调试。

5.实验步骤

1)使用Quartus II建立工程

Quartus II是以工程的方式对设计过程进行管理,Quartus II工程中存放创建FPGA配置文件需要的所有设置和设计文件。因此,每个开发过程开始时都应建立一个Quartus II工程并存放在单独的文件夹下。 (1)打开Quartus II并新建工程

在Quartus II主界面中选择File→New Project Wizard...(如图1.1.2),此时将打开新工程设计向导,如图1.1.2~图1.1.6,按如图所示并根据自己的实际情况进行设置。

图1.1.2

图1.1.3 工程路径、名称、顶层实体指定对话框

文件夹所在路径名不能用空格,不能用括号“()”,可以用下划线“_”,最好不要以数字开头或使用中文名。

图1.1.4 添加文件对话框

若有设计好的模块需要在该工程中使用可事先在此处加入工程中,本次设计不添加。

图1.1.5 选择FPGA型号对话框

型号必需与所使用的核心板上的型号一致

图1.1.6 EDA工具设置对话框

如果要利用其他工具综合,仿真,时序分析的话在此处具体指定

图1.1.7 配置信息报告框

(2)建立顶层模块

顶层模块是为了将各个模块组合起来。在Quartus II主界面中选择File→New...新建原理图格式设计输入文件并保存。如图1.1.8~图1.1.11所示。

图1.1.8

新建文件菜单,不要与新建工程混淆了

图1.1.9

选择新建文件类型,本设计顶层采用原理图的形式,选择Block Diagram/Schematic File

图1.1.10

由于新建的文件没有做任何改变,Save选项不可用,帮我们选Save As…

图1.1.11 另存为对话框

至此,Quartus II主界面下工作先告一段落,不过需要提醒读者,务必按照前言所要求将未使用的管脚设置为“As input tri-stated”,下面我们进入SOPC Builder进行Nios II系统定制。

2)使用SOPC Builder创建Nios II系统 (1)启动SOPC Builder

启动SOPC Builder有两种方法,一种是巡边员图1.1.12所示从菜单启动,另一种是 如图1.1.13所示从工具栏启动。不过需要提醒一下读者,只有Quartus II打开一个工程SOPC Builder才可以启动,否则这两项均无效。如果打开的工程已经建立过一个Nios II系统,启动后将直接进入SOPC Builder主界面,否则启动后出现如图1.1.14所示Creat New System对话框。在对话框输入系统名称,注意该名称不能与顶层文件名相同,否则无法加入到顶层模块中。在此处可以选择用Verilog HDL还是VHDL描述所定制的系统,读者可以根据自己的习惯进行选择。对话框设置完毕后进入如图1.1.15所示的界面。

图1.1.12 启动SOPC Builder菜单

图1.1.13 工具栏启动SOPC Builder

图1.1.14 Nios II系统名称及目标描述语言

系统名为niosii,选择Verilog

图1.1.15 SOPC Builder主界面

(2)指定目标FPGA和时钟设置

根据读者所使用的FPGA型号选择器件系列。在定制系统之前,还需要指定系统的时钟频率。SOPC Builder将根据这一频率产生时钟分步或波特率等。因此,所设置的时钟频率一定要与实际接入Nios II系统的时钟相对应,一般为核心板上的晶振提供的时钟频率,如果设计者在FPGA内部倍频后再输入Nios II系统,则需要进行相应设置。 (3)添加Nios II处理器内核

双击可用元件列表里的Nios II Process(图1.1.16)即可弹出Nios II处理器内核设置向导,参考图1.1.17~图1.1.22 。因为我们选用的是Nios II/e处理器,所以图1.1.18~图1.1.20均不可设置,图1.1.21在JTAG调试模块可选无或Level1,此处选Level1以进行调试。图1.1.22是添加用户指令用的,本实验不添加,故也不进行任何操作,直接点Finish完成Nios II处理定制。

图1.1.16

图1.1.17 处理器类型选择

处理器内核有3种类型,分别是经济型(Nios II/e)、标准型(Nios II/s)和快速型(Nios II/f)。性能依次提高但所占的逻辑单元则依次增加,因为在具体设计中应根据自己器件的资源和系统要求进行合理选择。本实验比较简单,故选择经济型。为了比较性能和所占的资源,读者可以选择标准型或快速型重新做做一次本实验,观察实验现象有何不同。另外,可以看到信息栏有一个警告信息,这是因为在定制处理器时需要我们指定复位向量的存储地址和异常向量的存储地址。因为我们还没添加存储器,所以暂时无法设置,等添加存储器后再返回此处进行设置。所谓的复位地址就是CPU复位时从哪读程序,异常地址是用于存储异常向量的。

图1.1.18 指令和数据缓存设置

添加缓存可以提高CPU的运行效率,但会让程序的运行时间变得不可预测。

图1.1.19

图1.1.20

图1.1.21

JTAG调试模块要占用较多的逻辑单元,如果整个系统已经调试完毕,可以选用No Debugger,以减小系统占用资源。JTAG调试模块根据功能不同,分成4级。本实验选择“Level 1”,支持软件断点调试。

图1.1.22

用户自己定制指令可以把原需要软件完成的任务交给硬件处理以提高运算速度 (4)添加系统ID

如果系统包括系统ID外设,则当SOPC Builder生成Nios II系统时,将为Nios II系统生成一个标识符,供IDE编译器和用户辨别所运行的程序是否与目标系统匹配。若不匹配,将阻止用户下载程序到Nios II系统。双击可用元件列表里System ID Peripheral(图1.1.23)将弹出系统ID配置对话框(图1.1.24),系统ID没有需要用户配置的选项,不过可以看到信息栏里有一个警告,要求我们把该元件名命名为“sysid”(默认的是“sysid_0”)。

图1.1.23

图1.1.24

(5)添加片内ROM

实际上FPGA内部并没有ROM,所谓的ROM是通过对RAM初始化实现的。本实验添加ROM用于存储程序文件。双击可用元件列表里的“On-Chip Memory(RAM or ROM)”(如图1.1.25)即弹出图1.1.26所示的ROM设置对话框,按如图所示进行设置。实际上,设置得越大,可存储的程序代码越大,但是每一款的FPGA内部RAM是有限的,所以要依据实际器件进行合理设置。设置完成后将该元件重命名为onchip_rom(图1.1.27)。

图1.1.25

图1.1.26 ROM设置对话框

前面说过,FPGA内部实际上并没有ROM,而是通过对RAM初始化实现的,那么这具体是怎么样的一个过程呢?实际上,在Nios II IDE成功编译工程后将生成与SOPC Builder里定制的ROM元件名相同的*.hex文件,对于本例是onchiprom.hex。而在图1.1.26中可以看到有一个“Initialize memory content”选项,当该选项选上时,“Memory will be initialized from onchiprom.hex”即在Quartus II里编译时ROM将用该文件初始化。由此可以知道,用Nios II IDE调试好软件后再次编译Quartus II工程,程序文件就会被固化在ROM内,实际上相当于把可执行程序下载到CPU内。读者可以做这样的两个实验对比:1、在建立Nios II应用程序之前将*.sof配置文件下载到FPGA内,观察现象;2、先建立Nios II应用程序并编译成功,然后重新编译Quartus II工程,最后下载*.sof配置文件至FPGA,观察现象。如果你的操作没有错误的话,你可以观察到前者LED不闪烁,而后一实验LED灯会闪烁。

图1.1.27 重命名为onchiprom

(6)添加片内RAM

RAM的设置与ROM大致相同,同样如图1.1.25所示操作可弹出图1.1.28所示的ROM设置对话框,按如图所示进行设置,然后,按图1.1.27所示进行重命名为onchipram。

图1.1.28 RAM设置对话

(7)添加PIO外设

PIO外设是CPU与外界通信的最基本的单元,双击可用元件列表里的PIO(Parallel I/O)(如图1.1.29所示)即可打开PIO的设置向导,共有3个标签页可设置(图1.1.30~图1.1.32)。

图1.1.29

图1.1.30

图1.1.31

图1.1.32

输入口仿真时的输入值设置,若不进行仿真此处可不设置

在图1.1.30共有3个参数可以设置:Width(位宽),Direction(方向),Output Port Reset Value(输出口复位时的默认值)。当PIO只具有输出属性时只有图1.1.30标签页可设置,图1.1.31和图1.1.32均是针对具有输入属性的端口进行设置的。对于图1.1.30的每一种方向具体含义如图1.1.33所示。特别提醒一点,双向端口对外呈绿色,添加输入输出引脚时就使用Bidir(图1.1.34),这在后面添加SDRAM和FLASH时将使用到,因为SDRAM和FLASH的数据口是双向的。

在图1.1.31中有两个参数可以设置,边沿捕获寄存器和中断设置,设计者可以自己决定输入口是否要生成边沿捕获寄存器及什么样的边沿和是否产生中断及什么类型的中断。如果采用的是电平触发的中断,可以不需要边沿捕获寄存器,如果是边沿触发则必须有边沿捕获寄存器。

图1.1.33

图1.1.34

本次实验的目的是控制两个LED灯交替闪烁,因此我们只添加2位的只输出端口,如图1.1.30所示,并命名为led_pio(该名字具体有重要的应用,在后面的软件编程时将具体介绍,实际上SOPC Builder里定制的元件的命名都是软件编程里访问的接口)。 (8)设置复位地址和异常向量地址

在第(3)步中我们说过(图1.1.17),由于没有添加存储器,复位地址和异常向量地址无法设置,该步的目的是完成这一过程。如图1.1.35所示,复位地址设置为onchip_rom,异常向量地址设置为onchip_ram。Offset采用默认的,不过由于这两个地址使用的是不同的存储器,所心从合理利用资源的角度出发应该把异常向量地址的Offset设置为0x0。

图1.1.35

(9)分配基地址和中断优先级

这两步均可以采用自动分配的方式(图1.1.36),对于基地址,采用自动分配一般可以满足我们的需求,而中断优先级则不建议使用自己分配设计者应该根据自己系统的实际进行设置。Nios II最多允许32个中断。

至此我们已经完成了整个Nios II系统的定制,整个系统如图1.1.37所示。直接点Generate则SOPC Builder将根据设计的设置生成相关的设计文件以供Quartus II和Nios II IDE使用。生成成功后将显示如图1.1.38所示的信息,若有错误请返回检查直至无错。退出SOPC Builder,在Quartus II添加符号的对话框里将出现设计者定制的Nios II系统的元件符号(图1.1.39)。同时在工程文件夹里有对应的系统文件niosii.ptf和硬件描述语言niosii.v及其他外设对应的HDL文件。

图1.1.36

图1.1.37

图1.1.38

图1.1.39

3)集成Nios II系统到Quartus II工程

将图1.1.39所示的元件符号加入到Quartus II工程的顶层文件,添加相应的引脚并重命名,如图1.1.40所示。分配管脚并编译,把生成的配置文件下载到FPGA内。至此,硬件开发部分已经完成,读者可以先退出Quartus II。

图1.1.40

4)使用Nios II IDE建立用户应用程序 (1)建立Nios II C/C++应用程序 ① 切换工作空间

一般每一个项目对应一个单独的工作空间,这样便于程序组织和管理。选择File→Switch Workplace...(图1.1.41)弹出工作空间选择对话框,选择自己想编写应用程序的Quartus II工程项目文件夹(图1.1.42)。如果所选的文件夹下没建立过应用程序,将出现如图1.1.43所示的欢迎画面,若对相关内容不感兴趣直接关闭即可。强烈建议读者将

应用建在对应的SOPC系统所在的工程文件夹下。

图1.1.41

图1.1.42

图1.1.43

② 编写Nios II C/C++应用程序文件

选择File→New→Nios II C/C++ Apllication(图1.1.44)弹出新建程序对话框(图1.1.45),Name为所要建立的应用程序工程名,Select Project Template为选择工程模板,此处我们选Blank Project并命名为led;Select Target Hardware选择自己想建立应用程序的SOPC系统,我们选择此前建立的SOPC系统niosii.ptf,位于我们刚才建立的Quartus II工程文件夹下。需要提醒读者的是,在选择的SOPC系统时一般默认弹出的是前一次工作空间所在的目录,如果读者更换了工作空间,则应到对应的工作空间下找*.ptf文件(图1.1.46)。

图1.1.44

图1.1.45

图1.1.46

完成新建工程后,在新建的工程名led处右击选择New→Source File(图1.1.47)弹出如图1.1.48所示的对话框,因为我们要建立的是C语言程序,所以命名为led.c,也可采用其他命名,但要指定文件类型。编写C程序代码(图1.1.49),至此应用程序工程及源代码建立完毕。

图1.1.47

图1.1.48

/********************版权声明***************************** * 大学信息科学与工程学院创新实验室 * 文件名: led.c * 创建者: 吴占敏 * 创建日期: 2010.4.21 * 校验者: * 校验日期: * 版本号: V1.0 * 功能描述: 两个LED灯交替闪烁 ********************************************************/ #include \"system.h\" #include \"alt_types.h\" #include \"altera_avalon_pio_regs.h\" /********************************************************** * 名 称:main() * 功 能:控制两个LED灯交替闪烁。 ***********************************************************/ int main(void) { alt_u8 led = 0x2; int i; while(1) { for(i=0;i<50000000;i++){};//延时 led = 0x1; //LED_PIO是SOPC创建NIOS2时的外设名,必需相同且大写 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,led); for(i=0;i<50000000;i++){};//延时 led = 0x2; IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,led); } return 0; } 图1.1.49

system.h是Nios II IDE根据SOPC Builder中定制的Nios II系统生成的,其中包含了系统各组件信息,如名称、基地址、中断号等。在工程编译连接成功后才存在访文件,否则不存在。Nios II系统存储器与外设是统一的,而对于外设的访问都是通过访问外设的寄存器达到操作目的。本例中,LED_PIO_BASE即LED_PIO这个外设的数据寄存器地址。在altera_avalon_pio_regs.h中定义了PIO内核的寄存器映射以及硬件访问的宏,用户可以调用其中定义的宏进行访问。alt_u8表示无符号8位数即unsigned char,在alt_types.h中定义。

③ 设置应用工程系统属性

在工程文件目录led右击先System Library Properties(图1.1.50)弹出图1.1.51所示系

统库属性设置对话框,其他参数将在后面陆续介绍,此处只介绍Linker Script(图1.1.52)。  Custom linker script。全能该选项时,用户必须自行建立和管理Linker Script。(注:

用户自定义的Linker Script文件必须放到系统库项目的根目录下;Altera强烈建议用户使用系统自动生成和管理的Linker Script。  Use auto-generated linker script。选择该选项时,Nios II IDE将自动和管理Linker

Script,在大多数项目中这个选择已经足够了。具体有以下几个子选项可以配置:  Program memory(.text):配置执行代码的物理存储器;

 Read-only data memory(.rodata):配置只读数据的物理存储器;  Read/write data memory(.rwdata):配置可读写数据的物理存储器;

图1.1.50

图1.1.51

图1.1.52

 Heap memory:配置堆空间的物理存储器;  Stack memory:配置栈空间的物理存储器;

 Use a separate exception stack:选择了该选项时,异常的栈空间将于系统

栈空间,可以在一个单独的物理存储器中开辟;将异常栈空间开辟在一个快速的存储器(如紧耦合存储器)可以提高系统的中断响应性能。

 Exceptin stack memory:配置异常栈的物理存储器;

 Maximum exception stack size(bytes):配置异常栈尺寸。 此实验把Program memory(.text)选项设置为onchip_rom,其他几项设为onchip_ram,

不单独设立Exception stack memory。一般为说,这几个选项设置在SDRAM以提高程序的程序运行速度。至此,我们已经基本完成了应用程序设计的各步骤,右击工程目录led选择Build Project(图1.1.53)或在菜单栏选择Project→Build Project(图1.1.54)编译连接工程。如果你之前片内RAM的设置和本教程相同,那么,很遗憾,编译将无法通过(图1.1.55),因为程序代码大小大于RAM的大小。我们将在下一步介绍优化代码的方法。

图1.1.53

图1.1.54

图1.1.55

④ 优化代码大小 由于没进行优化而片内RAM的空间又太小,所以编译错误。我们将通过下面方法优化代码。

 优化工程编译选项:右击工程led选择Properties→C/C++ Build→

Configuration Settings→Nios II Compiler→Gneral→Optimization Levels选择“Optimize size(-0s)”(图1.1.56~图1.1.57);

 优化系统库编译选项:右击系统库led_syslib[niosii] 选择Properties→

C/C++ Build→Configuration Settings→Nios II Compiler→Gneral→Optimization Levels选择“Optimize size(-0s)”(图1.1.58~图1.1.59);  使用小封装的驱动库:HAL为处理器的外设提供了两种驱动库,一种是执行速

度快,但代码量大的版本,另一种是小封装版本。默认情况下,HAL系统使用是代码量大的版本。可以选择Reduced device drivers选项来选择小封装版本,从而减小代码量。右击工程led选择System Library Properties在弹出的对话框把Reduced device drivers选项选上(图1.1.60)。

 使用新的C语言库:完整的ANSI C标准库通常不适用于嵌入式系统,HAL

提供了一系列经过裁减的新的ANSI C标准库,占用非常小的代码量。可以选择Small C library选项来选择新的ANSI C标准库。右击工程led选择System Library Properties在弹出的对话框把Small C library选项选上(图1.1.60)。

 使用用_exit()函数:在默认情况下,HAL系统会调用exit()函数作为用户程序

的结束。exit()函数主要完成两部分工作:清除所有C语言库中的I/O缓存;调用在atexit()函数中的所有函数。实际上,相当于main()函数中return语句在执行之前必须要完成的工作。而在嵌入式系统中用户程序是不会退出main()函数的,所以exit()这段代码是多余的,可以去掉。右击工程led选择System

Library Properties在弹出的对话框把Clean exit(flush buffers)选项取消(图1.1.60)。

 减小Max file descriptors:该选项可以配置需要创建的文件描述器数目。文

件描述器用于访问字符模式设备和文件系统,它们需要占用不小的数据存储空间。为了提高文件描述器的工作效率,系统库项目在编译阶段就已经为文件描述器开辟了足够的存储空间。默认的文件描述器数目是32,减小该值可以降低最终的代码尺寸(不能小于4)。右击工程led选择System Library Properties在弹出的对话框把Max file descriptors的值改为4(图1.1.60)。  取消对C++的支持:Nios II IDE预设对C++的支持,但C++所编译的程序代码大

小较大,而我们使用的是纯C语言编程,所以可以取消该选项。右击工程led选择System Library Properties在弹出的对话框把Support C++选项取消(图1.1.60)。

 勾选Program never exits:嵌入式系统通常不会结束,所以可以全能访选项

以减少exit所造成的负担。右击工程led选择System Library Properties在弹出的对话框把MProgram never exits选项选上(图1.1.60)。

图1.1.61为最终编译的结果,可以看到最终的代码大小只有232 Bytes,空间剩余3832 Bytes。而原先空间却还差748 Bytes(图1.1.55),意即优化前的代码大小为4812 Bytes(232+3832+748),这种优化是相当可观的。

图1.1.60

不过说明一点,这样设置主要是因为onchip_ram的空间太小,不得不减小程序存储空间。如果使用的是SDRAM不建议勾选Small C library和Reduce device drivers,Nios II IDE会根据设计者的选择加载不同的驱动版本,从而代码也不相同,实现的功能也不相同。比如对于有些字符设备,小封装库将采用查询的模式,正常情况下使用的是中断模式。显然,中

断模式的效率更高。如果使用了UCOSII,勾选了这两项将导致出错。因此,设计在优化代码前要清楚其可能引起的后果,否则将导致不可预料的结果出现而又不容易找出错误的原因。

图1.1.61

⑤ 在线调试

当编译成功后,我们可以采用在线调试的方式观察程序的运行状况以确定它是否满足我们的要求。在led工程文件夹处右击选择Debug As→Nios II Hardware(图1.1.62)或菜单Run→Debug As→Nios II Hardware(图1.1.63)。选择后将弹出一个询问是否打开观察窗口的对话框(图1.1.),为了便于观察,我们选择是,而后弹出图1.1.65所示的调试窗口。调试运行时,IDE会首先下载程序到目标板,并在main()处设置断点。在程序运行观察窗口中可以观察程序的运行情况,在局部变量观察窗口中可以观察变量的值。此外还能查看寄存器、存储器等的值。我们可以通过如图1.1.66所示的调试控制菜单进行调试,也可以通过工具上的对应按钮(图1.1.67)进行调试。

图1.1.62

图1.1.63

图1.1.

图1.1.65

图1.1.66

图1.1.67

在调试过程中出现了这么一个问题,进入调试窗口后,单步运行到for(i=0;i<500000;i++)时程序就没有反应,退出也不行。解决方法是将i<500000改为i<5(或其他较小的数),由于本人学习还不够深入,无法具体解释原因,有可能是对程序优化得太多或内部RAM的空间太小导致这种情况出现。 ⑥ 在线运行

在led工程文件夹处右击选择Run As→Nios II Hardware或菜单Run→Run As→Nios II Hardware即可。如果两个LED灯一直处于亮的状态,则有可能是因为延时太短了,适当改变for语名以增加延时即可。如若还不行,请仔细你的实验步骤,确保无误。 ⑦ 重新编译Quartus II工程并下载

在前面添加片内ROM时我们介绍过如何对ROM进行初始化的,观察图1.1.61可以看到“Post-processing to create onchip_rom.hex”这么一句话,这就是我们编译成功的程序文件,重新编译Quartus II工程时该文件将被编译成配置文件的一部分。此时再重新下载配置文件,即使我们不在Nios II IDE里运行程序,照样可以观察到实验现象,而之前的配置文件并不行。读者好好理解一下这一过程。

好了,本节到此终于可以告一段落了,每一操作都介绍得比较详细,请读者务必熟练掌

握,因为之后的实验将不会如此详细地介绍。

本节易错提示: 1、 Quartus II顶层文件名与新建工程向导里指定的顶层实体名不一致,编译时将出错; 2、 SOPC系统命名与顶层实体名相同,Nios II系统无法添加到顶层原理图; 3、 未指定CPU复位地址和异常向量地址,无法生成Nios II系统; 4、 未分配SOPC系统各元件基地址,程序可能无法正确运行; 5、 系统ID未重命名为sysid; 6、 Nios II IDE工作空间未设定在对应的Quartus II工程文件夹下; 7、 新建Nios II工程时所选的*.ptf文件不是对应工作空间下的*.ptf; 8、 下载的*.sof配置文件与编程时所使用的*.ptf不一致,往往会提示使用旧的系统或系统ID匹配; 9、 未指定Program memory(.text)为onchip_rom,这种情况下完成最后一步实验时无法观察到正确现象。 10、如果在调试或运行时出现“You have more than one JTAG cable available so you must„„”的提示,说明你的电脑上有多个下载线连接或曾经添加过多个下载线,按照提示进行操作即可。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务