第 2 章 SOPC 开发流程及开发平台
本章首先介绍 SOPC 开发的基本流程, 然后详细的讲述一个简单的 SOPC 系统的设计过程, 包括使用 Quartus II SOPC Builder 定制 Nios II 系统以及利用 Nios II IDE 进行应用程序开发 通过实例以最快的方式描述 SOPC 开发以及各软件的使用
内容包括 在 Quartus II 中建立一个工程 使用 SOPC Builder 建立并生成一个简单的基于 Nios II 的硬件系统 在 Quartus II 工程中编译基于 Nios II 的硬件系统并生成配置文件 在 Nios II IDE 中建立对应硬件系统的工程, 编写用户程序 在 Nios II IDE 中编译程序生成可执行文件 将配置文件和可执行文件都下载到 FPGA 进行调试运行
学习目标 学会 Quartus II SOPC Builder Nios II IDE 的基本操作 对 SOPC 的开发流程有一个初步了解 能基本掌握 Nios II 软核的定制流程 掌握 Nios II 软件开发流程 掌握基本的软件调试方法
第 2 章目录 2.1 SOPC 开发流程 2.2 简单 SOPC 实例开发任务及步骤 1 2.3 分析系统需求 2.4 使用 Quartus II 建立工程 2.5 使用 SOPC Builder 创建 Nios II 系统 2.6 集成 Nios II 系统到 Quartus II 顶层模块 2.7 设置编译选项并编译硬件系统 2.8 下载硬件设计到目标 FPGA 2.9 使用 Nios II IDE 建立用户程序 2.10 调试 / 运行程序
第 2 章目录 2.1 SOPC 开发流程 2.2 简单 SOPC 实例开发任务及步骤 2.3 分析系统需求 2.4 使用 Quartus II 建立工程 2.5 使用 SOPC Builder 创建 Nios II 系统 2.6 集成 Nios II 系统到 Quartus II 顶层模块 2.7 设置编译选项并编译硬件系统 2.8 下载硬件设计到目标 FPGA 2.9 使用 Nios II IDE 建立用户程序 2.10 调试 / 运行程序
2.1 SOPC 开发流程 SOPC 设计包括以 Nios II 软核处理器为核心的嵌入式系统的硬件配置 硬件设计 硬件仿真 IDE 环境的软件设计 软件调试等 SOPC 系统设计的基本软件工具包括 :Quartus II SOPC Builder ModelSim Matlab/DSP Builder Nios II IDE Quartus II 用于完成 Nios II 系统的分析综合 硬件优化 适配 配置文件编程下载以及硬件系统测试等 SOPC Builder 是 Nios II 软核处理器的开发包, 用于实现 Nios II 系统配置和生成, 以及与 Nios II 系统相关的监控和软件调试平台的生成 Nios II IDE 用于完成基于 Nios II 系统的软件开发和调试 1 SOPC 的开发流程通常包括 2 个方面 : 基于 Quartus II SOPC Builder 的硬件设计 基于 Nios II IDE 的软件设计 对于比较简单的 Nios II 系统, 一个人便可执行所有设计 对于比较复杂的系统, 硬件和软件设计可以分开进行
2.1 SOPC 开发流程 SOPC 的开发过程中要使用到 Quartus II SOPC Builder 以及 Nios II IDE, 三者之间关系如下所示 :
SOPC Builder: 它是 Nios II 软核处理器的开发包, 用于实现 Nios II 系统配置 生成以及与 Nios II 系统相关的监控和软件调试平台的生成 ; 2.1 SOPC 开发流程 Nios II IDE: 用于完成基于 Nios II 系统的软件开发和调试, 并可借助其自带的 Flash 编程器完成对 Flash 以及 EPCS 的编程操作 SOPC Builder QuartusII: 用于完成 Nios II 系统的分析综合 硬件优化 适配 配置文件编程下载以及硬件系统测试等 ; Quartus II Nios II IDE Quartus II SOPC Builder 以及 Nios II IDE 三者之间关系
2.1 SOPC 开发流程 硬件开发 用 SOPC Builder 软件从 Nios II 处理器内核和 Nios II 开发套件提供的外设列表中选取合适的 CPU 存储器以及各外围器件 1, 并定制和配置它们的功能 ; 分配外设地址及中断号 ; 设定复位地址 ; 最后生成系统 用户也可以添加用户自身定制指令逻辑到 Nios II 内核以加速 CPU 性能 ; 添加用户自己设计的 IP 模块 2 处理器库外设模块库硬件开发 Quartus II SOPC Builder GUI 配置 Nios II 处理器自定义命令选择并配置外设.IP IP 模块连接各外设模块软件开发分配外设地址和中断 Nios II IDE 生成系统 GNU Tools 硬件开发使用 Quartus II 和 SOPC Builder
2.1 SOPC 开发流程 硬件开发 SOPC Builder GUI 将生成的 Nios II 系统集成到之前建立的 Quartus II 工程 ; 处理器库 外设模块库 配置 Nios II 处理器选择并配置外设.IP 自定义命令 IP 模块 连接各外设模块 软件开发 Quartus II 工程中可加入 Nios II 系统以外的逻辑 1 其可以是自身定制的硬件模块, 也可以是从 Altera 或第 3 方 IP 供应商中得到的其它现成的知识产权设计模块 HDL 源文件 测试台 硬件开发 管脚连接分配 分配外设地址和中断生成系统 Nios II IDE Quartus II 软件用来选取具体的 Altera FPGA 器件型号, 然后为 Nios II 系统上的各 I/O 口分配管脚 2 用户逻辑设计 其它的 IP 模块 SOPC Builder 的顶层.bdf 文件 Quartus II GNU Tools 硬件开发使用 Quartus II 和 SOPC Builder
2.1 SOPC 开发流程 硬件开发 SOPC Builder GUI 编译 Quartus II 工程, 对 HDL 文件进行布局布线, 从 HDL 源文件综合生成一个适合目标器件网表, 生成 FPGA 配置文件 ; HDL 源文件 测试台 处理器库 外设模块库 硬件开发 配置 Nios II 处理器选择并配置外设.IP 连接各外设模块分配外设地址和中断生成系统 自定义命令 IP 模块软件开发 Nios II IDE 用 Quartus II 编程器和 Altera 下载电缆, 将配置文件 1 下载到目标板上 硬件校验完成后, 可将新的硬件配置文件下载到目标板上的非易失存储器 ( 如 EPCS 器件 ) 2 编译 ( 分析与综合 布局布线 时序分析等 ) 管脚连接分配 用户逻辑设计 其它的 IP 模块 SOPC Builder 的顶层.bdf 文件 Quartus II 硬件配置文件 JTAG 验证调试 Altera FPGA 串口 以太网 片上调试 ( 软件跟踪 硬件断点 SignalTap II) GNU Tools 硬件开发使用 Quartus II 和 SOPC Builder
2.1 SOPC 开发流程 软件开发 软件开发使用 Nios II IDE, 它是一个基于 Eclipse IDE 架构的集成开发环境, 它包括 : GNU 开发工具 ( 标准 GCC 编译器, 连接器, 汇编器和 makefile 工具等 ); 基于 GDB 的调试器, 包括软件仿真和硬件调试 ; 提供用户一个硬件抽象层 HAL; 提供嵌入式操作系统 MicroC/OS-II 和 LwTCP/IP 协议栈的支持 ; 提供帮助用户快速入门的软件模板 ; 提供 Flash 下载支持 (Flash Progrmmer 和 Quartus II Programmer)
2.1 SOPC 开发流程 软件开发 SOPC Builder GUI 1 使用 SOPC Builder 生成系统后, 可以直接使用 Nios II IDE 开始设计 C/C++ 应用程序代码 Altera 提供外设驱动程序和硬件抽象层 (HAL), 使用户能够快速编写与低级硬件细节无关的 Nios II 程序 ; 除了应用代码, 用户还可以在 Nios II IDE 工程中设计和重新使用定制库 HDL 源文件 测试台 处理器库 外设模块库 硬件开发 编译 ( 分析与综合 布局布线 时序分析等 ) 管脚连接分配 用户逻辑设计 其它的 IP 模块 SOPC Builder 的顶层.bdf 文件 Quartus II 硬件配置文件 配置 Nios II 处理器 选择并配置外设.IP 连接各外设模块 分配外设地址和中断 JTAG 生成系统 验证调试 Altera FPGA 串口 以太网 片上调试 ( 软件跟踪 硬件断点 SignalTap II) 自定义命令 IP 模块 软件开发 Nios II IDE C 头文件 用户库函数 外设驱动 用户代码 库函数 操作系统 (RTOS) GNU Tools 硬件开发使用 Quartus II 和 SOPC Builder
2.1 SOPC 开发流程 软件开发 SOPC Builder GUI 处理器库 配置 Nios II 处理器 自定义命令 即使在没有软件开发的目标板的情况下, 也可以经过编译 连接后通过 Nios II 指令仿真器运行和调试代码 1 HDL 源文件 测试台 外设模块库 硬件开发 选择并配置外设.IP 连接各外设模块分配外设地址和中断生成系统 IP 模块 软件开发 Nios II IDE C 头文件 用户库函数 外设驱动 如果有了目标板, 用户就可以使用下载电缆下载软件到目标板进行调试 / 运行 编译 ( 分析与综合 布局布线 时序分析等 ) 管脚连接分配 用户逻辑设计 其它的 IP 模块 SOPC Builder 的顶层.bdf 文件 Quartus II 硬件配置文件 JTAG 验证调试 Altera FPGA 串口 以太网 片上调试 ( 软件跟踪 硬件断点 SignalTap II) 可执行代码 编译 连接 调试 用户代码 库函数 操作系统 (RTOS) GNU Tools 硬件开发使用 Quartus II 和 SOPC Builder
SOPC 基本开发流程简介 2.1 SOPC 开发流程 从 硬件开发 与 软件开发 两小节中, 在我们的脑海里一定已经形成了一个大致的开发流程, 下面我们仔细的对其进行梳理和理解 见 SOPC 开发流程简图
在进行 SOPC 开发之前, 首先必须确定系统的需求, 如应用系统需求的计算性能 需要的带宽和吞吐量 需求的接口类型以及是否需求多线程的软件等 1 分析系统需求 建立 Quartus II 工程, 建立顶层图 *.bdf 每个开发过程开始时都应建立一个工程,Quartus II 是以工程的方式对设计过程进行管理 在工程中建立顶层模块文件 2 相当于传统电路设计中的电路板 (PCB) NiosII 内核 & 标准外设 打开 SOPC Builder 定义和生成系统 定制指令 & 定制外设逻辑 自定义的功能模块 集成 SOPC 生成的系统到 Quartus II 工程 Altera 的 LPM 模块 硬件抽象层 (HAL)& 外设驱动程序 使用 Nios II IDE 开发软件 用户 C/C++ 应用程序代码和定制的库 如果需要, 用户可以定制指令和外设逻辑 在 SOPC Builder 中添加需要的功能模块 (Nios II 及其标准外设模块 ), 完成后生成一个系统模块 3 连接各功能模块 选择 FPGA 型号并进行管脚分配 进行编译选项设置 设置软件运行硬件环境属性 编译软件生成可执行文件 elf 在 IDE 中使用 ISS 运行 / 调试软件 编译硬件系统生成配置文件 sof 下载配置文件到 FPGA 器件 在目标板上下载可执行软件到 Nios II 系统 使用 IDE 编程工具烧写配置文件和软件代码 调试好的硬件和软件 在目标板上运行 / 调试软件 SOPC 开发流程简图
在 Quartus II 软件中包含了大量的 Altera 公司提供的 LPM 功能模块 1, 相当与传统设计中除处理器以外的逻辑芯片 ( 如 74 系列 ); 分析系统需求 建立 Quartus II 工程, 建立顶层图 *.bdf 当设计中现有模块不能满足设计要求时, 可设计自己的功能模块 并在顶层模块中使用 ; 2 NiosII 内核 & 标准外设 自定义的功能模块 集成 SOPC 生成的系统到 Quartus II 工程 Altera 的 LPM 模块 打开 SOPC Builder 定义和生成系统 硬件抽象层 (HAL)& 外设驱动程序 使用 Nios II IDE 开发软件 定制指令 & 定制外设逻辑 用户 C/C++ 应用程序代码和定制的库 连接各功能模块 设置软件运行硬件环境属性 在顶层模块中, 分别添加 SOPC Builder 生成的系统模块 LPM 功能模块以及用户自定义功能模块 ; 选择 FPGA 型号并进行管脚分配 进行编译选项设置 编译硬件系统生成配置文件 sof 然后将各个功能模块用连线连起来组成系统功能原理图 编译软件生成可执行文件 elf 在 IDE 中使用 ISS 运行 / 调试软件 这个两过程类似传统电路设计中, 将所有要使用的芯片焊接到电路板上, 然后通过 PCB 上的连线将各个芯片连接起来, 组成电路系统 下载配置文件到 FPGA 器件 使用 IDE 编程工具烧写配置文件和软件代码 调试好的硬件和软件 在目标板上下载可执行软件到 Nios II 系统 在目标板上运行 / 调试软件 SOPC 开发流程简图
分析系统需求 建立 Quartus II 工程, 建立顶层图 *.bdf NiosII 内核 & 标准外设 打开 SOPC Builder 定义和生成系统 定制指令 & 定制外设逻辑 为系统功能原理图选择芯片载体并为各个输入输出信号分配芯片的管脚 ; 设置编译选项, 从而让编译器按照用户设定来进行编译 ; 自定义的功能模块 集成 SOPC 生成的系统到 Quartus II 工程 连接各功能模块 选择 FPGA 型号并进行管脚分配 进行编译选项设置 Altera 的 LPM 模块 硬件抽象层 (HAL)& 外设驱动程序 使用 Nios II IDE 开发软件 设置软件运行硬件环境属性 编译软件生成可执行文件 elf 在 IDE 中使用 ISS 运行 / 调试软件 用户 C/C++ 应用程序代码和定制的库 编译硬件系统生成配置文件 sof 编译系统, 生成硬件系统的配置文件 *.sof 和 *.pof 编译系统是一个非常复杂的过程, 包括优化逻辑的组合 综合逻辑 适配 FPGA 布线以及时序分析等步骤 下载配置文件到 FPGA 器件 使用 IDE 编程工具烧写配置文件和软件代码 调试好的硬件和软件 SOPC 开发流程简图 在目标板上下载可执行软件到 Nios II 系统 在目标板上运行 / 调试软件
分析系统需求 建立 Quartus II 工程, 建立顶层图 *.bdf 软件开发也可以在 SOPC Builder 生成系统模块后立即进行! 与传统软件开发类似, 唯一不同在于系统是自己定制的, 所受局限小 NiosII 内核 & 标准外设 打开 SOPC Builder 定义和生成系统 定制指令 & 定制外设逻辑 自定义的功能模块 集成 SOPC 生成的系统到 Quartus II 工程 Altera 的 LPM 模块 硬件抽象层 (HAL)& 外设驱动程序 使用 Nios II IDE 开发软件 用户 C/C++ 应用程序代码和定制的库 连接各功能模块 设置软件运行硬件环境属性 选择 FPGA 型号并进行管脚分配 编译软件生成可执行文件 elf 进行编译选项设置 在 IDE 中使用 ISS 运行 / 调试软件 编译硬件系统生成配置文件 sof 下载配置文件到 FPGA 器件 在目标板上下载可执行软件到 Nios II 系统 使用 IDE 编程工具烧写配置文件和软件代码 调试好的硬件和软件 在目标板上运行 / 调试软件 SOPC 开发流程简图
分析系统需求 建立 Quartus II 工程, 建立顶层图 *.bdf NiosII 内核 & 标准外设 打开 SOPC Builder 定义和生成系统 定制指令 & 定制外设逻辑 自定义的功能模块 集成 SOPC 生成的系统到 Quartus II 工程 Altera 的 LPM 模块 硬件抽象层 (HAL)& 外设驱动程序 使用 Nios II IDE 开发软件 用户 C/C++ 应用程序代码和定制的库 将配置文件.sof 下载到 FPGA, 将可执行文件.elf 下载到 RAM 最后利用 IDE 的编程工具将配置文件烧写到 FPGA 的配置芯片或 Flash, 将可执行文件 *.elf 编程到 Flash 中 连接各功能模块 选择 FPGA 型号并进行管脚分配 进行编译选项设置 编译硬件系统生成配置文件 sof 下载配置文件到 FPGA 器件 使用 IDE 编程工具烧写配置文件和软件代码 直到硬件和软件设计都达到设计要求 调试好的硬件和软件 SOPC 开发流程简图 设置软件运行硬件环境属性 编译软件生成可执行文件 elf 在 IDE 中使用 ISS 运行 / 调试软件 在目标板上下载可执行软件到 Nios II 系统 在目标板上运行 / 调试软件 设置好软件运行的硬件环境属性后, 便可进行编译 链接和调试 运行程序 对用户程序进行编译, 生成可执行文件 *.elf 接下来在 IDE 的指令集仿真器 (ISS) 上仿真软件和运行 / 调试软件 在目标板上反复调试软件
第 2 章目录 2.1 SOPC 开发流程 2.2 简单 SOPC 实例开发任务及步骤 2.3 分析系统需求 2.4 使用 Quartus II 建立工程 2.5 使用 SOPC Builder 创建 Nios II 系统 2.6 集成 Nios II 系统到 Quartus II 顶层模块 2.7 设置编译选项并编译硬件系统 2.8 下载硬件设计到目标 FPGA 2.9 使用 Nios II IDE 建立用户程序 2.10 调试 / 运行程序
2.2 简单 SOPC 实例开发任务及步骤 在这一节中, 我们通过实际操作来体验一个简单的 SOPC 开发的整个过程 任务 步骤 建立一个基于 Nios II 处理器的系统来控制一个 LED 灯闪烁 1. 分析系统需求 2. 启动 QuartusII 软件和新建实例设计工程 3. 启动新的 SOPC Builder 系统 4. 在 SOPC Builder 中定义并生成系统 5. 集成 SOPC Builder 系统到 QuartusII 工程 6. 选择芯片型号并进行管脚分配 7. 设置编译选项并编译硬件系统 8. 下载硬件设计到目标 FPGA 9. 使用 NiosII IDE 开发用户程序 10. 调试用户程序 11. 运行程序
第 2 章目录 2.1 SOPC 开发流程 2.2 简单 SOPC 实例开发任务及步骤 2.3 分析系统需求 2.4 使用 Quartus II 建立工程 2.5 使用 SOPC Builder 创建 Nios II 系统 2.6 集成 Nios II 系统到 Quartus II 顶层模块 2.7 设置编译选项并编译硬件系统 2.8 下载硬件设计到目标 FPGA 2.9 使用 Nios II IDE 建立用户程序 2.10 调试 / 运行程序
例如 : 2.3 分析系统要求 每一个 SOPC 系统开发之前, 都应该仔细分析系统需求,?
2.3 分析系统要求 每一个 SOPC 系统开发之前, 都应该仔细分析系统需求, 基于这些问题, 用户可确定具体的系统要求, 例如 : 1. 使用哪种 NiosII 处理器内核 : 比较小的还是比较快的? 2. 设计要求什么外设及其数量? 3. 功耗要求? 4. 使用哪种实时操作系统 (RTOS)? 5. 硬件加速逻辑在哪些方面可大大提高系统性能? 例如 : 增加一个 DMA 外设能释放 CPU 在进行数据拷贝时所占用的资源? 定制的指令能取代 DSP 算法吗??
2.3 分析系统要求 本章实例的开发任务是 : 展示可用于控制 LED 闪烁的简单 NiosII 处理器系统 利用最通用和有效的方法来建立实际的定制 NiosII 系统 整个系统仅使用片内资源, 且不依赖于目标板 分析任务可以知道 FPGA 内硬件系统组成应包含 : 带有 2kBytes 指令高速缓存的 NiosII/s 处理器核 ; 2kBytes 片内 ROM 存储器 (Onchip_ROM) 用于存储程序代码以及程序运行空间 ; 1kBytes 片内 RAM 存储器 (Onchip_RAM) 用于变量存储 (R/W 数据 ) 堆 栈; 1 1 位输出 I/O (PIO) 管脚来控制 LED; 系统识别外围设备 (SystemID)
JTAG Avalon 控制 LED 闪烁的系统框图 2.3 分析系统要求 目标板 Altera FPGA JTAG 接口 时钟振荡器 器控制 Nios II 系统 调试控制 NiosII/s 内核 系统 ID 指令 数据 总线模块 PIO 片内 ROM 片内 RAM LED1 R20 470R 其它逻辑 其它逻辑与 Nios II 系统一样可存在于 FPGA 中 并且可与其它的片内逻辑相互作用, 这取决于整个系统的需要
2.3 分析系统要求 计算机要求 Quartus II SOPC Builder Nios II IDE 无论是否拥有一块开发板, 都可以按照本章所述来进行实例设计 如果没有目标板, 仍然可以使用本章所述内容, 但无法观察到实例设计在硬件上运行 取而代之, 将可以在 Nios II 指令集仿真器 (ISS) 上仿真软件运行 如果拥有开发板以及 ByteBlaster II 下载电缆, 按照本章的内容, 将可观察到实例设计在硬件上运行,LED 灯的闪烁
第 2 章目录 2.1 SOPC 开发流程 2.2 简单 SOPC 实例开发任务及步骤 2.3 分析系统需求 2.4 使用 Quartus II 建立工程 2.5 使用 SOPC Builder 创建 Nios II 系统 2.6 集成 Nios II 系统到 Quartus II 顶层模块 2.7 设置编译选项并编译硬件系统 2.8 下载硬件设计到目标 FPGA 2.9 使用 Nios II IDE 建立用户程序 2.10 调试 / 运行程序
2.4~2.10 简单实例的操作演示 2.4 使用 Quartus II 建立工程 2.5 使用 SOPC Builder 创建 Nios II 系统 2.6 集成 Nios II 系统到 Quartus II 工程 2.7 设置编译选项并编译硬件系统 2.8 下载硬件设计到目标 FPGA 2.9 使用 Nios II IDE 建立用户程序 2.10 调试 / 运行程序 1