AHB to APB bridge

SPEC

DUT如下:
在这里插入图片描述

具体功能描述可参考ARM官方文档:AHB to APB sync-down bridge

验证框架图

在这里插入图片描述

测试点分解以及设计测试用例

测试点分解

  • 对于APB端,APB2、APB3、APB4的信号都要测到。
  • 在APB的时钟频率小于AHB的时钟频率时的频率范围。
  • 传输过程中发生reset模块功能能否恢复。
  • HADDR与PADDR的范围:0x0000~0xFFFF。
  • 对于AHB来说,由HBURST[2:0]决定的八种不同的burst传输、HSIZE[2:0]决定的传输size以及write/read的排列组合。
  • 由HTRANS[1:0]决定的transfer type。
  • HPROT、HREADYOUT、HRESP的检查。
  • 多个AHBtransfer连续传输检查。
  • APBACTIVE检查。
  • PSTRB、PPROT、PREADY、PSLVERR的检查。
  • Parameter检查。

设计测试用例

  • AHB端
  1. AHB Single Write32
  2. AHB Single Read32
  3. AHB Burst(HBURST[2:0]随机、HSIZE[2:0]随机、Data,Addr随机,Addr的边界值如0x0000,0xFFFF需覆盖、write/read操作随机、HPROT[3:0]随机。

将上述sequence进行组合,测试连续间断/不间断的AHB传输。

  • APB端
  1. PREADY信号保持为1。
  2. PREADY信号为0,且持续随机个周期。
  3. PSLVERR信号保持为0
  4. PSLVERR信号拉高,且有效的位置随机。
  5. Parameter如ADDRWIDTH、REGISTER_RDATA、REGISTER_WDATA。
  • AHB与APB的频率比:
    2:1、3:1、4:1、8:1、16:1

具体的Sequence及testcase

Sequence

  • AHB端
  1. ahbl_mst_single_write32_seq
class ahbl_mst_single_write32_seq extends ahbl_mst_basic_seq;
	function new(string name = "ahbl_mst_single_write32_seq");
    	super.new(name);
	endfunction
    `uvm_object_utils(ahbl_mst_single_write32_seq)
	virtual task body();
		`uvm_do_with(req,{hsel   == 1'b1;
                      	  htrans == ahbl_mst_pkg::NSEQ;
                     	  hsize  == ahbl_mst_pkg::WORD;
                     	  hburst == ahbl_mst_pkg::SINGLE;
                     	  hwrite == 1'b1;})
	endtask
endclass
  1. ahbl_mst_single_read32_seq
class ahbl_mst_single_read32_seq extends ahbl_mst_basic_seq;
	function new(string name="ahbl_mst_single_read32_seq");
    	super.new(name);
    endfunction
     `uvm_object_utils(ahbl_mst_single_read32_seq)

  virtual task body();
    `uvm_do_with(req,{hsel   == 1'b1;
                      htrans == ahbl_mst_pkg::NSEQ;
                      hsize  == ahbl_mst_pkg::WORD;
                      hburst == ahbl_mst_pkg::SINGLE;
                      hwrite == 1'b0;})
  endtask
endclass
  1. ahbl_mst_burst_seq
class ahbl_mst_burst_seq extends ahbl_mst_basic_seq;
	function new(string name="ahbl_mst_burst_seq");
    	super.new(name);
	endfunction
	`uvm_object_utils(ahbl_mst_burst_seq)
	virtual task body();
		`uvm_do_with(req,{hsel == 1'b1;})
	endtask
endclass
  • APB端
  1. apb_slv_rdy_seq
class apb_slv_rdy_seq extends apb_slv_basic_seq;
	function new(string name = "apb_slv_rdy_seq");
		super.new(name);
	endfunction
	`uvm_object_utils(apb_slv_rdy_seq)
	virtual task body();
		`uvm_do_with(req,{slverr     == 1'b0;
                          nready_num == 0;})
	endtask
endclass
  1. apb_slv_nrdy_seq
class apb_slv_nrdy_seq extends apb_slv_basic_seq;
	function new(string name="apb_slv_nrdy_seq");
    	super.new(name);
	endfunction
	 `uvm_object_utils(apb_slv_nrdy_seq)
	virtual task body();
		`uvm_do_with(req,{slverr == 1'b0;
                      	  nready_num inside {[1:5]};})
	endtask
endclass
  1. apb_slv_slverr_seq
class apb_slv_slverr_seq extends apb_slv_basic_seq;
	function new(string name = "apb_slv_slverr_seq");
    	super.new(name);
	endfunction
	`uvm_object_utils(apb_slv_slverr_seq)
	virtual task body();
		`uvm_do_with(req,{slverr == 1'b1;
                          nready_num inside {[1:5]};})
	endtask
endclass

testcase

  • ahbl_mst_single_read32
  • ahbl_mst_single_write32_apb_slv_nrdy
  • ahbl_mst_burst
  • ahbl_mst_burst_apb_slv_slverr
  • ahbl_mst_tight_transfer
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值