FPGA 之 SOPC 系列(二)SOPC开发流程及开发平台简介

2020-12-30 10:39:26 浏览数 (1)

大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。

今天给大侠带来今天带来FPGA 之 SOPC 系列第二篇,SOPC开发流程及开发平台简介相关内容,希望对各位大侠的学习有参考价值,话不多说,上货。

本篇首先详细介绍了SOPC开发的基本流程,然后通过实际操作的视频,生动详细的讲述了一个简单的SOPC系统的设计过程,包括使用Quartus II、SOPC Builder定制Nios II系统以及利用Nios II IDE进行应用程序开发。本篇力求以实例的途径让读者以最快的方式了解SOPC开发以及各软件的使用,从而激起读者对SOPC的兴趣。

以下为本篇的目录简介:

2.1 SOPC开发流程

2.2 简单SOPC实例开发任务及步骤

2.3 分析系统需求

2.4 使用Quartus II建立工程

2.5 使用SOPC Builder创建Nios II系统

2.6 集成Nios II系统到Quartus II顶层模块

2.7 设置编译选项并编译硬件系统

2.8 使用Nios II IDE建立用户程序

2.9 下载硬件设计到目标FPGA

2.10 调试/运行程序

2.1 SOPC开发流程

SOPC设计包括以Nios II软核处理器为核心的嵌入式系统的硬件配置、硬件设计、硬件仿真、IDE环境的软件设计、软件调试等。

SOPC的开发流程通常包括2个方面:基于Quartus II、SOPC Builder的硬件设计、基于NiosII IDE的软件设计。对于比较简单的NiosII系统,一个人便可执行所有设计。对于比较复杂的系统,硬件和软件设计可以分开进行。

SOPC的开发过程中要使用到Quartus II、SOPC Builder以及Nios II IDE,三者之间关系如下所示:

Quartus II、SOPC Builder以及Nios II IDE三者之间关系

SOPC Builder:

它是Nios II软核处理器的开发包,用于实现Nios II系统配置、生成以及与Nios II系统相关的监控和软件调试平台的生成;

Quartus II:

用于完成Nios II系统的分析综合、硬件优化、适配、配置文件编程下载以及硬件系统测试等;

Nios II IDE:

用于完成基于Nios II系统的软件开发和调试,并可借助其自带的Flash编程器完成对Flash以及EPCS的编程操作。

硬件开发(1):

  • 用SOPC Builder软件从NiosII处理器内核和NiosII开发套件提供的外设列表中选取合适的CPU、存储器以及各外围器件,并定制和配置它们的功能;
  • 分配外设地址及中断号;
  • 设定复位地址;
  • 用户也可以添加用户自身定制指令逻辑到NiosII内核以加速CPU性能;
  • 添加用户自己设计的IP模块。

硬件开发使用Quartus II和SOPC Builder(1)

硬件开发(2):

  • 将生成的Nios II系统集成到之前建立的Quartus II工程;
  • Quartus II工程中可加入Nios II系统以外的逻辑。其可以是自身定制的硬件模块,也可以是从Altera或第3方IP供应商中得到的其它现成的知识产权设计模块。
  • Quartus II软件用来选取具体的Altera FPGA器件型号,然后为Nios II系统上的各I/O口分配管脚。

硬件开发使用Quartus II和SOPC Builder(2)

硬件开发(3):

  • 编译Quartus II工程,对HDL文件进行布局布线,从HDL源文件综合生成一个适合目标器件网表,生成FPGA配置文件(.sof);
  • 用下载电缆(如 ByteBlaster II),将配置文件下载到目标板上。硬件校验完成后,可将新的硬件配置文件下载到目标板上的非易失存储器(如EPCS器件)。

硬件开发使用Quartus II和SOPC Builder(3)

软件开发:

