仿真边界处理

在 MINRES 的 SystemC-Components (SCC) ​ 这套轻量级 SystemC/TLM-2.0 生产力库里,pin-level adapter(引脚级适配器) ​ 是和 TLM adapter(事务级适配器) ​ 并列的一类总线边界桥接组件,专门解决「TLM 事务世界 ↔ RTL/Verilated 信号的 sc_signal 世界」之间的语义转换。

它要解决什么问题

现代混合抽象级仿真里常见这种边界:

  • 虚拟平台一侧:CPU/VP/内存控制器走 TLM-2.0 socket ,一次 b_transport / nb_transport 表示一个读写事务,不关心时钟沿。

  • 被集成的 IP 一侧:AXI/APB/AHB 的 Verilated RTL ​ 或手写 cycle-accurate SystemC,端口全是 sc_in/sc_out<sc_bv<>>sc_clockREADY/VALID/ADDR/DATA/WSTRB 这种逐周期 pin 信号。

两边不能直接连。pin-level adapter 就坐在边界上做双向翻译:

  • TLM → pin :把一次事务拆成若干周期的协议握手,驱动 AW*、AR*、W*、R*、B* 等信号;

  • pin → TLM:采样 RTL 侧信号跳变,在协议握手完成时收拢成一次 TLM generic payload,转发给 TLM 网络。

SCC 里的具体形态

SCC 明确内置了「各种 TLM-2.0 AT 和 pin-level adapters,覆盖 APB、AHB、AXI/ACE、OBI 等常见总线」。

  • 代码位置:仓库 src/ 下带 axiapbahbobi 等目录,例如 examples/apb-axi 里有 APB pin-level adapter 示例,commit 历史能看到 "adds APB pinlevel adapter" 这类改动。

  • 典型搭配:

    • tlm_target + sc_register + router:纯 TLM 侧资源端点

    • *-pin-adapter / *-tlm-adapter:协议边界

    • Verilated module 的 sc_signal 端口 ←→ pin-level adapter ←→ TLM socket ←→ 其余 VP

  • 抽象级别:pin-level adapter 本身是 cycle-aware​ 的(跟时钟同步、按协议时序产生/采样信号),但对外仍露出 TLM socket,所以平台上层可以继续用 LT/AT 模型,不必关心 RTL 细节。

和 TLM adapter 的区别

维度 TLM adapter (AT/LT) pin-level adapter
两侧接口 TLM socket ↔ TLM socket(或 TLM ↔ sc_register) TLM socket ↔ sc_signal 总线引脚
是否懂时钟 否 / 仅 AT 有粗略时序标注 是,按协议逐周期驱动/采样
主要用途 TLM 模型之间换抽象级、接 router/tlm_target 包 Verilated RTL、RTL IP、cycle-accurate SystemC
SCC 中例子 axi_tlmahb_tlm 之类 apb_pin_adapteraxi_pin_adapter 之类

简单说:TLM adapter 在事务层内部转格式,pin-level adapter 把事务层"落地"成波形可见的引脚时序

典型使用场景

  1. Verilated RTL 进 VP:RTL 用 Verilator 转成 SystemC 模块(全是 signal 端口),用 SCC 的 AXI pin-level adapter 接到 VP 的 TLM 互联上,RTL 当 golden reference 跑软件。

  2. 跨级验证:TLM 模型(如 RISC-V ISS 侧 TLM 内存访问)↔ pin adapter ↔ AXI RTL 核,做 TLM-vs-RTL 一致性比对。

  3. 逐步细化:早期全平台 LT 仿真;某个 IP 换成 RTL 时,只在该 IP 边界加 pin-level adapter,其余 TLM 模型不动。

接入时要注意的点

  • pin-level adapter 引入周期精度开销,比纯 TLM 慢,但比在 C++ 里手搓 AXI 握手逻辑省事且不易错。

  • 时钟和复位要由平台提供并绑到 adapter 的 clk/rstn 上,否则握手不推进。

  • 协议选项(数据位宽、突发支持、OBI 的 prot/we 语义等)通常做成模板参数或构造参数,选错会导致 RTL 侧解码异常。

  • SCC 是 Apache-2.0、C++11 起、依赖 Accellera SystemC + 可选 SCV,adapter 头文件直接 include 即可,不需单独编译成独立 lib(属于 SCC 主体一部分)。

下面把 MINRES SCC 及相关开源库的官方连接、文档站、关键源码/示例路径一次性列清,方便你 clone 和对照 pin-level adapter 看代码。

核心仓库与文档

SCC 内部和 pin-level adapter 相关的路径

clone 后重点看这几个目录:

  • 适配器源码:src/ 下按协议分目录,如 axi/apb/ahb/obi/,pin-level adapter 类通常命名含 pin_adapterpinlevel(如 APB pin-level adapter 在 src/apb/ 附近,AXI/ACE 在 src/axi/

  • 示例:examples/ace-axi/ace_axi_exampleexamples/axi-axi/axi_axi_exampleexamples/apb-axi/(APB pin-level adapter 示例在 commit 历史里有 "adds APB pinlevel adapter" 痕迹)

  • 协议覆盖:APB、AHB、AXI/ACE/ACE-Lite、OBI(target)、OCP(target)、TileLink(UH initiator) 的 TLM AT 与 pin-level adapter 都在库内

配套/相邻开源库(同生态,常一起用)

构建与依赖注意(避免踩坑)

  • 依赖 Accellera SystemC(建议 2.3.4+,编译 SystemC 时 SC_WITH_PHASE_CALLBACK_TRACING=ON),SCC 自身 cmake 可用 conan 或 contrib/install_wo_conan.sh 一键装 SystemC+Boost+SCC。

  • SCC 和 SystemC 必须装到不同 prefix ------SCC 把 C++ namespace 映射成目录,tlm/ 目录会和 SystemC 自带 tlm header 冲突。

  • 典型编译:

    cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<scc_prefix>
    cmake --build build -j16
    cmake --build build --target install
    ./build/examples/ace-axi/ace_axi_example

如果要把 Verilated AXI RTL ​ 接进 SCC 平台,可以按 examples/axi-axi 的骨架,把「TLM initiator → axi_tlm_adapter / axi_pin_adapter → sc_signal<sc_bv<>> → Verilated module」的端口绑定。

相关推荐
星空露珠3 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
码云数智-大飞3 小时前
PHP 接口开发规范:统一返回格式、异常处理与参数校验
开发语言·php
浮江雾3 小时前
Flutter第十七节-----路由管理(3)
android·开发语言·前端·javascript·flutter·入门
admin and root3 小时前
「移动安全」安卓APP 反编译&frida脱壳技巧分享
android·开发语言·python·web安全·微信小程序·移动安全·攻防演练
踏月的造梦星球4 小时前
DM8 DSC 单机双实例部署
运维·开发语言·数据库
An_s4 小时前
c++对接pdfium(一)win系统篇
开发语言·c++
Zwarwolf4 小时前
Rust零散知识点项目汇总
开发语言·rust
-银雾鸢尾-4 小时前
C#中HashTable相关方法
开发语言·c#
茯苓gao4 小时前
嵌入式开发笔记:Qt信号槽机制深度解析——从原理到实战的全方位指南
开发语言·笔记·嵌入式硬件·qt·学习