NIOS 软核处理器入门实验 


引言

和当前主流的单片机系统相比, 基于FPGA的软核处理器显得略微小众和低调, 实际上由于被FPGA系统纷繁复杂的功能所掩盖, 软核处理器隐藏于FPGA的繁复功能背后。 随着深亚微米集成电路制造工艺的快速推进所导致的数字逻辑门单位资源成本的下降, 软核处理器的部署案例几乎和FPGA解决方案拥有相同的数量。

我们在实验课中引入软核处理器作为教学内容的一部分, 有着以下几方面的考虑:

本实验教程采用了命令行脚本模式的软件编译流程,虽然脚本方式没有图形界面的方式直观, 但是它有着以下的优势。

什么是软核处理器

在FPGA电路设计领域, 所谓软核处理器, 是指使用FPGA芯片内部的逻辑资源构建实现的处理器, 我们知道FPGA芯片拥有大量的逻辑、存储、I/O 和 计算资源, 这些资源也可以用来构建一个处理器系统并且在其上运行软件。

软核处理器的特点

软核处理器, 构建其的底层单元均来自FPGA芯片内部的可重构逻辑块,因此和传统的已经固化的硬核处理器相比, 有以下特点:

下图 是Altera 公司 用于宣传其 NIOS 软核处理器 的结构图, 从中可以看到, 除了浅蓝色的必要组件之外, 其他的组成部分均为可选或可配置调节的。 此特性决定了软核处理器的逻辑规模和处理性能具有高度的弹性, 可以胜任从实现普通的电子表到运行带MMU(内存管理单元)的标准Linux操作系统的不同任务。



NIOS软核处理器结构
(图片来源: Altera)

软核处理器的适用场景

通常来说, 在电子系统中使用软核处理器一般出现在以下场景:

软核处理器的开发工具链

对于一个运行着软件的处理器系统而言, 从不同的视角进行观察, 其抽象形式也各不相同

上述的开发者的不同视角, 在实际的开发工作中是以工具链中的一系列工具来体现的, 每个视角均有一个工具用于开发。 以Altera的NIOS处理器软核为例。

本文参考设计实验

本文提供了一个简单的NIOS系统入门实验参考设计, 该参考设计的硬件结构如下图所示:



参考设计硬件结构

该参考设计的软件工作流程图如下所示:



参考设计软件流程

运行参考设计

为节省存储和网络开销, 本实验提供的参考设计资料中的临时编译文件均已全部删除, 下载设计后请按照以下方式重现参考设计项目资料。



启动SOPC Builder工具


生成NIOS系统的电路HDL描述文件



顶层电路 RTL 结构

硬件逻辑

观察 Quartus 的 RTL Viewer



Timer和Button Counter的RTL 结构

体系结构-总线单元

回到SOPC Builder 首先观察系统的互联结构,系统包含以下模块:

下图是系统的互联结构图, 请注意观察每个模块的总线地址



SOPC 系统互联结构

然后双击 cpu 0 模块 ,观察一下CPU地址设定。



CPU的地址设定

最后观察一下 nios_cpu.sopcinfo 文件,使用一个文本编辑器将其打开

体系结构-板级支持包(BSP)



启动Command Shell


BSP的C环境和标准终端配置


BSP的Linker 配置


BSP Editor的Generate文件和目录

请注意一下, 存在一个summary.html 文件,该文件里描述了BSP 的硬件支持库里的软件模块,用于查找各种模块的物理地址



BSP HAL 地址摘要


BSP 编译生成libhal_bsp.a 库文件

应用软件

和BSP板级支持包类似, 应用软件也是用命令行编译



APP 编译情况报告

代码编译成功后,需要下载目标码 elf文件到电路板上的nios处理器中



下载 NIOS的软件执行代码 ELF文件

C 代码调试



C程序 的 调试编译开关

在使用调试代码时, 有以下的注意事项



使用字符终端打印变量数据

硬件逻辑调试

硬件逻辑部分的调试分为两种

以本文参考设计为例, 调试处理器系统硬件模块时 , 首先观察处理器系统的RTL结构, 从中可以看到电路逻辑模块的例化层次。 本文系统中, 处理器电路的例化层次如下图,其中可以看到处理器的总线主控单元, 以及 各个挂在总线上的从设备。


RTL View 电路逻辑例化层次

从RTL视图上还可以看到处理器内部的总线互联结构, 用于确认主控单元和从设备单元的连接关系。



RTL View 电路逻辑互联关系
当需要进行总线层次的电路调试时,可以在嵌入式逻辑分析仪中, 添加 总线主控单元的用于选通从设备的寻址和读写控制信号,以及读写数据。 另外再选择添加需要调试的从设备单元的读写控制信号和数据信号。 例如,下图中,选择了处理器的写使能作为触发信号,用来捕获处理器对GPIO的写操作


Signal TAP 信号追踪 Setup

运行SignalTap, 观察捕获的总线数据波形, 分析处理器的读写地址和读写数据的正确性。

Singnal TAP 调试 NIOS处理器视频

获取参考代码

本文提供的参考代码存放于以下位置