基于国产龙芯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管脚作为外设的数据信号和控制信号。
(1) 串口的设计
RS232收发器使用MAXIM公司的MAX3232,采用最简单的三线制接法,即地、接收数据和发送数据三脚相连,原理图如下所示:
图5 串口电路原理图
(2) 键盘驱动和数码显示驱动
4×4键盘和四位LED显示用于人机交互。4×4小键盘采用专用的键盘译码芯片74C922,中断方式连接,通过GPIO1触发中断。显示模块是四位共阴极LED七段数码管,段码通过共阴极数码管驱动器74LS248驱动,位码用74LS373寄存器送数据。这个设计比较简单,限于篇幅,略去原理图。
(3)A/D和D/A转换模块的设计
A/D 和D/A使用封装小,功耗低,且能满足高速采样系统的串行转换器,这样适合嵌入式系统的要求。串行A/D和D/A转换器发送与接收数据是通过GS32I的GPIO口来实现的。本设计中用次级GPIO口作为串行数据的输入输出,主GPIO产生中断。
A/D转换器使用的是AD 公司的高速12 位A/D 转换器AD7896, 转换速率为100kHz, 单电源供电(2.7V~ 5.5V )。首先通过八选一开关74HC4351输入模拟量,通过GPIO口GPIO2O2写CVRT#W为低电平,开始模数转换。由于CVRT#信号要求至少保持40ns,所以GPIO2O2通过74LS123展宽为40ns后再输入至CVRT#。转换完成后,通过GPIO0信号触发中断,CPU通过GPIO口的GPIO201串行接收数据,整个转换周期只需10us。
D/A转换器采用12位数模转换器AD8300,GS32I通过GPIO口串行发送数据到AD8300。由于AD8300接收12位数据要求CS# 至少保持720ns,所以提供片选的GPIO207通过74LS123后再接至AD8300的CS#端。数据发送完成后,通过GPIO口GPIO206发送一个信号到AD8300的LD#,把串行输入寄存器的数据送到AD8300的DAC寄存器,开始进行数模转换。
此外,GS32I根据 MIPS EJTAG 2.5规范实现了EJTAG,并提供其外部接口。从而实现调试和执行调试能力的软硬件子系统。
四. 结束语
对于使用国产芯片开发嵌入式产品的研究在我国还是刚刚起步,可以借鉴的开发资料和经验还不多见,希望本文所介绍的基于龙芯GS32I小系统的硬件设计可以对使用国产芯片进行嵌入式研究的人员具有一定的参考价值。
本文作者的创新点:使用龙芯GS32I自行设计了嵌入式开发板,选择嵌入式Linux操作系统,配合相关驱动程序和上层应用程序,可以实现各种电子产品的开发。使用国产芯片开发的产品在政府部门、军事、国防等安全性较高的领域有广阔的应用前景。
参考文献
1. 基于嵌入式系统的虚拟仪器设计,程兴亚,《微计算机信息》2004年第12期
2. GS32I_NC_TVIA5005硬件手册 北京神州龙芯集成电路有限公司 2004
3. http://www.blxcpu.com 北京神州龙芯集成电路有限公司 2005-07-1
4. GS32ITM Processor from BLX Data Sheet北京神州龙芯集成电路有限公司 2004