作为dsp 芯片与外界交换数据的重要关口,外扩存储器接口的优劣程度直接影响着dsp 的适应性和控制功能,同时,高性能、灵活性强的外部存储器接口也是利用dsp 搭建图像采集处理系统的重要保证。基于上述原因,本文提出了一种基于cpld 的vc5402 存储器扩展方案,此方法具有接口灵活、调试方便的优点。
图像采集处理系统中资源的配置情况
为了更方便地了解vc5402 与外部存储器的接口设计,本文首先介绍在设计的图像采集处理系统中vc5402的资源配置状况。
vc5402 有3 个比特位(mp/ mc # ,ovl y,drom)共同影响着存储器的结构,用户可以根据需要修改pmst的值来配置存储空间。
本文采用了微处理器模式,设置mp/ mc # = 1 ,片上4 k 字的rom 不映射到程序区,即rom 不可访问。设置ovl y= 0 ,片内16 k 字的ram 不映射到程序存储器,使64 k 字的程序存储空间全部配置成外部存储器,利用2 片sram(记为sram1 ,sram2) 存放采集到的图像数据。
dsp 每执行一次复位,都将drom 清零,在系统中没有改变该比特位的设置, 这样使得数据存储空间的低48 k 字全都对应外部存储器,其中低32 k 字空间映射为外挂flash ,用来存放引导程序、中断矢量表和用户代码等内容,其他16 k 字的空间映射为sram(记为sram3)用来存放数据处理的结果。
对于扩展程序存储空间、扩展数据存储空间所需要的时延可以通过软件编程的方法对dsp 的等待状态寄存器(swwsr) 进行设置,使之达到最快速度。这样就避免了使用硬件进行握手通信,简化了接口的设计。
程序存储器的扩展
系统中实际采集到的图像数据量大约有1 m ×8 b ,而vc5402 的数据空间只有64 k 字,并且vc5402 内部具有16 k 字的随机存储器和4 k 字的只读存储器,远远不能满足存储要求,因此需要将数据空间扩展到1 mb才能实现图像数据的存储。由于vc5402 的程序空间可以扩展到1 m ×16 b ,而且具有专门访问扩展存储器的指令。考虑到数据空间扩展的复杂性,我们将采集到的图像数据直接存放在扩展的程序空间中。系统中选用两片sram( is61lv5128al–12) 用来存放原始数据,is61lv5128al–12 芯片是512 k ×8 b 的高速cmos 静态存储器,存取速度为12 ns。
两片存储器接口的实现方案设计如图1 所示.其中sram-ce1 ,sram-ce2 ,oe ,we分别为2 片sram 的片选信号、读使能信号、写使能信号,这些逻辑组合是通过cpld 实现的。仿真波形图如图2 所示。
进行程序空间扩展时,dsp 地址线的a (0) ~a (19)位都是有效的。vc5402 的程序空间被组织为16 页,每页64 k 字。内部64 k 字的程序空间可以直接访问,当访问超过64 k 字的程序区时,dsp 并不能提供直接访问xpc寄存器的指令(程序空间是按页进行管理的,页地址放在xpc 寄存器中) ,这时使用writa 和reada 这两条指令可以对高端程序空间进行访问,要么把数据空间的数据送到程序空间,要么把程序空间的数据送到数据空间,采用累加器寻址方案才能影响xpc 寄存器的值。
这种方案的优点在于:不用进行数据区的扩展,直接利用vc5402 可扩展的程序区,简单方便。
数据存储器空间的扩展
脱机运行是此系统最主要的特点,所以必须考虑到存放脱机程序这一问题。在采集处理系统中,将存放程序的flash 映射在vc5402 的数据空间,由于图像处理算法的复杂性,只靠vc5402 的数据空间难以满足需求,因此需要对vc5402 进行数据空间扩展。
系统中选用了flash 存储器sst39vf400a ,该芯片的容量是256 k ×16 b ,他是一种低电源电压芯片,工作电压为3. 3 v ,速度是70 ns ,能和vc5402 实现无缝接口,数据保存时间超过100 年,他具有容量大、掉电后数据不丢失、可在线快速读写、可整片或者分页擦除等特点,同时由于其内部已经固化了相应的程序,使用时只需向特定的地址写入特定的命令字序列,这样使得sst39vf400a 的读写操作非常简单灵活。
另外,扩展了64 k ×16 b 的sram( sram3 ,型号为cy7c1021) 用来存放数据处理的结果,映射到vc5402 的外部数据空间。cy7c1021 除了电源和地以外,还有几个关键信号引脚如ce # ,we # ,oe # ,bl e ,bhe 等。bl e决定该芯片的低字节是否有效,即数据位的低8 位是否有效,而bhe 则决定芯片的高字节(高8 位) 是否有效,引脚为低电平时有效。因为vc5402 的数据线为16 位,即其所用的寄存器和存储器都应该是16 位, 所以应该将cy7c1021 的高低字节都使能,使其有效,将bhe ,bl e 通过360 ω的电阻接地。
vc5402 的真正i/ o 引脚只有2 个bio # 和xf ,而且是单向的,这样他的i/ o 引脚太少,满足不了设计的要求。本方案将vc5402 的数据总线d[ 0 :2 ]扩展为通用i/ o 口来弥补i/ o 口的不足。数据空间扩展的具体方法: 将cpld 作为dsp 的1 个i/ o 口,dsp 的数据线d[ 0 :2 ] 接至cpld 的输入端。当dsp 的i/ o 选通信号iostrb #和is # 有效时, dsp 通过这个i/ o 向cpld 写数据d[ 0 :2 ] ,在cpld 内部进行逻辑组合,完成数据锁存,等到数据选通信号有效时,将锁存的数据输出,产生分页信号page[ 0 :2 ] ,分别接在flash 和sram3 的高端地址上。
要访问扩展的数据空间,必须通过cpld 产生的页信号进行选择。256 k ×16 b 的flash 被组织为8 页,每页为32 k字长,信号page2 , page1 , page0 负责对flash 各页进行选择。64 k ×16 b 的sram3 被划分为4 页,每页为16 k字长,信号page1 , page0 负责对各页进行选择。在flash中,每页的32 k 字被映射到数据空间的08000 h ~0ffffh 区域;在sram3 中,每页的16 k 字被映射到数据空间的04000 h~07fffh。页信号产生的程序如下:
cpld-cs < = dsp-is or (not dsp -a7) ;
cpld-cs-io < = cpld-cs or dsp-rw
or dsp-iostrb ;
cpld-cs-m < = dsp-ds or dsp-mstrb
or dsp-rw;
process(cpld-cs-io ,cpld-cs-m)
begin
if cpld-cs-io =′0′then
qq < = dsp-d ;
end if ;
if cpld-cs-m =′0′then
q < = qq ;
end if ;
end process ;
认真分析了本方案中vc5402 数据存储空间的分配特点后,使用vc5402 的dsp a15 和数据选通信号ds #的逻辑组合来选通flash 和sram3 ,具体的连接如图3所示,其转换逻辑由cpld 编程实现。
外扩flash 和sram 的读写控制信号的逻辑也是在cpld 中实现的,数据存储器扩展所需控制信号的仿真波形图如图4 所示。
对flash 空间的某一地址进行访问时,应分为以下几步:
首先,解析该地址,进行地址分割,低15 位为页内地址,高3 位作为页选择地址;
其次,把页选择地址用portw 命令送到所分配的i/ o空间pa 中,等选通信号使能后,页地址就在所选存储器的高端地址线上;
最后,使用访问数据的指令。由于vc5402 的数据是16 位的,因此在调用数据指令时,需要16 位的数据。这里,低15 位来自所要访问的地址的低15 位,最高位补零。
要对flash 存储器的高端进行访问,必须先对cpld送数。如要寻址70000 h 存储单元时,假定ar3 辅助寄存器指向某一存储单元,cpld 映射在vc5402 i/ o 空间的地址为pa ,其大致操作如下:
st # 07h , *ar3
portw * ar3 ,pa
这样,cpld 充当的锁存器将111 这3 位数给锁存住,在选通flash 时,将数据111 送至flash 的a15~a17端,然后再对dsp 存储器的地址0000 h 进行读写操作即可。
dsp 的扩展i/ o 端口
vc5402 仅有这2 个通用i/ o 引脚往往是不够的,dsp 为了一些特殊的需要提供了多个片上设备,比如3 个多功能串口、hpi 接口等。这些片上设备在系统中并没有用上,因此可以利用dsp 的扩展功能将这些设备的管脚扩展为通用i/ o 端口供系统使用。比如将hpi 端口的8 位并行数据线扩展为8 位i/ o 端口,用来和cpld 进行通信,这些i/ o 口的扩展是通过对dsp 的相关寄存器进行相应的设置来实现的。
为了实现dsp 和cpld 之间的交互,将hpi 的数据线用作通用i/ o 端口实现了vc5402 i/ o 口的扩展。hpi数据线扩展为通用i/ o 口的具体方法:在hpi 接口不允许,即在复位时hpiena 引脚为低电平的情况下,使用2 个存储器映射寄存器(通用i/ o 控制寄存器gpiocr 和通用i/ o 状态寄存器gpiosr) 来控制hpi 数据引脚的输入输出。gpiocr 和gpiosr 在dsp 的物理地址分别是003ch 和003dh。
如要从扩展的hpi 口输出数据40 h ,需要进行以下3 步操作:
第一步:在复位时,将hpiena 引脚置为低电平;
第二步:将通用i/ o 控制寄存器gpiocr 的值设置为0x00ff ;
第三步:将通用i/ o 状态寄存器gpiosr 的相应位设置为01000000 ,即40 h。
实现的程序代码如下:
stm # 0x003c ,ar3 ; 选中控制寄存器
st # 0x00ff , *ar3 ; 将hpi数据端置为输出状态
stm # 0x003d ,ar3 ; 选中状态寄存器
st # 0x0040 , *ar3 ; 输出数据40h
结 语
利用cpld 实现vc5402 的存储器空间扩展,大大简化了硬件电路的设计,编程灵活;调试时,只需对cpld 电路进行调试,简单方便,此方案可以推广到其他便携式图像采集处理系统的存储器扩展中。。。
Vishay新型电池分流器上市,精度更高,RTC性能更优
分享一个音频控制电源开关电路
统领4.5万机器人大军的贝索斯又押宝家庭机器人,试图扩展更多的场景
基于STM32+CS创世 SD NAND(贴片SD卡)完成FATFS文件系统移植与测试(下篇)
解决路由器DNS劫持的两种方法
VC5402与外部存储器的接口设计
Flash页、扇区、块的区别
如何提高仪表放大器的稳定性
10nm工艺、20核GPU,魅族Pro7 Plus又有救了?
基于ESP8266的温湿度监测系统设计
诺基亚拍照旗舰Nokia 9 PureView搭载后置五摄
PCB设计:如何避免关键设计错误?
混合云环境中的Kubernetes HPC使用经验
多元共进|2023 Google 谷歌开发者大会现场全回顾
苹果计划在今年要发布的三款新iPhone中删除3D Touch功能
美国空军实验室正在将TDI-J85发动机集成到Gray Wolf飞行器中去
全国建设项目超过1100个 5G+工业互联网仍在起步
搭建全自动微信小说漫画动漫源码系统开发cps分销系统模式开发
VGA、HDMI、DVI、DP这四种视频线的区别和选购指南
芯耀辉荣膺2023年度中国IC设计成就奖之“年度产业杰出贡献IP公司”