基于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 Ⅱ开发常见问题

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scrapy爬虫:利用代理服务器爬取热门网站数据

在当今数字化时代&#xff0c;互联网上充斥着大量宝贵的数据资源&#xff0c;而爬虫技术作为一种高效获取网络数据的方式&#xff0c;受到了广泛的关注和应用。本文将介绍如何使用Scrapy爬虫框架&#xff0c;结合代理服务器&#xff0c;实现对热门网站数据的高效爬取&#xff0…

如何去掉图片背景改成透明的?一键图片去底色工具推荐

如何去掉图片背景改成透明的&#xff1f;在很多比较特殊的场景中&#xff0c;我们需要把图片背景底色去除后再进行使用&#xff0c;比如一些商品展示图或者是网页设计中的一些logo图标&#xff0c;专业人士会直接选择使用ps来处理&#xff0c;但是也有许多新手小白不知道怎么去…

智慧公厕的未来价值分析和创新设计

智慧公厕正在逐渐成为现代城市建设的重要组成部分。通过全面的数据云端化和自动化技术&#xff0c;智慧公厕实现了高效的数据分析和协作&#xff0c;提升了运行效率和管理水平。未来&#xff0c;智慧公厕将以“景厕融合”的目标发展&#xff0c;结合前沿科技和创新设计&#xf…

SL3038 48V/60V电动车里程增程器电源驱动芯片 大电流3A

在电动车领域中&#xff0c;电池续航能力一直是制约其广泛应用的关键因素之一。为了提高电动车的续航能力和使用效率&#xff0c;各大厂商纷纷投入研发&#xff0c;寻求更为先进的电源驱动芯片解决方案。其中&#xff0c;SL3038 48V/60V电动车里程增程器电源驱动芯片以其卓越的…

【HarmonyOS】Stage 模型 - 应用配置文件

如图所示&#xff1a; Stage 模型应用配置文件主要有两类&#xff1a; 全局配置文件。放在 AppScope 目录下&#xff0c;app.json5。用来配置应用全局的信息。模块配置文件&#xff0c;放在每个模块里&#xff0c;module.json5。用来配置模块的信息。 一、全局配置文件 示…

10G UDP协议栈 IP层设计-(6)IP TX模块

一、模块功能 1、上层数据封装IP报文头部 2、计算首部校验和 二、首部校验和计算方法 在发送方&#xff0c;先把IP数据报首部划分为许多16位字的序列&#xff0c;并把检验和字段置零。用反码算术运算把所有16位字相加后&#xff0c;将得到的和的反码写入检验和字段。接收方收…

图片标签 以及 常见的图片的格式

1.图片的基本使用 2.图片的常见格式 3.bmp格式

24点游戏679

题目描述&#xff1a; 给定一个长度为4的整数数组 cards 。你有 4 张卡片&#xff0c;每张卡片上都包含一个范围在 [1,9] 的 数字。您应该使用运算符 [, -, *, /] 和括号 ( 和 ) 将这些卡片上的数字排 列成数学表达式&#xff0c;以获得值24。你须遵守以下规则: &#xff08;1&…

css实现围绕中心进行圆形旋转

效果如下 通过css animation属性能实现以上效果 先试用定位&#xff0c;将每一项设置一个初始位置 {cursor: pointer;left: 50%;width: 144px;height: 144px;display: flex;align-items: center;justify-content: center;margin-left: -72px;top: 228px;position: absolute;a…

莆田市C++专项选拔第二轮题4

题4&#xff1a;变换阵型 【题目描述】 盛隆同学刚学完C的二维数组和函数部分&#xff0c;于是他自己写了2个函数对二维数组进行练习。两个函数如下&#xff1a; int n, a[1005][1005]; // 注意&#xff0c;这里的n和数组a是全局变量 void f1() {for (int i 1; i < n; i)…

Docker下载镜像出现“missing signature key”如何解决?

“missing signature key” 通常与 Docker 配置有关&#xff0c;具体是 Docker 试图验证镜像的签名但未能找到相应的密钥。这种情况可能发生在启用了 Docker Content Trust (DCT) 的环境中&#xff0c;DCT 是一种安全功能&#xff0c;要求所有镜像必须有签名才能拉取。 原因 …

【Flutter】极光推送配置流程(VIVO/OPPO/荣耀厂商通道) 章三

相关文章 推送配置共三篇(如下链接) 【Flutter】极光推送配置流程(极光通道/华为厂商/IOS) 章一 【Flutter】极光推送配置流程(小米厂商通道) 章二 【Flutter】极光推送配置流程(VIVO/OPPO/荣耀厂商通道) 章三 前言 很高兴大家来看小编写的文章&#xff5e;&#xff5e; 继【…