用手动控制覆盖时钟引脚,然后再次计时

时间:2018-04-17 15:26:21

标签: origen-sdk

一个有趣的问题是设备的SWD_CLK引脚被共享为设备引导模式'引脚(ROM / Flash引导等)。该规范规定SWD_CLK应在保持高电平一段时间后才能作为SWD_CLK运行。

origen_swd插件将时钟驱动为高电平以启用'它,所以这个引脚的时间必须是“返回低”#39;为了时钟。但是,当我试图将其拉高并保持高位时,它开始计时。有没有办法在一段时间内禁用时间集,然后在准备好后重新启用它?

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

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

由于

1 个答案:

答案 0 :(得分:2)

这样做的方法是为给定的引脚设置两个时序选项,一个用于返回低电平,一个用于没有。

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模式中使用两种类型的波。

在这种情况下,您也可以尝试戳一下测试平台的pin驱动程序强制数据位,但我还没试过这个:

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

如果你取得了成功,我们应该考虑在模拟中添加一个便利API来做这种事情:

pin(:swd_clk).force!(1)