UVM项目自学笔记之一:阅读design specification

 

目录

 一、IC验证流程

二、design specification


一、IC验证流程

在此次UVM项目中,笔者将使用UVM的平台架构和编码风格实现AHB—SRAMC的验证工作。

将IC验证的整个流程划分为如下阶段,并按照流程完成整个项目:

1.阅读design specification,目的:

(1)学习设计的架构:包括整个soc架构,待验的IP架构

(2)掌握设计功能:对功能的理解和把握至关重要,这影响了我们整个验证的正确性

(3)数据流向:掌握接口的数据流向,了解该使用什么样的协议

(4)如何使用该DUT:DUT该如何配置,影响了我们灌入激励和收集响应的操作

2.编写verification plan:

   提取验证的功能点,明确DUT的接口信号(包括所有信号的名称、位宽、功能、时序),TB的结构,检查点,功能覆盖率,测试用例规划(testcase),验证工作结束的标准。

3.搭建验证平台:

   依据计划搭建验证平台,debug,并做到通过第一个testcase

4.编写testcase:

   依据验证计划编写testcase。这是我们主要的验证阶段。检查RTL的每个功能点。TB/RTL debug。

5.起regresstion

   周期往复性地起regression,为随机测试案例提供不同的seed。

6.分析代码、功能覆盖率:

   分析覆盖率、新增测试用例

7.写测试报告:

   覆盖率报告,测试用例的结果(pass/fail),覆盖率的结果

二、design specification

这个阶段,我们要熟悉整个SOC的架构,以及待验IP的架构:

(1)SOC的整体架构如下

UVM项目自学笔记之一:阅读design specification_第1张图片

        由总线将各个IP联系起来,片上总线是通过仲裁和译码的方式来完成不同主、从部件的互连及总线复用,比较常见的有ARM的AMBA总线、IBM的CoreConnect总线以及Silicore公司的Wishbone总线等等。

        以AMBA 2.0总线为例,AMBA 2.0提供了三种不同类型的总线:AHB、ASB和APB。其中AHB支持多主机从机,采用流水线的工作方式,其上挂载着高性能、高数据吞吐的IP,包括处理器IP:CPU,负责内存与外设之间数据转移的IP:DMA控制器,存储器IP:CPU内的Cache,片内的Pflash和SRAM等,也包括扩展的存储器接口ExtSRAM,算法IP:RSA加密解密算法,以及各种高速的I/O口:SD I/O口,USB串行总线等等。APB则为系统的低速外部设备提供低功耗的简单互连,APB里面唯一的主机就是bridge,APB采用非流水线的工作方式,要两个时钟周期实现一笔读写操作。APB上挂载着System controller(含上电复位控制、中断控制、时钟振荡器、时钟锁相等),WDT(计时器看门狗)、Timer(计时器),以及各种低速外设接口例如UART异步通信串行总线,SPI同步串行总线,以及IIC;

    每个IP对应着不同的地址空间,对每个IP进行寻址时,不可超出地址空间的边界。

UVM项目自学笔记之一:阅读design specification_第2张图片

(2)AHB_SRAMC的设计需求

1)要支持低功耗,由多块SRAM构成的存储器中,根据地址选择一块或者多块SRAM,未被选中的SRAM块处在low power standby状态

2)支持单周期读写

3)根据AHB总线的读写宽度进行相应的SRAM位宽选择,支持8bit,16bit和32bit的SRAM数据读写操作

4)能够支持DFT/BIST测试

(3)AHB_SRAMC的架构设计

整个SRAM的微结构可以统分为两个部分:接口和核心的存储单元,对应的RTL代码名称分别为ahb_slave_if.v和sram_core.v。我们在做白盒验证时,需要验证IP的内部的每个设计部分,也就是说,这两个RTL代码都需要验证。此外,RTL代码sramc_top.v是两个代码的顶层,在top层对两个模块直接进行了调用。当我们做黑盒验证时,只需要验证sramc_top.v,模拟ahb总线的行为,从顶层将信号灌入,并检测相应的输出信号即可。 

UVM项目自学笔记之一:阅读design specification_第3张图片

