基于NIOS-II软核流水灯和串口通信实现

2024-05-15 18:12

本文主要是介绍基于NIOS-II软核流水灯和串口通信实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、创建工程
  • 二、系统设计
      • 1. 在 “component library” 标签栏中找到 “Nios II Processor” 后点击 Add
      • 2. 在 ”Component Library” 标签栏中的查找窗口输入 jtag 找到 ”JTAG UART ”,然后点击 Add
      • 3. 添加片上存储器 On-Chip Memory(RAM)核
      • 4. 查找窗口输入 pio 找到 ”PIO” 后点击Add
      • 5. 添加片 System ID Peripheral 核
      • 6. 后续工作
  • 三、基于NIOS-II软核流水灯实现
  • 四、运行流水灯项目
  • 五、串口通信
  • 六、参考文章

一、创建工程

在这里插入图片描述
接着一路next

二、系统设计

  • 打开platform designer
  • 启动 Qsys 后,点击 File —> save,在文件名中填写为 kernel,后点击 OK
    在这里插入图片描述
  • 鼠标放在 clk_0 处点击右键 Edit 或是双击 clk_0 元件,对 Clock 进行时钟设置,设为为 50M
    在这里插入图片描述
  • 添加 CPU 和外围器件

1. 在 “component library” 标签栏中找到 “Nios II Processor” 后点击 Add

在这里插入图片描述
- 在 Nios Core 栏中选择 Nios II/f 选项,其他保持默认选项
- 将 nios2_qsys_0 重命名为 cpu,点击 ”Rename” 即可重新命名
- 将 cpu 的 clk 和 reste_n 分别与系统时钟 clk_0 的 clk 和 clk_reset 相连
在这里插入图片描述

2. 在 ”Component Library” 标签栏中的查找窗口输入 jtag 找到 ”JTAG UART ”,然后点击 Add

在这里插入图片描述
- 在 ”Name” 列中将 jtag_uart_0 重命名为 jtag_uart。
- 连线,进行 clk、reset 以及 master-slave 的连线,进行中断 irq 连线
在这里插入图片描述

3. 添加片上存储器 On-Chip Memory(RAM)核

在左侧 ”Component Library” 标签栏中的查找窗口输入 On Chip 找到 ”On-Chip Memory(RAM or ROM)” 后点击 Add,修改size如图中的大小。在这里插入图片描述
- 将 onchip_memory2_0 改名为 onchip_ram
- 进行时钟、数据端口、指令端口的连接
在这里插入图片描述

4. 查找窗口输入 pio 找到 ”PIO” 后点击Add

确定以下选项:Width 为 8bits,Direction 选择 output,其余选项保持默认,点击Finish。
在这里插入图片描述
- 返回 ”System Contents” 标签栏可以看到新加入的 ”PIO” 核。在 ”Name” 列中将pio_0 改名为 pio_led。并在在 Export 栏处双击,把输出口引出来,并命名为 out_led。
- 进行时钟、数据端口、指令端口的连接
在这里插入图片描述

5. 添加片 System ID Peripheral 核

  • 在左侧 ”Component Library” 标签栏中的查找窗口输入 sys 找到 ” System ID Peripheral” 后点击 Add,保持默认选项,单击 Finish。
  • 将 sysid_qsys_0 改名为 sysid
  • 进行时钟、数据端口的连接
    在这里插入图片描述
    所有的连线如图所示
    在这里插入图片描述

6. 后续工作

  • 基地址分配:点击 Qsys 主界面菜单栏中的 ”System” 下的 ”Assign Base Addresses”。
    在这里插入图片描述
  • 分配中断号:在 ”IRQ” 标签栏下点选 ”Avalon_jtag_slave” 和 IRQ 的连接点就会为 ”jtag_uart” 核添加一个值为 0 的中断号。
    在这里插入图片描述
  • 指定 NIos II 的复位和异常地址:从 ”System Contents” 标签栏双击建立好的 cpu 进入 Nios II Processor 的配置界面,配置 Reset Vector 和 Exception Vector 为 ”onchip_ram.s1”,点击 Finish。
    在这里插入图片描述
  • 点击 Qsys 主界面菜单栏中的 ”System” 下的 ”Create Global Reset Network”。完成后会自动连接所有复位端口
  • 生成 Qsys 系统:点选 ”Generation HDL” 标签栏中 Generate 按钮生成 Qsys 系统

在这里插入图片描述

  • 在 Quartus-II 中新建一个原理图,然后在该原理图(BDF)文件中添加 Qsys 生成的系统符号
    在这里插入图片描述
  • 点击 Assignments-Settings,添加 kernel.qip 文件
    在这里插入图片描述
  • 进行逻辑连接和生成管脚,在 kernel 模块内点击鼠标右键选取 Generate Pin for Symbol Ports 生成管脚
    在这里插入图片描述
  • 菜单里选择 Assignments-device,然后如下图所示点击 Device pin options
    在这里插入图片描述
  • 进行 unused pin 设置,可能会收到外部信号的干扰,将未用引脚设置为 As
    在这里插入图片描述
  • 编译工程
  • 绑定引脚
    在这里插入图片描述
    完成后关闭 Pin Planner,回到 Quartus Prime 主界面后再次编译项目。

三、基于NIOS-II软核流水灯实现

  1. 在 Quartus-II 界面,点击Tools,然后点击 Nios II Software Build Tools for Eclipse 打开 Nios II SBT for Eclipse
  2. 启动 Workspace 选择当前的项目目录,点 OK
  3. 创建工程
    在这里插入图片描述
    在 ”SOPC Information File name” 窗口中选择 kernel.sopcinfo 文件,以便将生成硬件配置信息和软件应用关联,CPU 栏会自动选择”CPU”。在 ”Project name” 输入 ”helloWorld” ,Project template选择 Hello World。
    在这里插入图片描述
  • 将 hello_world.c 中的程序修改为流水灯控制程序
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
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;while (1){if (count==7){count=0;}else{count++;}led=led_data[count];IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);i = 0;while (i<500000)i++;}return 0;
}

右键单击项目名称,在弹出的菜单中选择 Build Project
在这里插入图片描述

四、运行流水灯项目

  • 启动下载硬件代码在这里插入图片描述
  • 运行/调试程序,在菜单栏中选择 Run →Run Configurations
  • 配置 Run Configurations,转到 ”Target Connection” 标签栏,点击右侧的 Refresh Connections 将 USB-Blaster 加入
    在这里插入图片描述
  • 运行结果

在这里插入图片描述

五、串口通信

实现DE2-115开发板串口输出“Hello Nios-II”字符到笔记本电脑

只需要在这个项目的基础上修改hello_world.c中的代码,改为

#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "stdio.h"
const alt_u8
led_data[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int main (void)
{int count=0;alt_u8 led;volatile int i;while (1){ if (count==7){count=0;}else{count++;}led=led_data[count];IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);i = 0;printf("Hello Nios-II\n");while (i<500000)i++;}return 0;
}

再按照之前的方法烧录运行即可
运行结果:
串口

六、参考文章

软核烧录时遇到报错参考的这篇文章:
链接: NIOS Ⅱ开发常见问题

这篇关于基于NIOS-II软核流水灯和串口通信实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992553

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal