摘要本文介绍了一种实现大容量数据存储的方法。采用先进的fpga(fieldprogrammablegatearray)技术结合sram专用控制器件来实现逻辑控制,以静态存储器sram(staticram)为存储器件实现了256k×16字节的高速异步存储。
关键字:fpga,sram,vhdl
1引言
随着数字信号处理技术的不断发展,大容量可编程逻辑器件的不断涌现,fpga技术越来越多地应用在大规模集成电路设计中。在此硬件系统设计中,经常会遇到需要大容量的数据存储的情况,下面我们将针对fpga中内部blockram有限的缺点,提出了将fpga与外部sram相结合来改进设计的方法,并给出了部分vhdl程序。
2硬件设计
这里将主要讨论以xilinx公司的fpga(xc2s600e-6fg456)和issi公司的sram(is61lv25616al)为主要器件来完成大容量数据存储的设计思路。
fpga即现场可编程门阵列,其结构与传统的门阵列相似,大量的可编程逻辑块(clb,configurablelogicblock)在芯片中央按矩阵排列,芯片四周为可编程输入/输出块(iob,input/outputblock),clb行列之间及clb和iob之间具有可编程的互连资源(icr,interconnectresource)。clb、iob和icr都由分布在芯片中的sram静态存储单元控制,sram中的数据决定fpga的功能,这些数据可以在系统加电时自动或由命令控制从外部存储器装入。
在进行数据存储时,可直接将数据写入fpga内部的blockram中,在一定程度上减少了fpga的资源分配。但fpga内部自带的ram块毕竟是有限的,当需进行大容量数据存储时这有限的ram块是远远不能满足系统设计要求的。此时,就需要将fpga与外部ram相结合完成大容量数据存储。具体硬件电路如图一所示:
图一硬件电路原理图
3is61lv25616al功能简介
is61lv25616al是integratedsiliconsolution公司(issi)的一款容量为256k×16的且引脚功能完全兼容的4mb的异步sram,可为xilinx公司的spartan-2e系列fpga提供高性能、高消费比的外围存储。除了256k×16异步sram外,issi还提供128k×16、512k×16、256k×8、512k×8和1m×8的异步sram。
is61lv25616al引脚结构框图如图二所示:
图二is61lv25616al结构框图
3.1主要特征 (1)工作电压:3.3伏; (2)访问时间:10ns、12ns; (3)芯片容量:256k×16; (4)封装形式:44引脚tsopii封装,也有48引脚mbga和44引脚soj封装; (5)采用0.18μm技术制造;
3.2引脚功能 (1)a0~a17:18位的地址输入线; (2)io0~io15:16位的三态数据输入输出线; (3):写控制线; (4):片选信号; (5):输出使能信号; (6)、:低字节、高字节使能信号; (3)~(6)的控制线均为低电平有效。
3.3控制逻辑电路设计 如图三所示,控制逻辑由fpga来实现。主要包括读地址产生器、写地址产生器、读写时钟信号产生器及读写控制等几部分。下面分别加以讲述。
图三原理框图
(1)写地址产生器:由于设计时采用256k×16的sram,故有18位地址,写地址产生器用18位计数器实现。靠外部时钟驱动,每进行一次写操作后,读写控制单元产生计数脉冲,使其增1,直到18位计数器计满再循环写入地址为0的空间。
(2)读地址产生器同上,也采用18位计数器实现,根据系统要求,每隔一定的采样周期将读地址指针偏移一定偏移量,并从该位置读取数据。
(3)读写地址选择器由于读写地址复用管脚,因此在读写操作时,必须选通相应的地址。这就需要由fpga控制芯片上的、、、等控制信号来对sram进行读写的操作。
(4)此外,由于读写之间的切换,数据线上的数据在切换瞬间如不加处理会出现混乱现象。因此,为避免读、写操作发生冲突,数据线呈三种状态,读数据、写数据及高阻态。在从写到读的过程中需给数据线上送高阻态。
(5)当需要对sram进行写操作时,由fpga控制产生写地址选通信号,该选通信号为一单脉冲形式,如图四中、、,该脉冲下降沿触发sram,告知开始对ram进行写操作,使fpga输出写地址,同时给数据线上送数据。在写操作期间,、片选信号始终保持低电平,而写地址选通信号上升沿到来时使写地址计数器增1。以此类推,通过写地址选通信号高低电平变化完成对数据依次写入。需要注意的是,地址线和数据线在、、为高时可同时赋新值,但只有在变低后赋予数据线上的新值才有效。
图四ram写操作时序
对sram进行读操作相对较简单,在进行读操作期间,、、、始终为低电平,始终为高电平。每进行一次读操作,地址按系统要求变化一次。同时注意,地址的变化时刻总要先于数据的变化时刻。图五为ram读操作时序。
图五ram读操作时序
以下是一段用vhdl语言描述的控制ram的读写操作时序的程序代码: oe_sram<=lowlevel; ce_sram<=lowlevel; when0=>addr_sram<=temp_addr_sram;--writetosram data_sram<=data_in; we_sram<=1; lb_sram<=1; ub_sram<=1; when1=>we_sram<=0; lb_sram<=0; ub_sram<=0; when2=>we_sram<=1; lb_sram<=1; ub_sram<=1; when3=>we_sram<=1; --readfromsram lb_sram<=0; ub_sram<=0; data_sram<=b"zz_zzzz_zzzz_zzzz_zzzz";--给数据线上送高阻 addr_sram<=temp_addr_sram; when4=>data_out<=data_sram;
程序中,在进行读写操作时,片选使能信号ce_sram及输出使能信号oe_sram始终为低电平。 ·第0时刻到第2时刻在进行写操作:第0时刻地址线addr_sram和数据线data_sram同时赋新值,控制线we_sram、lb_sram、ub_sram要经历一个窄脉冲的变化过程,ram在获取到此控制线下降沿信息后,便知开始进行写操作。需要注意的是,虽然数据在第0时刻已赋到数据线上,但因为写操作是控制线低电平有效,所以数据线上真正发生数据更新是在控制线变为低电平之后,因此,数据线上的实际更新时刻是在第2个时刻。
·第3、4状态是进行读操作:在读写转换时刻,也就是在第3时刻如前所述需给数据线上送高阻态。这样,读取数据的时序关系由系统时钟进行控制,在第3时刻给地址线上送要读取的地址,第4时刻将数据端口上的数据送出。这里需注意的是,读取数据要比读取地址晚一个时刻。从而,完成了对外部ram的读写操作控制。
4结论
该系统已应用在罗兰—c导航接收机的信号处理中。实验证明,此设计可靠稳定地完成了大容量高速异步数据存储,进一步提高了系统的性能。
参考文献 [1]孙红胜,岳春生用.dram、fpga实现大容量fifo存储器.信息工程学院学报.1997(9):38~41 [2]datasheetis61lv25616al2004.5.5 [3]kevenskahill.可编程逻辑系统的vhdl设计技术[m].朱明程,孙普译.东南大学出版社,2003
选自《2005年电子应用方案论文集》 |
文章评论(0条评论)
登录后参与讨论