← SVIP demo · 文档与示例快照 · 运行库、历史验收记录及仿真日志未打包 · 阅读范围说明
SVIP · JTAG 0.2.0

syan · master / passive / device · chain helper · VCS / UVM1.2

SVIP JTAG 架构与时序契约

Author: syan

核心结构

sequence helper / user sequence
  optional chain.pack_ir/pack_dr (physical TDI -> TDO topology)
             |
     standard UVM sequencer
             |
driver: stage -> callback -> freeze -> validate -> execute -> terminal
             |                          |
        TAP owner                  serial bit_cycle
             |                          |
             +---------- pins ----------+
                           |
             four-state pin monitor (independent TAP model)
                |                    |
             event_ap             scan_ap
                +----- checker / tracker / coverage / user subscriber

top-level svip_jtag_sva: pin-only rules, independently instantiated
external reset_n & commanded trst_n -> effective reset -> interface epoch

optional device (separate TDO owner, no shared driver TAP state):
  TCK/TMS/TDI -> Capture/Shift -> ring buffer -> Update -> user register hooks
                            \-> negedge + tco -> TDO (reset generation guard)
  passive agent on these pins -> existing tracker / coverage / SVA

设计取舍

保留OCAH的TAP表/BFS、串行scan路线、最后一位TMS和原始引脚观察思路。TAP导航状态从sequence收拢到driver,sequence不保存权威模型。fresh scan维持RTI前置条件;resume仅从同种Shift/Pause恢复。raw/navigation可到其他状态,显式控制可能发生的Update。

命令不做异步接纳队列,不修改UVM sequencer内部握手。正常完成、拒绝、X结果和复位中止统一终结;每笔get_next_item对应一次item_done。callback先操作staging,再深拷贝执行;post/AP不再拥有修改执行状态的权限。

一个bit的事件顺序

TCK low: optional clock hold, then wait drive_delay
         TMS/TDI <= value
         wait selected_t_low - drive_delay; recheck clock hold
         sample TDO if sample_delay == 0 (value from preceding fall)
         TCK <= 1       <- DUT captures/shifts; monitor retains pre-shift sample
         if sample_delay > 0: wait sample_delay, sample current TDO
         wait selected_t_high - sample_delay
         TCK <= 0       <- DUT Update/TDO; monitor commits pending scan
         settle NBA

package和interface使用1ps单位/精度。未采样的rx尾部不可使用。采样通过引用写入工作结果,任务取消不会丢失已经采到的位。模拟器不能取消已排队NBA,reset结束执行分支后先等NBA,再压安全idle。

reset与观察

interface依据真实effective reset边沿生成epoch。monitor在posedge保存四态样本,在同一时刻NBA后确认reset/epoch,再发布STEP,不把旧STEP留到下一fall。异步reset丢弃pending Update并发布已有scan的abort,下一epoch从TLR开始。Update scan只在实际下降沿、reset未生效且epoch一致时提交。

外部reset对在飞命令优先;命令自己的TRST不自中止。abort无法撤销此前的DUT Update。TCK停止时仍观察异步reset;idle期间的reset会在下一笔命令前同步driver状态。软件恢复TMS5也可从未知状态收敛。

资源与扩展

TMS5是串行协议路径,不是异步取消。它可能在TLR前经过Update,不能用来保证撤销部分scan;引脚reset epoch仅由真实effective reset切换。

动态数组是payload的唯一权威表示。64bit仅是scalar helper和日志摘要容器;TAP的16态/32出边是协议常数。passive scan超过max_scan_bits时只保存前缀,报告一次资源错误,输出n_shifted/truncated,不伪装成完整scan。

P1不建立通用transport或chain调度器。chain helper按物理TDI到TDO顺序配置、反序节点拼装,节点内仍LSB-first;动态宽度拒绝静默截断。device围绕Capture/Shift/Update扩展,Shift为环形存储,业务register持有存储与零时间hook;独立manual master和literal RTL chain提供oracle。DMI/JTAG2AXI等业务协议留在独立层。

分段scan的DONE表示本段采样与声明结束态已完成,不自动表示已Update;查看update_seen或最终monitor scan。dwell只允许TLR/RTI/Pause;clock_hold不改变TAP,外部reset仍优先中止。默认固定时序不额外消耗RNG,随机范围与offset在命令开始冻结。

TDO expected/mask属于用户显式业务比较,只有采样完成的命令执行比较,不改变monitor/SVA的四态检查;X_RESPONSE优先。tracker同时记录resume、请求结束态、compare开关和mismatch数量。FSDB直接导出,波形格式进入编译身份,runner核验实际文件;settled波形与原生NBA/reset断言共同使用。

Pin SVA在上升沿锁存pre-edge Shift窗口,TDI/TDO的高相检查包括最后一位进入Exit1后的高相,不会因更新后的state漏检;Capture进入Shift的合法相邻窗口也单独验证。known properties保持原上升沿采样锚点,同沿NBA毛刺通过原生用例资格确认。