通过Quartus II实现Nios II编程

news2025/4/24 11:48:29

目录

    • 一、认识Nios II
    • 二、使用Quartus II 18.0Lite搭建Nios II硬件部分
    • 三、软件部分
    • 四、运行项目

一、认识Nios II

  1. Nios II软核处理器简介

Nios II是Altera公司推出的一款32位RISC嵌入式处理器,专门设计用于在FPGA上运行。作为软核处理器,Nios II可以通过硬件描述语言在FPGA内部实现,这使得它具有极高的灵活性和可定制性。Nios II处理器能够满足各种应用对32位嵌入式微处理器的需求,用户可以根据自己的系统需求选择合适的处理器型号,以达到性能和成本的最佳平衡。

  1. Nios II的特点和优势

Nios II处理器的最大特点是它是运行在FPGA上的软核处理器。与传统的硬核处理器相比,软核处理器可以根据需要进行裁剪和定制,提供了更大的灵活性。Nios II支持使用专用指令,允许用户增加硬件模块来执行复杂运算任务,从而为时序要求紧张的软件提供加速算法。此外,Nios II系列支持60多个外设选项,使得开发者能够选择合适的外设,获得最合适的处理器、外设和接口组合。

  1. Nios II系列的分类

Nios II系列包括三种产品型号:Nios II/f(快速)、Nios II/s(标准)和Nios II/e(经济)。这三种产品型号都具有32位处理器的基本结构单元,包括32位指令大小、32位数据和地址路径、32位通用寄存器和32个外部中断源。它们使用相同的指令集架构(ISA),并且100%二进制代码兼容,这意味着设计者可以根据系统需求的变化更改CPU型号,而不会影响已有的软件投入。

二、使用Quartus II 18.0Lite搭建Nios II硬件部分

  1. 新建一个名为Nios_II的项目文件。
    在这里插入图片描述

  2. 选择与DE2-115板子上相同型号的芯片EP4CE115F29C7并点击Finish完成配置。
    在这里插入图片描述

  3. 点击Plateform Designer,开始搭建硬件部分
    在这里插入图片描述

  4. 在左上角搜索框输入NIOS,单击选择Embedded目录下的Nios II Processor
    在这里插入图片描述

  5. 如果Quartus II是Lite版本的要把Nios II Core选为Nios II/e,因为Lite版本不支持高性能的Nios II,编译的时候会报错,若想使用Quartus需要标准版及以上版本,如果是标准及以上版本就可以选择NIos II/f。其余配置默认即可,点击Finish完成该部分配置。然后再将其更名为cpu。
    在这里插入图片描述
    在这里插入图片描述

  6. 添加JTAG_UART接口,选择Interface目录下的JTAG UART,配置默认即可,点击finish并更名为jtag_uart。
    在这里插入图片描述

  7. 配置片上存储器 On-Chip Memory,选择Basic目录下的On-Chip Memory,并将总存储大小改为40k,完成配置,然后改名为onchip_ram。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  8. 添加PIO接口,默认即可,更名为pio_led。
    在这里插入图片描述
    在这里插入图片描述

  9. 添加System ID,默认即可,更名为sysid。
    在这里插入图片描述
    在这里插入图片描述

  10. 根据下图进行连接,并在pio_led的external处添加名为out_led的输出端口。
    在这里插入图片描述

  11. 双击cpu在Vectors中进行如图配置,如果找不到onchip_ram.s1应该检查连线是否正确,点击System => Assign Base Address,使Base栏不出现重复的地址。点击File => Save保存该项目。
    在这里插入图片描述

  12. 点击Generate => Generate HDL开始生成,等待其生成完毕,关闭Plateform Designer。
    在这里插入图片描述

  13. 新建BDF(Block Diagram/Schematic File)文件,按照图中顺序添加kernel
    在这里插入图片描述
    在这里插入图片描述

  14. 右键单击kernel选择Generate Pins for Symbol Ports为其添加管脚。并将clk_clk管脚更名为clk,out_led_export[7:0]管脚更名为pio_led[7:0],reset_reset_n管脚更名为reset_n。
    在这里插入图片描述
    15.添加kernel.qip后保存bdf文件为Nios_II.bdf进行语法编译,芯片引脚设计保持默认即可。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  15. 点击Pin Planner,参考DE2-115管脚图开始配置管脚
    在这里插入图片描述
    在这里插入图片描述

  16. 完成针脚配置后关闭Pin Planner,完全编译项目,编译通过即表示硬件部分设计完成。
    在这里插入图片描述

