基于FPGA的NAND控制器设计_第1页
基于FPGA的NAND控制器设计_第2页
基于FPGA的NAND控制器设计_第3页
基于FPGA的NAND控制器设计_第4页
基于FPGA的NAND控制器设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.毕业设计1.数字设计数字系统设计的介绍实现数字电路的方案随着电子计算机和手机的普及,数字系统在人们的生活中得到了越来越广泛的应用。数字系统的设计与实现也收到了越来越多的重视。而伴随电路生产工艺的成长和电脑的进步,数字电路系统也在不断发展,数字电路的设计有许多方法:一,使用制作好的常用的分立的数字器件制成二,使用微处理器配合外部设备实现,三,使用可编程的器件实现四,设计制造完整的数字集成电路芯片。上述四种方法中,第四种将一个全部整体的电路系统的集成到一块硅片之上,被命名为片上系统,是成本最高,设计难度最大,产品性能最优的设计制造方法,也是行业发展的方向,是如今高性能数字系统设计的最优方案。 数

2、字集成电路设计的流程:设计数字系统的方案数字系统设计的方案,主要可以区分为两种大类:从上至下和从下至上这两种。从下至上的方案:这种方法比较接近一种尝试法,工程师根据过去设计的经验把复杂的设计依照其功能分解成许多子部分,一直分解直到子部分可以按照传统并且标准的方案设计,最后再把系统组装修改直到满足设计要求。这种设计方案的缺点非常明显,设计强烈的依靠经验,当整体设计出现较大误差的时候,修改和测试验证会出现很大的困难。从上至下的方案:从上至下的方案是对电路整体架构层级明显的特性,把整体的设计按照层次进行。常见的是把整个数字系统分成控制模块以及计算模块。假如计算模块或者控制模块的整体时间比较困难,也会

3、继续分解。从上至下的设计方案一般流程是:1,确定计划实现的功能并分析功能把它的具体算法设计成型。2,把复杂的功能划分成不同的控制部分和计算部分,同时确定每一个子部分之间的相互关系,确定子部分之间的信号流向和逻辑关系。在确定各部分关系和功能之后再开始分模块地设计。本论文中涉及的就是采用自上而下的方案,设计一个集成电路上的NAND FLASH控制器。但是由于数字集成电路设计和制造本身的复杂性,它的整个设计制造流程很长并且跨越多个学科领域,本论文的设计的只是RTL(寄存器传输级)级别的设计。下面介绍数字集成电路的设计流程。 行为级(behavior level),设计者在这一阶段描述电路的行为,行为

4、具体指的是输入输出端口本身的信号数值的变化以及逻辑上的关系,忽略这种实际的内部电路对它的影响。行为级是按照人类的分析思路解析问题,大多数时候是根据算法,选择类C+的语言来描述。RTL级,也就是register transfer level,指的是用寄存器之间的信号传输来描述实际电路的行为。行为级仅仅需要显示电路的功能而不用在乎能否电路实现,但是RTL级描述的是可以实际制造出来的电路,需要遵守严格的设计规定。通常RTL级别的设计采用HDL(hardware description language)语言设计通过EDA(electronic design automatic)工具辅助仿真。工业界常

5、用的HDL语言是verilog语言和VHDL语言。我在设计过程中采用verilog语言。网表:网表,同时也被称作连线表(英语中叫netlist),说的是用最基本的逻辑门电路来记录电路信息的文件。网表一般记录了电路中元器件之间的连接关系,包括模块,线网,组合逻辑门等等。一般可以用EDA工具自动地把HDL语言描述的电路转换成网表文件。版图:版图(英文中叫layout),是实际晶源厂商生产IC芯片所需要的描述实际电路中每个元器件,互联线的尺寸,位置的文件。这一步设计仿真验证完成之后整个IC设计就完全结束了。RTL级别设计的流程1,设计者根据功能规格要求分模块写RTL代码。2,验证者根据功能规格要求设

6、计一个完整的测试平台,这个测试平台应当能够方便的产生RTL模块中不同功能操作对应的输入激励,并且把这些激励输入到RTL模块之中,之后测试平台能够自动生成正确的输出并且判断RTL模块的输出是否正确。设计者根据验证的结果不断修改代码以完善功能。3,验证者设计足够多的测试激励,使这些测试激励能够完整地测试RTL模块的所有功能。4,在FPGA上验证RTL代码。通过FPGA厂商的合成工具软件,将RTL代码转换成FPGA上的电路配置二进制文件,然后将该文件加载到FPGA上,然后通过FPGA开发板上的外设输入测试激励(有时候也会将前一级的RTL模块一起加载到FPGA上面)并验证模块功能的正确性。FPGA的介

