赞
踩
在DE2-115开发板上分别用 Verilog和 Nios软件编程两种方式完成LED流水灯显示,理解两种方式的差异;
分别用Verilog和Nios软件编程, 实现DE2-115开发板串口输出“Hello Nios-II”字符到笔记本电脑串口助手。
硬件:PC 机、DE2-115 FPGA 实验开发平台;
软件:Quartus Prime 18.1、Platform Designer、Nios II SBT
使用 FPGA 资源搭建一个简单 Nios II 处理器系统,具体包括:
(1) 在 Quartus Prime 中建立一个工程;
(2) 使用 PD 建立并生成一个简单的基于 Nios II 的硬件系统;
(3) 在 Quartus Prime 工程中编译基于 Nios II 的硬件系统并生成配置文件.sof;
(4) 在 Nios II SBT 中建立对应硬件系统的用户 C/C++工程,编写一简单用户程序,在
Nios II SBT 中编译程序生成可执行文件.elf;
(5) 将配置文件.sof 和可执行文件.elf 都下载到 FPGA 进行调试运行。
2004年,Altera 正式推出了Nios II系列32位RISC嵌入式处理器。Nios II系列软核处理器是Altera的第二代FPGA嵌入式处理器,其性能超过200DMIPS,在Altera FPGA中实现仅需35美分。Altera的Stratix 、Stratix GX、 Stratix II和 Cyclone系列FPGA全面支持Nios II处理器,以后推出的FPGA器件也将支持Nios II。
Nios II包括3种产品,分别是:Nios Ⅱ/f(快速)——最高的系统性能,中等FPGA使用量;Nios Ⅱ/s(标准)——高性能,低FPGA使用量;Nios Ⅱ/e(经济)——低性能,最低的FPGA使用量。这3种产品具有32位处理器的基本结构单元——32位指令大小,32位数据和地址路径,32位通用寄存器和32个外部中断源;使用同样的指令集架构(ISA),100%二进制代码兼容,设计者可以根据系统需求的变化更改CPU,选择满足性能和成本的最佳方案,而不会影响已有的软件投入
本次实验需要在FPGA上通过Nios Ⅱ软核完成流水灯控制,由于控制 LED 灯闪烁的用户程序代码很小,可将其固化在片内 ROM 来执行。变量、堆栈等空间使用片内 RAM,不使用任何片外存储器。整个系统的框图如图 1.1 所示。
从图 1.1 控制 LED 闪烁的系统框图可知,其它逻辑与 Nios II 系统一样可存在于 FPGA中。Nios II 系统可与其它片内逻辑相互作用,取决于整个系统的需要。为了简单起见,本实验在 FPGA 内不包括其它逻辑。
1)、新建项目就不在赘述,可以参考以下链接 link
2)芯片选择
1、点击 Tools 下拉菜单下的 Platform Designer 工具,启动 Platform Designer 后,点击 File-save,在文件名中填写为kernel,具体如下图所示:
2、点击file,选择 save as,同时命名
3、双击clk_0,时钟设置为50MHZ
4、左侧输入process,选择Nios II Procee,然后点击add,保持默认设置,点击fiish即可
5、右键重命名为"cpu",并按图操作进行时钟线连接。时钟和时钟连接,复位和复位连接
6、添加JTAG并配置,左边选择JTAG_UART_Intel_FPGA_IP,点击Add。同时将其重命名为uart。然后连线
7、添加RAM,选择On-Chip Memory (RAM or ROM) Intel FPGA,点击Add加入。
size选择40960
这里注意s1的连线
8、添加PIO,左边选择PIO,将其加入进来。
连线如下:
将其命名为out_led
9、添加System ID Peripheral
按图操作:
连线如下:
10、双击cpu,进入Vector,按图操作:
如果没有这个选项请回到第七步
11、点击System -> Assign Base Address
12、接着
13、点击generate即可
返回到Quartus页面,新建原理图文件
双击空白处,加入生成的bsf文件:
在原理图(BDF)文件中添加 PD 生成的系统符号,在空白处双击将已生成的 kernel 加入 top_level.bdf 中。如下图所示:
然后点击
加入 Quartus II IP File 文件,为了以后编译成功,请务必将对应的 Quartus II IP File (.qip) 加入项目中。步骤如下:
点击 Assignments-Settings,添加 kernel.qip 文件,如下图所示:
添加完后需要点击apply
然后点击分析综合,绑定引脚
我只连了4个灯做测试
最后进行一次全编译即可
1、按照下图所示点击 Nios II Software Build Tools for Eclipse 打开 Nios II SBT for
2、选择默认路径即可
3、建立新的软件应用,如下图所示:
添加该文件
4、写入代码
#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; }
5、右键单击项目名称,在弹出的菜单中选择 Build Project,如下图所示:
6、如下图所示,添加下载文件。然后点击 Start 开始下载,下载成过后关闭,回到 Eclipse 主机界面。
添加的文件是outfile中后缀为.sof的文件
如果没有该文件就是没有全编译
7、运行/调试程序
用户将运行程序来观察编译代码的执行。用户可以在目标硬件上或 Nios II 指
令集仿真器(ISS)上运行程序。本节实验只讲述在目标硬件上调试和运行程序。在 C/C++ Projects 视图中右击 hello_led_0 工程文件夹,然后在弹出的快捷菜单中选择 Run As→Nios II Hardware 运行程序,也可以在菜单栏中选择 Run →Run Configurations,如下图所示:
8、实验效果
(我只绑定了4个灯的引脚)
直接运行未修改的代码,即可看到串口信息
直接上代码
module LED( input clk,//25M output [7:0]led ); reg [31:0]cnt=0; reg clk1hz=0; always@(posedge clk) begin if(cnt==32'd12500000-1) begin cnt<=0; clk1hz<=!clk1hz; end else cnt<=cnt+1; end reg[7:0]c1=8'd1; always@(posedge clk1hz) begin if(c1[7]==1) c1<=8'd1; else c1<=c1<<1'b1; end assign led=c1; endmodule
实验效果类似,不在展示
本次实验首次接触了FPGA软核,为FPGA学习打开了一扇新的大门,在复杂逻辑难以实现的情况下可通过软核进行C编程搭配Verilog的硬件编程,以此实现项目所需功能。
同时使用软核进行C编程搭配Verilog的硬件编程在比较少的代码时,显然verilog实现比较方便,但是涉及到更多的代码,用软核可以节省时间。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。