软件开发使用Nios II IDE,它是一个基于Eclipse IDE架构的集成开发环境,它包括:

  • GNU开发工具(标准GCC编译器,连接器,汇编器和makefile工具等);
  • 基于GDB的调试器,包括软件仿真和硬件调试;
  • 提供用户一个硬件抽象层HAL;
  • 提供嵌入式操作系统MicroC/OS-II和LwTCP/IP协议栈的支持;
  • 提供帮助用户快速入门的软件模板;
  • 提供Flash下载支持(Flash Progrmmer 和QuartusII Programmer)。

软件开发(1):

  • 使用SOPC Builder生成系统后,可以直接使用Nios II IDE开始设计C/C 应用程序代码。Altera提供外设驱动程序和硬件抽象层(HAL),使用户能够快速编写与低级硬件细节无关的Nios II程序;
  • 除了应用代码,用户还可以在Nios II IDE 工程中设计和重新使用定制库。

软件开发(2):

  • 即使在没有软件开发的目标板的情况下,也可以经过编译、连接后通过Nios II指令仿真器(ISS)运行和调试代码。
  • 一旦有一个目标板,用户就可以使用下载电缆下载软件到目标板进行调试/运行。

SOPC基本开发流程简介:

从以上“硬件开发”与“软件开发”两部分介绍中,在我们的脑海里一定已经形成了一个大致的开发流程,下面我们仔细的对其进行梳理和理解。见SOPC开发流程简图。

SOPC开发流程简图

开发流程简图解析:

1、分析系统需求:

如果需要,用户可以定制指令和外设逻辑。

2、建立Quartus II工程,建立顶层图*.bdf:

每个开发过程开始时都应建立一个工程,Quartus II是以工程的方式对设计过程进行管理。在工程中建立顶层模块文件.bdf相当于传统电路设计中的电路板(PCB)。

3、打开SOPC Builder,定义和生成系统:

在SOPC Builder中添加需要的功能模块(Nios II及其标准外设模块),完成后生成一个系统模块。

4、定制指令&定制外设逻辑:

如果需要,用户可以定制指令和外设逻辑。

5、Altera的LPM模块:

在Quartus II软件中包含了大量的Altera公司提供的LPM功能模块,相当于传统设计中除处理器以外的逻辑芯片(如74系列);

6、自定义的功能模块:

当设计中现有模块不能满足设计要求时,可设计自己的功能模块。并在顶层模块中使用;

7、集成SOPC生成的系统到Quartus II 工程:

在顶层模块中,分别将SOPC Builder生成的系统模块、LPM功能模块以及用户自定义功能模块添加到顶层模块中;

8、连接各功能模块:

然后将各个功能模块用连线连起来组成系统功能原理图。

9、选择FPGA型号并进行管脚分配:

为系统功能原理图选择芯片载体并为各个输入输出信号分配芯片的管脚;

10、进行编译选项设置:

设置编译选项,从而让编译器按照用户设定来进行编译;

11、编译硬件系统生成配置文件sof:

编译系统生成硬件系统的配置文件*.sof和*.pof。编译系统是一个非常复杂的过程,包括优化逻辑的组合、综合逻辑、适配FPGA、布线以及时序分析等步骤。

12、下载配置文件到FPGA器件

将配置文件.sof下载到FPGA,将可执行文件.elf下载到RAM。

13、使用IDE编程工具烧写配置文件和软件代码

最后利用IDE的编程工具将配置文件烧写到FPGA的配置芯片或Flash,将可执行文件*.elf编程到Flash中。

14、调试好硬件和软件

直到硬件和软件设计都达到设计要求。

15、使用Nios II IDE开发软件:

软件开发也可以在SOPC Builder 生成系统模块后立即进行,与传统软件开发类似,唯一不同在于系统是自己定制的,所受局限小。

16、设置软件运行硬件环境属性

设置好软件运行的硬件环境属性后,便可进行编译、链接和调试、运行程序。

17、编译软件生成可执行文件elf

