第六章Clock Viewer

概述

Clock Viewer 是一个集中查看时钟环境信息的 GUI 工具,帮助用户高效探索时钟配置、调试和解决时钟相关问题。

功能

典型用法

  1. elaborate 后打开 Clock Viewer
  2. 检查自动检测到的时钟是否正确
  3. 对于遗漏的时钟手动声明
  4. 检查时钟域交叉是否被 CDC App 识别

时钟建模检查清单

为什么时钟是第一优先级?时钟声明错误是形式验证中最隐蔽的问题之一。漏声明一个时钟,那个时钟域的 flop 就不会被正确建模,可能导致假 proven(bug 被遗漏)或假反例。elaborate 后第一件事就是检查时钟。

elaborate 后的时钟检查流程

  1. 打开 Clock Viewer:Window 菜单、工具栏按钮 Open Clock Viewer、session 标签页的右键菜单,或执行命令 get_clock_info -gui
  2. Sanity check status bars:注意它的判读方式——检查是逐次迭代往下跑的,一旦遇到失败就停在那里,不会继续跑完。四类检查按顺序执行,各自的迭代次数是:Simple clock 4 次 → Inactive clock 1 次 → Gated clock 2 次 → Complex clock 1 次。颜色含义是:绿色 = 该次迭代通过,红色 = 该次迭代失败,黄色 = 这项检查还没跑。所以看到黄色不是"警告",而是"因为前面已经失败,这里根本没跑到"。鼠标悬停在状态条上可以看到文字报告
  3. Clocking Signals 表中逐条核对:sanity check 结果、信号类型、时钟名、驱动该 clocking signal 的时钟(Primary Clock 列)。检查未通过的条目有 tooltip 说明;双击某行可打开 Sanity Check Details 对话框
  4. Declared Clocks 标签页确认已声明时钟的规格:边沿敏感性、factor 和 phase 等
  5. 对有遗漏的时钟,在 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