Repository navigation
zh reference signal config
Makiras edited this page Oct 24, 2026
·
1 revision
头文件:xsignal_cfg.h。XSignalCFG 将名称、位宽、原生内存偏移映射为 XData,并可创建只读常量或表达式信号。它使用已有内存布局,不负责申请 DUT 内存或从 RTL 推导地址。
variables 支持列表或嵌套映射,例子见 列表配置 和 映射配置。
variables:
- name: Top.data
type: SData
offset: 0
mem_bytes: 2
rtl_width: 16| 字段 | 含义 |
|---|---|
| name | 列表模式的名称;映射模式由嵌套 key 拼成名称 |
| offset | 相对于 base_address 的字节偏移 |
| mem_bytes | 一个元素的存储长度,数组下标使用它作为 stride |
| rtl_width | RTL 位宽;1 会创建 width=0 的 scalar XData |
| array_size | 数组元素数量 |
| type | 布局类型说明;不能靠它覆盖 BindNativeData 的内存约定 |
| API | 用途与约束 |
|---|---|
XSignalCFG(path_or_yaml, base_address=0) |
接受存在的文件路径或 YAML 字符串,第一次查询/构造时解析。 |
NewXData(name, xname="") |
创建并绑定信号,失败可返回 nullptr;C++ 调用方管理返回对象。 |
NewXData(name, index, xname="") |
数组元素地址为 base + offset + mem_bytes*index,调用方核对索引和实际存储范围。 |
NewXDataArray(name, xname="") |
创建 array_size 个信号,C++ 返回 shared_ptr vector。 |
GetSignalNames(pattern="") |
列出名称;pattern 按名称子串筛选。 |
At(name);operator[]
|
原生布局查询;不存在时 is_empty=true,Python 包装成 None。 |
Address(name) |
返回 base+offset;先核对 At 的存在性,不能用这个结果判断信号是否存在。 |
String() |
输出布局和元数据说明。 |
cfg_data/cfg_base_address |
配置与基地址;解析后修改字段不会重新加载,换布局时创建新对象。 |
import ctypes
import xspcomm as xs
memory = ctypes.c_uint16(0x1234)
config = xs.XSignalCFG("""
variables:
- name: Top.data
type: SData
offset: 0
mem_bytes: 2
rtl_width: 16
""", ctypes.addressof(memory))
signal = config.NewXData("Top.data")
assert signal is not None
assert signal.U() == 0x1234
signal.ImmSet(0x55)
assert memory.value == 0x55memory 必须比所有绑定它的信号活得更久。相对地址、mem_bytes 与位宽应与实际模拟器布局匹配,尤其不能将窄 C 对象当成任意宽 word 数组。
可选 signals 列表的条目使用 name/kind,并按类型提供 rtl_width、offset/mem_bytes、expr 或 value 等字段:
- kind=direct:可直接绑定的原生布局,仍需要 offset/mem_bytes/rtl_width。
- kind=const:解析 value 字符串并通过 BindConst 创建只读信号,数值求值范围为 64 bit。
- 其他派生条目:使用 expr 创建 ExprEngine,并通过 BindExpr 读出结果。source/deps 是元数据,不能仅填 source 就假定它自动产生一个 alias 表达式。
派生信号继承 ExprEngine 的数值范围和语法限制,不提供任意 C++ 表达式解释。出现依赖环或表达式解析失败时,NewXData 报错并返回 nullptr。s_xsignal_cfg/s_xsignal_meta 分别描述原生布局和派生元数据;At 主要面向前者。
来源 / Source: https://github.com/XS-MLVP/xcomm. 内容在主仓库维护 / Content is maintained in the source repository.