AHB_SRAMC验证计划
1.文档信息
1.1版本
版本 | 日期 | 描述 | 作者 |
V1.0 | 2021/8/14 | 从sramc_top层直接验证 | Zhangshuhuai |
V2.0 | 2021/8/24 | 内部模块ahb_slave_if的验证 | Zhangshuhuai |
1.2参考文档
名称 | 日期 | 作者 |
基于AHB总线的SRAM控制器设计的需求分析.doc | 未知 | 未知 |
基于AHB总线的SRAM控制器架构设计.doc | 未知 | 未知 |
基于AHB总线的SRAM控制微架构设计.doc | 未知 | 未知 |
基于AHB总线的SRAM控制器继承需求.doc | 未知 | 未知 |
2.模块设计
2.1 设计架构
2.2 功能点
1.支持8bit、16bit、32bit的SRAM数据读写操作
2.支持SRAM的单周期读写
3.支持低功耗工作(8bit/16bit):在多块SRAM组成的存储器中,根据不同的地址,系统选择一块或者多块SRAM,未被选中的SRAM片处于low-power standby模式;
4.支持bist/dft功能
2.3 接口信号
信号名 | 方向 | 位宽 | 详细说明 |
SRAM控制器输入信号 | |||
Hclk | Input | 1 | AHB总线时钟信号 |
Sram_clk | Input | 1 | Sram core时钟信号 |
Hresetn | Input | 1 | AHB总线复位信号 |
Hsel | Input | 1 | Sram控制器片选信号 |
Hwrite | Input | 1 | 写使能 |
Hsize | Input | [2:0] | 2’b00:字节 2’b01:halfword 2’b10:word |
Hburst | Input | [2:0] | 未用到 |
Htrans | Input | [1:0] | 2’b10:单笔数据传输或第一笔连续传输中的第一笔数据传输 2’b11:支持burst传输 |
Hready | Input | 1 | Sram控制器工作使能 |
Haddr | Input | [31:0] | AHB总线发送的地址 |
Hwdata | Input | [31:0] | AHB总线的数据输入 |
Dft_test | Input | 1 | DFT测试使能 |
Bist_test | Input | 1 | BIST测试使能 |
SRAM控制器输出信号 | |||
Hready_resp | output | 1 | AHB总线数据传输完成 |
Hresp | output | [1:0] | Sram控制器给AHB总线的应答信号 00:传输状态正常 |
Hrdata | output | [31:0] | AHB总线读slave数据 |
Bist_done | output | 1 | 1’b1:bist测试结束表示 |
Bist_fail | output | [7:0] | 8位分别表示8块sram功能是否正确 |
3.UVM验证平台
3.1验证语言:System verilog
3.2验证方法:UVM
3.3验证工具:VCS、Questasim
3.4验证目标:
1.功能点符合设计规范
2.代码覆盖率达到100%
Line
FSM
Toggle
Path
Conditions
3.功能覆盖率达到100%
3.5验证策略
3.5.1灰盒验证:SRAMC设计微架构可见,RTL代码未知,验证sramc_top.v的RTL设计
3.5.2覆盖率驱动的随机化验证
3.6验证平台组件架构
在版本1.0中,从SRAMC-top灌入激励,无需关注SRAMC内部的if和sram core具体信号,架构中的test是testcase层,扩展于uvm_test_top基类,可以视为用户能够修改的最顶层。
Env相当于一个容器类,内部封装了agent、coverage、scoreboard等,并将其实例化port连接
Master agent中封装了sequencer,driver和monitor,三者的接口与AHB总线相连。
Sequencer负责将sequence中的sequence_item传递给driver,通过sequencr完成driver和sequence的握手机制。
Driver在接受到sequence_item后,将该trans转化为具体的信号层次并灌给SRAMC
Monitor负责监视由driver传递给SRAMC的pin级信号并转化为事务级信息传递给scoreboard和coverage进行比对和覆盖率收集
Scoreboard将monitor传递来的事务和从SRAMC的reference model中传递来的事务进行比较。
Coverage用于统计覆盖率。
3.7人员与时间安排
人员数量:1人
时间安排:14天
4.testcase plan
1.上电复位:关注上电复位后sramc的输出信号状态是否满足要求
2.时钟:Hclk和sram_clk的反相处理(如果是全局验证则无需关注内部信号)
在testbench中根据要求的时钟的周期、时钟相位、时钟的占空比产生相应的时钟信号。
3.上电复位后的sram memory的值:需要初始化
4.8bit、16bit、32bit的SRAM数据读写操作(主要的功能测试)
a)直接测试测试方案:
(1)数据bins:全0,全1,0x55和0xAA等特殊状态数据
(2)8bit/16bit/32bit读操作
(3)8bit/16bit/32bit写操作
(4)8bit/16bit/32bit连续读操作
(5)8bit/16bit/32bit连续写操作
(6)8bit/16bit/32bit先写后读操作
(7)8bit/16bit/32bit先读后写操作
b)ahb的总线位宽为32bit,通过控制hsize信号实现数据有效位宽的位数声明,并通过haddr的低两位实现具体位置指定,从而实现读、写32bit、16bit、8bit的数据。
c)实现SINGLE传输和BURST传输,通过控制信号hburst
d)考虑hready为低的情况,sramc的读写是怎样的,是否会丢失数据?
5.低功耗验证:如何验证8bit、16bit传输时低功耗实现?
通过检查SRAM的片选信号,打印在log中,或者通过波形文件观察
6.DFT和BIST功能的实现
7.验证报告
a)统计分析覆盖率
RTL代码覆盖率
功能覆盖率
b)测试案例通过率
总共编写了多少个testcase,是否都通过了,多少了失败了
c)bug发现率
设计人员debug
5.testcase
5.1直接测试案例如下
Index | Test name | Description | implemented |
1 | Reg_default_value_check_test | 检查上电复位后所有寄存器的状态值(如果没有则不检验) | 1.Reset_n = 0; 2.检查内部值状态 Bank0_csn[3:0]=1111; Bank1_csn[3:0]=1111; |
2 | Bank0_reg_read_write_byte_test1 | 检查bank0中第1小片sram的8bit读写寄存器状态 | 1.hsize[1:0]=2’b00; haddr[1:0]=00; haddr[15]=0; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=1110 Bank1_csn=1111 |
3. | Bank0_reg_read_write_byte_test2 | 检查bank0中第2小片sram的8bit数据读写寄存器状态 | 1.hsize[1:0]=2’b00; haddr[1:0]=01; haddr[15]=0; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=1101 Bank1_csn=1111 |
4. | Bank0_reg_read_write_byte_test3 | 检查bank0中第3小片sram的8bit数据读写寄存器状态 | 1.hsize[1:0]=2’b00; haddr[1:0]=10; haddr[15]=0; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=1011 Bank1_csn=1111 |
5. | Bank0_reg_read_write_byte_test4 | 检查bank0中第4小片sram的8bit数据读写寄存器状态 | 1.hsize[1:0]=2’b00; haddr[1:0]=11; haddr[15]=0; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=0111 Bank1_csn=1111 |
6. | Bank0_reg_read_write_halfword_test1 | 检查bank0中第1.2小片sram的16bit数据读写寄存器状态 | 1.hsize[1:0]=2’b01; haddr[1]=0; haddr[15]=0; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=1100 Bank1_csn=1111 |
7. | Bank0_reg_read_write_halfword_test2 | 检查bank0中第3.4小片sram的16bit数据读写寄存器状态 | 1.hsize[1:0]=2’b01; haddr[1]=1; haddr[15]=0; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=0011 Bank1_csn=1111 |
8. | Bank0_reg_read_write_word_test | 检查bank0中所有4片sram的32bit数据读写寄存器状态 | 1.hsize[1:0]=2’b10; haddr[1:0]=xx; haddr[15]=0; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=0000 Bank1_csn=1111 |
9 | Bank1_reg_read_write_byte_test1 | 检查ban1中第1小片sram的8bit读写寄存器状态 | 1.hsize[1:0]=2’b00; haddr[1:0]=00; haddr[15]=1; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=1111 Bank1_csn=1110 |
10 | Bank1_reg_read_write_byte_test2 | 检查bank1中第2小片sram的8bit读写寄存器状态 | 1.hsize[1:0]=2’b00; haddr[1:0]=01; haddr[15]=1; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=1111 Bank1_csn=1101 |
11 | Bank1_reg_read_write_byte_test3 | 检查bank1中第3小片sram的8bit读写寄存器状态 | 1.hsize[1:0]=2’b00; haddr[1:0]=10; haddr[15]=1; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=1110 Bank1_csn=1111 |
12 | Bank1_reg_read_write_byte_test4 | 检查bank1中第4小片sram的8bit读写寄存器状态 | 1.hsize[1:0]=2’b00; haddr[1:0]=11; haddr[15]=1; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=1111 Bank1_csn=0111 |
13 | Bank1_reg_read_write_halfword_test1 | 检查bank1中第1.2小片sram的16bit数据读写寄存器状态 | 1.hsize[1:0]=2’b01; haddr[1]=0; haddr[15]=1; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=1111 Bank1_csn=1100 |
14 | Bank1_reg_read_write_halfword_test2 | 检查bank1中第3.4小片sram的16bit数据读写寄存器状态 | 1.hsize[1:0]=2’b01; haddr[1]=1; haddr[15]=0; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=1111 Bank1_csn=1100 |
15 | Bank1_reg_read_write_word_test1 | 检查bank0中所有4片sram的32bit数据读写寄存器状态 | 1.hsize[1:0]=2’b10; haddr[1:0]=xx; haddr[15]=1; hwrite = 1; dft_test=0;bist_test=0; 2.写入0xaa,0x55,0xff,0x00等典型数据 3.读数据并检查 Bank0_csn=1111 Bank1_csn=0000 |
16 | Bist_test | 检查bist功能 |
Bist_fail=0xFF |
17 | Dft_test | 检查dft功能 |
|
5.2 随机测试案例
Index | Test name | Description | Implement |
1 | Sramc_random_test | 随机读写 | Hsize[1:0] inside{2’b00,2’b01;2’b10} Haddr inside{‘h0;[‘h1:’h3FFE];’h3FFF;’h4000; [‘h4001:’hFFFE];’hFFFF} Hwdata inside{‘h0;[‘h1:’hFFFE];’hFFFF} Random hwrite/hwdata/htrans Dft_test=0;bist_test=0 Read register and check 检查bank0_csn[3:0] 检查bank1_csn[3:0] bist_done bist_fall |
2 | 先写在读 | ||
3 | 先读再写 | ||
4 | 连读读 | ||
5 | 连续写 |
6.覆盖率
6.1功能覆盖率
1)Hwrite:0/1
2)Hsize[1:0]:2’b00/2’b01/2’b10
3)Htrans:2’b10/2’b11
4)haddr:
32’h0000_0000/[32’h0000_0001:32’h0000_3FFE]/32’h0000_3FFF
32’h0000_4000/[32’h0000_4001:32’h0000_4FFE]/32’h0000_4FFF
5)hwdata:
32’h0000_0000/[32’h0000_0001:32’HFFFF_FFFE]/32’HFFFF_FFFF
6)bist_test:0/1
7)bist_done:0/1
8)bist_fail:0/[1:8’hFE]/8’hFF
9)dft_test:0/1