AIGC标识 定向测试(一)

SystemC 写的 TLM 一般指 Transaction-Level Modeling,事务级建模

它不是在信号级别一根线一根线地描述硬件,而是用更高层的“事务”来描述模块之间的通信。比如不用写:

addr valid ready data write_en byte_en ...

而是直接抽象成一次事务:

read(address)
write(address, data)

或者更正式一点:

tlm_generic_payload trans;
trans.set_command(tlm::TLM_READ_COMMAND);
trans.set_address(0x80000000);
trans.set_data_ptr(buf);
initiator_socket->b_transport(trans, delay);

这里的一次 b_transport 就代表一个总线读/写事务。

SystemC 是语言/库,TLM 是建模抽象层。

关系大概是:

C++ 
  ↓
SystemC:用 C++ 写硬件/系统模型,提供 module、port、signal、process、simulation kernel
  ↓
SystemC TLM:在 SystemC 上用事务级接口建模通信

比如你要建一个 CPU 访问 memory 的模型。

RTL/信号级可能关心:

clk
reset
addr[31:0]
wdata[31:0]
rdata[31:0]
valid
ready
write
byte_enable
burst
resp

TLM 级可以写成:

CPU 发起一个 write transaction 到地址 0x1000,写入数据 0x12345678
Memory 收到 transaction,修改内部数组

它牺牲一部分时序细节,换来更快的仿真速度和更高层的系统建模能力。

常见用途:

SoC 早期架构探索
软件开发/驱动 bring-up
虚拟原型 Virtual Platform
性能建模
和 RTL 联合仿真
UVM testbench 里的高层 reference model

TLM 常见有两个层次:

  1. Loosely-timed, LT

    只保留大概时间,速度很快。适合软件开发、系统功能验证。

  2. Approximately-timed, AT

    保留更多阶段时序,比如 request/response、begin/end transaction。比 LT 慢,但更接近总线行为。

典型 SystemC TLM 模块关系:

Initiator                         Target
   CPU  ---- transaction ---->     Memory
        <--- response --------

常用术语:

initiator:发起事务的一方,比如 CPU、DMA
target:接收事务的一方,比如 Memory、Peripheral
socket:TLM 通信端口
payload:事务内容,比如地址、数据、读写类型
transport:传输接口,比如 b_transport / nb_transport

一句话版:
SystemC 写的 TLM,就是用 C++/SystemC 以“读写事务”而不是“逐周期信号”的方式描述硬件系统,用来更快地仿真和验证 SoC/CPU/外设等系统行为。


SAT 是 Boolean Satisfiability Problem,中文一般叫 布尔可满足性问题

它问的是:

给定一个布尔逻辑公式,是否存在一组变量取值,使整个公式为真?

比如:

(a OR b) AND (NOT a OR c)

SAT 求解器要回答:有没有一种 a, b, c 的真假组合,让它成立。

有的话叫:

SAT / satisfiable / 可满足

没有的话叫:

UNSAT / unsatisfiable / 不可满足

例如:

a AND NOT a

这个永远不可能为真,所以是 UNSAT

而:

a OR b

只要 a=trueb=true,就是 SAT

在 EDA / 硬件验证里,SAT 很重要,因为很多验证问题最后都可以转成 SAT 或 SMT 问题。

比如你想问:

有没有一种输入序列,会让 assert 失败?

可以被转成:

存在某些输入,使得 bad_state = true 吗?

如果 SAT solver 返回:

SAT

说明存在反例,工具通常能给你一组输入波形,也就是 bug trace。

如果返回:

UNSAT

说明在当前约束和展开深度下,找不到违反条件的情况。

常见应用:

形式验证 formal verification
等价性检查 equivalence checking
模型检测 model checking
约束随机求解 constrained random
综合/优化中的逻辑推理

可以把 SAT solver 理解成一个很强的“逻辑侦探”:

输入:一堆布尔约束
输出:
  SAT   -> 找到一组满足条件的变量取值
  UNSAT -> 证明不存在这样的取值

和普通仿真的区别是:

仿真:
给定输入,看会发生什么

SAT/形式验证:
问工具是否存在某种输入,会导致某种情况

一个硬件例子:

assert (!(grant0 && grant1));

意思是 grant0grant1 不能同时为 1。

形式工具会把电路逻辑、时序展开、约束条件一起转成 SAT 问题,然后问:

是否存在某个时刻 grant0=1 且 grant1=1?

如果可满足,就说明 assertion 可能失败。
如果不可满足,就说明在给定范围/条件下这个错误不会发生。

一句话总结:
SAT 就是在问:这组布尔逻辑约束有没有解。它是很多形式验证、等价检查、模型检测和 EDA 自动化工具背后的核心问题。

posted @ 2026-07-14 17:19  江左子固  阅读(4)  评论(0)    收藏  举报