Formal-AEP的使用

本文介绍了Formal-AEP在自动检测边界错误、算术溢出等问题上的应用,涉及如何通过TCL脚本调用该工具,设置顶层模块、时钟和复位,以及进行仿真过程的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Formal-AEP简介
自动功能分析,用于出界数组、算术溢出、X 分配、同时设置/重置、完全案例、并行情况、多驱动器/冲突总线和浮动总线检查,无需专门的测试。
例如:自动提取module中的property,帮助早期发现function中的bug,

2、具体使用方法
1)调用formal,首先要用到.tcl文件,例如编写一个run.tcl文件

set_fml_appmode AEP //选择使用formal的哪一个apps,这里使用的是AEP
set design top_module //设置top_module
//读取文件,-top 顶层文件的指定,-format sverilog 识别sv,-aep 添加对应检查项的开关,bounds_check 边界检查,x_assign X态赋值检查
read_file -top $design -format sverilog -aep bounds_check+x_assign \
-vcs {-f ../design/filelist} //指定仿真工具,filelist的路径

create_clock clk -period 100 //设定clk的周期
create_reset rst -sense high //设定rst的有限电平,这里是高电平有效

sim_run -stable	//等待仿真运行稳定后
sim_save_reset //存储稳定后的状态


### JasperGold 中 Reset 形式化验证的功能与配置 在形式化验证工具 JasperGold 中,`reset` 的功能主要用于初始化设计的状态并确保其行为符合预期。以下是关于如何利用 `reset` 进行形式化验证的相关说明: #### 配置 Reset 断言 为了验证重置信号的行为是否正确,在 JasperGold 中可以定义断言来捕获特定条件下的状态变化。例如,可以通过 SVA(SystemVerilog Assertions)编写如下代码片段以描述重置逻辑的要求[^1]。 ```systemverilog property reset_behavior; @(posedge clk) disable iff (!rst_n) // Active low reset condition. state == IDLE |=> next_state == RESET_STATE; // After reset, the system should transition into a known state. endproperty : reset_behavior assert property (reset_behavior) else $error("Reset behavior failed!"); ``` 上述代码表示当检测到时钟上升沿且未处于低电平复位条件下,当前状态应转换至指定的初始状态之一。 #### 覆盖率分析中的 Reset 假设设置 除了基本的断言语句外,还可以引入覆盖模型来评估不同场景下重置路径的有效性。这通常涉及创建约束条件以便于模拟各种可能输入组合的效果。下面是一个简单的例子展示如何应用假设语句实现这一点: ```systemverilog covergroup cg_reset @(posedge clk); option.per_instance = 1; cp_rst_value: coverpoint rst_n { bins active_low[] = {0}; // Monitor only when reset is asserted actively-low. } cross_cp_states_and_rsts: cross current_state,cp_rst_value{ ignore_bins invalid_transitions = binsof(current_state)[*] && !binsof(cp_rst_value.active_low[]); } endgroup :cg_reset initial begin cg_reset cgr = new(); forever @(*) cgr.sample(); end ``` 此部分展示了如何构建覆盖率组以及采样机制,从而帮助识别哪些情况下未能满足期望的重置响应特性. #### 结果解释与调试技巧 一旦完成设定之后运行正式验证流程,则会得到相应证明或者反例报告文件。如果发现任何违反情况则需仔细审查这些实例,并调整原有属性直至获得满意的结果为止. ```python # Example Python script that could be used alongside formal tools for automation purposes such as parsing logs etc., though not directly related here but useful generally within EDA flows. import re def parse_formal_log(log_file_path): with open(log_file_path,'r') as f: log_content=f.read() violations=re.findall(r'Violation.*',log_content) proofs=re.findall(r'Proved.*|Pass.*',log_content) return {'violations':violations , 'proofs':proofs} parsed_data=parse_formal_log("/path/to/formal_results.log") print(parsed_data) ``` 以上脚本提供了一种方法自动提取日志信息用于进一步处理或监控目的.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值