三、软件部分

  1. 点击 Tools => Nios II Software Build Tools for Eclipse 打开 Nios II SBT for Eclipse,把默认目录更改到这个项目目录。
    在这里插入图片描述
  2. 创建新的软件应用,点击File => New => Nios II Application and BSP from Template。选择项目目录下的.sopcinfo文件,并将其命名为hello_led,点击finish开始生成Template。
    在这里插入图片描述

在这里插入图片描述

  1. 打开hello_led文件夹下单hello_world.c文件,并对.c文件内容进行更改以实现Console输出以及流水灯。
    在这里插入图片描述
    代码尚有不完善的地方,比如难以分辨新的输出语句“Hello from Nios II!\n",可在后面添加变量n加以分辨,原始代码如下:
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include <stdio.h>  // 新增标准输入输出头文件,用于printf

/*
 * "Hello World" example.
 *
 * This example prints 'Hello from Nios II' to the STDOUT stream. It runs on
 * the Nios II 'standard', 'full_featured', 'fast', and 'low_cost' example
 * designs. It runs with or without the MicroC/OS-II RTOS and requires a STDOUT
 * device in your system's hardware.
 * The memory footprint of this hosted application is ~69 kbytes by default
 * using the standard reference design.
 *
 * For a reduced footprint version of this template, and an explanation of how
 * to reduce the memory footprint for a given application, see the
 * "small_hello_world" template.
 *
 */

const alt_u8 led_data[8] = {0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF};

int main(void) {
    int count = 0;
    alt_u8 led;
    volatile int i;

    // 融合后的新增功能:打印Nios II启动信息
//    printf("Hello from Nios II!\n");

    while (1) {
        if (count == 7) {
            count = 0;
        } else {
            count++;
            printf("Hello from Nios II!\n");
        }

        led = led_data[count];
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);

        // 保留原有的延时逻辑
        i = 0;
        while (i < 500000) {
            i++;
        }
    }

    return 0;  // 理论上无法执行到这里,但保持代码完整性
}

应该修改的代码为此:

printf("Hello from Nios II!\n",n);

理论修改后的10个循环内的输出如下:

1 次:Hello from Nios II! 12 次:Hello from Nios II! 23 次:Hello from Nios II! 34 次:Hello from Nios II! 45 次:Hello from Nios II! 56 次:Hello from Nios II! 67 次:Hello from Nios II! 78 次:无输出(count 重置为 0,未执行 printf)
第 9 次:Hello from Nios II! 110 次:Hello from Nios II! 2

四、运行项目

  1. . 右键单击hello_led目录再单击Build Project ,完成编译后点击右上角的Nios II => Quartus Prime Programmer;点击Add File添加.sof文件,将其下载到DE2-115板子上,如果出现管脚连接错误,可能是SW19开关在PROG上,切换到RUN即可下载。

在这里插入图片描述

在这里插入图片描述

  1. 在Eclipss中点击右上角的Run => Run As Nios II Hardware;点击Target Connection => Refresh Connections出现接口即可先后按下Apply和Run开始运行项目。
    在这里插入图片描述
  2. 运行视频

studio_video_1745415137269

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2341436.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux/AndroidOS中进程间的通信线程间的同步 - IPC方式简介

