当前位置:首页 > 电源 > 数字电源
[导读]摘要:以MCS-96系列单片机为例,介绍了一种采用可编程逻辑器件(PLD)的存储器模块的设计方案,该模块包含了Flash闪存和RAM。提出了一种方便的存储器扩展方法,该方法有效地解决了嵌入式系统尤其是数据采集、存储等系统

摘要:以MCS-96系列单片机为例,介绍了一种采用可编程逻辑器件(PLD)的存储器模块的设计方案,该模块包含了Flash闪存和RAM。提出了一种方便的存储器扩展方法,该方法有效地解决了嵌入式系统尤其是数据采集、存储等系统中存在的存储空间不足问题。该方案具有通用性强、读写控制简单等特点,具有很强的实用性。

在嵌入式系统中,由于设计成本和体积等因素的限制,往往会使CPU(包括DSP、单片机等)存在地址空间不足的问题。很多文献(如参考文献[1]都有相关的存储器扩展方法的介绍, 目前已有的方法通常是借助于CPU的I/0接口产生片选或者高位地址信号,利用这些信号将内存分页,但当页间跳转时将给程序设计带来不便。对于没有内部存储器并且采用统一编址的CPU,如80C196KC20[1],这种页间切换将造成CPU无法继续执行当前程序而产生错误(见图1)。在CPU执行页面切换操作后,本应该继续执行页面1的指令,可是却错误地执行了页面2中的相应指令,这种结果不是所需要的。因此寻找一个有效的存储器扩展方法是实际应用中亟待解决的问题。

 

1 存储器扩展方法解决方案

在对MCS-96系列单片机的使用中发现,64K字节的存储空间用来存放程序能满足绝大多数的使用需求(通常用户的应用程序不到10K字节),但如果使用其进行数据存储控制,则会带来存储空间上的严重不足。通过对实际应用的统计分析发现,在很多情况下,数据的

存取仅限于顺序的连续操作。利用这个特点,可以对数据存储空间进行简化设计,具体的说就是通过对同一个地址连续读或者连续写来进行批量数据的存取,从而节省地址空间。在16位CPU中,可以将任何一段64K字(2的16次方)的存储空间映射到两个地址(一个作为读取的位置,一个作为写入的位置),采用这样的映射方法可以将内存最大扩展到2G字(2的31次方),但这样的设计同时也带来了诸多逻辑控制上的困难。随着可编程逻辑器件(PLD)包括FPGA、EPLDE4[4]、CPLD等的迅速发展,数字逻辑电路的设计得到了大大简化,从而使这种存储器扩展想法可以得到实现。

2 存储器扩展方法的具体实现

下面以笔者设计的系统为例来详细说明这种存储器扩展方法的实现。该系统是一个多功能数据采集设备,能够以最高40k次/s的速率进行12位A/D转换,并且可以将采集到的数据保存至Flash ROM中,以防止掉电丢失。技术参数要求如下:①最多可以保存32K字节的采样数据;②可以同时存储4段系统工作配置程序,每段4K字节,共计16K字节;③由于Flash ROM自身的特点,在写人数据后的编程阶段不能进行读写操作,因此为了保证系统采样和单片机运行的正常进行,需要额外增加32K字节的RAM作为数据缓存;④系统程序、中断服务程序等共占用56K字节(Flash ROM和RAM各保留28K字节),总计需要存储空间136K字节。这个需求已经超过96系列单片机的64K字节寻址范围,为此设计了一个存储器模块,其结构如图2所示。

图2

    Flash ROM采用ATMEL公司的AT29C1024,容量为128K字节,数据线宽度为16位;RAM存储器由两片CY7C199组成,数据线宽度为16位,容量为64K字节。80C196单片机的ALE为地址锁存信号,/WE为写有效信号,/RD为读有效信号,READY为准备就绪信号。MCS-96系列单片机支持8位和16位两种工作模式,为了提高系统的性能,选择16位工作模式。96系列单片机地址是按照字节的方式来计算的,因此在16位工作模式下的A0=0没有实际意义。在通常的读写情况下,取经过锁存后的AD1~AD15地址作为A1~A15而A16=0。    clock信号要保证在写Address_F_RP地址修改读取位置时,或读Address_F_R地址取数据时都能产生上升沿信号。总线a0-a15和D0~D15分别是由AD0-AD15分离出来的地址和数据总线。多路选择器则根据地址译码产生的S0-S3选择输出地址,输出地址直接连接到RAM和Flash ROM的地址线上。如果访问除Address_F_RP和Address_F_RP以外的地址,则地址输出总线A115..1)=a[15..1]、A16=0,即单片机直接访问存储器;如果读取Address_F_R,则片选/CS2有效并且A[16..1)Q(15..0]作为输出地址。这样就可以自动地在不同存储区域进行切换,从而大大地增加了内存的扩充能力,并且简化了程序设计。运用同样的方法还可以定义FlashROM中的数据块写入地址Address_F_W和写位置指针地址Address_F_WP,RAM中也有类似的方法定义Address_R_(RAM数据块读地址)、Address_R_RP(RAM数据块的读位置指针地址)、Address_R_W(RAM数据块写地址)和Address_R_WP(RAM数据块的写位置指针地址)。这样可以方便地对内存的扩展部分进行读写。下面以MCS-96的汇编语言为例来说明程序中是如何操作的。比如需要从IOPORT0口连续采集数据,然后存放到RAM中指定的数据块等待处理,则可以写出如下程序:    从上面这个简单的例子可以看出,这种存储器组织方法大大简化了编程的的复杂性,并且可以采用对位置指针赋初值的方法来实现对扩展存储器中任何一个位置的读写操作。    上面的分配方案可以通过对地址总线进行译码生成相应的片选信号/CSl和/CS2来实现。这样分配后,Flash ROM 和 RAM 的使用情况如图4所示。    可是实际故障依旧,通过测试得到的时序信号如图6所示。    前面详细地介绍了一种实用的存储器扩展方法,该方法是基于PLD器件实现的,有效地解决了嵌入式系统,尤其是数据采集、存储系统中内存扩展的问题。该方法能够简化程序设计,并且不需要随CPU型号的变化而修改设计,具有很好的可移植性。同时还给出了一种较为复杂的单片机外部存储器的组织方案,包括了Flash ROM和RAM构成的存储系统。最后提出了将READY信号由同步产生改为异步产生的方式,解决了CPU在高速RAM与低速Flash ROM之间切换产生的问题,最终设计成了一套较为完善的CPU外部存储器系统。

