程序生成器If / Else流量控制

时间:2017-09-08 21:19:09

标签: origen-sdk

我正在尝试使用if和else分支在93k上创建一个具有不同操作的流。到目前为止,我发现的最接近的事情是测试传递和失败,尽管这会产生两个不同的比较节点和空的else块:

  if_passed :some_test_id do
    bin 10
  end
  if_failed :some_test_id do
    bin 11
  end

转换为:

  if @SOME_TEST_ID_PASSED == 1 then
  {
    stop_bin "", "fail", , bad, noreprobe, red, 10, over_on;
  }
  else
  {
  }
  if @SOME_TEST_ID_FAILED == 1 then
  {
    stop_bin "", "fail", , bad, noreprobe, red, 11, over_on;
  }
  else
  {
  }
  {

我正在寻找的东西看起来更像是这样:

  if @SOME_TEST_ID_PASSED == 1 then
  {
    stop_bin "", "fail", , bad, noreprobe, red, 10, over_on;
  }
  else
  {
    stop_bin "", "fail", , bad, noreprobe, red, 11, over_on;
  }

有没有办法生成这种类型的流程结构?

1 个答案:

答案 0 :(得分:1)

对于您展示的那种示例,这是建议的编码方式:

test :test1, id: :t1

bin 10, if_passed: :t1

bin 11, if_failed: :t1

在Origen源代码级别上,这非常清晰易于查看。事实上,这将产生独立的T1_PASSEDT1_FAILED分支,这可能不符合您的口味,但它在逻辑上是正确的,这是主要的。

我们这样做的原因是因为在93K上产生输出的内部表示更容易针对基于行的Teradyne平台而且不具备if / else的概念逻辑。因此,您可以获得的好处是,您可以在Origen中表达的任何内容都可以为两个平台进行编译,但如果您只需要V93K,则可能没什么安慰。

通常情况下,您使用Origen的次数越多,那么您对生成的实现的关注就越少,类似于您在C中编写嵌入式代码时如何真正关心生成的程序集。 但是,如果在测试仪上进行调试时生成的代码更容易理解,那么我们总是努力使生成的输出更清晰。

说了这么多,有一个低级API可以接近你想要的。 您可以手动实现这样的标志:

test :test1, on_fail: { set_flag: :my_flag }, continue: true

if_flag :my_flag do      
  bin 10           
end

unless_flag :my_flag do  
  bin 11
end

这会产生这样的结果:

run_and_branch(test1)
then
{
}
else
{
  @MY_FLAG = 1;
}
if @MY_FLAG == 1 then
{
  stop_bin "", "fail", , bad, noreprobe, red, 10, over_on;
}
else
{
}
if @MY_FLAG == 1 then
{
}
else
{
  stop_bin "", "fail", , bad, noreprobe, red, 10, over_on;
}

这稍微好一些(从所需的输出角度来看)因为我们归结为一个标志,但是我们仍然有两个相邻的条件可以/应该折叠成一个。

我们实际上已经有一个问题:https://github.com/Origen-SDK/origen_testers/issues/43

有趣的是,我今晚早些时候看到它,尚未实施,但很快就会实现。

此时输出将为:

run_and_branch(test1)
then
{
}
else
{
  @MY_FLAG = 1;
}
if @MY_FLAG == 1 then
{
  stop_bin "", "fail", , bad, noreprobe, red, 10, over_on;
}
else
{
  stop_bin "", "fail", , bad, noreprobe, red, 11, over_on;
}

我再说一遍,有意识地构造Origen源只是为了得到一个特定的输出并不是真的应该这样做的方式,但在这种情况下,源代码通过更明确一点来解决它并不复杂它。