对用户程序进行编译,生成可执行文件*.elf。

18、在IDE中使用ISS运行/调试软件

接下来在IDE的指令集仿真器(ISS)上仿真软件和运行/调试软件。

19、在目标板上运行/调试软件

在目标板上反复调试软件。

2.2 简单SOPC实例开发任务及步骤

通过实际操作来体验一个简单的SOPC开发的整个过程。建立一个基于Nios II处理器的系统来控制一个LED灯闪烁。具体的操作步骤如下:(具体代码略)

1、分析系统需求。

2、启动QuartusII软件和新建实例设计工程。

3、启动新的SOPC Builder系统。

4、在SOPC Builder中定义并生成系统。

5、集成SOPC Builder系统到QuartusII工程。

6、选择芯片型号并进行管脚分配。

7、设置编译选项并编译硬件系统。

8、下载硬件设计到目标FPGA。

9、使用NiosII IDE开发用户程序。

10、调试用户程序。

11、运行程序。

2.3 分析系统需求

每一个SOPC系统开发之前,都应该仔细分析系统需求,例如:

每一个SOPC系统开发之前,都应该仔细分析系统需求,基于这些问题,用户可确定具体的系统要求,例如:

  • 使用哪种NiosII处理器内核:比较小的还是比较快的?
  • 设计要求什么外设及其数量?
  • 功耗要求?
  • 使用哪种实时操作系统(RTOS)?
  • 硬件加速逻辑在哪些方面可大大提高系统性能?例如:增加一个DMA外设能释放CPU在进行数据拷贝时所占用的资源?定制的指令能取代DSP算法吗?

本篇实例的开发任务是:

  • 展示可用于控制LED闪烁的简单NiosII处理器系统。
  • 利用最通用和有效的方法来建立实际的定制NiosII系统。
  • 整个系统仅使用片内资源,且不依赖于目标板。

分析任务可以知道FPGA内硬件系统组成应包含:

  • NiosII/e处理器核;
  • 4kBytes片内RAM存储器(Onchip_RAM)用于储程序代码以及程序运行空间,
  • 变量存储(R/W数据)、Heap、stack;
  • 1位输出I/O (PIO)管脚来控制LED;

控制LED闪烁的系统框图:

计算机硬件要求

  • Altera Quartus II 9.0或更高的软件版本
  • Nios II 9.0或更高版本

2.4 使用Quartus II建立工程

新建一个工程目录“SOPC_LED”,在此目录下建立一个名为”sopc_led”的QUARTUS工程,并新建一个顶层图,保存于工程中。

2.5 使用SOPC Builder创建Nios II系统

1、用SOPC BUILDER 定制 NIOS II处理器和外设。

用主窗口抬头下的命令:tools> SOPC Builder ...等待约半分钟后(具体时间随计算机性能而定),随即弹出一个对话的子窗口:

等待用户的输入,在窗口中键入用户希望建立的系统名,NIOSII_C,并且选择Verilog,再点击OK按钮。

2、随即激活如图所示的Altera SoPC Builder 人机对话窗口,其中我们可以看到三个子窗口。

1) 左上部子窗口的目录树列出了许多可以供选择的IP,从NiosII 处理器核到各种外围IP器件,应有尽有;

2)右上部子窗口可以配置所用的FPGA器件类型和时钟频率设置。并且可以显示配置后确认的部件和连接等信息;

3)下部子窗口显示配置后出现的反馈信息,告诉用户设计过程中可能存在问题的地方。

3、将NiosII处理器核添加到系统。

选择TARGET,本例选择UnspecifiedBoard;选择时钟频率,Clock(MHZ):本例选50;选择目标器件,TargetDeviceFamily:本例选Cyclone。

