在 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_clock、READY/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/下带axi、apb、ahb、obi等目录,例如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_tlm、ahb_tlm 之类 |
apb_pin_adapter、axi_pin_adapter 之类 |
简单说:TLM adapter 在事务层内部转格式,pin-level adapter 把事务层"落地"成波形可见的引脚时序。
典型使用场景
-
Verilated RTL 进 VP:RTL 用 Verilator 转成 SystemC 模块(全是 signal 端口),用 SCC 的 AXI pin-level adapter 接到 VP 的 TLM 互联上,RTL 当 golden reference 跑软件。
-
跨级验证:TLM 模型(如 RISC-V ISS 侧 TLM 内存访问)↔ pin adapter ↔ AXI RTL 核,做 TLM-vs-RTL 一致性比对。
-
逐步细化:早期全平台 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 看代码。
核心仓库与文档
-
SystemC-Components (SCC) GitHub :GitHub - Minres/SystemC-Components: A SystemC productivity library: https://minres.github.io/SystemC-Components/ · GitHub (Apache-2.0,C++11 起,轻量 SystemC/TLM-2.0 生产力库)
-
SCC 在线文档(GitHub Pages) :SystemC-Components (SCC) | SystemC-Components (完整 API、adapter 列表、tracer/sc_register/tlm_target 用法)
-
MINRES 开源总页 :MINRES Technologies GmbH -- Empowering Better SoC Design (SCC / TGC-VP / CoreDSL / SCViewer 入口)
SCC 内部和 pin-level adapter 相关的路径
clone 后重点看这几个目录:
-
适配器源码:
src/下按协议分目录,如axi/、apb/、ahb/、obi/,pin-level adapter 类通常命名含pin_adapter或pinlevel(如 APB pin-level adapter 在src/apb/附近,AXI/ACE 在src/axi/) -
示例:
examples/ace-axi/ace_axi_example、examples/axi-axi/axi_axi_example、examples/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 都在库内
配套/相邻开源库(同生态,常一起用)
-
TGC-VP (RISC-V VP,submodule 形式引用 scc):GitHub - Minres/TGC-VP: The Scale4Edge ecosystem VP · GitHub
-
RISCV-VP (另一 RISC-V VP 参考平台,把 scc 作 submodule):GitHub - Minres/RISCV-VP · GitHub
-
VPV-Per (SystemC/TLM-2 外设库,UART/SPI/GPIO/QSPI 等,常被 SCC 平台复用):在 MINRES 开发者页提到,随 TGC-VP 导入 Developer Resources -- MINRES Technologies GmbH
-
SCViewer (看 FTR/SCV trace 波形):GitHub - Minres/SCViewer: Online documentation can be found at https://minres.github.io/SCViewer/ · GitHub ,文档 https://minros.github.io/SCViewer/
-
DBT-RISE-RISCV / TGC-ISS (ISS 侧,走 TLM socket 接 SCC router/adapter):GitHub - Minres/DBT-RISE-RISCV: An instruction set simulator based on DBT-RISE implementing the RISC-V ISA · GitHub 、TGFS/TGC-ISS - TGC-ISS - MINRES Technologies
-
SystemC-Quickstart (CMake 跳板模板):GitHub - Minres/SystemC-Quickstart: A simple C++ CMake project to jump-start development of SystemC models and systems · GitHub
构建与依赖注意(避免踩坑)
-
依赖 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」的端口绑定。