Assertion检查及覆盖率应用
APB总线协议的断言检查
在PSEL为高时,PADDR总线不可以为X值。
property p_paddr_no_x;
@(posedge clk) psel |-> !$isunknown(paddr);
endproperty
assert property(p_paddr_no_x) else `uvm_error("ASSERT", "PADDR is unknow when PSEL is high")
在PSEL拉高的下一个周期,PENABLE也应该拉高。
property p_psel_rose_next_cycle_penable_rise;
@(posedge clk) $rose(psel) |=> $rose(penable);
endproperty
assert property(p_psel_rose_next_cycle_penable_rise) else `uvm_error("ASSERT", "PENABLE not rose after 1 cycle PSEL rose")
在PENABLE拉高的下一个周期,PENABLE应该拉低。
property p_enable_rose_next_cycle_fall;
@(posedge clk) $rose(penable) |=> $fell(penable);
endproperty
assert property(p_penable_rose_next_cycle_fall) else `uvm_error("ASSERT", "PENABLE not fall after 1 cycle PENABLE rose")
在PSEL和PWRITE同时保持为高的阶段,PWDATA需要保持。
property p_pwdata_stable_during_trans_phase;
@(posedge clk) (psel && !penable) ##1 (psel && penable) |