我添加了一些芯片模式如下:
add_mode :mode1
add_mode :mode2
当我将 DUT 模式设置为 :mode1 时,我想让一些时钟改变它们的设置点。
with_mode :mode1 do
clocks(:clk1).setpoint = 1.0.Ghz
clocks(:clk2).setpoint = 1.2.Ghz
end
with_mode :mode2 do
clocks(:clk1).setpoint = 2.0.Ghz
clocks(:clk2).setpoint = 2.4.Ghz
end
我的预期是,当 DUT 芯片模式设置为 :mode1 或 :mode 2 时,时钟值会发生变化。但似乎这些代码块的执行与 DUT 芯片模式无关。
时钟最终被设置为第二个 with_mode 代码块中的值。有没有办法定义仅在设置模式时才执行的模式相关操作?
** 编辑 **
使用此文档作为模型,我将 on_mode_changed 回调添加到origen/model.rb 文件,如下所示:
# Set the current mode configuration of the current model
def current_mode=(id)
@current_mode = id.is_a?(ChipMode) ? id.id : id
Origen.app.listeners_for(:on_mode_changed).each do |listener|
listener.on_mode_changed(mode: @current_mode)
end
@current_mode
end
alias_method :mode=, :current_mode=
当我设置断点时,在设置模式之后,我确实看到模式发生了变化,并且 DUT 响应了回调方法,但没有调用回调方法。
这是 DUT 范围内的回调方法:
def on_mode_changed(options)
binding.pry
puts 'found callback method'
return if options[:mode].nil?
end
** 更新 **
代码在上面工作,谢谢!