前言 从来没有总结过Linux/Android系统中进程间的通信方式和线程间的同步方式&#xff0c;这个专栏就系统总结讨论一下。首先从标题可知&#xff0c;讨论问题的主体是进程和线程、通信和同步&#xff1b;在这里默认你理解进程和线程的区别。通信和同步有什么概念上的区别&…

Windows:注册表配置应用

0、简介 本篇博客记录一下&#xff0c;日常的系统注册表配置选项&#xff0c;以防再次遇到问题不知如何解决。 1、开机启动配置 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run :: 此位置存储了所有用户登录时需要启动的程序。 在该项下新建字符串值&#…

WebXR教学 05 项目3 太空飞船小游戏

准备工作 自动创建 package.json 文件 npm init -y 安装Three.js 3D 图形库&#xff0c;安装现代前端构建工具Vite&#xff08;用于开发/打包&#xff09; npm install three vite 启动 Vite 开发服务器&#xff08;推荐&#xff09;&#xff08;正式项目开发&#xff09; …

达梦统计信息收集情况检查

查询达梦某个对象上是否有统计信息 select id,T_TOTAL,N_SMAPLE,N_DISTINCT,N_NULL,BLEVEL,N_LEAF_PAGES,N_LEAF_USED_PAGES,LAST_GATHERED from sysstats where id IN (select id from sysobjects where upper(name)upper(&objname));可能有系统对象&#xff0c;可以增加…

【matlab】气泡图的应用

【matlab】气泡图的应用 .rtcContent { padding: 30px; } .lineNode {font-size: 12pt; font-family: "Times New Roman", Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-weight: normal; } clear load zb_equi.mat load …

飞帆控件:在编辑模式下额外加载的库

飞帆是一个自由的控件设计平台。在飞帆中&#xff0c;我们可以很方便地创建基于 Vue 2 组件的控件&#xff0c;并使用控件来搭建网页。 他山之石&#xff0c;可以攻玉。在创建控件中&#xff0c;使用 js 、css 依赖库能让我们的控件更强大。 有些时候&#xff0c;在编辑模式下…

Super-Vlan和MUX-Vlan的原理、配置、区别

Super-Vlan 原理 Super-Vlan也叫Aggregate-Vlan。 一般的三层交换机中&#xff0c;通常是采用一个VLAN对应一个vlanif接口的方式实现广播域之间的互通&#xff0c;这在某些情况下导致了IP地址的浪费。因为一个VLAN对应的子网中&#xff0c;子网号、子网定向广播地址、子网缺…

el-table怎么显示 特殊单元格的值

1. 在 el-table-column 上绑定了 formatter 方法 formatEntityName &#xff0c;它会对每一行该列的数据&#xff08; cellValue &#xff09;进行处理。 2. 在 formatEntityName 方法中&#xff0c;尝试对传入的 cellValue 进行 JSON.parse 操作&#xff0c;并根…

2025-04-23 Python深度学习3——Tensor

文章目录 1 张量1.1 数学定义1.2 PyTorch中的张量 2 创建 Tensor2.1 直接创建**torch.tensor()****torch.from_numpy()** 2.2 依据数值创建**torch.zeros() / torch.zeros_like()****torch.ones() / torch.ones_like()****torch.full() / torch.full_like()****torch.arange() …

在统信UOS/麒麟Kylin OS操作系统中配置APT和GIT代理

在统信UOS/麒麟Kylin OS操作系统中配置APT和GIT代理 在内网环境中&#xff0c;直接访问外部资源可能会受到限制&#xff0c;这时候配置APT和GIT的代理就显得尤为重要。本文将详细介绍如何在统信UOS和麒麟Kylin OS操作系统中配置APT和GIT的代理。 为什么需要配置APT和GIT代理&…

第十七讲、Isaaclab中使用操作空间控制器

