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毛刺通过原生用例资格确认。