一种SD卡模型的时序控制方法转让专利

申请号 : CN201410173001.6

文献号 : CN103942130B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李风志杨萌姚香君戴绍新

申请人 : 山东华芯半导体有限公司

摘要 :

本发明公开了一种SD卡模型的时序控制方法,用于SD卡模型验证的验证平台的激励创建有用于随机SD卡标准时序值的类,并匹配该随机SD卡标准时序值的类,还创建有关联不同时序值用以产生相应时序参数的类;适配待测的SD卡模型,根据命令操作和数据读写生成激励时,对命令操作和数据读写的不同时段随机相应的时序值,并配置相应的时序参数。依据本发明可以更好的控制SD卡模型的时序。

权利要求 :

1.一种SD卡模型的时序控制方法,其特征在于,用于SD卡模型验证的验证平台的激励创建有用于随机SD卡标准时序值的类,并匹配该随机SD卡标准时序值的类,还创建有关联不同时序值用以产生相应时序参数的类;

适配待测的SD卡模型,根据命令操作和数据读写生成激励时,对命令操作和数据读写的不同时段随机相应的时序值,并配置相应的时序参数。

2.根据权利要求1所述的SD卡模型的时序控制方法,其特征在于,生成激励时,命令操作与数据读写分开,并通过标志位标识命令操作与数据读写的起始位置,从而,区分出不同的时段而相应随机时序值,并配置相应的时序参数。

3.根据权利要求2所述的SD卡模型的时序控制方法,其特征在于,随机值包括:Ncr:除了命令CMD2和ACMD41外的命令结束位到回复起始位之间的时钟周期;

Nac:命令结束位到读数据起始位之间的时钟周期。

4.根据权利要求1至3任一所述的SD卡模型的时序控制方法,其特征在于,命令操作中根据命令类型确定延时时间,并在延时时间到达后进入回复命令过程。

5.根据权利要求4所述的SD卡模型的时序控制方法,其特征在于,命令类型若为CMD2或者ACMD41,则延时5个时钟周期,若为其他命令则从2~64个时钟周期中随机出延时时间。

6.根据权利要求1至3任一所述的SD卡模型的时序控制方法,其特征在于,在数据读写中接收完一组数据,则在等待两个时钟周期后,在数据线DAT0上回复CRC状态。

说明书 :

一种SD卡模型的时序控制方法

技术领域

[0001] 本发明涉及一种SD卡(Secure Digital Memory Card,安全数码存储卡)模型的时序控制方法,属于片上系统(System on a chip, SoC)芯片验证技术领域。

背景技术

[0002] 对于一个SoC芯片,在一些应用中需要挂载外部设备,如SD卡,这就需要在SoC模块级中验证SD卡的控制器以及在顶层验证SoC系统能否对SD卡进行正确操作。模块级验证及顶层验证是在电脑上利用仿真软件进行验证,所以如果想在仿真时验证SoC芯片的SD功能的正确性就需要一个兼容性好的SD卡模型。
[0003] 具体来说,SD卡是SD总线的外挂设备,通过SD控制器与片上总线AHB(Advanced High Performance Bus,高级高性能总线)相连,控制器分别通过命令线、数据线向SD卡端发送命令,并从SD卡端接收响应。通信过程中卡是被动的,再接收到控制器相关命令后进行相应的反馈。
[0004] 在现有的技术中,一般采用设计的思想利用verilog语言设计SD卡模型,这种方法虽然可以设计SD卡模型,但是由于该类设计是采用时钟跳变进行时序控制,各个控制逻辑并行进行。
[0005] 该类设计方法灵活性不足,表现在一方面是不能对时序做到很好的控制,如对于SD标准的时序值Ncr,如果采用该类设计的思想,也就是在某个时钟触发后再延时Ncr个时钟周期,从而导致代码很难调试,而且很难使得其值在2到64之间随机。
[0006] 另一方面是难以利用状态机控制SD卡状态转换,如卡识别模式是一个顺序过程,而数据传输模式中的SD卡状态相互跳转。

发明内容