0 前言 官方教程&#xff1a;https://isaac-sim.github.io/IsaacLab/main/source/tutorials/05_controllers/run_osc.html IsaacsimIsaaclab安装&#xff1a;https://blog.csdn.net/m0_47719040/article/details/146389391?spm1001.2014.3001.5502 有时候&#xff0c;仅使用…

基于SpringBoot的校园二手商品在线交易系统+含项目运行说明文档

基于SpringBoot的校园二手商品在线交易系统含项目运行说明文档 专注校园二手交易平台是一个基于Java的在线市场&#xff0c;专为学生设计&#xff0c;便于买卖二手商品。平台提供全面的用户管理功能&#xff0c;包括学生、管理员和二手商品卖家账户管理。商品管理功能允许用户…

详解springcloud gateway工作原理、断言、filter、uri、id、全局跨域、globalfilter等以及关键源码实现

1.gateway概念 网关就是当前微服务项目的"统一入口"程序中的网关就是当前微服务项目对外界开放的统一入口所有外界的请求都需要先经过网关才能访问到我们的程序提供了统一入口之后,方便对所有请求进行统一的检查和管理 2. 网关的主要功能 将所有请求统一经过网关网…

C++面向对象特性之继承篇

C语音是面向过程的语言&#xff0c;而C在其之上多了面向对象的特性&#xff0c;面向对象三大特性:封装性、继承性、多态性。今天主包来讲讲自己学到的关于C继承特性的知识。 一、继承是什么 继承是提高代码复用的一种重要手段。正如C的模版、泛型编程等等都是为了实现代码复用…

【AI News | 20250423】每日AI进展

AI Repos 1、suna Suna是一款完全开源的AI助手&#xff0c;旨在通过自然对话帮助用户轻松完成现实世界的任务。它作为您的数字伙伴&#xff0c;提供研究、数据分析和日常问题解决等功能&#xff0c;并结合强大的能力与直观的界面&#xff0c;理解您的需求并交付成果。Suna的工…

【学习准备】算法和开发知识大纲

1 缘起 今年&#xff08;2025年&#xff09;的职业升级结果&#xff1a;不通过。没办法升职加薪了。 需要开始完善学习&#xff0c;以应对不同的发展趋势&#xff0c;为了督促自己学习&#xff0c;梳理出相关学习大纲。 分为算法和开发两部分。 算法&#xff0c;包括基础算法和…

第七篇:linux之基本权限、进程管理、系统服务

第七篇&#xff1a;linux之基本权限、进程管理、系统服务 文章目录 第七篇&#xff1a;linux之基本权限、进程管理、系统服务一、基本权限1、什么是权限&#xff1f;2、为什么要有权限&#xff1f;3、权限与用户之间的关系&#xff1f;4、权限对应的数字含义5、使用chmod设定权…

爬虫案例-爬取某企数据

文章目录 1、准备要爬取企业名称数据表2、爬取代码3、查看效果 1、准备要爬取企业名称数据表 企业名称绍兴市袍江王新国家庭农场绍兴市郑杜粮油专业合作社绍兴市越城区兴华家庭农场绍兴市越城区锐意家庭农场绍兴市越城区青甸畈家庭农场绍兴市袍江王新国家庭农场绍兴市袍江月明…

学习笔记—C++—string(一)

目录 string 为什么学习string的类 string类的常用接口 string类对象的常见构造 string类对象的访问及遍历操作 operator[] 迭代器 范围for auto 迭代器&#xff08;二&#xff09; string类对象的容量操作 size,length,max_size,capacity,clear基本用法 reserve 提…

GPLT-2025年第十届团体程序设计天梯赛总决赛题解(共计266分)

今天偶然发现天梯赛的代码还保存着&#xff0c;于是决定写下这篇题解&#xff0c;也算是复盘一下了 L1本来是打算写的稳妥点&#xff0c;最后在L1-6又想省时间&#xff0c;又忘记了insert&#xff0c;replace这些方法怎么用&#xff0c;也不想花时间写一个文件测试&#xff0c…