7、绍:FPGA(field programmable gate array),翻译为现场可变成门阵列,这是在可编程门阵列,复杂可编程门阵列等电子设备上的基础不断进步不断研究的产物。FPGA是用来做application specific integrated circuit行业的一类部分定制的集成电路而制作出来的,这种产品不仅克服了ASIC电路的某些缺点,也客服了旧的PLD器件编程资源不够的缺点。用HDL语言设计的数字电路系统,能够方便的通过EDA软件工具加载到FPGA上进行验证,这是目前集成电路设计的主要方案。FPGA上的可编辑的元器件包括某些比较基础的与非门,或非门,异或门,同或门,非门,以

8、及时序逻辑电路中最基础的D触发器等等,某些FPGA还集成了乘法器,除法器,甚至是快速傅里叶转换器模块(FFT)。IC设计工程师可以从设计需求出发把可编程逻辑器件里面的功能模块连接在一起,如同在芯片的内部搭建了一个测试电路板,FPGA内部模块之间的连接关系可以不断改变,从而实现需要的功能。一般而言,FPGA工作的速度比相同制程的ASIC慢的多,但是可编程器件有专用电路无法比拟的优点,那就是成本低廉,使用方便。一块ASIC从建立项目到设计电路到最终的流片,直到样片出厂最少要一年的时间,而写RTL代码并且将代码模块下载到可编程器件上只需要两三个月。FPGA与CPLD的区别:FPGA和CPLD都是可编

9、程的逻辑器件,都被广泛引用在各个领域。然而在IC验证的过程中,基本只使用FPGA,这是由两者的特性所决定的。CPLD是工作的时候,把组合逻辑分解成最小项,然后加载到电路中去。与之不同的是,FPGA工作的时候,把组合逻辑分解为不同的多路选择器。这样的结果是,加载同一个电路,FPGA需要的晶体管的数量更少,也就是说相同制程,相同面积的FPGA芯片可以加载比CPLD多非常多的电路。然而有得必有失,FPGA的运行速度会远远地大于CPLD,因为将电路分解为多路选择器的结构,这个电路的最大延迟时间会很长,性能会收到很大的影响。在IC设计者验证RTL的完整性和正确性的时候,需要FPGA加载更多电路从而能一次

10、完成更大规模的RTL模块的验证,而它的延迟相较而言并不重要,因为FPGA验证在整个IC设计流程之中只占不到10%的时间,FPGA运行的时间更少,所以对FPGA运行速度并没有过于严格的要求。HDL设计RTL通常要使用硬件描述语言来设计数字逻辑电路。硬件描述语言语言是用文本文件来确定地描述数字逻辑电路的实际电路的行为和内部架构的语言。主流的HDL语言包括VHDL和verilog语言,两种语言有各自的优缺点,并且两种语言都是由IEEE(美国电子电器工程师协会)制定标准的。通常工业界使用的是verilog语言。这两者有共同的特点:1,可以抽象的表述数字电路的行为和架构2,可以从不同的抽象层次描述同一个

11、数字逻辑电路3,这两种语言描述的电路主要在于型号的转换,和工艺没有太大的关系4,语言本身支持不可综合的验证模块的设计,方便开发人员的测试和验证5,两种硬件描述语言书写编辑的过程中使用的文本文件可以很方便地管理6,两种硬件描述语言都比较容易学习和使用。比起VHDL语言,verilog硬件描述语言最显著的优点就是便于学习。因为这种语言是参考了最流行的C语言的语法习惯而开发出来的,学习过C语言或者类C语言的人可以非常迅速地学习这种语言。而且verilog硬件描述语言本身语法非常灵活,也使初学者很容易学习,虽然这种灵活的语法规则经常让人写出不可综合甚至于莫名其妙的代码。课题介绍1.AXI协议AXI协议