其中AHB slave interface模块微结构设计如下:ahb_slave模块负责将AHB时序转化为SRAMC的时序,其架构如下:

UVM项目自学笔记之一:阅读design specification_第4张图片

我们可以 注意到,输入信号主要还是AHB的输入控制信号,值得说明的是sram的读写使能控制信号是由hwrite信号控制的,在ahb总线上,hwrite为高时表示读,需要将sram_o_en拉低(低有效)。而片选信号bank0_csn和bank1_csn则是通过地址的最高位判断,为0时选中bank0,为1时选中bank1,而每个bank内部的小sram通过addr的低两位进行片选,并生成了独热码,共3个有效位宽。

信号名

方向

位宽

详细说明

Ahb_slave_if模块输入信号

hclk

Input

1

AHB总线时钟信号

hresetn

Input

1

AHB总线复位信号

hsel

Input

1

Sram控制器片选信号

hwrite

Input

1

Sram控制器写信号

hready

Input

1

Sram控制器准备好信号

hsize

Input

[2:0]

传输数据大小信号

hburst

Input

[2:0]

未用到

htrans

Input

[1:0]

传输数据的类型

haddr

Input

[15:0]

AHB总线的地址输入(共64K空间,从0x0040_0000到0x0040_FFFF)

hwdata

Input

[31:0]

AHB总线的数据输入

sram_q0~sram_q7

Input

[7:0]

Sram的数据读写使能(独热码)

Ahb_slave_if 模块输出信号

Hready_resp

output

1

Sram控制器接受完成的反馈信号

Hresp

output

[2:0]

Sram控制器接受状态的反馈信号

Hrdata

output

[31:0]

AHB总线读sram的数据

Sram_w_en

output

1

Sram的读写使能信号

Sram_o_en

output

1

Sram的数据读有效使能信号

Bank0_csn

output

[3:0]

Bank0块中的sram块选择信号

Bank1_csn

output

[3:0]

Bank1块中的sram选择信号

Sram_addr_out

output

[12:0]

发往sram的控制器的地址信号

Sram_wdata

output

[31:0]

写sram的数据信号

SRAM存储体的架构和信号列表如下,每个小的SRAM的片选信号由Sram_csn[3:0]和haddr_reg[15]的值决定。

UVM项目自学笔记之一:阅读design specification_第5张图片

信号名

方向

位宽

详细说明

Sram_core模块输入信号

Hclk

Input

1

系统时钟

Sram_clk

input

1

Sram控制器的时钟信号

Sram_rst_n

Input

1

Sram控制器的复位信号

Sram_addr

Input

[12:0]

Sram的地址输入

Sram_data_in

Input

[31:0]

Sram的数据输入

Sram_w_en

Input

1

Sram的数据读写使能

Sram_oen

Input

1

Sram的数据读有效使能

Bank0_csn

Input

[3:0]

Sram的bank0块选择信号

Bank1_csn

Input

[3:0]

Sram的bank1块选择信号

Bist_test

Input

1

Sram的bist测试模式使能信号

Dft_test

Input

1

Sram的DFT测试模式使能信号

Sram_core模块输出信号

sram_q0~sram_q7

output

[7:0]

Sram的数据输出

Bist_done

output

1

Bist测试模式下的测试结束标志

Bist_fail

output

[7:0]

Bsit测试模式下的结果输出

Sram控制器的顶层信号描述:

顶层模块的接口可以简化为如下,忽略了sram内部信号的状态。

UVM项目自学笔记之一:阅读design specification_第6张图片

信号名

方向

位宽

详细说明

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功能是否正确

SRAM控制器ahb slave接口与AMBA总线相连,其中总线上的hburst信号未用到。另外顶层还有好几根独立于AHB接口的输入/输出信号如下:

信号名

方向

位宽

详细说明

Sram_clk

Input

1

为sram_core提供工作时钟

Bist_en

Input

1

Bist测试使能

Dft_en

Input

1

Dft测试使能

Bist_done

output

1

高电平时表示bist测试结束

Bist_fail

ouput

[7:0]

8位分别表示8块sram的功能正确与否

其中sram_clk的时钟和hclk的时钟周期相同,但相位相差180°。目的是为了实现sramc的单周期读写。

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