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

文章目录

  • 一、创建工程
  • 二、系统设计
      • [1. 在 "component library" 标签栏中找到 "Nios II Processor" 后点击 Add](#1. 在 “component library” 标签栏中找到 “Nios II Processor” 后点击 Add)
      • [2. 在 "Component Library" 标签栏中的查找窗口输入 jtag 找到 "JTAG UART ",然后点击 Add](#2. 在 ”Component Library” 标签栏中的查找窗口输入 jtag 找到 ”JTAG UART ”,然后点击 Add)
      • [3. 添加片上存储器 On-Chip Memory(RAM)核](#3. 添加片上存储器 On-Chip Memory(RAM)核)
      • [4. 查找窗口输入 pio 找到 "PIO" 后点击Add](#4. 查找窗口输入 pio 找到 ”PIO” 后点击Add)
      • [5. 添加片 System ID Peripheral 核](#5. 添加片 System ID Peripheral 核)
      • [6. 后续工作](#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 中的程序修改为流水灯控制程序
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中的代码,改为

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

相关推荐
apple_ttt33 分钟前
从零开始讲PCIe(9)——PCIe总线体系结构
fpga开发·fpga·pcie
Little Tian4 小时前
信号用wire类型还是reg类型定义
fpga开发
apple_ttt1 天前
从零开始讲PCIe(6)——PCI-X概述
fpga开发·fpga·pcie
水饺编程1 天前
【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,1-2
linux·嵌入式硬件·fpga开发
apple_ttt1 天前
从零开始讲PCIe(5)——66MHZ的PCI总线与其限制
fpga开发·fpga·pcie
最好有梦想~1 天前
FPGA时序分析和约束学习笔记(2、FPGA时序传输模型)
fpga开发
IM_DALLA1 天前
【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL76
学习·fpga开发
诚实可靠小郎君95271 天前
FPGA IO延迟的约束与脚本
fpga开发·fpga·数字电路
GGGLF2 天前
FPGA-UART串口接收模块的理解
fpga开发
北京太速科技股份有限公司2 天前
太速科技-495-定制化仪器户外便携式手提触摸一体机
fpga开发