前言:
一、基本思想(方法)
- 所有input都要做Randomize和Cover,所有output都要做Check。
- 所有Randomize都要做Constraint。
二、基本握手信號(req-ack)的Check思路及維度
- 回ack之前req要keep high,Data要Stable。
- 回ack之後req才會解除。
- 看到req之後Delay多少T會ack?需要做Randomize
- 相鄰2個req之間的時間間隔?
- 如果req與ack位於不同的clock domain,需要Check req和ack的Keep時間。
property req_ack_chk_0();
@(posedge sys_clk) disable iff(!rst_n)
(ack === 1) |-> ($past(req, 1, 1));
endproperty
property req_ack_chk_1();
@(posedge sys_clk) disable iff(!rst_n)
(req === 1) |=> $stable(data);
endproperty
property req_ack_chk_2();
@(posedge sys_clk) disable iff(!rst_n)
$fell(req) |-> (ack === 1'b1);
endproperty
property req_ack_chk_3();
@(posedge sys_clk) disable iff(!rst_n)
$changed(data) |-> ((req & ack) || (req === 1'b0));
endproperty