打印

用N个FPGA做一个固态硬盘

[复制链接]
4530|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jakfens|  楼主 | 2012-4-25 13:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
jakfens|  楼主 | 2012-4-25 14:06 | 只看该作者
本帖最后由 jakfens 于 2012-4-25 14:12 编辑

FPGA与SRAM相结合完成大容量数据存储类别:存储器   阅读:1966     
     
     
    作者:安莎莎 赖伟林 张辉
     
    1 引言
     
    随着数字信号处理技术的不断发展,大容量可编程逻辑器件的不断涌现,FPGA技术越来越多地应用在大规模集成电路设计中。在此硬件系统设计中,经常会遇到需要大容量的数据存储的情况,下面我们将针对FPGA中内部Block RAM有限的缺点,提出了将FPGA与外部SRAM相结合来改进设计的方法,并给出了部分VHDL程序。
     
    2 硬件设计
     
    这里将主要讨论以Xilinx公司的 FPGA(XC2S600E-6fg456)和ISSI公司的SRAM(IS61LV25616AL)为主要器件来完成大容量数据存储的设计思路。
     
    FPGA即现场可编程门阵列,其结构与传统的门阵列相似,大量的可编程逻辑块(CLB, Configurable Logic Block)在芯片中央按矩阵排列,芯片四周为可编程输入/输出块(IOB, Input/Output Block),CLB行列之间及CLB和IOB之间具有可编程的互连资源(ICR, Inter Connect Resource)。CLB、IOB和ICR都由分布在芯片中的SRAM静态存储单元控制,SRAM中的数据决定FPGA的功能,这些数据可以在系统加电时自动或由命令控制从外部存储器装入 。
     
    在进行数据存储时,可直接将数据写入FPGA内部的Block RAM中,在一定程度上减少了FPGA的资源分配。但FPGA内部自带的RAM块毕竟是有限的,当需进行大容量数据存储时这有限的RAM块是远远不能满足系统设计要求的。此时,就需要将FPGA与外部RAM相结合完成大容量数据存储。具体硬件电路如图一所示:
     
   
     
    图一 硬件电路原理图
     
    3 IS61LV25616AL功能简介
     
    IS61LV25616AL是Integrated Silicon Solution 公司(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;
    when 0 => addr_SRAM<=temp_addr_SRAM; --WRITE to SRAM
     data_SRAM<=data_in;
     WE_SRAM<='1';
     LB_SRAM<='1';
     UB_SRAM<='1';
    when 1 => WE_SRAM<='0';
     LB_SRAM<='0';
     UB_SRAM<='0';
    when 2 => WE_SRAM<='1';
     LB_SRAM<='1';
     UB_SRAM<='1';
    when 3 => WE_SRAM<='1';  --READ from SRAM
     LB_SRAM<='0';
     UB_SRAM<='0';
     data_SRAM<=b"ZZ_ZZZZ_ZZZZ_ZZZZ_ZZZZ"; --给数据线上送高阻
     addr_SRAM<=temp_addr_SRAM;
    when 4 => 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导航接收机的信号处理中。实验证明,此设计可靠稳定地完成了大容量高速异步数据存储,进一步提高了系统的性能。

888_1_0801012913.jpg (38 KB )

888_1_0801012913.jpg

888_3_0801012915.jpg (15.06 KB )

888_3_0801012915.jpg

888_4_0801012916.jpg (16.74 KB )

888_4_0801012916.jpg

888_5_0801012916.jpg (9 KB )

888_5_0801012916.jpg

使用特权

评论回复
板凳
mr.king| | 2012-4-25 14:54 | 只看该作者
FPGA 和SRAM掉电后都没数据了,与固态硬盘特性不符合

使用特权

评论回复
地板
GoldSunMonkey| | 2012-4-25 16:27 | 只看该作者
:)是呀,感觉奇怪

使用特权

评论回复
5
jakfens|  楼主 | 2012-4-25 16:40 | 只看该作者
有没办法克服掉电呢:P

使用特权

评论回复
6
jakfens|  楼主 | 2012-4-25 16:47 | 只看该作者
FPGA+DRAM呢?

使用特权

评论回复
7
jakfens|  楼主 | 2012-4-25 16:47 | 只看该作者
FPGA+flash呢

使用特权

评论回复
8
lianshumou| | 2012-4-25 21:43 | 只看该作者
给RAM加个备份电池,容量大点,哈哈哈哈

使用特权

评论回复
9
GoldSunMonkey| | 2012-4-25 22:19 | 只看该作者
有没办法克服掉电呢:P
jakfens 发表于 2012-4-25 16:40
我觉得没有

使用特权

评论回复
10
GoldSunMonkey| | 2012-4-25 22:19 | 只看该作者
FPGA+DRAM呢?
jakfens 发表于 2012-4-25 16:47
DRAM也是掉电就消失了。

使用特权

评论回复
11
GoldSunMonkey| | 2012-4-25 22:19 | 只看该作者
FPGA+flash呢
jakfens 发表于 2012-4-25 16:47
也也不行。FPGA总是掉电就没有了。

使用特权

评论回复
12
GoldSunMonkey| | 2012-4-25 22:19 | 只看该作者
给RAM加个备份电池,容量大点,哈哈哈哈
lianshumou 发表于 2012-4-25 21:43
那还要FPGA干什么?

使用特权

评论回复
13
summerxue| | 2012-4-25 23:30 | 只看该作者
fpga+flash还是可以考虑的,当然fpga需要配置电路,用配置芯片或flash来配置fpga

使用特权

评论回复
14
mxh0506| | 2012-4-26 00:02 | 只看该作者
FPGA+DRAM呢?
jakfens 发表于 2012-4-25 16:47
国外已经有人在搞这个了, 速度超快.

使用特权

评论回复
15
jakfens|  楼主 | 2012-4-26 08:33 | 只看该作者
这么爽啊
总觉得FPGA变成存储器很酷啊 将几个flash并在一起,配一个控制,一个电源

使用特权

评论回复
16
jakfens|  楼主 | 2012-4-26 08:34 | 只看该作者
作商业估计目前还不行吧 娱乐一下还可以

使用特权

评论回复
17
lianshumou| | 2012-4-26 08:38 | 只看该作者
或者学某些设计, FPGA + FLASH + SRAM    上电后将数据从FLASH般到RAM中,  掉电时将数据从RAM中拷到FLASH中,  有些追求纯性能有这么干的.

使用特权

评论回复
18
Backkom80| | 2012-4-26 08:50 | 只看该作者
呵呵,想不通的做法。太烧钱啦,:lol

使用特权

评论回复
19
liqaz| | 2012-4-26 09:01 | 只看该作者
很好这个想法不错
但成本也要考虑

使用特权

评论回复
20
nongfuxu| | 2012-4-26 09:01 | 只看该作者
LZ要做一个没由来的硬盘?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:鄙视电工就是鄙视全人类的智慧;抛弃电子就是毁灭文明,人类将回到刀割火种的时代

30

主题

1865

帖子

2

粉丝