[UVM]编写一个验证vld和rdy握手的断言
断言功能分析
核心功能:
验证当有效信号(vld) asserted 后、准备信号(rdy)还未asserted之前,vld不能提前de-asserted。
协议要求:
一旦发起方asserted vld,必须保持asserted状态,直到接收方asserted rdy完成握手。
时序行为:
触发条件:vld && $fell(rdy) - vld为高且rdy出现下降沿
验证要求:从下一个周期开始,vld必须保持为高,直到vld && rdy同时为高出现一次
等价于:
“一旦开始传输(vld高),在握手完成(vld和rdy同时高)之前,发起方不能取消传输请求”
⚙️ 技术细节说明
关键运算符:
$fell(rdy):检测rdy的下降沿
|=>:蕴含操作符,左边成立时检查右边在下一个周期成立
throughout:在整个序列期间保持某条件
[->1]:goto运算符,匹配序列第一次出现
复位和禁用:
disable iff(SVA_RST(rst) || off):复位信号或控制信号为真时禁用断言检查。
🚨 错误消息意义
当断言失败时,错误信息明确指示:
“vld asserted then de-asserted before rdy asserted”
意思是:vld信号在rdy信号asserted之前就提前de-asserted了,这违反了握手协议的基本要求。
💡 设计验证价值
这个断言确保:
协议稳定性:传输请求不会意外撤销
数据完整性:避免传输过程中的数据丢失
系统可靠性:防止因协议违反导致的死锁或错误
这是一个非常重要的协议检查断言,在总线验证和接口验证中非常常见。