UVM项目之二:验证计划的编写

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 设计架构

UVM项目之二:验证计划的编写_第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验证平台组件架构

UVM项目之二:验证计划的编写_第2张图片

在版本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功能

  1. bist_test=1;
  2. 检查bist_done=1

Bist_fail=0xFF

17

Dft_test

检查dft功能

  1. Dft_test=1;
  2. 检查sram_data_out

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

你可能感兴趣的:(其他,硬件架构)