位置:51电子网 » 技术资料 » EDA/PLD

Flash 编程器的FPGA实现

发布时间:2008/5/28 0:00:00 访问次数:407

1 引言
闪速存储器(flash memory)以其集成度高、成本低、使用方便等许多优点,广泛应用于通讯设备、办公设备、家用电器、医疗设备等领域。利用其保存信息的非易失性和在线更新数据参数的特性,可将其作为具有一定灵活性的只读存储器(rom)使用。

现在的数字电路应用系统设计中,经常遇到大容量的数据存储问题。flash由于容量大、存储速度快、体积小、功耗低等诸多优点,而成为应用系统中数据存储器件的首选。由于在研制实时信号处理系统时,需要一块大容量的flash来存储坐标变换的数据作查找表,因此面临一个如何对flash进行编程,将数据写入flash的问题。由于我们选用的flash芯片为sst39sf010/020,是最新生产的型号,需要自己开发编程器来满足设计需要,达到既经济又实用的目的。这一型号的flash采用的是标准的5v电压供电,器件在命令控制下自己产生内部的擦除电压vpp,从而完成数据的写入和芯片的擦除等各种功能。而fpga这种大规模的可编程器件十分适合逻辑电路的设计,能方便地控制和产生 flash编程操作中的各种控制命令,实现编程器的功能。

2 flash的性能参数和操作时序

以最新的flash芯片型号sst39sf010/020为例,容量为1/2mbit(×8)。

它的主要性能有:

● 单一的5.0v电压读写操作;

● 高可靠性,超过100年的数据保持能力;

● 快速擦除和字节编程功能

——扇区擦除时间典型值只需7ms;

——片擦除时间典型值只需15ms;

——字节编程需时间典型值只需20微秒;

——片重写时间需3ms(sst39sf010)

● 片内部产生vpp编程电压,实现自动读写时序;

● i/o兼容ttl;

各引脚功能:

ams~a0:地址输入 ——提供存储器地址;

dq7~dq0:数据输入/输出 ——在读时序时输


出数据,在写时序时接收输入的数据;
ce#:片选使能——当ce#为低电平有效;

oe#:输出使能——选通输出缓存器;

we#:写使能——控制写时序;

vdd:接5v电源;

vss:接地。

在对flash进行编程操作前,必须保证存储单元为空。如果不为空,就必须先对flash芯片进行擦除操作。由于flash采用了模块分区的阵列结构,使得各个存储模块既可以整个芯片一齐被擦除,还可以使各个存储模块被独立的分别擦除。只需在地址和数据端写入不同的操作命令即可实现不同的擦除操作。

sst39sf010的编程操作分三步骤:第一步是连续载入三字节命令的软件数据保护操作,第二步是写入字节地址和字节数据,在编程操作过程中,地址是在ce#或we#的下降沿时有效,而数据则是在ce#或we#的上升沿时有效;第三步是芯片内部的编程操作,该操作在ce#或we#的第四个上升沿有效,随后该内部编程操作在30微秒内即可完成。这部分的时序如图所示。

flash的编程操作是自动字节操作,编程时要特别注意编程时间参数和使用的命令集。编程和擦除时钟周期的定时参数如表所示。


3 fpga实现flash编程器的设计
flash编程器的关键是要保证flash地址和数据信号在时序上的严格要求,由sst39sf010的编程和擦除周期时序参数得知,它的地址或数据信号的建立和保持时间的最小时钟周期仅为30ns。为此,我们采用了40mhz的晶振作为fpga的驱动时钟,它的最小时钟周期为25ns,完全可满足最小的时间周期要求。

采用fpga来实现flash编程器,主要是如何对flash进行写操作,利用vhdl语言编写的写操作进程表示如下:

process(rst,clkin,wea)--program cycle

variable count:integer range 0 to 900 ;

begin

if(rst='0') then

ce<='1'; ——片选使能

oe<='1'; ——输出使能

we<='1'; ——写使能

addr<=(others =>'z'); ——地址总线

addr_1<=(others =>'0');

dq<=(others =>'z'); ——数据总线

req<='0';

count:=0;

elsif(wea='1') then