完成后,点击左上部子窗口的目录树上有关组件,再点击该子窗口下面标记为Add..的按钮,随即可以在右上部子窗口的Module Name列观察到系统中添加了相应的部件。如果我们点击目录树下的Nios II Processor,再点击下面标记为Add..的按钮,随即出现如图所示的NiosII核配置窗口,可让用户选用不同规格的NiosII核。我们选择了适合规格的处理器核NIOSII/E。

注:下面的Reset Vector是复位后启动时的Memory类型和偏移量, Exception Vector是异常情况时的Memory类型和偏移量。现在还不能配置,需要SDRAM和FLASH设置好以后才能修改这里,这两个地方很重要。这里暂时不加,等添加了MEMERY在返回修改。

部件之间的连接的确定:

从上图所示的窗口中,我们可以看到NiosII 处理器已经生成,有几条黑色的弧线表示该处理器部件之间的连接。将光标移动至弧线交接处可以见到实心的黑色接点,表示部件之间的线路是连接的,若是空心的黑色接点,则表明这两条线没有连接。设计者可以点击空心的接点将其连接,或者点击实心的接点将其断开。至于应该断开还是连接,与系统的构造有关。设计者必须清楚自己系统的构造,才能设计出正确的以Nios II 处理器核为中心的系统。

可以看到在图所示的窗口底部有五个按钮,其中有一个是虚的,表示不能执行。标记为Generate的按钮虽然是实的,但系统尚未配置完毕,还不能生成可以运行的系统。所以必须根据数字系统的要求,把需要的部件逐个地添加上去,直到可以组成一个完整的系统为止。这项工作类似于在印刷线路板上安排各个部件,并连接线路。

4、穿插一下NIOS启动过程。

点击该窗口下部标记为Next的按钮,随即进入第2个配置窗口,见图所示:

注意:这里如果是选择NIOSii/f则将Data Cache处选择为None,也就是关闭Data Cache,那Data Cache到底是什么呢,简单的说,Data Cache是像电脑的一级缓存二级缓存一样的东东,就是为了提高系统速度的。可是有个这个高速缓冲区后,我们的代码执行时间却发得不可确定了,降低了程序的实时性。我们发出的数据,放到了高速缓冲区里而没有及时的去执行才导致代码不执行,没有显示效果。如果以后发现寄存器方式操作PIO不好用时,请关闭这个。

点击该窗口下部标记为Next的按钮,随即进入第3个配置窗口。用同样方法进入第4、第5、第6个配置窗口(均使用缺省配置)。设置JTAG Debug Module,即JTAG调试时所用到的功能模块。功能越多,需要的资源越多,这里,我们选择Level 1即可,不需要过多其他的功能。在第6个配置窗口下部点击标记为Finish.. 的按钮,结束处理器核的配置。得到如图所示的窗口。

5、把内存部件添加到系统。

下面讲解如何把片上ROM和RAM添加到最小系统中去,在图所示的Altera SoPC Builder主窗口左边的 System Contents 子窗中列出了许多可以供选择的IP,从NiosII 处理器核到各种外围IP器件,几乎应有尽有,但必须注意许多高级的IP是需要付费后才能从网上下载的。用鼠标拉动 System Contents 子窗的滑标,浏览目录树至 Memories and Memory Controllers分支,将其展开,选择On-Chip,将其展开。双击On-chip Memory (RAM or ROM),随即出现如图所示窗口。

MEMORY TYPE 选择RAM;DATA WIDTH选择32bits,total memory size可以选择4kbytes,将ROM和RAM部件配置完毕后,可以在Altera SoPC Builder主窗口右侧的module Name 列找到新添加的模块。

同样的方法可以在系统中添加一个4位的PIO同时驱动4个发光二极管。双击PIO(在PARALLEL I/O)(在AVALON MODULES-OTHER下),为系统添加输出LED的输出接口。WIDTH选择4bits。

然后点击FINISH,返回SOPC BUILDER界面。

6、系统构成部件的重新命名和系统的标识符。