12、(advance extensivable interface)是由ARM公司设计的一种总线传输协议。AXI协议的特点包括:1,可以应用于高速度,带宽较大,延迟时间短的设计2,提供了非常灵活的联接架构3,适合用于高延迟的存储控制器的设计4,可以进行非顺序的读写操作5,突发数据读写只需要首地址6,地址和数据分离传输。AXI总线包括五组传输通道(CHANNEL),分别用于写地址(write address),写数据(write data),读地址(read address),读数据(read data),写应答(read response),每一组传输通道有独立的准备(ready),和有效(val

13、id_信号),用于握手协议。下面是AXI4-LITE协议的具体内容:通道写地址写数据读地址读数据写应答端口AWVALIDWVALIDARVALIDRVALIDBVALIDAWREADYWREADYARREADYRREADYBREADYAWADDRWDATAARADDRARADDRBRESPAWPORTWSTRBARPORTARPORT/每一组传输通道之中都有一个准备(ready),和有效(valid)信号。在一个数据传输的系统之中,当主机和从机即将进行数据交互时,数据传输的发起者发出偶、有效(valid)信号,数据传输的接收者发出准备(ready)信号,当准备(ready) 和有效(valid

14、)两个信号都是高电平的时候,数据(data)线上的数据必须是正确的即将传输的信号并且随时可以进行传输。AXI协议规定,在读取数据的时候,应当首先发送读地址,读地址发送握手完成之后开始读数据。在写入数据的时候,应当首先发送写地址,写地址握手完成之后开始写数据。每次读或者写数据之前都应该先发送地址。AXI协议有很多的优点。这个总线协议采用单方向传输数据方案,任何数据信息只允许从一个方向传输,降低了每条线上的逻辑门的数量,降低了信息传输时的延时,降低了总线对系统时钟频率的限制。AXI协议将数据通道和地址通道分离,从而能够根据需要单独对速度慢的通道进行优化,从而降低延时。同时这个协议有很强的灵活性,主

15、机和从机的数据接口是镜像的,在多点对多点传输的系统之中,可以非常快捷的使用这个总线协议。而且AXI协议之中,主机在访问数据之前能发送若干非顺序的地址,还能用不对齐的方式收发数据。AXI总线读取数据时信号的波形AXI总线写入数据时信号的波形2,关于FIFOFIFO,完整的名字是first in first out,翻译为先进先出,是一种存储数据的方式。数据依次进入存储模块之中,先进入的数据会优先被读取出来,最后被写入存储模块的数据会最后被读取出来。在数字系统的设计之中,为了提高数据传送的速度并且在具有不同数据读写速度的数字系统之间传输数据,先进先出结构的存储器件得到了广泛的应用。先进先出存储器是

16、用在两个不同速度的数据收发模块之间的数据缓冲模块。先进先出模块通常有两组输入输出数据端口,每次读写只能有一个端口输入数据,另一个端口输出数据。每次写入一个数,如果没有读出数据,写入的数据会被存储起来,继续写入的数据会依次被存储下来,直到整个存储器的空间被数据充满,整个存储模块进入“满”状态,然后数据将无法被写入到先进先出存储模块之中,等待最先写入的数据从另一个端口被读取出来,数据被全部读取出来之后,存储器模块进入“空”状态。通常使用的先进先出模块有两种实现方式,一种是触发导向结构,另一种是零传输导向结构。前一种结构的先进先出存储器由寄存器阵列组成,而后一种结构的先进先出存储模块的数据进出的顺序

17、由读指针和写指针决定。先进先出模块是数字逻辑系统的数据缓冲模块,如果没有这个模块,发送数据模块每一次读取数据之后,都要等待接受模块处理完毕数据之后才能开始下一次读或者写数据,这样会极大的增加核心处理器的读写时间,浪费处理器的计算资源并且极大得增加整个系统的功耗。3,关于NAND存储芯片闪存是非易失性的存储数据的器件,即使没有电源,闪存内部的数据也不会发生丢失,闪存主要分为NAND型闪存和NOR型闪存。NOR型闪存的特性更接近于内存,它有自己独立的地址和数据线并且能够按字节读取,而NAND型闪存的许多特性更接近硬盘,因为NAND型闪存用同一组总线来传输地址和数据,每次读取或者写入都是针对大块的数

18、据,并且NAND型闪存内部并不能对单独的字节操作。由于NAND型闪存读取数据的特点,被广泛应用于便携的数码产品之中用来存储大量的数据。尽管NAND存储器在操作模式上和硬盘非常地相似,但是NAND存储器本身相比较于硬盘有很大的优势,NAND型存储器是基于半导体工艺制造出来的,单位体积的容量远远大于硬盘之类的磁存储器,而且根据半导体工艺还有许多前进的空间,NAND FLASH的存储密度也在不断上升,相比较而言磁存储器的存储密度的发展远远滞后于半导体存储器,而且硬盘的读写依赖磁头的扫描,这是一个机械装置,本身的稳定性不如电子元器件稳定,尤其是在整个硬盘受到机械扰动的时候,比如放硬盘的桌子晃了一下,读

