以APB总线协议的断言检查和断言覆盖率为例,学习断言的基本使用和断言覆盖率覆盖。需要用到关键词cover来收集断言覆盖。
APB总线协议时序图如下:(首图为读操作时序和后图为写操作时序)
PS:关于APB协议的详细的描述可见AMBA总线协议中APB协议总结一文:APB总线协议
断言检查一
- 在PSEL为高时,PADDR总线不可以为x值;
property p_addr_no_x;
@(posedge clk) psel |-> !$isunknow(paddr);
endproperty
assert property(p_addr_no_x) else `uvm_error("ASSERT","PADDR is unknow when PSEL is high");
断言检查二
- 在PSEL拉高的下一个周期,PENABLE也应该为高。
property penable_rise;
@(posedge clk) $rose(psel) |=> $rose(penable);
endproperty
assert property(penable_rise) else `uvm_error("ASSERT","PENABLE not rose after 1 cylce PSEL rose");
断言检查三
- 在PENABLE拉高的下一个周期,PENABLE应该拉低;
property penable_fell;
@(posedge clk) $rose(penable) |=> $fell(penable);
endproperty
assert property(penable_fell) else `uvm_error("ASSERT","PENABLE not fell after 1 cylce PENABLE rose");
断言检查四
- 在PSEL和PWRITE同时保持为高的阶段,PWDATA需要保持。
property pwdata_stable;
@(posedge clk) (psel && !penable) ##1 (psel && penable) |-> $stable(pwdata);
endproperty
assert property(pwadata_stable) else `uvm_