用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

基于PLD的嵌入式系统外存模块设计

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 23:57:25
从上面这个简单的例子可以看出,这种存储器组织方法大大简化了编程的的复杂性,并且可以采用对位置指针赋初值的方法来实现对扩展存储器中任何一个位置的读写操作。

3 地址分配

有了上面的存储器扩展方法,再结合系统的技术参数和单片机的特点,就可以做出一套合理的内存地址分配方案。下面给出单片机的地址划分情况:

0000H~01FFH 系统寄存器区,保留0200H~1EFFH用户区,直接映射到Flash ROM中的

0200H~1EFFH 可以用来存放数据、程序等,该区域可以由单片机直接进行寻址。

1FOOH~1FFFH 用户区,实际使用中把Address—1lR、Address_F_WP等地址以及一些特殊设备如A/D转换器、LCD显示屏等的访问地址设置在这个区域。

2000H~207FH 该区域是中断向量区、芯片配置字节区、保留字区等,直接映射到Flash ROM中的2000H-207FH。

2080H~8FFFH 用户区,单片机启动也是从 2080H 处开始执行程序的,因此把这个地址范围直接映射到 Flash ROM 的2080H~8FFFH,该区域设置系统的引导、初始化等程序。

9000H~FFFFH 用户区,将这一段映射到 RAM 的9000H~FFFFH,作为系统程序的运行区域。
javascript:window.open(this.src);" style="cursor:pointer;"/>
    上面的分配方案可以通过对地址总线进行译码生成相应的片选信号/CSl和/CS2来实现。这样分配后,Flash ROM 和 RAM 的使用情况如图4所示。

图4中白色区域是单片机通过总线直接寻址的区域,可以由单片机直接进行访问。灰色区域为内存的扩展区域,不能被单片机直接访问,但可以通过前面介绍的方法由EPLD生成地址进行读写操作。下面简要介绍一下各个区域在实际中的用途:Flash ROM中的0000H~1FFH和1F00H~1FFFH因为容量很小,没有被利用。系统启动后从Flash ROM的2080H处开始执行程序,将2000H~8FFFH的内容复制到RAM中的9000H~FFFFH,然后跳转到RAM中执行系统程序。由于Hash ROM的速度慢,需要在读写过程中插入一定量的等待周期,因此将程序复制到RAM中执行可以提高系统的性能;同时系统在对Flash ROM进行写入操作后,编程阶段的10ms内不能对其进行读取,因此RAM在这个时候也提供了程序运行的位置。这样分配后,程序的长度被限制在28K字节,实际中这个数量完全可以满足系统的需求。Hash ROM中的9000~FFFFH共28K字节,用来保存4段系统运行配置程序,每段长度可达7K字节;10000H-

1FFFFH共64K字节,用来作为采集数据的保存区域。RAM中的0000H~8FFFH共36K字节,用来作为数据的缓存区域。从上面的分析可以看出,最终设计的各项指标都已经超过实际的需求,能很好地解决实际应用问题。

4 合理利用日EADY信号

最后介绍一下单片机就绪信号READY在这个系统中的关键作用。从前面的设计中可以看出系统存在着高速RAM和慢速Hash ROM存储器,开始时,Hash ROM选用了AT29C1024-70JCt31,它是该型号中速度最快的,有效数据建立时间仅为70ns。单片机不插入等待周期的读写时序,如图5所示。

从ALE下降沿地址有效到/RD上升沿的时间是80ns,Hash的响应时间为70ns,再加上EPLD的延时就造成了单片机从Hash ROM读取数据的不稳定,表现在无法对Flash ROM进行在线写入、经常发生错误的执行结果、死机等。为此必须加入等待周期,延长读、写时间才能满足Hash ROM的要求。在这里只需插入一个等待周期(100ns)便可以满足要求,因此设置芯片配置字节CCR.5=0,CCR.4;0[1]。这样,当READY信号为低电平时便自动插入且仅插入一个等待周期。一个简单的做法就是把Flash ROM的片选信号/CS2连接到READY,这样,当选中Flash ROM芯片时READY信号就跟随/CS2同时变为低电平。按照这样的设想可在EPLD内部重新设置READY信号,描述如下:

ready=!(((a[15..0]>=H"0200")&(a [15..0]<:=H"1EFF"))

#((a[15..0]>=H"2000")&(a[15..0]<=H"8FFF"))#(a[15..0]= =Address_F_R)

#(a[15..0]= =Address_F_W)&! ALE)
javascript:window.open(this.src);" style="cursor:pointer;"/>
    可是实际故障依旧,通过测试得到的时序信号如图6所示。

READY信号的产生落后ALE下降沿5ns,造成READY信号产生无效,解决这个问题的唯一方法是提前生成READY信号。实际中有效地址是在ALE下降沿锁存后产生的,这也是READY信号产生表达式中最后一项的来源,但是考虑到地址的产生应该发生在ALE下降沿之前,以保证锁存到正确的地址。因此大胆设想让READY信号的产生不再受ALE的控制,只要总线上产生地址就可以作出判断,从而提前生成READY信号。但这样的做法破坏了同步时序,而且异步生成READY信号容易产生冒险现象。通过分析,可以发现异步生成

READY信号并不会带来任何不稳定因素,因此修改READY信号如下:

ready=!(((a[15..0]>=H"0200")&(a[15..0]<=H"1EFF"))

#((a[15..0]>=H"2000")&(a[15..0]<=H"8FFF"))

#(a[15..0)= =Address_F_R)

#(a[15..0]= =Address_F_W)

即去掉了对地址有效信号ALE的判断。修改后系统工作稳定、正常。修改后对Hash ROM的读写时序如图7所示,而对RAM读写的时序依旧是图6,目的达到。考虑到插入一个等待周期后大大增加了读写时间,因此将AT29C1024-70JC换成廉价的AT29C1024-12JC(有效数据建立时间为120ns)[3],系统依然能够稳定工作。通过使用,证明这种存储器设计方案是可行的。
javascript:window.open(this.src);" style="cursor:pointer;"/>
    前面详细地介绍了一种实用的存储器扩展方法,该方法是基于PLD器件实现的,有效地解决了嵌入式系统,尤其是数据采集、存储系统中内存扩展的问题。该方法能够简化程序设计,并且不需要随CPU型号的变化而修改设计,具有很好的可移植性。同时还给出了一种较为复杂的单片机外部存储器的组织方案,包括了Flash ROM和RAM构成的存储系统。最后提出了将READY信号由同步产生改为异步产生的方式,解决了CPU在高速RAM与低速Flash ROM之间切换产生的问题,最终设计成了一套较为完善的CPU外部存储器系统。



上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:11,796.88000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号