19、写的稳定性会受到较大的干扰,而闪存基本不受机械扰动的干扰。NAND型存储器的基本存储单元是页,NAND存储器以页为基本单位执行读写数据的操作,以块为基本单位执行擦除操作。本次设计所使用的NAND存储芯片,是东芝公司生产的TC58NVG4D2芯片,存储容量是16GB(2Gx8BIT),全部的存储空间被划分为(8192+640)比特 x 128页 x 2056块。NAND存储器芯片的输入输出如下表格IO1IO8输入输出端口,可以传输数据信息或者地址信息,输入信号CE芯片使能信号,低电平有效,输入信号WE写入操作使能信号,低电平有效,输入信号RE读取操作使能信号,低电平有效,输入信号CLE命令输入使

20、能信号,高电平有效,输入信号ALE地址信息输入使能信号,高电平有效,输入信号WP写入操作保护信号,低电平有效,输入信号RY准备信号,表示芯片是否忙碌,不在忙碌状态则可以进行正常的读写操作,高电平有效,输入信号VCC电源输入,输入信号VSS地线,输入信号NAND存储器芯片的内部电路结构NAND芯片进行操作的每一个部分的时序写入指令的信号时序指令信息在IO端口上由外部输入,在WE(写入操作使能信号)上升边沿被写入到NAND存储器之中,在WE(写入操作使能信号)的上升沿之前,CLE(指令输入使能信号)必须保持为高电平并且高电平的时间超过T_CLS(信号本身的建立时间),在WE(写入操作使能信号)的上

21、升沿之后CLE(指令输入使能信号)依然必须保持高电平一段时间,并且这段时间应该超过信号本身的保持时间。在WE信号的上升边沿的前后除了CLE信号之外,CE信号必须保持有效,其他的使能信号必须保持无效,并且这些信号持续的时间都要超过器件所规定的建立时间和保持时间,数据信号也要遵守这个规则,在WE上升边沿之前T_DS时间建立,在WE上升边沿之后保持T_DH时间。仿真波形图写入地址信息的时序地址的输入与指令的输入在某些方面比较相似,都是在WE信号上升边沿通过IO端口写入信息,控制使能信号要遵守建立时间和保持时间的规则。不同的是地址写入的时候应当写入不止一个地址。本次仿真所使用的NAND存储器芯片有效存

22、储容量是2Gx8bit,因此理论上地址数据至少要有31位,并且由于存储芯片的内部有冗余的存储空间,所以实际上地址应该有32位,也就是四个BYTE,为了方便地址的计算和管理,将块地址和列地址分离开,这样就需要五个字节,所以写入地址的时候需要顺序地写入五个字节的地址。这五个字节的地址的结构如下: 仿真波形图写入数据信息的时序:写入数据的时候,除了WE之外的使能控制信号都应该无效,IO数据线上面的数据会在WE的上升的边沿被写入到NAND存储器之中,可以顺序写入多个数据,但是一次普通写入最多能写入8831个数据,因为加上这个NAND存储器之中加上冗余部分每一页最多8192个字节,一次只能写入一个页。读

23、取数据信息的时序读取数据的时候,除了RE之外的使能控制信号都应该保持为无效状态,这个模式和写入模式的显著区别在于这个模式下数据是从IO端口是NAND FLASH存储器件的输出端口,这个时候不能往IO端口上面写入数据。在RE信号的下降边沿之后一个固定的时间之后, NAND会把需要的数据输出到IO数据端口,之后在RE的上升边沿之后一个固定的时间之后,NAND会停止在IO端口上输出之前RE的下降边沿输出的数据。写入数据整个过程的时序向NAND存储器件写入数据的时候,首先要发送写入指令80h(h表示这个数字是十六进制的,一个占四位,两个刚好占一个字节),然后发送五个字节的地址信息,之后开始写入数据(少

24、于8831个字节的数据),写入数据完毕之后要向NAND存储器件发送一个写数据结束的命令10h,接下来NAND器件会进入忙碌状态,RY端口输出低电平以表示器件正在进行内部数据的处理,此时无法向NAND存储器件写入数据信息或者命令信息或者地址信息,直到RY信号重新回到高电平之后,写数据的操作才正式完成了。读取数据的整个过程的时序读取NAND存储器件中的数据的时候,首先要发送一个读取数据的首命令00h,然后发送读取的地址,然后发送一个读取的尾命令30h,接下来NAND器件就会进入忙碌状态,因为NAND的读也是以页为最小的一个单位来进行操作的,发送读取命令之后,NAND会将需要读取的那一页先写到缓存之

