《S0PC系统设计入门教程》 西北工业大学大学生创新中心内部培训教材 邵舒渊 卢选民编 2004年5月
《SOPC 系统设计入门教程》 西北工业大学大学生创新中心内部培训教材 邵舒渊 卢选民 编 2004 年 5 月
全国大学生电子设计竞赛“ALTERA杯”EDA/SOPC专项设计竞赛培训教材 《SOPC系统设计入门教程》 前言 目录 第一章概述 1.1SOPC的概念 1.2SOPC系统设计流程 1.2.1 SOPC Builder的设计流程 1.2.2 SOPC Builder的设计阶段 1.2.3SOPC系统开发流程 1.3SOPC系统开发环境 1.4本书中的系统配置 第二章SOPC系统构架 2.1系统模块框图 2.2 Nios CPU 2.2.1指令总线主端口 2.2.2数据总线主端口 2.2.3缓冲存储器 2.2.4移位单元 2.2.5乘法支持 2.2.6中断支持 2.2.7Nios片上调试模块 2.2.8开发环境 2.3 Avalon总线 2.3.1基本概念 2.3.2 Avalon总线传输 2.3.3 Avalon三态接▣ 2.3.4地址对齐 2.4外设P模块 2.4.1通用异步串行接口(UART) 2.4.2可编程并行输入/输出模块(PI0) 2.4.3定时器 2.4.4DMA控制器 第三章系统硬件开发 3.1硬件开发流程 3.2创建QuartusⅡ工程 3.3创建Nios系统模块 3.3.1开始使用SOPC Builder 3.3.2系统频率 3.3.3添加CPU和外设模块
全国大学生电子设计竞赛“ALTERA 杯”EDA/SOPC 专项设计竞赛培训教材 《SOPC 系统设计入门教程》 前言 目录 第一章 概述 1.1 SOPC 的概念 1.2 SOPC 系统设计流程 1.2.1 SOPC Builder 的设计流程 1.2.2 SOPC Builder 的设计阶段 1.2.3 SOPC 系统开发流程 1.3 SOPC 系统开发环境 1.4 本书中的系统配置 第二章 SOPC 系统构架 2. 1 系统模块框图 2. 2 Nios CPU 2.2.1 指令总线主端口 2.2.2 数据总线主端口 2.2.3 缓冲存储器 2.2.4 移位单元 2.2.5 乘法支持 2.2.6 中断支持 2.2.7 Nios 片上调试模块 2.2.8 开发环境 2. 3 Avalon 总线 2.3.1 基本概念 2.3.2 Avalon 总线传输 2.3.3 Avalon 三态接口 2.3.4 地址对齐 2. 4 外设 IP 模块 2.4.1 通用异步串行接口(UART) 2.4.2 可编程并行输入/输出模块(PIO) 2.4.3 定时器 2.4.4 DMA 控制器 第三章 系统硬件开发 3.1 硬件开发流程 3.2 创建 Quartus II 工程 3.3 创建 Nios 系统模块 3.3.1 开始使用 SOPC Builder 3.3.2 系统频率 3.3.3 添加 CPU 和外设模块
3.3.4指定基地址 3.3.5生成系统模块 3.3.6添加符号到BDF中 3.4编译设计(Compilation) 3.5编程(Programming) 3.5.1配置FPGA 3.5.2用户微控制器 3.5.3在Nios系统上运行软件 3.6下载设计到Flash存储器 第四章系统软件开发 4.1软件开发流程 4.2软件开发环境 4.3文件系统 4.4软件开发工具 4.4.1 GNUPro工具 4.4.2 Nios OCI调试模块 4.4.3 Nios OCI调试控制台 4.4.4 Nios SDK Shell 4.5可配置的处理器硬件属性 4.5.1乘法器 4.5.2数据和指令高速缓冲器 4.5.3用户指令 4.5.4同时执行的多主(ulti-Master)总线结构和DMA 4.5.5数据和指令高速缓冲器 4.5.6外设和存储器接口 4.6 Nios SDK 4.6.1inc日录 4.6.21ib目录 4.6.3src目录 4.7软件开发应用 4.7.1开始前的准备 4.7.2打开Nios SDK Shel1 4.7.3编译程序 4.7.4用insight下载、运行和调试程序 4.7.5用Nios0CI调制控制台下载、运行和调试程序 4.7.6重建(rebuild)软件 4.7.7下载软件到F1ash 4.7.8第三方开发和调试工具 4.8使用.hexout 4.9其它的开发板通信和调试方法 4.9.1 GERMS监视器 4.9.2 Insight:GNU调试器 4.9.3 Gprof:GNU Profiler 4.10 Nios SDK Shel1提示信息
3.3.4 指定基地址 3.3.5 生成系统模块 3.3.6 添加符号到 BDF 中 3.4 编译设计(Compilation) 3.5 编程(Programming) 3.5.1 配置 FPGA 3.5.2 用户微控制器 3.5.3 在 Nios 系统上运行软件 3.6 下载设计到 Flash 存储器 第四章 系统软件开发 4.1 软件开发流程 4.2 软件开发环境 4.3 文件系统 4.4 软件开发工具 4.4.1 GNUPro 工具 4.4.2 Nios OCI 调试模块 4.4.3 Nios OCI 调试控制台 4.4.4 Nios SDK Shell 4.5 可配置的处理器硬件属性 4.5.1 乘法器 4.5.2 数据和指令高速缓冲器 4.5.3 用户指令 4.5.4 同时执行的多主(Multi-Master)总线结构和 DMA 4.5.5 数据和指令高速缓冲器 4.5.6 外设和存储器接口 4.6 Nios SDK 4.6.1 inc 目录 4.6.2 lib 目录 4.6.3 src 目录 4.7 软件开发应用 4.7.1 开始前的准备 4.7.2 打开 Nios SDK Shell 4.7.3 编译程序 4.7.4 用 insight 下载、运行和调试程序 4.7.5 用 Nios OCI 调制控制台下载、运行和调试程序 4.7.6 重建(rebuild)软件 4.7.7 下载软件到 Flash 4.7.8 第三方开发和调试工具 4.8 使用.hexout 4.9 其它的开发板通信和调试方法 4.9.1 GERMS 监视器 4.9.2 Insight:GNU 调试器 4.9.3 Gprof:GNU Profiler 4.10 Nios SDK Shell 提示信息
4.11在Nios系统中实现中断服务程序(ISR) 4.12用户自定义指令 4.12.1用户自定义指令的概念 4.12.2加速效果 4.12.3用户自定义指令应用 第五章系统模拟与调试 5.1软件配置 5.2模拟设置 5.2.1存储器初始化 5.2.2UART外设模拟设置 5.2.3S0 PC Builder模拟设置 5.2.4通用系统模拟文件 5.3 ModelSim模拟 5.4模拟结果分析 5.4.1通过UART外设同GERMS监控程序交互 5.4.2执行PI0外设操作的C程序 5.5增加/删除波形图信号 5.6片外存储器模拟 5.6.1使用自动产生的存储器模块 5.6.2指定一个定制模块 5.6.3定义存储器模块内容 5.7调试 5.7.1使用SignalTap II逻辑分析器 5.7.2使用SignalProbe 5.7.3使用Chip Editor 第六章系统设计实例 6.1建立硬件需求 6.2创建一个基本的Nios设计 6.3GDB调试 6.4添加用户外设 6.5RTL仿真 6.6 Flash编程 6.7用户指令和DMA 6.8MP3播放器 附录1:N1os嵌入式处理器32位指令集 附录2:Nios嵌入式处理器开发板-APEX20K200E 附录3:Nios嵌入式处理器开发板-Cyclone_1C20 附录4:Nios嵌入式处理器开发板-Stratix.1S10 附录5:Nios嵌入式处理器开发板-Stratix.1S40 参考文献
4.11 在 Nios 系统中实现中断服务程序(ISR) 4.12 用户自定义指令 4.12.1 用户自定义指令的概念 4.12.2 加速效果 4.12.3 用户自定义指令应用 第五章 系统模拟与调试 5.1 软件配置 5.2 模拟设置 5.2.1 存储器初始化 5.2.2 UART 外设模拟设置 5.2.3 SOPC Builder 模拟设置 5.2.4 通用系统模拟文件 5.3 ModelSim 模拟 5.4 模拟结果分析 5.4.1 通过 UART 外设同 GERMS 监控程序交互 5.4.2 执行 PIO 外设操作的 C 程序 5.5 增加/删除波形图信号 5.6 片外存储器模拟 5.6.1 使用自动产生的存储器模块 5.6.2 指定一个定制模块 5.6.3 定义存储器模块内容 5.7 调试 5.7.1 使用 SignalTap II 逻辑分析器 5.7.2 使用 SignalProbe 5.7.3 使用 Chip Editor 第六章 系统设计实例 6.1 建立硬件需求 6.2 创建一个基本的 Nios 设计 6.3 GDB 调试 6.4 添加用户外设 6.5 RTL 仿真 6.6 Flash 编程 6.7 用户指令和 DMA 6.8 MP3 播放器 附录 1:Nios 嵌入式处理器 32 位指令集 附录 2:Nios 嵌入式处理器开发板-APEX 20K200E 附录 3:Nios 嵌入式处理器开发板-Cyclone_1C20 附录 4:Nios 嵌入式处理器开发板-Stratix_1S10 附录 5:Nios 嵌入式处理器开发板-Stratix_1S40 参考文献
第一章概述 1.1S0PC的概念 在二十世纪九十年代末,可编程逻辑器件(PLD)的复杂度已经能够在单个可编程器件 内实现整个系统,完整的单芯片系统(SOC)概念是指在一个芯片中实现用户定义的系统。 在一个S0C设计中,将涵盖到包括微处理器、DSP芯片、存储器件、I/0、控制逻辑、混合信 号模块(Mixed-Signal Blocks)等在内的许多部分。 在系统设计复杂度不断的提高及新产品市场周期不断缩短的压力下,把FPGA及微处理器 的核心内嵌在同一芯片上,构建成为一个可编程的$0C系统体系框架结构,建成所谓的可编 程芯片系统SOPC(System on a Programmable Chip),从而为系统设计者提供了又一灵活快 捷的设计方法与途径。 SOC是一种新的系统设计技术,也是一种新的软硬件综合设计技术。通过它,可以很 快地将硬件系统(包括微处理器,存储器,外设以及用户逻辑电路等)和软件设计都放在一 个可编程的芯片中,以达到系统的IC设计。这种设计方式,具有开发周期短以及系统可修 改等优点。设计完成的SOPC可以通过HARDCOPY转为ASIC芯片,从而可以实现快速量产。 在2000年,Altera发布了Nios软核RISC处理器,这是Altera Excalibur嵌入处理 器计划中第一个产品,它成为业界第一款为可编程逻辑优化的可配置处理器。A1tera把可 编程逻辑的固有的优势集成到嵌入处理器的开发流程中,一旦定义了处理器之后,设计者就 “具备”了体系结构,可以马上开始设计软件原型。CPU周边的专用硬件逻辑可以慢慢地集 成进去,在每个阶段软件都能够进行测试,解决遇到的问题。另外,软件组可以对结构方面 提出一些建议,改善代码效率和/或处理器性能,这些软件/硬件权衡可以在硬件设计过程中 间完成。 为了减轻设计者的负担,最佳的途径是把所有和处理器子系统相关的底层详细资料集中 到单个工具中。Altera提供了这样的工具SOPC Builder,它包括两方面的内容:第一,它 具有直观的图形用户接口(GUI),便于设计者准确地添加和配置系统所需的外设(包括存 储器,定制外设和IP模块)。第二,它会自动完成系统集成工作,这样设计者不必拘泥于 定义存储器映射,中断控制和总线控制这样的工作。 GUI以直观的方式允许设计者配置复杂的系统。除了提供软件和集成的OS之外,这还 包括定义具有多总线主设备,总线仲裁和DMA控制的系统。通过这样的“库一表接口”,它 能自动地把部件添加到系统中。用户从有效外设库中来选择,这个库在SOPC Builder窗口 的左边,如图1一1。然后,外设出现在当前系统的部件表中,这个表在S0 PC Builder窗口 的右边。每个外设可能会启动一个配置向导,指导用户为这个系统配置外设的功能。 部件表GUI允许用户输入每个外设基地址和中断优先级(SOPC Builder也可以自动进 行分配)。最后,通过窗口中部的“接插板”功能,设计者可以直观地连接总线体系,分配 从设备端的仲裁优先级。其中,垂直线代表主设备:水平线代表从设备。接插板让用户制定 主设备和从外设之间的连接,还可以为不同的主设备分配权重。这些权重定义了每个竞争主 设备如何访问从设备。 当用户点击“Generate”按钮时,SOPC Builder会生成每个硬件部件以及连接部件的 片内总线结构,仲裁和中断逻辑。SOPC Bui1dr也会产生系统可仿真的RTL描述,以及为 特定硬件配置设计的测试平台,能够(可选)把硬件系统综合到单个网表中。 拥有了这些合适的部件,自动硬件生成的过程基本就可以完成,但是还需要满足软件设 计者的要求。利用设计过程中采集的信息,SOPC Builder能够生成C和汇编头文件,这些 头文件定义了存储器映射,中断优先级和每个外设寄存器空间的数据结构。这样的自动生成
第一章 概述 1.1 SOPC 的概念 在二十世纪九十年代末,可编程逻辑器件(PLD)的复杂度已经能够在单个可编程器件 内实现整个系统,完整的单芯片系统(SOC)概念是指在一个芯片中实现用户定义的系统。 在一个SOC设计中,将涵盖到包括微处理器、DSP芯片、存储器件、I/O、控制逻辑、混合信 号模块(Mixed-Signal Blocks )等在内的许多部分。 在系统设计复杂度不断的提高及新产品市场周期不断缩短的压力下,把FPGA及微处理器 的核心内嵌在同一芯片上,构建成为一个可编程的SOC系统体系框架结构,建成所谓的可编 程芯片系统SOPC(System on a Programmable Chip),从而为系统设计者提供了又一灵活快 捷的设计方法与途径。 SOPC 是一种新的系统设计技术,也是一种新的软硬件综合设计技术。通过它,可以很 快地将硬件系统(包括微处理器,存储器,外设以及用户逻辑电路等)和软件设计都放在一 个可编程的芯片中,以达到系统的 IC 设计。这种设计方式,具有开发周期短以及系统可修 改等优点。设计完成的 SOPC 可以通过 HARDCOPY 转为 ASIC 芯片,从而可以实现快速量产。 在 2000 年,Altera 发布了 Nios 软核 RISC 处理器,这是 Altera Excalibur 嵌入处理 器计划中第一个产品,它成为业界第一款为可编程逻辑优化的可配置处理器。Altera 把可 编程逻辑的固有的优势集成到嵌入处理器的开发流程中,一旦定义了处理器之后,设计者就 “具备”了体系结构,可以马上开始设计软件原型。CPU 周边的专用硬件逻辑可以慢慢地集 成进去,在每个阶段软件都能够进行测试,解决遇到的问题。另外,软件组可以对结构方面 提出一些建议,改善代码效率和/或处理器性能,这些软件/硬件权衡可以在硬件设计过程中 间完成。 为了减轻设计者的负担,最佳的途径是把所有和处理器子系统相关的底层详细资料集中 到单个工具中。Altera 提供了这样的工具 SOPC Builder,它包括两方面的内容:第一,它 具有直观的图形用户接口(GUI),便于设计者准确地添加和配置系统所需的外设(包括存 储器,定制外设和 IP 模块)。第二,它会自动完成系统集成工作,这样设计者不必拘泥于 定义存储器映射,中断控制和总线控制这样的工作。 GUI 以直观的方式允许设计者配置复杂的系统。除了提供软件和集成的 OS 之外,这还 包括定义具有多总线主设备,总线仲裁和 DMA 控制的系统。通过这样的“库-表接口”,它 能自动地把部件添加到系统中。用户从有效外设库中来选择,这个库在 SOPC Builder 窗口 的左边,如图 1-1。然后,外设出现在当前系统的部件表中,这个表在 SOPC Builder 窗口 的右边。每个外设可能会启动一个配置向导,指导用户为这个系统配置外设的功能。 部件表 GUI 允许用户输入每个外设基地址和中断优先级(SOPC Builder 也可以自动进 行分配)。最后,通过窗口中部的“接插板”功能,设计者可以直观地连接总线体系,分配 从设备端的仲裁优先级。其中,垂直线代表主设备;水平线代表从设备。接插板让用户制定 主设备和从外设之间的连接,还可以为不同的主设备分配权重。这些权重定义了每个竞争主 设备如何访问从设备。 当用户点击“Generate”按钮时,SOPC Builder 会生成每个硬件部件以及连接部件的 片内总线结构,仲裁和中断逻辑。SOPC Builder 也会产生系统可仿真的 RTL 描述,以及为 特定硬件配置设计的测试平台,能够(可选)把硬件系统综合到单个网表中。 拥有了这些合适的部件,自动硬件生成的过程基本就可以完成,但是还需要满足软件设 计者的要求。利用设计过程中采集的信息,SOPC Builder 能够生成 C 和汇编头文件,这些 头文件定义了存储器映射,中断优先级和每个外设寄存器空间的数据结构。这样的自动生成