为了在编写软件程序时,容易记住和理解所添加的硬件部件, 给这些部件重新命名是很有意义的。用鼠标点击模块名,然后点击鼠标右键,再点击弹出下拉菜单中的Rename项,设计者就可以随意地更改自动生成的硬件部件名。

7、基地址和中断请求优先级别的指定。

至此,我们已经将必须的组件添加到这个最小系统中,见图所示。接下来的工作是为每个外设分配基地址和中断请求优先级(IRQ)。最小系统中所有外设都没有中断,所以不需要分配中断优先级。SoPC Builder 界面提供自动分配基地址和自动分配IRQ命令。在 SoPC Builder 主窗口台头下,点击命令System > Auto-Assign Base Addresses 和 Auto-Assign IRQs 即可。

这两个命令可以分别满足简单系统的外设基地址分配和中断分配。MyNiosSystem 采用自动分配外设基地址分配和中断就能达到要求。但对于某些复杂的系统往往需要用户自己调整外设基地址分配和中断优先级才能满足系统要求。Nios内核的可寻址范围为2G(31位,即从 0x0000_0000 到 0x7FFF_FFFF 之间)。由于Nios II 程序用宏定义的符号常量来访问外设,所以基地址的改动不需要修改原已调通的程序。

8、Nios II 复位和异常地址的设置。

在cpu_0上点右键,选择edit,重新弹出对话框。在本系统中,设置如下:

注意:若地址设置违反规定,在信息窗口中将会出现错误提示。

9、Nios II 系统的生成。

1)在如图所示的SoPC Builder主窗口中,点击System Generation子窗口标签,随即便出现System Generation 窗口。

2)在该窗口上部的一个选项中,根据需要选择或者不选择生成仿真用的项目文件(对本项目而言,不选择可以节省时间,因为本项目不需要进行逻辑仿真)。

3)点击System Contents子窗口标签,SoPC Builder 随即回到原窗口。点击右下部的Generate(或者Re-Generate)按钮,便开始自动生成Nios II 系统。

在生成Nios II系统的过程中,SoPC Builder 执行了一系列操作,为组成系统中的每一个部件生成了相应的Verilog源文件,且生成了各硬件部件和NiosII核连接的片内总线结构、中断逻辑和仲裁逻辑。SoPC Builder 还为用户配置的Nios II系统自动生成了IDE软件开发所必须的硬件抽象层(HAL)、C语言和汇编语言的头文件。这些头文件定义了存储器 映射 (mapping)、中断优先级和每个外设寄存器空间的数据结构。一旦Nios II系统的硬件需要修改,则 SoPC Builder 将会更新这些头文件。它也会为系统中的每个部件生成定制的C语言和汇编函数库。如果部件中有片内ROM或者RAM,它还将为这些片内存储器生成初始化文件(扩展名为.HEX的空白文件)。在系统生成的最后阶段,SoPC Builder 会自动地创建可以将所有部件连接起来的Avlone总线结构。系统生成过程中,在标签为System Generation的子窗口中将报告生成过程的进展,最后会出现一条消息,告诉用户:系统已顺利生成或者已经失败。

生成用户配置的Nios II系统后,在sopc_led目录中产生了下面一系列文件:

1) SoPC Builder 系统文件:niosii_c.ptf,该文件定义了已由用户配置完毕的系统究竟包含哪些部件的详细信息。Nios II 软件集成开发环境(IDE)必须使用该文件的信息来为目标硬件编译相应的软件程序。关于这一点在以后还要深入介绍。

2)Quartus II 模块符号文件:niosii.bsf,该文件是一个表示线路图符号(Symbol)的文件,有一个Verilog文件(MyNiosSystem.v)与之对应。用于添加到Use_Niosii 项目的顶层。

3)硬件描述语言文件:niosii.v以及每个外设部件的Verilog HDL文件。这些文件描述了系统的硬件设计。Quartus II 编译器将应用这些Verilog文件,并配合Altera器件库中的文件,生成可以在目标FPGA上运行的数字逻辑系统。

