基于SystemC的TLM设计形式化验证方法解析
1. 逻辑规则与属性类型
在开始验证之前,我们需要了解一些基本的逻辑规则:
- τ ⊨P && Q iff ðτ ⊨PÞ ∧ðτ ⊨QÞ
- τ ⊨P jj Q iff ðτ ⊨PÞ ∧ðτ ⊨QÞ
- τ ⊨next P iff τ1 ⊨P
- τ ⊨always P iff ∀i < τj j : τi ⊨P
这些规则用于判断属性是否在某个执行轨迹 τ
上成立。接下来,我们将介绍不同类型的属性及其监测逻辑的生成方法。
2. 不同类型的属性
2.1 简单安全属性
简单安全属性关注TLM模型中变量在执行过程中的值,通常可以用C逻辑表达式表示。为了验证这些属性,我们只需在改变相关变量值的代码行之后插入断言。例如,对于FIFO的一个简单安全属性:
// 处理的块数永远不会超过已读取的块数
always(num block processed <= num block read)
2.2 事务属性
事务属性用于推理事务的效果,例如检查请求或响应是否有效,或者事务是否成功。监测逻辑通过在相应内联函数调用的前后插入断言来创建。例如,对于TLM总线的一个事务属性: