基于国产龙芯GS32I的小系统的硬件设计
扫描二维码
随时随地手机看文章
一. 引言
目前,嵌入式系统已经渗透到各个领域:工业控制,军事国防,消费类电子产品,网络通信等,但大部分领域的应用都是基于国外各大厂商的嵌入式处理器。在嵌入式领域使用国产芯片,走国产化道路已经成为一个迫切需要解决的问题。目前国内的芯片主要有星光系列、汉芯系列、神威系列、青鸟嵌入式芯片、方舟系列、龙芯系列等,这些芯片各有自己的特点。
本设计采用了龙芯系列的GS32I SoC处理器,探讨并设计如何构造一个小型嵌入式硬件系统,同时兼顾科研与应用两方面的要求,在该平台的基础上可以连接各种外设进行嵌入式算法的实验。该系统经简单修改能方便地应用在军事、工业控制、数据采集等领域。
二. 芯片简介
目前龙芯系列微处理器有龙芯1号,龙芯2号微处理器。龙芯2号集成了桥芯片,采用分离的32位地址/数据总线,因此本设计采用基于龙芯2号的GS32I SoC处理器。
GS32I高集成系统设备,提供了高带宽的存储总线,一个100/125MHz SDRAM控制器和一个SRAM/Flash EPROM控制器;48个GPIO口,其中22个专用,可以多路复用,以便在需要的时候能提供额外的功能;33/66MHz、32位PCI控制器(兼容 PCI2.2);两个10/100M以太网控制器;通用串行总线(USB)主机及装置控制器,两个通用异步收发器,一个AC97控制器,一个PCMCIA 控制器。GS32I处理器内部还实现了与MIPS32兼容的基于TLB的虚拟地址转换单元、例外机制、中断机制、指令控制、时钟产生等功能。GS32I提供了强健的电源管理,有空闲和睡眠两种省电模式,还提供有EJTAG接口,用于系统连续检查。
三. 小系统的设计
GS32I总线采用系统总线(SBUS)与存储器和外部设备通信。SBUS是GS32I处理器内部的36位物理地址和32位数据地址总线。需要高带宽或者需要离CPU近的设备连到SBUS总线,包括存储器控制器(SDRAM, FLASH/SRAM)、32位PCI总线接口控制器、DMA 控制器、USB1.1控制器和以太网控制器。不需要高带宽连接的设备均连至片上外部总线PBUS,外部总线的频率始终是系统总线(SBUS)频率的一半。 PBUS设备包括电源控制单元、中断控制器、时钟定时器、通用I/O、UART、AC97控制器。
1. 系统总体设计
小系统硬件功能框图如图1所示:
图1 总体框图
系统设计包括CPU启动和复位电路以及外部I/O设备的地址扩展;包括FLASH和SRAM在内的存储系统的设计;RS232串口;用于人机交互的4×4小键盘和4位LED数码管,另外还提供了八路开关量的输入/输出、 A/D和D/A转换器以及用来实验和测试的EJTAG接口等。
2. 系统的启动与复位
龙芯GS32I支持16位和32位启动。管脚 ROMSEL和ROMSIZE的状态决定了CPU启动ROM的宽度和类型,此表如下所示:
表1:
基于系统国产化的需求,使用免费开放源代码的Linux操作系统便于实现国产化。为了方便其嵌入,本系统设置为32位FLASH启动,即把ROMSEL和 ROMSIZE都置为低电平。启动时,若ROMSEL为低电平,则RCSO#缺省设置为有效,并且对Ox0 1FCO 0000使能,CPU从物理地址Ox0 1FCO 0000地址开始执行程序。因此,FLASH或ROM的起始地址应该通过RCS0#映射到此处。系统复位模块提供GS32I处理器的硬件复位和软复位。当管脚VDDXOK和RESETP#都有正电平跳变时,硬件复位有效,这一般在系统加电时产生。
若电源供电正常,且VDDXOK保持,当RESETP#发生正电平跳变时,软件复位有效。这种复位对一些寄存器,特别是系统控制块寄存器没有影响。复位芯片采用可监视供电电源的低功耗芯片MAX811SU,电路原理如下图所示:
图2 RESET电路
3. 存储系统的设计
GS32I提供了高带宽的存储总线,一个100/125MHz SDRAM控制器和一个SRAM/Flash EPROM控制器。SRAM/Flash EPROM控制器可以支持FLASH 、SRAM、LCD 、PCMCIA和外部I/O设备等。
针对存储容量要求比较低的小型嵌入式系统,SRAM设计为16M bit,FLASH设计为64M bit,已能够满足应用需求。SRAM/Flash EPROM控制器有四个可编程的片选信号RCS0#~RCS3#,本文将RCSO#,RCS1#用于FLASH和SRAM,RCS2#用做对外部I/O设备的地址扩展。
本设计采用了2片Intel公司的28F320C3 FLASH,作为系统ROM区,存放操作系统和用户应用程序;两片ISSI公司的IS61LV51216 SRAM,作为系统RAM区,存放系统数据和用户数据。其中RCS0#用于FLASH的片选信号,与FLASH的CS#连接,RCS1#用于SRAM的片选信号。关于存储器的硬件设计示意图如图所示:
图3 存储系统的硬件设计示意图
⑴ FLASH接口设计及相关寄存器的设计
28F320C3 FLASH的存储容量为2M×16 bit。由于SRAM/Flash EPROM控制器设置为32位总线宽度,使用两片28F320C3 FLASH扩展为32位总线宽度,地址线连接至GS32I地址总线的RAD2~RAD22,每次读取四个字节; GS32I复位后起始地址是 0x0 1FC0 0000,FLASH的地址被装载到此处,每个片选信号的地址映射范围是通过设置片选地址寄存器mem_staddr0来实现的,片选地址寄存器 mem_staddr0的格式如下所示:
当E位置为1并且满足条件“(physical_addr&CSMASK)==CSBA”时,片选信号将变为有效。 physical_addr是内部系统总线作为输出的实际的36位物理地址,CSBA用来指定这个片选信号的物理基地址的31:18位,CMASK用来指定CSBA的哪些位被用来译码片选信号。CSBA的高四位,也就是35:32位由mem_stcfg0寄存器的DTY域来决定。本系统中,mem_stcfg0寄存器的DTY域设置为3,则对应的高四位35:32位的值为0000B,CSBA设置为0x07F0,CMASK设置为 0x3FF0这样FLASH的地址就被映射到0x0 1FC0 0000—0x0 1FFF FFFF。[!--empirenews.page--]
FLASH最快读取速度为70ns, CPU系统总线周期为10ns(100MHz),因此在读取FLASH时需要插入等待状态,通过设置静态时序寄存器mem_sttime0来插入等待周期。静态时序寄存器mem_sttime0的格式为:
Ta域为数据有效时片选信号要求插入的周期数,考虑到系统的稳定性,根据FLASH的读取参数,插入7个等待周期,因此Ta域设置为7。Ta域默认值为29,在选取启动ROM芯片时,若芯片读取参数需要插入的等待周期超过29,则这种芯片不可用。Tcsh域用来指定在两次访问期间片选信号保持的时钟周期数,这里设置为0。
⑵ SRAM接口设计及相关寄存器的设计
SRAM的存储容量设计为512K×32位,可使用两片IS61LV51216 SRAM(512K×16)通过位扩展实现。将RCS1#连接到SRAM的片选信号CS#上,地址线连接至GS32I地址总线的RAD2~RAD20,地址范围是通过设置片选地址寄存器mem_staddr1来映射的,设置方法与mem_staddr0的实现相同。
SRAM时序与CPU的配合是通过设置静态时序寄存器mem_sttime1来完成的,mem_sttime1的格式与的mem_sttime0相同。IS61LV51216 SRAM的读写速度最快为10ns, 片选信号RCS1#插入一个等待周期,Ta域设置为1,Tcsh域设置为0。对于SRAM的写入,与其相关的域有Twcs,用来指定写脉冲RWE#后片选信号RCS1#保持的时钟周期数, Tcsw用来指定片选信号RCS1#有效后的几个时钟周期插入RWE#,Twp用来指定RWE#持续的时钟周期数。根据SRAM的参数和SRAM的读写时序,本设计中,Twcs,Twp都设置为0,Tcsw设置为0000b,这样使SRAM与CPU的时序能够配合且保证系统的稳定性。设置完成后,SRAM 的读写时序如下图所示:
图4 SRAM读写时序图
4.其他外部设备的设计
GS32I处理器提供48个GPIO口,其中22个专用,48个GPIO中的32个由主GPIO块控制,另外16个是次级GPIO口。每个GPIO 口可以被配置作为输入或输出,并且能够连接到内部中断控制器对输入的信号产生一个中断。本设计中采用GPIO管脚作为外设的数据信号和控制信号。