第六章Clock Viewer
概述
Clock Viewer 是一个集中查看时钟环境信息的 GUI 工具,帮助用户高效探索时钟配置、调试和解决时钟相关问题。
功能
- 时钟域可视化:图形化展示设计中的所有时钟域
- 时钟关系:显示时钟间的频率/相位关系
- 时钟树浏览:查看时钟生成和分发路径
- 时钟问题检测:识别未声明时钟、门控时钟问题等
典型用法
- elaborate 后打开 Clock Viewer
- 检查自动检测到的时钟是否正确
- 对于遗漏的时钟手动声明
- 检查时钟域交叉是否被 CDC App 识别
时钟建模检查清单
为什么时钟是第一优先级?时钟声明错误是形式验证中最隐蔽的问题之一。漏声明一个时钟,那个时钟域的 flop 就不会被正确建模,可能导致假 proven(bug 被遗漏)或假反例。elaborate 后第一件事就是检查时钟。
elaborate 后的时钟检查流程
- 打开 Clock Viewer:Window 菜单、工具栏按钮 Open Clock Viewer、session 标签页的右键菜单,或执行命令
get_clock_info -gui - 看 Sanity check status bars:注意它的判读方式——检查是逐次迭代往下跑的,一旦遇到失败就停在那里,不会继续跑完。四类检查按顺序执行,各自的迭代次数是:Simple clock 4 次 → Inactive clock 1 次 → Gated clock 2 次 → Complex clock 1 次。颜色含义是:绿色 = 该次迭代通过,红色 = 该次迭代失败,黄色 = 这项检查还没跑。所以看到黄色不是"警告",而是"因为前面已经失败,这里根本没跑到"。鼠标悬停在状态条上可以看到文字报告
- 在 Clocking Signals 表中逐条核对:sanity check 结果、信号类型、时钟名、驱动该 clocking signal 的时钟(Primary Clock 列)。检查未通过的条目有 tooltip 说明;双击某行可打开 Sanity Check Details 对话框
- 在 Declared Clocks 标签页确认已声明时钟的规格:边沿敏感性、factor 和 phase 等
- 对有遗漏的时钟,在 Clocking Signals 表中右键 declare;或用 Tools 菜单的 Infer All Clocks 让工具分析连到触发器时钟引脚的主输入,自动推断主时钟
常见时钟问题
| 问题 | 症状 | 解决 |
|---|---|---|
| 漏声明时钟 | 该时钟域的 flop 不出现在形式模型中,CDC 漏检 | 手动声明 clock clk_name |
| 门控时钟误判 | 工具把门控使能信号当成独立时钟 | 看 sanity check status bar 的 gated 一栏;用 Tools 菜单的 Show Clocking Signal COI in Schematic 查看该信号的时钟逻辑(该原理图只显示时钟逻辑,不含数据通路) |
| 分频时钟未声明 | 分频逻辑被当作普通数据路径 | 用 clock clk clk_div 2 1 声明(语法是 clock <clock_1> <clock_tcl_list> [<factor> [<phase>]],基准时钟不能省),或用 clock clk_div -factor 2 -phase 1 |
| 边界输入速率不受支持 | 报 ESA010:带 stopat 的边界输入,其驱动逻辑可能在工具最快时钟的双边沿上变化 | 若该 stopat 是 env,用 clock -rate 手动给它定速率;否则把该消息降级为 warning。注意按较慢速率约束会排除掉本来可能出现的 trace |
clock -rate 用于给一组信号手动指定速率时钟,也可用来配置一组 stopat 信号;它的配置优先于 clock -rate -default。官方 CDC 示例中的用法:
clock -rate {en_fsm proc_int_code proc_int_control output_valid reg_mode reg_addr reg_wdata reset_n_fsm} clock_fsm
clock -rate counter_en clock_fsm_aux
clock -rate u_regbank.prdata_o clock_fsm
来源文档
jaspergold_apps_userguide.pdf Ch.4