25、中,这个步骤会消耗大量的时间,然后NAND存储器件内部从缓存之中读取出列地址指向的数据以及后面的数据,如果不利用缓存,读取数据只能8831个数据同时从数据端口上输出,而这是不可能的,毕竟目前最先进的民用的CPU的接口也只有一千多个。波形图存储器件的BUSY状态结束之后我的毕业设计计划设计一个NAND FLASH控制器的RTL级别的设计,具体的设计规格如下所述:支持AMBA AXI LITE总线协议支持NAND存储器件的单倍速率传输能够实现对NAND存储器件基本的命令操作,页读取,页写入,块擦除,复位,状态读取,设备识别码读取支持写保护可以配置写入和读取的速率,最大是系统时钟的十六倍支持轮询和中

26、断支持中断的屏蔽和非屏蔽这两种模式。设计之中所使用的EDA工具是SYNOPSYS公司的VCS仿真工具。开发板是XILINX公司生产的ZYNQ 7020 FPGA开发板,存储芯片是一个东芝的16G BIT的NAND FLASH存储芯片。整个设计在LINUX系统环境之下完成。整个流程尽量接近实际的IP模块的设计流程。首先我需要想好要一个基本的BAND控制器的功能,然后规划好设计的模块层次和关键部分,然后规划好整体的设计的思路和验证的流程。接下来完成RTL的设计。完成RTL的设计之后我需要自己搭建一个验证的平台,然后开始仿真测试,实现基本功能之后要尽可能的提高代码的测试覆盖率。然后代码基本完成之后就

27、可以在FPGA上面仿真RTL代码了。整体结构输入输出端口我计划用四个主要的模块来实现我的NAND controller,包括 AXI数据收发模块,读写状态机,先进先出存储队列(FIFO),SDR总线数据收发模块。名称信号流向位宽功能SYSCLK输入1System Clock系统时钟RST_B输入输入1System Reset系统复位信号INTR输出 1Interrupt ,中断信号1.1 控制器与NAND FLASH之间的端口NameDirectionWidthDescriptionWDATA输出 8DATA 输出写入NAND FLASH的数据 RDATA输入8DATA NPUTS从NAND

28、FLASH中读取出来的数据DATAOENN输出 1DATA 输出 ENABLE数据输出使能信号,低电平有效CE_n输出1CHIP ENABLE芯片使能信号CLE输出 1COMMAND LATCH ENABLE命令输入使能信号ALE输出1ADDRESS LATCH ENABLE地址输入使能信号WE_n输出 1WRITE ENABLE写入数据使能RE_n输出1READ ENABLE读取数据使能WP_n输出1WRITE PROTECT写保护RDY输入1READY/BUSY“忙”信号, 这个信号为高时,NAND存储芯片可以正常使用,这个信号为低时,芯片不可访问。1.2 AXI 总线上的端口NameDi

29、rectionWidthDescriptionAWADDR输入 32WRITE Address写数据时,BURST传输中第一个数据的地址AWVALID输入1Write Address Valid 主机发送的ADDR是有效的AWREADY输出1Write Address ReadyThis signal indicates that the slave is ready to accept an address and associated control signals.从机准备好了接受主机发送的地址WDATA输入 32Write DataThe write data bus is 31 bi

30、t wide主机写入的数据WSTRB输入1Write strobesThis signals indicates which byte lanes to update in memory .WLAST输入 1Write LastThis signals indicates the last transfer in a write transfer. 一次传输中的最后一个数据WVALID输入1Write ValidThis signals indicates that valid write data and etrobes are available. WDATA上的数据是有效的WREADY输

31、出 1Write ReadyThis signals indicates that slave can accept the write data. 从机可以接受WDATABRESP输出2Write ResponseThis signals indicates the status of the write transaction 传输完成与否的状态BVALID输出1Write Response ValidThis signals indicates that a valid write response is available BRESP信号准备完毕BREADY输入1Response re

32、adyThis signals indicates that the master can accept the response information 主机准备好接受BRESP信号ARADDR输入32Read AddressThe read address bus gives the initial address of a read burst transaction.读取数据之前应该写入的地址信息ARVALID输入1Read address valid主机发往从机的信号,表明读取数据的地址信息是否有效,高电平代表有效,有效时从机可以开始读取地址信息。ARREADY输出 1Read ad

33、dress ready这个信号是从机发送往主机的信号,表明从机已经准备好了并且正在接收读取数据的地址。RDATA输出 32Read Data读取的数据。RRESP输出2Read Response读取数据之后的应答信号,读取数据之后,应答信号需要回答这次数据传输是否成功,如果数据传输出现错误是什么类型的错误RLAST输出 1Read Last读结束信号,当主机读取数据到最后一个字节的时候,主机应该向从机发送一个RLAST的脉冲用来表示读到了最后一个字节的信息,即将停止读数据。RVALID输出1Read Valid这是一个从机发送往主机的信号,这个信号表示主机需要读取的数据信息已经准备好了,可以随

