基于PLD的嵌入式系统外存模块设计
FFH共28K字节,用来保存4段系统运行配置程序,每段长度可达7K字节;10000H-
1FFFFH共64K字节,用来作为采集数据的保存区域。RAM中的0000H~8FFFH共36K字节,用来作为数据的缓存区域。从上面的分析可以看出,最终设计的各项指标都已经超过实际的需求,能很好地解决实际应用问题。
4合理利用日EADY信号
最后介绍一下单片机就绪信号READY在这个系统中的关键作用。从前面的设计中可以看出系统存在着高速RAM和慢速HashROM存储器,开始时,HashROM选用了AT29C1024-70JCt31,它是该型号中速度最快的,有效数据建立时间仅为70ns。单片机不插入等待周期的读写时序,如图5所示。
从ALE下降沿地址有效到/RD上升沿的时间是80ns,Hash的响应时间为70ns,再加上EPLD的延时就造成了单片机从HashROM读取数据的不稳定,表现在无法对FlashROM进行在线写入、经常发生错误的执行结果、死机等。为此必须加入等待周期,延长读、写时间才能满足HashROM的要求。在这里只需插入一个等待周期(100ns)便可以满足要求,因此设置芯片配置字节CCR.5=0,CCR.4;0[1]。这样,当READY信号为低电平时便自动插入且仅插入一个等待周期。一个简单的做法就是把FlashROM的片选信号/CS2连接到READY,这样,当选中FlashROM芯片时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)
可是实际故障依旧,通过测试得到的时序信号如图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的判断。修改后系统工作稳定、正常。修改后对HashROM的读写时序如图7所示, 《基于PLD的嵌入式系统外存模块设计(第4页)》
本文链接地址:http://www.oyaya.net/fanwen/view/143210.html
1FFFFH共64K字节,用来作为采集数据的保存区域。RAM中的0000H~8FFFH共36K字节,用来作为数据的缓存区域。从上面的分析可以看出,最终设计的各项指标都已经超过实际的需求,能很好地解决实际应用问题。
4合理利用日EADY信号
最后介绍一下单片机就绪信号READY在这个系统中的关键作用。从前面的设计中可以看出系统存在着高速RAM和慢速HashROM存储器,开始时,HashROM选用了AT29C1024-70JCt31,它是该型号中速度最快的,有效数据建立时间仅为70ns。单片机不插入等待周期的读写时序,如图5所示。
从ALE下降沿地址有效到/RD上升沿的时间是80ns,Hash的响应时间为70ns,再加上EPLD的延时就造成了单片机从HashROM读取数据的不稳定,表现在无法对FlashROM进行在线写入、经常发生错误的执行结果、死机等。为此必须加入等待周期,延长读、写时间才能满足HashROM的要求。在这里只需插入一个等待周期(100ns)便可以满足要求,因此设置芯片配置字节CCR.5=0,CCR.4;0[1]。这样,当READY信号为低电平时便自动插入且仅插入一个等待周期。一个简单的做法就是把FlashROM的片选信号/CS2连接到READY,这样,当选中FlashROM芯片时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)
可是实际故障依旧,通过测试得到的时序信号如图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的判断。修改后系统工作稳定、正常。修改后对HashROM的读写时序如图7所示, 《基于PLD的嵌入式系统外存模块设计(第4页)》