NAND Flash Controller

发布于 2021-04-05  196 次阅读


项目简介

该项目旨在实现一个NAND Flash Controller,支持ONFI和toggle两种闪存接口,并且支持LDPC ECC纠错

闪存接口及其时序

不管是哪一种接口,闪存的读写都按照先是命令周期,地址周期,数据周期的顺序进行的,接口和模式主要是在信号以及时序上有差别

ONFI async

ONFI异步模式的信号

信号 用途
CE# 片选使能,低电平有效
WE# 写使能,低电平有效
RE# 读使能
CLE 命令锁存信号,命令周期应将其拉高,保证命令锁存
ALE 地址锁存信号,地址周期应将其拉高,保证地址锁存
I/O[7:0] 复用的信号线,命令,地址,数据的传输路线(双向)
R/B# 状态指示信号,1为就绪,0为忙碌(输出)
WP# 写保护,通常情况下应保持在1(或者在前端设计时直接不考虑该信号)

接口设计思路

使用状态机进行时序的控制,同时设计了两个计数器,一个用于辅助状态的跳转,一个用于确保数据全部输入或输出

LDPC ECC原理

寄存器配置

寄存器组

名称 用途 地址
col_addr1 传输的第一个8位地址,或者说列地址 0
col_addr2 传输的第二个8位地址,或者说列地址 1
row_addr1 传输的第三个8位地址,或者说行地址 2
row_addr2 传输的第四个8位地址,或者说行地址 3
row_addr3 传输的第五个8位地址,或者说行地址 4
id_reg0 id的第一部分 5
id_reg1 id的第二部分 6
id_reg2 id的第三部分 7
id_reg3 id的第四部分 8
cmd_reg 存储命令 9
err_reg ecc错误标志 10
status_reg 存储闪存的状态 11

对于寄存器的说明

寄存器对于

主控逻辑

AHB-Lite接口设计

坏块管理

异步FIFO

由于AHB_LITE总线的工作频率快于闪存的工作频率。为了解决跨时钟域会带来的亚稳态问题,必须使用异步FIFO对数据进行同步后才能进行传输。异步FIFO选用了SYNOPSYS的designware库中的成熟IP。

信号 用途
hclk 快时钟,整个控制器使用
hreset_n_in 复位信号
ahb_haddr 32位,总线访问的地址
ahb_write 写使能
ahb_hsize 3位,传输尺寸
ahb_hburst 3位,突发传输类型
ahb_htrans 2位,传输类型
ahb_hwdata 32位,主机给从机的数据
ahb_hrdata 32位,从机给主机的数据
ahb_hready 从机反馈给主机的就绪信号
clk_s 慢时钟
dclk 延迟相位时钟
R_Bn 闪存的就绪或者忙信号
DQ 8位,闪存的命令/地址/数据复用接口
DQS 闪存的数据选通信号
CLE 闪存的命令锁存信号
CE_n 片选信号
ALE 闪存的地址锁存信号
RE_n 闪存的读使能信号
WE_n 闪存的写使能信号


追求理性 独立思考 不做韭菜