34、时读取。RREADY输入 1Read Ready这是一个主机发送往从机的输入信号,用来表示主机已经准备好了并且开始接收从机发送往主机的数据信息。AXI总线上的寄存器总表地址名字访问功能介绍32'h0000START_CONRWNAND控制器启动控制寄存器。 32'h0004INT_CONRWInterrupt Control Register中断控制信号 32'h0008INTROAll interrupt flag 中断寄存器32'h000cCOL_ADRRWColumn address of flash,FLASH的行地址32'h0010PAGE_A

35、DRRWPage and Block address of flash. FLASH的页地址32'h0014FIFO_FLAGROFIFO empty and full flag FIFO空或者满的信号量32'h001cTIMINGRWFLASH器件中的时序参数。32'h0020LENRW读取或者写入的数据的字节数目32'h0024DATA_WRW写入FLASH的数据32'h0028DATA_RRO从FLASH中读出的数据32'h002cTIMING_2RWFLASH器件的时序参数开始命令寄存器寄存器比特名字名称以及功能描述7WP写操作保护信号(

36、write protect),可读可写6START开始信号,对NAND存储设备读取或者写入数据信息之前,CPU应该先配置其他寄存器,最后将这一位写为一,之后控制器内部会自行将这一位归零。这一位持续为高的时间只有一个时钟周期。High active to indicate write first command to flash. ,可读可写5:3ADR_CYCAddress cycle number地址周期数。即使是同系列的NAND存储芯片,存储容量不同,也会导致地址的长度不同。因此需要由CPU写入访问NAND器件所需要的地址的字节数。,可读可写2:0MODECommand Operation

37、对NAND存储芯片执行的操作类型,可读可写110:页读取001:页写入010:块擦除erase .011:读取状态read status100: 读取设备识别码read ID.101:软复位reset.111:保留 reserved1.3 4.3 INT_CON地址:0X0004初始值 :0x0000寄存器每一位名字ACCESS名称以及功能描述31:2RSVRWRESERVED1CLR_INTRWInterrupt clear signal清除中断标记位,中断信号出现之后,如果这一位的值是1,那么中断信号会在下一个时钟周期被还原成0,与此同时清楚中断信号也会被NAND控制器内部电路还原成0。可

38、读可写0INT_MRW中断屏蔽信号,当这一位被CPU写为1时,NAND控制器输出端口上的中断信号不会变成高电平,但是寄存器中的中断信号依旧会正常地出现。interrupt maskWhen it is set 1, finished interrupt will mask, else it will unmask. 可读可写1.4 4.3 INT地址:0X0008初始值Default value:0x0000寄存器每一位名字ACCESS名称以及功能描述0FNS_INTROFinished interrupt中断信号。这个中断是用来描述一次操作完成的中断信号。一次读取或者写入操作完成之后这个信号

39、会从零变成一,之后CPU必须对INT_CON寄存器之中的INT_CLR这一位写入一个高电平,之后中断信号就会归零。这个寄存器是一个只读的寄存器,只能读取其中的数据,而不可以向这个寄存器之中写入任何信息1.5 4.4 NAND_ADR1.5.1 4.4.1 COL_ADR地址:0X000c初始值 :0x0000 寄存器每一位名字ACCESS名称以及功能描述31:16RSVRWReserved15:8COL_ADR2RW列地址的第二个字节的信息,可读可写7:0COL_ADR1RW列地址的第一个字节的信息,可读可写1.5.2 4.4.2 PAGE_ADRADDR:0X0010Default valu

40、e :0x0000寄存器每一位名字ACCESS名称以及功能描述31:24RSVRWReserved23:16PAGE_ADR3RW页地址的第三个字节的内容,可读可写15:8PAGE_ADR2RW页地址的第三个字节的内容,可读可写7:0PAGE_ADR1RW页地址的第三个字节的内容,可读可写1.6 4.5 FIFO_FLAG地址:0X0014初始值 :0x0000寄存器每一位名字ACCESS名称以及功能描述31:2 RSVRORESERVED1EMP_FLAGROEmpty flag先进先出存储模块空标记。当先进先出存储模块刚刚被初始化或者写入的数据全部被读取出来的时候,先进先出存储模块处于一个