[0007] 因此,本发明的目的在于提供一种SD卡模型的时序控制方法,以更好的控制SD卡模型的时序。
[0008] 本发明采用以下技术方案:
[0009] 一种SD卡模型的时序控制方法,用于SD卡模型验证的验证平台的激励创建有用于随机SD卡标准时序值的类,并匹配该随机SD卡标准时序值的类,还创建有关联不同时序值用以产生相应时序参数的类;
[0010] 适配待测的SD卡模型,根据命令操作和数据读写生成激励时,对命令操作和数据读写的不同时段随机相应的时序值,并配置相应的时序参数。
[0011] 上述SD卡模型的时序控制方法,生成激励时,命令操作与数据读写分开,并通过标志位标识命令操作与数据读写的起始位置,从而,区分出不同的时段而相应随机时序值,并配置相应的时序参数。
[0012] 上述SD卡模型的时序控制方法,随机值包括:
[0013] Ncr:除了命令CMD2和ACMD41外的命令结束位到回复起始位之间的时钟周期;
[0014] Nac:命令结束位到读数据起始位之间的时钟周期。
[0015] 上述SD卡模型的时序控制方法,命令操作中根据命令类型确定延时时间,并在延时时间到达后进入回复命令过程。
[0016] 上述SD卡模型的时序控制方法,命令类型若为CMD2或者ACMD41,则延时5个时钟周期,若为其他命令则从2~64个时钟周期中随机出延时时间。
[0017] 上述SD卡模型的时序控制方法,在数据读写中接收完一组数据,则在等待两个时钟周期后,在数据线DAT0上回复CRC状态。
[0018] 依据本发明,通过随机SD卡标准时序值,也就是采用随机时序模型,借以更好的控制SD卡模型的时序。

附图说明

[0019] 图1为命令操作流程图。
[0020] 图2为数据读写流程图。

具体实施方式