if(clkin'event and clkin='1') then

case count is

when 0 =>

ce&l

1 引言
闪速存储器(flash memory)以其集成度高、成本低、使用方便等许多优点,广泛应用于通讯设备、办公设备、家用电器、医疗设备等领域。利用其保存信息的非易失性和在线更新数据参数的特性,可将其作为具有一定灵活性的只读存储器(rom)使用。

现在的数字电路应用系统设计中,经常遇到大容量的数据存储问题。flash由于容量大、存储速度快、体积小、功耗低等诸多优点,而成为应用系统中数据存储器件的首选。由于在研制实时信号处理系统时,需要一块大容量的flash来存储坐标变换的数据作查找表,因此面临一个如何对flash进行编程,将数据写入flash的问题。由于我们选用的flash芯片为sst39sf010/020,是最新生产的型号,需要自己开发编程器来满足设计需要,达到既经济又实用的目的。这一型号的flash采用的是标准的5v电压供电,器件在命令控制下自己产生内部的擦除电压vpp,从而完成数据的写入和芯片的擦除等各种功能。而fpga这种大规模的可编程器件十分适合逻辑电路的设计,能方便地控制和产生 flash编程操作中的各种控制命令,实现编程器的功能。

2 flash的性能参数和操作时序

以最新的flash芯片型号sst39sf010/020为例,容量为1/2mbit(×8)。

它的主要性能有:

● 单一的5.0v电压读写操作;

● 高可靠性,超过100年的数据保持能力;

● 快速擦除和字节编程功能

——扇区擦除时间典型值只需7ms;

——片擦除时间典型值只需15ms;

——字节编程需时间典型值只需20微秒;

——片重写时间需3ms(sst39sf010)

● 片内部产生vpp编程电压,实现自动读写时序;

● i/o兼容ttl;

各引脚功能:

ams~a0:地址输入 ——提供存储器地址;

dq7~dq0:数据输入/输出 ——在读时序时输


出数据,在写时序时接收输入的数据;
ce#:片选使能——当ce#为低电平有效;

oe#:输出使能——选通输出缓存器;

we#:写使能——控制写时序;

vdd:接5v电源;

vss:接地。

在对flash进行编程操作前,必须保证存储单元为空。如果不为空,就必须先对flash芯片进行擦除操作。由于flash采用了模块分区的阵列结构,使得各个存储模块既可以整个芯片一齐被擦除,还可以使各个存储模块被独立的分别擦除。只需在地址和数据端写入不同的操作命令即可实现不同的擦除操作。

sst39sf010的编程操作分三步骤:第一步是连续载入三字节命令的软件数据保护操作,第二步是写入字节地址和字节数据,在编程操作过程中,地址是在ce#或we#的下降沿时有效,而数据则是在ce#或we#的上升沿时有效;第三步是芯片内部的编程操作,该操作在ce#或we#的第四个上升沿有效,随后该内部编程操作在30微秒内即可完成。这部分的时序如图所示。

flash的编程操作是自动字节操作,编程时要特别注意编程时间参数和使用的命令集。编程和擦除时钟周期的定时参数如表所示。


3 fpga实现flash编程器的设计
flash编程器的关键是要保证flash地址和数据信号在时序上的严格要求,由sst39sf010的编程和擦除周期时序参数得知,它的地址或数据信号的建立和保持时间的最小时钟周期仅为30ns。为此,我们采用了40mhz的晶振作为fpga的驱动时钟,它的最小时钟周期为25ns,完全可满足最小的时间周期要求。

采用fpga来实现flash编程器,主要是如何对flash进行写操作,利用vhdl语言编写的写操作进程表示如下:

process(rst,clkin,wea)--program cycle

variable count:integer range 0 to 900 ;

begin

if(rst='0') then

ce<='1'; ——片选使能

oe<='1'; ——输出使能

we<='1'; ——写使能

addr<=(others =>'z'); ——地址总线

addr_1<=(others =>'0');

dq<=(others =>'z'); ——数据总线

req<='0';

count:=0;

elsif(wea='1') then

if(clkin'event and clkin='1') then

case count is

when 0 =>

ce&l

相关IC型号

热门点击

 

推荐技术资料

声道前级设计特点
    与通常的Hi-Fi前级不同,EP9307-CRZ这台分... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!