新闻中心

EEPW首页 > 网络与存储 > 设计应用 > 基于WISHBONE总线的FLASH闪存接口设计

基于WISHBONE总线的FLASH闪存接口设计

——
作者:同济大学超大规模集成电路研究所 徐杰阳 时间:2007-01-26 来源:《今日电子》 收藏

引言

随着半导体工艺技术的发展,ic设计者已能将微处理器、模拟ip核、数字ip核和存储器(或片外存储控制接口)集成在单一芯片上,即soc芯片。对片上系统(soc)数据记录需要低功耗、大容量、可快速重复擦写的存储器。常用的介质主要有:动态存储器(dram)、静态存储器(sram)和闪速存储器(flash memory)。dram容量大,但需要不断刷新才能保持数据,会占用微处理器时间,同时增加了功耗;sram虽然不需要动态刷新,但价格太贵,并且断电后跟dram一样数据都无法保存。flash memory是一种兼有紫外线擦除eprom和电可擦除可编程只读存储器(eeprom)两者优点的新型非易失存储器。由于它可在线进行电可擦除和编程,芯片每区可独立擦写至少1000 000次以上,因而对于需周期性地修改被存储的代码和数据表的应用场合,以及作为一种高密度的、非易失的数据存储介质flash是理想的器件选择。在我们设计的系统中,处理器是openrisc1200,所用的flash是amd与富士公司的am29lv160d芯片。利用fpga实现接口,由于openrisc1200(or1200)采用wishbone总线,所以本设计的接口具有可移植性。

本文引用地址:https://www.eepw.com.cn/article/20920.htm

am29lv160d芯片特点

am29lv160d是一种仅需采用3.0v电源进行读写的闪存。该器件提供了70ns、90ns、120ns读取时间,无需高速微处理器插入等待状态进行速度匹配。为了消除总线竞争,芯片引入了片选使能(ce#),写使能(we#)和输出使能(oe#)控制端口。芯片采用分块结构,非常适用于要求高密度的代码或数据存储的低功耗系统。

● 甚低功耗
工作在5mhz时, 电流典型值为:
睡眠模式下电流为200na;
备用模式下电流为200na;
读数据时为9ma;
编程/擦除模式下电流为20ma。
● 灵活的分块结构
一个16kb,两个8kb,一个32kb,和31个64kb块(字节模式);
一个8kb,两个4 kb,一个16 kb,和31个32 kb块(字模式);
支持整个芯片擦除;
复杂的块保护特性。
● 具有内部嵌入算法
内部嵌入擦除算法自动预编程和擦除整个芯片或任意块的组合;
内部嵌入算法自动将给定地址的数据写入芯片及对其校验。
● 与jedec标准兼容
● 具有硬件reset复位与ready/busy擦写查询管脚
● 具有擦除暂停与擦除继续功能

wishbone总线简介

wishbone总线规范是一种片上系统ip核互连体系结构。它定义了一种ip核之间公共的逻辑接口,减轻了系统组件集成的难度,提高了系统组件的可重用性、可靠性和可移植性,加快了产品市场化的速度。wishbone总线规范可用于软核、固核和硬核,对开发工具和目标硬件没有特殊要求,并且几乎兼容所有的综合工具,可以用多种硬件描述语言来实现。

灵活性是wishbone总线的另一个优点。由于ip核种类多样,其间并没有一种统一的间接方式。为满足不同系统的需要,wishbone总线提供了四种不同的ip核互连方式:

点到点(point-to-point),用于两ip核直接互连;

数据流(data flow),用于多个串行ip核之间的数据并发传输;
共享总线(shared bus)(见图1),多个ip核共享一条总线;
交叉开关(crossbar switch),同时连接多个主从部件,提高系统吞吐量。

flash接口的设计

由于or1200采用的是wishbone共享总线,其地址线为32位,数据线也为32位。设计中采用将低位与flash相联接,并将接口位度设计为16位。原理框图如图2所示。逻辑接口部分采用fpga来实现。系统选用xilinx公司最新推出的90nm工艺制造的现场可编程门阵列芯片spartan-3来实现接口设计,利用它的可编程性特性带来了电路设计的简单化和调试的灵活性。

flash读接口设计

该接口可实现单周期读与块读功能,时序部分与wishbone兼容。由于采用的flash最大读周期时间至少为90ns,故只有在总线时钟工作在10mhz以下频率时可以直接将ack_o端口与stb_i端口相联。当master(指令cache)发出块读信号时,将发出一个lock_o=vih信号给总线仲裁器,要求总线能不间断提供总线。其对slave(flash接口部分)控制信号为:
we_i=vil,cyc_i=vih,stb_i=vih,byte=vih

当master结束块读时发出stb_o= vil信号即可。其输出接口部分如图3所示。
该输出接口模块源代码如下:
module wboprt16(clk_i, rst_i,we_i,stb_i,ack_o,dq_i,dat_o);
//wishbone slave interface
input clk_i,rst_i,we_i,stb_i;
output ack_o;
output [15:0] dat_o;
//non-wishbone interface
input [15:0] dq_i;
reg [15:0] dat_o;
always @(posedge clk_i or negedge rst_i)
begin :label_a
if (!rst_i)
dat_o<=16b0;//asynchronous reset
else if ((stb_i & !we_i)==b1)
dat_o<=dq_i;
else
dat_o<=dat_o;
end
assign ack_o=stb_i;
endmodule

flash写接口设计

因为flash写命令需要多个时钟周期时间,其中采用unlock bypass模式时为2个时钟周期,采用正常写模式需要4个时钟周期,并且在对flash写和擦写时更是需要等待几十微秒到几秒钟的时间,因此对接口slave必须引入写或擦写完成状态信号来控制总线数据的传输。为简化设计采用ry/by引脚来判断。输出端口原理图与图3类似,只需对部分端口进行修改即可。

为了能够对块保护的程序代码进行升级,特别设计了一个12v电源电路来实现暂时块写保护解除功能,如图4所示。利用am29lv160d芯片提供的暂时块写保护解除模式——即通过对reset#引脚加vid电压。在该模式下先前被保护的块可以通过块地址选中来进行编程和擦除。并且一旦vid移除所有先前保护的块恢复到保护状态。

图4中rv控制信号处采用了r=5kω,c=100pf,以便使得vid电压上升时间与下降时间≥500ns,从而满足相应的时序要求。肖特基二极管的引入保证了系统reset信号被钳制在vcc+0.3v以内。总体上来说,该电源隔离电路的引入对整个系统的成本影响很小,而使系统可以在线编程被保护的flash存储块。

在进行flash编程时部分要用到命令总线时序定义,如表1所示。

总结

本文介绍了amd公司am29lv160d芯片特点,并在此基础上设计了基于wishbone总线的接口。该接口设计方法对其他相关soc总线接口设计具有直接的参考意义。



关键词:

评论


相关推荐

技术专区

关闭