origen-sdk - 通过手动控制覆盖时钟引脚,然后再次计时

标签 origen-sdk

当设备的 SWD_CLK 引脚被共享为“设备启动模式”引脚(ROM/闪存启动等)时,出现了一个有趣的问题。规范规定,SWD_CLK 在用作 SWD_CLK 之前应保持高电平一段时间。

origen_swd 插件将时钟驱动为高电平以“启用”它,因此该引脚的时间设置必须为“返回低电平”才能计时。但是,当我尝试将其推高并保持在高水平时,它开始计时。有没有办法禁用时间设置一段时间,然后在准备好后重新启用它?

解决方法是更改​​ origen_swd 以接受驱动高电平或驱动低电平的选项以启用,然后更改应用程序中的时间设置以返回高电平。

使用元编程来获取和编辑时间集的实例变量也可能是一种解决方案,但是是否有受支持的 API 来处理上述任务?

谢谢

最佳答案

实现这一点的方法是为给定引脚设置两个定时选项,一个具有返回低电平,一个不具有返回低电平。

tester.set_timeset "mode_entry", 40

pin(:swd_clk).drive!(1)

# Sometime later once in mode

tester.set_timeset "func_swd", 40

如果测试仪支持(例如 V93K),您还可以在同一时间设置内为引脚定义多个波形,如本指南部分末尾所示 - http://origen-sdk.org/origen/guides/pattern/timing/#Complex_Timing

然后您只需选择一个时间设置并在引脚上控制所需的波形,如下所示:

pin(:swd_clk).drive!(1)    # Would be defined in the timing as always high

pin(:swd_clk).drive!('P')  # Now start the clk pulse

这两种方法都适用于生成的 ATE 模式,但是在撰写本文时,我认为 OrigenSim 尚不支持第二种方法,因此您必须使用多个时间集。

顺便说一句,您听起来好像只是在寻找一种可在模拟中工作的解决方案,而不一定需要在最终的 ATE 模式中具有两种类型的波。

在这种情况下,您也可以尝试戳测试台的引脚驱动器力数据位,尽管我还没有尝试过:

tester.simulator.poke('origen.pins.swd_clk.force_data[1]', 1);

如果您成功做到了这一点,我们应该考虑添加一个方便的 API 来在模拟中执行此类操作:

pin(:swd_clk).force!(1)

关于origen-sdk - 通过手动控制覆盖时钟引脚,然后再次计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49882049/

相关文章:

origen-sdk - 在规范测试中切换测试仪

origen-sdk - 访问/使用默认流程方法

origen-sdk - 有没有办法将 if_enable 配置为始终通过或有条件地删除变量检查?

origen-sdk - 如何使用output_inhibited?

origen-sdk - 如何根据封装处理不同的引脚名称

origen-sdk - Origen 支持寄存器别名吗?

origen-sdk - 子 block 基址覆盖?

origen-sdk - 将参数传递给非硅子 block /助手的约定