为缓解我国电子信息产业快速发展与核心技术人才紧缺的矛盾,中电网(ECCN)在信息产业部的支持下,联合国际著名集成电路设计厂商和清华大学等国内顶级高校,隆重推出电子工程与集成电路技术培训项目。所开课程包括FPGA/PLD、数字处理器、嵌入式 SoC 以及模拟和射频技术等。其中,FPGA培训是与Altera公司和清华大学共同推出的,并最先开课。本刊将陆续整理培训的精华内容与读者分享。更多详情敬请登录 http://training.ECCN.com/ 。
嵌入式系统定义
计算系统无处不在,除个人计算机及笔记本电脑外,为不同目的构造的计算系统更为广泛,这类系统通常嵌入在更大的电子器件内,完成特定功能。此即嵌入式计算系统,简称嵌入式系统。
嵌入式系统采用专用计算机硬件,它带有为解决专门问题或任务而设计的软件,一般利用“内含”的微处理器,与其他硬件和软件组合,处理专门的计算问题。除了微处理器和存储器外,嵌入式系统通常有混合的硬件功能,如定时器、中断控制器、UART、通用输入和输出(GPIO)引脚、直接存储器存储(DMA)控制器、实时时钟和液晶显示控制器等(如图1所示)。而嵌入式系统的软件则划分为操作系统与应用软件等两个主要类型。
图1 嵌入式系统基本框图(略)
片上系统SOC
片 上系统SOC定义为芯片内包含一个或几个微处理器的ASIC、ASSP或FPGA。其硬件设计有以下特点:芯片内包含一个(或几个)微处理器;安装微处理器IP核;开发成本极高;及包含高的定制硬件内容等。
嵌入式系统的软硬件设计
嵌 入式系统的软件设计重点在于微处理器的内部操作如何进行,而硬件设计重点则是总线接口。与微处理器的逻辑连接要遵循总线协议的全部规则,才能保证硬件设计正确无误。具体的内部操作包括:指令集、寄存器、Cache、流水及存储器管理单元(MMU);外部接口包括:存储器总线接口、协处理器总线接口及中断等。
嵌入式处理器 Nios ? II
什么是 Nios II嵌入式处理器?
Nios II 嵌入式处理器是Altera 公司推出的第二代32位RISC指令集软核处理器,基于哈佛结构。Nios II Plus所有的外设均采用HDL语言编写。
当前的设计难题是如何降低成本、复杂度和系统功耗。传统设计中I/O设备、CPU 或DSP均单独存在,这使得嵌入式系统的成本、功耗及性能成为了主要矛盾,而解决的方法即可采用可编程逻辑器件代替外部器件。
FPGA硬件设计流程
FPGA硬件的设计流程包括:首先,对设计的行为或结构进行描述,给出设计输入与寄存器转移级 的RTL代码;进行RTL仿真,包括利用Modelsim或Quartus ? II软件的功能仿真,以及在无时序延时下的逻辑模型和数据流程验证;而后,利用软件进行综合,将设计编译成明确的原始器件,根据目标器件和约束来优化生成的链接,在此过程中可能会用到Quartus ? II、Spectrum及Synplify软件;在综合的基础上布局布线,根据面积和性能约束,在目标工艺内映射基本单元到规定的位置;布局布线后,需进行时序分析,检验是否满足设计性能;之后,进行门级仿真,检验设计是否可以在目标工艺内工作;最后,在 PC 板上对FPGA进行测试,包括:在板上编程和测试器件、用SignalTap II片内逻辑分析仪对系统调试等。
图2 标准设计模块图(略)
图2给出了标准设计的模块图,虚线框起来的部分是嵌入式处理器所包含的内容。图中,虚线框内除片内存储器外均可视作软核,而虚线框外的则是一些硬件。
Nios II 处理器基于经典的流水线RISC结构,包括:32个通用寄存器、3种指令格式、32 位指令、32位数据线宽度、展平寄存器堆、可选的指令和数据Cache、32个中断源及基于JTAG的硬件调试单元等。
Nios II 处理器核本身,包括算术逻辑单元(ALU)、通用寄存器、控制寄存器、程序控制器和地址产生器等。因为采用哈佛结构,所以其指令和数据是分开的。
Nios II 嵌入式处理器性能指标
追踪数据( Trace Data )
CPU在执行指令或当加载、存储操作发生时,由JTAG 控制台显示的CPU 汇编程序运行情况的数据,即追踪数据(Trace Data)。
软件断点
软件断点是通过在代码中插入中断来实现,使用TRAP指令,它要求程序存储器必须是可写的。软件断点可用于暂停一行代码。
图3 典型的Nios II系统结构(略)
硬件断点
硬件断点是通过触发专用的硬件中断实现,可用来暂停硬件连接。硬件断点因为不接触代码而不关心程序存储器是否可写,因此用户可以调试存在于ROM或FLASH 中的代码。
中断
图4给出了Altera 所有的中断请求,包括中断的静止、使能、在中断服务子程序中的应用、有屏蔽中断及无屏蔽中断等。
图4 Altera中断指令(略)
硬件乘法器
可通过硬件乘法器实现Nios II 嵌入式处理器 的加速。其中,Nios II嵌入式处理器经济型无乘法硬件,因此需使用GNUPro数学库实现乘法器;Nios II嵌入式处理器标准型与快速型中,均包含丰富的硬件乘法器资源, 区别在于前者要求3个时钟周期,而后者只需1个。
图5 Avalon总线分配器对多时钟域的支持(略)
Avalon 总线分配器
A valon 总线分配器遵循Nios II嵌入式处理器的互连规范,其主要设计目的是令总线使用较少的资源。它的传输类型包括从传输、主传输、流传输、延时可预知的传输及突发传输等。
图6 紧耗合主设备(略)
1)Avalon主端口
Avalon总线分配器需初始化传输,传输类型包括基本读操作和基本写操作。所有的 Avalon 主设备均产生一个等待请求信号,在仲裁器许可后,传输属性将包括延时、流或突发传输。
2)Avalon从端口
A valon总线分配器对从端口的传输请求响应,传输类型包括基本读操作和基本写操作。其传输属性除主设备涉及的延时、流及突发传输外还包含等待状态,等待主端口的请求。
3)对多时钟域的支持
如图5所示,当有一个主时钟域及三个从时钟域时,需插入时钟域交叉逻辑CDX,从而将主时钟域分配给三个从时钟域。而当有两个主时钟域及一个从时钟域时,可在某个主时钟域内插入时钟域交叉逻辑CDX ,而后经过仲裁器重排选组接入设备。
图7 嵌入式系统软件开发流程(略)
紧耦合主设备
紧耦合主设备,可视作高速局部总线,它为片内存储器提供快速通道。紧耦合主设备通过Avalon通道连接到紧耦合的从设备,其中,从设备可以是片上双端口存储器。紧耦合的指令存储器是双端口存储器,因此标准的数据主设备能连接到第二个端口,允许读写数据(如图6所示)。
Nios II 嵌入式处理器例外地址
N ios II嵌入式处理器例外地址也即异常地址,所有的例外进程均需在“exception location”中完成编码。支持的例外类型包括软件例外,即软件陷阱与无效指令等,及硬件中断。
Nios II嵌入式处理器的重要外设
Nios II嵌入式处理器的重要外设包括:系统 ID 外设,用来确保硬件和软件同步,可在运行时间内停止以确保下载的硬件和软件映像相匹配;存储器接口;液晶显示器;JTAG UART,包括器件设置、FLASH 设计、代码下载及调试等;及紧凑的FLASH 接口,提供了对大规模存储及低水平API、MicroC/OS-II文件系统及μCLinux 文件系统的支持。
嵌入式系统一般软件开发流程
嵌 入式系统的软件开发流程如图7所示,不同的编译语言,如C++、C或组合语言,经编译器生成目标码文件,通过链接器连接起来,完成可重定位器程序后生成可执行文件。
图8 SOPC Builder软件开发流程(略)
链接脚本文件
在嵌入式系统中,链接的过程还有一个重要的任务是进行内存的分配。链接器要负责调整可执行文件在内存中的位置,但是链接器如何将可执行文件分配到正确的内存位置,需要参考“链接脚本文件 (Link Script file)”。
链接脚本文件是由设计者进行系统设计时,仔细规划内存分配生成的文件,包括程序区和数据区等。与通用桌上系统软件开发不同,嵌入式系统要由设计者自行分配内存,通过建立链接脚本文件确定模块的具体位置。
Nios II IDE(综合开发环境)
Nios II IDE(综合开发环境)是一款领先的软件开发工具,它的目标器件的连接是通过硬件 (JTAG)、指令设置模拟器及ModelSim ? -Altera软件等,具有高级硬件调试特性,如软硬件断点设置、数据触发和跟踪等。同时,提供了对闪存设计的支持。
Nios II IDE 5.0与Quartus II 5.0 软件保持同步关系,支持的平台包括:Windows NT 4.0、XP Professional、Windows 2000、Linux 7.3及8.0版等。
硬件抽象层
硬件抽象层(HAL)是Nios II软件的一个轻型的运行时间环境,在应用程序代码和底层硬件间提供了一个抽象层。硬件抽象层库由Nios II IDE产生,包含器件驱动程序、初始化软件、文件系统及stdio、stderr 等。
硬件抽象层为嵌入式系统的各种共有的器件提供普通的器件模式,如,时间、I/O外设等。它提供一个一致的 POSIX-,令不熟悉专用外设结构的软件工程师尽可能熟悉编程。硬件抽象层的关键特性包括:在恰当的地方使用标准接口;接近于Newlib ANSI C库的集成;器件驱动自动配置成匹配PTF;驱动在main()前初始化;及消除了系统和应用软件之间的差别等。
硬件抽象层的系统头文件system.h位于syslib工程目录中,包含系统参数(包括外设配置)的宏定义,如,外设的硬件配置、基地址、中断的优先级及外设的名称等,不包含静态信息、函数原形及设备结构。因为不必包含在应用代码中,节省了编译时间。
N ios 中使用 Volatile 指针访问硬件,但不能使用Cache。而Nios II中,Volatiles 可以使用Cache对硬件寄存器进行访问,也可以使用输入/输出宏进行硬件的存取。
数据缓存
数据缓存是直接映射的,在缺省情况下,所有数据都被缓存。为了旁路缓存,维持存储器的一致性,应在DMA传输之前,使用 alt_dcache_flush()进行Flush操作;使用 alt_uncached_malloc()在堆上分配不可缓存的区域;使用alt_remap_uncached()对存储器中已经存在的某个区域进行重新映射;及使用ldio或stio汇编指令。
软件的运行和调试
软件的运行和调试包括 Nios II Run、Nios II IDE JTAG 诊断器、Nios II ISS、Nios II Console及第三方工具等。
RTL仿真
N ios II SOPC Builder 可以自动生成仿真模型,包括ModelSim工程、Testbench及仿真脚本等,仿真平台如图9所示。
图9 仿真平台(TestBench)
SignalTap TM II 逻辑分析工具
SignalTap 逻辑分析工具无须探针,通过JTAG 接口送出内部状态信息进行分析。SignalTap II 逻辑分析工具的运行频率最高可达200MHz,它支持多个分析器、拥有1024个通道、128k的采样速率及10个触发级别,可以与Nios II IDE诊断器及FS2控制台同时使用。
本文介绍了Nios II嵌入式处理器的软硬件设计及仿真调试,需要注意的是,当提供自行设计的外设时需进行定制,Nios II嵌入式处理器提供了定制指令。 |