实验任务: 在DE2-115开发板上分别用Verilog和Nios软件编程两种方式完成LED流水灯显示,理解两种方式的差异; 用Nios软件编程通过DE2-115开发板串口输出“Hello Nios-II”字符到笔记本电脑串口助手。
NiosII实现hello world
设置系统时钟
添加Nios II Processor,然后在搜索框中,输入nio,找到Nios II Processor,点击Add
添加On_Chip Memory,然后在搜索框中,输入on_chip,找到On_Chip Memory,点击Add
JTAG UART的添加,然后在搜索框中,输入jtag,找到JTAG UART,点击Add
System ID Peripheral的添加,在搜索框中,输入sys,找到System ID Peripheral,点击Add
IP核的连接
对Reset Vector和Exception Vector的设置,设置完成后,选择Finish
系统分配地址,然后选择System->Assign Base Address,选择Generate->Generate,保持默认设置,点击Generate,选择Save,然后保存文件,关闭Qsys。
创建顶层文件,回到Quarters,选择New->Verilog HDL File
module hello_world(
input clk,
input reset_n
);
system_qsys u_qsys (
.clk_clk (clk), // clk.clk
.reset_reset_n (reset_n) // reset.reset_n
);
endmodule
软件设计
打开Nios II Software Build Tools for Eclipse
创建文件
File->New->Nios II Application and BSP from Template
打开hello_world中的.c文件
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
点击保存,选择hello_wold_bsp,右键后,选择Nios II中的Generate BSP
硬件的下载
软件的下载
最终结果
1.PIO的相关介绍
PIO IP核:Avalon-MM从端口和通用I/O端口提供了一个存储器映射(memory-mapped)接口。
用户逻辑或外围器件提供了简单的I/O控制
例如控制LED灯,获取按键的电平变化信息,控制显示设备,与片外器件通信(SPI,I2C)
寄存器
实现流水灯
添加其他IP核,添加PIO,然后在搜索框上输入pio,选择PIO(Parallel I/O),点击Add
点击finish,保持默认设置,连接时钟和复位
设置led的输出
创建顶层文件,回到Quarters,选择New->Verilog HDL File,顶层文件内容
module hello_world(
input clk,
input reset_n,
output [3:0] led
);
system_qsys u0 (
.clk_clk (clk), // clk.clk
.reset_reset_n (reset_n), // reset.reset_n
.led_export (led) // led.export
);
endmodule
软件设计
#include <stdio.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
const alt_u8
led_data[4]={0x01,0x03,0x07,0x0F};
int main (void) {
int count=0;
alt_u8 led;
volatile int i;
while (1)
{
if (count==4)
{
count=0;
}
else
{
count++;
}
led=led_data[count];
IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, led);
//延时的设置
i = 0;
while (i<5000000)
i++;
}
return 0;
}
点击保存,选择hello_wold_bsp,右键后,选择Nios II中的Generate BSP,编译应用文件,选择hello_world右键后,点击Build Project
硬件和软件下载