此内容仅为个人学习笔记,如有不足之处,欢迎指正~
开发环境:Quartus Prime Standard 18.0
开发板型号:野火征途Pro
FPGA型号:EP4CE10F17C8
参考视频链接:正点原子手把手教你学FPGA之Nios II篇-基于开拓者V1_哔哩哔哩_bilibili
1. Platform Designer简介
2. Nios II 简介
Nios II 处理器通过 Avalon 总线与 ROM 和RAM 连接,其中 Avalon 总线用来传输指令与数据。除此之外,Qsys 系统还提供了一个 JTAG 接口,供用户下载和调试程序。
3. 创建Hello_world工程
流程:新建工程——硬件设计——软件设计
系统涉及到的模块:
1、时钟(Clock Source)
clk IP 核的全称是 Clock Source,在这里设定我们整个系统的工作时钟频率。
2、nios2_qsys(Nios II(Classic) Processer)
这是我们之前对Qsys介绍时了解到,这是整个Qsys的控制中心,起着分配中断、管理地址、调度内存等主要的控制作用,相当于大脑的低位吧,通过Avalon与外界进行通信。
3、片内存储(On-Chip-Memory)
这里我们创建了两个片内存储器,ROM和RAM。这两个片内存储器都是利用FPGA的片上存储资源进行实现,除了用于存储指令和数据外,还是程序的运行空间。需要注意的是ROM的实现,在FPGA内部并没有专用的ROM资源,我们通过对 RAM 赋初值,并始终保持该值,使其变得只读,从而实现片内 ROM(只读存储器)。
4、串行通信(JTAG UART Intel FPGA IP
JTAG UART IP 核使用 JTAG 接口来实现上位机与 Qsys 系统之间的串行通信。JTAG UART IP 核为用户提供了 Avalon-MM 接口映射,屏蔽了复杂的 JTAG 接口协议。
5、System ID(Systerm ID Periheral)
System ID IP核是一个具有Avalon接口的只读设备,它给每个Nios II系统生成一个唯一的标识符(ID),并将其写入 System ID 核的寄存器中。编译器和用户可以利用该 IP 核来验证编译后的可执行程序与配置到FPGA 中的硬件环境是否匹配。如果可执行程序中的 ID 与 FPGA 中 System ID 核所存储的 ID 不一致,那么程序在运行时可能会出错
3.1 新建工程
和新建FPGA工程步骤一样,起好工程名字(qsys_hello_world),确认好工程路径(将工程文件放在prj文件夹下),规划好工程文件夹组成。
3.2 搭建SOPC (system-on-a-programmable-chip )系统(硬件部分)
流程:搭建系统——配置系统——生成系统
最简单的Qsys系统,包含五个IP核:
1. Clock Source(默认就有)
2. Nios II(Classic) Processer
3. On-Chip-Memory
4. JTAG UART
5. Systerm ID Periheral
第一步:打开Platform Designer
法一:点击Tools-Platform Designer法二:直接点击红框处
修改时钟频率(可选) 注:可选 表示此步骤可有可无
第二步:添加嵌入式IP核,搜索栏输入nios, 双击NIos II (Classic)Processor
注意:高版本Quartus会有Nios II(Classic)Processor和Nios II Processor两种,一定要选classic,不然之后下载到硬件的时候会一直提示click cancel to stop using opencore plus ip,time remaining unlimited.
此工程使用默认配置就行,点击Finish
可以修改模块名称,此处名称改为:nios2(可选)
第三步:添加片上存储器,搜索on-chip,双击On-Chip Memory (RAM or ROM)
修改存储大小为10240(10K字节),然后Finish
修改模块名称为:ram(可选)
第四步:添加JTAG UART Intel FPGA IP,搜索jtag,双击JTAG UART(可用于串口通信功能)
可以不做任何配置,点击Finish
第五步:添加System ID Periphcral(作用:生成一个系统ID识别号)
此处可不作修改
以上五部分就是一个最简单的Qsys系统,包含五个IP核:Clock Source(默认就有)、Nios II Processer、On-Chip-Memory、JTAG UART、Systerm ID Periheral。
第六步:连接IP核,点击连接点即可以连接
NIOS需要从ram中取指令,所以连接此处(data_master只与存储设备连接)
实际上,此线下面两个节点也连接上不会影响实验结果
连接中断信号,并设置优先级
JTAG debug复位信号
最后连线图:
第七步:修改处理器复位和异常指向地址,指向ram,双击nios2,如图修改
第八步:分配外设地址
第九步:保存qsys系统,按快捷键 ctrl+s,或者点击File-Save
表示保存成功
第十步:生成FPGA文件,Genaration-Genarate HDL-Genarate
模块例化代码复制 Generate-Show Instantiation Template...-Copy
复制的例化代码:
system_qsys u0 (
.clk_clk (<connected-to-clk_clk>), // clk.clk
.reset_reset_n (<connected-to-reset_reset_n>) // reset.reset_n
);
第十一步:缩小Platform Designer窗口后,在rtl文件夹下面创建qsys_hello_world.v文件,并例化system_qsys模块。
rtl文件夹下新建文本文档,并修改名称为qsys_hello_world.v
qsys_hello_world.v 代码:
module qsys_hello_world(
input wire sys_clk,
input wire sys_rst_n
);
system_qsys u_qsys (
.clk_clk (sys_clk ), // clk.sys_clk
.reset_reset_n (sys_rst_n ) // reset.sys_rst_n
);
endmodule
第十二步:添加qsys_hello_world.v文件和Qsys文件到工程
1)添加qsys_hello_world.v文件
2)添加Qsys文件(可以添加.qsys文件,也可以添加qsys-synthesis-system_qsys.qip文件,建议后者)
添加system_qsys.qip文件:
或者添加.qsys文件:
文件添加成功:
第十三步:编译然后分配引脚
1)编译
2)引脚分配再编译
分配了引脚后再次编译
3.3 软件设计
第一步:打开Eclipse
将路径设置为qsys文件夹下新建的software文件夹
第二步:生成工程及文件
注:板级支持包(软件联系底层硬件的支持包)
第三步:精简bsp(因为ram只有10K),并编译工程
1)精简BSP编译文件的大小:
勾选两个操作:
取消2个勾选:
然后点击Genarate,再点击Exit。
2)编译工程
3.4 上板验证
第一步:下载工程 qsys_hello_world.sof 文件到开发板
回到Eclipse软件:Run-Run Configurations,选择New Configuration,点击Target Configurations
实验成功!!!!