41、没有存储数据的状态,这时EMP_FLAG为高电平,并且这一位只可以被读取出来而CPU不可以向这一位之中写入任何数据0FULL_FLAGROFull flag先进先出存储模块满标记。当先进先出存储模块中有16个写入的数据没有被读取出来的时候,先进先出存储模块处于被存储数据充满的状态,这时FULL_FLAG为高电平,并且这一位只可以被读取出来而CPU不可以向这一位之中写入任何数据1.7 TIMING地址:0X001C初始值Default value :0x0000寄存器每一位Bits名字ACCESS名称以及功能描述31:28RSVRWReserved27:24TWAIT2RWCounter use

42、d in page program after final to first address 在写数据的时候,控制器向存储器件写入了地址之后,需要等待一段时间之后才能开始写入数据的操作。这个这一部分就是用来存储控制器需要等待的时间的。并且这一部分是可读刻写的。23:20TWAIT1RW在读取或者写入数据的过程中,NAND存储器件进入忙碌状态之后,回回归到正常读写的状态,这个时候控制器需要等待一段时间,然后才能对存储器件进行操作,TWAIT1这个变量表示的就是控制器需要等待的时间。并且这一部分是可读刻写的。19:16THRW写入或者读取出来一个字节的数据,写入时能信号或者读出使能信号低电平的时间

43、。并且这一部分是可读刻写的。15:12TPRW,写入或者读取出来一个字节的数据,写入时能信号或者读出使能信号高电平和低电平的总时间。并且这一部分是可读刻写的。11:8TALHRW地址使能信号的保持时间。并且这一部分是可读刻写的。7:4TALSRW地址使能信号的建立时间。并且这一部分是可读刻写的。3:0TCLHRW命令使能信号的保持时间。并且这一部分是可读刻写的。1.8 4.8 LEN地址:0X0020初始值:0x0000寄存器每一位名字ACCESS名称以及功能描述31:16RSVRWReserved15:0LENRWCPU希望从NAND存储器之中读取的数据的字节总数。这一部分是可读可写的1.9

44、 DATA_WADDR:0X0024Default value :0x0000寄存器每一位名字ACCESS名称以及功能描述31:0DATA_WRW这一部分是用来存储数据,而这里存储的数据会被写入到NAND存储器件之中去1.10 4.10 DATA_RADDR:0X0028Default value :0x0000寄存器每一位名字ACCESS名称以及功能描述31:0DATA_RRO这一部分是用来存储从FIFO之中读取出来的数据的,当CPU完成了读取DATA_R的一系列操作之后,控制器内部会将先进先出模块之中存储的数据传输到这个寄存器之中并输出到AXI总线上。1.11 各模块的设计1。AXI数据收

45、发模块这个模块是挂在AXI总线上的。这个模块用于和建立寄存器并且和允许中央处理器按照AXI协议访问NAND控制器从而控制并了解整个NAND 控制器的工作。这个模块通过AXI总线协议从中央处理器中得到即将执行的操作的信息,然后将开始信号(start),地址,FLASH时序参数,工作模式等信息送往状态机模块,然后根据具体的工作模式(读或者写)来判断将信号写入FIFO之中或者从FIFO之中读出数据。2。状态机模块这个模块主要用来控制整个NAND控制器对NAND闪存的操作的状态。一共11个状态。当前状态执行操作下一状态跳转条件IDLE初始态复位之后进入这个状态,在这个状态之中不执行任何操作CMD1AX

46、I模块之中的START_CON6变1。(在此之前其他操作相关的寄存器应该配置完毕,这一点由处理器自行执行,NAND控制器不能自行检测)CMD1Write first command, 向NAND FLASH中写入第一个操作数。ADDR读数据,写数据,块擦除? 这四种模式下,SDR模块回FINISH信号BUSY.NAND FLASH软复位模式,SKR模块回FINISH信号之后R_DATA.读状态模式,SDR回FINISH信号之后ADDRWrite address, address length is written as below向NAND FLASH之中写地址。同时计算具体的地址参数并且发送

47、往SDR模块CMD2).读数据模式,SDR模块回FINISH信号W_WAITWrite mode, address sent process over( after ALE set to 0 ).写模式,SDR模块回FINISH信号R_DATA读ID模式,SDR回FINISH信号.CMD2Page erase: D0'h写第二个操作数,(某些模式只需要一个操作数,并不需要第二个操作数)BUSYSecond command sent process over( a period of time after CLE is set to 0).SDR回 FINISH信号.BUSY.NAND

48、FLASH处于忙碌状态,等待NAND FLASH。RW_WAITread mode, RD is set to 1. SDR模块回FINISH信号FINISHReset or write mode, RD is set to 1. SDR模块回FINISH信号RW_WAIT读数据或者写数据之后,需要等待一段时间让NAND将cache之中的数据写到MEMORY之中去R_DATAThere is a counter counting the clock cycles. Upon reaching the configured time, controller goes to t SDR模块回FIN

