一种片上嵌入式Flash 测试接口的设计
2022-10-20钱劲宇强小燕屈凌翔
钱劲宇,强小燕,屈凌翔
(中国电子科技集团公司第五十八研究所,江苏 无锡 214072)
0 引言
随着信息技术的飞速发展,用户对数据存储系统的容量、功耗、速度等要求也越来越严格[1-2]。Flash 存储器相对传统的存储器件RAM 而言,具有集成度高、体积小、成本低等优点[3-4],因而随着集成电路的规模越来越大,Flash 存储器飞速发展,逐渐成为系统芯片主流的容量存储媒体[5]。
目前Flash 存储器在完成设计后,通常将串行标准接口作为测试接口进行擦写测试,而串行时钟频率比较低,传输数据慢,测试效率低。另一方面,Flash 存储器的测试往往存在着擦除、编程数据比较慢的问题,这对存在多块Flash 的芯片产生了巨大的测试量,需要进行大量重复的测试,导致需要的测试时间较长[6-7],因此,如何提高测试效率,简化测试流程,在Flash 测试中显得尤为重要。
本文对片上Flash 存储器增加了测试接口,设计了片外测试通道,实现了片上嵌入式Flash 的可测试性。为了提高测试速度,降低测试成本,一方面,设计了基于1/2/4/8 线多线传输的SPI 测试接口,在兼容串行传输数据的同时支持并行传输数据,另一方面,在确保稳定性的情况下,实现了灵活选定1/2/3 块Flash 存储器并行擦写测试的设计。
1 总体设计
Flash 存储器的总体设计主要由Flash 控制器模块和Flash 测试器模块两部分组成,如图1 所示,正常工作模式时由Flash 控制器模块控制,实现Flash 与内核之间的交互,测试模式时由Flash 测试器模块控制,通过外部测试引脚来实现对Flash 的编程、读取和擦除操作。Flash控制器模块和Flash 测试器模块通过选通模块来实现对9 块Flash 的控制,选通信号可以通过内部寄存器配置来进行模式切换。
本文选用的Flash 是一款CMOS 页擦除、附带ECC校验的字编程嵌入式存储器,数据输入总线位宽为36 bit,数据输出总线位宽为144 bit,地址总线位宽为15 bit。内部存储空间可以分为存储块和信息块两部分,其中存储块的空间为32 K×144 bit,512页,每页容量为1 KB,信息块的空间为64×144 bit,8页,每页容量为1 KB。Flash IP的接口信号如表1 所示。
表1 Flash 接口信号
在进行编程、读取和擦除操作期间时,CS 都必须保持为1,若CS 变为0,则忽略其余所有控制信号和地址信号。Flash IP 在进行读取、编程以及擦除时接口信号都必须满足相应的时序要求,测试Flash IP 的读取操作的时序图如图2 所示,其中IFREN 为1 时选定信息块,为0时选定存储 块。首先将CS置为1,ADDR 和IFREN 在AE 上升沿到来前后都需要保持相应的建立时间tAS 和保持时间tAH,在AE 置为1后,等待tAC后,数据输出总线DOUT 将相应地址的数据输出。在读操作期间时,PROG、SERA、MASE、NVSTR 将保持为0 直到操作完成。
测试Flash IP 的编程操作的时序图如图3 所示,其中AP 为2'b11 时DIN[35:0]对应于编程位[143:108],AP 为2'b10 时DIN[35:0]对应于编程位[107:72],AP 为2'b01 时DIN[35:0]对应于编程位[71:36],AP 为2'b00 时DIN[35:0]对应于编程位[35:0]。进行编程操作时,AE 类似于时钟信号,IFREN、ADDR、AP、PROG、DIN、CS 在AE的上升沿到来前后都需要保持相应的建立时间和保持时间。在AE 置为1后,等待tNVSTR后,NVSTR 置为1,tPROG 为编程时间,编程结束后,NVSTR 置0,等待tCSLW后,CS 置0。在编程操作期间,SERA、MASE 将保持为0直到编程操作结束。
测试Flash IP 的擦除操作的时序图如图4 和图5 所示,Flash IP 被分成512 页的相同的1 KB 空间,擦除方式有页擦除和全擦除2 种方式,页擦除可以对任何单独一页进行擦除,全擦除直接对整块Flash 进行擦除,其中SERA 为页擦除使能信号,MASE 为全擦除使能信号,两种擦除方式不能同时触发,同一时间仅一种擦除使能信号置位,NVSTR 根据擦除方式保持相应的擦除时间。
2 测试逻辑设计
Flash 测试器的结构如图6 所示,可以将其分为3 个模块:转换模块、控制模块和选通模块。转换模块连接外部SPI 接口选择1/2/4/8 线进行传输,提取出指令、数据和地址,进行相应的转换,控制模块根据测试指令,输入满足Flash IP 操作时序的控制信号,选通模块根据片选指令,来选择1/2/3 块Flash 进行测试。在编程指令时,由于Flash IP 的数据输入总线位宽为36 bit,因此先要将SPI 传输的数据转换为36 bit 数据暂存在写数据FIFO中,再依次等待控制模块输入对应的编程操作的控制信号时,传入对应的Flash IP 数据输入总线DIN 中。读取指令时,控制模块先执行读取操作将数据输出总线DOUT的数据读出,暂存在位宽为144 bit 的读数据FIFO中,通过转换模块将144 bit 数据转换为1/2/4/8 bit 数据,等待SPI 工作时传输到片外比较器中。
Flash 测试器模块的具体操作流程如图7 所示。首先通过内部控制信号进入测试模式,在进入测试模式后,通过配置SPI 可以实现1/2/4/8 线数据传输,SPI 接口持续输入测试序列,来确定对Flash 测试器的操作。其次经SPI 接口输入片选指令,来选定需要进行操作的Flash IP,可以灵活选定1/2/3 块Flash。选定Flash后,再输入操作指令,来控制对Flash 进行编程操作、读取操作或者擦除操作。如果是编程操作,会继续等待SPI 接口输入编程地址以及操作编程个数,连续输入编程数据至对应的Flash IP,直到编程个数为0后,此次编程测试结束。如果是读取操作,则继续等待输入读取地址以及操作读取个数,随后读取对应地址的数据至片外比较器进行校验,读取个数为0后,此次读取测试结束。如果是擦除操作,则输入擦除地址后直接进行擦除操作。待操作结束后,则可以输入下一次测试指令继续进行测试。
3 仿真验证
在Linux 平台上利用NCverilog 对Flash 存储器测试接口设计进行仿真。Flash 存储器的编程操作只能把数据位从1 变0,而不能将数据位从0 转换为1,只有擦除操作可以实现数据位从0 到1 的转换[8],因此为了仿真测试的正确性,在编程和读取操作前,首先应该对Flash进行一次全擦除操作。图8 所示是对Flash1、Flash2 进行的串行仿真测试,首先依次对Flash1、Flash2 进行一次全擦除操作,然后再通过SPI 分别向Flash1、Flash2 输入一个144 bit 数据,由于数据输入总线DIN 位宽为36 bit,因此需要4 次编程操作,通过地址映射控制信号AP 来写入0 地址的144 bit中,随后再读取0 地址的数据,读出的数据与写入的数据相符。
为了加快测试速度,可以将上述串行测试转换为并行测试,如图9 所示,对Flash1、Flash2 同时进行擦除操作和编程操作,然后依次读取对应地址的数据,可以发现,与单独操作Flash 相比,简化了整体操作流程。由仿真测出,进入测试模式后编程一片Flash 全空间的时间在3.2 s 左右,则串行编程9 片Flash 的时间大概在28.8 s,若每次并行测试3 片Flash,则只需要9.6 s 左右即可完成,由此可见,并行测试大大降低了测试成本,提高了测试效率。
4 结论
本文设计并实现了一种片上嵌入式Flash 存储器的测试接口,测试接口能够在外部操作指令的控制下实现对Flash 存储器的编程、读取和擦除操作,实现了Flash存储器的可测试性,并进一步实现了基于多线SPI 的测试接口以及Flash 存储器并行测试的设计,有效提高了Flash 存储器的测试速度,降低了测试成本。通过仿真验证,实现了测试功能的要求,并成功应用于一款32 位浮点微处理器中。