下面以读Flash ROM为例介绍地址扩展方法。对于可以直接寻址的地址,EPLD作为锁存器,将AD0~AD15分时的地址数据总线分开,生成独立的地址和数据总线。在这里定义了两个特殊的地址:Flash ROM数据块的读地址Address_F_R和读位置指针地址Address_F_RP。首先向Ad-dress_F_RP写入一个16位的二进制数,该数代表了将要读取的数据块的首地址,16位表示范围是0~65535,因此可以指定的首地址范围是64K字即128K字节;然后连续地从Address_F_R进行读取操作,每读一次,位置指针会自动加1而不需要重新设置。如果需要读取新的位置,只需要向Address_F_RP地址写入新的位置数据即可。该功能在EPLD器件内部的实现方法见图3。计数器可同步设置初值、同步计数,在AHDL语言中声明为1pm_counter[5]。其中,CNT_EN为计数使能控制,当CNT_EN为高电平时,每当CLOCK上升沿到来时计数器便会自动加一,从而实现了地址自动增加的功能;CLOCK为同步时钟输入端,上升沿有效;SLOAD为计数器同步设置初值信号,当该信号为高电平时,在CLOCK上升沿的作用下,计数器的输出Q[15..0]=D[15..0],从而实现初始化读取位置的功能。计数器用AHDL语言描述如下:

counter : lPm_counter with(1pm_width=16);

counter.clock=/rd&(/we#(a[15..0]!=Address_F_RP);

counter.sload=(a[15..0]==Address_F_RP);

counter.cnt_en=(a[15..0]=Address_F_R);

counter.data[15..0]=D[15..0];

 

LD 40H,地址值;地址值为即将写入的目的地址,16位按字编址。

ST 40H,Address_R_WP;设置写位置指针

REPEAT:

LDB 40H,IOPORT0

LDB 41H,IOPORTO;40H和41H为内部寄存器,因为按字存储所以连续读两次

ST 40H,Address_R_W ;写入指定位置条件判断退出循环

JMP REPEAT[!--empirenews.page--]

 

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,作为系统程序的运行区域。

 

图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)[!--empirenews.page--]

#(a[15..0]= =Address_F_W)&! ALE)

 

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],系统依然能够稳定工作。通过使用,证明这种存储器设计方案是可行的。

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