[0021] 一种SD卡模型的时序控制方法,所对应的SD卡模型包含以下文件:
[0022] sd_dev.sv,这是模型的顶层文件,用于连接模型的各个文件,包含了SD device(SD设备)与外部连接的接口。部分内容如下所示:
[0023] module sd_dev
[0024] (
[0025] input sdclk,
[0026] wire cmd,
[0027] wire [3:0] dat
[0028] );
[0029] --------------------------------------
[0030] --------------------------------------
[0031] sd_dev_io
[0032] sd_dev_io (
[0033] .clk(sdclk)
[0034] );
[0035] sd_dev_test
[0036] sd_dev_test (
[0037] .io (sd_dev_io),
[0038] .mem_io (ahb_slv_mem_io)
[0039] );
[0040] assign cmd = sd_dev_io.cmd_oe ? sd_dev_io.cmd_out : 'z;
[0041] assign sd_dev_io.cmd_in = cmd;
[0042] assign dat = sd_dev_io.dat_oe ? sd_dev_io.dat_out : 'z;
[0043] assign sd_dev_io.dat_in = dat;
[0044] endmodule。
[0045] sd_dev.svh,这是SD卡模型的头文件,包含一些固定值,如CID(Card Identification,卡标识),OCR(Operation Condition register,操作条件寄存器)等。
[0046] sd_dev_io.sv,这是模型的接口文件,用于连接SD卡的接口与program文件。部分内容如下所示:
[0047] `include "sd_dev.svh"
[0048] interface sd_dev_io
[0049] (
[0050] input logic clk
[0051] );
[0052] logic cmd_oe;
[0053] logic cmd_in;
[0054] logic cmd_out;
[0055] logic dat_oe;
[0056] logic [3:0] dat_in;
[0057] logic [3:0] dat_out;
[0058] --------------------------------------
[0059] --------------------------------------
[0060] endinterface。
[0061] sd_dev_test.sv,这是program文件(也就是验证平台中的激励)。部分代码如下所示:
[0062] `include "sd_dev.svh"
[0063] program automatic sd_dev_test
[0064] (
[0065] interface io,
[0066] interface mem_io
[0067] );
[0068] import sd_dev_pkg::*;
[0069] initial
[0070] begin
[0071] Env_sd_dev env;
[0072] env = new();
[0073] --------------------------------------
[0074] --------------------------------------
[0075] env.run_test();
[0076] end
[0077] endprogram :sd_dev_test。
[0078] sd_dev_pkg.sv,这是package文件,包含所有的类。
[0079] 具体方案如下,
[0080] sd_dev_test.sv文件中将接口传给sd_dev_pkg.sv中的类,并启动模型。
[0081] sd_dev_pkg.sv包含下面的类:
[0082] Cfg_sd_dev,配置SD卡模型的参数,用于配置SD卡模型。
[0083] Pkt_sd_dev,采用systemveilog的语法随机SD标准时序值(参见SD规范第4.12.4节-Time Values(Copyright 2001-2009 SD Group(Panasonic,SanDisk,Toshiba)and SD Card Association Physical Layer Specification Version 3.00)。
[0084] 对于不同的SD卡,其时序值是不同的,对于SD卡的时序值随机用来模拟不同的SD卡。如对下面值随机:
[0085] Ncr:命令结束位(除了CMD2和ACMD41)到回复起始位之间的时钟周期。
[0086] Nac:命令结束位到读数据起始位之间的时钟周期。
[0087] CMD2和ACMD41为规范的操作命令,本领域的技术人员应有清楚的理解,在此不再赘述。
[0088] 对于不同时段进行时序的随机,能够更好地适配当前运行状态的时序,从而能够更好地控制时序。
[0089] 对SD卡模型验证的过程中,通过如标志位的设定,可以知晓某一操作的当前状态,从而更好的控制时序。
[0090] 鉴于某些操作退出机制不一定运行在理想状态,通过合理的时间延迟,借以控制整体的时序。
[0091] 进一步的类还有Gen_sd_dev,用以产生不同的时序参数,以匹配随机的SD标准时序。
[0092] 使用此类(Gen_sd_dev)构建Pkt_sd_dev类,这样SD卡时序值就确定了。
[0093] Env_sd_dev,用于封装package中的所有类,封装后产生的封装体用于在SD卡模型中的传递。
[0094] Bfm_sd_dev,SD卡模型的主体,用于命令回复和数据收发,主要采用下面方案:
[0095] 1、命令操作和数据读写分开,两者往往采用不同的时序,采用两者分开的手段以利于时序控制。
[0096] 2、对于命令操作来说分为以下步骤,参见说明书附图1:
[0097] (1)空过程。在此过程时等待命令起始位,如果等到则进入读取命令过程,否则停留在此过程。
[0098] (2)读取命令过程。在此过程接收命令线上的命令,并对命令进行CRC (Cyclic Redundancy Check,循环冗余校验码)校验,如果没有错误则进入分析命令过程,如果出错则停止运行,并跳转到空过程。
[0099] (3)分析命令过程。在此过程分析接收到的命令,判断命令类型,根据命令更新SD卡模型的卡状态,准备好回复的命令,根据命令类型进行延时,如果为CMD2或ACMD41,延时Nid(=5)个时钟周期,如果为其他命令延时Ncr(=[2:64])个时钟周期,进入回复命令过程。
[0100] SD卡在收到命令后进行回复命令或数据传输时要进行一定的延时。使用本方法设计的SD卡模型,不仅可以实现已有SD卡模型的功能,并且能够更好的控制SD卡的时序,同时对于验证工程师来说使用此方法可以更快地设计其他器件模型。
[0101] (4)回复命令过程。如果命令需要回复则在命令线上发送回复命令,如果命令不需要回复则什么也不做,进入空过程。
[0102] 3、对于数据读写(读写是SD主机的读写)来说分为以下步骤:
[0103] (1)空过程。在此过程查看SD卡模型是否为接收数据状态(RCV)或发送数据状态(DATA),如果SD卡模型状态为RCV,程序进入接收数据过程,如果SD卡模型状态为DATA,程序进入发送数据过程。
[0104] (2)接收数据过程。在此过程等待数据线上的数据起始位,等到后接收数据,然后进行CRC校验。对于多写来说,如果在接收数据的过程中出现SD卡停止命令CMD12,则停止数据接收,进入空过程。如果接收完一组数据,则在等待两个时钟周期后,在数据线DAT0上回复CRC状态(包含1位起始位,1位结束位,3位状态位)。如果CRC出错,则CRC状态位为“101”,并丢弃此次数据,如果为多写,SD卡模型状态进入RCV,否则SD卡模型进入传输状态(TRAN),程序进入空过程。如果CRC出错,则CRC状态位为“010”,然后进入存储数据过程。
[0105] (3)存储数据过程。此过程是模拟SD卡进入编程状态(PRG)。存储完成后如果为多写,SD卡模型状态进入RCV,否则SD卡模型进入传输状态(TRAN)。程序进入空过程。
[0106] (4)发送数据过程。在此过程发送数据及其校验位。对于多读来说,如果在发送过程中出现SD卡停止命令CMD12,则停止数据发送,进入空过程。如果发送完一组数据,根据是否多读更改SD卡模型的卡状态,如果为多读,卡状态保存DATA不变,否则进入TRAN。程序进入空过程。