一种NAND Flash PHY
技术领域
本发明涉及一种NAND Flash PHY,主要作用于Flash的DDR模式,能够显著提高Flash的接口频率。
背景技术
目前,采用PCIE-NVME作为接口的SSD已经成为一种趋势,对Flash PHY的设计也提出了更高的挑战性。通常Flash接口支持SDR或者DDR模式,并且每一种模式又有不同的timing mode。在高速的Flash接口中,通常采用Flash的DDR模式。然而在高速的DDR模式中,对DQ和DQS的相位调节至关重要,因此,Flash PHY的设计也是存储行业的一项难点。
现有技术存在的技术问题1:目前常见的NAND Flash PHY在FPGA和ASIC上并不一样,通常在做ASIC芯片的时候,由于FPGA上Flash的接口速度远远低于ASIC,导致在FPGA原型验证阶段不能充分的验证逻辑电路的正确性。
现有技术存在的技术问题2:不仅如此,在使用FPGA作为SSD的主控的时候,为了满足所需要的带宽,通常需要并行多个NAND Flash通道,极大的浪费资源和面积。
以上两个问题均是由于Flash的接口速度较低导致,故只要能够提高接口速度,便能有效的解决技术问题1和技术问题2。在常见的ASIC设计中,Flash的PHY都会集成有DLL,但是该类型的DLL基本不能在FPGA上通用。本方案设计的PHY和内部的DLL能够在FPGA和ASIC上都容易实现。在Xilinx的FPGA上,可以利用其内部的IDELAY,ODEIALY,IDDR,ODDR,LUT,DFF等相关资源;在ASIC上,可以利用OR,NOR,NADND,AND等相关门电路。经过实践证明,在Xilinx ZYNQ系列FPGA上,该设计能够实现的频率为200MHz/s,即单通道16bits位宽的Flash接口速度为800MB/s,完全能够满足FPGA产品的速度要求;在ASIC上,可以达到400MHz/s,单通道16bits位宽的Flash接口速度为1.6GB/s,在性能上完全满足常见的PCIE3.0X4接口的SSD控制器。
发明内容
本发明旨在针对上述问题,提出一种能够在ASIC和FPGA通用的NAND Flash PHY。
本发明的技术方案在于:
一种NAND Flash PHY, DQ通过DELAY_DQ送至IDDR GRP; DQS通过DELAY_DQS0送至IDDR GRP;使得DQ在经过DELAY_DQ、DQS经过DELAY_DQS0后产生DQS相对于DQ的90°相位延时;
IDDR GRP通过DQS捕获到正确的DQ过后,将DQ及生成的wdata送入到ASYNC FIFO中;另一方面,DELAY_DQS0后还设有二级延时单元DELAY_DQS1,经DELAY_DQS1二次延时后送至ASYNC FIFO作为ASYNC FIFO的wrclk;其中,DELAY_DQS0经DELAY_DQS0为DQS_90°,DELAY_DQS1为DQS_(invert(180°)+180°)。
所述DELAY_DQS0通过DLL_DQS0实现控制,DELAY_DQS1通过DLL_DQS1实现控制。
所述DLL_DQS0及DLL_DQS1中的鉴相器的原理如下:
(1)将refclk 依次送入到N个delay tap单元中进行延时调节,每个delay tap单元由一个反相器构成,通过refclk对N个delay tap单元的输出进行采样,并存至每个delaytap单元对应的TAP REG中;
(2)将当前TAP REG【n】和下一个TAP REG【n+1】进行异或非操作,并将其结果送至delt寄存器delt【n】中,得到一个N位的delt码流;
(3)将此delt码流送至相位校验单元以计算delt码流中两个1之间0的个数,进而得到180°的相位延时。
所述DELAY_DQS1的原理如下:
DQS的输入信号为delay in,通过相位校验单元计算得到N个sel信号延时后,DQS的输出信号即实现延时90°或者180°相位。
本发明的技术效果在于:
1.解决了ASIC和FPGA上NAND Flash PHY不能通用的问题;
2.解决了FPGA上PHY的性能较低的问题,该PHY能够达到较快的运行频率。
附图说明
图1为本发明一种NAND Flash PHY的Nand Flash写时序图。
图2为本发明一种NAND Flash PHY的Nand Flash读时序图。
图3为本发明一种NAND Flash PHY的整体结构示意图。
图4为本发明鉴相器的结构示意图。
图5为本发明DELAY_DQS1的结构示意图。
图6为本发明布局示意图。
具体实施方式
如图1所示,通用的Flash要求控制器送给Flash的DQ和DQS默认相位差为90°。
如图2所示,通用的Flash送给控制器的DQS和DQ之间有一定的延时,控制器还需要对DQ进行做延时调节,才能使其DQS的上升沿和下降沿处于DQ的有效时间窗口,并且随着温度的变化,调节的值要随时变化。该问题一直是本领域的一个设计难点。
如图3所示,本发明设计的一种NAND Flash PHY,在write flash方向,DQ经过clk送至DQ ODDR,DQS经过clk_90送入到ODDR;即输出的DQ和DQS默认有90°的相位差值,写方向的设计相对简单,并且稳定可靠。
在read flash方向,DQ通过DELAY_DQ送至IDDR GRP;实现对每一bit的DQ进行细微调节;DQ到IDDR GRP的固有延时为750ps;同时,DQS通过DELAY_DQS0进行90°相位调节后送至IDDR GRP。
DELAY_DQS0既可以通过cpu进行控制,也可通过DLL_DQS0模块控制,当外界环境变化的时候,DLL_DQS0会产生不同的值送给DELAY_DQS0单元。使其相位差固定在90°。DELAY_DQS0调节过程中,固定延时为200个ps,每一级的延时为78ps,总共有32级2.696ns延时可供调节。在200MHz/s的速度下,90°相位延时需要调节1.25ns,满足设计需求。使得IDDR GRP能够正确的通过DQS_90°捕获到DQ。
IDDR GRP通过DQS捕获到正确的DQ过后,将DQ及生成的wdata送入到ASYNC FIFO中;另一方面,DELAY_DQS0后还设有二级延时单元DELAY_DQS1,经DELAY_DQS1二次延时后送至ASYNC FIFO作为ASYNC FIFO的wrclk;最后,ASYNC FIFO将所有数据进行缓存,最后通过异步时钟域处理即可全部将数据准确无误的读出去。
其中,DELAY_DQS0经DELAY_DQS0为DQS_90°,DELAY_DQS1为DQS_(invert(180°)+180°);即wrclk由DQS_90°进行相移180°并同时取反而来。其中,DELAY_DQ及DELAY_DQS0可以直接利用Xilinx FPGA上的IDELAY;所述DELAY_DQS0通过DLL_DQS0实现控制,DELAY_DQS1通过DLL_DQS1实现控制。DELAY_DQS1中,每级的延时时间为400ps,200MHz/s的速率下,180°的相位延时大约为6级。
如图4所示,为DLL_DQS0及DLL_DQS1中的鉴相器的原理示意图。鉴相器的主要目的是对通过输入的ref clk进行相位鉴定,并且输出一串带有相位信息的数据码流送给相位校验单元,相位校验单元能够通过该码流计算出180°的相位和90°的相位延时级数。
所述DLL_DQS0及DLL_DQS1中的鉴相器的原理如下:
(1)将refclk 依次送入到N个delay tap单元中进行延时调节,每个delay tap单元由一个反相器构成,通过refclk对N个delay tap单元的输出进行采样,并存至每个delaytap单元对应的TAP REG中;其中, N根据时钟周期和每个delay tap单元所能实现的延时得出。
(2)将当前TAP REG【n】和下一个TAP REG【n+1】进行异或非操作,并将其结果送至delt寄存器delt【n】中,得到一个N位的delt码流;
(3)将此delt码流送至相位校验单元以计算delt码流中两个1之间0的个数,进而得到180°的相位延时。
其中,鉴相器的设计关键是对DLL_DQS0及DLL_DQS1的布局布线部分,布局布线的优劣,决定了DLL_DQS0及DLL_DQS1的精度。
如图5所示,图5为本发明DELAY_DQS1的结构示意图。DELAY_DQS1的原理如下:
DQS的输入信号为delay in,通过相位校验单元计算得到N个sel信号延时后,DQS的输出信号即实现延时90°或者180°相位。
在DELAY_DQS1的设计过程中,通过人为的约束每个cell的位置和关键路径,做到每一级的延时和DLL的每一级延时相匹配,才能确保delay line延时的准确性。在我们常见的硬件逻辑设计中,都是基于行为级进行描述,这就会导致每次综合后我们的cell的名称都不一致,给后端的布局布线约束造成极大的困难。在本设计中,关键路径采用门级方案实现,每次综合后不会对名称有任何影响,有效的解决了布局布线约束的问题。
如图6所示,是本设计的DLL DELAY LINE和DQS DELAY LINE的布局示意图。即DLL的delay和DQS DELAY的每一级延时相等。
实现的结果如下:
在Flash的写方向,直接使用两个相位差为90°的clock,分别命名为clk和clk_90。clk为DQ的时钟,clk_90为DQS的时钟,那么输出到Flash的DQ和DQS默认成90°相位差,Flash内部能够正取的通过DQS捕获到DQ。解决写方向数据的相位问题。
在Flash的读方向:从Flash输入到Controller的DQS经过DELAY_DQS0延时后,将DQS做一定的相位延时,使得DQS的上升沿和下降沿在DQ的有效时间窗口。将延时过后的DQS和DQ分别送入IDDR GRP,此时IDDR GRP会通过延时过后的DQS输出准确的DQ采样数据。再将延时过后的DQS进行取反并且延时180°,将此DQS和IDDR GRP输出的DQ全部送入ASYNC FIFO进行缓存。最后外部可以通过异步时钟将数据从ASYNC FIFO中读出。