2.6 集成Nios II系统到Quartus II顶层模块

1、类似往QUARTUSII工程添加功能模块,将所定制的NIOSII软核CPU添加到本例工程中,即双击工程顶层文件空白处(新建一个),弹出SYMBOL对话框,在PROJECT下面可以找到刚才建立的niosii_c模块,按OK将其niosii_c添加到顶层图中。

2、添加其他模块

3、定义管脚

我们也可以编写如下文件 (use_niosii.qsf) 来定义引脚。

代码语言:javascript复制
set_location_assignment PIN_7 -to led[0];

set_location_assignment PIN_8 -to led[1];

set_location_assignment PIN_11 -to led[2];

set_location_assignment PIN_12 -to led[3];

set_location_assignment PIN_131 -to reset;

set_location_assignment PIN_153 -to clk;

//----------------the end of use_niosii.qsf ------------

这里我们要命的名字就是后面那部分,PIN_*是FPGA硬件上的引脚,查找电路图配好管脚后,执行TCL脚本文件。

2.7 设置编译选项并编译硬件系统

点击Quartus II 主窗口抬头下的命令Processing > Start Compilation,随即开始编译。

2.8 使用Nios II IDE建立用户程序

1)如何启动Nios II 软件开发环境来创建一个新的C/C 应用工程;

2)如何编写一个简单的由NiosII控制的LED闪光程序。

3)如何把编译后的软件代码下载到这个小系统中运行。

1)在SOPC Builder窗口的System Generation 子窗口,点击Nios II Tools框中的Nios II IDE 按钮,弹出如图的C/C NiosII IDE窗口,选择菜单栏File>Switch Workspace,随即弹出工作空间发起窗口,键入工作空间目录名,见图所示。

为Nios II 系统上运行的C程序创建一个工作空间。点击该窗口下面的OK按钮。

点击抬头栏下的命令:File > New Project.随即弹出如图所示的新软件项目窗口。

展开Altera Nios II 目录项选择Nios II C/C Application,然后点击该窗口下面的Next 按钮。

在该窗口中左下侧拉动滑标,选择软件程序的样板Hello World,并在该窗口的上部标有Name的框内填写:hello_led_0 作为这个软件项目的名。也就是说我们在sopc_led的工作目录下的software目录下又生成了一个新的名hello_led_0的目录用来存放自己编写的C程序。然后选择目标硬件,即把niosii_c.ptf 文件名填入如图所示的窗口中标有Select Target Hardware方框下的空格。程序运行的硬件环境是由 niosii_c.ptf 文件定义的,所以必须让集成软件开发环境(IDE)明确。点击该窗口下部的Next,又弹出一个窗口,让用户选择创建一个新的库还是用已经存在的库,如果是新创建的目录应该选择创建新的库。然后点击该窗口下部的Finish按钮。

代码区就是显示代码的,工程目录区是显示所有与工程有关系的文件,跟我们有关系有.C和.h文件,还有一个非常非常之重要的system.h文件。观察区中有两个栏我们是会经常用到的,一个是console,一个是problems。第一个是编译信息显示区,一个是错误警告显示区。有了JTAG UART后,第一个CONSOLE(控制台)栏多了一个用途,就是作为标准输出(stdout)的终端。

我们接下来的工作就是需要对工程配置一下。在工程目录区中的hello_led_0项单击鼠标右键后,点击红圈处的位置system library properties。

红圈1处是标准输入(stdin)、标准输出(stdout)、标准错误(stderr)设置区。

红圈2处,这个地方也不需要修改,不过有一个地方需要注意,就是Support C ,这个库相对Small C library要大,如果大家手中的板子没有FLASH,SDRAM这样大容量存储设备的话,选择Small C library,用FPGA内部的SRAM,也可以跑些小程序。

