- 差异参考
- 按模块查阅
- TLM
TLM
常规 port/export/imp 连接 API 保持,基础传输已有双库实测。优先检查 FIFO 清空、GP extension 比较与打包格式:目标 VCS 上已复现 FIFO 残留和 GP 漏检。socket 基类、查询容器及 uvm_tlm_time 别名按实际用法核对。
建议阅读顺序
先检查 FIFO 清场、GP extension 比较和跨边界位流,再处理端口查询签名;不要以正常完成一次传输替代这些检查。
M08-001 → M08-002 → M08-003 → M08-011
用户接口与行为
| 条目 | 修改方案 |
|---|---|
| M08-001 | uvm_tlm_fifo::flush() 不再向 get_ap 广播,VCS 两项队列实测存在残留(S9) 高风险 · 静默/数据在已确保没有并发 producer / 阻塞 consumer 的复位或清场边界,使用 while (fifo.try_get(item)) 排空并断言 fifo.used()==0 ;该公开方法将 mailbox 返回值归一成 bit,且保留 get_ap 广播。若刻意不需要广播,应在用户派生类中实现明确的排空策略并单独验证。并发场景须先停止参与方,不可仅将 flush 换成循环后宣称等价。 |
| M08-002 | uvm_tlm_generic_payload::do_compare() 全面重写 高风险 · 静默/数据使用 extension 的 scoreboard 显式检查两侧键集合,并逐项比较每个 extension,结果与 GP 基本字段比较共同决定匹配。 semantic_probe.sv 的 extensions_equal() 演示了派生 GP 访问受保护集合的方案;实际环境也可对已知 extension 类型逐项检查。依赖日志的断言同步核对消息 ID、数量和 severity;不能仅凭 compare 输出安静就判断相等。 |
| M08-003 | uvm_tlm_generic_payload do_pack/do_unpack 无条件打包 m_dmi,打包流布局变化 高风险 · 静默/数据跨版本交换时升级两端契约或显式保留旧格式;更换 compat packer 不会撤销 GP 自身新增的 m_dmi。 serialization_probe 中相同 GP 在 compat packer 下仍由 240 位变为 241 位,1.2 默认流不携带 DMI 状态。两版已有的预分配 data 数组解包风险也应核对 UVM_TLM_GP_BUF_OVERFLOW_FIX ,不要仅凭同版闭环就免测。 |
| M08-004 | 派生 TLM FIFO 的字段自动配置默认停止 高风险 · 静默/数据 其他行为变化需要维持派生字段自动赋值时,在派生 FIFO 中 override virtual function bit use_automatic_config() 并返回 1;已有 build_phase 仍须保留业务逻辑和所需的 super 调用。未依赖派生字段自动配置的普通 FIFO 传输无需为本条改写。字段 FLAG 的使能方式另按 M09-002 核对。 |
| M08-005 | kill 阻塞 get 进程后,FIFO 的 can_get() 恢复 其他行为变化先在实际阻塞 get 被 kill 的流程验证后续 can_get/get 能恢复,再移除针对旧计数泄漏的补偿;FIFO 清场另按 M08-001 验证,不能由本条推断 flush 已无风险。 |
| M08-006 | TLM2 socket 基类全部改为 virtual class 编译断点基类句柄可保留,构造对象改为对应具体 socket。阻塞发起端用 uvm_tlm_b_initiator_socket#(T),阻塞目标端用 uvm_tlm_b_target_socket#(IMP,T) 并提供实现 b_transport 的 IMP;非阻塞端使用 uvm_tlm_nb_initiator_socket / uvm_tlm_nb_target_socket 并实现相应方向的 nb_transport。透传端改用对应的 uvm_tlm_{b,nb} passthrough {initiator,target}_socket。保留原 payload/phase 类型参数和连接方向,不要只删除 _base 后忽略新增的 IMP 参数。 |
| M08-007 | uvm_tlm_time 更名 uvm_time,文件同步更名,库内保留 typedef 编译断点仅使用 uvm_tlm_time 类型时可保留声明。自行组织库文件的构建将 tlm2/uvm_tlm2_time.svh 引用改为 tlm2/uvm_tlm_time.svh;使用 VCS 内置库和 import uvm_pkg::* 的用户代码不必额外 include 该类文件,避免重复定义。 |
| M08-008 | TLM 组件的工厂创建与类型名 其他行为变化普通 FIFO 和 req_rsp 传输调用可保留;根据 transport_channel 的 get_type_name() 输出匹配日志时,改为目标 uvm_tlm_transport_channel #(REQ,RSP)。类型判断优先使用实际类型句柄或 $cast;采用新 factory 创建能力时验证 override 后对象身份和一次完整请求/响应。 |
| M08-009 | TLM 接口未实现错误消息文本变化 日志/调试变化日志正则若匹配旧文案需放宽(建议匹配消息 id 而非正文)。 |
| M08-011 | port.get_connected_to / get_provided_to 返回容器改为 port 句柄 编译断点将容器声明为与端口 IF 参数匹配的 uvm_port_base#(IF) list[string] ,并调整后续访问;若需要旧 proxy 容器,可经 port.get_comp() 调用其查询接口。 |
内部实现 · 1 项
文件组织、内部数据结构与实现钩子的变化。直接依赖内部接口时查阅,普通 API 的使用不需要重审这些源码。
| 条目 | 修改方案 |
|---|---|
| M08-010 | 无代码差异文件清单(已逐一核对,供核销) 无行为变化无 |
VCS 定制说明
VCS 定制说明
以下对照用于区分 VCS 定制与 Accellera 参照;需要迁移的事项以关联条目的条件、改法和验证为准。
| 定制项 | 两版状态 | 工程影响与入口 |
|---|---|---|
| Verdi 端口事务插桩 | 两版均有 UVM_IF_METHOD_BEGIN/END、METHOD2/METHOD5 宏及 UVM_VERDI_PORT_RECORD_TX | tlm1/tlm2 imp、analysis write 与 TLM 宏向 tr_database 上报;UVM_VERDI_NO_PORT_RECORDING 可关闭。Accellera 无此逻辑,实际后端录制另行验证。 |
| VCS_TLI_GP_PACKING | 两版都有条件打包,目标与旧版布局不同 | DMI 位重复及外部契约检查见 M08-003;补充区不另维护第二套打包改法。 |
| UVM_TLM_GP_BUF_OVERFLOW_FIX | 两版保留 | 影响解包数据循环;预分配数组边界与 M08-003 一起检查。 |
| UVM_CREATE_OPT | 旧 extension/channel 的 create 条件保护在目标移除 | 对象构造需结合实际工厂路径核对,见 M09-003;不据此要求全部 TLM 调用改写。 |