一、引言
目前,嵌入式系统已经渗透到各个领域:工业控制,军事国防,消费类电子产品,网络通信等,但大部分领域的应用都是基于国外各大厂商的嵌入式处理器。嵌入式系统是"控制、监视或者辅助装置、机器和设备运行的装置"(devices used to control, monitor, or assist the operation of equipment, machinery or plants)。从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。在嵌入式领域使用国产芯片,走国产化道路已经成为一个迫切需要解决的问题。
本设计采用了龙芯系列的GS32I SoC处理器,SoC的定义多种多样,由于其内涵丰富、应用范围广,很难给出准确定义。一般说来, SoC称为系统级芯片,也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。同时它又是一种技术,用以实现从确定系统功能开始,到软/硬件划分,并完成设计的整个过程。探讨并设计如何构造一个小型嵌入式硬件系统,同时兼顾科研与应用两方面的要求,在该平台的基础上可以连接各种外设进行嵌入式算法的实验。该系统经简单修改能方便地应用在军事、工业控制、数据采集等领域。
二、芯片简介
目前龙芯系列微处理器有龙芯1号,龙芯2号微处理器。龙芯2号集成了桥芯片,采用分离的32位地址/数据总线,因此本设计采用基于龙芯2号的GS32I SoC处理器。
GS32I高集成系统设备,提供了高带宽的存储总线,一个100/125MHz SDRAM控制器和一个SRAM/Flash EPROM控制器;EPROM(Erasable Programmable ROM,可擦除可编程ROM)芯片可重复擦除和写入,解决了PROM芯片只能写入的弊端。EPROM芯片有一个很明显的特征,在其正面的陶瓷封装上,开有一个玻璃窗口,透过该窗口,可以看到其内部的集成电路,紫外线透过该孔照射内部芯片就可以擦除其内的数据,完成芯片擦除的操作要用到EPROM擦除器。SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。48个GPIO口,其中22个专用,可以多路复用,以便在需要的时候能提供额外的功能;33/66MHz、32位PCI控制器(兼容PCI2.2);两个10/100M以太网控制器;通用串行总线(USB)主机及装置控制器,两个通用异步收发器,一个AC97控制器,一个PCMCIA控制器。GS32I提供了强健的电源管理,有空闲和睡眠两种省电模式,还提供有EJTAG接口,用于系统连续检查。
三、小系统的设计
龙芯GS32I SoC处理器是专门针对嵌入式领域研制的一款处理器。GS32I处理器是基于MIPS32指令集的高性能,低功耗的片上系统(SoC),主频可达 500MHz,工作频率在400MHz时功耗小于0.7w,使用了0.18uS的制造工艺。龙芯GS32I开发板以GS32I处理器为,内部集成桥芯片,集成了嵌入式产品所需的大量外设,包括系统外设、高速/低速外设、存储器接口、DMA等。由于龙芯GS32I优越的性能,低功耗,高集成度,目前已成功的应用于瘦客户机、网络服务器、路由器等网络设备。GS32I总线采用系统总线(SBUS)与存储器和外部设备通信。SBUS是GS32I处理器内部的36位物理地址和32位数据地址总线。需要高带宽或者需要离CPU近的设备连到SBUS总线,包括存储器控制器(SDRAM, FLASH/SRAM)、32位PCI总线接口控制器、DMA 控制器、USB1.1控制器和以太网控制器。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的哪些位被用来译码片选信号。本系统中,mem_stcfg0寄存器的DTY域设置为3,则对应的高四位35:32位的值为0000B,CSBA设置为0x07F0,CMASK设置为0x3FF0这样FLASH的地址就被映射到0x0 1FC0 0000-0x0 1FFF FFFF.
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的读写时序。设置完成后,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模块采用流水线结构的12位模-数转换器(ADC),内部由流水线ADO、基准电压源、控制逻辑、FIFO、缓冲器、采样保持器和多路器切换开关等组成。其功能有:片选信号CS,低电平有效,设置片选信号,以便与各种处理器连接,转换时钟或启动转换信号,单次转换时为启动转换,连续转换时是时钟输入信号。
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#端
此外,GS32I根据 MIPS EJTAG 2.5规范实现了EJTAG,并提供其外部接口。从而实现调试和执行调试能力的软硬件子系统。
四、结束语
对于使用国产芯片开发嵌入式产品的研究在我国还是刚刚起步,可以借鉴的开发资料和经验还不多见,希望本文所介绍的基于龙芯GS32I小系统的硬件设计可以对使用国产芯片进行嵌入式研究的人员具有一定的参考价值。嵌入式系统就是针对特定领域的专用的计算机系统,它融合了计算机软硬件技术,通信技术,半导体微电子技术,它随着单片机的发展逐渐成熟的。目前,嵌入式系统已经渗透到各个领域:工业控制,军事国防,消费类电子产品,网络通信等,但大部分领域的应用都是基于国外各大厂商的嵌入式处理器,在嵌入式领域使用国产芯片,走国产化道路已经成为一个迫切需要解决的问题。目前国内的芯片主要有星光系列、神威系列、青鸟嵌入式芯片、方舟系列、龙芯系列,这些芯片各有自己的特点。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。