基于DE1-SOC的Nios V工程——my_first_niosv

Doreen的FPGA自留地 / 2024-04-24 / 原文

本教程演示如何在DE1-SOC开发板上创建一个基于FPGA的SOPC系统,并在系统上运行Nios V软件工程。具体会使用Quartus软件中的Platform Designer系统集成工具创建一个基于Nios V的FPGA硬件系统工程,将sof编程文件下载到FPGA 中,然后使用Quartus软件中的Nios V软件工具创建Nios v软件工程——my_first_niosv,最后将.elf可执行文件下载到DE1-SOC开发板观察执行结果。

一、Nios V简介

Nios V处理器系统相当于一个微控制器(或“芯片级计算机”),其中包括处理器以及单芯片上的外设和内存组合。Nios®V处理器系统由一个Nios V处理器内核、一组片内外设、片内存储器和片外存储器的接口组成,所有这些都集成在Intel FPGA芯片上进行实现。与微控制器类似,所有的Nios V处理器系统都使用一致的指令集和编程模型。

目前Intel推出了三款Nios® V处理器(图片来自Intel 官网):

 (点击图可放大)
 

 从截图可以看到这里面功能最强的是Nios V/g IP,用户可根据实际需求选择对应的软核。不过对于Cyclone V器件目前只支持Nios V/m软核。Agilex V等器件则支持以上三种软核。

 Nios V/m处理器性能

Nios®V/m处理器是Intel基于RISC-V指令集开发的微控制器核心。

Nios®V/m处理器支持两种不同的配置:

  1. 流水线
  • 应用RV32IZicsr指令集。
  • 支持五阶段流水线数据通路。

  2. 非流水线

  • 应用RV32IZicsr指令集。
  • 支持非流水线数据通路。

 

截图来自Nios® V 嵌入式处理器设计手册:

 

 

二、开发工具下载

目前Quartus22.1及以上版本都支持Nios V了,但不是每个高版本都支持Cyclone V器件,比如23.4版本就不支持Cyclone V器件,它支持Agilex V器件,且支持以上三种Nios V IP。

22.1.2是支持Cyclone V器件的,所以本文以22.1.2版本为例进行操作演示。

1. Quartus Prime v22.1.2 Standard Edition下载链接:https://www.intel.com/content/www/us/en/software-kit/785052/intel-quartus-prime-standard-edition-design-software-version-22-1-2-for-windows.html

2. Quartus以及Nios® V/m Embedded Processor的license,在Intel [Self Service Licensing Center]可免费申请,申请步骤可参考链接(点击跳转),使用期限是90天。

3. 设置license环境变量。将Intel发送过来的license文件保存到本地盘,然后将其具体路径添加到计算机的环境变量窗口。

 同时,也在Quartus工具中点击菜单Tools——License setup设置license文件路径:

三、SOPC开发流程

在Quartus Prime完成嵌入式系统的硬件部分

在Nios SBT中完成让Nios II CPU 可以运行的软件部分

接着分别下载硬件的可配置文件(de10nano_prj.sof)和软件可执行程序(hello_world.elf),让这个定制的CPU嵌入式系统将“Hello from Nios II!"字符串通过JTAG UART传输到PC上,并在Nios SBT软件下的Nios II Console进行打印显示

 

四、Quartus工程设计

系统组成

本教程首先在FPGA里会定制一个包含Nios V处理器、On-Chip Memory、JTAG UART和PIO的嵌入式系统。这个系统中使用的Nios V核是整个系统的核心,其他组件都会通过Avalon总线连接到这个系统核心上。

Clock Source:时钟源组件,提供时钟信号,驱动其他组件。

On-Chip Memory (RAM or ROM) Intel FPGA IP:Intel FPGA包含了可以在Platform Designer系统中当作RAM或ROM使用的片上存储器。片上存储器有以下优势:与片外存储器相比,片上存储器的访问时间更快;Platform Designer自动例化片上存储器,不需要进行任何手动连接; FPGA上电时,某些存储块可具有初始化的内容,这一特性在存储数据常量或处理器引导代码时很重要;片上存储器支持双端口访问,允许两个主设备同时访问同一内存;有RAM和ROM之分,容量大小不超过FPGA最大可用容量。

JTAG UART IP:是PC与FPGA通信电缆的控制台。PC可以将数据通过JTAG电缆传输到FPGA,也能将FPGA产生的数据回传到PC。

PIO(Parallel I/O) Intel FPGA IP :该IP是具有Avalon接口的并行输入/输出(parallel input/output)核,在Avalon存储器映射(Avalon Memory-Mapped Avalon-MM)从端口和通用I/O端口之间提供了一个存储器映射接口。I/O端口既可以连接片上用户逻辑,也可以连接到FPGA与外设连接的I/O引脚。每个PIO核可以提供最多32个I/O端口。像微处理器这样的智能主机通过读/写寄存器映射的Avalon-MM接口控制PIO端口。在主机控制下,PIO核捕获输入端口的数据,并驱动数据到输出端口。当PIO端口直接与I/O引脚相连时,主机通过写PIO核中的控制寄存器对I/O引脚进行三态控制。

详细步骤

1. 点击菜单File——New Project Wizard——Next:

 

2. 在桌面创建一个my_first_niosv的文件夹,并将工程路径指向这里,且工程的名称也命名为my_first_niosv:

 

3. 连续点击3次Next得到如下界面,通过器件过滤器筛选找到DE1-SoC的Cyclone V 5CSEMA5F31C6器件:

 

4. 最后点击Next和Finish完成工程创建。

5.点击Platform Designer 图标打开qsys系统界面:

 

6. 在IP Catalog搜索NiosV,双击Nios V/m Processor Intel FPGA IP以添加此IP到qsys系统,暂时保持默认参数设置不变,直接点击Finish。

 

7. 用同样的方法搜索并添加On-Chip Memory (RAM or ROM) Intel FPGA IP,Total Memory Size修改为131072,其余参数不变。

 

 

 8. 继续搜索并添加JTAG UART Intel FPGA IP到系统,默认参数设置不变。

 

 9. 搜索添加PIO (Parallel I/O) Intel FPGA IP,Width改为10,Direction为Output:

 

10. 按下图所示连接各IP,重命名IP,并将LED PIO导出。

 

 11. 修改Nios V/m IP的参数设置,勾选Enable Reset from Debug Module,Reset Agent选择SRAM.s1

 

 

12.点击Platform Designer的菜单System—— Assign Base Addresses,点击Finish保存命名为niosv.qsys。

 

 

14. 这时Message栏会出现错误提示,请将My_NiosV的reset信号和ndm_reset_in信号与系统所有rest信号连接起来。最后点击Generate HDL生成qsys文件。

 

 

 

13. 创建my_first_niosv.v顶层文件,输入以下代码:

module my_first_niosv
(
    CLOCK_50,
    LEDR
);

input          CLOCK_50;
output [9:0]   LEDR;


    niosv u0 (
        .clk_clk                        (CLOCK_50),   //clk.clk
        .led_external_connection_export (LEDR)  // led_external_connection.export
    );
     
endmodule    

 

14. 点击Analysis & Synthesis进行综合与分析,完成后再按DE1-SoC开发板的相关引脚进行引脚分配。

 

15. 最后再编译Quartus工程,生成.sof文件。

 

四、创建Nios V 软件工程

 

五、下板测试

a'a