You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python变量间接赋值实现及cocotb中DUT批量赋值需求咨询

Python实现间接变量赋值及Cocotb中DUT信号批量赋值方案

1. Python中是否支持间接赋值?

当然可以,分两种常见场景:

  • 全局/局部变量场景:如果操作全局变量,可通过globals()字典实现,比如:
    x = "a"
    globals()[x] = 2  # 等价于 a = 2
    
    但这种方式不推荐,容易降低代码可读性、引发变量污染问题。
  • 对象属性场景:这是更常用且规范的方式(也是你Cocotb场景需要的),用setattr()函数实现,专门用于给对象的指定属性(以字符串形式指定名称)赋值。

2. Cocotb中批量给DUT信号赋值的正确写法

你给出的示例代码里,self.bfm.sig = 1是错误的——这里的sig只是循环中的字符串变量,Python会直接给self.bfm新增一个名为sig的属性,而非你目标中的sig_1/sig_2。

用setattr()就能解决这个问题,修正后的代码:

for sig in ["sig_1", "sig_2"]:
    setattr(self.bfm, sig, 1)

这个写法的核心是:setattr(self.bfm, sig, 1)会将self.bfm对象中,名字与sig字符串值一致的属性设置为1,完全符合你“通过字符串变量间接赋值”的需求。

如果需要读取这类属性,对应使用getattr(self.bfm, sig)即可。

在Cocotb中,DUT的信号、自定义BFM的属性本质都是Python对象的属性,所以setattr()/getattr()完全适用,非常适合批量遍历信号名做赋值或读取操作。

内容的提问来源于stack exchange,提问作者Somesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:55:57