Quartus 入门 —— Nios II HelloWorld

Quartus 入门 —— Nios II

实验目的

  • 学习 Quartus Prime 、Platform Designer、Nios II SBT 的基本操作;

  • 初步了解 SOPC 的开发流程,基本掌握 Nios II 软核的定制方法;

  • 掌握 Nios II 软件的开发流程,软件的基本调式方法。

实验内容

  1. 在DE2-115开发板上分别用Verilog和Nios软件编程两种方式完成LED流水灯显示,理解两种方式的差异

  2. 用Nios软件编程通过DE2-115开发板串口输出“Hello Nios-II”字符到笔记本电脑串口助手

Qsys 系统设计

这里创建项目与前面一样的,我就直接跳过,如果不会创建项目的可以去看我前面的项目,这里我们直接创建一个 Qsys 项目


这里显示 success 我们就已经创建好了我们需要的内容,然后我们需要编辑我们所使用的时钟,这里默认设置为 50MHz 即可


添加 Nios II

这里我们需要添加一个 Niso II 32-bit 的 CPU 核作为我们后面使用的主 CPU

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

在 Nios Core 栏中选择 Nios II/f 选项,其他保持默认选项

配置内容修改如下


然后重命名我们刚添加的 CPU 为 CPU


进行如下对应连线




添加 JTAG

jtag uart 接口是 Nios II 嵌入式处理器新添加的接口元件,通过内嵌在 Intel FPGA 内部的 JTAG 电路,可以实现在 PC 主机与 Qsys 系统之间进行串行字符流通信

保持默认设置即可

jtag-uart_0 重命名为 jtag-uart

进行一一对应的连线如图:

添加 RAM 核

在左侧 ”Component Library” 标签栏中的查找窗口输入 On Chip 找到 ”On-Chip Memory(RAM or ROM)” 后点击 Add

在 ”Size” 栏中的 ”Total memory size” 窗口中输入 40960(即片上内存的大小为 40KB),其余选项保持默认,点击 Finish

返回 ”System Contents” 标签栏可以看到新加入的 ”On-Chip Memory” 核。在 ”Name” 列中将 onchip_memory2_0 改名为 onchip_ram

进行一一对应的连线如图:

添加 PIO 接口

在左侧 ”Component Library” 标签栏中的查找窗口输入 pio 找到 ”PIO” 后点击Add

确定以下选项:Width 为 8bits,Direction 选择 output,其余选项保持默认

下面需要修改名称

进行一一对应的连线如图:

添加 System ID Peripheral 核

在左侧 ”Component Library” 标签栏中的查找窗口输入 sys 找到 ” System ID Peripheral” 后点击 Add

保持默认选项,单击 Finish

返回 ”System Contents” 标签栏可以看到新加入的 ” System ID Peripheral” 核。在 ”Name” 列中将 sysid_qsys_0 改名为 sysid

进行一一对应的连线如图:

完成 Qsys 设计的后续工作

基地址分配

分配中断号

在 ”IRQ” 标签栏下点选 ”Avalon_jtag_slave” 和 IRQ 的连接点就会为 ”jtag_uart” 核添加一个值为 0 的中断号

指定 NIos II 的复位和异常地址

首先我们需要连接剩余的几条线

连线如下:

然后我们需要在 ” System ID Peripheral” 核中绑定我们的 ”On-Chip Memory(RAM or ROM)” 作为输出

这里我们检查所有的连接如下:

连接所有复位端口


生成 Qsys 系统

点选 ”Generation HDL” 标签栏中 Generate 按钮生成 Qsys 系统,保存文件




到此我们的 Qsys 系统设计就已经完成了

逻辑连接

配置原理图

这里我们直接引用我们刚刚保存 Qsys 后自动生成的原理图



这里我们添加保存 Qsys 时生成的 qip 文件


逻辑连接并生成管脚

这里我们采用自动生成并连接逻辑引脚

芯片引脚设置






软件设计

这里我们需要创建一个 Nios II 的项目


或者

这里我们推荐使用一个新路径

这里创建并选择我们要使用的模板



完全创建成功之后,我们直接修改 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++;
		printf("Hello world!\n");
	}
	return 0;
}

下面我们保存运行并生成 BSP 文件即可



posted @ 2023-04-05 13:28  ppqppl  阅读(366)  评论(0编辑  收藏  举报