基于NiosII的智能多接口片上系统设计
扫描二维码
随时随地手机看文章
摘 要: 设计了一种基于NiosII处理器的片上系统(SoC),集成了NiosII处理器IP、PCI接口IP、网络接口IP以及基于Wishbone总线的串行接口IP核、CAN接口IP核等。系统具有可重配置、可扩展、灵活、兼容性高、功耗低等优点,适合于片上系统开发与应用。本设计使用Verilog HDL硬件描述语言在QuartusII环境下进行IP软核设计、综合、布局布线,在Model Sim下完成功能、时序仿真,在SoPC下完成系统的定制与集成,在NiosII IDE环境下完成片上系统软件程序的开发,最后在FPGA器件上实现了智能多接口功能的片上系统。
关键词: FPGA;NiosII;片上系统;IP核
随着超大规模片上系统需求的日益增多,基于传统IC芯片的微电子应用系统设计技术正在转向基于知识产权IP(Intellectual Property)核的片上系统技术发展[1]。因此,基于资源IP核的复用设计方式已开始逐渐成为国内外微电子系统设计的一项支撑技术。从应用功能角度划分IP核有三大类[2]:微处理器IP核(如8位8051核、32位NiosII、Microblaze核等)、各种接口IP核(如SDRAM控制器、PCI总线接口、CAN总线接口、串行总线接口IP核等)和专用算法IP核(图形编解码H.264、加密核等)。使用IP核复用技术,将IP集成到FPGA芯片上,可缩小PCB板体积,降低功耗;还可以根据需要进行功能的升级、扩充和裁减[3]。本文以Altera公司的NiosII为主处理器并集成PCI接口、串行接口、CAN接口、网络接口设计为例,说明片上系统的设计方法。
1 设计原理
采用片上系统设计的智能多接口模块一般可以不需要外部主处理器操作系统的干预,其典型结构如图1所示。在工作时,片上系统收到的信号经过本板上Nios II处理器处理转换后,即可将数据信号送出或做其他处理。信号转换、处理工作全部由片上系统完成,不增加外主处理器操作系统的软件开销,因而对整个系统的负担更小。也可以要通过接入的PCI等系统总线,以中断提请等方式向外部主处理器提请访问,可完成与外主处理器的数据交换[4]。
在开源OpenCores组织的网站上,可以获取大量共享IP核, 但是大多数是未被验证的,或者由于是不同人撰写的,其代码风格也不尽相同。其接口信号定义为标准Wishbone总线形式,Wishbone着重定义IP核的接口信号和总线周期标准来实现IP核的重用。通过对IP软核代码的分析,在原代码的基础上可通过修改IP核的部分逻辑功能(如增加内嵌数据收发FIFO深度),优化部分接口逻辑;通过对异步信号同步采样一次,可以去干扰,消除亚稳态以及虚假的Glitch;可通过增加复位状态寄存器等实现优化设计。最终完成基于Wishbone总线的IP软核设计。下面以串行接口IP核设计为例说明,其他类型的IP核也可以通过类似方法获得。串行接口IP设计是以异步串行控制器16C550为原型的。
2.1.1 波特率发生器设计
波特率发生器通过两个8位的分频寄存器实现,它提供发送数据和接收数据的基准时钟。波特率发生器产生的时钟是串行数据波特率的16倍。上电复位后两个分频寄存器都为00H,不使能所有的I/O操作。
2.1.2 数据收发
数据发送主要由线控制寄存器、计数器、FIFO控制器、发送FIFO、发送移位寄存器等实现。在波特率设置好后,计数器统计帧数据的位数,确保发送的帧数据包括起始位、有效数据位、奇偶校验位、停止位。发送FIFO可以暂存总线接口发送过来的数据,数据从发送FIFO移入到输出移位寄存器,每16个时钟时间向外发送一位数据,先发送起始位,有效数据从移位寄存器的高位逐位移出,最后输出奇偶检验位和终止位。当发送FIFO内的数据低于FIFO设置触发深度时,会触发发送FIFO空中断。
数据接收由线控制寄存器、计数器、接收FIFO和输入移位寄存器等组成。接收数据的线控制寄存器、计数器功能同发送模块。接收器始终监视着串行输入端,将8位串行数据逐位接收进来。数据接收后会通过移位寄存器暂存在接收FIFO中, FIFO深度可支持1 B、32 B、64 B、128 B等。
2.1.3 中断设计
串行接口IP核中包含一个8位的中断使能寄存器(IER)和一个8位的中断识别寄存器(IIR)。中断使能寄存器可以使能5种中断源,分别是:接收线状态中断、发送线状态中断、时间溢出中断、发送寄存器空中断、Modem状态中断等,共4个优先级。上电复位时默认状态为全部中断屏蔽。上电复位时IIR为C1H,通过读取IIR数值可获取相应的4路中断状态信息。
2.2 总线转换桥接逻辑设计
为了实现Wishbone和Avalon总线协议之间的协议转换, 根据两种片上总线的特性, 通过状态机的使用来实现总线协议的转换, 并使用软件仿真的方法建立模型来验证总线转换桥的可用性。 Wishbone到Avalon总线转换桥的总体组成原理如图3所示。
Wishbone到Avalon总线转换桥的基本功能是使得符合Wishbone总线体系结构的IP核可以在采用Avalon总线的NiosII 固核处理器片上系统中集成,从而实现对定制外设的访问。接口支持32位总线操作。总线转换桥由相对独立的Avalon主从端口单元和Wishbone主从端口单元组成,每个单元都有一套完整的功能来支持Avalon总线和Wishbone端口上所挂载的IP核之间的交易,读写数据实行分开存储,由配置和状态寄存器控制操作模式和数据的输入输出。Avalon总线接口逻辑与Wishbone接口逻辑两侧都包含本地状态机及其他控制逻辑,并且总线桥接口逻辑还包括地址译码、命令译码、接口控制状态机、数据输出MUX、奇偶校验输出、地址溢出检查等功能模块。
2.3 片上系统集成设计
基于NiosII固核处理器的片上系统集成是在SoPC Builder环境下完成的。片上系统集成主要完成对片上系统的定制、片上系统的资源分配、总线交换操作、中断处理等几个点关键技术点。
2.3.1 片上系统定制设计
片上系统的定制设计主要是完成片上系统集成所需要的处理器IP和外设IP的选型,是集成设计的第一步,设置系统主频,同时可选配指令、数据Cache大小、外部数据指令、硬件乘法器、流水线支持、浮点运算支持等特性,并设置NiosII的Cache和CPU直接相连的存储器。外设IP主要包括PCI总线接口IP、外部SRAM接口IP、外部Flash接口IP、外部GPIO接口IP、外部网络接口IP、自定制的基于OpenCore的串行接口IP核、CAN总线接口IP软核等。
2.3.2 片上系统资源分配
SoPC为各IP自动分配了一个默认地址。考虑到资源有效利用,还需要对系统资源进行重配置,主要包括:对Boot Loader的存储器选择和设置Boot Loader在存储器中的偏移;存放异常向量的存储器选择及其偏移量;各外设在Avalon总线上的偏移地址、中断号的分配;PCI总线对片上Avalon总线上设备的Memnry或I/O的空间以及地址映射;DMA传输配置;消息寄存器(Mailbox)双口RAM的使用等。具体分配如下:
(1)考虑到可以通过PCI到Avalon总线的地址映射,从PCI通过BAR端口直接访问两路UART、CAN、GPIO等设备,根据各接口IP地址特性,其他外设在Avalon端地址分配不冲突的前提下,有效分配Avalon地址资源,并可以在PCI端直接使用BAR2/BAR3以及Memory或I/O访问此类外设。
(2)可以通过Auto Bass Address操作,解决外设的地址分配冲突问题。通过调整其他外设地址避免与Flash地址的冲突。
(3)可通过手动方式修改各个外设的中断号,也可以通过Auto Assign IRQs 操作,自动分配中断号(最低为0,最高31)。
2.3.3 总线数据交换操作
PCI总线与Avalon总线实现互相访问,须先确定PCI核的资源配置,然后根据资源配置选择总线数据操作方式。从PCI总线方向看PCI软核主要有以下几个部分:寄存器组、BAR0~BAR3、DMAC、PCI访问端口。带有PCI核的整体架构如图4所示。