红圈3处,这个是一些有关内存的选项,我们构建了SDRAM模块,这个地方也用到了,默认就可以,不用修改。

红圈4了,点击红圈4后,出现下面界面,这个是对编译器就行配置的界面,大家可以自己观察一下,大部分都不需要修改,我们来看一下比较重要癿地方,点击红圈处。

一个是红圈1处,这个地方配置编译器的优化级别,红圈2的地方是调试级别。编译器的优化级别会让你的生成的代码更小,要求也越高,你的代码如果不严谨,有可能优化以后不好用了,大家要注意。调试级别是你在编译过程中显示编译内容多少,级别越高系显示内容的越多,建议将调试级别调到最高。

2)将程序 hello_led.c覆盖样板程序

代码语言:javascript复制
/********************************************************************
 *  hello_led.c 是一段可在最小NiosII系统上运行的软件程序。
 *  该程序通过4位并行PIO口,输出数据将分成两组(高2位一组,低2位一组)
 *  的8个发光二极管轮流地点亮和熄灭,不断地重复以上过程。
 * ***************************************************************/
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
int main (void) __attribute__ ((weak, alias ("alt_main")));
  /* 
   * Use alt_main as entry point for this free-standing application
   */
int alt_main (void)
{alt_u8 led = 0x0;
  alt_u32 i;
  while (1) 
  {  led = 0x0;  //4 bits all turn off
     IOWR_ALTERA_AVALON_PIO_DATA(PIO_4BIT_BASE, led);
     i = 0;
     while (i<1000000)     //delay for a while
       { i  ;}
     led = 0x3;   ///MSB 2 bits all turn off, but LSB 2 bits all turn on
     IOWR_ALTERA_AVALON_PIO_DATA(PIO_4BIT_BASE, led);
     i = 0;
     while (i<1000000)    //delay for a while
       { i  ; }
     led = 0xC;        //MSB 2 bits all turn on, but LSB 2 bits all turn off 
     IOWR_ALTERA_AVALON_PIO_DATA(PIO_4BIT_BASE, led); 
     i = 0;
     while (i<1000000)    //delay for a while
       { i  ;}               }
  return 0;
}

接下来编译,第一次的编译时间比较长,因为编译过程中会生成一个我们之前所说的一个非常非常重要的文件system.h,这个文件是根据我们构建的NIOS II软核产生的,也就是说,system.h的内容与软核的模块一一对应。一旦软核发生变化,就需要重新编译,重新产生system.h文件。现在就开始编译,如下图所示,在工程目录中单击右键后,点击红圈处Build Project,或者直接按快捷键Ctrl b。

system.h文件。

2.9 下载硬件设计到目标FPGA

利用JTAG下载。

2.10 调试/运行程序

对于NIOS IDE提供了几种方法来验证,一种是直接硬件在线仿真,一种是软件仿真。我们先说第一种硬件在线仿真,很显然这种方式需要硬件配合,一块开发板,一个仿真器(仿真器就是大家用的USB-BLASTER或者BYTE-BLASTER)。将仿真器与开发板的JTAG口相连(假设你的仿真器驱动已经装好了)。安装好以后,我们进行下面癿操作,点击红圈处Nios II Hardware。

软件仿真不需要硬件,电脑单独运行即可,按下图所示操作,点击红圈处,Nios II Insruction Set Simulator。

点击后,看看控制台,结果怎样?

不建议大家用软件仿真,因为软件仿真在不涉及到硬件的情况下还好,如果有相关硬件操作了,效果就没有了。

结合结果,可以非常容易地理解代码。通过一个while死循环来实现4位LED灯亮与灭的循环切换,输出到变量led不同的值(0x00,0x3,0xC)以得到想要的结果。

FPGA 之 SOPC 系列第二篇就到这里结束,明天继续带来第三篇,Nios II 体系结构相关内容。各位大侠,明天见!

END

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

0 人点赞