49、ISH信号he next state.R_DATA从NAND FLASH中读取数据R_WAITAfter the last byte of data read from the NAND SDR模块回FINISH信号R_WAIT读数据,需要等待一段时间FINISHThere is a counter counting the clock cycles. Upon reaching the configured time, controller goes to the next state. SDR模块回FINISH信号W_WAIT读数据或者之后,需要等待一段时间让NAND将cache之中的数据

50、写到MEMORY之中去W_DATAThere is a counter counting the clock cycles. Upon reaching the configured time, controller goes to the next state. SDR模块回FINISH信号W_DATAWrite data to the flashCMD2After the last byte of data is sent.(the last posedge of WE)FINISH结束模式IDLE进入FINISH状态之后,下一个时钟周期无条件跳转回IDLE状态。读数据的状态跳转如下:ID

51、LE -> CMD1 -> ADDR -> CMD2 -> BUSY -> RW-WAIT -> R_DATA -> R_WAIT -> FINISH -> IDLE写数据的状态跳转如下IDLE -> CMD1 -> ADDR -> W_WAIT -> WDATA-> CMD2 -> BUSY -> RW_WAIT -> FINISH读取ID的状态跳转如下IDLE -> CMD1 -> ADDR -> R_DATA -> FINISH读取NAND状态的状态跳转如下:ID

52、LE -> CMD1 -> R_DATA -> FINISH块擦除的状态跳转IDLE -> CMD1 -> ADDR -> CMD2 -> BUSY -> FINISH软复位的状态跳转IDLE -> CMD1 -> BUSY -> FINISH3.SDR数据收发模块这个模块用来产生NAND FLASH存储芯片的输入信号并且读取NAND FLASH存储芯片的输出数据,并且处理NAND芯片中的数据和FIFO之间的交互。这个模块接受状态机模块发送来的 时序数据,操作方式,开始信号,FIFO模块发送来的 “空”“满”信号和数据,并且由此

53、产生NAND的控制信号以及对FIFO的操作信号3.1NAND 的控制信号这个模块内部有一个状态机,其状态图如下所示:当核心状态机模块的跳转到IDLE态以外的任何一个状态时时,会向SDR收发模块发送开始信号,然后SDR状态机从IDLE状态跳转到PRE状态。在PRE是用来计算输入到NAND存储器的控制信号的建立时间的。进入PRE状态,计数器就会开始计算时钟周期数COUNT1,当COUNT1 等于建立时间时,SDR状态机进入下一个状态LOOP状态。LOOP状态下,SDR模块会产生WE或者RE信号。比如向NAND存储器写入数据的时候,数据会在WE的上升沿写入到存储器之中,并且在每一次写数据的过程之中,

54、WE上升沿之前保持低电平和上升沿之后保持高电平的时间分别有一个最小值T_WP,T_WH,小于该值数据将无法正常地写入到存储器之中。因此计数器COUNT1记录时间,时间到达T_WP之前WE为低电平,时间到达T_WP之后且(T_WP+T_RP)之前WE为高电平。计数器COUNT1时间记慢之后强制归零,同时计数器COUNT2加一,所有数据写入完成之后(COUNT2等于预期写入的数据的字节数),COUNT2,COUNT1归零并且SDR状态机的状态跳转到POST状态。POST状态是用来计算信号的保持时间的。COUNT1计数器的时间与保持时间相同的时候SDR状态机进入FINISH状态,在FINISH状态一

55、个时钟周期之后无条件回到IDLE状态。写入地址的时候的波形和SDR状态机的状态写入数据的时候的波形和SDR状态机的状态3.2 FIFO的操作信号NAND控制器处于向存储器写入数据的模式时,并且将数据写入到FIFO中之后,FIFO处于非“空”状态,SDR模块将向FIFO发送读信号(一位,保持一个时钟周期)和写数据(八位,保持一个时钟周期)从而可以从FIFO之中读取数据。当AXI模块写入FIFO之中的数据被读取完时并且还有数据要写入FIFO之中时,SDR模块无法从FIFO之中读取数据直到FIFO回到非空状态。同样的,NAND控制器处于从存储器读取数据的模式时, SDR模块将向FIFO发送写信号(一位,保持一个时钟周期)和写数据(八位,保持一个时钟周期)从而可以向FIFO之中写入数据。当SDR模块写入FIFO之中的数据被读取完时并且还有数据要写入FIFO之中时,SDR模块无法向FIFO之中写

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论